![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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. |