AGB  ·  Datenschutz  ·  Impressum  







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

Menu Ownerdraw

Ein Thema von EWeiss · begonnen am 7. Mär 2019 · letzter Beitrag vom 13. Mär 2019
Antwort Antwort
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.073 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: Menu Ownerdraw

  Alt 7. Mär 2019, 11:14
Guck dir mal GetMenuFromHandle an und die Stellen wo es verwendet wird.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: Menu Ownerdraw

  Alt 7. Mär 2019, 11:36
Guck dir mal GetMenuFromHandle an und die Stellen wo es verwendet wird.
Danke.. Ist etwas komplizierter muss mich da durchbeißen.

Delphi-Quellcode:
    WM_PAINT, WM_PRINTCLIENT:
      begin
        HToolBarMenu := HMENU(SendMessage(GetParent(WinHandle), MN_GETHMENU, 0, 0));
        if HToolBarMenu <> 0 then
            ToolBarSubClass(hToolbarMenu);
Innerhalb der ToolbarProc.
Handle ist immer 0.

GetParent(WinHandle) und nur WinHandle immer 0.
Kann ich mit den VCL Styles nicht vergleichen. Hmmm...

gruss

Geändert von EWeiss ( 7. Mär 2019 um 12:06 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: Menu Ownerdraw

  Alt 7. Mär 2019, 12:27
Messagen die ich bekomme und das Menu siehe im Anhang.. hat bei den VCL Styles nichts mit einem Popupmenu zu tun.
Deshalb scheint MN_GETHMENU nicht das richtige zu sein.

gruss

Geändert von EWeiss (11. Jul 2019 um 15:55 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.073 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Menu Ownerdraw

  Alt 7. Mär 2019, 12:28
Wo kommt denn der Wert für hToolbar in procedure TSkinOpenSaveDialog.ToolBarSubClassProc(var Message: TMessage); her?
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: Menu Ownerdraw

  Alt 7. Mär 2019, 12:32
Wo kommt denn der Wert für hToolbar in procedure TSkinOpenSaveDialog.ToolBarSubClassProc(var Message: TMessage); her?
Delphi-Quellcode:
  hToolbar := FindWindowEx(hMain, 0, 'ToolBarWindow32', nil);
  GetWindowRect(hToolbar, rc);
  lpt.x := rc.Left;
  lpt.y := rc.Top;
  ScreenToClient(hMain, lpt);

  MoveWindow(hToolbar, lpt.x, lpt.y, (rc.Right - rc.Left) + 3, rc.Bottom - rc.Top, false);

  ExStyle := GetWindowLongPtr(hToolbar, GWL_EXSTYLE);
  ExStyle := ExStyle or WS_EX_TRANSPARENT;
  SetWindowLongPtr(hToolbar, GWL_EXSTYLE, ExStyle);
  ToolBarSubClass(hToolbar);
hMain = Handle der Class #32700 Dialog Box

gruss

Geändert von EWeiss ( 7. Mär 2019 um 12:37 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.073 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Menu Ownerdraw

  Alt 7. Mär 2019, 12:54
Anbei mal ein Minimalbeispiel (ja, das geht in der Tat recht schnell) zum nachdebuggen in einer höheren Delphiversion, die schon VCL Styles unterstützt (z.B. die Delphi Community Editon).

Du kannst ja einfach mal nachvollziehen, wie in procedure TSysPopupStyleHook.WMPRINT(var Message: TMessage); der Hintergrund bei der Message WM_PRINT (791) gezeichnet wird.
Angehängte Dateien
Dateityp: zip PopupFromToolbar.zip (41,4 KB, 4x aufgerufen)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: Menu Ownerdraw

  Alt 7. Mär 2019, 13:31
Danke werde es mir anschauen..

gruss
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#8

AW: Menu Ownerdraw

  Alt 7. Mär 2019, 14:06
Report:
Ist einfach mit seiner Engine aber nicht auf meiner weise..
Ich kann nicht erkennen wo das Event ausgelöst wird.. bei mir sollte es eigentlich WM_LBUTTONDOWN sein.

Aber ich bekomme kein gültiges Handle.
Ich klicke ja auf den Tollbarbutton nur welches Handle ist das bekomme ja nur das von der Toolbar selbst zurück geliefert.
Nicht das des Button den ich klicke noch das vom Menu.

Wenn ich das auf seine weise mache schlägt es fehl.
Delphi-Quellcode:
    WM_LBUTTONDOWN:
      begin
        Style := GetWindowLongPtr(WinHandle, GWL_STYLE);
        if (Style and WS_POPUP = WS_POPUP) then
        begin
          if HToolBarMenu <> 0 then
            ToolBarSubClass(hToolbarMenu);
        end;
      end;
Hmmm schwierig..
PS:
Werde es wohl erst mal verwerfen komme nicht an das Handle.

gruss

Geändert von EWeiss ( 7. Mär 2019 um 15:13 Uhr)
  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 07:07 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