![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Условие:
На форме располагаются куча кнопок "матрицей" Задача: Переименовывать их одной командой (лень писать button1.caption......button126.caption.) Можно ли как-то это загнать в цикл? Вообще, можно ли работать с индексом объекта? Мне бы хотелось с ними работать как с матрицей, т.е создать вспомогательную матрицу 6х21 и каждой ячейке придать индекс кнопки, а потом используя этот индекс их переименовывать, перекрашивать, нажимать-отжимать итп. Это упростило бы задачу очень сильно.. Помогите кто чем может. |
|
#2
|
||||
|
||||
|
Изучаем свойство Tag компонентов + ComponentCount.
|
|
#3
|
|||
|
|||
|
Цитата:
Вообще-то, для этого лучше кнопки создавать динамически. Код:
var // или в классе
ButtonMatrix : Array [1..6,1..21] Of TButton;
procedure TForm1.FormCreate(Sender : TObject);
var
I, J : Integer;
begin
For I := 1 To 6 Do
For J := 1 To 21 Do
Begin
ButtonMatrix[I,J] := TButton.Create(Self);
ButtonMatrix[I,J].Top := (I-1) * 24;
ButtonMatrix[I,J].Left := (J-1) * 32;
ButtonMatrix[I,J].Width := 28;
ButtonMatrix[I,J].Height :=16;
ButtonMatrix[I,J].Caption := Format('%d %d',[I,J]);
ButtonMatrix[I,J].Tag := I*1000 + J; // Комбинированный идентификатор
ButtonMatrix[I,J].OnClick := MyClick;
End;
end;
procedure TForm1.MyClick(Sender : TObject);
var
I, J : Integer;
begin
If (Sender Is TButton) Then
If (Sender As TButton).Tag > 0 Then
Begin
I := (Sender As TButton).Tag div 1000;
J := (Sender As TButton).Tag mod 1000;
ButtonMatrix[I,J].Caption := Format('%d %d *',[I,J]);
End;
end;При нажатии кнопки в ее заголовок добавляется '*'. |
|
#4
|
||||
|
||||
|
Код:
var
i: Integer;
b: TButton;
begin
for i:=1 to 10 do
begin
b:=TButton(FindComponent('Button'+IntToStr(i)));
b.Caption:=IntToStr(i);
end;
end; |
| Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
tigra-nsk (02.09.2012)
| ||
|
#5
|
||||
|
||||
|
подстать матрицы:
Код:
type
TForm1 = class(TForm)
Button11: TButton;
Button12: TButton;
Button13: TButton;
Button21: TButton;
Button22: TButton;
Button23: TButton;
Button31: TButton;
Button32: TButton;
Button33: TButton;
...
var
x, y: Integer;
b: TButton;
begin
for x:=1 to 3 do
for y:=1 to 3 do
begin
b:=TButton(FindComponent('Button'+IntToStr(x)+IntToStr(y)));
b.Caption:=IntToStr(x)+IntToStr(y);
end;
end; |
| Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
tigra-nsk (02.09.2012)
| ||
|
#6
|
|||
|
|||
|
спасибо большое, помогло.
А теперь такой вопрос: как tbutton оставить нажатой после клика и отжатой после повторного клика? |
|
#7
|
||||
|
||||
|
Используй TSpeedButton.
|
|
#8
|
|||
|
|||
|
создал программно кнопки:
Код:
procedure TForm1.FormCreate(Sender: TObject); var b: TspeedButton ; a:integer; begin for a:=1 to 10 do begin b := TspeedButton.Create(form1); b.Parent := Form1; b.Name:='button'+inttostr(a); b.Width:=57; b.Height:=25; b.Left:=16+a*57; b.Top:=32; b.Hint:=b.Name; end; end; procedure tform1.speedbutton1click(Sender: TObject); begin halt; end; ПС: Hint тоже не отображается =( |
|
#9
|
||||
|
||||
|
Выставить ShowHint в True, назначить OnClick-у процедуру обработки.
|