Советы по Delphi. Версия 1.4.3 от 1.1.2001 - страница 17
> i := 1 to RecsCount do begin
> { обpаботать данные }
> Inc(DataPtr);
> if PString(DataPtr)^ = NEXT_SELECTOR then begin
> PtrRec(DataPtr).Seg := PtrRec(DataPtr).Seg + Ofs(AHIncr);
> PtrRec(DataPtr).Ofs := $0;
> end;
> end; { for i }
> GlobalUnlock(DataHdl);
>end;
События
Назначение обработчика события OnClick пункту меню, созданному во время выполнения программы
Delphi 1
Поскольку метод OnClick является свойством, то при динамическом создании элемента меню вы можете назначить имя метода обработчику OnClick:
>theMenuitem.OnClick := TheOnClickHandler;
Затем, в обработчике OnClick, вы приводите sender к TMenuItem и читаете имя:
>procedure theform.TheOnClickHandler(Sender: TObject);
>var
> fName: String;
>begin
> fName := TMenuItem(Sender).name;
> …
>end;
События для компонентов, созданных во время работы программы I
Delphi 1
Вы должны вручную создать метод, который будет иметь тот же самый набор параметров, как и у события, которое вы хотите обработать. Затем вы должны вручную установить свойство OnXXX, чтобы она указывала на метод, который вы создали.
Пример:
>TForm1 = class(TForm)
> procedure FormCreate(Sender: TObject);
>private
>FMyButton: TButton;
>protected
> procedure Button1Click(Sender: TObject);
> {Кодируем это вручную,для соответствия}
> {структуреTNotifyEvent}
>end;
>procedure TForm1.FormCreate(Sender: TObject);
>begin
>FMyButton := TButton.Create;
> {Здесь устанавливаем позицию, заголовок и все остальное}
> FMyButton.OnClick := MyButtonClick;
>end;
>procedure TForm1.MyButtonClick(Sender: TObject);
>begin
>ShowMessage('Эй! Ты нажал на мою кнопку!');
>end;
События для компонентов, созданных во время работы программы 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]); // У второго измерения первой «строки» (количество столбцов)