Surround
06-07-2006, 14:18
Подскажите, как создать форму по классу? То есть не делая ее предварительно, а непосредственно в ходе выполнения программы создать, разместить на ней компоненты и показать новое окошко.
DillerInc
06-07-2006, 14:45
Surround
Ну,в принципе можно в коде настроить необходимые свойства будущего окна,а потом показать его с помощью метода Show.
А CreateWindowEx (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/windows/windowreference/windowfunctions/createwindowex.asp) не подойдёт??
programmist72
07-07-2006, 08:26
Вообще-то форма создаётся так:
var F:TForm;
begin
F:=TForm.Create(self);
F.Parent:= //родитель формы;
F.Top:= //координата 1
F.Left:= //координата 2;
F.Show;// - показ формы
end;
Surround
07-07-2006, 09:38
programmist72
а как тогда еще разместить на форме всякие Label'ы и прочее?
DillerInc
07-07-2006, 12:41
Surround
Вот код на Delphi только без использования VCL:
var
Instance : Cardinal;
Handle : HWND;
hbtnOpen : HWND;
hbtnRun : HWND;
hStatic : HWND;
hMemo : HWND;
hLabel : HWND;
WindowClass : TWndClass;
begin
Instance := GetModuleHandle(nil);
{ Заполняем структуру WindowClass класса TWndClass }
WindowClass.style := CS_HREDRAW or CS_VREDRAW;
WindowClass.lpfnWndProc := @WindowProc;
WindowClass.hInstance := Instance;
WindowClass.hIcon := LoadIcon(0, IDI_APPLICATION);
WindowClass.hCursor := LoadCursor(0, IDC_ARROW);
WindowClass.hbrBackground := COLOR_BACKGROUND;
WindowClass.lpszClassName := 'Example';
// Регистрируем класс окна
RegisterClass(WindowClass);
// Создаём окно
Handle := CreateWindow('Example', 'Пример создания окна без VCL',
WS_CAPTION or WS_SYSMENU or WS_MINIMIZEBOX,
350, 300, 400, 250, 0, 0, Instance, NIL);
// Показываем окно
ShowWindow(Handle, SW_SHOW);
UpdateWindow(Handle);
// Создаём кнопку
hbtnOpen := CreateWindow('BUTTON', 'Open',
WS_VISIBLE or WS_CHILD or BS_DEFPUSHBUTTON,
15, 185, 60, 25, Handle, 0, 0, NIL);
// Ещё кнопка
hbtnRun := CreateWindow('BUTTON', 'Run',
WS_VISIBLE or WS_CHILD or BS_PUSHBUTTON,
100, 185, 60, 25, Handle, 0, 0, NIL);
// Типа дельфийский Memo
hMemo := CreateWindowEx(WS_EX_OVERLAPPEDWINDOW, 'EDIT', '',
WS_VISIBLE or WS_CHILD or WS_VSCROLL or ES_LEFT or
ES_MULTILINE or ES_READONLY or ES_AUTOVSCROLL,
10, 45, 350, 130, Handle, 0, 0, NIL);
// Типа дельфийский label
hLabel := CreateWindow('STATIC', 'Это компонент Label',
WS_VISIBLE or WS_CHILD or SS_RIGHT or SS_SIMPLE,
240, 200, 150, 20, Handle, 0, 0, nil);
end;
programmist72
07-07-2006, 12:43
Тем же самым способом: создание экземпляра объекта требуемого класса, задание его параметров и показ на форме. С лейблом это будет выглядеть примерно так (пример исходного кода):
var lbl:TLabel;
begin
lbl:=TLabel.Create(self);
lbl.Parent:=Form1;
lbl.Top:=50;
lbl.left:=50;
lbl.Caption:='Надпись на метке';
lbl.Show;
end;
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.