Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.09.17;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.043 c
2-1156403821
moor38
2006-08-24 11:17
2006.09.17
Как зная координаты ячейки в StringGrid узнать цвет ячейки?


15-1156369077
jack128
2006-08-24 01:37
2006.09.17
Планеты Плутон больше нет...


2-1157042328
Sele
2006-08-31 20:38
2006.09.17
запуск с параметром


6-1146238121
NORDmen
2006-04-28 19:28
2006.09.17
winsock - recv


15-1156279785
Ketmar
2006-08-23 00:49
2006.09.17
узнать keyboard layout консоли другого процесса.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский