![]() |
Re: modales Fenster ohne Benutzerakt. selbst schliessen lass
Mein Problem jetzt ist aber, durch die WindowsMessage ist
das Modalresult immer 2!! Auch wenn ich es vorher auf (mrOK) setzte ... |
Re: modales Fenster ohne Benutzerakt. selbst schliessen lass
Er schliesst das Fenster nicht, wenn ich den Button drücke,
erst beim 2. mal drücken... komisch.. Ich habe die Steuervariable bUserCancel mit eingebaut, bringt aber auch nix... Irgendwo habe ich einen Denkfehler. |
Re: modales Fenster ohne Benutzerakt. selbst schliessen lass
Hallo,
wenn ich deine Vorgaben nehme, dann würde ich so vorgehen:
Delphi-Quellcode:
Freundliche Grüße
type
TBusyForm = class(TForm) Button1: TButton; private nTicks: Cardinal; FOnIdle: TIdleEvent; procedure OnIdle(Sender: TObject; var Done: Boolean); public function Execute: Boolean; end; var BusyForm: TBusyForm; implementation {$R *.dfm} function TBusyForm.Execute: Boolean; begin nTicks := GetTickCount; FOnIdle := Application.OnIdle; Application.OnIdle := OnIdle; Result := ShowModal = mrOK; Application.OnIdle := FOnIdle; end; procedure TBusyForm.OnIdle(Sender: TObject; var Done: Boolean); begin Done := (GetTickCount - nTicks) >= 5000; if Done then ModalResult := mrOK; end; |
Re: modales Fenster ohne Benutzerakt. selbst schliessen lass
@marabu
Hey Danke für deinen Quellcode. Leider ist es nicht genau dass was ich suche, liegt wohl daran, dass ich mich nicht genau genug ausgedrückt habe, ich will das die Form durch 2 Sachen geschlossen werden kann: 1. 25 Bytes im Eingang der Schnittstelle dann soll das modalresult mrOK sein 2. Benutzer klickt auf abbrechen dann soll das modalresult mrCancel sein. danke |
Re: modales Fenster ohne Benutzerakt. selbst schliessen lass
Die 25 Byte aus deiner Schnittstelle musst du selbst einlesen, z.B. in der Idle-Routine.
Und den Button mit ModalResult = mrCancel kannst du ruhig noch mit auf die Form setzen. Du schaffst das. |
Re: modales Fenster ohne Benutzerakt. selbst schliessen lass
Hallo,
die Tatsache, dass das Auslesen erfolgreich war, packst du in eine zusätzliche Boolean-Variable. WM_CLOSE erzeugt ja ein Cancel. Heiko |
Re: modales Fenster ohne Benutzerakt. selbst schliessen lass
Achso jetzt verstehe ich (Online-Hilfe sei dank),
was du meinst, also ich soll ein OnIdle(Wenn die Anwendung im Leerlauf ist) Ereignis erstellen. Das Alte Ereignis sichern das neue zuweisen und am Ende das Alte wieder zuweisen. Gut aber wann mach ich dass, bzw wo rufe ich am Besten die Execute Methode auf? Gracias |
Re: modales Fenster ohne Benutzerakt. selbst schliessen lass
@hoika
Ja stimmt, das WM_Close erzeugt ein Cancel. Wie wird das denn intern mit dem modalResult:= XXX gehandelt? Weißt du dass zufällig, wird das auch über eine Windows Message gemacht? Ja ich könnte auf das Modalresult komplett verzichten und eine eigene Variable setzten. Wäre wohl die einfachste Lösung, aber irgendwie wollte ich dass halt mit dem ModalResult lösen. Wenn ichs gar net hin bekomme. dann mach ich es mit der eigenen Variable und der Windows Message (WM_CLOSE). Danke |
Re: modales Fenster ohne Benutzerakt. selbst schliessen lass
Hallo @all
habe das Problem mit einer Formvariablen gelöst. Setze jetzt beim Manuellen (Benutzergesteuerten)-Abbruch eine Variable isClosedByUser und überprüfe sie dann nachdem die Form geschlossen wurde. Danke euch allen und noch einen schönen Tag. Gruß DelphiManiac |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz