Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Надо поймать клик


xZero ©   (2003-01-28 01:11:00) 

Есть окно hWnd:=CreateWindow(ClassName,"My",WS_OVERLAPPEDWINDOW,100,100,750,600,0,0,hInstance,nil);
есть едит
hEdit:=CreateWindowEx(WS_EX_CLIENTEDGE,"Edit","",WS_CHILD or WS_VISIBLE or ES_MULTILINE or ES_AUTOHSCROLL or ES_AUTOVSCROLL or WS_HSCROLL or WS_VSCROLL,3,18,500,350,hWnd,0,hInstance,nil);
как отследить клик то едиту?
Желательно на Делфи!


i-C3H7OH   (2003-01-28 15:21:00) [1]

примерчик мне в голову приходит такой:

hEdit := CreateWindow(..);
dc := GetDC(hEdit);

При клике
SetTextColor(dc, Color);

ну и перед закрытием
ReleaseDC(hEdit, dc);


но это неправильно, т.к. цвет текста задаем конкретно для контекста dc, а не для едита.

поройся в исходниках ТЕдита


xZero   (2003-01-28 14:53:00) [2]

Ну строка как минимум не одна(произвольно), а про цвет я и хочу узнать, вроде SetTextColor подходит(по смыслу), но вот примерчика нету?


i-C3H7OH   (2003-01-28 14:47:00) [3]

а их там много? как цвет текста в Едите задается? мож SetTextColor(hdc, Color)? нет, неправильно. не знаю


xZero   (2003-01-28 14:22:00) [4]

Нет надо выделить строку в едите по которой произошел клик!


i-C3H7OH   (2003-01-28 13:30:00) [5]

переменная hWnd в ф-ции WProc локальная (первый параметр) , а не глобальная, где, как я понял, и хранится дескриптор главного окна

попробуй назвать ее по-другому

а что за строка? просто на форме?


xZero   (2003-01-28 12:53:00) [6]

И в конце концов мне надо выделить строку отловлнную после wm_lbuttondown, можно другим цветом, как это организовать?


xZero   (2003-01-28 12:12:00) [7]

Вот поглядите кусок кода...

var OldWndProc:pointer;
....
Function WinProc(hWnd:THandle; Msg,wParam,lParam:Longint):Longint; stdcall; export;
begin
case Msg of
..........
Result:=DefWindowProc(hWnd,Msg,wParam,lParam);
end;

Function WProc(hWnd:THandle; Msg,wParam,lParam:Longint):Longint; stdcall; export;
begin
case msg of
WM_LBUTTONDOWN:
begin
sendmessage(hwnd,wm_settext,0,integer(pchar("asd")));
// но производя тут sendmessage сообщение идет не гл. окну (hWnd), а почему то едиту (hEdit)
end;
end;
Result:=CallWindowProc(OldWndProc,hWnd,Msg,wParam,lParam);
end;

//тут идет заполнение структуры для создания окна
//такде регистрауия, короче все что надо для создания окна, а далее...это

OldWndProc:=pointer(GetWindowLong(hEdit, GWL_WNDPROC));
SetWindowLong(hEdit,GWL_WNDPROC,integer(@wproc));

//тут еще что-то...
//и конечное же циклобработки

while GetMessage(Msg,hWnd,0,0) do
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
Halt(Msg.wParam);
end.


Что тут неверно, я про запарку с sendmessage (а то вдруг и другое не будет работать!)
Поглядите плиз все ли тут правильно!?


Nick_N_A   (2003-01-28 05:27:00) [8]

Для создания окна, сначало нужно зареестрировать его класс,
там как раз нужно указать адрес WndProc,
(не беда, можно задать позже SetClassLong GCL_WndProc)
именно туда тебе будут приходить все сообщеня.
Не забывай цепочку GetMessage-TranslateMessage-DispatchMessage


Наверх

Титульная страница Поиск, карта сайта Написать письмо