Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   .txt Datei in ein TMemo ziehen (drap&drop) (https://www.delphipraxis.net/176123-txt-datei-ein-tmemo-ziehen-drap-drop.html)

Nextasy2k 14. Aug 2013 00:05


.txt Datei in ein TMemo ziehen (drap&drop)
 
Ich komme leider nicht mehr weiter und habe dazu nichts gefunden. Möchte gerne z.b. eine auf dem Desktop sich befindente .txt Datei mit der Maus in mein TMemo reinziehen, so das die Datei dann im Memo angezeigt wird.

Verwende diesen Code:

Delphi-Quellcode:
private
  procedure WMDROPFILES(var Msg: TMessage); Message WM_DROPFILES;


procedure TForm1.WMDROPFILES(var Msg: TMessage);
var
  i, Counts, Size: Integer;
  PCharFileName: PChar;

begin
  inherited;
  PCharFileName:=nil;
  Counts:=DragQueryFile(Msg.WParam, $FFFFFFFF, PCharFileName, 255);
  for i:=0 to Counts - 1 do
    begin
      Size:=DragQueryFile(Msg.WParam, i, nil, 0) + 1;
      PCharFileName:=StrAlloc(Size);
      DragQueryFile(Msg.WParam, i, PCharFileName, Size);
      Memo1.Lines.Add(String(PCharFileName));
      StrDispose(PCharFileName);
   end;
  DragFinish(Msg.WParam);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  DragAcceptFiles(Memo1.Handle, True);
end;
Eigentlich galt der für ne ListBox, daher mein Versuch mit dem Memo, doch leider passiert nach dem drap&drop garnichts. Wäre für Hilfe oder verbesserungen/aufklärung sehr sehr dankbar!

Volker Z. 14. Aug 2013 01:12

AW: .txt Datei in ein TMemo ziehen (drap&drop)
 
Hallo,

Du kannst es mal so versuchen:
Delphi-Quellcode:
uses
  ShellApi;

procedure TForm1.WMDropFiles (var Msg : TMessage);
var
  s, w : Integer;
  q   : PChar;
  p   : TPoint;
begin
  w := Msg.WParam;
  try
    DragQueryPoint (w, p);
    if not PtInRect (Memo1.ClientRect, Memo1.ScreenToClient (ClientToScreen (p))) then
      Exit;

    if DragQueryFile (w, $FFFFFFFF, nil, 0) <> 1 then
      begin
        // Deine Fehlerbehandlung, wenn mehr als eine Datei gedroppt wird
        Exit
      end;

    s := DragQueryFile (w, 0, nil, 0) + 1;
    try
      q := StrAlloc (s)
    except
      // Deine Fehlerbehandlung, wenn kein Speicher alloziert werden konnte
      Exit
    end;

    DragQueryFile (w, 0, q, s);
    Memo1.Lines.LoadFromFile (q);
    StrDispose (q)
  finally
    DragFinish (w)
  end
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  DragAcceptFiles (Handle, True) // Handle des Forms!
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  DragAcceptFiles (Handle, False)
end;
Gruß

jaenicke 14. Aug 2013 05:38

AW: .txt Datei in ein TMemo ziehen (drap&drop)
 
Der entscheidende Unterschied ist, dass du das Handle des Formulars benutzt. Denn wenn man das des Memos benutzt, muss man die Nachricht auch in der Klasse des Memos abfangen oder dessen WndProc umbiegen. Im Formular kommt die Message dann gar nicht an, weshalb auch der erste Quelltext nicht funktionieren wird.

Nextasy2k 14. Aug 2013 06:44

AW: .txt Datei in ein TMemo ziehen (drap&drop)
 
Danke Danke, ich glaub jetzt hab ichs verstanden :-D

Noch eine kurze Frage, wie kann man jetzt bestimmen das man nur .txt dateientypen reinziehen kann und keine anderen ?

Sir Rufo 14. Aug 2013 07:09

AW: .txt Datei in ein TMemo ziehen (drap&drop)
 
Könntest du bitte deinen ersten Beitrag bearbeiten und um den Quelltext die
Code:
[DELPHI][/DELPHI]
Tags setzen?

jaenicke 14. Aug 2013 07:44

AW: .txt Datei in ein TMemo ziehen (drap&drop)
 
Zitat:

Zitat von Nextasy2k (Beitrag 1224692)
Noch eine kurze Frage, wie kann man jetzt bestimmen das man nur .txt dateientypen reinziehen kann und keine anderen ?

Gar nicht, das musst du selbst prüfen, wenn der User diese bei dir abgelegt hat.


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