Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Spectragram (https://www.delphipraxis.net/190309-spectragram.html)

EWeiss 21. Sep 2016 21:29


Spectragram
 
Projekt entfernt..

Luckie 22. Sep 2016 02:09

AW: Spectragram
 
Windows 7 Starter
Spectragram.part1
Beim Klicken auf die Schaltfläche, um eine MP3 Datei auszuwählen:

Code:
---------------------------
Anwendungsfehler
---------------------------
Exception EAccessViolation in Modul Spectragram.exe bei 00052135.

Zugriffsverletzung bei Adresse 00452135 in Modul 'Spectragram.exe'. Lesen von Adresse 00000000.


---------------------------
OK  
---------------------------
Wo merkt sich dein Programm eigentlich welchen Hintergrund ich eingestellt habe? Ich würde das Programm gerne wieder irgendwie sauber von meinem Rechner bekommen.

Nachtrag: Gleiches Problem mit der Exe in Spectragram.part2

EWeiss 22. Sep 2016 02:22

AW: Spectragram
 
Zitat:

Zitat von Luckie (Beitrag 1348367)
Windows 7 Starter
Spectragram.part1
Beim Klicken auf die Schaltfläche, um eine MP3 Datei auszuwählen:

Code:
---------------------------
Anwendungsfehler
---------------------------
Exception EAccessViolation in Modul Spectragram.exe bei 00052135.

Zugriffsverletzung bei Adresse 00452135 in Modul 'Spectragram.exe'. Lesen von Adresse 00000000.


---------------------------
OK  
---------------------------
Wo merkt sich dein Programm eigentlich welchen Hintergrund ich eingestellt habe? Ich würde das Programm gerne wieder irgendwie sauber von meinem Rechner bekommen.

Nachtrag: Gleiches Problem mit der Exe in Spectragram.part2

Erst mal benötigt man beide Archive um die Dateien zu entpacken ich dachte eigentlich das wäre bekannt.
AppData/Brewideas/Spectragram.

Warum sauber deinstallieren wird doch nichts Installiert. ;)
Mal geschaut warum das nicht läuft.. Source ist doch dabei. Hmmm.. Nun gut.
Kann ich schließen öffnen wann ich will kann kein Problem feststellen.

Kein Problem hier siehe Pic. ;)

Zitat:

Nachtrag: Gleiches Problem mit der Exe in Spectragram.part2
Boahh eh.. Nochmal ich dachte eigentlich das wäre bekannt das dies ein Multipart Archiv ist.
Und es zwingend nötig ist das Archiv Part1 und part2 zu laden
Part1 wird extrahiert der Rest folgt automatisch.

Ist der erste Part fertig werden die restlichen Teile aus dem Part2 Archiv extrahiert.
Und die EXE ist die gleiche denn sie gehört zum Archiv (Spectragram) das lediglich geplittet wurde weil ich hier keine Anhänge mehr als 5MB hochladen kann.


gruss

Luckie 22. Sep 2016 02:45

AW: Spectragram
 
Liste der Anhänge anzeigen (Anzahl: 3)
Ich besitze kein Entpacker der Rar Archive entpacken kann. Der Freecommander kann jedes Archiv einzeln ohne Probleme entpacken. Keine Ahnung , ob er erkennt, dass es ein Multipartarchiv ist. Ich bekomme entsprechend zwei Ordner. Siehe Anhang. In beiden Ordner befinden sich wohl identische Dateien.

Ich kann dir nur berichten, was bei mir passiert. Beweis siehe Anhang. Debuggen kann ich es auf dem Netbook nicht, da ich hier kein Delphi installiert habe. Und ich weiß gar nicht, ob sich dein Code mit dem BDS2006 überhaupt kompilieren lässt.

Es kann ja sein, dass es bei dir funktioniert. Bei mir tut es das jedenfalls nicht. Und ich bin bestimmt nicht zu doof eine Exe zu starten und einen Button anzuklicken.

Auch wenn nichts installiert wird und ich es einfach lösche, bleibt doch noch Müll übrig, den ich eben auch gerne loswerden wollen täte. Sonst habe ich nach zehn Testprogramme nur noch Müll auf dem Rechner, der nicht mehr benötigt wird.

Und ich würde dich bitte deinen Ton mir gegenüber etwas zu ändern. Ich bin kein vollkommener Idiot.

EWeiss 22. Sep 2016 02:52

AW: Spectragram
 
Zitat:

Und ich würde dich bitte deinen Ton mir gegenüber etwas zu ändern. Ich bin kein vollkommener Idiot.
Bitte ?

Wo war ich unfreundlich..
Ich kann nichts dafür wenn dir nicht klar ist das es hier um ein Multipart Archiv geht.
Sorry aber das weis meine Nichte schon und die ist 5.

Das es nicht starte wird wohl daran liegen das du alle Design spezifische Dinge in deinem System deaktiviert hast.
Da geht kein Aero oder sonstiges das kann dann zu deinem Fehler führen.
Aber das kann ich selber testen.

Aber kein Problem

Jedenfalls war ich nicht unfreundlich und als Idiot habe ich dich auch nicht angesprochen.
Bitte sachlich bleiben. Besonders als Mod!

Zitat:

Und ich bin bestimmt nicht zu doof eine Exe zu starten und einen Button anzuklicken.
Hat niemand behauptet.. Schlecht geschlafen ? Oder noch gar nicht.

Es ist aber offensichtlich das der Freecommander wohl keine Multipart Archive entpacken kann denn da fehlt der Ordner "Src" (Source).
Oder ich habe ihn nicht gesehen auf deinen Bildern.
Was ich noch feststellen muss durch die Veränderung der Anhänge das addieren Unterschiedlicher Zahlen zu jedem Archiv ist das Multipart Archiv quasi zerstört.

Dann bitte wieder umbenennen nach
spectragram.part1.rar
spectragram.part2.rar

Ansonsten funktioniert das Entpacken nicht.


gruss

Luckie 22. Sep 2016 02:59

AW: Spectragram
 
Der Ton macht die Musik:
Zitat:

Boahh eh.. Nochmal ich dachte eigentlich das wäre bekannt das dies ein Multipart Archiv ist.
Das mit den Archiven hat sich geklärt. Wenn ich nur Part1 habe, sagt mir der Freecommander, dass es kein gültiges Archiv ist. Daran liegt es also nicht.

Windows 7 Starter kennt kein Aero. Und auf meinem Windows 7 Home habe ich es deaktiviert. Es würde also auch da abstürzen, weil es zwingend Aero voraussetzt?

EWeiss 22. Sep 2016 03:09

AW: Spectragram
 
Zitat:

Zitat von Luckie (Beitrag 1348372)
Der Ton macht die Musik:
Zitat:

Boahh eh.. Nochmal ich dachte eigentlich das wäre bekannt das dies ein Multipart Archiv ist.
Das mit den Archiven hat sich geklärt. Wenn ich nur Part1 habe, sagt mir der Freecommander, dass es kein gültiges Archiv ist. Daran liegt es also nicht.

Windows 7 Starter kennt kein Aero. Und auf meinem Windows 7 Home habe ich es deaktiviert. Es würde also auch da abstürzen, weil es zwingend Aero voraussetzt?

Und deshalb warst du jetzt angep....
Ok werde ich mir merken das du ein Boahh im Text nicht ausstehen kannst.
Das war nichts anderes als ein erstaunter Aufruf..

Es sieht so aus das wenn ich mit meinem Dialog auf Aero hin überprüfe das der Dialog hier den Absturz verursacht.
Nein wird wohl nicht gehen deshalb läuft es auch unter W10 nicht.
Jain.. du hast Aero deaktiviert aber im System selbst gibt es trotzdem DWM oder nicht? (W7 Home)

In deinem Window ist zumindest "Crystal" und "Blur Mode" deaktiviert. (Was auch richtig ist.)
Das Fenster wird dann wie unter XP behandelt wo es auch kein DWM gibt.

gruss

Luckie 22. Sep 2016 03:16

AW: Spectragram
 
OK. Dein Boah ey hat bei mir den Eindruck hinterlassen, dass du genervt warst, weil ich anscheinend unfähig bin ein Multipartarchiv zu erkennen. Da habe ich mich etwas angepisst gefühlt. Vergessen wir das.

Der Freecommander macht wohl folgendes (und das ist etwas blöd vom Freecommander): Er erkennt dass es sich um ein Multipartarchiv handelt egal welchen Teil man entpackt. So weit so gut. Jetzt der blöde Teil: Entpackt man in Unterordner, benennt er die Ordner nach dem Archivteil, den man zum Entpacken genommen hat. Daher meine Verwirrung.

Der Source Ordner fehlt nicht. In meinen Screenshot sieht man nur den Unterordner bin.

Aber warum wird Aero unbedingt benötigt? Du bringst doch deinen eigenen Skinengine mit. Oder benötigt der Skinengine Aero? Das würde es erklären. Also das würde ich irgendwie ändern, man kann wohl kaum erwarten, dass man dafür Aero aktiviert, wenn überhaupt möglich.

Ich werde es morgen noch mal auf dem großen Rechner mit Windows 7 Home und deaktivierten Aero probieren.

EWeiss 22. Sep 2016 03:21

AW: Spectragram
 
Zitat:

Aber warum wird Aero unbedingt benötigt? Du bringst doch deinen eigenen Skinengine mit. Oder benötigt der Skinengine Aero? Das würde es erklären. Also das würde ich irgendwie ändern, man kann wohl kaum erwarten, dass man dafür Aero aktiviert, wenn überhaupt möglich.
Jain.. Warum.
Wie du sehen kannst wurden ja bei dir "Crystal" und "Blur Mode" deaktiviert.
Der Grund liegt daran weil dein System das nicht unterstützt.

Meine Dialoge hingegen prüfen den Status ob das Haupt-Fenster Aero eingeschaltet hat oder nicht.
Ich denke das hier im Code ein Fehler vorliegt den ich noch berichtigen muss.

Danke so kann ich zumindest das Problem beheben.

gruss.

Luckie 22. Sep 2016 03:28

AW: Spectragram
 
Was wurde bei mir deaktiviert und woran siehst du das? Ich hatte vorher mal ein paar Hintergründe durch probiert bevor ich eine MP3 auswählen wollte. Das Hintergrundbild wechseln funktioniert ohne Probleme.

EWeiss 22. Sep 2016 03:35

AW: Spectragram
 
Zitat:

Zitat von Luckie (Beitrag 1348377)
Was wurde bei mir deaktiviert und woran siehst du das? Ich hatte vorher mal ein paar Hintergründe durch probiert bevor ich eine MP3 auswählen wollte. Das Hintergrundbild wechseln funktioniert ohne Probleme.

Wenn du unsere ScreenShots vergleichst.
Fehlen bei dir unter Move Background drei Komponente.

2x Checkboxen und eine Trackbar.

Ich habe jetzt mal das hier addiert damit müsste es eigentlich funktionieren.

Delphi-Quellcode:
      if (GetOS = OsVista) or (GetOS = OsWindows7)
        and SkinEngine.IsCompositionEnabled then
      begin
Mit IsCompositionEnabled lade ich die dwmapi.dll..

Delphi-Quellcode:
function TSkinEngine.IsCompositionEnabled: boolean;
var
  DwmIsCompositionEnabled: function(pfEnabled: PBoolean): HRESULT; stdcall;
  hDwmapi: THandle;
  Enabled: BOOL;
begin
  Result := False;
  if (Win32Platform = VER_PLATFORM_WIN32_NT) and (Win32MajorVersion >= 6) then
  begin
    hDwmapi := LoadLibrary('dwmapi.dll');
    if hDwmapi <> 0 then
      try
        DwmIsCompositionEnabled := GetProcAddress(hDwmapi, 'DwmIsCompositionEnabled');
        if Assigned(DwmIsCompositionEnabled) then
          Result := (DwmIsCompositionEnabled(@Enabled) = 0) and Enabled;
      finally
        FreeLibrary(hDwmapi);
      end;
  end;
end;
Ich denke das wird aber auch nicht ausreichen, denn was mache ich wenn die DLL nicht existiert dann kracht es auch.
Na ja oder auch nicht.. hDwmapi ist ja dann 0

Habe die geänderte DLL nochmals angehängt.
Vielleicht geht es ja damit.

gruss

Luckie 22. Sep 2016 03:40

AW: Spectragram
 
Die sind mir gar nicht aufgefallen.

Na ja, wenn du die DLL nicht laden kannst, dann musst du eben eine Fehlerbehandlung machen. Hinweis ausgeben und das Programm sauber beenden. Schön wäre natürlich ein Fallback, der ohne die DLL auskommt, so dass man das Programm zu mindest noch nutzen kann.

Luckie 22. Sep 2016 03:44

AW: Spectragram
 
Nope. Stürzt bei Klick auf den Button ab. AberMmoment mal. Am Skinengine kann es nicht liegen. Das Fenster wird ja geskinnt. Das funktioniert ja alles. Der Fehler mit dem Absturz kommt ja erst, wenn der Dateiöffnen Code durch den Klick aufgerufen wird. Da müsste der Fehler zu suchen sein. Hast du irgendwelche Pfade hard gecodet oder so?

EWeiss 22. Sep 2016 03:46

AW: Spectragram
 
Zitat:

Zitat von Luckie (Beitrag 1348379)
Die sind mir gar nicht aufgefallen.

Na ja, wenn du die DLL nicht laden kannst, dann musst du eben eine Fehlerbehandlung machen. Hinweis ausgeben und das Programm sauber beenden. Schön wäre natürlich ein Fallback, der ohne die DLL auskommt, so dass man das Programm zu mindest noch nutzen kann.

Werde ich machen..
Obwohl die Behandlung ja dadurch schon ausgelöst wird da die Abfrage False zurück liefert bei einem hDwmapi = 0

Den Fallback hätte ich dann mit der Abfrage von IsCompositionEnabled erstellt.
Bin mir jetzt nicht sicher ob wenn er die DLL nicht findet ein Exeption ausgelöst wird.
Oder ein Handle 0 ausreicht.

gruss

Luckie 22. Sep 2016 03:50

AW: Spectragram
 
LoadLibrary ist eine API Funktion und wird somit keine Exception auslösen. Der Rückgabewert ist ein Handle auf die DLL. Ist das Handle null, konnte sie nicht geladen werden.

EWeiss 22. Sep 2016 03:56

AW: Spectragram
 
Zitat:

Zitat von Luckie (Beitrag 1348380)
Nope. Stürzt bei Klick auf den Button ab. AberMmoment mal. Am Skinengine kann es nicht liegen. Das Fenster wird ja geskinnt. Das funktioniert ja alles. Der Fehler mit dem Absturz kommt ja erst, wenn der Dateiöffnen Code durch den Klick aufgerufen wird. Da müsste der Fehler zu suchen sein. Hast du irgendwelche Pfade hard gecodet oder so?

Der Dialog beinhaltet 3 Komponente

DriveList
DirList
FileList.

Bei der DriveList werden alle Festplatten addiert.
Delphi-Quellcode:
procedure TSkinDriveList.ListDrive(hList: hWnd);
var
  FileInfo: SHFILEINFO;
  AllDriveStrings: LongWord;
  Drives: array [0 .. 128] of Widechar;
  pDrive: PChar;
  IconCount: Integer;
begin
  IconCount := 1;
  DriveList := TStringList.Create;

  AllDriveStrings := GetLogicalDriveStrings(SizeOf(Drives), Drives);
  if AllDriveStrings = 0 then
    exit;

  if AllDriveStrings > SizeOf(Drives) then
    raise Exception.Create(SysErrorMessage(ERROR_OUTOFMEMORY));

  pDrive := Drives;
  while pDrive^ <> #0 do
  begin
    SHGetFileInfo(pDrive, FILE_ATTRIBUTE_NORMAL, FileInfo, SizeOf(FileInfo),
      SHGFI_DISPLAYNAME Or SHGFI_SYSICONINDEX or SHGFI_SMALLICON or SHGFI_ICON);
    if GetDriveType(pDrive) = DRIVE_NO_ROOT_DIR or DRIVE_FIXED then
    begin
      DriveList.Add(pDrive);
      ListAdd(hList, FileInfo.szDisplayName);
      SetLength(IconHandle, IconCount + 1);
      IconHandle[IconCount] := FileInfo.HIcon;
      inc(IconCount);
      inc(pDrive, 4);
    end
    else
      inc(pDrive, 4);

  end;

end;
also nichts festes.

Mit GetCurrentDirectory wird der letzte Pfad zugewiesen der verwendet wurde.
Wenn keiner existiert dann ist es der Pfad wo sich die Skins drin befinden.

Die Fileliste addiert die Dateien abhängig von dem Pfad der mit DirList gesetzt wurde.
Vorausgesetzt es finden sich MP3 Dateien darin.

Hard gecoded sollte da eigentlich nichts sein.

gruss

EWeiss 22. Sep 2016 03:57

AW: Spectragram
 
Zitat:

LoadLibrary ist eine API Funktion und wird somit keine Exception auslösen. Der Rückgabewert ist ein Handle auf die DLL. Ist das Handle null, konnte sie nicht geladen werden.
Dann ist das so denke ich mal OK.
Handle 0 sollte dann reichen.

Ich werde mal den Pfad der Anwendung ändern also auf eine andere Platte.
Mal sehen ob ich das reproduzieren kann.

EDIT:
Nop.. Kann den bin Ordner hinschieben wo ich will, Voraussetzung ist natürlich das ich vorher die INI Datei lösche
da hier ein fest eingeschriebener Pfad zum letzten Skin enthalten ist.
Danach startet alles wie es soll.

gruss

Luckie 22. Sep 2016 04:10

AW: Spectragram
 
Ein paar Dinge.

Delphi-Quellcode:
Drives: array [0 .. 128] of Widechar;
  pDrive: PChar;
Und dann machst du das:
Delphi-Quellcode:
pDrive := Drives
Du weißt einem PChar ein Array vom Typ WideChar zu. Keine Ahnung, ob das so in Ordnung ist. Kommt mir auf den ersten Blick komisch vor.

Delphi-Quellcode:
FileInfo: SHFILEINFO;
Würde ich vor der ersten Verwendung mit ZeroMemory "ausnullen". Schlägt nämlich SHGetFileInfo fehl, du prüfst es nicht, dann steht in FileInfo Schrott drin, mit dem du dann weiter arbeitest.

Wo wird die Stringliste wieder freigegeben? Besser: Der Aufrufer erzeugt die StringListe, übergibt sie als Parameter und gibt sie wieder frei. Dann kann man sie auch sauber in einem Ressourcenschutzblock verpacken. Erstellen und Freigeben in einer Routine macht es auch übersichtlicher.

EWeiss 22. Sep 2016 04:15

AW: Spectragram
 
Zitat:

Du weißt einem PChar ein Array vom Typ WideChar zu. Keine Ahnung, ob das so in Ordnung ist. Kommt mir auf den ersten Blick komisch vor.
Werde das nochmal prüfen ;)

Auch das mit dem ZeroMemory werde ich noch hinzufügen sind so kleine Dinge die man leicht übersieht im Eifer des Gefechtes.

gruss

Luckie 22. Sep 2016 04:24

AW: Spectragram
 
Rückgabewert von SHGetFileInfo prüfen!
Mit der StringListe nicht routineübergreifend arbeiten!

Ja, das ist so eine Sache. Eigentlich müsste der Code crashen, tut er aber bei Alice nicht, weil bei ihr die Belegung des Adressraums glücklicherweise passt und nichts wichtiges überschieben oder freigeben wird. Bei Bobby ist der Adressraum anders organsiert und da crasht es dann.

EWeiss 22. Sep 2016 04:32

AW: Spectragram
 
Zitat:

Zitat von Luckie (Beitrag 1348387)
Rückgabewert von SHGetFileInfo prüfen!
Mit der StringListe nicht routineübergreifend arbeiten!

Ja, das ist so eine Sache. Eigentlich müsste der Code crashen, tut er aber bei Alice nicht, weil bei ihr die Belegung des Adressraums glücklicherweise passt und nichts wichtiges überschieben oder freigeben wird. Bei Bobby ist der Adressraum anders organsiert und da crasht es dann.

Die List wird hier beendet.
Vorher geht es nicht weil ich die Laufwerke die in dieser Liste enthalten sind verwende solange wie der Dialog geöffnet ist.
Wenn ich die Liste vorher freigebe dann kracht es.

Delphi-Quellcode:
destructor TSkinDriveList.Destroy;
begin
  UnSubClass(Handle);
  FreeAndNil(DriveList);
  FreeAndNil(PropList);

  inherited Destroy;
end;
Der geänderte part.

Delphi-Quellcode:
procedure TSkinDriveList.ListDrive(hList: hWnd);
var
  FileInfo: SHFILEINFO;
  AllDriveStrings: LongWord;
  Drives: array [0 .. 128] of Widechar;
  pDrive: PWideChar;
  IconCount: Integer;
begin
  IconCount := 1;

  ZeroMemory(@FileInfo, sizeof(SHFILEINFO));
  DriveList := TStringList.Create;

  AllDriveStrings := GetLogicalDriveStrings(SizeOf(Drives), Drives);
  if AllDriveStrings = 0 then
    exit;

  if AllDriveStrings > SizeOf(Drives) then
    raise Exception.Create(SysErrorMessage(ERROR_OUTOFMEMORY));

  pDrive := Drives;
    while pDrive^ <> #0 do
    begin
      SHGetFileInfo(pDrive, FILE_ATTRIBUTE_NORMAL, FileInfo, SizeOf(FileInfo),
        SHGFI_DISPLAYNAME Or SHGFI_SYSICONINDEX or SHGFI_SMALLICON or SHGFI_ICON);
      if GetDriveType(pDrive) = DRIVE_NO_ROOT_DIR or DRIVE_FIXED then
      begin
        DriveList.Add(pDrive);
        ListAdd(hList, FileInfo.szDisplayName);
        SetLength(IconHandle, IconCount + 1);
        IconHandle[IconCount] := FileInfo.HIcon;
        inc(IconCount);
        inc(pDrive, 4);
      end
    else
      inc(pDrive, 4);
  end;
end;
gruss

Luckie 22. Sep 2016 04:38

AW: Spectragram
 
Ich dachte an so was:
Delphi-Quellcode:
procedure AuswahlFenster;
var
  sl: TStringList;
begin
  sl := TStringList.Create;
  try
    ListeFuellen(sl);
   // mach was mit sl
  finally
    sl.Free;
  end;
end;

procedure ListeFuellen(sl: TStringList);
begin
  //...
end;

EWeiss 22. Sep 2016 04:41

AW: Spectragram
 
Ich könnte den Lösungsansatz mal versuchen, möglich das ich dann einiges umstrukturieren muss.

EDIT:
Glaube das geht so einfach nicht.
Ich verwende die DriveList(TStringlist) übergreifen. Bsp. in WM_LBUTTONUP


Delphi-Quellcode:
Atom := GlobalAddAtom(PWideChar(DriveList.Strings[nItem]));
SendMessage(DirListHandle, WM_COMMAND, FILL_DIRECTORY, Atom);

DirStrPath := DriveList.Strings[nItem];
Das kann ich so einfach nicht umstricken..


gruss

Luckie 22. Sep 2016 04:44

AW: Spectragram
 
Finde ich übersichtlicher. Dann muss man nicht suchen, wo sie wieder freigegeben wird. Und je übersichtlicher, desto weniger Fehler können sich einschleichen. ;)

EWeiss 22. Sep 2016 04:47

AW: Spectragram
 
Zitat:

Zitat von Luckie (Beitrag 1348391)
Finde ich übersichtlicher. Dann muss man nicht suchen, wo sie wieder freigegeben wird. Und je übersichtlicher, desto weniger Fehler können sich einschleichen. ;)

Das ist richtig aber wie soll ich das machen aus oder gerade innerhalb einer Winproc?
Siehe mein editierter Beitrag.

gruss

Luckie 22. Sep 2016 04:52

AW: Spectragram
 
Wo finde ich den Code in den Sourcen?

EWeiss 22. Sep 2016 04:53

AW: Spectragram
 
Zitat:

Zitat von Luckie (Beitrag 1348393)
Wo finde ich den Code in den Sourcen?

Den muss ich dir schicken die DLL ist im Archiv nicht enthalten.

warte gebe link über PM:
Die Komponente liegt unter _ctrl\uBrowseForFile.pas
AddChildControls ist der Part wo die Listen addiert werden..

DirList
DriveList
FileList

gruss

Luckie 22. Sep 2016 05:16

AW: Spectragram
 
Puh. Ohne Debugger nur mit Notepad++ etwas mühsam. ;)

Delphi-Quellcode:
Atom := GlobalAddAtom(PWideChar(DriveList.Strings[nItem]));
SendMessage(DirListHandle, WM_COMMAND, FILL_DIRECTORY, Atom);
Du erzeugst dir eine eindeutige Zeichenfolgen (Atom) und schickst sie als LParam von WM_Command an das Fenster DirListHandle. Warum? Und wo finde ich den Code wo die Nachricht hingeschickt wird?

Ist irgendwie alles so etwas von hinten durch die Brust ins Auge, habe ich das Gefühl. Kann aber auch sein, dass ich noch nicht so gaz durch den Aufbau des Projekts durchgestiegen bin. ;)

EWeiss 22. Sep 2016 05:19

AW: Spectragram
 
Zitat:

Zitat von Luckie (Beitrag 1348396)
Puh. Ohne Debugger nur mit Notepad++ etwas mühsam. ;)

Delphi-Quellcode:
Atom := GlobalAddAtom(PWideChar(DriveList.Strings[nItem]));
SendMessage(DirListHandle, WM_COMMAND, FILL_DIRECTORY, Atom);
Du erzeugst dir eine eindeutige Zeichenfolgen (Atom) und schickst sie als LParam von WM_Command an das Fenster DirListHandle. Warum?

Schien mir das einfachste um die Liste zu füllen ohne nochmals einen extra Knopf oder was auch immer dafür in Anspruch zu nehmen.
Wird dann hier ausgewertet. DirListBoxProc

Delphi-Quellcode:
    WM_COMMAND:
      case LoWord(wP) of
        FILL_DIRECTORY:
          begin
            Buffer := StrAlloc(lP + 1);
            try
              DirList.clear;
              GlobalGetAtomName(lP, Buffer, lP + 1);
              FindDirs(Buffer, DirList);
              FillList(DirList);
              SkinEngine.FInvalidateRect(WinHandle, false);
              // FileListe löschen
              if FileListHandle <> 0 then
                SendMessage(FileListHandle, WM_COMMAND, FILL_FILELIST, GlobalAddAtom
                    (PWideChar(DirStrPath)));
            finally
              StrDispose(Buffer);
            end;
          end;
      end;
Diese drei listen sind miteinander verknüpft
DirList, DriveList, FileList

Zitat:

Ist irgendwie alles so etwas von hinten durch die Brust ins Auge, habe ich das Gefühl. Kann aber auch sein, dass ich noch nicht so gaz durch den Aufbau des Projekts durchgestiegen bin.
Hmm...
Alle meine Projekt funktionieren bei mir einwandfrei.. Verstehe ich nicht wo das Problem ist.

gruss

EWeiss 22. Sep 2016 05:41

AW: Spectragram
 
Es hat nichts mit meiner Art der Programmierung was die DriveList angeht zu tun.
Es liegt definitiv an Aero.

Werde nachher eine aktualisierte DLL hochladen sobald ich das behoben habe. ;)

EDIT:
Ok diese Anwendung setzt voraus das die Desktopgestaltung nicht ausgeschaltet wird.
Ich könnte das beheben macht aber keinen sinn da meine Library darauf ausgelegt ist diese Einstellungen zu verwenden.
Die nennt sich nicht umsonst SK_AERO.dll

Kein Aero keine Desktopgestaltung dann wird das nix ;)
So soll es auch sein.

Ich werde da hingehend auch nichts ändern. Es funktioniert wenn die Voraussetzungen gegeben sind.

gruss

jaenicke 22. Sep 2016 07:14

AW: Spectragram
 
Unter Windows 10 funktioniert das Programm nicht.

Das ist aber ein Paradebeispiel dafür, dass die Versionsprüfung nicht ein Problem behebt, sondern schafft. Das ist genau der Grund weshalb Microsoft ab Windows 8 nicht mehr immer die reale Versionsnummer ausliefert, wenn man sie abfragt, sondern einfach die, für die das Programm laut Manifest erstellt wurde.

Du prüfst nämlich leider nicht, ob es sich mindestens um Vista handelt, sondern, ob es Vista oder Windows 7 ist. Wenn du das korrigierst (und nebenbei ist die Prüfung dann auch mit Bordmitteln viel einfacher), funktioniert der Dialog auch unter Windows 10:
Delphi-Quellcode:
// alt
  if (SKAERO_GetOS = OsVista) or (SKAERO_GetOS = OsWindows7) and SKAERO_IsCompositionEnabled then

// neu
  if (Win32MajorVersion >= 6) and SKAERO_IsCompositionEnabled then
Beim zweiten Aufruf des Öffnen-Dialogs knallt es dann aber in der SK_Aero.dll. Da es immer unterschiedliche Pointerprobleme zu sein scheinen, sieht das aber nicht nach einem Problem mit Windows aus, sondern nach einem logischen Problem.

Die Datei kann ich dann zwar auswählen (allerdings finde ich den Standarddialog sehr viel ergonomischer), aber danach passiert nichts mehr.

// EDIT:
Dass bei einem Multimediatool wie diesem Aero vorausgesetzt wird, sollte auch kein Problem sein. Denn wenn die Grafikkarte so schwach ist, dass man kein Aero einsetzen kann, wird so ein Tool meistens ohnehin nicht benutzt werden. Und wenn die Grafikkarte schnell genug für Aero ist, wird man normalerweise den Rechner nicht durch Deaktivieren von Aero langsamer machen.

Zitat:

Zitat von EWeiss (Beitrag 1348368)
AppData/Brewideas/Spectragram.

Warum sauber deinstallieren wird doch nichts Installiert. ;)

Das ist auch eine Installation, nur dass dein Programm selbst die Konfigurationsdateien dort ablegt. Das Problem ist in so einem Fall, dass es so eben keinen Deinstaller gibt und die Dateien dort liegen bleiben, wenn man das Programm löscht.
Für ein Projekt wie dieses hier ist das allerdings natürlich kein Problem.

EWeiss 22. Sep 2016 07:32

AW: Spectragram
 
Zitat:

Du prüfst nämlich leider nicht, ob es sich mindestens um Vista handelt, sondern, ob es Vista oder Windows 7 ist. Wenn du das korrigierst (und nebenbei ist die Prüfung dann auch mit Bordmitteln viel einfacher), funktioniert der Dialog auch unter Windows 10:
Ja das weis ich Danke.. ;)
Es soll auch nicht mit W10 Arbeiten aus dem einfachen Grund weil es unter W10 keine DWM API mehr gibt.

Das Problem liegt auch eher hier! und hat nichts mit der Abfrage <> W10 zu tun.

Delphi-Quellcode:
{$REGION 'procedure AddBrowseForFileControls'}
procedure AddBrowseForFileControls(hMain: HWND);
begin
  BrowseForFile := CTRL_BrowseForFileCreate;
  BrowseForFile.Width := 612;
  BrowseForFile.Height := 412;
  BrowseForFile.PanelImagePath := SKAERO_FOLDER + 'Panel.png';
  BrowseForFile.SysImagePath := SysButton.ImagePath;
  BrowseForFile.PanelDirListImagePath := SKAERO_FOLDER + 'Frame3d.png';
  BrowseForFile.ListSelectedImg := SKAERO_FOLDER + 'List\ListSelect.png';
  BrowseForFile.SkinConfigFile := PWideChar(DefSkin);
  BrowseForFile.ComboButtonImagePath := SKAERO_FOLDER + 'List\combo.png';
  BrowseForFile.ButtonImagePath := SKAERO_FOLDER + 'BTN_Push.png';
  BrowseForFile.VPageImg := SKAERO_FOLDER + 'VScroll\VSPage.png';
  BrowseForFile.VBotImg := SKAERO_FOLDER + 'VScroll\VSBot.png';
  BrowseForFile.VUpImg := SKAERO_FOLDER + 'VScroll\VSUp.png';
  BrowseForFile.VThumbImg := SKAERO_FOLDER + 'VScroll\VSThumb.png';
  BrowseForFile.FileListMask := '.mp3';
  BrowseForFile.UseVistaBlur := CheckAeroBlur.GetCheckButtonStatus(CheckAeroBlur.Handle);
  BrowseForFile.UseVistaCrystal := CheckCrystal.GetCheckButtonStatus(CheckCrystal.Handle);
  BrowseForFile.GlassOpacity := trbGlassOpacity.GetTrackValue(trbGlassOpacity.Handle);
  BrowseForFile.CreateWindow(hMain);
end;
{$ENDREGION}
in der uControls.

ersetzen durch
Delphi-Quellcode:
procedure AddBrowseForFileControls(hMain: HWND);
begin
  BrowseForFile := CTRL_BrowseForFileCreate;
  BrowseForFile.Width := 612;
  BrowseForFile.Height := 412;
  BrowseForFile.PanelImagePath := SKAERO_FOLDER + 'Panel.png';
  BrowseForFile.SysImagePath := SysButton.ImagePath;
  BrowseForFile.PanelDirListImagePath := SKAERO_FOLDER + 'Frame3d.png';
  BrowseForFile.ListSelectedImg := SKAERO_FOLDER + 'List\ListSelect.png';
  BrowseForFile.SkinConfigFile := PWideChar(DefSkin);
  BrowseForFile.ComboButtonImagePath := SKAERO_FOLDER + 'List\combo.png';
  BrowseForFile.ButtonImagePath := SKAERO_FOLDER + 'BTN_Push.png';
  BrowseForFile.VPageImg := SKAERO_FOLDER + 'VScroll\VSPage.png';
  BrowseForFile.VBotImg := SKAERO_FOLDER + 'VScroll\VSBot.png';
  BrowseForFile.VUpImg := SKAERO_FOLDER + 'VScroll\VSUp.png';
  BrowseForFile.VThumbImg := SKAERO_FOLDER + 'VScroll\VSThumb.png';
  BrowseForFile.FileListMask := '.mp3';
 
  if Assigned(CheckAeroBlur) then
  begin
    BrowseForFile.UseVistaBlur := CheckAeroBlur.GetCheckButtonStatus(CheckAeroBlur.Handle);
    BrowseForFile.UseVistaCrystal := CheckCrystal.GetCheckButtonStatus(CheckCrystal.Handle);
    BrowseForFile.GlassOpacity := trbGlassOpacity.GetTrackValue(trbGlassOpacity.Handle);
  end;
  BrowseForFile.CreateWindow(hMain);
end;
Die Checkboxen bzw.. diese Controls sind alle NIL wenn Aero nicht existiert.
CheckAeroBlur, CheckCrystal, trbGlassOpacity

Deshalb kracht es.
Wundert mich das sich der Dialog bei dir überhaupt öffnet.
Zumal die DriveList Combo mit DWM in Kombination LayeredWindow erstellt wird.
Was bedeutet das die aufgeklappte Combo Transparent ist.

Das geht nun mal nicht mit W10 oder deaktivierter Desktopgestaltung dementsprechend kann man dann auch kein Laufwerk auswählen.

Zitat:

Dass bei einem Multimediatool wie diesem Aero vorausgesetzt wird, sollte auch kein Problem sein. Denn wenn die Grafikkarte so schwach ist, dass man kein Aero einsetzen kann, wird so ein Tool meistens ohnehin nicht benutzt werden. Und wenn die Grafikkarte schnell genug für Aero ist, wird man normalerweise den Rechner nicht durch Deaktivieren von Aero langsamer machen.
Dazu kann ich nur sagen das dieses Tool 0% CPU bei mir verwendet.
Inklusive der ganzen Visuellen Komponenten.
Ich denke eher es ist uninteressant für diejenigen die W10 benutzen da gibt es nun mal kein DWM mehr ein Grund warum ich kein W10 verwende.
Man hätte das aktiviert lassen können es war immer möglich es auszuschalten.
Aber gut es ist wie es ist.

Zitat:

allerdings finde ich den Standarddialog sehr viel ergonomischer
Ich finde das auch.
Das Problem ist nur diesen auf meinen Visuellen Style anzupassen ;)
Zitat:

wird so ein Tool meistens ohnehin nicht benutzt werden
Das ist richtig zumal es für die LIB im ganzen > W7 eh zu spät ist.
Aber für die 6 Jahre die ich vielleicht noch habe reicht es mir ;) Weltuntergang LOL. :)


gruss

jaenicke 22. Sep 2016 08:28

AW: Spectragram
 
Wie kommst du darauf, dass es unter Windows 10 keinen DWM mehr gibt? Die Transparenz usw. funktionieren dort problemlos, also die von dir genannten Controls.

EWeiss 22. Sep 2016 08:41

AW: Spectragram
 
Zitat:

Zitat von jaenicke (Beitrag 1348405)
Wie kommst du darauf, dass es unter Windows 10 keinen DWM mehr gibt? Die Transparenz usw. funktionieren dort problemlos, also die von dir genannten Controls.

Ich habe gelesen das es kein Aero mehr gibt.
Sage mir das ich falsch liege ;)

