|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
переименование группы кнопок
Условие:
На форме располагаются куча кнопок "матрицей" Задача: Переименовывать их одной командой (лень писать button1.caption......button126.caption.) Можно ли как-то это загнать в цикл? Вообще, можно ли работать с индексом объекта? Мне бы хотелось с ними работать как с матрицей, т.е создать вспомогательную матрицу 6х21 и каждой ячейке придать индекс кнопки, а потом используя этот индекс их переименовывать, перекрашивать, нажимать-отжимать итп. Это упростило бы задачу очень сильно.. Помогите кто чем может. |
#2
|
||||
|
||||
Изучаем свойство Tag компонентов + ComponentCount.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#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.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#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-у процедуру обработки.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |