Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.08.27;
Скачать: CL | DM;

Вниз

SpeedButton   Найти похожие ветки 

 
ArtemESC ©   (2006-08-06 23:01) [0]

Работаю с динамическим массивом из SpeedButton"ov:

1) Почему ни удается откомпилировать следующее  
    SaveArray[i].OnClick   := OnClick_;

   OnClick_ описан так: procedure OnClick_(Sender: TObject);
2) Как определить в обработчике какая из кнопок массива нажата:
         пробовал так:
                    SaveArray[i].Tag := i;
         
             затем  в обработчике:
                    Index := TSpeedButton(Sender).Tag
          но это не работает...


 
easy ©   (2006-08-06 23:47) [1]

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, Buttons, StdCtrls;

type
 TForm1 = class(TForm)
   procedure FormCreate(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
 private
   { Private declarations }
   procedure OnClick_(Sender: TObject);
   procedure CreateButtons;
   procedure DestroyButtons;
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.CreateButtons;
var
 i, j, k: integer;
const
 ButtonWidth = 25;
 ButtonHeight = 25;
begin
 i := 0;
 j := 0;
 k := 1;
 while j * ButtonHeight < Height - ButtonHeight * 2 do begin
   while i * ButtonWidth < Width - ButtonWidth * 2 do begin
     with TSpeedButton.Create(self) do begin
       Top := j * ButtonHeight;
       left := i * ButtonWidth;
       width := ButtonWidth;
       height := ButtonHeight;
       Name := "SpeedButton" + inttostr(k);
       Caption := inttostr(k);
       Parent := Self;
       OnClick := OnClick_;
     end;
     inc(i);
     inc(k);
   end;
   inc(j);
   i := 0;
 end;
end;

procedure TForm1.DestroyButtons;
var
 i: integer;
begin
 for i := ControlCount - 1 downto 0 do begin
   if Controls[i] is TSpeedButton then
     TSpeedButton(Controls[i]).Free;
 end;
end;

procedure TForm1.OnClick_(Sender: TObject);
begin
 showmessage("Вы нажали " + TSpeedButton(Sender).Name);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 CreateButtons;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 DestroyButtons;
end;

end.


 
ArtemESC ©   (2006-08-07 00:05) [2]

easy ©   (06.08.06 23:47) [1]
 Огромнейшее спасибо...


 
Desdechado ©   (2006-08-07 11:43) [3]

> procedure OnClick_(Sender: TObject);
Это должно быть методом класса, а не простой процедурой.
Об этом в справке написано.

> но это не работает
Что именно не так?


 
ArtemESC ©   (2006-08-07 12:30) [4]

>>Что именно не так?

Это должно быть методом класса, а не простой процедурой.
   C учетом этого все так...



Страницы: 1 вся ветка

Текущий архив: 2006.08.27;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.027 c
1-1153028556
Chort
2006-07-16 09:42
2006.08.27
RadioGroup


4-1146806660
__DATA__
2006-05-05 09:24
2006.08.27
Сообщение, отвечающее за изменение списка открытых окон в системе


15-1154493115
Ega23
2006-08-02 08:31
2006.08.27
С Днём рождения! 2 августа


15-1154321185
Calm
2006-07-31 08:46
2006.08.27
Перестала автоматически скрываться панель задач :(


4-1146637983
razor
2006-05-03 10:33
2006.08.27
Как получить данные с мат. платы (данные с термодатчиков и т.д.)