![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Panel на Win API [D6, WinXP]
XProger © (2004-09-25 18:45:00)Приветствую...
Подскажите пожалуйста, как создать Panel на Win API?
И можно ли ей задать ровнение на низ родительского окна?
XProger (2004-09-28 18:51:00) [1]KSergey, дык, специально для "умных" я и дал ссылку на src...
На словах я тоже много чего знаю... ;)
KSergey (2004-09-28 08:41:00) [2]Посмотрел - но ошибку не вижу.. Чета странное в проге творится... Наверное книжки надо вам еще читать дальше ;)
KSergey (2004-09-28 08:19:00) [3]> [10] DVM © (27.09.04 11:27)
> Мне кажется нельзя просто так создавать окна указывая один
> и тот же класс и одну и ту же оконную процедуру.
Не надо обманывать. Все можно.
jack128 (2004-09-27 21:37:00) [4]
> Я пытался указывать процедуру находящуюся в классе. Но
> выдавалась ошибка при компиляции.
такая процедура называется "метод". копай в сторону MakeObjectInstance
> Можно ли после создания окна сменить его WinProc?
можно. SetWindowLong + F1
XProger (2004-09-27 19:50:00) [5]Я пытался указывать процедуру находящуюся в классе. Но выдавалась ошибка при компиляции. При этом я создавал 2 одинаковых класса окон, что ИМХО не логично...
Можно ли после создания окна сменить его WinProc?
DVM (2004-09-27 11:27:00) [6]Посмотри внимательно на поведение окон. Они не только друг друга пачкают. Они также пачкаются при перемещении их в низ родительского окна за его границу.
Если закрыть одно из окон, такого не происходит.
Вывод - проблема в двух одинаковых окнах.
Мне кажется нельзя просто так создавать окна указывая один и тот же класс и одну и ту же оконную процедуру.
XProger (2004-09-26 22:21:00) [7]Исходник: http://XProger.narod.ru/tmp/XChat_src.rar(3 кб)
XProger (2004-09-26 22:15:00) [8]Дык и без него та же ерунда...
Вот сама программа:
http://XProger.narod.ru/tmp/XChat.rar(8 кб)
Подвигай окошки, и заметишь, как предыдущее активное окно перестаёт перерисовываться...
DVM (2004-09-26 17:39:00) [9]
> XProger © (26.09.04 14:38) [6]
> or CS_OWNDC;
а это зачем?
XProger (2004-09-26 14:38:00) [10]Ой, забыл...
// Channel class
with 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);
XProger (2004-09-26 14:37:00) [11]
procedure TChannelWnd.Create(const Name: string);
begin
Handle := CreateWindowEx(WS_EX_LEFT or WS_EX_TOOLWINDOW,
'Channel_WndClass',
PChar(Name),
WS_OVERLAPPEDWINDOW or
WS_VISIBLE or WS_CHILD,
0, 0, 320, 240,
Chat_Handle,
0,
hInstance,
nil);
// Chat Memo
Memo := CreateWindow('EDIT',
'sssssssssss',
//ES_READONLY or
ES_LEFT or
ES_MULTILINE or
ES_AUTOVSCROLL or
WS_VISIBLE or
WS_CHILD or
WS_DLGFRAME or
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);
ShowWindow(Handle, SW_SHOW);
end;
Если создать 2 таких окна, они начнут друг-друга "пачкать". Может нужно выставлять нечто наподобии Z уровня?
Apl (2004-09-26 05:46:00) [12]код покажи
XProger (2004-09-25 22:42:00) [13]Сделал, но как можно избавиться от мерцания при изменении размеров родительского окна?
И ещё вопросы:
- Почему при перемещении дочернего окна, оно иногда не перерисовывает некоторые части?
- Я создал дочернее окно с Edit'ом без readonly параметра, и не могу печатать в нём! Там даже каретка не появляется... :(
XProger (2004-09-25 19:17:00) [14]Спасибо...
DVM (2004-09-25 18:56:00) [15]
> Подскажите пожалуйста, как создать Panel на Win API?
Именно панели на WinApi не создать. Аналог панели в WinApi - обычное дочернее окно.
> И можно ли ей задать ровнение на низ родительского окна?
можно, ручками.