Einzelnen Beitrag anzeigen

Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#2
  Alt 3. Nov 2002, 03:20
Moin Rebugger,

zum ersten Problem:

Code:
[b]uses[/b]
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, SynEdit,
  shellapi; [color=#000080]// SHELLAPI einbinden für DragQueryFile[/color]

[b]type[/b]
  TForm1 = [b]class[/b](TForm)
    SynEdit1: TSynEdit;
    [b]procedure[/b] FormCreate(Sender: TObject);
  [b]private[/b]
    [color=#000080]{ Private-Deklarationen }[/color]
    [color=#000080]// Routine für die Verarbeitung der Message WM_DROPFILES[/color]
    [b]procedure[/b] GetDroppedFileNames([b]var[/b] msg : TWMDropFiles); message WM_DROPFILES;
  [b]public[/b]
    [color=#000080]{ Public-Deklarationen }[/color]
  [b]end[/b];

[b]var[/b]
  Form1: TForm1;

[b]implementation[/b]

[color=#000080]{$R *.DFM}[/color]

[b]procedure[/b] TForm1.GetDroppedFileNames([b]var[/b] msg : TWMDropFiles);

[b]var[/b]
 sFileName   : [b]string[/b];
 dwFileCount : cardinal;
 i           : cardinal;
 dwReqdLength : cardinal;

[b]begin[/b]
  [color=#000080]// Anzahl der per Drag 'n' Drop übergebenen Dateipfade[/color]
  [color=#000080]// Hier sollte es nur eine sein, bei mehreren würde nur[/color]
  [color=#000080]// die letzte Datei im SynEdit Fenster stehenbleiben[/color]
  dwFileCount := DragQueryFile(msg.Drop,$FFFFFFFF,[b]nil[/b],0);
  [b]for[/b] i := 0 [b]to[/b] dwFileCount - 1 [b]do[/b]
  [b]begin[/b]
    [color=#000080]// Pfadlänge ermitteln[/color]
    dwReqdLength := DragQueryFile(msg.Drop,i,[b]nil[/b],1);
    [color=#000080]// Dateinamen abfragen[/color]
    sFileName   := StringOfChar(#00,dwReqdLength+1);
    DragQueryFile(msg.Drop,i,PChar(sFileName),dwReqdLength+1);
    [color=#000080]// Datei laden[/color]
    SynEdit1.Lines.LoadFromFile(sFileName);
  [b]end[/b];
[b]end[/b];

[b]procedure[/b] TForm1.FormCreate(Sender: TObject);
[b]begin[/b]
  [color=#000080]// Anmelden, dass Dateien per Drag 'n' Drop angenommen werden[/color]
  DragAcceptFiles(self.Handle,true);
[b]end[/b];
Deine zweite Frage habe ich eventuell nicht so ganz verstanden.
Dateiverknüpfungen (z.B. *.txt wird bei Doppelclick mit Notepad geöffnet) werden über die Registry angelegt.
Unter HKEY_CLASSES_ROOT muss dazu ein Key angelegt werden, der den Dateityp zum Namen hat (Beispiel: .txt), darin wird ein Standardwert angelegt (Typ REG_SZ / String). Was darin steht, dient als weiterer Verweis, um im Beispiel zu bleiben: txtfile.
Unter dem jetzt zu ermittelnden Key HKEY_CLASSES_ROOT\txtfile wird noch eine Key Struktur angelegt, so dass das ganze dann so aussieht:
HKEY_CLASSES_ROOT\txtfile\shell\open\command
Hier wird wieder ein Standardwert angelegt, der den Pfad des Programmes enthält, das mit dem Dateityp verknüpft werden soll, sowie %1 damit auch etwas übergeben wird.
Wichtig:
Sowohl der Pfad, als auch %1 sollten jeweils in doppelete Anführungsstriche eingeschlossen werden, damit Leerzeichen im Pfad nicht zu Fehlern führen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat