![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Динамическое создание компонентов... [D7, 95/98, ME, NT4, 2000, XP, 2003]
apic © (2006-08-15 17:18:00)Привет мастерам!!! Тут у меня появилась мысль... Хочу программно добавить на форму кнопку и присвоить ей процедуру обработки на нажатие. Возможно ли это, и если да, то как?
И еще хочу программно копировать вкладку TTabSheet, как это телают многостраничные текстовые редакторы.
Заранее благодарен.
Плохиш (2006-08-25 15:16:00) [1]
> Ega23 © (15.08.06 18:15) [5]
> С содержимым - употеешь делать.
Что бы программисты не потели, папа - Борланд фреймы придумал ;-)
XYZ (2006-08-25 15:11:00) [2]
> program bitbtn;
> uses windows, messages;
>
> const Btn0=10; //это список констант, через которые присходит
> идентификация кнопки, пославшей сообщение
> Btn1=11; //константы можно и не использовать- это
> лишь улучшает читабельность программы
> Btn2=12;
> Btn3=13;
> Btn4=14;
> Btn5=15;
>
> var wc : TWndClassEx;
> wndMain : HWND;
> Mesg : TMsg;
> btns : array[0..6] of HWND;
> icon : HICON;
> function WindowProc(wnd:HWND; Msg : Integer; Wparam:Wparam;
> Lparam:Lparam):Lresult; stdcall;
> Begin
> case msg of
> wm_destroy :
> Begin
> postquitmessage(0); exit;
> Result:=0;
> End;
> wm_command://обрабытываем сообщения от кнопок
> Begin
> case loWord(wParam) of
> Btn0 : messageBox(wnd,'IDI_APPLICATION','Имя константы',
> mb_ok);
> Btn1 : messageBox(wnd,'IDI_EXCLAMATION','Имя константы',
> mb_ok);
> Btn2 : messageBox(wnd,'IDI_ASTERISK','Имя константы',
> mb_ok);
> Btn3 : messageBox(wnd,'IDI_HAND','Имя константы',mb_ok);
>
> Btn4 : messageBox(wnd,'IDI_WINLOGO','Имя константы',mb_ok);
>
> Btn5 : messageBox(wnd,'IDI_QUESTION','Имя константы',
> mb_ok);
> end;
>
> End;
> else Result:=DefWindowProc(wnd,msg,wparam,lparam);
> end;
>
> End;
>
> var xPos,yPos,nWidth,nHeight : Integer;
>
> begin
> wc.cbSize:=sizeof(wc);
> wc.style:=CS_HREDRAW or CS_VREDRAW;
> wc.lpfnWndProc:=@WindowProc;
> wc.cbClsExtra:=0;
> wc.cbWndExtra:=0;
> wc.hInstance:=HInstance;
> wc.hIcon:=LoadIcon(0,IDI_APPLICATION);
> wc.hCursor:=LoadCursor(0,IDC_ARROW);
> wc.hbrBackground:=COLOR_BTNFACE+1;
> wc.lpszMenuName:=nil;
> wc.lpszClassName:='Bit Buttons';
>
> RegisterClassEx(wc);
>
> xPos:=100;
> yPos:=150;
> nWidth:=320;
> nHeight:=150;
>
> wndMain:=CreateWindowEx(0,'Bit Buttons',
> 'Bitmap Buttons',
> WS_OVERLAPPED or WS_SYSMENU,
> xPos,yPos,nWidth,nHeight,0,0,
> Hinstance,nil);
> //создаем 6 кнопок
> btns[0]:=CreateWindowEx(WS_EX_STATICEDGE,'button',nil,BS_ICON
> or WS_VISIBLE or WS_CHILD,10,10,40,40,wndMain,Btn0,hInstance,
> nil);
> btns[1]:=CreateWindowEx(WS_EX_STATICEDGE,'button',nil,BS_ICON
> or WS_VISIBLE or WS_CHILD,60,10,40,40,wndMain,Btn1,hInstance,
> nil);
> btns[2]:=CreateWindowEx(WS_EX_STATICEDGE,'button',nil,BS_ICON
> or WS_VISIBLE or ws_child,110,10,40,40,wndMain,Btn2,hInstance,
> nil);
> btns[3]:=CreateWindowEx(WS_EX_STATICEDGE,'button',nil,BS_ICON
> or WS_VISIBLE or WS_CHILD,160,10,40,40,wndMain,Btn3,hInstance,
> nil);
> btns[4]:=CreateWindowEx(WS_EX_STATICEDGE,'button',nil,BS_ICON
> or WS_VISIBLE or WS_CHILD,210,10,40,40,wndMain,Btn4,hInstance,
> nil);
> btns[5]:=CreateWindowEx(WS_EX_STATICEDGE,'button',nil,BS_ICON
> or WS_VISIBLE or WS_CHILD,260,10,40,40,wndMain,Btn5,hInstance,
> nil);
>
> Icon:=LoadIcon(0,IDI_APPLICATION);//получаем описатель одной
> из стандартных пиктограмм
> sendMessage(btns[0],bm_setimage,2,icon);//вставляем пиктограмму
> в кнопку
>
> icon:=LoadIcon(0,IDI_EXCLAMATION);
> sendMessage(btns[1],bm_setimage,2,icon);
>
> icon:=LoadIcon(0,IDI_ASTERISK);
>
> sendMessage(btns[2],BM_SETIMAGE,2,icon);
>
> icon:=LoadIcon(0,IDI_HAND);
> sendMessage(btns[3],BM_SETIMAGE,2,icon);
>
> icon:=LoadIcon(0,IDI_WINLOGO);
> sendMessage(btns[4],BM_SETIMAGE,2,icon);
>
> icon:=LoadIcon(0,IDI_QUESTION);
> sendMessage(btns[5],BM_SETIMAGE,2,icon);
>
> ShowWindow(wndMain,CmdShow);
>
> While GetMessage(Mesg,0,0,0) do
> begin
> TranslateMessage(Mesg);
> DispatchMessage(Mesg);
> end;
>
> end.
________________________________________________________________________________ ______________________ Чушь всё это_______________
____________________________________________________________________
Anatoly Podgoretsky (2006-08-20 11:51:00) [3]Мяукнул и скончался.
Loginov Dmitry (2006-08-20 09:39:00) [4]> Все хорошо, только формы нет.
и компонентов
Германн (2006-08-20 00:21:00) [5]
> Anatoly Podgoretsky © (19.08.06 23:27) [11]
>
> ffo © (19.08.06 21:49) [10]
> Все хорошо, только формы нет.
Зато сразу 6 в 1! :-)
Anatoly Podgoretsky (2006-08-19 23:27:00) [6]ffo © (19.08.06 21:49) [10]
Все хорошо, только формы нет.
ffo (2006-08-19 21:49:00) [7]
> Привет мастерам!!! Тут у меня появилась мысль... Хочу программно
> добавить на форму кнопку
Вот пример создания...без VCL
program bitbtn;
uses windows, messages;
const Btn0=10; //это список констант, через которые присходит идентификация кнопки, пославшей сообщение
Btn1=11; //константы можно и не использовать- это лишь улучшает читабельность программы
Btn2=12;
Btn3=13;
Btn4=14;
Btn5=15;
var wc : TWndClassEx;
wndMain : HWND;
Mesg : TMsg;
btns : array[0..6] of HWND;
icon : HICON;
function WindowProc(wnd:HWND; Msg : Integer; Wparam:Wparam; Lparam:Lparam):Lresult; stdcall;
Begin
case msg of
wm_destroy :
Begin
postquitmessage(0); exit;
Result:=0;
End;
wm_command://обрабытываем сообщения от кнопок
Begin
case loWord(wParam) of
Btn0 : messageBox(wnd,'IDI_APPLICATION','Имя константы',mb_ok);
Btn1 : messageBox(wnd,'IDI_EXCLAMATION','Имя константы',mb_ok);
Btn2 : messageBox(wnd,'IDI_ASTERISK','Имя константы',mb_ok);
Btn3 : messageBox(wnd,'IDI_HAND','Имя константы',mb_ok);
Btn4 : messageBox(wnd,'IDI_WINLOGO','Имя константы',mb_ok);
Btn5 : messageBox(wnd,'IDI_QUESTION','Имя константы',mb_ok);
end;
End;
else Result:=DefWindowProc(wnd,msg,wparam,lparam);
end;
End;
var xPos,yPos,nWidth,nHeight : Integer;
begin
wc.cbSize:=sizeof(wc);
wc.style:=CS_HREDRAW or CS_VREDRAW;
wc.lpfnWndProc:=@WindowProc;
wc.cbClsExtra:=0;
wc.cbWndExtra:=0;
wc.hInstance:=HInstance;
wc.hIcon:=LoadIcon(0,IDI_APPLICATION);
wc.hCursor:=LoadCursor(0,IDC_ARROW);
wc.hbrBackground:=COLOR_BTNFACE+1;
wc.lpszMenuName:=nil;
wc.lpszClassName:='Bit Buttons';
RegisterClassEx(wc);
xPos:=100;
yPos:=150;
nWidth:=320;
nHeight:=150;
wndMain:=CreateWindowEx(0,'Bit Buttons',
'Bitmap Buttons',
WS_OVERLAPPED or WS_SYSMENU,
xPos,yPos,nWidth,nHeight,0,0,
Hinstance,nil);
//создаем 6 кнопок
btns[0]:=CreateWindowEx(WS_EX_STATICEDGE,'button',nil,BS_ICON or WS_VISIBLE or WS_CHILD,10,10,40,40,wndMain,Btn0,hInstance,nil);
btns[1]:=CreateWindowEx(WS_EX_STATICEDGE,'button',nil,BS_ICON or WS_VISIBLE or WS_CHILD,60,10,40,40,wndMain,Btn1,hInstance,nil);
btns[2]:=CreateWindowEx(WS_EX_STATICEDGE,'button',nil,BS_ICON or WS_VISIBLE or ws_child,110,10,40,40,wndMain,Btn2,hInstance,nil);
btns[3]:=CreateWindowEx(WS_EX_STATICEDGE,'button',nil,BS_ICON or WS_VISIBLE or WS_CHILD,160,10,40,40,wndMain,Btn3,hInstance,nil);
btns[4]:=CreateWindowEx(WS_EX_STATICEDGE,'button',nil,BS_ICON or WS_VISIBLE or WS_CHILD,210,10,40,40,wndMain,Btn4,hInstance,nil);
btns[5]:=CreateWindowEx(WS_EX_STATICEDGE,'button',nil,BS_ICON or WS_VISIBLE or WS_CHILD,260,10,40,40,wndMain,Btn5,hInstance,nil);
Icon:=LoadIcon(0,IDI_APPLICATION);//получаем описатель одной из стандартных пиктограмм
sendMessage(btns[0],bm_setimage,2,icon);//вставляем пиктограмму в кнопку
icon:=LoadIcon(0,IDI_EXCLAMATION);
sendMessage(btns[1],bm_setimage,2,icon);
icon:=LoadIcon(0,IDI_ASTERISK);
sendMessage(btns[2],BM_SETIMAGE,2,icon);
icon:=LoadIcon(0,IDI_HAND);
sendMessage(btns[3],BM_SETIMAGE,2,icon);
icon:=LoadIcon(0,IDI_WINLOGO);
sendMessage(btns[4],BM_SETIMAGE,2,icon);
icon:=LoadIcon(0,IDI_QUESTION);
sendMessage(btns[5],BM_SETIMAGE,2,icon);
ShowWindow(wndMain,CmdShow);
While GetMessage(Mesg,0,0,0) do
begin
TranslateMessage(Mesg);
DispatchMessage(Mesg);
end;
end.
apic (2006-08-18 17:31:00) [8]сэнкс....(то бишь спасибо)
Loginov Dmitry (2006-08-18 07:46:00) [9]Что-нить в духе:
PageControl.ActivePage.Free
apic (2006-08-18 07:34:00) [10]Блин, а как удалить созданную вкладку...
apic (2006-08-15 18:18:00) [11]Огромное спасибо!!!
Ega23 (2006-08-15 18:15:00) [12]С содержимым - употеешь делать.
А так -
With TTabSheet.Create(PageControl1) do
begin
PageControl:=PageControl1;
Caption:='Новая вкладка';
end;
apic (2006-08-15 18:05:00) [13]Желательно и так и так, но с содержимым важнее!!!
Ega23 (2006-08-15 17:56:00) [14]Тебе как её копировать? Со всем содержимым? Или просто новую вкладку создать?
apic (2006-08-15 17:38:00) [15]Спасибо, а как быть с TTabSheet?!!
clickmaker (2006-08-15 17:21:00) [16]
> Тут у меня появилась мысль... Хочу программно добавить на
> форму кнопку и присвоить ей процедуру обработки на нажатие
свежая мысль )
Btn := TButton.Create(Self);
Btn.Parent := Self;
Btn.Left :=
Btn.Top :=
Btn.OnClick := ButtonClick;
...
procedure TForm1.ButtonClick(Sender: TObject);
begin
end;