PopUp Menü öffnet nicht nach "Showmessage"

Für Fragen von Einsteigern und Programmieranfängern...
Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

PopUp Menü öffnet nicht nach "Showmessage"

Beitrag von Aliobaba »

Hallo,

ich arbeite noch mit einer ziemlich alten Version: Version 1.8.4 ; aber es könnte ja sein, dass dieses eigenartige Verhalten (oder der Bug??) von Lazarus immer noch relevant ist:

Wenn ich die "ShowMessage-Zeile" auskommentiere, dann erscheint das PopUp-Menü wie man es erwartet, wenn die Zeile nicht auskommentiert ist, dann erscheint das PopUp-Menü aber nicht.

Code: Alles auswählen

procedure TF_TagManip.Button1Click(Sender: TObject);
begin
 // Showmessage('Eingabefeld ist leer; einige Auswahlfelder sind nicht verfügbar');
   F_TagManip.Popup_Kuerzel_reduziert.PopUp; // Showmessage vorher verhindert das Öffnen von PopUp !!???
end;
          
Dieses Programmverhalten bleibt auch so, wenn man der Zeile:

Code: Alles auswählen

F_TagManip.Popup_Kuerzel_reduziert.PopUp; // Showmessage vorher verhindert das Öffnen von PopUp !!???
in eine eigenständige Prozedur gibt und diese dann aufruft.
Ist dies Absicht und steckt ein tieferer Sinn dahinter? Und wozu wäre dies Programmverhalten dann gut?
Zuletzt geändert von Aliobaba am Mi 9. Jun 2021, 11:30, insgesamt 1-mal geändert.
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

Re: PopUp Menü öffnet nicht nach "Showmessage"

Beitrag von Aliobaba »

Sorry, habe den falschen Code gepostet: Ich ändere das aber sofort: Moment bitte!
..
..
... jetzt sollte es passen.

Die Zeile ist der Aufruf für die die eigenständige Prozedur:

Code: Alles auswählen

 F_TagManip.Nur_PopUp; 

Code: Alles auswählen

Procedure TF_TagManip.Nur_PopUp;
begin
    F_TagManip.Popup_Kuerzel_reduziert.PopUp;  // Showmessage vorher verhindert das Öffnen von PopUp !!???
end;
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1435
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: PopUp Menü öffnet nicht nach "Showmessage"

Beitrag von fliegermichl »

Mit Laz 2.011 kann ich es nicht nachvollziehen. Da öffnet das PopupMenu wie es soll.

Soner
Beiträge: 623
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: PopUp Menü öffnet nicht nach "Showmessage"

Beitrag von Soner »

Mit Lazarus 1.8.5 auch keine keine Probleme.
PopupMenu1.PopUp läßt Menü an der Mausposition erscheine, vielleicht siehst du es nicht, weil Menü in der Bildschirmmitte erscheint nicht wo du wahrscheinlich erwartest.
Mach einfach PopupMenu1.PopUp(0,0) zum testen, das erscheint an der linken oberen Ecke.

Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

Re: PopUp Menü öffnet nicht nach "Showmessage"

Beitrag von Aliobaba »

Hallo,

Genau . Das . War's. :) :)

Vielen, vielen Dank! (Waren wieder mal einige lehrreiche Stunden :wink: )

Trotzdem frage ich mich noch, warum das PopUp Menü nicht zum Vorschein kommt, wenn man die Meldung von "ShowMessage" mit ok bestätigt hat und diese "ShowMessage"-Meldung ja verschwindet. DANN erst - so dachte ich -, geht das Programm erst weiter zum PopUp Befehl.

Ein bissl in die Richtung habe ich schon gedacht heute früh, denn ich versuchte es mit "Application.ProcessMessages" gleich nach diesem Befehl: Half aber auch nicht weiter. (sh. unten)

Ich vermute mal - obwohl ich mich mit den Internas von Lazarus natürlich absolut nicht auskenne -, dass die Meldung "ShowMessage" die Position besetzt; das PopUp-Menü "denkt" sich: " Was? Schon besetzt? OK, dann eben nicht" - und erscheint erst gar nicht.

Das wiederum würde aber bedeuten, dass der Programmcode von "PopUp" VOR dem "Application.ProcessMessages" bereits abgearbeitet wird.

Sorry, dieser Erklärungsversuch ist genau so laienhaft wie meine Programmierkenntnisse. :?

Nochmal. Viele Dank!!
begin
Showmessage('Eingabefeld ist leer; einige Auswahlfelder sind nicht verfügbar');
Application.ProcessMessages;
F_TagManip.Popup_Kuerzel_reduziert.PopUp;
end
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

Re: PopUp Menü öffnet nicht nach "Showmessage"

Beitrag von Aliobaba »

Uuups, Nein, leider funktioniert auch nicht.
Ich habe nur vergessen, das auskommentierte "Showmessage" wieder zu aktivieren.
:? :?
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: PopUp Menü öffnet nicht nach "Showmessage"

Beitrag von Winni »

Hi

Und wenn Du mal testweise die Reihenfolge veränderst?

Code: Alles auswählen

F_TagManip.Popup_Kuerzel_reduziert.PopUp;
Application.ProcessMessages;
showMessage('......'):
Winni

Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

Re: PopUp Menü öffnet nicht nach "Showmessage"

Beitrag von Aliobaba »

Hallo Winni,

das mysteriöse Problem bleibt:

so werden beide Meldungen gezeigt: (Also "PopUp" UND anschließend "showMessage")
procedure TF_TagManip.Button1Click(Sender: TObject);
begin // so werden beide Meldungen gezeigt
F_TagManip.Popup_Kuerzel_reduziert.PopUp;
Application.ProcessMessages;
showMessage('......');
// Application.ProcessMessages;
// F_TagManip.Popup_Kuerzel_reduziert.PopUp;
end;
so erscheint nur das "showMessage", anschließend kein "PopUp" mehr:
procedure TF_TagManip.Button1Click(Sender: TObject);
begin // so erscheint nur das "showMessage", anschließend kein "PopUp" mehr
// F_TagManip.Popup_Kuerzel_reduziert.PopUp;
// Application.ProcessMessages;
showMessage('......');
Application.ProcessMessages;
F_TagManip.Popup_Kuerzel_reduziert.PopUp;
end;
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: PopUp Menü öffnet nicht nach "Showmessage"

Beitrag von Winni »

Hallo!

So gehört sich das nicht!
Da hast Du nen Bug entdeckt.

Teste doch mal statt showmessage:

Code: Alles auswählen

application.MessageBox ('Dies ist der Text', 'Überschrift');
Winni

Benutzeravatar
six1
Beiträge: 788
Registriert: Do 1. Jul 2010, 19:01

Re: PopUp Menü öffnet nicht nach "Showmessage"

Beitrag von six1 »

...auf der anderen Seite würde ich sagen: So gehört sich das!

Ein Showmessage hält die Ausführung an der Stelle an, wo es gefeuert wird!
Erst nach Schließen des Messagefensters dürfte das Popup erscheinen.

Wenn du den Ablauf nicht anhalten magst, solltest du dir mal PopupNotifier ansehen.
Bisschen aufwändiger als Showmessage...
Gruß, Michael

Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

Re: PopUp Menü öffnet nicht nach "Showmessage"

Beitrag von Aliobaba »

Guten Morgen,

leider funktioniert dieser Code auch nicht. Das PopUp erscheint nicht:

Code: Alles auswählen

procedure TF_TagManip.Button1Click(Sender: TObject);
begin    // so erscheint nur das "showMessage", anschließend kein "PopUp" mehr
  application.MessageBox ('Dies ist der Text', 'Überschrift');
  //Application.ProcessMessages;      Funktioniert auch nicht, wenn nicht auskommentiert
  F_TagManip.Popup_Kuerzel_reduziert.PopUp;
end;
@six1
Also, ich würde dennoch sagen, dass sich das nicht so gehört.
Das Programm sollte den Code nach meinem Gefühl nur Schritt für Schritt abarbeiten. Das hieße in diesem Fall:
1. Die Meldung in der MessageBox anzeigen - und dann weiter machen.
2. DANN diesen Befehl bearbeiten: " F_TagManip.Popup_Kuerzel_reduziert.PopUp; "

Und Punkt 2 wird nicht gemacht :?: , wird aber gemacht, wenn die MessageBox nicht aufgerufen wird, also auskommentiert ist.

Ach ja: Sorry, ich habe keine Ahnung, was ein PopUpNotfier ist; :oops: deshalb habe ich diesen Thread in die Anfänger-Rubrik gepostet.

Schönen Tag allseits!
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

Benutzeravatar
six1
Beiträge: 788
Registriert: Do 1. Jul 2010, 19:01

Re: PopUp Menü öffnet nicht nach "Showmessage"

Beitrag von six1 »

8)
Schau mal hier: https://wiki.freepascal.org/Dialog_Examples/de
Application.Messagebox gibt einen Wert zurück, je nach gedrücktem Button!
Das bedeutet, dass der Programmablauf so lange angehalten wird, bis jemand "endlich" einen Button anklickt...
Gruß, Michael

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: PopUp Menü öffnet nicht nach "Showmessage"

Beitrag von Winni »

six1 hat geschrieben:
Do 10. Jun 2021, 09:31
8)
Schau mal hier: https://wiki.freepascal.org/Dialog_Examples/de
Application.Messagebox gibt einen Wert zurück, je nach gedrücktem Button!
Das bedeutet, dass der Programmablauf so lange angehalten wird, bis jemand "endlich" einen Button anklickt...

Das macht showmessage aber auch. Es ist ein modales Fenster bzw. Form.

Winni

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: PopUp Menü öffnet nicht nach "Showmessage"

Beitrag von wp_xyz »

Probier's mal so:

Code: Alles auswählen

uses
  LCLIntf;
procedure TForm1.Button1Click(Sender: TObject);
var
  P: TPoint;
begin
  GetCursorPos(P);
  ShowMessage('sss');
  PopupMenu1.PopUp(P.X, P.Y); 
end;
Wenn du Popup ohne Parameter aufrufst, erscheint es an der Mausposition. Da du aber vorher die MessageBox wegklicken musstest, erscheint das Popup nicht auf dem Button, sondern dort, wo die MessageBox war. Du erwartest das Popup aber am Button und siehst nicht was sonstwo auf dem (riesigen) Bildschirm passiert. So ähnlich hat ganz oben schon Soner argumentiert.

Der gezeigte Code funktioniert mit trunk und aber auch mit Laz 1.8.4 - getestet!

Soner
Beiträge: 623
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: PopUp Menü öffnet nicht nach "Showmessage"

Beitrag von Soner »

wp_xyz hat geschrieben:
Do 10. Jun 2021, 09:44
Probier's mal so:

Code: Alles auswählen

uses
  LCLIntf;
procedure TForm1.Button1Click(Sender: TObject);
var
  P: TPoint;
begin
  GetCursorPos(P);
  ShowMessage('sss');
  PopupMenu1.PopUp(P.X, P.Y); 
end;
Wenn du "P:=Mouse.CursorPos;" verwendest, dann kann du auch "uses LCLIntf;" verzichten.

Antworten