Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.046 c
15-1169733670
vasIzmax
2007-01-25 17:01
2007.02.18
Тест по ТАСО


2-1169797326
ORMADA
2007-01-26 10:42
2007.02.18
TrayIcon


15-1168795073
IMHO
2007-01-14 20:17
2007.02.18
Падение Шевченко


15-1169764560
Pass2
2007-01-26 01:36
2007.02.18
Как вы осуществляете перевод с C++ на Паскаль больших кусков кода


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





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