forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Delphi (http://forum.boolean.name/forumdisplay.php?f=66)
-   -   Динамически создаваемые объекты (http://forum.boolean.name/showthread.php?t=11362)

<-TzX-> 07.12.2009 16:42

Динамически создаваемые объекты
 
Допустим при каком то событии программы у меня динамически создается кнопка примерно таким образом:
Код:

With TButton.Create(Self) do
 Begin
  \\Тут перечисляю ее свойства
 End;

Ну так вот собственно вопрос: Как обрабатывать события происходящие с динамически созданным объектом. Тот же онклик.
Заранее спасибо.

WaReZ_MEN 07.12.2009 17:05

Ответ: Динамически создаваемые объекты
 
Просто присваеваеш свою процедуру обработчику. onClik у кнопке или просто clik

<-TzX-> 07.12.2009 17:15

Ответ: Динамически создаваемые объекты
 
Цитата:

Сообщение от WaReZ_MEN (Сообщение 128662)
Просто присваеваеш свою процедуру обработчику. onClik у кнопке или просто clik

Пару строчек кода можно? :unsure:

WaReZ_MEN 07.12.2009 17:22

Ответ: Динамически создаваемые объекты
 
Цитата:

Сообщение от <-TzX-> (Сообщение 128664)
Пару строчек кода можно? :unsure:

Можно :)


Код:

type
  TTestForm = class(TForm)
    procedure FormCreate(Sender:TObject);
  private
    procedure OwnButtonClick(Sender:TObject);
  end;

procedure TTestForm.FormCreate (Sender : TObject);
var i, j : integer;
begin
  for i := 0 to 4 do
    for j := 0 to 4 do
      with TButton.Create (Self) do
      begin
        Caption := Format ('Button %d %d', [i, j]);
        Top    := 100 + 30 * i;
        Left    := 100 + 90 * j;
        Width  := 80;
        Height  := 25;
        OnClick := OwnButtonClick;
        Parent  := Self;
      end;
end;

procedure TTestForm.OwnButtonClick (Sender : TObject);
begin
  ShowMessageFmt ('Нажата кнопка %s', [TButton (Sender).Caption]);
end;


<-TzX-> 07.12.2009 17:39

Ответ: Динамически создаваемые объекты
 
Так и думал. OnClick := OwnButtonClick; - во чё забыл =)) Спасиб. Закрывай.

З.Ы. И еще вопрос. procedure TTestForm.OwnButtonClick[i] (Sender : TObject); Такой вариант возможен, если у меня массив кнопок?))

WaReZ_MEN 07.12.2009 17:44

Ответ: Динамически создаваемые объекты
 
Попробуй ;)

<-TzX-> 07.12.2009 17:47

Ответ: Динамически создаваемые объекты
 
Не это тогда динамически создавать еще и процедуры придется. Лучше в одну параметром передать число а там ифами рулить)
Сам на свой же вопрос и ответил :)

WaReZ_MEN 07.12.2009 17:52

Ответ: Динамически создаваемые объекты
 
Вот видеш уже хорошо :)

<-TzX-> 08.12.2009 22:47

Ответ: Динамически создаваемые объекты
 
По ходу работы возник еще один вопрос. Новую тему создавать не стал, название в принципе подходит. Ну так вот суть.

Есть ListView В нем формируется что то похожее на "Асечный контакт-лист". При Двойном клике по эллементу списка в другой форме динамически создается TabSheet с тем же именем. С этим проблем нет, НО:
Нужно чтобы если кликаем по эллементу списка не создавалась еще одна вкладка, а активировалась существующая.
Делал примерно так:
PHP код:

Var z:integer;
Begin
   
For z:=0 to PageControl.PageCount do
if 
Form2.ListView1.Items[Form2.ListView1.ItemIndex].Caption=TabSheet[z].Caption 
then
Pagecontrol
.ActivePage:=TabSheet[z]
 else
Begin
 TabSheet
[i]:=TTabSheet.Create(Form1);
 
TabSheet[i].Caption:=name;
 
TabSheet[i].PageControl := PageControl

При повторном клике получается что ни одна вкладка не активирована.
Надеюсь понятно объяснил что хочу =)

Пол дня голову ломаю, пните меня в правильную сторону.

Заранее спасибо)

WaReZ_MEN 08.12.2009 23:09

Ответ: Динамически создаваемые объекты
 
Дельфи нет подрукой но мож еще фокус передать?

<-TzX-> 08.12.2009 23:29

Ответ: Динамически создаваемые объекты
 
Если я тебя правильно понял то в моём случае сделать так:
PHP код:

TabSheet[z].Focused

Критует с Error of read address 000000000

При Повторной активации эллемента списка, получается что вобще не один таб не выделен. Новые создаются нормально...
Может что то в логике перемутил? Там где по заголовкам ищу

UPD: разобрался


Часовой пояс GMT +4, время: 12:10.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot