Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.03.2011, 13:32   #1
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию создание кнопки

Имеется ListViev с заполнеными строками. при нажатии на кнопку создаются рисунки или кнопки (количество рисунков равно количеству строк), каждый рисунок соответствует строке listviewa. При наведении на рисунок в richview выводится текст соответстующий строке listview.
Вот я создаю кнопки, но не получается чтобы количество кнопок равнялось количеству строк.
Код:
procedure TForm1.createButton1(offset: integer);
var Buttons: tButton;
begin
Buttons:= tButton.Create(form1);
Buttons.Parent := form1;
Buttons.Left:=10;
Buttons.Top := 33 * offset;
Buttons.Visible := true;
Buttons.Name := 'Buttons'+inttostr(offset);
Buttons.Caption := Buttons.Name;
end;
procedure TForm1.Button2Click(Sender: TObject);
 var i:byte;
const
x:integer = 3;
begin
for i := 0 to x do  begin
createButtons1(i);
end;
 end;
Aleksandr вне форума Ответить с цитированием
Старый 26.03.2011, 18:48   #2
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

я может чего не понял, но количество кнопок будет равно 4 ( от 0 до 3), потому как вы 4 раза вызваете код создания кнопки. вызывайте его listview.items.count раз и всё по идее будет нормально
phomm вне форума Ответить с цитированием
Старый 28.03.2011, 10:59   #3
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию

Создаю кнопки, но имена кнопок везде соответствуют первой строке. А мне нужно чтобы каждая кнопка называлась по соответствующей ей строке. И еще вопрос как кнопкам задать хинт и обработать событие на клик

Код:
procedure TForm1.createbutton(offset: integer);
var Buttons: TButton;
    i:Integer;
begin
Buttons := TButton.Create(form1);
Buttons.Parent := form1;
Buttons.Left:=10;
Buttons.Top := 33 * offset;
Buttons.Visible := true;
Buttons.Name := 'Buttons'+inttostr(offset);
Buttons.Caption := ListView1.Items.item[i].Caption;

end;

procedure TForm1.Button2Click(Sender: TObject);
 var i:byte;
begin
for i := 0 to listview1.items.count-1 do  begin
createbutton(i);
end;
 end;

Последний раз редактировалось Aleksandr; 28.03.2011 в 11:05.
Aleksandr вне форума Ответить с цитированием
Старый 28.03.2011, 11:32   #4
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

Цитата:
И еще вопрос как кнопкам задать хинт
Код:
Buttons.ShowHint := True;
Buttons.Hint := 'my hint';
Цитата:
обработать событие на клик
Код:
Buttons.OnClick := MyButtunsClick;
Код:
procedure TForm1.MyButtunsClick(Sender :TObject);
begin
  ShowMessage(TButton(Sender).Name + 'najli');
end;
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 28.03.2011, 12:07   #5
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

Цитата:
Сообщение от Aleksandr Посмотреть сообщение
Создаю кнопки, но имена кнопок везде соответствуют первой строке.

Код:
procedure TForm1.createbutton(offset: integer);
var Buttons: TButton;
    i:Integer;
begin
...
Buttons.Top := 33 * offset;
...
Buttons.Name := 'Buttons'+inttostr(offset);
Buttons.Caption := ListView1.Items.item[i].Caption;
...
end;

procedure TForm1.Button2Click(Sender: TObject);
 var i:byte;
begin
for i := 0 to listview1.items.count-1 do  begin
createbutton(i);
end;
 end;
Вы передаете оффсет, его и выставляете для позиционирования кнопки, а вот имя берете из какой-то i , которая в лучшем случае = 0 , что соответствует 1 строке листвиюва, а в худшем будет Аксес Виолейшн!

i у Вас локальная , и Вы её никак не обрабатываете ! надо бы так :

Код:
procedure TForm1.createbutton(itemnum: integer);
var Buttons: TButton;

begin
...
Buttons.Top := 33 * itemnum;
...
Buttons.Name := 'Buttons'+inttostr(itemnum);
Buttons.Caption := ListView1.Items.item[itemnum].Caption;
...
end;

Последний раз редактировалось phomm; 28.03.2011 в 12:12.
phomm вне форума Ответить с цитированием
Старый 28.03.2011, 14:41   #6
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию

Спасибо работает. А как сделать чтобы при нажатии на созданную кнопку в label выводило что нажата кнопка и имя
Aleksandr вне форума Ответить с цитированием
Старый 28.03.2011, 15:37   #7
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

Цитата:
Сообщение от ArtGrek Посмотреть сообщение
Код:
Buttons.OnClick := MyButtunsClick;
Код:
procedure TForm1.MyButtunsClick(Sender :TObject);
begin
  ShowMessage(TButton(Sender).Name + 'najli'); 
end;
где красное поставь, что именно тебе нужно, и поблагодари ArtGrek'a
phomm вне форума Ответить с цитированием
Старый 28.03.2011, 16:11   #8
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию

Я это видел но где ставить Buttons.OnClick := MyButtunsClick;
Все разобрался. Спасибо.
Aleksandr вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание кнопки с гиперссылкой smile1704 JavaScript, Ajax 3 29.01.2011 13:32
Создание кнопки RIO Общие вопросы Delphi 4 02.05.2010 16:55
Создание кнопки LENA_M Microsoft Office Excel 6 18.05.2009 15:00
Создание кнопки LENA_M Microsoft Office Excel 1 24.04.2009 16:44
Создание кнопки Karl_Karlovi4 Общие вопросы Delphi 1 05.02.2008 13:55