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

Вниз

Ну как мне сделать Drag&Drop на SpeedButton???!!!   Найти похожие ветки 

 
ArtGamer   (2002-05-16 21:49) [0]

Уважаемые Мастера! Помогите мне разобраться с такой бедой. Мне нужно получить иконку ассоциированную с файлом, который пользователь кидает на 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?


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

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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



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

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

Наверх





Память: 0.46 MB
Время: 0.007 c
3-57990
nitro313
2002-06-26 05:03
2002.07.18
Как организовать поиск в таблице table1 по принципу...


7-58346
BAPBAP
2002-04-27 06:19
2002.07.18
Удалить директории по списку в memo1.List


1-58132
skiph
2002-07-08 14:51
2002.07.18
Форма


1-58108
Question
2002-07-08 18:13
2002.07.18
screen.Datamodulecount


1-58088
Славик
2002-07-07 23:28
2002.07.18
Drag&Drop в ListBoxe





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский