Autor Beitrag
lotus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19

XP MediaCenter
Delphi 2005 Personal
BeitragVerfasst: Di 17.04.07 18:09 
Hi!!

Ich will ein Programm schreiben, dass das Icon aus Dateien ausliest.
Mit SaveResIconToFile klappt das auch ziemlich gut (Hab den Code etwas abgewandelt, sodass das Icon nicht gespeichert, sondern nur in ein TImage geladen wird)!

Nun gibt es aber Dateien, die keinen eigenen Icons besitzen, sondern mit einer Anwendung verknüpft sind (*.doc)

Bei so einer Datei möchte ich, dass es dann das icon der verknüpften Datei, also z.B. das MicroSoft-Word-Logo lädt.

Also wollte ich die GetProgramAssociation-Funktion verwenden und aus dem Rückgabewert (dem Pfad der Anwendung) das Icon extrahieren.

Nun gibt GetProgrammAssociation zum Teil solche oder noch kompliziertere Pfade zurück (Hier Word):

ausblenden Quelltext
1:
'C:\Programme\Microsoft Office\OFFICE11\WINWORD.EXE" \n \dde					


Das Icon wird nicht ordnungsgemäß geladen!
Ich denke das liegt an den "\n" und "\dde" - Was ist das überhaupt und wie bekommt man das weg?

Hier nochmal mein Code:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
if ico.Empty=true then
      begin
      s:=ExtractFileExt(JvOpendialog1.FileName);
      Delete(s,1,1); // "." löschen
      SaveResIconToFile(Ico,GetProgramAssociation(s));
      end;


Habt ihr vielleicht eine Idee, wie ich das Icon richtig extrahieren kann? :lol:

Sorry für den langen Text und danke im Voraus,
lotus

_________________
Das leben ist zu kostbar um es dem Schicksal zu überlassen! - Deus X Machina
zuma
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Di 17.04.07 18:37 
1.)
/n /dde sind aufrufparameter für winword

2.)
GetProgramAssociation(s) liefert dir den String zum aufruf der Exe,
von der du das icon haben willst ?

dann solltest du ne zwischenvariable (string) machen,
und dort das ergebnis von getprog... merken
(etwa so :
str := GetProgramAssociation(s);
und str dann entsprechend kürzen,
so das lediglich der Pfad/Dateiname-teil bleibt
strings kürzen -> copy, length, pos sind da die sachen,
die du dir mal angucken solltest.

_________________
Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!