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

Вниз

Аналог TPanel   Найти похожие ветки 

 
Beduir   (2006-01-10 05:27) [0]

Скажите как создать окно, аналог TPanel в VCL, чтобы можно было размещать в нем другие окна (кнопки и т.п.) и скрывать/показывать его?
Спасибо.


 
DVM ©   (2006-01-10 10:29) [1]

CreateWindow(Ex)


 
Lamer@fools.ua ©   (2006-01-10 10:40) [2]

>>Beduir   (10.01.06 05:27)

Посмотрите в исходниках VCL, какой класс окна используется для TPanel.


 
Zoidberg ©   (2006-01-10 17:02) [3]

DVM
Одним местом чуял, что нужно использовать CreateWindowю. :) Только немного непонятно как в данном случае.
А можно пример?
Lamer@fools.ua
Как я понимаю, TPanel это чисто дельфийский компонент, в Windows стандартного такого нет. Следовательно и класса нет. Хотя может я чего и не так понимаю...


 
FrykT ©   (2006-01-10 17:02) [4]

Что значит аналог? какие функции нужно, чтобы выполняло? и для чего аналог???   /* сделал  глаза по пять коп */


 
Zoidberg ©   (2006-01-10 17:06) [5]

Функции: содержало в себе другие контролы, которые можно разом скрыть / отобразить, скрыв эту панель. В общем таких панелей планируется несколько, что-то типа мастера, по кнопке далее, скрывается первая панель, отображается вторая и т.д.
p.s. Beduir - это тоже я, только не из дома писал.


 
ANB ©   (2006-01-10 17:28) [6]


> Zoidberg ©   (10.01.06 17:06) [5]

Любое окно можно сделать парентовым для любого другого окна (в т.ч. и контролла). В TPanel добавлена отрисовка и некоторые другие полезные вещи.


 
VirEx ©   (2006-01-10 17:43) [7]


>  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);
(только после этого нужно отлавливать сообщения кнопки в клавной форме, хотя можно сделать свою процедуру обработки сообщений именно для данной кнопки)


 
VirEx ©   (2006-01-10 18:01) [8]

а ну если в VCL, то Handle нужно заменить на Form1.Handle


 
Чародей ©   (2006-01-10 18:03) [9]

А Frame не устраивает?


 
Zoidberg ©   (2006-01-10 19:35) [10]

VirEx
Спасибо, попробую.

> Чародей ©   (10.01.06 18:03) [9]
> А Frame не устраивает?
Frame - это какой? Который в VCL?


 
Чародей ©   (2006-01-10 22:49) [11]


> Frame - это какой? Который в VCL?

Да на первой странице (Standard).


 
Beduir   (2006-01-11 08:30) [12]

Чародей
Я так и подумал. Но я не использую VCL. Если бы использовал, то я бы просто и взял TPanel.



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

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

Наверх




Память: 0.49 MB
Время: 0.049 c
15-1141848625
LordOfRock
2006-03-08 23:10
2006.04.02
Dr. Web лезет в инет


6-1135025373
Eraser
2005-12-19 23:49
2006.04.02
Скорость работы TIdFTP.MakeDir


2-1142599416
Fenix
2006-03-17 15:43
2006.04.02
Ошибка invalid pointer operation


9-1127210142
Signate
2005-09-20 13:55
2006.04.02
Рисование массивами - текстурные координаты


2-1142767748
Wood
2006-03-19 14:29
2006.04.02
О переменной окружения.