Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.09.17;
Скачать: CL | DM;

Вниз

Динамическое создание компонентов...   Найти похожие ветки 

 
apic ©   (2006-08-15 17:18) [0]

Привет мастерам!!! Тут у меня появилась мысль... Хочу программно добавить на форму кнопку и присвоить ей процедуру обработки на нажатие. Возможно ли это, и если да, то как?
И еще хочу программно копировать вкладку TTabSheet, как это телают многостраничные текстовые редакторы.
Заранее благодарен.


 
clickmaker ©   (2006-08-15 17:21) [1]


> Тут у меня появилась мысль... Хочу программно добавить на
> форму кнопку и присвоить ей процедуру обработки на нажатие

свежая мысль )
Btn := TButton.Create(Self);
Btn.Parent := Self;
Btn.Left :=
Btn.Top :=
Btn.OnClick := ButtonClick;
...

procedure TForm1.ButtonClick(Sender: TObject);
begin
 
end;


 
apic ©   (2006-08-15 17:38) [2]

Спасибо, а как быть с TTabSheet?!!


 
Ega23 ©   (2006-08-15 17:56) [3]

Тебе как её копировать? Со всем содержимым? Или просто новую вкладку создать?


 
apic ©   (2006-08-15 18:05) [4]

Желательно и так и так, но с содержимым важнее!!!


 
Ega23 ©   (2006-08-15 18:15) [5]

С содержимым - употеешь делать.
А так -
With TTabSheet.Create(PageControl1) do
begin
 PageControl:=PageControl1;
 Caption:="Новая вкладка";
end;


 
apic ©   (2006-08-15 18:18) [6]

Огромное спасибо!!!


 
apic ©   (2006-08-18 07:34) [7]

Блин, а как удалить созданную вкладку...


 
Loginov Dmitry ©   (2006-08-18 07:46) [8]

Что-нить в духе:

PageControl.ActivePage.Free


 
apic ©   (2006-08-18 17:31) [9]

сэнкс....(то бишь спасибо)


 
ffo ©   (2006-08-19 21:49) [10]


> Привет мастерам!!! Тут у меня появилась мысль... Хочу программно
> добавить на форму кнопку


Вот пример создания...без 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.


 
Anatoly Podgoretsky ©   (2006-08-19 23:27) [11]

ffo ©   (19.08.06 21:49) [10]
Все хорошо, только формы нет.


 
Германн ©   (2006-08-20 00:21) [12]


> Anatoly Podgoretsky ©   (19.08.06 23:27) [11]
>
> ffo ©   (19.08.06 21:49) [10]
> Все хорошо, только формы нет.

Зато сразу 6 в 1! :-)


 
Loginov Dmitry ©   (2006-08-20 09:39) [13]

> Все хорошо, только формы нет.


и компонентов


 
Anatoly Podgoretsky ©   (2006-08-20 11:51) [14]

Мяукнул и скончался.


 
XYZ ©   (2006-08-25 15:11) [15]


> 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.


________________________________________________________________________________ ______________________Чушь всё это_______________
____________________________________________________________________


 
Плохиш ©   (2006-08-25 15:16) [16]


> Ega23 ©   (15.08.06 18:15) [5]
> С содержимым - употеешь делать.

Что бы программисты не потели, папа - Борланд фреймы придумал ;-)



Страницы: 1 вся ветка

Текущий архив: 2006.09.17;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.033 c
3-1153197441
Layner
2006-07-18 08:37
2006.09.17
Как отловить сообщения о ходе выполнения ХП (на MSSQL)


2-1156719425
GoodMan
2006-08-28 02:57
2006.09.17
Как достать файл из памяти


2-1156451800
<X>
2006-08-25 00:36
2006.09.17
Организация поиска


15-1156369134
ronyn
2006-08-24 01:38
2006.09.17
Почему в орешнике нет аффтарства?


2-1155816839
.ruslan
2006-08-17 16:13
2006.09.17
DBGridEh и нереальное но...