|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
как создать объекты на форме? (кнопку)
здраствуйте.подскажите пожалуйста,как при нажатии на кнопку,создать N кол-во кнопок (кол-во вводим в Edit1)?
у меня получаеться создать тока одну кнопку Код:
var Form1: TForm1; Button2 : Tbutton; <...> procedure TForm1.Button1Click(Sender: TObject); begin Button2 := TButton.Create(Form1); Button2.Parent := Form1; Button2.Height := 25; Button2.left:=72 ; Button2.Top:=8; Form1.ActiveControl:=Button2; end; Код:
var Form1: TForm1; Button2 : Tbutton; <...> procedure TForm1.Button1Click(Sender: TObject); var i:integer; begin for i:=1 to N do begin Button2 := TButton.Create(Form1); Button2.Parent := Form1; Button2.Height := 25; Button2.left:=20*i ;//с расположением пока не работал еще особо.это так для вида Button2.Top:=8; Form1.ActiveControl:=Button2; end; end; Последний раз редактировалось Snake22, 09.03.2011 в 00:17. Причина: подписался на тему)) |
#2
|
||||
|
||||
Нужен массив кнопок:
Код:
var MyButtons: array of TButton; Код:
procedure TForm1.Button1Click(Sender: TObject); var I: Integer; begin SetLength(MyButtons, StrToInt(Edit1.Text)); // задаёшь разиер массива (кол-во кнопок) for I := 0 to Length(MyButtons) - 1 do begin // в цикле создаёшь кнопки и сохраняешь указатели на них в массиве MyButtons[i] := TButton.Create(Form1); // здесь делаешь с созданной кнопкой что нужно MyButtons[i].Parent := Form1; // и т. д. end; end; Код:
MyButtons[0].Caption := 'My button 1'; MyButtons[1].Caption := 'My button 2'; Последний раз редактировалось ryderx34, 09.03.2011 в 02:40. |
#3
|
|||
|
|||
Спасибо! с учебы приду заценю)
|
#4
|
|||
|
|||
Или так:
Код:
var Form1: TForm1; Button2 : Tbutton; <...> procedure TForm1.Button1Click(Sender: TObject); var i:integer; begin for i:=1 to 10 do begin With Button2 do begin TButton.Create(Form1); Parent := Form1; Height := 25; left:=72 ; Top:=8; Name:='Btn'+IntToStr(i); end; end; end; Последний раз редактировалось Janom, 09.03.2011 в 17:28. |
#5
|
||||
|
||||
Цитата:
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#6
|
|||
|
|||
Можно, но тэг тоже отслеживать надо...
Я про такой вариант: Код:
var FindComp:TComponent; ... for i:=0 to form1.componentcount-1 do begin if form1.components[i].name=('Btn7') then begin FindComp:=form1.findcomponent(form.components[i].name); TButton(FindComp).Caption:='Кнопка7'; end; end; Последний раз редактировалось Janom, 09.03.2011 в 18:02. |
#7
|
||||
|
||||
Сто кнопок и сто разных действий?
В case затолкать тэг да и все дела. Ну уж если уж очень надо, можно сделать потомка от TButton с какоим-нибудь свойством. — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#8
|
|||
|
|||
Спасибо всем за советы.воспользовался первым.
еще вопрос,как этой кнопке событие сделать? |
#9
|
||||
|
||||
Создаёшь процедуру (она должно быть одним из методов, поэтому не забудь объявить её в описании TForm1):
Код:
type TForm1 = class(TForm) //. . . procedure BtnClick(Sender: TObject); Код:
procedure TForm1.BtnClick(Sender: TObject); begin // здесь нужный код end; Код:
MyButtons[i].OnClick := BtnClick; |
#10
|
|||
|
|||
ага спасибо.пока работает)
и еще вопрос уже не по теме, почему функция Delete(string,pos,pos) не удаляет из Memo1.text Код:
Delete(Memo1.text, Pos('<', Memo1.text), Pos('>', Memo1.text) - Pos('<', Memo1.text) + 1); а если вмсто Memo1.text вставить переменную типа string то работает. решил проблему тем что содержимое мема1 присвоил в s:string, и потом удалил нужную часть и обратно мему1 присвоил s. Но интересно почему напрямую с мемо.техт не работает |
#11
|
|||
|
|||
еще вопрос по созданию.как сделать чтоб компонент создавалася на заднем фоне?
т.е. вот у меня есть на форме Shape,я нажимаю на кнопку и под этим шейпом должен появиться еще один шейп,размером чуть больше этого,и должен появиться так,чтобы было видно его края,а все остальное перекрывал бы уже существующий шейп.а то уменя он поверх существующего появляется. |
#12
|
||||
|
||||
Shape2.SendToBack;
либо Shape1.BringToFront; Пишу программы за еду. __________________ |
#13
|
|||
|
|||
ага,спасибо
|
#14
|
|||
|
|||
еще загвоздка,при создании формы я создаю шейп
Код:
var Form1: TForm1; Sh,Sh1:TShape; <...> procedure TForm1.FormCreate(Sender: TObject); begin Sh:=TShape.Create(Self) ; Sh.Name:='shape1'; Sh.Top:=40; Sh.left:=60; Sh.Height:=100; Sh.Width:=100; Sh.OnMouseDown:=NewSh;//ВЫЛЕЗАЕТ ОШИБКА! Sh.Parent:=Form1; end; Код:
procedure Tform1.NewSh(Sender: TObject); begin Sh1:=TShape.Create(Self) ; Sh1.Top:=Sh.Top-2; //ЭТО НАДО ИЗМЕНИТЬ Sh1.left:=Sh.left-2; //И ЭТО Sh1.Height:=104; Sh1.Width:=104; Sh1.Brush.color:=clred; Sh1.Parent:=Form1; Sh1.SendToBack; end; во вторых, при вызове процедуры NewSh у создаваемого шейпа, left и Тор должы браться не из Sh а из того компонента,на котором мышка нажималась(процедуру Newsh планирую запускать из нескольких мест,но это всё доработаю..) это както через sender.tobject надо делать. для начала вот эти два вопроса,помогите пожалуйста |
#15
|
|||
|
|||
1. Метод не совсем подходит... поменяй заголовок процедуры на:
Код:
procedure TForm1.NewSh(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin ... end; там на чем кликаешь: MySender:=Sender; А в NewSh пиши Код:
Sh1.left:=TShape(MySender).left-2 |