События для компонентов, созданных во время работы программы II
Delphi 1
Вот простейший код для нового проекта с одной кнопкой и меню. (Надеюсь, в этом ничего сложного нет ... :)
procedure TForm1.Button1Click(Sender: TObject);
var
NewItem: TMenuItem;
begin
NewItem := TMenuItem.Create(Form1);
NewItem.Caption := 'Динамический элемент ...';
NewItem.OnClick := xyz;MainMenu1.Items.Insert(0, NewItem); ←Примечание: рекомендую бегло ознакомиться с Delphi-примером для команды Insert…
end;
{Любая старая 'xyz'-процедура (в настоящее время может быть определена одна, например, Form1.DblClick)}
procedure TForm1.xyz(Sender: TObject);
begin
showmessage('Запусти эту процедуру !!');
end;
Примечание: Если вы пользуетесь неопределенной процедурой, вам понадобиться объявить ее. Лично я все это сделал в «верхнем правом углу» объявления типа формы, примерно так:
private
{ Private declarations }
public
{ Public declarations }
procedure xyz(Sender: TObject); ←К
этой процедуре могут иметь доступ не только события Form1 …
Установите свойство обработчика события (например, OnClick, OnDblClick, OnMouseDown и пр.) на процедуру, которую вы создали для обработки этого события. Вам нужно убедиться в том, что параметры в точности соответствуют параметрам ожидаемого заданного обработчика события.
Например:
MySpeedButton.OnClick := MyClickEventHandler;
где…
procedure MyClickEventHandler(Sender: TObject);
begin
end;
Массивы
Динамические массивы V
SottNick пишет:
Если хочется, чтобы в многомерном массиве был разный размер у разных измерений например: VarArray: array[1..2, 1..?] of TType , где ? зависит от "строки" массива (1..2)
То дозволяется сделать так:
1. Объявление
Var VarArray: array of array of array…………
2. Установка длин
SetLength(VarArray, Razmernost1); // У первого измерения
SetLength(VarArray[1], Razmernost2); // У второго измерения первой «строки»
SetLength(VarArray[2], Razmernost3); // У второго измерения второй «строки»
SetLength(VarArray[n], Razmernost4); // У второго измерения n-ной «строки»
SetLength(VarArray[1][1], Razmernost5); // У третьего измерения первой «строки» первого «столбца»
SetLength(VarArray[1][2], Razmernost6); // У третьего измерения первой «строки» второго «столбца»
SetLength(VarArray[n][m], Razmernost7); // У третьего измерения n-ной «строки» m-ного «столбца»
т.д.
Все можно изменять в процессе естественно.
3. Получение длин
Razmernost1:=Length(VarArray); // У первого измерения (количество строк)
Razmernost2:=Length(VarArray[1]); // У второго измерения первой «строки» (количество столбцов)
Razmernost3:=Length(VarArray[2]); // У второго измерения второй «строки» (количество столбцов)
Razmernost4:=Length(VarArray[n]); // У второго измерения n-ной «строки» (количество столбцов)
Razmernost5:=Length(VarArray[1][1]); // У третьего измерения первой «строки» первого «столбца»
Razmernost6:=Length(VarArray[1][2]); // У третьего измерения первой «строки» второго «столбца»
Razmernost7:=Length(VarArray[n][m]); // У третьего измерения n-ной «строки» m-ного «столбца»