Очищення вікна засобами WinAPI
Чи можна очистити поле введення засобами WinAPI?
SendMessage (Handle, WM_CLEAR, 0, 0)
Пробував, не працює. Та й опис повідомлення якийсь туманний: wm_Clear: Видаляє поточний вибір, зроблений у вікні (MSDN).
Можна надіслати вікно повідомлення WM_SETTEXT з порожнім рядком
> Та й опис повідомлення якийсь туманний: wm_Clear: Видаляє > поточний вибір, зроблений у вікні (MSDN). від edit control. (c) MSDN
> Пробував, не працює.Погано пробували. procedure TForm1.Button1Click(Sender: TObject); begin Edit1.SelectAll; SendMessage (Edit1.Handle, WM_CLEAR, 0, 0); end;
Якщо завгодно на чиста API, то SelectAll змінюємо на SendMessage(Handle, EM_SETSEL, 0, -1);
> Можна надіслати вікно повідомлення WM_SETTEXT з порожнім рядкомЗнову не хоче: вперто додає переданий рядок до вже існуючого без будь-якого попереднього очищення :( Ось код: StrBase := ""; SendMessage(hInput, WM_SETTEXT, 0, Integer(StrBase)); StrBase := "Test";
> ДжоА Edit знаходиться в іншому додатку. Хендл я знайшов, а очистити ніяк не можу :(
> Новачок (31.01.09 16:07) [7] > > ДжоА Edit знаходиться в іншому додатку. Хендл я знайшов, > а очистити ніяк не можу: (Отже, у вас помилка в програмі. Код SendMessage(Handle, EM_SETSEL, 0, -1); SendMessage (Handle, WM_CLEAR, 0, 0); прекрасно очищає Edit в «іншому додатку».
> Джо> Значить, у вас помилкапрограмі.Та я і не сперечаюся: звичайно, помилка може бути. Але не дає спокою одна деталь - наведений мною код працює адже, текст-то з'являється. Голову вже зламав :(
StrBase := ""; SendMessage(hInput, WM_SETTEXT, 0, Integer(PChar(StrBase))); ?