Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Spezielle Icons (https://www.delphipraxis.net/61071-spezielle-icons.html)

SittingDuck 16. Jan 2006 18:37


Spezielle Icons
 
Moin Moin ...

Ich bastele gerade an meinem Lieblingsprogramm
herum ... einer Schnellstartleiste.
http://home.arcor.de/stefan.moka/launcher/Snap2.png

Normale Dateien und auch Verknüpfungen werden sauber
verarbeitet. Allerdings hat Windows ein paar spezielle
Icons auf Lager bei denen das nicht klappt.
Da wären z.B. diese SystemIcons die man per:

SHGetSpecialFolderLocation(Application.Handle, CSIDL, PIDL);

auslesen kann. Aber auch die Desktopverknüpfungen vom
Microsoft-Officepaket wären so Kandidaten. Halt alle
Verknüpfungen, die irgendwie keine Echten sind.

Jetzt die Frage: Kann man an solche Icons per TWMDropfiles-
Message irgendwie rankommen ? Also im Klartext, wenn ich
das 'Arbeitsplatz'-Icon versuche auf mein 'Launcher'
zu ziehen dann geht das nicht ... soll aber ...

Ich hoffe, das mein Anliegen deutlich ist.
Im Voraus besten Dank für Eure Hilfe.

SittingDuck 18. Jan 2006 14:08

Re: Spezielle Icons
 
Tach auch ...

Hm ... keine Antwort ... entweder zu speziell
oder meine Frage war unklar formuliert.

Vielleicht wird alles mit Hilfe von etwas Source
Code deutlicher.

Meine DragDrop-Routine sieht ein wenig vereinfacht
in etwa so aus:

Delphi-Quellcode:

interface

type
  TForm1 = class(TForm)
  private
    procedure WMDropFiles(var Msg: TWMDropfiles); message WM_DROPFILES;
end;

implementation


procedure TForm1.FormCreate(Sender: TObject);
begin
 DragAcceptFiles(Handle , True);

 .
 .
 .
 
end;


procedure TForm1.WMDropFiles(var Msg: TWMDropfiles);
Const Mask: Array[Boolean] Of Longint = (0, ILC_MASK);
var aFile: PChar; fos: TSHFileOpStruct;
begin
 inherited;
 aFile := StrAlloc(255);
 DragQueryFile (Msg.Drop, 0, aFile, 255);
 DragQueryPoint(Msg.Drop, Pt);

 TempIcon := TIcon.Create; Changes := True; // auslesen und zuweisen
 TempIcon.Handle := ExtractAssociatedIcon(Application.Handle, aFile, IconIndex);

 .
 .
 .

 StrDispose(aFile);
 DragFinish(Msg.Drop);
 TempIcon.Free;
end;
Nicht wirklich aufregend, aber es läuft.

Was muss ich an der Routine ändern, damit sie
nicht nur Dateien akzeptiert sondern auch
den 'Arbeitsplatz' die 'Netzwerkumgebung'
den 'Papierkorb' usw.

Danke fürs Nachgrübeln.

SittingDuck 19. Jan 2006 19:43

Re: Spezielle Icons
 
Gibts doch gar nicht ...

Bin ich der einzige hier, der das 'zu Fuß' macht ?
Benutzt Ihr alle irgend welche fertigen Komponenten ?
Und wenn ja, können die das oben Angesprochene ?

Christian Seehase 19. Jan 2006 20:34

Re: Spezielle Icons
 
Moin SittingDuck,

angewendet habe ich dass noch nicht, aber da die von Dir angesprochenen Objekte ja keine Dateien sind, könntest Du Dir ja mal die Interfaces MSDN-Library durchsuchenIDropTarget, MSDN-Library durchsuchenIDataObject und zugehörige anschauen.
Vielleicht kannst Du ja mit diesen das gewünschte erreichen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:54 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-2025 by Thomas Breitkreuz