Форум: "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.006 c