drag'n'drop på mit program

Tags:    delphi

<< < 12 > >>
Jeg er ved at lave en (hvor opfindsomt) teksteditor.
Nu vil jeg gerne tilføje en funktion som gør at når jeg smider en tekstfil (eller hvilken som helst anden fil) hen over mit program's exe-fil så åbner filen i programmet.
Hvordan gør jeg det ?



11 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 3 karma
Sorter efter stemmer Sorter efter dato
Jeg tror at det du prøver på at formulerer er at du gerne vil lave sådan at man kan kører f.eks "DitProgram.exe c:\\filenderskalÅbnes.txt" det er jo en smal sag... bare smid følgende kode ind i din forms OnCreate
//kodestart
if length(paramStr(1)) > 0 then begin
memo1.Lines.LoadFromFile(paramStr(1));
end
//kodeslut
-
Aloha - Er du fresh???



Du skal bruge et event, onDrop tilhørende dit control-element (altså der hvor objektet skal droppes til, fx en txt-box/en label mv), event-procedure skal så undersøge hvad, altså typen+datane der droppes, og reagerer herefter. Procedure får drop-objektet som et parameter, du kan se helt nøjagtigt hvad parameteret er for en størelse i hjælp.



Du skal bruge et event, onDrop tilhørende dit control-element (altså der hvor objektet skal droppes til, fx en txt-box/en label mv), event-procedure skal så undersøge hvad, altså typen+datane der droppes, og reagerer herefter. Procedure får drop-objektet som et parameter, du kan se helt nøjagtigt hvad parameteret er for en størelse i hjælp.


Lidt kode.. tak



Jeg er ved at lave en (hvor opfindsomt) teksteditor.
Nu vil jeg gerne tilføje en funktion som gør at når jeg smider en tekstfil (eller hvilken som helst anden fil) hen over mit program's exe-fil så åbner filen i programmet.
Hvordan gør jeg det ?


Hvis du definerer dataene soom skal sættes ind (teksten) kan du vil bruge
<pre>richedit1.Lines.Add(const s: (string)) </pre> Hvor string er den tekst du vil indsætte.

Hvis du finder ud af noget så må du meget gerne enden "poste" løsninger her eller lige sende en mail. (er ligeså opfindsom...) :)

Ken Christensen
Christensenken@hotmail.com
www.Kenchristensen.tk[Redigeret d. 09/08-02 13:27:07 af Ken Christensen]



-skal lige se om jeg har forstået brugen af det her, inden jeg sender et forslag til dig !




Lidt kode.. tak


Det her har jeg direkte fra hjælp i D6:

This code comes from an application that contains a list box and three labels, each with a different font and color. The DragMode property for each of the labels is dmAutomatic. The user can select a label and drag it to a list box and drop it. When the label is dropped, the items in the list box assume the color and font of the dropped label.
This OnDragOver event handler permits the list box to accept a dropped label:

procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);

begin
Accept := Source is TLabel;

end;

This OnDragDrop event handler implements the drop behavior.

procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);

begin
if (Sender is TListBox) and (Source is TLabel) then
begin
with Sender as TListBox do
begin
Font := (Source as TLabel).Font;
Color := (Source as TLabel).Color;
end;
end;
end;

Du kan jo prøve det, ikke helt hvad du skal bruge men mon ikke løsningen er heri.



Det her skulle virke :

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ShellApi;

type
TMemoDropFiles = class(TMemo)
private
procedure WMDROPFILES(var Msg : TWMDROPFILES); message WM_DROPFILES;
end;

TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
MemoDropFiles : TMemoDropFiles;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
DragAcceptFiles(MemoDropFiles.Handle, true);
end;

procedure TMemoDropFiles.WMDROPFILES(var msg: TWMDROPFILES);
var
Buffer : array[0..255] of char;
fortel1 : integer;
FileName : string;
begin
try
for fortel1:=0 to DragQueryFile(Msg.Drop, $FFFFFFFF, Buffer, 255)-1 do
begin
DragQueryFile(Msg.Drop, fortel1, Buffer, 255);
// FileName:=StrPas(Buffer); //behøves vist ikke i Delphi
// Lines.Add(FileName); //behøves vist ikke i Delphi
Lines.Add(Buffer);
end;
finally
DragFinish(Msg.Drop);
Msg.Result:=0;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1.Free;
//
MemoDropFiles:=TMemoDropFiles.Create(self);
MemoDropFiles.Parent:=self;
MemoDropFiles.BoundsRect:=Rect(176, 48, 176+500, 48+273);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
MemoDropFiles.Clear;
end;

end.




Jeg "kom til" at læse dit spørgsmål mere nøjagtigt. Er det en fil du vil dragge henover en shortcut/selve .exe filen(fx i en mappe liste) som programmet så skal reagere på?
Hvis det er så tror jeg nok at windows bare åbner programmet med filen som parameter på "kommando linjen" som du kan hente med CmdLine (system) som er en streng variabel der indeholder argumentet fra exe filens åbnings tidspunkt.
Martin.



Jeg "kom til" at læse dit spørgsmål mere nøjagtigt. Er det en fil du vil dragge henover en shortcut/selve .exe filen(fx i en mappe liste) som programmet så skal reagere på?
Hvis det er så tror jeg nok at windows bare åbner programmet med filen som parameter på "kommando linjen" som du kan hente med CmdLine (system) som er en streng variabel der indeholder argumentet fra exe filens åbnings tidspunkt.
Martin.


Nu lyder det som om du er inde på noget af det rigtige =)

kan du plz uddybe det lidt ?[Redigeret d. 09/08-02 15:58:13 af ZiuiX]



Jeg tror at det du prøver på at formulerer er at du gerne vil lave sådan at man kan køre f.eks "DitProgram.exe c:\\filenderskalÅbnes.txt" det er jo en smal sag... bare smid følgende kode ind i din forms OnCreate
//kodestart
if length(paramStr(1)) > 0 then begin
memo1.Lines.LoadFromFile(paramStr(1));
end
//kodeslut
-
Aloha - Er du fresh???



<< < 12 > >>
t