AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi application.ondeactivate (funktioniert nur bei focus)
Thema durchsuchen
Ansicht
Themen-Optionen

application.ondeactivate (funktioniert nur bei focus)

Offene Frage von "taveuni"
Ein Thema von taveuni · begonnen am 5. Nov 2007 · letzter Beitrag vom 6. Nov 2007
 
taveuni

Registriert seit: 3. Apr 2007
Ort: Zürich
534 Beiträge
 
Delphi 11 Alexandria
 
#1

application.ondeactivate (funktioniert nur bei focus)

  Alt 5. Nov 2007, 20:35
Hallo Gemeinde,

Wieder einmal gehts bei mir nicht weiter.
Folgende Ausgangslage:
Es gibt ein MainForm und ein Form2.
Das Form2 wird irgendwann als eine Art PopUp geöffnet und über eine andere Applikation gelegt. Die Koordinaten kommen von dieser Fremdapplikation via COM Callback.
Nun sollte es so sein dass bei einem Klick irgendwo ausserhalb dieser Form 2 diese geschlossen werden soll. Wir haben dies mit Mainform.FormDeActivate und Application.DeActivate realisiert.
Leider ist es nun aber so dass Application.OnDeactivate nur funktioniert wenn vorher der Focus einmal auf der eigenen Applikation gelegen hat. Alle Versuche nach dem Show dieser den Focus zu geben sind gescheitert.
Zur Veranschaulichung:

Delphi-Quellcode:
procedure TForm1.FormDeactivate(Sender: TObject);
begin
   if Form2.activated then
   form2.Close;
end;

procedure TForm1.ApplicationEvents1Deactivate(Sender: TObject);
begin
   form2.Close;
  form2.activated := False;
end;

// falls form 2 über den Button ausgelöst wird funktioniert alles
procedure TForm1.Button1Click(Sender: TObject);
begin
  form2.Left := StrToInt(edit1.Text);
  form2.Top := StrToInt(edit2.Text);
  form2.Show;
  SetWindowPos(form2.handle, HWND_TOPMOST, 0, 0, 0, 0,
                 SWP_NOMOVE or SWP_NOSIZE or SWP_SHOWWINDOW)
end;


// Als Versuch mit einem Timer Applikation starten und einmal auf den Desktop klicken. Nun muss zuerst der Focus mit Klick wieder auf die eigene Applikation gelegt werden bevor Application.OnDeActivate ausgelöst wird.

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  timer1.Enabled := False;
 
  form2.Left := StrToInt(edit1.Text);
  form2.Top := StrToInt(edit2.Text);
  form2.Show;
  SetWindowPos(form2.handle, HWND_TOPMOST, 0, 0, 0, 0,
                 SWP_NOMOVE or SWP_NOSIZE or SWP_SHOWWINDOW)
end;


Kennt jemand einen Workaround?

Gruss Werner

Ich habe dieses Problem schon in Delphi-Source gepostet http://forum.dsdt.info/viewtopic.php?t=34652
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:36 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 by Thomas Breitkreuz