-
Доброе время суток.Уважаемые мастера. Компонент для перетаскивания чего-либо с формы KOL в другое приложение с другого приложения на форму KOL. http://kolmck.net/Components/dragnDrop.zipЕсть ли на него пример? не dnd перетаскивание в одном приложении с одного листвью в другое.
-
Может простенький пример без этого компонента. Вроде бы был пример, но никак его не найду.
-
Пока пытаю что-то вроде этого.
program Project1;
uses
windows, kol,ShellApi;
var
form,Memo:PControl;
procedure DropFiles(Dummy : Pointer;var Msg: tagMSG;Sender: PControl; );
var
f: THandle;
buffer: array [0..MAX_PATH] of Char;
i, numFiles: Integer; S:string;
begin
if not OpenClipboard( form.GetWindowHandle ) then Exit;
OpenClipboard(0);
try
if IsClipboardFormatAvailable( CF_HDROP )then
f := GetClipboardData(CF_HDROP);
if f <> 0 then
begin
numFiles := DragQueryFile(f, $FFFFFFFF, nil, 0);
S:='';
for i :=0 to numfiles - 1 do
begin
buffer[0] := #0;
DragQueryFile(f, i, buffer, SizeOf(buffer));
S:=s + buffer+#13#10;
end;
end;
finally
memo.add(s) ;
DragFinish(f); end;
end;
Begin
Applet := NewApplet('');
form:=NewForm(Applet,'Memo').SetClientSize( 406, 252 ).centeronparent;
Memo := NewEditBox( form, [ eoMultiline, eoNoHScroll ] ).SetAlign(caclient); Memo.Color := clWindow;
Memo.Text := '';
form.StayOnTop:=true;
DragAcceptFiles(form.Handle, true);
Run(Applet);
end.
-
program DragDrop;
uses
Windows, KOL;
procedure DropFiles(Dummy: Pointer; Sender: PControl; const FileList: KOL_String; const Pt: TPoint);
var
FList: PStrList;
I: Integer;
begin
FList := NewStrList;
FList.Text := FileList;
for I := 0 to FList.Count - 1 do
Sender.Add(FList.Items[I] + #$0D#$0A);
FList.Free;
end;
begin
Applet := NewForm(nil, 'DragDrop');
Applet.StayOnTop := True;
with NewEditBox(Applet, [eoMultiline, eoNoHScroll])^ do
begin
Align := caClient;
Color := clWindow;
OnDropFiles := TOnDropFiles(MakeMethod(nil, @DropFiles));
end;
Run(Applet);
end.
-
Thank you very much for your quick reply:)
-
Доброе время суток. Вообще посмотрел это [3] собственно KOL пример ! procedure TSomeObject.DropFiles( Sender: PControl; const FileList: AnsiString;
! const Pt: TPoint ); )
! var FList: PStrList;
! I: Integer;
! begin
! FList := NewStrList;
! FList.Text := FileList;
! for I := 0 to FList.Count-1 do
! begin
! ! end;
! FList.Free;
! end; } тогда для одного файла так:
program Project1;
uses
windows,kol;
var
form,Memo:PControl;
procedure DropFiles(Dummy : Pointer;Sender: PControl;const Filelist:string;Pt:Tpoint);
begin
memo.Text:='Путь к файлу: '#13#10+filelist+#13#10+
'Содержимое файла: '#13#10+StrloadFromFile(filelist);
end;
Begin
form:=NewForm(Applet,'Memo').SetClientSize( 456, 252 ).centeronparent;
Memo := NewEditBox( form, [ eoMultiline, eoNoHScroll ] ).SetAlign(caclient);
Memo.Color := clWindow;
Memo.Text := '';
form.StayOnTop:=true;
form.OnDropFiles :=TOnDropFiles(MakeMethod(nil,@DropFiles));
Run(form);
end.
Только можно ли получить количество файлов на прямую ?
-
Посчитать количество #13#10 в Filelist или надо еще прямее?)
-
Спасибо:) [6] Понятно, правда там #13, но от этого смысл не меняется;)
-
Доброе время суток продолжение темы как сделать правильно обработку нескольких брошенных файлов? > Dufa © (07.10.10 19:40) [6] > > Посчитать количество #13#10 в Filelist или надо еще прямее? > )
допустим бросаем два файла путь_1_файл#13путь_2_файл#13#10 Пробую так:
...
n:=Length(Filelist);
s:=Filelist; for i := 0 to N do begin
if Filelist[i] = #13 then begin
inc(j); a[j]:=copy(s,r,i-1);delete(s,r,i);r:=i;
...
r-начальная позиция i-1 -конечная позиция что вышло заносим в массив a: array[ 1..MAX_PATH ] of string; а конец-то #13#10 "он не видит" последний в "пролёте"?
-
Строки индексируют с 1. У copy третий параметр - число символов. Чем дальше продвинулся цикл, тем больше копирует и удаляет. В KOL есть такая функция Parse.
s := Filelist;
while s <> '' do
begin
inc(j); a[j] := Trim( Parse( s, #13 ) );
s := Trim( s );
end;
-
procedure DropFiles(Dummy : Pointer;Sender: PControl;const Filelist:string;Pt:Tpoint);
var a: array[ 1..MAX_PATH ] of string;
j,k:integer; s:string;
begin
j:=0;
s := Filelist;
while s <> ' ' do
begin
inc(j); a[j] := Trim( Parse( s, #13 ) );
s := Trim( s );
end;
for k:=1 to j do memo.Add(int2str(k)+') '+a[j]+#13#10);
memo.Add(' '#13#10);
memo.Add('Сама строка: '#13#10+Filelist);
end; Почему то у меня все строки в полученном массиве одинаковые.
-
Не мудрено. +a[k]+
-
(17.10.10 06:59) [11] Время отдохнуть Ч/з полчаса как выключил ноут понял где промах. Спасибо. Вопрос решен. Тема закрыта.
|