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

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

Аналог 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)


Наверх

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