Autor Beitrag
Biarchiv
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 688



BeitragVerfasst: Mi 20.01.10 18:44 
Hallo,

hab ein Problem wegen der Verzögerung eines automatischen Labeldrucks per

ausblenden Delphi-Quelltext
1:
2:
Label1.OnClick(Self);
showmessage('Nur weiter wenn Label1 fertig ist!');


oder bei Eventclick

ausblenden Delphi-Quelltext
1:
2:
Image1click;
showmessage('Nur weiter wenn Label1 fertig ist!');


Das Problem ist das die Showmessage sofort aufgeht obwohl die Befehle die hinter dem Click sind noch einige Zeit brauchen. Bei

ausblenden Delphi-Quelltext
1:
2:
Button1.Click;
showmessage('Nur weiter wenn Label1 fertig ist!');


scheint es zu gehen.
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Mi 20.01.10 19:46 
wenn du uns verrätst was die Befehle sind die beim ButtonClick ausgeführt werden, können wir dir vielleicht sagen warum das so ist. Wir zb eine Apifunktion aufgerufen in deinem OnClick leitet dein Prozess das an einen anderen Prozess weiter und dein Prozess kann weiterarbeiten, während der andere Prozess das ausführt. Wird natürlich dann blöd wenn man eigentlich den anderen Prozess zum weiterarbeiten im eigenen Prozess braucht.

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
Biarchiv Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 688



BeitragVerfasst: Mi 20.01.10 20:57 
Hallo,

es sind mehr als 300 Zeilen Code. Der Click-Prozess muss Dateien bearbeiten. Es sind API und Delphi-Interne Befehle vorhanden. Der Vorgang ist verschieden und kann Sekunden oder Minuten dauern. Gibt es eine Möglichkeit einen Sleep mit Break in einem Timer oder so?
Niko S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 566
Erhaltene Danke: 10

Win 7, Ubuntu
Lazarus, Turbo Delphi, Delphu 7 PE
BeitragVerfasst: Mi 20.01.10 21:27 
Jetzt ne blöde Idee, aber du kannst doch alles was nach dem "Click" event kommt vor einer while schleife setzen..
ausblenden Delphi-Quelltext
1:
2:
while not (fertig) do
  ;


Dann würde er , solange fertig auf "false" ist, in der Schleife bleiben, bis er fertig ist.
Allerdings würde eventuell das Programm so einfrieren ;x
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 20.01.10 21:34 
Das ist dann alles keine Vorgehensweise wie es unter Windows üblich und sinnvoll ist, wenn man auf etwas wartet oder so.

Klar ist jedenfalls: Das OnClick wird komplett durchlaufen, denn sonst würde der Code nach dessen Aufruf ja nicht ausgeführt werden. Deshalb ist eben wie bereits user profile iconelundril sagte die Frage wodurch dieser Code dann offenbar teilweise asynchron weiterläuft, wenn du ja sagst, dass der dennoch nicht fertig ist.

Wenn eine längere Operation läuft, dann wird man normalerweise durch ein Ereignis von deren Ende benachrichtigt. Bzw. bei einer eigenen Aktion löst man selbst ein solches Event aus.

Und die Konstruktion ist so schon seltsam. Normalerweise sieht sowas so aus:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TfrmMain.DoSomething(Param: TParam);
begin

end;

procedure TfrmMain.LabelXClick(Sender: TObject);
begin
  DoSomething(MyParam);
end;

procedure TfrmMain.TimerXTimer(Sender: TObject);
begin
  DoSomething(MyParam);
end;
Denn gemeinsam genutzter Code gehört nicht in irgendein Event einer visuellen Komponente. So ist das übersichtlich und man kann die ausgelagerte Methode entsprechend benennen. ;-)