Динамическое создание форм

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Tok
Обычный пользователь
Обычный пользователь
 
Сообщения: 51
Зарегистрирован: 28.09.2003 (Вс) 16:14
Откуда: Алчевск (Украина)

Динамическое создание форм

Сообщение Tok » 11.07.2004 (Вс) 5:34

Возможно ли в VB динамически создавать и использовать формы (а также контролы на формах.)? Т.е. не создавать их в проекте, а кодом в рантайме... :)
Back from the dead
I am resurrected
to spew, putrefaction...
http://gutted.nm.ru

GM
programador
programador
 
Сообщения: 1427
Зарегистрирован: 24.06.2003 (Вт) 15:56
Откуда: 194.67.52.100

Сообщение GM » 11.07.2004 (Вс) 6:25

Можна, есть вроде два способа. Можна юзать что типа:
Код: Выделить всё
dim a as frmmain
load frmmain
frmmain.show

или через CreateWindow
Код: Выделить всё
Const WS_EX_STATICEDGE = &H20000
Const WS_EX_TRANSPARENT = &H20&
Const WS_CHILD = &H40000000
Const CW_USEDEFAULT = &H80000000
Const SW_NORMAL = 1
Private Type CREATESTRUCT
    lpCreateParams As Long
    hInstance As Long
    hMenu As Long
    hWndParent As Long
    cy As Long
    cx As Long
    y As Long
    x As Long
    style As Long
    lpszName As String
    lpszClass As String
    ExStyle As Long
End Type
Private Declare Function CreateWindowEx Lib "user32" Alias "CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, lpParam As Any) As Long
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Private Declare Function DestroyWindow Lib "user32" (ByVal hwnd As Long) As Long
Dim mWnd As Long
Private Sub Form_Load()
    'KPD-Team 1999
    'URL: http://www.allapi.net/
    'E-Mail: KPDTeam@Allapi.net
    Dim CS As CREATESTRUCT
    'Create a new label
    mWnd = CreateWindowEx(WS_EX_STATICEDGE Or WS_EX_TRANSPARENT, "STATIC", "Hello World !", WS_CHILD, 0, 0, 300, 50, Me.hwnd, 0, App.hInstance, CS)
    Me.Caption = mWnd
    'Show our label
    ShowWindow mWnd, SW_NORMAL
End Sub
Private Sub Form_Unload(Cancel As Integer)
    'destroy our label
    DestroyWindow mWnd
End Sub
الفيجوال بيسك الرابح

Tok
Обычный пользователь
Обычный пользователь
 
Сообщения: 51
Зарегистрирован: 28.09.2003 (Вс) 16:14
Откуда: Алчевск (Украина)

Сообщение Tok » 13.07.2004 (Вт) 3:19

А как юзать данный API? В данном, примере при запуске, на моей (вручную созданой) форме появляеться надпись "Hello World !". То-ли эта надпись появляется уже на новой форме, просто форма неразлечима на фоне основной?..
Вообщем как бы так сделать чтобы новая форма была "полноценной": с заголовком и границами, определенного размера, положения на экране, цвета и т.д?..
Back from the dead
I am resurrected
to spew, putrefaction...
http://gutted.nm.ru

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 13.07.2004 (Вт) 7:47

Вообще-то API тут даром не нужно. Форму можно создать просто:

Код: Выделить всё
Dim f as New Form
f.Show


Но так как тип бордюра у формы в рантайме менять нельзя то лучше, видимо, заранее создать заготовку формы нужного типа и на основе ее создавать новую форму.

Ну а контролы просто добавляются в коллекцию Controls формы. См Help на ее метод Add.

В общем все достаточно просто.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Tok
Обычный пользователь
Обычный пользователь
 
Сообщения: 51
Зарегистрирован: 28.09.2003 (Вс) 16:14
Откуда: Алчевск (Украина)

Сообщение Tok » 14.07.2004 (Ср) 1:01

Хорошо, попробуем...
Back from the dead
I am resurrected
to spew, putrefaction...
http://gutted.nm.ru

Eduard
Бывалый
Бывалый
 
Сообщения: 254
Зарегистрирован: 31.08.2003 (Вс) 17:12
Откуда: Эстония

Сообщение Eduard » 18.07.2004 (Вс) 16:49

Andrey Fedorov писал(а):Но так как тип бордюра у формы в рантайме менять нельзя

Как нельзя менять - неправда все можно! Вот целых два исходника, меняют стиль формы в рантайм режиме!


http://vbstreets.ru/VB/Sources/65818.aspx

http://vbstreets.ru/VB/Sources/65803.aspx


Andrey Fedorov писал(а):В общем все достаточно просто.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 19.07.2004 (Пн) 8:18

Как нельзя менять - неправда все можно!


Ну может можно - давно не пробовал просто - спортить не буду...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot и гости: 9

    TopList