![]() |
AW: Ordnung muss sein (LaunchBar)
Zitat:
|
AW: Ordnung muss sein (LaunchBar)
Zitat:
gruss |
AW: Ordnung muss sein (LaunchBar)
Eine Version die die Benutzer- und Programmeinstellungen im selben Verzeichnis speichert in welchem sich auch die Exe-Datei befindet.
Portable-Programme kommen, denke ich, immer mehr in Mode. |
AW: Ordnung muss sein (LaunchBar)
Zitat:
Habe es geändert weil ich nicht möchte das Admin rechte vorliegen müssen um das Programm zu starten wenn man unter Programme die Anwendung startet. Ich kann ja nicht vorhersehen wo die Leute das Anwendung ablegen. gruss |
AW: Ordnung muss sein (LaunchBar)
Ok verständlich.
Ich selber mache es so, dass ich bei jedem Programmstart die Schreibrechte im aktuellen Verzeichnis prüfe (Dummy-Verzeichnis erstellen). Wenn das funktioniert, brauche ich keine Schreibrechte. |
AW: Ordnung muss sein (LaunchBar)
Zitat:
Spielt aber auch keine Rolle. Wenn man portable Nutzung anbieten möchte, ist die einfachste Lösung, dass die Konfigurationsdatei bereits im Ordner vorhanden sein muss und dann auch verwendet wird. Dann muss man nur prüfen, ob diese Datei da ist und nimmt sonst das AppData Verzeichnis. Und wenn man ein portable Zip ausliefert, ist die einfach mit drin. |
AW: Ordnung muss sein (LaunchBar)
Zitat:
Bei mir macht es keinen Sinn diese mitzuliefern da andere mit Sicherheit nicht die gleichen Verknüpfungen auf dem Desktop haben wie ich. Von den verwendeten Programmen mal ganz abgesehen gruss |
AW: Ordnung muss sein (LaunchBar)
Nein, ich meine leer, als reinen Platzhalter um den portablen Modus zu aktivieren.
(Ich habe dafür mal eine ![]() |
AW: Ordnung muss sein (LaunchBar)
Zitat:
Wo man dann aktivieren kann ob die Anwendung Portabel sein soll oder nicht. Dementsprechend wird dann der Pfad gewählt. Default wäre aber nicht portable. (Also beim ersten Start) gruss |
AW: Ordnung muss sein (LaunchBar)
Neue Version oben. gruss |
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 |
AW: Ordnung muss sein (LaunchBar)
Der Absturz beim Rechtsklick bei Windows 10 kommt von dieser Zeile (uMain.pas Zeile 961):
Delphi-Quellcode:
Rect ist leider leer, deshalb funktioniert die Division durch Rect.Bottom nicht.
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); 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. |
AW: Ordnung muss sein (LaunchBar)
Zitat:
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:
und jetzt
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;
Delphi-Quellcode:
constructor TShortCut.Create;
begin CreateIcon := TCreateIcon.Create; end;
Delphi-Quellcode:
if Assigned(Sprites) then
begin Sprites.Free; AddChildWindows; end else AddChildWindows; Zitat:
Das Hintergrund Bitmap sorgt dafür das ein Invalidate auf das Menu ausgeführt wird. gruss |
AW: Ordnung muss sein (LaunchBar)
Zitat:
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:
ist nicht das gleiche wie unter
WM_RBUTTONDOWN:
begin nObjectID := GetMouseMoveSpriteID(WinHandle, lpX, lpY); if nObjectID = 0 then begin Prop.hPopupMenu := CreatePopupMenu; // Bitmap Popupmenu if Prop.hPopupMenu <> 0 then begin
Delphi-Quellcode:
wäre es so dann brauchte ich es nicht neu zu initialisieren.
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)); Funktioniert unter W7 Das müsste auch unter W10 gehen. gruss |
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. |
AW: Ordnung muss sein (LaunchBar)
Zitat:
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 |
AW: Ordnung muss sein (LaunchBar)
Neue Version oben W10 Menu Handle Problem gefixt.
gruss |
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 |
AW: Ordnung muss sein (LaunchBar)
Zitat:
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 |
AW: Ordnung muss sein (LaunchBar)
Zitat:
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 . . . |
AW: Ordnung muss sein (LaunchBar)
Zitat:
Wenn ich dein Bild mit dem meinen vergleiche dann sieht man sehr genau das alle Schriften nicht zentriert sind wenn das Menu Initialisiert wird. Das werden sie erst wenn man mit der Maus drüber fährt. gruss |
AW: Ordnung muss sein (LaunchBar)
Ich behaupte jetzt einfach mal das hier ein Thread Problem vorliegt.
Mit der Begründung! 1. Wenn ich das Menu in D2010 debugge hängt sich die IDE auf. 2. Unter W10 wird das Handle nicht gefunden (Thread Problem?) 3. Die Schriften werden falsch gezeichnet (Thread Problem?) Habe aber im Moment keine Idee wie ich das beheben könnte. Wo muss ich suchen um das beheben zu können ? bzw. wie debuggen wenn sich die IDE aufhängt. eventuell falsches Flag?
Delphi-Quellcode:
Nach MenuWahl (TPM_RETURNCMD) warte die Anwendung bis das Popupmenu zerstört oder eine Rückgabe erfolgt ist.
GetCursorPos(P);
MenuWahl := TrackPopupMenuEx(Prop.hPopupMenu, TPM_RETURNCMD, P.x, P.y, WinHandle, nil); DestroyMenu(Prop.hPopupMenu); Prop.hPopupMenu := 0; if MenuWahl then SendMessage(WinHandle, WM_COMMAND, MakeLong(Word(MenuWahl), 0), 0); Setze ich jetzt einen Breakpoint in WM_DRAWITEM dann hängt die IDE. gruss |
AW: Ordnung muss sein (LaunchBar)
OK habe nochmal alles zurück gemacht um das mit W10 zu testen.
1. Kracht es wenn das Menu aufgerufen wird? 2. Wenn es geht wie wird die Schrift dargestellt. Sollte es funktionieren habe ich wohl den Fehler gefunden. EDIT: Geht nicht Anhange gelöscht. gruss |
AW: Ordnung muss sein (LaunchBar)
Das ist das erste Mal, dass ich diese Anwendung teste. Windows 10 in einer VM.
Ein Rechtsklick auf die Leiste (leerer Bereich links neben dem Papierkorb) lässt die Windows-Meldung anzeigen "OverTheTaskbar funktioniert nicht mehr". |
AW: Ordnung muss sein (LaunchBar)
Zitat:
gruss |
AW: Ordnung muss sein (LaunchBar)
Richtig.
|
AW: Ordnung muss sein (LaunchBar)
Zitat:
Ich Subclasse das Menu gerade wenn fertig lade ich neue Testversion hoch. Danke dir. Werde die neue Exe dann lsöchen. gruss |
AW: Ordnung muss sein (LaunchBar)
Hab das Menu jetzt gesubclassed ob es was bringt unter W10 was die Schrift angeht kann ich nicht sagen.
Der Artikel ist interessant.. ![]() Wenn alle Stricke reißen erstelle ich ein neues Menu ohne Skin.. Was auch noch ansehnlich ist. Anhang gelöscht da keine Rückmeldung kommt ;) gruss |
AW: Ordnung muss sein (LaunchBar)
Hier noch mal ein Update. (W10)
Vielleicht möchte es noch mal jemand starten und mitteilen ob beim Aufruf des Menu die Schriften korrekt zentriert werden und nicht erst später nach dem drüberfahren mit der Maus. Hatte einige Bereichs Fehler(für COLORREF Integer definiert). Ok nicht die feine Art. Das Einfrieren der IDE beim Debuggen könnte ich immer noch nicht analysieren woran das liegt. Macht vorher ein Update der alten Dateien. LOL gruss |
AW: Ordnung muss sein (LaunchBar)
Braucht man da noch andere Dateien? Ich habe jetzt nur das letzte Archiv geladen, entpackt und die Exe gestartet.
Zitat:
|
AW: Ordnung muss sein (LaunchBar)
Zitat:
Da ist auch der Quelltext drin. gruss |
AW: Ordnung muss sein (LaunchBar)
Ich hab jetzt alles heruntergeladen, die Exe mal mit, mal ohne Admin-Rechte gestartet, es bleibt beim Absturz. Schade :(
|
AW: Ordnung muss sein (LaunchBar)
Bei mir funktioniert es.
Menu aber noch immer kaputt. |
AW: Ordnung muss sein (LaunchBar)
Zitat:
Wenn ja werde ich wohl ein neues Menu erstellen müssen. Macht so keinen Sinn. Die alte EXE im obrigen Archiv sollte eigentlich funktionieren. (Abgesehen von den Grafikfehler) Danke für den Test Anbei noch meine Config zum testen. Einfach ins Anwender Verzeichnis kopieren Portable Version Einschalten und dann im Menu Restart klicken. Die Erweiterung ".txt" nach *.config umbenennen. Wenn man im Menu "Edit Config! aufruft kann es zu einer Systeminformationsmeldung kommen das die Erweiterung nicht mit einer Anwendung verknüpft ist. Das kann man ignorieren oder einfach die Erweiterung *.config" mit einem beliebigen Text Editor verknüpfen. Nach dem klick auf OK wird diese dann mit Notepad geöffnet. (Default Text Editor) Wenn man CleanUp aus dem Menu startet wird die Config aufgeräumt und alle nicht vorhandenen Icons entfernt. Wenn man das nicht will, den anschließenden Dialog mit Abbrechen bestätigen. gruss |
AW: Ordnung muss sein (LaunchBar)
Zitat:
Ich lösche sie dann wieder wenn es nicht geht. gruss |
AW: Ordnung muss sein (LaunchBar)
Hab es auch mal versucht (Win10/64), leider kriege ich auch einen Absturz beim Start.
Der Grund bei mir scheint daran zu liegen, das über die WM_PRINT Message DockBar.DrawDockBar aufgerufen wird und dort (ab Zeile 128)
Delphi-Quellcode:
ausgeführt wird. ID_FIRST = 6 Sprites enthält aber nur 5 Elemente.
if Sprites[ID_FIRST].Left < 40 then
Sprites[ID_LEFT].Visible := True else Sprites[ID_LEFT].Visible := false; mit:
Delphi-Quellcode:
startet das Programm mal.
if Sprites[ID_LEFT].Left < 40 then
Sprites[ID_LEFT].Visible := True else Sprites[ID_LEFT].Visible := false; |
AW: Ordnung muss sein (LaunchBar)
Zitat:
Müsste eigentlich 0 > 5 sein also 6 Verwende mal meine Config ob das Problem dann behoben ist. gruss |
AW: Ordnung muss sein (LaunchBar)
W10 macht nur Ärger.
Bei mir ist alles in Ordnung. Zitat:
6 = Papierkorb also das 7 Element. Siehe Shot! ID_LEFT ist der kleine Pfeil der sichtbar wird wenn das erste Sprite(Icon) < Left 40 ist. Also es liegt kein Programm Fehler vor. gruss |
AW: Ordnung muss sein (LaunchBar)
Liegt wohl wirklich eher unter Windows 10. Das Problem scheint zu sein, dass unter Windows 10 den Desktop-Ordner nicht gefunden wird (daher bleibt die Leiste auch leer).
Selbst mit der OTTB.txt/.config wird nichts angezeigt. |
AW: Ordnung muss sein (LaunchBar)
Zu mindestens solltest du das so machen, dann gibts keinen Absturz, wenn keine Elemente in der Liste sind:
Delphi-Quellcode:
if (Sprites.Count > ID_FIRST) And (Sprites[ID_FIRST].Left < 40) then
Sprites[ID_LEFT].Visible := True else Sprites[ID_LEFT].Visible := false; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:16 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 by Thomas Breitkreuz