AGB  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Ordnung muss sein (LaunchBar)

Ordnung muss sein (LaunchBar)

Ein Thema von EWeiss · begonnen am 17. Mai 2017 · letzter Beitrag vom 19. Mai 2017
Antwort Antwort
Seite 1 von 4  1 23     Letzte » 
Benutzerbild von EWeiss
EWeiss
Registriert seit: 16. Okt 2010
Eine Bar in Mac Style OverTheTaskBar danke an Patrice für seine Unterstützung.

Die Funktionsweise sollte selbst erklärend sein.
Erst mal nur Binär vielleicht lade ich den QT später noch hoch.

Getestet unter W7 für andere Systeme wie immer kein Gewähr.
Verwendung auf eigene Gefahr!

Nebenbei: Es sollten sich schon ein paar Verknüpfungen auf dem Desktop befinden. LOL
*.21

19.05.17
  • - Icon und Background werden nicht direkt aktualisiert nach der Auswahl.
  • - Seperators werden nicht mehr im Quelltext selbst behandelt\gezeichnet diese sind jetzt im MEN_Center.png enthalten.
  • - FORM_Center.jpg entfernt.
  • - MEN_Center.png hinzugefügt, MEN_Sep.png entfernt.

gruss, by
Miniaturansicht angehängter Grafiken
17.05.png  
Angehängte Dateien
Dateityp: rar OTTB.rar (1,88 MB, 6x aufgerufen)

Geändert von EWeiss (19. Mai 2017 um 19:38 Uhr)
 
Benutzerbild von EWeiss
EWeiss

 
Delphi 2010 Architect
 
#2
  Alt 18. Mai 2017, 06:35
Hier ein paar System Folder GUIDS.

Diese kann man auf diese weise einfügen.
"explorer.exe, Computer, @PATH@UserIcon\48x48\Computer.png, @PATH@, /N;::{20d04fe0-3aea-1069-a2d8-08002b30309d}, 1'"

hinzufügen von Festplatten geht so.
"explorer.exe, Win7(C:), @PATH@UserIcon\48x48\HD.png, @PATH@, C:\, 1'"

Hinzufügen einer normalen Anwendung via Path.
"c:\program files (x86)\imploded software\helium 12\helium.app.exe, Helium 12, @PATH@UserIcon\48x48\Helium.png, C:\Program Files (x86)\Imploded Software\Helium 12, , 1'"
oder
"c:\program files (x86)\imploded software\helium 12\helium.app.exe, Helium 12, @PATH@UserIcon\48x48\Helium.png, @PATH@, , 1'"
Wenn das Arbeitsverzeichnis das gleiche ist wie das des EXE Pfades.

gruss
Angehängte Dateien
Dateityp: txt Explorer.txt (7,4 KB, 7x aufgerufen)

Geändert von EWeiss (18. Mai 2017 um 10:55 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

 
Delphi 10.2 Tokyo Enterprise
 
#3
  Alt 18. Mai 2017, 07:23
Unter Windows 10 bleibt die Leiste leer (ich habe extra eine Verknüpfung auf dem Desktop angelegt vorher). Klicke ich mit rechts drauf, stürzt die Anwendung ab.
Sebastian Jänicke
  Mit Zitat antworten Zitat
Benutzerbild von EWeiss
EWeiss

 
Delphi 2010 Architect
 
#4
  Alt 18. Mai 2017, 07:26
Unter Windows 10 bleibt die Leiste leer (ich habe extra eine Verknüpfung auf dem Desktop angelegt vorher). Klicke ich mit rechts drauf, stürzt die Anwendung ab.
Schade..

gruss
  Mit Zitat antworten Zitat
Benutzerbild von Tonic1024
Tonic1024

 
RAD-Studio 2009 Ent
 
#5
  Alt 18. Mai 2017, 08:08
Funktioniert bei mir unter Win10 (Arbeite als Domänenadmin). Icons sind da, Programme lassen sich starten, verschieben der Bar ist möglich. Absturz bei Rechtsklick hab ich allerdings auch. Danach ist das Programm geschlossen und es sind alle Icons vom Desktop weg (unkontrollierter Ausstieg - also völlig logisch). Wenn ich das Programm hingegen mit Alt+F4 beende tauchen sie ordungsgemäß wieder auf an der Stelle wo ich sie über meine drei Bildschirme verteilt hatte. Sehr schön!

Offenbar nur ne Kleinigkeit mit dem Kontextmenü.

[Edit]Ach, und mein Virenscanner schlägt an beim Start. Nur so als Info. Kennt man ja. Muss ja nichts heissen...[/Edit]

Toni

Geändert von Tonic1024 (18. Mai 2017 um 08:17 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von EWeiss
EWeiss

 
Delphi 2010 Architect
 
#6
  Alt 18. Mai 2017, 08:13
Funktioniert bei mir unter Win10 (Arbeite als Domänenadmin). Absturz bei rechtsklick hab ich allerdings auch.

Toni
sorry hab kein Win10 kann da nix machen.
Das einzige was ich machen kann MadExept einbinden und sehen was die Log dazu sagt.
Habs mal angehängt allerdings sind die EXE dadurch um einiges größer.


eigentlich öffnet sich da nur das Menu warum das unter W10 Probleme macht kann ich nicht sagen.
Schade..

Zitat:
Ach, und mein Virenscanner schlägt an beim Start. Nur so als Info. Kennt man ja. Muss ja nichts heissen...
Ich verwende nichts was einen False Alarm auslösen könnte Kein WShell Scrip oder ähnliches.

gruss
Miniaturansicht angehängter Grafiken
18.05.jpg  

Geändert von EWeiss (Gestern um 07:12 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Tonic1024
Tonic1024

 
RAD-Studio 2009 Ent
 
#7
  Alt 18. Mai 2017, 08:21
Hatte zwischenzeitlich noch etwas weiter getestet (oberen Beitrag editiert). Scheint wirklich nur das öffnen des Kontextmenüs zu sein. Alle anderen Funktionen scheinen herforragend zu klappen. Machst du da irgend etwas ungewöhnliches? Vielleicht kommen wir ja drauf
  Mit Zitat antworten Zitat
Benutzerbild von EWeiss
EWeiss

 
Delphi 2010 Architect
 
#8
  Alt 18. Mai 2017, 08:25
Hatte zwischenzeitlich noch etwas weiter getestet (oberen Beitrag editiert). Scheint wirklich nur das öffnen des Kontextmenüs zu sein. Alle anderen Funktionen scheinen herforragend zu klappen. Machst du da irgend etwas ungewöhnliches? Vielleicht kommen wir ja drauf
Hab ne MadExept Version hochgeladen.
--
Nein nur ein Ownerdraw Menu!
Hier mal eine vorgefertigte Konfig. (Wird normalerweise aus dem Menu heraus erstellt.)
Einfach in den Anwendungspfad klatschen.

Einige Programme davon dürften aber nicht starten da du sie nicht auf dem Desktop oder im System hast.

BITTE! *.txt mit config ersetzen.


Zitat:
Danach ist das Programm geschlossen und es sind alle Icons vom Desktop weg (unkontrollierter Ausstieg - also völlig logisch)
ja das sind die negativen Seiten so einer Anwendung wenn man zu tief in das System eintaucht.
Wenn es denn mal kracht.
Aber wie gesagt kann keine gewähr dafür geben das es unter W10 läuft.


gruss

Geändert von EWeiss (18. Mai 2017 um 10:10 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Tonic1024
Tonic1024

 
RAD-Studio 2009 Ent
 
#9
  Alt 18. Mai 2017, 08:36
Die Config wird gefunden und geladen. Ändert am Verhalten des Programms aber nichts. Eine Exception bekomm ich auch nicht, nur "Programm funktioniert nicht mehr". Der Debugger verrät mit, dass es sich um eine "unhandled win32 Exception" handelt.

Wenn ich den Kompatibilitästsmodus auf Win7 oder WinXP stelle: Selbes Verhalten.

Ich geh mal eben rüber auf einen Rechner mit Win7 Pro und starte es da nochmal.

Toni
  Mit Zitat antworten Zitat
Benutzerbild von EWeiss
EWeiss

 
Delphi 2010 Architect
 
#10
  Alt 18. Mai 2017, 08:44
Das ist was ich tue...

Delphi-Quellcode:
function GetMenuTxt(ItemId: Integer; var Img: Cardinal; var ImgSep: Cardinal;
  var ImgHover: Cardinal; var SideBarImg: Cardinal): WideString;
var
  sItem: WideString;

begin
  case ItemId of
    IDM_SepClose:
      Result := '-Application-';
    IDM_Close:
      begin
        sItem := 'Menu\MEN_Close.png';
        Result := 'Close OverTheTaskBar';
      end;
    IDM_About:
      begin
        sItem := 'Menu\MEN_About.png';
        Result := 'About';
      end;
    IDM_SepGraphics:
      Result := '-Graphics-';
    IDM_IconFrame:
      begin
        sItem := 'Menu\MEN_IconFrame.png';
        Result := 'Icon frame';
      end;
    IDM_IconBack:
      begin
        sItem := 'Menu\MEN_IconBack.png';
        Result := 'Background layer';
      end;
    IDM_Wallpaper:
      begin
        sItem := 'Menu\MEN_Miniature.png';
        Result := 'Change Wallpaper';
      end;
    IDM_SepShortCut:
      Result := '-ShortCut-';
    IDM_ShortCut:
      begin
        if gp.ShortCutVisible then
        begin
          sItem := 'Menu\MEN_ShortCutOff.png';
          Result := 'Hide shor cut';
        end
        else
        begin
          sItem := 'Menu\MEN_ShortCutOn.png';
          Result := 'Show short cut';
        end;
      end;
    IDM_SepSound:
      Result := '-Sound-';
    IDM_Sound:
      begin
        if gp.SoundActive then
        begin
          sItem := 'Menu\MEN_SoundOff.png';
          Result := 'Disable sound'
        end
        else
        begin
          sItem := 'Menu\MEN_SoundOn.png';
          Result := 'Enable sound';
        end;
      end;
    IDM_SepEdit:
      Result := '-Edit-';
    IDM_BuildCONFIG:
      begin
        sItem := 'Menu\MEN_OTTB.png';
        Result := 'Build Config file';
      end;
    IDM_Edit:
      begin
        sItem := 'Menu\MEN_Notepad.png';
        Result := 'Edit Config file';
      end;
    IDM_Restart:
      begin
        sItem := 'Menu\MEN_Restore.png';
        Result := 'Restart OverTheTaskBar';
      end;
  end;

  Img := GDIP_CreateImageFromFile(FolderResource + sItem);

  if TmpImgSep = 0 then
  begin
    TmpImgSep := GDIP_CreateImageFromFile(FolderResource + 'Menu\MEN_Sep.png');
    ImgSep := TmpImgSep;
  end
  else
    ImgSep := TmpImgSep;

  if TmpImgHover = 0 then
  begin
    TmpImgHover := GDIP_CreateImageFromFile(FolderResource + 'Menu\MEN_Hover.png');
    ImgHover := TmpImgHover;
  end
  else
    ImgHover := TmpImgHover;

  if TmpSideBarImg = 0 then
  begin
    TmpSideBarImg := GDIP_CreateImageFromFile(FolderResource + 'Menu\MEN_SideBar.png');
    SideBarImg := TmpSideBarImg;
  end
  else
    SideBarImg := TmpSideBarImg;

end;
Delphi-Quellcode:
    WM_RBUTTONDOWN:
      begin
        nHover := 0;
        nObjectID := GetMouseMoveSpriteID(WinHandle, lpX, lpY, nHover);
        if nObjectID = 0 then
        begin
          gp.hPopupMenu := CreatePopupMenu; // Bitmap Popupmenu
          if gp.hPopupMenu <> 0 then
          begin
            AppendMenu(gp.hPopupMenu, MF_OWNERDRAW, IDM_About, '');
            AppendMenu(gp.hPopupMenu, MF_OWNERDRAW or MF_SEPARATOR, IDM_SepGraphics, '');
            AppendMenu(gp.hPopupMenu, MF_OWNERDRAW, IDM_IconFrame, '');
            AppendMenu(gp.hPopupMenu, MF_OWNERDRAW, IDM_IconBack, '');
            AppendMenu(gp.hPopupMenu, MF_OWNERDRAW, IDM_Wallpaper, '');
            AppendMenu(gp.hPopupMenu, MF_OWNERDRAW or MF_SEPARATOR, IDM_SepShortCut, '');
            AppendMenu(gp.hPopupMenu, MF_OWNERDRAW, IDM_ShortCut, '');
            AppendMenu(gp.hPopupMenu, MF_OWNERDRAW or MF_SEPARATOR, IDM_SepSound, '');
            AppendMenu(gp.hPopupMenu, MF_OWNERDRAW, IDM_Sound, '');
            AppendMenu(gp.hPopupMenu, MF_OWNERDRAW or MF_SEPARATOR, IDM_SepEdit, '');
            AppendMenu(gp.hPopupMenu, MF_OWNERDRAW, IDM_BuildCONFIG, '');
            AppendMenu(gp.hPopupMenu, MF_OWNERDRAW, IDM_Edit, '');
            AppendMenu(gp.hPopupMenu, MF_OWNERDRAW, IDM_Restart, '');
            AppendMenu(gp.hPopupMenu, MF_OWNERDRAW or MF_SEPARATOR, IDM_SepClose, '');
            AppendMenu(gp.hPopupMenu, MF_OWNERDRAW, IDM_Close, '');
            GetCursorPos(P);
            MenuWahl := TrackPopupMenuEx(gp.hPopupMenu, TPM_RETURNCMD, P.x, P.y, WinHandle, nil);
            DestroyMenu(gp.hPopupMenu);
            gp.hPopupMenu := 0;
            if MenuWahl then
              SendMessage(WinHandle, WM_COMMAND, MakeLong(Word(MenuWahl), 0), 0);
          end;
        end
        else
          UpdateTheWindow(WinHandle, True);
      end;
Delphi-Quellcode:
    WM_MEASUREITEM:
      begin
        PMis := Pointer(lP);
        case PDis^.CtlType of
          ODT_MENU:
            begin
              if wP = 0 then
              begin
                Txt := WideString(GetMenuTxt(PDis.ItemId, Img, ImgSep, ImgHover, SideBarImg));
                try
                  hFDefault := TFont.Create(PDis.HDC);
                  hFDefault.Name := USEFONT;
                  hFDefault.SIZE := 12;
                  PMis^.itemWidth := 25 + GetTextWidth(hFDefault, Txt);
                  PMis^.itemHeight := 20;
                  ImgItemHeight := PMis^.itemHeight;
                finally
                  hFDefault.Free;
                end;
                Result := 1;
                exit;
              end;
            end;
        end;
      end;
Delphi-Quellcode:
    WM_DRAWITEM:
      begin
        PDis := Pointer(lP);
        case PDis^.CtlType of
          ODT_MENU:
            begin
              gp.hPopupMenu := WindowFromDC(PDis.HDC);

              Txt := PWideChar(GetMenuTxt(PDis.ItemId, Img, ImgSep, ImgHover, SideBarImg));

              // Create Graphics
              if GDIP_CreateFromHDC(PDis.HDC, Graphics) = OK then
              begin
                // DrawButton
                if (PDis.itemState and ODS_SELECTED) <> 0 then
                begin
                  GDIP_DrawImageRectI(Graphics, ImgHover, 20, PDis.rcItem.Top,
                    PDis.rcItem.Right - SideBarWidth, ImgItemHeight);
                end
                else
                begin
                  if ImgBack = 0 then
                    ImgBack := GDIP_CreateImageFromFile(FolderResource + 'FORM_Center.jpg');

                  GetClientRect(gp.hPopupMenu, Rect);
                  GDIP_GetImageSize(ImgBack, imgW, imgH);
                  GDIP_SetInterpolationMode(Graphics, InterpolationModeHighQualityBicubic);

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

                  if (PDis.ItemId = IDM_SepGraphics) or (PDis.ItemId = IDM_SepClose) or
                    (PDis.ItemId = IDM_SepShortCut) or (PDis.ItemId = IDM_SepSound) or
                    (PDis.ItemId = IDM_SepEdit) then
                  begin
                    GDIP_DrawImageRectI(Graphics, ImgSep, 20, PDis.rcItem.Top,
                      PDis.rcItem.Right - SideBarWidth, ImgItemHeight);
                  end;
                end;

                // DrawText
                if not(PDis.ItemId = IDM_SepGraphics) and not(PDis.ItemId = IDM_SepClose) and not
                  (PDis.ItemId = IDM_SepShortCut) and not(PDis.ItemId = IDM_SepSound) and not
                  (PDis.ItemId = IDM_SepEdit) then
                begin
                  PDis.rcItem.Left := 40;
                  Color := SKAERO_ColorARGB(255, RGB(170, 174, 176));
                  GDIP_DrawTextToDC(PDis.HDC, Txt, PDis.rcItem, Color, PWideChar(USEFONT), 12,
                    FontStyleBoldItalic, 1.1, 0, nil);
                end
                else
                begin
                  // Allign Text Center
                  hFDefault := TFont.Create(PDis.HDC);
                  hFDefault.Name := USEFONT;
                  hFDefault.SIZE := 10;
                  hFDefault.Style := [fsBold, fsUnderline];
                  TxtLen := GetTextWidth(hFDefault, Txt) - ImgItemHeight;
                  PDis.rcItem.Left := ((PDis.rcItem.Right - TxtLen) div 2);
                  PDis.rcItem.Top := PDis.rcItem.Top;

                  Color := SKAERO_ColorARGB(255, RGB(240, 240, 240));
                  GDIP_DrawTextToDC(PDis.HDC, Txt, PDis.rcItem, Color, PWideChar(USEFONT), 13,
                    FontStyleBold, 1.1, 0, nil);
                  hFDefault.Free;

                end;

                GDIP_GetImageSize(Img, imgW, imgH);
                GDIP_DrawImageRectRectI(Graphics, Img, 23, PDis.rcItem.Top + 2, imgW, imgH, 0, 0,
                  imgW, imgH, 2, nil, false, nil);

                GDIP_DisposeImage(Img);

                if (PDis.itemAction and ODA_DRAWENTIRE) <> 0 then
                begin
                  GetClipBox(PDis.HDC, Rect);
                  GDIP_GetImageSize(SideBarImg, imgW, imgH);
                  GDIP_DrawImageRectRectI(Graphics, SideBarImg, 0, 0, imgW - 1, Rect.Bottom, 0, 0,
                    imgW, imgH, 2, nil, false, nil);

                  if Rect.Bottom > 100 then
                  begin
                    hFDefault := TFont.Create(PDis.HDC);
                    hFDefault.Name := USEFONT;
                    hFDefault.SIZE := 10;
                    hFDefault.Style := [fsBold, fsUnderline];
                    hFDefault.Orientation := 900;
                    hFDefault.Color := RGB(255, 255, 250);
                    Rect.Bottom := Rect.Bottom + 12;
                    DrawText(PDis.HDC, 'Over The Task Bar', Length('Over The Task Bar'), Rect,
                      DT_BOTTOM or DT_LEFT or DT_SINGLELINE);

                    hFDefault.Free;
                  end;
                end;
                GDIP_DeleteGraphics(Graphics);
              end;
              Result := 1;
              exit;
            end;
        end;
      end;

Mir fällt nichts ein was da jetzt krachen sollte.
Denn hier funktioniert es ohne Probleme (Wie immer aber das kennt man ja)

gruss

Geändert von EWeiss (18. Mai 2017 um 08:50 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:

Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2017 by Daniel R. Wolf