Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.02.18;
Скачать: CL | DM;

Вниз

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 вся ветка

Текущий архив: 2007.02.18;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.051 c
10-1129215610
QwertyMan
2005-10-13 19:00
2007.02.18
Написал ActiveFormX, как сделать регистрацию через Бровзер


15-1169523391
Slider007
2007-01-23 06:36
2007.02.18
С днем рождения ! 23 января


15-1169013501
NLex
2007-01-17 08:58
2007.02.18
FireBird Component


1-1167002316
Khabibulin
2006-12-25 02:18
2007.02.18
Выравнивание текста ячейки в StringGrid


2-1170134129
MASTAFA
2007-01-30 08:15
2007.02.18
Вопрос по связи MathCad и Delphi