![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() Код:
var Button: TButton; begin adotable1.first; for i:=1 to adotable1.RecordCount do begin Button:=TButton.Create(Self); Button.Parent := Self; Button.Left := 50; Button.Top := 50; Button.Width := 50; Button.Height := 50; Button.Caption:=adotable1.Fields[2].AsString ; adotable1.next; end; end; И еще - как сделать, чтоб при нажатии на выше созданные кнопки открывалась, например, другая форма? Заранее спасибо, с ув. Лунтик. Последний раз редактировалось Лунтик-Некрофил, 22.12.2009 в 00:37. |
#2
|
||||
|
||||
![]() Код:
var Button: TButton; Y: Integer; begin adotable1.first; Y := 50; for i:=1 to adotable1.RecordCount do begin Button:=TButton.Create(Self); Button.Parent := Self; Button.Left := 50; Button.Top := Y; Button.Width := 50; Button.Height := 50; Button.Caption:=adotable1.Fields[2].AsString ; adotable1.next; Inc(Y,30); end; end; Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#3
|
||||
|
||||
![]() Спасибо, я думал код будет больше)
И если не сложно - как сделать, чтоб при нажатии на выше созданные кнопки открывалась, например, другая форма? Пытался через onclick - не выходит, click тоже... |
#4
|
||||
|
||||
![]() И еще проблема -
Код:
var Button: TButton; i,y:integer; begin form2.adotable1.First ; y:=50; for i:=1 to form2.adotable1.RecordCount do begin form2.Button:=TButton.Create(Self); form2.Button.Parent := Self; form2.Button.Left := 50; form2.Button.Top := y; form2.Button.Width := 100; form2.Button.Height := 30; form2.Button.Caption:=form2.adotable1.Fields[2].AsString ; form2.adotable1.Next; Inc(Y,35); end; end; |
#5
|
|||
|
|||
![]() form2. - лишнее, ты же объявил Button:TButton, вот и юзай Button, а не form2.Button.
За уничтожением кнопок, ты скорее всего не следишь) |
#6
|
||||
|
||||
![]() Хех, ошибку понял) Сделал на form2create. Спасибо)
|
#7
|
||||
|
||||
![]() Кстати, что по поводу удаления кнопок?
|
#8
|
|||
|
|||
![]() В любом случаи, к кнопкам нужно обратиться, а у тебя они "ввоздух уходят", есть как минимум два пути, при создании кнопки сохранять на нее ссылку в массив, а потом, пробежаться по этому массиву и вызвать у каждой кнопки деструктор, второй способ, пробежаться по форме, и найти все Button с caption - которым ты им выдавал, и тоже самое, вызвать их деструктор.
|
#9
|
||||
|
||||
![]() Можно немного поточнее? Например второй путь. Кнопкам присваиваются имена, соответствующие бд, т.е. и выборку я смогу сделать по button.caption . Проблема в том, что я не представляю как пробежаться по форме и найти все buttons. И если не сложно - можно с примерчиком?)
|
#10
|
|||
|
|||
![]() Вот этот код, удаляет все кнопки с формы, тебе осталось поставить проверку на caption кнопок, если у тебя в таблице есть такой caption, тогда уничтожаешь кнопку иначе нет, хотя можно все кнопки создавать, скажем на TPanel-и, и точно так же их там все уничтожать.
Код:
var i:integer; begin with Form1 do begin i:=0; while (ComponentCount > 0) and (i < ComponentCount) do begin if (Components[i] is TButton) then begin (Components[i] as TButton).Destroy; Dec(i); end; Inc(i); end; end; end; |
#11
|
|||
|
|||
![]() А вот функция, которая удаляет кнопку с формы, по caption,
Код:
function DestroyButtonByCaption(const aCaption:String):boolean; var i:integer; begin Result:=false; with Form1 do if ComponentCount > 0 then for i:=0 to ComponentCount-1 do if (Components[i] is TButton) then if (Components[i] as TButton).Caption = aCaption then begin (Components[i] as TButton).Destroy; exit; end; end; |
#12
|
||||
|
||||
![]() Вот это
Код:
Button:=TButton.Create(Self); Если при создании компонента ему задается Owner Код:
Create(AOwner: TComponent) Также как Application уничтожает формы. |
#13
|
|||
|
|||
![]() Как я понял, судя по задаче, нужно добавлять и уничтожать кнопки, много раз до завершения программы, а не единожды., вообще, для таких целей, я бы написал компонент, к которому привязывался бы TDataSet, и кнопки и отрисовывал бы сам, работало бы это на ура.)
Последний раз редактировалось Asinkrit, 22.12.2009 в 17:52. |
#14
|
||||
|
||||
![]() Цитата:
А на счет компонента мысль интересная, я бы развил ее в таком духе: Компонент как наследник TPanel, а в нем методы: CreateButtonsFromDataSet, CreateButtonsFromStrings, AddButton(ACaption: string), ClearButtons ... |
#15
|
|||
|
|||
![]() Нет под компонентом я подразумевал набор кнопок, но не TButton, а массив из структуры кнопки (размер, положение, события), так же, сам бы их отрисовывал, через переписанный метод Paint; А наследника использовал бы TCustomCanvas; Такой компонент использовал бы минимум ресурсов, а кнопки отрисовывал с колосальной скоростью, в данном случае путь через TButton очень не практичный, но для написания подобных компонентов нужен довольно богатый опыт, как минимум надо знать классовую систему дельфей, как следствие, Лунатику-Некрофилу сейчас это точно не осилить)
Последний раз редактировалось Asinkrit, 22.12.2009 в 19:47. |