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

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

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 - обычное дочернее окно.

> И можно ли ей задать ровнение на низ родительского окна?

можно, ручками.


Наверх

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