Transparenz!
Zur Information ist teilweise emuliert da ich den Hintergrund in das Control kopiere.
Das hat aber nichts mit Aero zu tun.

Wenn unter W10 CheckAeroBlur NIL ist dann wird DWM nicht unterstützt.
Denn darauf hin prüfe ich ja.

Delphi-Quellcode:
DwmIsCompositionEnabled := GetProcAddress(hDwmapi, 'DwmIsCompositionEnabled');


gruss

TiGü 22. Sep 2016 08:50

AW: Spectragram
 
Delphi-Quellcode:
program DWM_API_TEST;

{$APPTYPE CONSOLE}

{$R *.res}


uses
  System.SysUtils,
  Winapi.Windows;

function IsCompositionEnabled: boolean;
var
  DwmIsCompositionEnabled: function(pfEnabled: PBoolean): HRESULT; stdcall;
  hDwmapi: THandle;
  Enabled: BOOL;
begin
  Result := False;
  if (Win32Platform = VER_PLATFORM_WIN32_NT) and (Win32MajorVersion >= 6) then
  begin
    hDwmapi := LoadLibrary('dwmapi.dll');
    if hDwmapi <> 0 then
      try
        DwmIsCompositionEnabled := GetProcAddress(hDwmapi, 'DwmIsCompositionEnabled');
        if Assigned(DwmIsCompositionEnabled) then
          Result := (DwmIsCompositionEnabled(@Enabled) = 0) and Enabled;
      finally
        FreeLibrary(hDwmapi);
      end;
  end;
end;

begin
  try
    Writeln(IsCompositionEnabled);
    Readln;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.
Liefert unter Windows 10 Professional Version 1607 Build 14393.187 ein True zurück.
Geht also!

Aviator 22. Sep 2016 08:58

AW: Spectragram
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von EWeiss (Beitrag 1348406)
Zitat:

Zitat von jaenicke (Beitrag 1348405)
Wie kommst du darauf, dass es unter Windows 10 keinen DWM mehr gibt? Die Transparenz usw. funktionieren dort problemlos, also die von dir genannten Controls.

Ich habe gelesen das es kein Aero mehr gibt.
Sage mir das ich falsch liege ;)

Also im TaskManager wird zumindest mal noch der Prozess angezeigt.

Ich hatte mal gelesen, dass es ab Windows 8 sogar gar nicht mehr möglich sein soll, Windows ohne DWM zu betreiben weil dort alles drüber gemacht wird. Wäre also sehr verwunderlich, wenn das jetzt plötzlich doch nicht mehr vorhanden wäre.

EWeiss 22. Sep 2016 09:06

AW: Spectragram
 
Zitat:

Zitat von Aviator (Beitrag 1348410)
Zitat:

Zitat von EWeiss (Beitrag 1348406)
Zitat:

Zitat von jaenicke (Beitrag 1348405)
Wie kommst du darauf, dass es unter Windows 10 keinen DWM mehr gibt? Die Transparenz usw. funktionieren dort problemlos, also die von dir genannten Controls.

Ich habe gelesen das es kein Aero mehr gibt.
Sage mir das ich falsch liege ;)

Also im TaskManager wird zumindest mal noch der Prozess angezeigt.

Ich hatte mal gelesen, dass es ab Windows 8 sogar gar nicht mehr möglich sein soll, Windows ohne DWM zu betreiben weil dort alles drüber gemacht wird. Wäre also sehr verwunderlich, wenn das jetzt plötzlich doch nicht mehr vorhanden wäre.

Dann sollte es unter W10 auch funktionieren.
Was ich machen könnte alle abfragen der Os Version mal ändern so wie von jaenicke vorgeschlagen.
Ob es dann noch läuft keine Ahnung.

Dann müssten die Controls auch angezeigt werde.
Siehe pic

gruss

EWeiss 22. Sep 2016 09:27

AW: Spectragram
 
Habe es nochmal in geänderter form hochgeladen.
Es wird jetzt auf

Delphi-Quellcode:
if (Win32MajorVersion >= 6) and SKAERO_IsCompositionEnabled then


hin geprüft.
Wenn es dann läuft na dann lohnt sich die Weiterentwicklung ja doch noch.

gruss

EWeiss 22. Sep 2016 09:59

AW: Spectragram
 
Sorry für den Post..
Habe es nochmals hochgeladen.
Funktioniert nun mit Deaktivierter Desktopgestaltung.

Das einzige Problem das dann auftritt ist das die Combobox der DriveList wenn sie aufgeklappt wird nicht mehr Transparent ist.
Damit kann man aber zum testen mit leben.

Bei Deaktivierter Desktopgestaltung funktioniert natürlich auch Aero nicht..
Das sollte klar sein.

gruss

Erdbär 22. Sep 2016 10:39

AW: Spectragram
 
Startet unter/im aktuellen W10x64 Pro in Originalauflösung statt 125%zoom. Dann Ende Gelände beim Öffnen-Dialog.

Kann den "Siebenerschrott" - auf Wunsch hin - auch unter
- Win 8 (64bit, Pro)
- Win 8.1 (64bit, Pro)
- Win 10 (32bit, Home)
testen.

Darüberhinaus auch unter/in VMs:
- Win XP Pro (32bit)
- Win 07 Pro (32bit)
- Linux Mint (64bit)
- Linux Arch (64bit)

Allerdings bin ich auch kein Testpilot für Leute, die in einer Windows7-Zeitschleife murmeltierartig festhängen, Herr EWeiss :?


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:09 Uhr.
Seite 1 von 3  1 23      

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