![]() |
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] |
Moin Rebugger,
zum ersten Problem:
Code:
Deine zweite Frage habe ich eventuell nicht so ganz verstanden.
[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]; 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 13:35 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