Entwickler-Ecke
Windows API - [nonVCL] - Wie ohne TNotifyEvent eine Procedure aufrufen ?
turboPASCAL - Di 28.07.09 08:49
Titel: [nonVCL] - Wie ohne TNotifyEvent eine Procedure aufrufen ?
Hi,
wie stell man es an wenn man in einer Procedure eine Schleife hat, in der es eine Prozentberechnung gibt diese Global
auszulesen ohne globale Variablen zu verwenden ?
Der Grund ist ich habe kein TNotifyEvent im nonVCL und möche die Prozentwerte aus der Schleife.
Beispiel:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure ProzentWerte(p: integer); stdcall; begin writeln(p + '% geschrieben'); end;
procedure Main... begin MachWas(X,Y, @ProzentWerte); end; |
So klappts irgend wie nicht:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure MachWas(X,Y: Byte; percentDone: pointer); begin while ... do begin if @percentDone <> nil then percentDone(xyz); end; end; |
Tastaro - Di 28.07.09 08:58
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure ProzentWerte(p: integer); stdcall; begin writeln(p + '% geschrieben'); end;
procedure Main... begin MachWas(X,Y, ProzentWerte); end; |
Einen Typ für deine Prozedur basteln:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| type tmyproc = procedure(xyz: integer);
procedure MachWas(X,Y: Byte; percentDone: tmyproc); begin while ... do begin if assigned(percentDone) then percentDone(xyz); end; end; |
Beste Grüße
Gausi - Di 28.07.09 08:59
Oder du könntest per SendMessage eine Nachricht an das Hauptfenster schicken. Im wParam und lParam kannst du zwei Parameter reinpacken. Da SendMessage erst dann zurückkehrt, wenn die Nachricht abgearbeitet ist, ist der erreichte Effekt mit denen von Events identisch.
(Da es bei WinAPI drin ist, nehme ich an, dass du kein Konsolenprogramm schreibst.)
turboPASCAL - Di 28.07.09 09:24
@Tastaro, so habe ich es versucht. Das Problem ist in xyz in der Procedure ProzentWerte kommt nur Müll an. :gruebel:
@Gausi, für SendMessage brauche ich ein Windowhandle was ich in der Berechnungsunit nicht habe und oder übergeben möchte, weil
Aufrufende Programm oder was auch immer kein Fenster hat oder haben kann.
jaenicke - Di 28.07.09 09:27
turboPASCAL hat folgendes geschrieben : |
| Das Problem ist in xyz in der Procedure ProzentWerte kommt nur Müll an. :gruebel: |
Hast du zufällig in der Typdeklaration stdcall als Aufrufkonvention nicht drin und in der Deklaration der Prozedur schon? So ist es nämlich oben und das geht natürlich nicht. ;-)
Beides muss übereinstimmen, entweder beides stdcall oder beides nicht (letzteres wäre in Delphi ja üblich, wenn es nicht um DLLs geht).
Tastaro - Di 28.07.09 09:29
Hm, lass mal noch das stdcall weg. Vielleicht klappt das dann besser mit dir Parameterübergabe.
Beste Grüße
Tastaro
turboPASCAL - Di 28.07.09 09:37
@jaenicke, das war's.
Delphi-Quelltext
1: 2:
| type TOnProcess = procedure(percent: integer); stdcall; |
Sollte so aussehen. ;)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!