Форум: "WinAPI";
Текущий архив: 2007.02.18;
Скачать: [xml.tar.bz2];
ВнизWMDropFiles и компонент Найти похожие ветки
← →
Krants (2006-10-09 13:36) [0]Можно ли известную многим процедуру,-
WMDropFiles (var Msg: TMessage), использовать исключительно для определенного компонента, и как?
← →
clickmaker © (2006-10-09 13:36) [1]DragAcceptFiles(Control.Handle
← →
Krants (2006-10-09 14:06) [2]пробовал, таким образом(на примере Мемо):
DragAcceptFiles(Memo1.Handle, true);
только не срабатывает функция:
DragQueryFile(THandle(Msg.WParam), 0, FileName, SizeOf(Filename));
возможно нужно заменить THandle(Msg.WParam)?
← →
MBo © (2006-10-09 14:18) [3]сообщение о бросании файлов приходит оконной функции Memo, а не формы
← →
Krants (2006-10-09 15:14) [4]Ну так мне это и нужно, только как правильно вычислить значение FileName?
← →
guav © (2006-10-09 15:21) [5]> DragQueryFile(THandle(Msg.WParam), 0, FileName, SizeOf(Filename)
> );
SizeOf(Filename) не вернёт длину строки Filename.
Для строки лучше взять не PChar, а string и использовать Length .
При этом, длину строки надо установить заранее (используя SetLength). Значение длины можно взять MAX_PATH, либо получить, используя DragQueryFile с nil и 0 в качестве последних параметров)
← →
Krants (2006-10-09 15:28) [6]
> guav ©
в данной случае FileName и есть string, а на счет длины строки,- функции Length и SizeOf выдают аналогичный результат...
← →
guav © (2006-10-09 15:47) [7]> FileName и есть string
Тогда надо явно приводить к строке:
DragQueryFile(THandle(Msg.WParam), I, PChar(FileName), Length(Filename));
> функции Length и SizeOf выдают аналогичный результат
Это возможно только случае, когда длина строки равна четырём.
← →
Krants (2006-10-09 15:53) [8]Да нет, равна 257. Да и причем тут FileName, это переменная в которую записывается имя файла, брошеного на форму!
Да и вопрос о другом: как можно получить имя файла забрасываемого исключительно на компонент(ТМемо)?
← →
guav © (2006-10-09 16:04) [9]> Да нет, равна 257.
Интересно, и в каком случае SizeOf(FileName) = 257 ??
Для обычной строки это всегда размер указателя.
Для короткой - размер буфера плюс один, т.е. от 1 до 256 (и не стоит вообще их использовать).
> Да и вопрос о другом: как можно получить имя файла забрасываемого
> исключительно на компонент(ТМемо)?
На это уже был дан ответ, см.
> [3] MBo © (09.10.06 14:18)
← →
Krants (2006-10-09 16:15) [10]все правильно получается, т.к. я провтыкал, FileName у нас есть PChar.
нельзя ли поподробней разьяснить ответ:
> [3] MBo © (09.10.06 14:18)
> сообщение о бросании файлов приходит оконной функции Memo,
> а не формы
так мне сообщение о бросании на форму не надо, надо на компонент!
← →
MBo © (2006-10-09 16:21) [11]>так мне сообщение о бросании на форму не надо, надо на компонент!
По тому, что ты сказал
>только не срабатывает функция
я решил, что сообщения оконной функции главного окна (формы) ты обрабатываешь, а вот сообщения, приходяшие оконной функции Memo - нет.
Если так, то сделай это - или перекрыв WndProc, или в Apllication.OnMessage, или субклассированием.
← →
Krants (2006-10-09 16:45) [12]
> MBo ©
хе, смешно, я же не просто так спрашиваю, а потому что не очень шарю в WinAPI...
можешь привести какой-нибудь пример из выше указаных вариантов?
← →
MBo © (2006-10-09 16:54) [13]пример для WndProc есть в хелпе
← →
Krants (2006-10-09 17:14) [14]ну а нельзя немного по конкретнее, сори что задалбливаю... но сам понимаешь, за час WinAPI не выучишь. А доделать прогу нужно сегодня, завтра сдаваться... Если уж это сложно, то подскажи хоть нормальную FAQ`у по WinAPI...
← →
Ketmar © (2006-10-09 17:19) [15]>[14] Krants 9-Oct-2006, 17:14
>нормальную FAQ`у по WinAPI...
MSDN? %-) таки да: за день апи не выучишь. и даже не особо поймёшь...
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2007.02.18;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.081 c