Delphi-PRAXiS
Seite 9 von 32   « Erste     789 101119     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 15. Jun 2017 18:31

AW: Ordnung muss sein (LaunchBar)
 
Zitat:

Zitat von Whookie (Beitrag 1374635)
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.

Wie kann der nicht gefunden werden?
Der liegt doch unter User/Desktop ich kann mir nicht vorstellen das unter W10 das Verzeichnis nicht mehr existiert.
Eventuell mal mit Adminrechten starten,

Check mal diese Zeile in CreateShortCut.
Delphi-Quellcode:
sDeskTopAdm := GetSpecialFolder(CSIDL_DESKTOP) + '\';



gruss

EWeiss 15. Jun 2017 18:33

AW: Ordnung muss sein (LaunchBar)
 
Zitat:

Zitat von Whookie (Beitrag 1374637)
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;

Nö das ist definitiv falsch! Sorry :)
Der Sprites.Count ist immer korrekt.

Wenn überhaupt dann liegt es an deinem System der Desktop Ordner muss vorhanden sein.
Ich kann aber nicht den Quelltext manipulieren weil auf deinem System etwas nicht stimmt.

Wie gesagt prüf mal diese Zeile

Delphi-Quellcode:
sDeskTopAdm := GetSpecialFolder(CSIDL_DESKTOP) + '\';

Das sollte dir zurück liefern.
C:\Users\UserName\Desktop\ (Admin) oder C:\Users\Public\Desktop\ (Public).

gruss

jaenicke 15. Jun 2017 19:42

AW: Ordnung muss sein (LaunchBar)
 
GetSpecialFolder liefert schon einen Backslash am Ende. Der ist daher dann doppelt vorhanden. Besser ist in so einem Fall IncludeTrailingPathDelimiter zu benutzen:
Delphi-Quellcode:
sDeskTopAdm := IncludeTrailingPathDelimiter(GetSpecialFolder(CSIDL_DESKTOP));
// fügt das Pfadtrennzeichen hinzu, wenn es noch nicht da ist
Bei mir funktioniert die aktuell angehängte Version nun jedenfalls mit Windows 10 und auch Icons sind nun da. :thumb:
Das Problem mit dem leicht verschobenen Menütext ist noch da, stört aber nicht wirklich. Die Koordinaten stimmen jedenfalls. Diese sind bei beiden Zeichenvorgängen gleich. Warum das so falsch aussieht, kann ich aktuell auch nicht sagen.

// EDIT:
Nehme ich diese Zeile heraus, wird der durch die Mausbewegung gehoverte Eintrag nicht mehr zurückgesetzt, aber der Fehler mit der Textverschiebung ist weg:
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);

Whookie 15. Jun 2017 19:52

AW: Ordnung muss sein (LaunchBar)
 
Hab da jetzt noch mal reingeschaut und das unter Windows 10 zum Laufen gebracht:

uShortCut.pas
Delphi-Quellcode:
procedure TShortCut.CreateShortCut(WinHandle: HWND);
...
begin
  ..

  if Win32MajorVersion >= 10 then
  begin
    Prop.ProgManHandle := 0;
    repeat
      Prop.ProgManHandle := FindWindowEx(0, Prop.ProgManHandle, 'WorkerW', '');
      Prop.ListViewHandle := FindWindowEx(Prop.ProgManHandle, 0, 'SHELLDLL_DefView', '');
    until (Prop.ListViewHandle<>0) Or (Prop.ProgManHandle = 0);
  End
  else
  begin
    Prop.ProgManHandle := FindWindow('Progman', 'Program Manager');
    Prop.ListViewHandle := FindWindowEx(Prop.ProgManHandle, 0, 'SHELLDLL_DefView', '');
  end;
  Prop.ListViewHandle := FindWindowEx(Prop.ListViewHandle, 0, 'SysListView32', 'FolderView');
  ItemCount := SendMessage(Prop.ListViewHandle, LVM_GETITEMCOUNT, 0, 0);
  ...
Allerdings muss man dann die OTTB.config aus dem Post oben löschen (sie führt zu einem Crash weil wohl ein paar der Links nicht vorhanden oder ungültig sind).

EWeiss 15. Jun 2017 19:56

AW: Ordnung muss sein (LaunchBar)
 
Zitat:

Zitat von jaenicke (Beitrag 1374643)
GetSpecialFolder liefert schon einen Backslash am Ende. Der ist daher dann doppelt vorhanden. Besser ist in so einem Fall IncludeTrailingPathDelimiter zu benutzen:
Delphi-Quellcode:
sDeskTopAdm := IncludeTrailingPathDelimiter(GetSpecialFolder(CSIDL_DESKTOP));
// fügt das Pfadtrennzeichen hinzu, wenn es noch nicht da ist
Bei mir funktioniert die aktuell angehängte Version nun jedenfalls mit Windows 10 und auch Icons sind nun da. :thumb:
Das Problem mit dem leicht verschobenen Menütext ist noch da, stört aber nicht wirklich. Die Koordinaten stimmen jedenfalls. Diese sind bei beiden Zeichenvorgängen gleich. Warum das so falsch aussieht, kann ich aktuell auch nicht sagen.

Ok daran könnte es liegen.
Ich muss den Backlash hier anhängen warum auch immer sonst geht es nicht.
Werde es ändern ;)

Und neue Version hochladen.

Zitat:

Die Koordinaten stimmen jedenfalls. Diese sind bei beiden Zeichenvorgängen gleich. Warum das so falsch aussieht, kann ich aktuell auch nicht sagen.
Sorry W10 ist immer noch ein Experimentier System. ;) Nicht schlagen LOL.

Zitat:

Das Problem mit dem leicht verschobenen Menütext ist noch da, stört aber nicht wirklich.
Mich stört das enorm will das weg haben ;)
Ist das gleiche Menu wie hier.
http://www.delphipraxis.net/192329-kvideo-player.html Tritt das dort auch auf ?

Was mich mal interessieren würde hängt sich bei dir die IDE beim Debuggen des Menüs auf?
1. Ich setze einen Breakpoint bei, in WM_DRAWITEM:

Delphi-Quellcode:
if ImgBack = 0 then
  ImgBack := GDIP_CreateImageFromFile(FolderResource + 'Menu\MEN_Center.png');
jetzt steppe ich eine Zeile weiter.
Drücke ich jetzt den grünen Pfeil Start(F9)) dann hängt sich die komplette IDE auf.

Keine Ahnung ob das nur unter D2010 auftritt oder auch woanders.
Wenn woanders! Dann ist da noch irgendetwas faul im Code was die IDE nicht verträgt. (Oder Thread Problem) was unter umständen dieses Problem verursacht.

gruss

EWeiss 15. Jun 2017 19:59

AW: Ordnung muss sein (LaunchBar)
 
Zitat:

Zitat von Whookie (Beitrag 1374645)
Hab da jetzt noch mal reingeschaut und das unter Windows 10 zum Laufen gebracht:

uShortCut.pas
Delphi-Quellcode:
procedure TShortCut.CreateShortCut(WinHandle: HWND);
...
begin
  ..

  if Win32MajorVersion >= 10 then
  begin
    Prop.ProgManHandle := 0;
    repeat
      Prop.ProgManHandle := FindWindowEx(0, Prop.ProgManHandle, 'WorkerW', '');
      Prop.ListViewHandle := FindWindowEx(Prop.ProgManHandle, 0, 'SHELLDLL_DefView', '');
    until (Prop.ListViewHandle<>0) Or (Prop.ProgManHandle = 0);
  End
  else
  begin
    Prop.ProgManHandle := FindWindow('Progman', 'Program Manager');
    Prop.ListViewHandle := FindWindowEx(Prop.ProgManHandle, 0, 'SHELLDLL_DefView', '');
  end;
  Prop.ListViewHandle := FindWindowEx(Prop.ListViewHandle, 0, 'SysListView32', 'FolderView');
  ItemCount := SendMessage(Prop.ListViewHandle, LVM_GETITEMCOUNT, 0, 0);
  ...
Allerdings muss man dann die OTTB.config aus dem Post oben löschen (sie führt zu einem Crash weil wohl ein paar der Links nicht vorhanden oder ungültig sind).

Kannst du gerne tun aber ich ändere nichts am Code bzg. der Überprüfung von der System Version.
Das muss so laufen und tut es auch so wie man hört.
Denn @jaenicke verwendet auch W10 das kann nicht unterschiedlich sein.

Trotzdem Danke!

gruss

Whookie 15. Jun 2017 20:09

AW: Ordnung muss sein (LaunchBar)
 
Das mit dem Backslash hat bei mir überhaupt keine Auswirkung unter Windows 10. Ob mit oder ohne Doppeltem Backslash spielt keine Rolle, das eigentliche Problem liegt darin, das unter Windows 10 der 'SHELLDLL_DefView' nicht mehr unter 'Progman' liegt sondern in einem Fenster der Klasse "WorkerW".

Solange also die Liste nicht gefunden wird der Code unter:

