![]() |
Popup-Fenster! Wie?
Wie erstellt man ein Popup-Fenster, welches nicht das rufente Fenster deaktiviert?
Ähnlich wie ContextMenu, MainMenu, ComboBox dropDown, ... :witch: Ich will am ende eine selbstgefrimmelte klasse haben! :coder: |
Re: Popup-Fenster! Wie?
Soll das nachher so ein Fenster wie zb bei Adobe PhotoShop oder PaintShop Pro werden? Oder wie?
|
Re: Popup-Fenster! Wie?
Ein klares nein! Das sind ja ToolWindow's, die man dauernt sehen kann!
Klappt man ein Menü auf so sieht man doch eine viereckige Fläche in der die Menüpunkte angeordnet sind. So ein Fenster mein ich. Leider kann man diese schlecht mit Spy XX untersuchen! :? |
Re: Popup-Fenster! Wie?
hi,
ich kann dir vielleicht helfen, hab sowas vor Jahren schonmal gemacht. Muss allerdings suchen. Das wir dann schon Morgen. ketraun |
Re: Popup-Fenster! Wie?
NOCH ANDERE VORSCHLÄGE!!!
:cat: |
Re: Popup-Fenster! Wie?
Zitat:
Erstell doch einfach ein ganz normales Form ohne Icons und ohne Rand, kannst dann draufpappen, was Du willst. Stichwort 'Form.Show'. Gruß, teebee |
Re: Popup-Fenster! Wie?
Das Problem ist aber, dass das Hauptfenster den Focus verliert und das sieht dumm aus.
Übrigens ich hab die Window's Klasse für Kontextmenüs ermittelt: #32768 Und ein Fenster aus ihr erzeugt:
Delphi-Quellcode:
Hat erstmal nen schönen Effekt ist aber unbrauchbar. Da dieses Fenster anders reagiert.
hMenu := CreatePopupMenu;
InsertMenu(hMenu, MF_BYPOSITION, MF_STRING or MF_OWNERDRAW, 1000, 'test'); InsertMenu(hMenu, MF_BYPOSITION, MF_STRING, 1001, 'test'); Windows.Beep(200, 200); h := CreateWindowEx( WS_EX_DLGMODALFRAME or WS_EX_TOPMOST or WS_EX_TOOLWINDOW or WS_EX_WINDOWEDGE, '#32768', 'tesst', WS_VISIBLE or WS_CLIPSIBLINGS or WS_BORDER, 20, 20, 100, 100, Handle, hMenu, HInstance, 0); ShowWindow(h, SW_SHOW); |
Re: Popup-Fenster! Wie?
Vielleicht kannst Du nochmal genauer beschreiben, wie das aussehen soll, was Du vorhast. Ich kann mir das noch nicht so richtig vorstellen.
Ciao, teebee |
Re: Popup-Fenster! Wie?
Liste der Anhänge anzeigen (Anzahl: 1)
So soll das ca. ist das Menü geplant!
Klickt man den blauen Streifen an, so wird aus den Menü ein ToolWindow. Un in den Zwei bereichen sollen Scroll's oder ähnliches angeordnet werden. Beenden soll ein normaler Menüpunkt werden. |
Re: Popup-Fenster! Wie?
D.h. Du hast ein Hauptfenster und dieses Menufenster. Befindet es sich innnerhalb deines Hauptfensters oder soll es auch ausserhalb liegen?
|
Re: Popup-Fenster! Wie?
Dieses Fenster soll wie ein normales Pulldown-Menü reagieren oder als freies ToolWindow auf dem Desktop (Steuerung über den blauen Balken) .
|
Re: Popup-Fenster! Wie?
Wieso kanns denn kein Panel sein? Das reagiert zwar nicht genauso wie ein PopUp aber ich denke, wenn man das etwas bearbeitet, sollte es den Zweck auch erfüllen.
Man liest sich, Stanlay :hi: |
Re: Popup-Fenster! Wie?
Leider nützt mir ein Panel überhaupt nix.
Ich habe derzeitig ein TWinControl (später eve TCustomForm?) abgeleitet, leider hat sich die Idee vom 31.08.2003 nicht viel gebracht. (Sieht aber lustig aus und ist hoch interessant). Irgentwas fehlt da noch. Kann sich jemand vorstellen was in TrackPopupMenuEx geschieht? Das könnte mir weiterhelfen. |
Re: Popup-Fenster! Wie?
Hallo,
Ich bin mir net ganz sicher ob das klappen kann, aber vielleicht kann man ja was mit "SetParent" machen? Mfg Matthias |
Re: Popup-Fenster! Wie?
probiere mal folgendes in dem du von dem fenster dire params überschreibst
Code:
procedure TForm2.CreateParams(var params:TCreateParams);
begin inherited CreateParams(Params); Params.style:= params.style or ws_overlapped; params.wnd.parent:= form1.handle; end; |
Re: Popup-Fenster! Wie?
#32768^das ist nicht die Fensterklasse des Menüs. Sie ist es schon nur hat jeder Dialog, der mit dem VC Ressourcen-Editor erstellt wurde diese Klasse.
Zitat:
|
Re: Popup-Fenster! Wie?
Da ich so wenig wie möglich neu schreiben möchte liegt mein Ansatz derzeitig so (um das in deins einzufügen)
Delphi-Quellcode:
Das Ergebniss ist leiter nicht befriedigend, da erstmal das Fenster schrecklich aussieht. Und zweitens es nicht wie ein PopupFenster reagiert. Daher liegt die Vermutung nahe, dass Microsoft funktionalität im TrackPopupMenuEx versteckt.
procedure TForm2.CreateParams(var params:TCreateParams);
begin inherited CreateParams(Params); CreateSubClass(Params, '#32768'); params.wnd.parent:= form1.handle; end; Sprich man is hier völlig auf den Holzweg. |
Re: Popup-Fenster! Wie?
Sag mal, hast du meine Antwort überhaupt gelesen? #32768 Ist NICHT die Fensterklasse eines Menüs. Diese Fensterklasse haben alle mit dem Ressourcen-Editor von Visual C erstellten Fenster!
|
Re: Popup-Fenster! Wie?
Tschuldigung das hatte ich Übersehen!
Und mal ganz Namen, Daten sind ein graus zu merken. Zu #32768: Dies ist eine Fenster-Klasse von Windows. Standard-API. so steht es in der msdn geschrieben -> Zitat:
Such derzeit über Google und MSDN nenn anderen Weg! |
Re: Popup-Fenster! Wie?
Hallo,
möglicherweise könnte dir auch das hier helfen:
Code:
Mfg Matthias
Var myForm: TCustomForm;
begin . . myForm := (GetParentForm(Self) as TCustomForm); if myForm <> nil then myForm.Perform(WM_NCACTIVATE, 1, 0); end; |
Re: Popup-Fenster! Wie?
Ich hab mich mal gestern intensiv damit beschäftig!
1. Das Menü ist ein relikt aus Windows 3, wenn nicht gar noch früher, und wurde immer wieder aufgebohrt. 2. Im Menü kann man nur zusätzliche bereiche einfügen in denen man was malen kann. (WinXX, Win2k - Seitenbild) Grund: dieses Fenster erhält keine normalen Nachrichten, sondern nur verschiedene Undokumentierte, die sich ja von OS version doch mal ändern könnten. Normale Nachrichten: WM_CREATE, WM_NCCREATE, WM_PRINT, WM_PRINTCLIENT, WM_NCCALCSIZE, WM_WINDOWPOSCHANGING, WM_WINDOWPOSCHANGED, WM_MOVE, WM_SIZE, WM_TIMER, WM_KEYDDOWN keinerlei Mouse oder WM_KEYUP, WM_KEYPRESS Nachrichten. 3. Nach genauster WinXP-Menü-Untersuchen (wovor es mir immer gegraut hat), bin ich zur Schlussfolgerung gekommen, das man selbst ein Fenster so umbiegt das es fast wie ein PopupMenü reagiert. Leider hab ich bis jetzt noch nicht das Problem mit der Titelleiste gelöst (@MatthiasW: ich werd mal sehen was passiert). |
Re: Popup-Fenster! Wie?
Hallo,
also ich hab mit "GetParentForm" gute ergebnisse erzielt: Das Hauptformular wird wieder aktiviert, aber auf meinem Control auf dem Popup bleibt der Focus. Ich habe dies dazu benutzt, da ich mir eine eigenständige ComboBox programmiert habe. Als aufklappendes Fenster habe ich eine Form genommen und nachdem ich alles Initialisiert habe und die Form angezeigt wird, setzte ich das aktive Fenster wieder auf mein anderes Hauptform und es funktioniert so wie ich es mir wünsche. :D :D Mfg Matthias |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:41 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