AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Spectragram
Thema durchsuchen
Ansicht
Themen-Optionen

Spectragram

Ein Thema von EWeiss · begonnen am 21. Sep 2016 · letzter Beitrag vom 13. Aug 2018
Antwort Antwort
Seite 2 von 9     12 34     Letzte »    
EWeiss
Projekt entfernt..

Geändert von EWeiss (24. Jul 2019 um 05:48 Uhr)
 
EWeiss
 
#11
  Alt 22. Sep 2016, 04:35
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

Geändert von EWeiss (22. Sep 2016 um 07:15 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#12
  Alt 22. Sep 2016, 04:40
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.
Michael
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#13
  Alt 22. Sep 2016, 04:44
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?
Michael
  Mit Zitat antworten Zitat
EWeiss
 
#14
  Alt 22. Sep 2016, 04:46
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
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#15
  Alt 22. Sep 2016, 04:50
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.
Michael
  Mit Zitat antworten Zitat
EWeiss
 
#16
  Alt 22. Sep 2016, 04:56
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

Geändert von EWeiss (11. Jul 2019 um 16:44 Uhr)
  Mit Zitat antworten Zitat
EWeiss
 
#17
  Alt 22. Sep 2016, 04:57
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

Geändert von EWeiss (22. Sep 2016 um 05:11 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#18
  Alt 22. Sep 2016, 05:10
Ein paar Dinge.

Delphi-Quellcode:
Drives: array [0 .. 128] of Widechar;
  pDrive: PChar;
Und dann machst du das:
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.

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.
Michael
  Mit Zitat antworten Zitat
EWeiss
 
#19
  Alt 22. Sep 2016, 05:15
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

Geändert von EWeiss (22. Sep 2016 um 05:20 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#20
  Alt 22. Sep 2016, 05:24
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.
Michael
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 9     12 34     Letzte »    


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:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:50 Uhr.
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