[Delphi] Problem z funkcja

0

Mam następującą funkcję:
[code]var
Form1: TForm1;
h,i:integer;
x,y,z:integer;
P,w,r:Integer;

implementation

function EnumWindowProc(uchwyt:HWnd;Pointer):boolean;stdcall;
var
winname,cname:array[0..144]of char;

begin
result:=true;
if getwindowtext(uchwyt,winname,144)>0 then
begin
if iswindowvisible(uchwyt)=true then
form1.listbox1.items.add(strpas(winname)); //jezeli okno jest widoczne to dodaj do listbox1
if iswindowvisible(uchwyt)=false then // jezeli okno nie jest widoczne to dodaj do listbox2
form1.listbox2.items.add(strpas(winname));
end;
end;
[/code]

robie sobie odwolanie w timerze

procedure Tform1.Timer1Timer(Sender: TObject);
var uchwyt:hwnd;
p:pointer;
begin
EnumWindowProc(uchwyt,p);
end;

hmm i nie działa, nie wiem dlaczego- a w koncu ma dodawac do listboxow dane

Dlaczego nie dodaje nic do listboxow ?? Co jest nie tak ??

0

Bożeee - funkcja nic nie dodaje, nie kasuje, nie pokazuje, NIC NIE ROBI!!!!! Ona ma tylko zwracać wartość RESULT!!!!!

0

Znalazlem na forum taka funkcje - a jezeli nie dodaje ani kasuje to w takim razie co robia zapisy typu :

form1.listbox1.items.add(strpas(winname));

hmmm ???

A jak ona ma sprawdzac te otwarte okna w systemie ????

funkcja nic nie dodaje, nie kasuje, nie pokazuje, NIC NIE ROBI! Ona ma tylko zwracać wartość RESULT!

jestes pewny ze funkcja nic nie robi ??? :) znam funkcje ktore wiele robia i to poza zwracaniem wartosci :) heheh

0

<font color="black"></span>
Freebird ma racje- funkcja może robić wiele ale z założenia musi zwracać jakąś wartość.

[cya] [cya] [cya]

0

...
procedure Tform1.Timer1Timer(Sender: TObject);
var uchwyt:hwnd;
p:pointer;
begin
EnumWindowProc(uchwyt,p);
end;
...

a czego uchwyt tu podajesz, bo nie wszystkie okna mają: winname

Freebird ma racje- funkcja może robić wiele ale z założenia musi zwracać jakąś wartość.

nie musi, zdecydowanie nie musi.

0

var
uchwyt : hwnd;
p : pointer;
begin
EnumWindowProc(uchwyt,p);
end;

Funkcjia nic nie robi bo nic do niej nie wprowadziłeś.
Zmienne uchwyt i p nie mają żądnych wartości.
(tzn. jakieś tam mają ale żadnych konkretnych
np. do uchwyt przypisz sobie uchwyt jakiegoś okna
a do p jakiś pointer tyle że ja już w Delphi długo pisze
i jeszcze ani razu nie używałem takiej zmiennej więc nie wiem
co to jest :-D , może mi ktoś wyłumaczy ???)

0

A tak jescze nie zauważyłem w OnTimer powinno być:
procedure Tform1.Timer1Timer(Sender: TObject);
begin
listbox1.Clear;
listbox2.Clear;
EnumWindows(@enumwindowproc,0); /// nie EnumWindowsProc(...
end;

0

<font color="green"></span>
nie musi, zdecydowanie nie musi.

<font color="black"></span>
Jak to?Jeżeli nie zwraca żadnej wartości to jest to procedura.
Jeżeli mylę się to proszę o przykład.

[cya] [cya] [cya]

0

<font color="green"></span>
nie musi, zdecydowanie nie musi.

<font color="black"></span>
Jak to?Jeżeli nie zwraca żadnej wartości to jest to procedura.
Jeżeli mylę się to proszę o przykład.

Zasadniczo funkcja, ktora nie zwraca wartosci jest procedura. Ale funkcje w Delphi mozna traktowac jak procedury - czyli wywolywac je bez przypisania - tak jak w pierwszym poscie. Wtedy wartosc zmiennej Result jest tracona i nie ma w tym nic zlego. Akurat w powyzszym przykladzie EnumWindowProc moglaby byc procedura i dla jasnosci nalezaloby tak ja nazwac. Ale funkcja nie musi zwracac wartosci. Mozna nawet nie przypisywac nic do zmiennej Result, np

function X : Integer;
begin
ShowMessage('ala ma kota');
end;

skompiluje sie (z ostrzezeniem '[Warning] Unit1.pas(29): Return value of function 'X' might be undefined') i zadziala.

0

a do p jakiś pointer tyle że ja już w Delphi długo pisze
i jeszcze ani razu nie używałem takiej zmiennej więc nie wiem
co to jest

Pointer, to wskaźnik do jakiegoś miejsca w pamięci, np. do funkcji, czy do jakiegoś obiektu. Poczytaj artykuł o wskaźnikach na 4programmers :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1