Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 26.04.2018, 07:27
Stanei Stanei вне форума
Новичок
 
Регистрация: 21.05.2015
Сообщения: 55
Версия Delphi: Rad Studio 10
Репутация: 10
По умолчанию присвоить значение "Tag" динамически создаваемым кнопкам в цикле

Здравствуйте, столкнулся с такой проблемой, в цикле создаются кнопки:
Код:
procedure Tmain.SpeedButton2Click(Sender: TObject);
var
i:integer;
begin
i:=ADOTable1.recordcount; //подсчёт кол-ва строк в БД
while i>0 do
begin
but:=Tspeedbutton.Create(self);
//but.Name:='but_'+inttostr(i);
but.Tag:=i;
but.Parent:=Flowpanel1;
but.Width:=120;
but.Height:=40;
but.Cursor:=crHandPoint;
but.AlignWithMargins:=true;
DataSource1.DataSet.RecNo:=i; //выбор строки в таблице
but.Caption:=DataSource1.DataSet.Fields[1].AsString; //текст на кнопке из первого столбца в таблице
but.OnClick:=main.click;
i:=i-1;
end;
end;

после выполнения процедуры все кнопки имеют тег "1", проверял с помощью showmessage.

А если убрать цикл и создать только одну кнопку, то её тег будет "29" (29 строк в таблице).

Пробовал присваивать имя кнопкам, но тоже с циклом на выходе у всех кнопок значение "name" равно "but_1", а без цикла одна кнопка создаётся "but_29"

Помогите пожалуйста, как нужно изменить процедуру?
Ответить с цитированием
  #2  
Старый 26.04.2018, 08:43
nixon232 nixon232 вне форума
Активный
 
Регистрация: 26.01.2014
Сообщения: 282
Версия Delphi: delphi xe4
Репутация: выкл
По умолчанию

Ваш код работвет
Код:
but.Tag:=i;
but.Parent:=Flowpanel1; // Что будет если поставить сюда брейк поинт F5 и запустить ?  
but.Width:=120;
but.Height:=40;// создается 29 кнопок, но т.к.  по коду не видно, что они в разном месте. в итоге, ты видишь последнюю.
Не знаю как проверяли, но так должно быть видно
Код:
var
  i: integer;
  but: tspeedButton;
begin
  i := 5;
  while i > 0 do
  begin
    but := Tspeedbutton.Create(self);
//but.Name:='but_'+inttostr(i);
    but.Tag := i;
    but.Parent := Form1;
    but.Width := 120;
    but.Height := 40;
    but.Cursor := crHandPoint;
    but.AlignWithMargins := true;
    but.Top := 0;

    but.Caption := IntToStr(But.Tag);
    ShowMessage(but.Caption);
    i := i - 1;
  end;
end;

Последний раз редактировалось nixon232, 26.04.2018 в 08:46.
Ответить с цитированием
Этот пользователь сказал Спасибо nixon232 за это полезное сообщение:
Stanei (26.04.2018)
  #3  
Старый 26.04.2018, 14:24
Stanei Stanei вне форума
Новичок
 
Регистрация: 21.05.2015
Сообщения: 55
Версия Delphi: Rad Studio 10
Репутация: 10
По умолчанию

вот я валенок, весь день голову ломал и дошло, я имя и тег нажатой кнопки проверял через "but.name" и "but.tag". Правильно Вы сказали, что всё работает, все значения присваиваются. Ну лоханулся немного) Спасибо за помощь.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:42.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter