Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi modales Fenster ohne Benutzerakt. selbst schliessen lassen (https://www.delphipraxis.net/84817-modales-fenster-ohne-benutzerakt-selbst-schliessen-lassen.html)

DelphiManiac 22. Jan 2007 13:28

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

...

DelphiManiac 22. Jan 2007 13:59

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.

marabu 22. Jan 2007 14:06

Re: modales Fenster ohne Benutzerakt. selbst schliessen lass
 
Hallo,

wenn ich deine Vorgaben nehme, dann würde ich so vorgehen:

Delphi-Quellcode:
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;
Freundliche Grüße

DelphiManiac 22. Jan 2007 14:16

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

marabu 22. Jan 2007 14:47

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.

hoika 22. Jan 2007 14:56

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

DelphiManiac 22. Jan 2007 15:03

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

DelphiManiac 22. Jan 2007 15:05

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

DelphiManiac 22. Jan 2007 15:37

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 03:32 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz