AGB  ·  Datenschutz  ·  Impressum  







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

Problem mit TPopupMenu.OnClose

Ein Thema von 100nF · begonnen am 4. Mai 2005 · letzter Beitrag vom 4. Mai 2005
Antwort Antwort
100nF

Registriert seit: 7. Nov 2004
639 Beiträge
 
#1

Problem mit TPopupMenu.OnClose

  Alt 4. Mai 2005, 09:13
hallo zusammen,

ich habe eine form7 (hauptform = form1) die in jede titelleiste passt und sich mit diesem code immer im vordergrund hält:
Delphi-Quellcode:
procedure TForm7.Timer1Timer(Sender: TObject);
begin
with Self do
  SetWindowPos(Handle,
               HWND_TOPMOST,
               Left,
               Top,
               Width,
               Height,
               SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
end;
(ist von swissdelphicenter.ch)
funktioniert wunderbar. bei einem klick auf einen button öffnet sich ein popupmenu, das ev. bis über 100 items haben kann, und dadurch auch die form7 teilweise verdeckt. nun gibts grosse grafikprobleme, da die form7 ja im vordergrund sein will...
ich habe das so gelöst, dass beim öffnen vom popupmenu der timer1 abgeschaltet wird. dann muss er aber beim schliessen vom popupmenu wieder eingeschaltet werden.
gesagt, getan! mit diesem code fange ich das ereignis "popupmenu.OnClose" ab, und der timer wird eingeschaltet.
funktioniert wunderbar.

nur funktionieren jetzt alle popupmenus vom ganzen programm nicht mehr, das heisst, die popupmenus werden geöffnet, aber bei einem klick auf ein item wird die procedute nicht ausgelöst. entferne ich diesen code wieder, funktioniert alles wieder...

weiss jemand, was das problem ist? wie kann ich es lösen?

vielen dank schon im voraus.
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#2

Re: Problem mit TPopupMenu.OnClose

  Alt 4. Mai 2005, 09:27
Hallo urbanbruhin,

mir scheint die Methode mit dem Timer sehr unguenstig gewaehlt. Versuch mal das Fenster modal zu oeffnen, oder wenn es gaaanz vorne (vor allen anderen Fenstern, auch jener anderer Anwendungen) sein soll, dann setzt du FormStyle auf fsStayOnTop.
Ausserdem gibt es beim PopupMenu eine Regel: sobald auf ein Item geklickt wurde, schliesst sich das PopupMenu. Evtl. musst du bei allen Items im OnClick den Timer wieder anschalten

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
100nF

Registriert seit: 7. Nov 2004
639 Beiträge
 
#3

Re: Problem mit TPopupMenu.OnClose

  Alt 4. Mai 2005, 09:38
hallo alcaeus,

Zitat:
mir scheint die Methode mit dem Timer sehr unguenstig gewaehlt. Versuch mal das Fenster modal zu oeffnen, oder wenn es gaaanz vorne (vor allen anderen Fenstern, auch jener anderer Anwendungen) sein soll, dann setzt du FormStyle auf fsStayOnTop.
ich weiss, es ist nicht sehr elegant, aber ich habe das mit dem fsStayOnTop schon ganz am anfang probiert, funktioniert aber nicht. wenn ich z.B. den IE öffne, ist dieser im vordergrund, und meins sieht man nicht mehr...darum diese timer-lösung.

Zitat:
Ausserdem gibt es beim PopupMenu eine Regel: sobald auf ein Item geklickt wurde, schliesst sich das PopupMenu. Evtl. musst du bei allen Items im OnClick den Timer wieder anschalten
das problem dabei ist, dass man nicht immer auf ein item klickt. wenn man auserhalb des programms klickt(was man meistens tut, wenn man das popupmenu schliessen will), und der timer ist ausgeschaltet, verschwindet die form7 wieder im hintergrund.
  Mit Zitat antworten Zitat
100nF

Registriert seit: 7. Nov 2004
639 Beiträge
 
#4

Re: Problem mit TPopupMenu.OnClose

  Alt 4. Mai 2005, 10:07
mir ist gerade in den sinn gekommen, dass es noch besser wäre, wenn man abfragen könnte ob das popupmenu geöffnet ist oder nicht... hab nur noch nicht herausgefunden, wie das geht(falls es überhautp geht)...

weiss das niemand von euch?

ich werd noch ein bisschen suchen...
  Mit Zitat antworten Zitat
100nF

Registriert seit: 7. Nov 2004
639 Beiträge
 
#5

Re: Problem mit TPopupMenu.OnClose

  Alt 4. Mai 2005, 10:20
hallo zusammen, problem gelöst!!

bei diesem code ist ein fehler drin!

Es muss CallWindowProc sein und nicht DefWindowProc.
Delphi-Quellcode:
procedure TForm1.PopupListWndProc(var Message: TMessage);
begin
  with Message do
  begin
    case Msg of
      WM_ENTERMENULOOP:; // PopupMenu wird geöffnet
      WM_EXITMENULOOP:; // PopupMenu wird geschlossen
    end;
    Result := CallWindowProc(OldPopupListWndProc, PopupList.Window, Msg, WParam, LParam); // <<<<hier!
  end;
end;
habe ich hier entdeckt!

vielleicht sollte man das bei diesem code noch ändern, falls möglich...

greez
urbanbruhin
  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 23:31 Uhr.
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