powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Подскажите пожалуйста, как каждому объекту класса из списка назначить свою процедуру
19 сообщений из 44, страница 2 из 2
Подскажите пожалуйста, как каждому объекту класса из списка назначить свою процедуру
    #39908554
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Леон4ik
я имел ввиду такую this form of method call only allowed for class methods

То есть мое предыдущее сообщение это какая-то магия?
...
Рейтинг: 0 / 0
Подскажите пожалуйста, как каждому объекту класса из списка назначить свою процедуру
    #39908716
Леон4ik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А как сделать процедуру полем класса, кроме как приведение к процедурному типу? Просто допустим у меня 220 обьектов и каждому соответствует своя процедура.
...
Рейтинг: 0 / 0
Подскажите пожалуйста, как каждому объекту класса из списка назначить свою процедуру
    #39908720
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем "делать процедуру полем класса" ?
Вы опять же придерживаетесь принципа "угадайте что мне нужно", вместо того, чтобы описать задачу
...
Рейтинг: 0 / 0
Подскажите пожалуйста, как каждому объекту класса из списка назначить свою процедуру
    #39908728
Леон4ik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Почему снова вылезает ошибка? this form of method call only allowed for class methods or constructor
...
Рейтинг: 0 / 0
Подскажите пожалуйста, как каждому объекту класса из списка назначить свою процедуру
    #39908729
Леон4ik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimaBr, я имел ввиду приведение к процедурному типу.Иначе я не знаю как можно вызвать процедуру для объекта(у каждого своя процедура).Но как я понял нужно просто все процедуры сделать с одинаковыми параметрами и тогда можно вызывать. Если вы хотите ответ на вопрос зачем. Мои обьекты это команды ассемблера. они содержат имя, код, количество строк(ведь бывают и не однобайтовые команды) ну и конечно, процедуру или функцию, которая и выполняет дейтсвие, ведь это же команда(логично или нет?).
...
Рейтинг: 0 / 0
Подскажите пожалуйста, как каждому объекту класса из списка назначить свою процедуру
    #39908730
Леон4ik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Компилятор жалуется на initialization и finilization
...
Рейтинг: 0 / 0
Подскажите пожалуйста, как каждому объекту класса из списка назначить свою процедуру
    #39908732
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Леон4ik
Почему снова вылезает ошибка? this form of method call only allowed for class methods or constructor

Потому что вызывать метод класса можно если он классовый метод (class procedure) или конструктор. Обычные методы можно вызывать у ЭКЗЕМПЛЯРА класса
...
Рейтинг: 0 / 0
Подскажите пожалуйста, как каждому объекту класса из списка назначить свою процедуру
    #39908735
Леон4ik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Леон4ik
DimaBr, я имел ввиду приведение к процедурному типу.Иначе я не знаю как можно вызвать процедуру для объекта(у каждого своя процедура).Но как я понял нужно просто все процедуры сделать с одинаковыми параметрами и тогда можно вызывать. Если вы хотите ответ на вопрос зачем. Мои обьекты это команды ассемблера. они содержат имя, код, количество строк(ведь бывают и не однобайтовые команды) ну и конечно, процедуру или функцию, которая и выполняет дейтсвие, ведь это же команда(логично или нет?).

DimaBr, как бы вы обыграли такую ситуацию.
...
Рейтинг: 0 / 0
Подскажите пожалуйста, как каждому объекту класса из списка назначить свою процедуру
    #39908736
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
procedure TRegister.CreateReg;
begin
regA:=Tregister.create;
regB:=Tregister.create;
regC:=Tregister.create;
regD:=Tregister.create;
regE:=Tregister.create;
regH:=Tregister.create;
regL:=Tregister.create;
cterPC:=Tregister.create;
cterSP:=Tregister.create;
end;


Зачем метод класса CreateReg создаёт 9 новых классов ? Притом, что все эти переменные (regA, regB,regС) - это вообще Глобальные.
Что произойдёт, если мы напишем так ?
Код: pascal
1.
2.
regA:=Tregister.create;
regA.CreateReg;
...
Рейтинг: 0 / 0
Подскажите пожалуйста, как каждому объекту класса из списка назначить свою процедуру
    #39908740
Леон4ik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimaBr, ну как по мне это одно и тоже(это не я, мой мозг так решил ). Я посмотрел примеры, и сделал, как в примерах
...
Рейтинг: 0 / 0
Подскажите пожалуйста, как каждому объекту класса из списка назначить свою процедуру
    #39908741
Леон4ik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimaBr
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
procedure TRegister.CreateReg;
begin
regA:=Tregister.create;
regB:=Tregister.create;
regC:=Tregister.create;
regD:=Tregister.create;
regE:=Tregister.create;
regH:=Tregister.create;
regL:=Tregister.create;
cterPC:=Tregister.create;
cterSP:=Tregister.create;
end;


Зачем метод класса CreateReg создаёт 9 новых классов ? Притом, что все эти переменные (regA, regB,regС) - это вообще Глобальные.
Что произойдёт, если мы напишем так ?
Код: pascal
1.
2.
regA:=Tregister.create;
regA.CreateReg;


ой, уже не ругается компилятор...
...
Рейтинг: 0 / 0
Подскажите пожалуйста, как каждому объекту класса из списка назначить свою процедуру
    #39908746
Леон4ik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimaBr, но вопрос:
Леон4ik
Леон4ik
DimaBr, я имел ввиду приведение к процедурному типу.Иначе я не знаю как можно вызвать процедуру для объекта(у каждого своя процедура).Но как я понял нужно просто все процедуры сделать с одинаковыми параметрами и тогда можно вызывать. Если вы хотите ответ на вопрос зачем. Мои обьекты это команды ассемблера. они содержат имя, код, количество строк(ведь бывают и не однобайтовые команды) ну и конечно, процедуру или функцию, которая и выполняет дейтсвие, ведь это же команда(логично или нет?).

DimaBr, как бы вы обыграли такую ситуацию.

все равно остается в силе. Как бы вы,зная то что не знаю я,облегчили бы себе задачу(создания 220 обьектов). Что-то мне уже не верится, что организация команд в виде обьектов класса намного эффективнее. Быстрее мне кажется case-ми все это дело оформить...Разубедите меня!
...
Рейтинг: 0 / 0
Подскажите пожалуйста, как каждому объекту класса из списка назначить свою процедуру
    #39908747
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Леон4ik
все равно остается в силе. Как бы вы,зная то что не знаю я,облегчили бы себе задачу(создания 220 обьектов)

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
type
TMyType = (MOV_A_A, MOV_A_B, MOV_A_C .......  HLT1);
var Command: array[TMyType] of TCommand;


procedure CreateCommand;
var i: TMyType;
begin
  for i := Low(TMyType) to High(TMyType) do
    Command[i] := TCommand.Create;
end'
...
Рейтинг: 0 / 0
Подскажите пожалуйста, как каждому объекту класса из списка назначить свою процедуру
    #39908749
Леон4ik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimaBr,так, так, так, интересно...
А поля потом можно так же в цикле заполнить?
...
Рейтинг: 0 / 0
Подскажите пожалуйста, как каждому объекту класса из списка назначить свою процедуру
    #39908755
Леон4ik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно ли так же в цикле заполнить поля?
...
Рейтинг: 0 / 0
Подскажите пожалуйста, как каждому объекту класса из списка назначить свою процедуру
    #39908757
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Леон4ik
Можно ли так же в цикле заполнить поля?

заполняйте, кто вам мешает ?
...
Рейтинг: 0 / 0
Подскажите пожалуйста, как каждому объекту класса из списка назначить свою процедуру
    #39908759
Леон4ik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimaBr
Леон4ik
Можно ли так же в цикле заполнить поля?

заполняйте, кто вам мешает ?

Мне мешает отсутствие опыта в заполнении полей в цикле.Ладно.Шутки в сторону. Меня компилятор ругает и говорит что он не вкурсе что я там хотел сделать(он имеет ввиду, что без понятия, что я от него хочу, а именно не понимает, зачем я полям значения присваиваю,также пишет,что не знает таких полей). Хотя когда я создавал все команды без цикла, то у него ко мне вопросов не было. Как так?
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
procedure TCommand.AddCommand;
begin
MOV_A_A.fNameCode:='MOV A,A';
MOV_A_A.fOpCode:='$7F';
MOV_A_A.RowCount:=1;
MOV_A_A.fCom:=MVI;

end;


Хотя,погодите-ка , все команды теперь стали константами. хм...
...
Рейтинг: 0 / 0
Подскажите пожалуйста, как каждому объекту класса из списка назначить свою процедуру
    #39908764
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Леон4ik
А поля потом можно так же в цикле заполнить?

Вы бы сначала определились, что такое TCommand и какой функционал он будет выполнять?
Предполагаю, что вы хотите, чтобы каждый экземпляр TCommand выполнял СВОИ действия.
Этого можно добиться например наследованием
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
TCommand = class
  procedure Execute; virtual;
end;

TCommand_MoveAA = class(TCommand)
  procedure Execute; override;
end;

var C: TCommand;
begin
  C := TCommand_MoveAA.Create;
  C.Execute;
  C.Free;
end;



Или реализовать всё в одном классе
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
type
TMyProc = procedure (const A,N:string) of object;
TCommand = class
  private
    fMyProc: TMyProc;
    procedure MOV_A_A(const A,N:string);
    procedure MOV_A_B(const A,N:string);
  public
   procedure Execute;
end;

procedure CreateCommand;
var i: TMyType;
    S: string;
    M: TMethod;
begin
  for i := Low(TMyType) to High(TMyType) do begin
    Command[i] := TCommand.Create;
    S := TypInfo.GetEnumName(TypeInfo(TMyType),ord(i));
    M.Code := TCommand.MethodAddress(S);
    M.Data := nil;
    Command[i].fMyProc := TMyProc(M);
  end;
end;

procedure TCommand.Execute;
begin
  if Assigned(fMyProc) then fMyProc(Param1,Param2);
end;

// Тестируем
initialization
  CreateCommand;
  Command[MOV_A_A].Execute;
  Command[MOV_A_B].Execute;
  Command[MOV_A_C].Execute;
...
Рейтинг: 0 / 0
Подскажите пожалуйста, как каждому объекту класса из списка назначить свою процедуру
    #39908769
Леон4ik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторВы бы сначала определились, что такое TCommand и какой функционал он будет выполнять?
Предполагаю, что вы хотите, чтобы каждый экземпляр TCommand выполнял СВОИ действия.
Этого можно добиться например наследованием
ВЫ правильно предполагаете, замечу что я это"каждый экземпляр TCommand выполнял СВОИ действия" писал много раз.
...
Рейтинг: 0 / 0
19 сообщений из 44, страница 2 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Подскажите пожалуйста, как каждому объекту класса из списка назначить свою процедуру
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]