Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.31;
Скачать: CL | DM;

Вниз

Panel на Win API   Найти похожие ветки 

 
XProger ©   (2004-09-25 18:45) [0]

Приветствую...
Подскажите пожалуйста, как создать Panel на Win API?
И можно ли ей задать ровнение на низ родительского окна?


 
DVM ©   (2004-09-25 18:56) [1]


> Подскажите пожалуйста, как создать Panel на Win API?

Именно панели на WinApi не создать. Аналог панели в WinApi - обычное дочернее окно.

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

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


 
XProger ©   (2004-09-25 19:17) [2]

Спасибо...


 
XProger ©   (2004-09-25 22:42) [3]

Сделал, но как можно избавиться от мерцания при изменении размеров родительского окна?

И ещё вопросы:
- Почему при перемещении дочернего окна, оно иногда не перерисовывает некоторые части?
- Я создал дочернее окно с Edit"ом без readonly параметра, и не могу печатать в нём! Там даже каретка не появляется... :(


 
Apl   (2004-09-26 05:46) [4]

код покажи


 
XProger ©   (2004-09-26 14:37) [5]



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 уровня?


 
XProger ©   (2004-09-26 14:38) [6]

Ой, забыл...

// 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);


 
DVM ©   (2004-09-26 17:39) [7]


> XProger ©   (26.09.04 14:38) [6]


> or CS_OWNDC;

а это зачем?


 
XProger ©   (2004-09-26 22:15) [8]

Дык и без него та же ерунда...
Вот сама программа:
http://XProger.narod.ru/tmp/XChat.rar (8 кб)
Подвигай окошки, и заметишь, как предыдущее активное окно перестаёт перерисовываться...


 
XProger ©   (2004-09-26 22:21) [9]

Исходник: http://XProger.narod.ru/tmp/XChat_src.rar (3 кб)


 
DVM ©   (2004-09-27 11:27) [10]

Посмотри внимательно на поведение окон. Они не только друг друга пачкают. Они также пачкаются при перемещении их в низ родительского окна за его границу.
Если закрыть одно из окон, такого не происходит.
Вывод - проблема в двух одинаковых окнах.
Мне кажется нельзя просто так создавать окна указывая один и тот же класс и одну и ту же оконную процедуру.


 
XProger ©   (2004-09-27 19:50) [11]

Я пытался указывать процедуру находящуюся в классе. Но выдавалась ошибка при компиляции. При этом я создавал 2 одинаковых класса окон, что ИМХО не логично...
Можно ли после создания окна сменить его WinProc?


 
jack128 ©   (2004-09-27 21:37) [12]


> Я пытался указывать процедуру находящуюся в классе. Но
> выдавалась ошибка при компиляции.
такая процедура называется "метод". копай в сторону MakeObjectInstance


> Можно ли после создания окна сменить его WinProc?

можно. SetWindowLong + F1


 
KSergey ©   (2004-09-28 08:19) [13]

> [10] DVM ©   (27.09.04 11:27)
> Мне кажется нельзя просто так создавать окна указывая один
> и тот же класс и одну и ту же оконную процедуру.

Не надо обманывать. Все можно.


 
KSergey ©   (2004-09-28 08:41) [14]

Посмотрел - но ошибку не вижу.. Чета странное в проге творится... Наверное книжки надо вам еще читать дальше ;)


 
XProger ©   (2004-09-28 18:51) [15]

KSergey, дык, специально для "умных" я и дал ссылку на src...
На словах я тоже много чего знаю... ;)



Страницы: 1 вся ветка

Текущий архив: 2004.10.31;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.035 c
14-1097317987
Kerk
2004-10-09 14:33
2004.10.31
Аптека


4-1095959084
Mazer
2004-09-23 21:04
2004.10.31
Как узнать права пользователя в Win2000/XP?


3-1096718489
Denniro
2004-10-02 16:01
2004.10.31
Примеры работы с MS-SQL


1-1097339610
TRyaSS
2004-10-09 20:33
2004.10.31
Бинарное слияние


14-1096909424
Knight
2004-10-04 21:03
2004.10.31
Какая машина самая универсальная для российских дорог?