Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ну как мне сделать Drag&Drop на SpeedButton???!!! [D5, Win95/98]


ArtGamer ©   (2002-05-16 21:49:00) 

Уважаемые Мастера! Помогите мне разобраться с такой бедой. Мне нужно получить иконку ассоциированную с файлом, который пользователь кидает на SpeedButton(или на Bitmap или Panel - всё равно). Иконку я получать умею - ExtractAssociatedIcon, обрабатывать Drag&Drop тоже:

private
procedure WMDROPFILES(var Message: TWMDROPFILES); message WM_DROPFILES;
...
procedure TForm1.WMDROPFILES(var Message: TWMDROPFILES);
var
Buffer : array[0..MAX_PATH] of Char; n:word;
begin
DragQueryFile(Message.Drop,0,@Buffer,SizeOf(Buffer));
Image1.Picture.Icon.Handle:=ExtractAssociatedIcon(hInstance,Buffer,n);
DragFinish (Message.Drop);
end;

Этот текст кода работает, когда DragAcceptFiles(Form1.Handle, TRUE);
но сообщение WM_DROPFILES просто не срабатывает, когда я пишу
DragAcceptFiles(Panel1.Handle, TRUE) или DragAcceptFiles(SpeedButton1.Glyph.Handle, TRUE);

Как мне сделать Drag&Drop на SpeedButton, или на Bitmap, или на Panel?


artgamer   (2002-05-18 13:15:00) [1]

Исходник находится в твоем вопросе
Тот исходник, который находится в моём вопросе, не фига не работает (во всяком случае, у меня), который в факе - тоже!


artgamer   (2002-05-18 13:14:00) [2]

Исходник находится в твоем вопросе
Тот исходник, который находится в моём вопросе, не фига не работает (во всяком случае, у меня), который в факе - тоже!


Anatoly Podgoretsky   (2002-05-18 12:09:00) [3]

Исходник находится в твоем вопросе, более полный есть в местном FAQ


artgamer   (2002-05-18 11:43:00) [4]

А нельзя-ли скинуть исходнячок? То, что надо переопределить оконную процедуру того контрола, который будет ловить WM_DROPFILES - это я понял. А вот как это сделать? В документации по WinAPI из SDK есть описание WM_DROPFILES, и там написано: hDrop = WM_DROPFILES (HANDLE) wParam, а что с этим делать - не пойму.


Anatoly Podgoretsky   (2002-05-18 10:52:00) [5]

artgamer © (17.05.02 21:54)
Только что проверил, сообщения принимаются в любом месте окна, включая не клиентскую область и над SpeedButton тоже


Suntechnic   (2002-05-18 00:08:00) [6]

Так ведь я же написал, что сообщение WM_DROPFILES вообще не вызывается!
И не будет вызываться! Ведь ты же отлавливаешь сообщение WM_DROPFILES над формой. Т.е., естественно, если мышь находится над другим контролом, то этот контрол сообщение и получает, а форма соответственно нет. Вариантов решения несколько. Во-первых можно написать наследника того контрола, что будет ловить WM_DROPFILES и определить у него подобное событие. Во-вторых можно переопределить оконную процедуру того контрола, который будет ловить WM_DROPFILES и уже оттуда информировать кого угодно о наступившем событии.


artgamer   (2002-05-17 21:54:00) [7]

Так ведь я же написал, что сообщение WM_DROPFILES вообще не вызывается! Как мне узнать, что пользователь сделал Drag&Drop без этого сообщения? А разрешить польвователю кидать на форму я не могу - на всю форму у меня TabControl растянут.


Anatoly Podgoretsky   (2002-05-16 22:25:00) [8]

Это надо делать на уровне формы, а если при этом нужно определять что курсор находится над определенным элементом то получить кординаты мышки


Наверх

Титульная страница Поиск, карта сайта Написать письмо