![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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
|
||||
|
||||
|
Цитата:
|
|
#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 с какоим-нибудь свойством. |
|
#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 |