Здравствуйте, Tikhon, Вы писали:
T>Здравствуйте, dymka, Вы писали:
D>>Вообще в Delphi все переменные объекта ЯВЛЯЮТСЯ УКАЗАТЕЛЯМИ, т.е. получать то ничего как раз не надо. D>> T>Это всё хорошо. Только есля я пользуюсь VCL. Я пользуюсь только компилятором Delphi, f bcgjkmpe. WinApi.
Итак, смотрим исходный код TList (никогда не помешает посмотреть как это уже давно сделано...):
PPointerList = ^TPointerList;
TPointerList = array[0..MaxListSize - 1] of Pointer;
...
TList = class(TObject)
private
FList: PPointerList;
FCount: Integer;
...
function TList.Add(Item: Pointer): Integer;
begin
Result := FCount;
FList^[Result] := Item;
Inc(FCount);
end;
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, Tikhon, Вы писали: S>Тебе же сказали — все объектные типы — УЖЕ указатели. Не надо никаких PForm.
Нев все. "чистые" объекты object нет. Но "обычные" class да.
Кака мне в Делфи получить указатель на объект.
Я создаю объекты, а потом хочу применить какое либо действие на все созданные объекты. Для этого хочу создать список указателей на объекты. Но пока не судьба.... Как сделать?
Здравствуйте, Tikhon, Вы писали:
T>Кака мне в Делфи получить указатель на объект. T>Я создаю объекты, а потом хочу применить какое либо действие на все созданные объекты. Для этого хочу создать список указателей на объекты. Но пока не судьба.... Как сделать?
RTFM TList.
Вообще в Delphi все переменные объекта ЯВЛЯЮТСЯ УКАЗАТЕЛЯМИ, т.е. получать то ничего как раз не надо.
procedure TForm1.CreateList;
begin
List := TList.Create;
// допустим на формне есть две кнопки
List.Add(Button1); // Добавить указатель на Button1 в список
List.Add(Button2);
end;
// пример действияprocedure TFrom1.SetEnabled(Value: boolean);
var
I: integer;
begin
for I:=0 to List.Count-1 do
TButton(List[I]).Enabled := Value;
end;
Здравствуйте, dymka, Вы писали:
D>Вообще в Delphi все переменные объекта ЯВЛЯЮТСЯ УКАЗАТЕЛЯМИ, т.е. получать то ничего как раз не надо. D>
Это всё хорошо. Только есля я пользуюсь VCL. Я пользуюсь только компилятором Delphi, f bcgjkmpe. WinApi.
Создаю такой код::
unit advforms;
interface
uses
windows;
type
PForm = ^TForm;
TForm = object
Handle:HWND;
Tag:Integer;
procedure Create;
end;
TComponents = object
Links:array of PForm;
Count:integer;
end;
implementation
var
Components:TComponents;
procedure TForm.Create;
begin
with Components do
begin
inc(Count);
SetLength(Links,Count);
Links[Count]:=PForm(Self); //Ошибка!!!! Invalid typecastend;
end;
procedure FindComponent;
begin
end;
end.
Ошибка!!!! Invalid typecast
Что я делаю не так?
Спасибо
когда я сделал TForm =class у меня сработала конструкция Links[Count]:=PForm(Self);
сейчас я сделал так как ты посоветовал... это тоже работает. НО... ты уверен, что я передаю указатель на объект, а не создаю новый. Мне не хочется убивать впустую память и нужно, чтобы при изменении данных в Links[Count] менялись данные Form1
Здравствуйте, Tikhon, Вы писали: T>сейчас я сделал так как ты посоветовал... это тоже работает. НО... ты уверен, что я передаю указатель на объект, а не создаю новый. Мне не хочется убивать впустую память и нужно, чтобы при изменении данных в Links[Count] менялись данные Form1
Да уверен.
... << RSDN@Home 1.1 alpha 1 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.