Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   создание форм в Delphi (http://forum.oszone.net/showthread.php?t=68174)

Surround 06-07-2006 14:18 458508

создание форм в Delphi
 
Подскажите, как создать форму по классу? То есть не делая ее предварительно, а непосредственно в ходе выполнения программы создать, разместить на ней компоненты и показать новое окошко.

DillerInc 06-07-2006 14:45 458518

Surround
Ну,в принципе можно в коде настроить необходимые свойства будущего окна,а потом показать его с помощью метода Show.
А CreateWindowEx не подойдёт??

programmist72 07-07-2006 08:26 458762

Вообще-то форма создаётся так:

Код:

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 458782

programmist72
а как тогда еще разместить на форме всякие Label'ы и прочее?

DillerInc 07-07-2006 12:41 458870

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 458873

Тем же самым способом: создание экземпляра объекта требуемого класса, задание его параметров и показ на форме. С лейблом это будет выглядеть примерно так (пример исходного кода):

Код:

var lbl:TLabel;
begin
 lbl:=TLabel.Create(self);
lbl.Parent:=Form1;
lbl.Top:=50;
lbl.left:=50;
lbl.Caption:='Надпись на метке';
lbl.Show;
end;


Surround 07-07-2006 12:50 458876

Спасибо большое!


Время: 01:35.

Время: 01:35.
© OSzone.net 2001-