Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Popup-Fenster! Wie? (https://www.delphipraxis.net/7490-popup-fenster-wie.html)

neolithos 13. Aug 2003 16:16


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:

Alexander 13. Aug 2003 16:52

Re: Popup-Fenster! Wie?
 
Soll das nachher so ein Fenster wie zb bei Adobe PhotoShop oder PaintShop Pro werden? Oder wie?

neolithos 13. Aug 2003 16:56

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! :?

ketraun 13. Aug 2003 17:25

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

neolithos 14. Aug 2003 13:10

Re: Popup-Fenster! Wie?
 
NOCH ANDERE VORSCHLÄGE!!!

:cat:

teebee 14. Aug 2003 14:12

Re: Popup-Fenster! Wie?
 
Zitat:

Zitat von neolithos
NOCH ANDERE VORSCHLÄGE!!!

Aua, jetzt bin ich taub! Warum schreist Du so?

Erstell doch einfach ein ganz normales Form ohne Icons und ohne Rand, kannst dann draufpappen, was Du willst. Stichwort 'Form.Show'.

Gruß, teebee

neolithos 14. Aug 2003 14:36

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:
  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);
Hat erstmal nen schönen Effekt ist aber unbrauchbar. Da dieses Fenster anders reagiert.

teebee 14. Aug 2003 14:55

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

neolithos 14. Aug 2003 15:16

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.

teebee 14. Aug 2003 15:24

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?

neolithos 14. Aug 2003 16:19

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) .

Stanlay Hanks 14. Aug 2003 17:15

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:

neolithos 18. Aug 2003 08:50

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.

MatthiasW 18. Aug 2003 17:43

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

kiar 18. Aug 2003 17:59

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;

Luckie 18. Aug 2003 18:09

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:

hat sich die Idee vom 31.08.2003 nicht viel gebracht.
Jetzt sag mir bitte, dass das nicht wahr ist und der 31. August 2003 schon vorbei ist, denn dann hätte ich nämlich meinen eigenen Geburtstag verpaßt.

neolithos 18. Aug 2003 18:15

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:
procedure TForm2.CreateParams(var params:TCreateParams);
begin
   inherited CreateParams(Params);
   CreateSubClass(Params, '#32768');
   params.wnd.parent:= form1.handle;
end;
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.

Sprich man is hier völlig auf den Holzweg.

Luckie 18. Aug 2003 18:19

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!

neolithos 18. Aug 2003 18:29

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:

System Classes
Damit scheint es nicht zu gehen! Leider schon festgestellt!
Such derzeit über Google und MSDN nenn anderen Weg!

MatthiasW 19. Aug 2003 08:32

Re: Popup-Fenster! Wie?
 
Hallo,

möglicherweise könnte dir auch das hier helfen:

Code:
Var myForm: TCustomForm;
begin
  .
  .
  myForm := (GetParentForm(Self) as TCustomForm);
  if myForm <> nil then myForm.Perform(WM_NCACTIVATE, 1, 0);
end;
Mfg Matthias

neolithos 20. Aug 2003 08:40

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).

MatthiasW 20. Aug 2003 14:10

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