Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.11.07;
Скачать: [xml.tar.bz2];

Вниз

Drag&Drop   Найти похожие ветки 

 
kukuikar ©   (2010-08-12 10:54) [0]

На форме есть несколько TEdit, перетаскиваю в них текстовые файлы. В TEdit должен отобразиться полный путь+имя файла.
в FormCreate tcnm nfrfz inerf
DragAcceptFiles(Edit1.Handle, true);

Процедура обрабатывающая Drag&Frop здесь


procedure TForm1.MWMDropFiles(var Msg: TWMDropFiles);
var
 CFileName: array[0..MAX_PATH] of Char;
begin
try

if DragQueryFile(Msg.Drop, 0, CFileName, MAX_PATH) > 0 then
 begin
   Edit1.Text := CFileName;
  Msg.Result := 0;
end;

finally
  DragFinish(Msg.Drop);
end;

end;


В данном виде в TEDIT не появляется путь+имя к файлу. Почему не понятно.

и еще, как мне определить каокй именно TEDit принял на себя файл?


 
Дмитрий С ©   (2010-08-12 11:23) [1]

Сообщение нужно ловить едитом, а не формой, т.к. ты его регистрируешь "DragAcceptFiles(Edit1.Handle, true)", имхо.


 
Сергей М. ©   (2010-08-12 11:26) [2]


> Почему не понятно


Потому что сообщение WM_DROPFILES отправляется системой окну контрола, который ты указал в DragAcceptFiles, а именно Edit1.
А ловишь это сообщение ты почему-то у формы, а не у Edit1

> как мне определить каокй именно TEDit принял на себя файл

Структура TWMDropFiles в поле Drop содержит хэндл окна контрола-приемника, которому адресовано сообщение WM_DROPFILES.
Ссылку на VCL-контрол, ассоциированный с этим окном, можно получить с пом. FindControl()


 
kukuikar ©   (2010-08-12 11:37) [3]


> А ловишь это сообщение ты почему-то у формы, а не у Edit1

не понимаю, где ловлю формой, а как удитом словить?


 
Сергей М. ©   (2010-08-12 11:41) [4]


> не понимаю, где ловлю формой


procedure TForm1.MWMDropFiles(var Msg: TWMDropFiles);


> как удитом словить


Обработчик Application.OnMessage получает управление при получении любых сообщений любым окнам, созданным основным потоком VCL-приложения.
В нем и лови.


 
kukuikar ©   (2010-08-12 12:54) [5]

Сделаю так

procedure TForm1.WMDropFiles(var Msg: TWMDropFiles);
var
 HF: THandle;
 s: array [0..1023] of char;
 i, FileCount: integer;
 p: TPoint;
 Comp: TLabeledEdit;
begin
 HF := Msg.Drop;
 DragQueryFile(HF, 0, s, sizeof(s));
 DragQueryPoint(HF, p);

 for i := 0 to ComponentCount - 1 do
   begin
   if Components[i] is TLabeledEdit then
     begin
     Comp := Components[i] as TLabeledEdit;
     if PtInRect(Comp.BoundsRect, p) then
       Comp.Text := ExtractFileName(s);
     end;
   end;

 DragFinish(HF);
end;


 
Сергей М. ©   (2010-08-12 13:53) [6]

ЭХто называется сходить в гости к соседу по Жмеринке через Китай)


 
kukuikar ©   (2010-08-12 14:16) [7]

Сергей М. ©   (12.08.10 13:53) [6]
на другое мозга не хватает


 
Дмитрий С ©   (2010-08-12 14:27) [8]

Как вариант, можно использовать такой прикол:


unit Unit5;

interface

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

type
 TEdit = class(StdCtrls.TEdit)
   private
     procedure WM_DropFiles(var Msg: TWMDropFiles); message WM_DROPFILES;
 end;

 TForm5 = class(TForm)
   Edit1: TEdit;
   Edit2: TEdit;
   procedure Button1Click(Sender: TObject);
   procedure FormShow(Sender: TObject);
 private
 public
 end;

var
 Form5: TForm5;

implementation

{$R *.dfm}

procedure TForm5.Button1Click(Sender: TObject);
begin

end;

{ TEdit }

procedure TEdit.WM_DropFiles(var Msg: TWMDropFiles);
var
 CFileName: array[0..MAX_PATH] of Char;
begin
 try
   if DragQueryFile(Msg.Drop, 0, CFileName, MAX_PATH) > 0 then
   begin
     Text := CFileName;
     Msg.Result := 0;
   end;
 finally
   DragFinish(Msg.Drop);
 end;
end;

procedure TForm5.FormShow(Sender: TObject);
begin
 DragAcceptFiles(Edit1.Handle, True);
 DragAcceptFiles(Edit2.Handle, True);
end;

end.


В Delphi 2010 работает. Надеюсь мне мастера уши не оторвут за такие примеры :)


 
Anatoly Podgoretsky ©   (2010-08-12 16:03) [9]

> kukuikar  (12.08.2010 14:16:07)  [7]

Ну займись тем, на что хватает.


 
kukuikar ©   (2010-08-13 13:15) [10]

Anatoly Podgoretsky ©   (12.08.10 16:03) [9]
оооо... узнаю старожил форума. пройти мимо не Ваше кредо, нужно пнуть.
а то уже испугался, что гнобить человека который много менее опытен и много меньше знает, уже перестали на этом форуме.


 
Сергей М. ©   (2010-08-13 13:36) [11]


> kukuikar ©   (13.08.10 13:15) [10]


Ты лучше скажи, чего и где у тебя не хватает, чтобы воспользоваться рекомендацией по обработке сообщений драг-дропа прямо в событии Application.OnMessage ..


 
kukuikar ©   (2010-08-13 13:52) [12]

Сергей М. ©   (13.08.10 13:36) [11]
Ну не знаю я как обработать Application.OnMessage. И вообще не знаю как работать с обработкой сообщений, не понимаю и не знаю механихмов работы.

Я не программист. Но передо мной иногда стоят задачи которые я не могу решить без дельфи. Моя область - это проектирование и расчет железобетонных конструкций, программы Revit, Robot, AutoCAD, ЛИРА, СКАД, МИКРОФЕ, MIDAS и .т.п. Я уверен что многие из здесь присутствующих не слышали о таких. Но мне надо перегнать один текстовый файл из одного формата в другой, в основном парсинг и математика. А другого пути как через Дельфи я не вижу перед собой.

А Drag&Drop это просто примочка, украшательство, упрощение ввода исходных данных. Не более, то же самое я делаю и через диалоги.

Я же и не прошу написать мне готовый код, потому что это  не правильно, и не жду что мне кто-то напишет.

Просто буду делать так как получается, хоть это и не правильно и пусть меня загнобят.

Я спросил - мне ответили, я нашел другое решение проблемы своей, пусть неправильное, но я его нашел.

Думаю что тему можно закрыть.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2010.11.07;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.003 c
2-1281891701
Радуга
2010-08-15 21:01
2010.11.07
403 Forbidden при массовых запросах к сайту. Как обойти?


15-1280299629
12
2010-07-28 10:47
2010.11.07
Какую бы ед. измерения выбрать?


15-1280089770
Юрий
2010-07-26 00:29
2010.11.07
С днем рождения ! 26 июля 2010 понедельник


2-1281883089
DROWSY
2010-08-15 18:38
2010.11.07
Сортировка по псевдониму.


4-1240991885
Zalum
2009-04-29 11:58
2010.11.07
Передать работающему приложению параметры





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский