![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Аналог TPanel [D7, WinXP]
Beduir © (2006-01-10 05:27:00)Скажите как создать окно, аналог TPanel в VCL, чтобы можно было размещать в нем другие окна (кнопки и т.п.) и скрывать/показывать его?
Спасибо.
Beduir (2006-01-11 08:30:00) [1]Чародей
Я так и подумал. Но я не использую VCL. Если бы использовал, то я бы просто и взял TPanel.
Чародей (2006-01-10 22:49:00) [2]
> Frame - это какой? Который в VCL?
Да на первой странице (Standard).
Zoidberg (2006-01-10 19:35:00) [3]VirEx
Спасибо, попробую.
> Чародей © (10.01.06 18:03) [9]
> А Frame не устраивает?
Frame - это какой? Который в VCL?
Чародей (2006-01-10 18:03:00) [4]А Frame не устраивает?
VirEx (2006-01-10 18:01:00) [5]а ну если в VCL, то Handle нужно заменить на Form1.Handle
VirEx (2006-01-10 17:43:00) [6]
> Beduir (10.01.06 05:27)
> Скажите как создать окно, аналог TPanel в VCL, чтобы можно
> было размещать в нем другие окна (кнопки и т.п.) и скрывать/показывать
> его?
> Спасибо.
WindowClass.style:=CS_HRedraw or CS_VRedraw;
WindowClass.Lpfnwndproc:=@windowproc;
WindowClass.Hinstance:=Instance;
WindowClass.HbrBackground:= color_btnface;
WindowClass.LpszClassName:='DX';
WindowClass.Hcursor:=LoadCursor(0,IDC_ARROW);
RegisterClass(WindowClass);
Handle:=CreateWindowEx (0,'DX','',WS_POPUP or WS_CHILD, 5,5, GetSystemMetrics (SM_CXSCREEN)-200, GetSystemMetrics (SM_CYSCREEN)-200, OwnerWND{хэндл главного окна},0,instance, nil);
или
Handle:=CreateWindowEx (0,'DX','',WS_POPUP, 5,5, GetSystemMetrics (SM_CXSCREEN)-200, GetSystemMetrics (SM_CYSCREEN)-200,0,0,instance, nil);
SetWindowLong(Handle,GWL_STYLE ,GetWindowLong(Handle,GWL_STYLE) or WS_CHILD);
setparent(Handle, OwnerWND);
а затем если хочешь встроить к примеру кнопку из VCL:
var
b:TButton;
begin
b:=TButton.Create(nil);
b.Caption:='OK';
b.Show;
b.ParentWindow:= Handle//"прицепляем" к нашей панели
либо:
btnOk := CreateWindow('BUTTON', PChar('OK'),
BS_PUSHBUTTON or WS_CHILD or WS_VISIBLE or BS_DEFPUSHBUTTON,
270, 65, 75, 25, Handle, BTN_APPLY_ID, instance, nil);
(только после этого нужно отлавливать сообщения кнопки в клавной форме, хотя можно сделать свою процедуру обработки сообщений именно для данной кнопки)
ANB (2006-01-10 17:28:00) [7]
> Zoidberg © (10.01.06 17:06) [5]
Любое окно можно сделать парентовым для любого другого окна (в т.ч. и контролла). В TPanel добавлена отрисовка и некоторые другие полезные вещи.
Zoidberg (2006-01-10 17:06:00) [8]Функции: содержало в себе другие контролы, которые можно разом скрыть / отобразить, скрыв эту панель. В общем таких панелей планируется несколько, что-то типа мастера, по кнопке далее, скрывается первая панель, отображается вторая и т.д.
p.s. Beduir - это тоже я, только не из дома писал.
Zoidberg (2006-01-10 17:02:00) [9]DVM
Одним местом чуял, что нужно использовать CreateWindowю. :) Только немного непонятно как в данном случае.
А можно пример?
Lamer@fools.ua
Как я понимаю, TPanel это чисто дельфийский компонент, в Windows стандартного такого нет. Следовательно и класса нет. Хотя может я чего и не так понимаю...
FrykT (2006-01-10 17:02:00) [10]Что значит аналог? какие функции нужно, чтобы выполняло? и для чего аналог??? /* сделал глаза по пять коп */
Lamer@fools.ua (2006-01-10 10:40:00) [11]>> Beduir (10.01.06 05:27)
Посмотрите в исходниках VCL, какой класс окна используется для TPanel.
DVM (2006-01-10 10:29:00) [12]CreateWindow(Ex)