Delphi-PRAXiS
Seite 6 von 32   « Erste     456 7816     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Ordnung muss sein (LaunchBar) (https://www.delphipraxis.net/192767-ordnung-muss-sein-launchbar.html)

EWeiss 14. Jun 2017 10:03

AW: Ordnung muss sein (LaunchBar)
 
Nein keine neue Version seit gestern aber Quelltext Inklusive.
Keine Fremdkomponente pngImage/Jpg oder der gleichen reine WIN32 API (mit kleinen Einschränkungen) unter Verwendung von GDIPlus.

Meinen Quelltext der DLL SK_AERO gibt es NUR auf persönlicher Anfrage.
Das Teil ist nicht geheim, aber habe einiges an Zeit dafür investiert.

gruss

jaenicke 14. Jun 2017 12:39

AW: Ordnung muss sein (LaunchBar)
 
Der Absturz beim Rechtsklick bei Windows 10 kommt von dieser Zeile (uMain.pas Zeile 961):
Delphi-Quellcode:
                  GDIP_DrawImageRectRectI(Graphics, ImgBack, ImgItemHeight, PDis.rcItem.Top,
                    Rect.Right - SideBarWidth, ImgItemHeight, 0, PDis.rcItem.Top *
                      (Integer(imgH) div Rect.Bottom), imgW, (Integer(imgH) div Rect.Bottom)
                      * ImgItemHeight, 2, nil, false, nil);
Rect ist leider leer, deshalb funktioniert die Division durch Rect.Bottom nicht.
Das liegt daran, dass WindowFromDC(PDis.HDC) 0 zurückliefert.

Ohne die Zeile wird das Menü angezeigt, allerdings wird der aktuelle Eintrag nach dem Hovern nicht wieder zurückgesetzt, sprich nach einmal Drüberfahren sehen alle gehovert aus.

EWeiss 14. Jun 2017 12:49

AW: Ordnung muss sein (LaunchBar)
 
Zitat:

Zitat von jaenicke (Beitrag 1374527)
Der Absturz bei Windows 10 kommt von dieser Zeile (uMain.pas Zeile 961):
Delphi-Quellcode:
                  GDIP_DrawImageRectRectI(Graphics, ImgBack, ImgItemHeight, PDis.rcItem.Top,
                    Rect.Right - SideBarWidth, ImgItemHeight, 0, PDis.rcItem.Top *
                      (Integer(imgH) div Rect.Bottom), imgW, (Integer(imgH) div Rect.Bottom)
                      * ImgItemHeight, 2, nil, false, nil);
Rect ist leider leer, deshalb funktioniert die Division durch Rect.Bottom nicht.
Das liegt daran, dass WindowFromDC(PDis.HDC) 0 zurückliefert.

Danke dir für die Info.
Was kann man da machen?

Warum WindowFromDC jetzt 0 unter W10 zurück gibt ist mir schleierhaft.

Habe den Source nochmal aktualisiert da auch in CreateShortCut ein Problem mit dem Free vorlag.

vorher
Delphi-Quellcode:
constructor TShortCut.Create;
begin

  AddChildWindows();
  CreateIcon := TCreateIcon.Create;
end;
Delphi-Quellcode:
  if Assigned(Sprites) then
  begin
    if (Sprites.Count - 1) > ID_MAIN then
    begin
      for K := ID_FIRST to Sprites.Count - 1 do
      begin
        if Sprites[K].h_Bitmap <> 0 then
        begin
          DeleteObject(Sprites[K].h_Bitmap);
          Sprites[K].h_Bitmap := 0;
        end;
      end;
      Sprites.Free;
      AddChildWindows;
    end;
  end;
und jetzt
Delphi-Quellcode:
constructor TShortCut.Create;
begin

  CreateIcon := TCreateIcon.Create;
end;
Delphi-Quellcode:
  if Assigned(Sprites) then
  begin
    Sprites.Free;
    AddChildWindows;
  end else
  AddChildWindows;
Zitat:

Ohne die Zeile wird das Menü angezeigt, allerdings wird der aktuelle Eintrag nach dem Hovern nicht wieder zurückgesetzt, sprich nach einmal Drüberfahren sehen alle gehovert aus.
Nein, nein die brauchen wir weil sonst die Button zum selektieren der Einträge nicht neu gezeichnet werden.
Das Hintergrund Bitmap sorgt dafür das ein Invalidate auf das Menu ausgeführt wird.


gruss

EWeiss 14. Jun 2017 13:30

AW: Ordnung muss sein (LaunchBar)
 
Zitat:

WindowFromDC(PDis.HDC)
Versuch mal bitte
Wenn du Lust und zeit dafür hast.

Delphi-Quellcode:
Prop.hPopupMenu := FindWindow('#32768', nil);


Das Problem ist das die Handles von Menus dynamisch sind.
Das Handle Prop.hPopupMenu
Delphi-Quellcode:
    WM_RBUTTONDOWN:
      begin
        nObjectID := GetMouseMoveSpriteID(WinHandle, lpX, lpY);
        if nObjectID = 0 then
        begin
          Prop.hPopupMenu := CreatePopupMenu; // Bitmap Popupmenu
          if Prop.hPopupMenu <> 0 then
          begin
ist nicht das gleiche wie unter
Delphi-Quellcode:
    WM_DRAWITEM:
      begin
        PDis := Pointer(lP);
        case PDis^.CtlType of
          ODT_MENU:
            begin
              //Prop.hPopupMenu := WindowFromDC(FromDC);
              Prop.hPopupMenu := FindWindow('#32768', nil);
              Txt := PWideChar(GetMenuTxt(PDis.ItemId, Img, ImgHover, SideBarImg));
wäre es so dann brauchte ich es nicht neu zu initialisieren.

Funktioniert unter W7
Das müsste auch unter W10 gehen.

gruss

jaenicke 14. Jun 2017 13:55

AW: Ordnung muss sein (LaunchBar)
 
Ja, das funktioniert. :thumb:

Es gibt noch einen minimalen Grafikfehler, wenn man das erste Mal mit der Maus über das Menü geht (da sieht man verschobene Schrift), aber sonst funktioniert das Kontextmenü dann.

EWeiss 14. Jun 2017 14:20

AW: Ordnung muss sein (LaunchBar)
 
Zitat:

Zitat von jaenicke (Beitrag 1374537)
Ja, das funktioniert. :thumb:

Es gibt noch einen minimalen Grafikfehler, wenn man das erste Mal mit der Maus über das Menü geht (da sieht man verschobene Schrift), aber sonst funktioniert das Kontextmenü dann.

Super dann lade ich die neue Version hoch.
Sorry mit dem minimalen Grafikfehler kann ich leider nichts machen. (bitte nicht wieder diskutieren das ich es nicht will)
Hier auf meinem System kann ich derartiges nicht ausmachen.. Ist einwandfrei.

Hoffe mal das nicht zu viel arges im Code zu finden ist ;)

gruss

EWeiss 14. Jun 2017 14:26

AW: Ordnung muss sein (LaunchBar)
 
Neue Version oben W10 Menu Handle Problem gefixt.

gruss

markus5766h 14. Jun 2017 16:32

AW: Ordnung muss sein (LaunchBar)
 
Liste der Anhänge anzeigen (Anzahl: 1)
... geiles Teil (wenn Ich das mal so sagen darf) ...

was mir aufgefallen ist :

Die Menüeinträge erscheinen beim Überfahren mit der Mouse ein paar Pixel versetzt,
allerdings nur beim ersten Überfahren, danach nicht mehr - siehe Anhang.

Ich hab's jetzt nur unter W10 getestet, somit kann ich nicht sagen, ob es vielleicht ein
W10-Problem ist . . .

p.s. wenn ich richtig gezählt habe :
in X + 3 Pixel
in Y + 3 Pixel

EWeiss 14. Jun 2017 16:38

AW: Ordnung muss sein (LaunchBar)
 
Zitat:

Zitat von markus5766h (Beitrag 1374552)
... geiles Teil (wenn Ich das mal so sagen darf) ...

was mir aufgefallen ist :

Die Menüeinträge erscheinen beim Überfahren mit der Mouse ein paar Pixel versetzt,
allerdings nur beim ersten Überfahren, danach nicht mehr - siehe Anhang.

Ich hab's jetzt nur unter W10 getestet, somit kann ich nicht sagen, ob es vielleicht ein
W10-Problem ist . . .

p.s. wenn ich richtig gezählt habe :
in X + 3 Pixel
in Y + 3 Pixel

Ja das Problem tritt nur unter W10 auf.
Ich weiß nicht warum aber wenn du kannst könntest du herausfinden woran das liegt?
Ich würde es gerne beheben aber ohne W10 keine Chance.

Ich sehe aber das die ALLLE versetzt sind nicht nur 1. (W10 wohlbemerkt nicht bei mir)
Erst das Problem mit dem DC und nun das ;)

Ohne das ich über das Menu fahre sind alle Einträge (Schriften Zentriert)
Siehe Anhang.

Das Menu lässt sich sehr schwer Debuggen zumindest bei mir Mit D2010 Die IDE hängt sich auf wenn ich hier einen Breakpoint setze.

gruss

markus5766h 14. Jun 2017 16:51

AW: Ordnung muss sein (LaunchBar)
 
Zitat:

Zitat von EWeiss (Beitrag 1374553)
...
Ich sehe aber das die ALLLE versetzt sind nicht nur 1.
...

vielleicht von mir unglücklich ausgedrückt : ich meinte den Menüeintrag, über dem die Mouse bewegt wird, die
anderen (bereits mit der Mouse überfahrenden Menüeinträge) sind dann nicht mehr versetzt.

. . . vielleicht komme ich morgen mal dazu, mir das näher anzusehen . . .


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:33 Uhr.
Seite 6 von 32   « Erste     456 7816     Letzte »    

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