Delphi-Quellcode:
  ItemCount := SendMessage(Prop.ListViewHandle, LVM_GETITEMCOUNT, 0, 0);

  if ItemCount <> 0 then
  begin
erst gar nicht ausgeführt!

EWeiss 15. Jun 2017 20:15

AW: Ordnung muss sein (LaunchBar)
 
Zitat:

Zitat von Whookie (Beitrag 1374649)
Das mit dem Backslash hat bei mir überhaupt keine Auswirkung unter Windows 10. Ob mit oder ohne Doppeltem Backslash spielt keine Rolle, das eigentliche Problem liegt darin, das unter Windows 10 der 'SHELLDLL_DefView' nicht mehr unter 'Progman' liegt sondern in einem Fenster der Klasse "WorkerW".

Solange also die Liste nicht gefunden wird der Code unter:

Delphi-Quellcode:
  ItemCount := SendMessage(Prop.ListViewHandle, LVM_GETITEMCOUNT, 0, 0);

  if ItemCount <> 0 then
  begin
erst gar nicht ausgeführt!

Mag ja sein. (Glaube ich dir auch) ;)
Ist aber irgendwie fraglich denn bei den anderen Leuten mit W10 funktioniert es doch auch.
Es sei denn die fahren alle in einer VM (Wie sich das dort verhält kann ich nicht mit Bestimmtheit sagen).

Neue Version hochgeladen.
IncludeTrailingPathDelimiter hinzugefügt.

gruss

EWeiss 15. Jun 2017 20:40

AW: Ordnung muss sein (LaunchBar)
 
Hier noch eine andere Version die auf Klassen basiert. (Mache ich nicht gern unter NON-VLC)
Also alle Funktionen in uMain wurden zur Klasse TMainApp hinzugefügt um das Maximum an Globalen Variablen zu reduzieren.
Wenn euch das lieber ist werde ich diese als Arbeitskopie verwenden und darauf weiter aufbauen.

Das obige Archiv wird in dem Fall ersetzt.
Ok keine Mitteilung egal werde es trotzdem ersetzen.

gruss

jaenicke 15. Jun 2017 21:52

AW: Ordnung muss sein (LaunchBar)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von EWeiss (Beitrag 1374646)
Ist das gleiche Menu wie hier.
http://www.delphipraxis.net/192329-kvideo-player.html Tritt das dort auch auf ?

Das Programm stürzt ab, wenn ich mit der rechten Maustaste klicke oder auf Play.

Zitat:

Zitat von EWeiss (Beitrag 1374646)
Was mich mal interessieren würde hängt sich bei dir die IDE beim Debuggen des Menüs auf?

Nein, funktioniert reibungslos. Solche Probleme hatte ich bis Delphi XE6 aber immer wieder mal. Allerdings meistens nicht immer an einer bestimmten Stelle, sondern nur manchmal.

Zitat:

Zitat von Whookie (Beitrag 1374649)
Das mit dem Backslash hat bei mir überhaupt keine Auswirkung unter Windows 10.

Das stimmt, Windows akzeptiert das trotzdem.

Zitat:

Zitat von Whookie (Beitrag 1374649)
das eigentliche Problem liegt darin, das unter Windows 10 der 'SHELLDLL_DefView' nicht mehr unter 'Progman' liegt sondern in einem Fenster der Klasse "WorkerW".

Kann ich nicht nachvollziehen:
Anhang 47542
Ich habe aber gelesen, dass andere seit Windows Vista ebenfalls dieses Problem haben. Viele gehen daher alle WorkerW Fenster durch, wenn der Weg über Progman nicht erfolgreich war und suchen darin nach der ListView.
Wenn, reicht jedenfalls nicht einer der Wege. Seit Vista ist beides möglich. Es scheint etwas damit zu tun zu haben, ob Aero aktiviert ist usw.

Zitat:

Zitat von EWeiss (Beitrag 1374651)
Hier noch eine andere Version die auf Klassen basiert. (Mache ich nicht gern unter NON-VLC)

Das sollte eine bessere Struktur bringen (habe noch nicht hineingeschaut).

Zitat:

Zitat von EWeiss (Beitrag 1374651)
Das obige Archiv wird in dem Fall ersetzt.

Wie wäre es denn, wenn du den Quelltext schlicht z.B. auf GitHub stellst? So wie ich hier zum Beispiel auch:
https://github.com/jaenicke/MTCL
Dann ist auch gleich die Versionshistory usw. dabei:
https://github.com/jaenicke/MTCL/commits/master
https://github.com/jaenicke/MTCL/com...990d348e4f6efa


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:06 Uhr.
Seite 9 von 32   « Erste     789 101119     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