AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Alle Klicks auf Form abfangen

Ein Thema von Schwedenbitter · begonnen am 18. Feb 2016 · letzter Beitrag vom 19. Feb 2016
Antwort Antwort
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#1

AW: Alle Klicks auf Form abfangen

  Alt 19. Feb 2016, 12:48
Erstmal danke für die Geduld!
Ein Popupfenster stelle ich mir nicht modal vor, das muss mit Show angezeigt sein. Ansonsten funktioniert das mit dem Danebenklicken natürlich nicht.
Wir bei mir auch "nur" mittels show angezeigt. Das Danebenklicken frage ich schon umständlich ab. Also hätte ich an OnExit(); schon sehr Interesse! Denn dann hätte ich ein Event und gut wäre es.

Habe ich die Eigenschaft gerade verwechselt? Hieß die OnLeave? Müsste ich nachschauen. Die muss jedenfalls im Objektinspektor sein wie das Gegenstück OnEnter.
Nein, Du hast es richtig. Es gibt ein OnExit für die Ableitungen von TControl. Allerdings bekomme ich das nicht zum Funktionieren:
Delphi-Quellcode:
type
   TForm1 = class(TForm)
     SpeedButton1: TSpeedButton;
     ScrollBox1: TScrollBox;
     ComboBox1: TComboBox;
     procedure SpeedButton1Click(Sender: TObject);
     procedure ScrollBox1Exit(Sender: TObject);
   end;

var
   Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ScrollBox1Exit(Sender: TObject);
begin
   ScrollBox1.Visible:= False;   // Wird nicht ausgelöst :-(
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
   ScrollBox1.Visible:= Not ScrollBox1.Visible;
end;
Aber ganz verstehe ich das noch nicht... die Controls auf dem Popup soll man gar nicht nutzen können? Wenn man drauf klickt soll das Popupfenster verschwinden? Oder soll man diese per Tastatur anspringen und nutzen können?
Habe mich vermutlich auch bloß blöd ausgedrückt:
Auch Popup-Menüs kann man dazu "missbrauchen", um neben den MenuItems auch Infos anzuzeigen; etwa in Enabled:= False Items. Ich mache den Aufwand auch bloß, weil ich es nicht schaffe, die Popup-Menüs vom Aussehen her dem neuen Klicki-Bunti-Groß-Aussehen der Windows-10-Apps anzugleichen und TComboBoxes einzufügen.
Ich habe mal 2 Bilder dazu angehängt. Es soll aussehen, wie das große Bild. Das kleine Bild zeigt den oben wiedergegebenen Code an. Weder ein Klick auf das Formular, noch den SpeedButton, noch den Windows-Desktop lösen OnExit aus...
Angehängte Grafiken
Dateityp: png TPopupMenu.png (20,6 KB, 11x aufgerufen)
Dateityp: png TScrollBox.png (3,6 KB, 9x aufgerufen)
Alex Winzer
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.113 Beiträge
 
Delphi 12 Athens
 
#2

AW: Alle Klicks auf Form abfangen

  Alt 19. Feb 2016, 14:30
Grad nachgeschaut, beim Formular ist es OnDeactivate.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
992 Beiträge
 
Delphi 6 Professional
 
#3

AW: Alle Klicks auf Form abfangen

  Alt 19. Feb 2016, 14:32
Hmm..

Also, wenn dein Popup eine TForm-Ableitung ist, das Form mit 'Show' angezeigt wird und Du möchtest, dass dieses Formular 'geschlossen' wird Du neben dieses Formular in deine Anwendung clickst,
dann benutze doch das OnDeactivate-Event:
Delphi-Quellcode:
procedure TForm2.FormDeactivate(Sender: TObject);
begin
  Close;
end;

Das Gegenstück ist OnActivate

Nur ein Control mit einem Eingabefeld hat ein OnEnter und ein OnExit, da man 'hinein' und wieder 'hinaus' gehen kann.
Ein Formular selber hat kein Eingafeld, somit auch kein OnEnter/OnExit.
Das gleiche gilt für Scrollboxen, Panels, Buttons..

Wenn Du noch willst, dass die Popup-Form auch geschlossen wird, wenn deine Applikation den Focus verliert, dann musst du mit Application.HookMainWindow arbeiten.

Delphi-Quellcode:

function TForm1.AppHookFunc(var Message: TMessage): Boolean;
begin
  Result := False;
  if Message.Msg = CM_ACTIVATE then begin
// Hier alles was beim Aktivieren deiner Applikation
  end;
  if Message.Msg = CM_DEACTIVATE then begin
// Hier alles was beim DeAktivieren deiner Applikation
// Wie z.B. PopUp.Close;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.HookMainWindow(AppHookFunc);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Application.UnHookMainWindow(AppHookFunc);
end;
  Mit Zitat antworten Zitat
Antwort Antwort


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 18:15 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