Re[3]: Получение указателя на объект
От: Sinclair Россия https://github.com/evilguest/
Дата: 08.08.03 06:40
Оценка: 3 (1) -1
Здравствуйте, Tikhon, Вы писали:
Тебе же сказали — все объектные типы — УЖЕ указатели. Не надо никаких PForm.
T>Создаю такой код::
T>
T> procedure TForm.Create;
T> begin
T>  with Components do
T>  begin
T>   inc(Count);
T>   SetLength(Links,Count);
T>   Links[Count]:=Self;          //Ошибка!!!! Invalid typecast
T>  end;
T> end;
T>end.
T>
... << RSDN@Home 1.1 alpha 1 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[3]: Получение указателя на объект
От: Anatoly Podgoretsky Эстония http://www.podgoretsky.com
Дата: 08.08.03 06:10
Оценка: 1 (1) -1
Ты путаешь две разные модели Class и Object — они не совместимы
Posted via RSDN NNTP Server 1.7 beta
Re[3]: Получение указателя на объект
От: dymka Россия  
Дата: 08.08.03 06:54
Оценка: 3 (1)
Здравствуйте, 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;


Что тебе мешает сделать тоже самое???
Re[3]: Получение указателя на объект
От: AlexVinS Россия  
Дата: 08.08.03 07:27
Оценка: 3 (1)
Здравствуйте, Tikhon, Вы писали:

Ну, наверное, так:

T>Создаю такой код::

T>
T>unit advforms;

T>interface

T>uses
T> windows;

T>type

T> PForm = ^TForm;
T> TForm = object
T>  Handle:HWND;
T>  Tag:Integer;
T>  procedure Create;
T> end;

T> TComponents = object
T>  Links:array of PForm;
T>  Count:integer;

T>end;

T>implementation

T>var
T> Components:TComponents;

T> procedure TForm.Create;
T> begin
T>  with Components do
T>  begin
T>   inc(Count);
T>   SetLength(Links,Count);
T>   Links[Count]:=@Self;          //так должно сработать
T>  end;
T> end;

T> procedure FindComponent;
T> begin

T> end;

T>end.
T>


Умный человек знает не многое, но нужное
Re[4]: Получение указателя на объект
От: AlexVinS Россия  
Дата: 08.08.03 07:08
Оценка: +1
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, Tikhon, Вы писали:

S>Тебе же сказали — все объектные типы — УЖЕ указатели. Не надо никаких PForm.
Нев все. "чистые" объекты object нет. Но "обычные" class да.


Умный человек знает не многое, но нужное
Получение указателя на объект
От: Tikhon Россия none
Дата: 08.08.03 03:58
Оценка:
Кака мне в Делфи получить указатель на объект.
Я создаю объекты, а потом хочу применить какое либо действие на все созданные объекты. Для этого хочу создать список указателей на объекты. Но пока не судьба.... Как сделать?
Re: Получение указателя на объект
От: dymka Россия  
Дата: 08.08.03 05:05
Оценка:
Здравствуйте, 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;
Re[2]: Получение указателя на объект
От: Tikhon Россия none
Дата: 08.08.03 05:14
Оценка:
Здравствуйте, 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 typecast
  end;
 end;

 procedure FindComponent;
 begin

 end;

end.

Ошибка!!!! Invalid typecast
Что я делаю не так?
Спасибо
Re[4]: Получение указателя на объект
От: Tikhon Россия none
Дата: 08.08.03 06:17
Оценка:
Здравствуйте, Anatoly Podgoretsky, Вы писали:

Ты путаешь две разные модели Class и Object — они не совместимы

Можно поподробнее? в чём разница? буду ОЧЕНЬ благодарен
Re[4]: Получение указателя на объект
От: Tikhon Россия none
Дата: 08.08.03 07:20
Оценка:
Здравствуйте, Sinclair.

когда я сделал TForm =class у меня сработала конструкция Links[Count]:=PForm(Self);
сейчас я сделал так как ты посоветовал... это тоже работает. НО... ты уверен, что я передаю указатель на объект, а не создаю новый. Мне не хочется убивать впустую память и нужно, чтобы при изменении данных в Links[Count] менялись данные Form1
Re[5]: Получение указателя на объект
От: Sinclair Россия https://github.com/evilguest/
Дата: 08.08.03 07:31
Оценка:
Здравствуйте, Tikhon, Вы писали:
T>сейчас я сделал так как ты посоветовал... это тоже работает. НО... ты уверен, что я передаю указатель на объект, а не создаю новый. Мне не хочется убивать впустую память и нужно, чтобы при изменении данных в Links[Count] менялись данные Form1
Да уверен.
... << RSDN@Home 1.1 alpha 1 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[4]: Получение указателя на объект
От: Tikhon Россия none
Дата: 08.08.03 07:32
Оценка:
AlexVinS Сработало! Большое спасибо
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.