Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.10.31;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.10.31;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.038 c
1-1097832637
TeNY
2004-10-15 13:30
2004.10.31
Как определить равенсво двух обьектов тип Tpicture?


1-1098102176
MikePol
2004-10-18 16:22
2004.10.31
Возвращаемое значение


14-1097372238
Думкин
2004-10-10 05:37
2004.10.31
С днем рождения! 10 октября


10-1054713801
OlegL
2003-06-04 12:03
2004.10.31
Методы COM object-а


1-1097604812
DSP
2004-10-12 22:13
2004.10.31
Системное время





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский