Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi TSynMemo und Drag&Drop mit Dateien ? (https://www.delphipraxis.net/1226-tsynmemo-und-drag-drop-mit-dateien.html)

rebugger 2. Nov 2002 21:13


TSynMemo und Drag&Drop mit Dateien ?
 
Wie kann ich Dateien in ein TSynMemo per Drag & Drop laden ?
Wie kann ich Dateien in ein TSynMemo per "Datei mit Maus auf Programm" ziehen (bzw. Datei ist mit Programm verknüpft) laden ?

[edit=Daniel B]Und ab nach Sonstiges; Hat nichts mit Komponentenentwicklung zutun![/edit]

Christian Seehase 3. Nov 2002 02: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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:35 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