Panel на Win API
Вітаю. Підкажіть, будь ласка, як створити Panel на Win API? І чи можна їй задати рівняння на низ батьківського вікна?
> Підкажіть будь ласка, як створити Panel на Win API?Саме панелі на WinApi не створити. Аналог панелі WinApi - звичайне дочірнє вікно.> І чи можна їй задати рівняння на низ батьківського вікна?можна, ручками.
Зробив, але як можна позбутися мерехтіння при зміні розмірів батьківського вікна?
І ще питання: - Чому при переміщенні дочірнього вікна, воно іноді не перемальовує деякі частини? - Я створив дочірнє вікно з Edit"ом без readonly параметра, і не можу друкувати в ньому! Там навіть каретка не з'являється. :(
procedure TChannelWnd.Create(const Name: string); begin Handle := CreateWindowEx(WS_EX_LEFT or WS_EX_TOOLWINDOW, "Channel_WndClass", PChar(Name), WS_OVERLAPPED WS_VISIBLE or WS_CHILD, 0, 0, 320, 240, Chat_Handle, 0, hInstance, nil); // Chat Memo Memo := CreateWindow ("EDIT", "ssssssssssss", //ES_READONLY or ES_LEFT or ES_MULTILINE or ES_AUTOVSCROLL or WS_VISIBLE or WS_CHILD or WS_DLGF 1>WS_VSCROLL, 0, 0, 312, 191, Handle, 1, hInstance, nil);
// Say Edit Edit := CreateWindow("EDIT", "aaa", ES_LEFT or ES_AUTOHSCROLL or WS_VISIBLE or WS_CHILD or WS_DLGFRAME, 0, 191, 312, 25, Handle, 2, hInstance, nil);
Якщо створити 2 таких вікна, вони почнуть один одного "брудкати". Може потрібно виставляти щось на зразок Z рівня?
Ой забув. // Channel class з Channel_WndClass do begin cbSize := SizeOf(Channel_WndClass); style := CS_HREDRAW or CS_VREDRAW or CS_OWNDC; lpfnWndProc := @Channel_WndProc; cbClsExtra := 0; cbWndExtra := 0; hInstance := hInstance; hIcon := LoadIcon(hInstance, "MAINICON"); hCursor := LoadCursor(0, IDC_ARROW); hbrBackground := COLOR_BTNFACE + 1; lpszMenuName := nil; lpszClassName := "Channel_WndClass"; end; RegisterClassEx(Channel_WndClass);
Так і без нього та сама нісенітниця. Ось сама програма: http://XProger.narod.ru/tmp/XChat.rar (8 кб) Посувай віконця, і помітиш, як попереднє активне вікно перестає перемальовуватися.
Вихідник: http://XProger.narod.ru/tmp/XChat_src.rar (3 кб)
Подивися уважно на поведінку вікон. Вони не тільки один одного бруднять. Вони також брудняться при переміщенні їх в низ батьківського вікна за його кордон. Якщо закрити одне з вікон, такого не відбувається. Висновок - проблема в двох однакових вікнах. Мені здається не можна просто так створювати вікна вказуючи один і той самий клас і ту саму віконну процедуру.
Я намагався вказувати процедуру, що знаходиться в класі. Але видавалася помилка під час компіляції. При цьому я створював 2 однакові класи вікон, що ІМХО не логічно. Чи можна після створення вікна змінити його WinProc?
> Я намагався вказувати процедуру, що знаходиться в класі. Але > видавалась помилка під час компіляції.така процедура називається "метод". копай у бік MakeObjectInstance
> Чи можна після створення вікна змінити його WinProc?можна. SetWindowLong + F1
KSergey, так спеціально для "розумних" я і дав посилання на src. На словах я теж багато чого знаю. ;)