К примеру у меня есть массив (синтаксис опускаю, забыл немного )
array of array of record
functionName : string
arguments : Array of ?? ( опять же как )
И через цикл последовательно вызывать функции передавая аргументы.
Кто-то может дать такой пример?
Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7
Коллстак
Re: Коллстак
странно, вроде отвечал, а ответа нет.
По вопросу не ясно ничего - напиши лучше словами, что ты хочешь получить. Твой псевдокод понимаю совсем не способствует.
По вопросу не ясно ничего - напиши лучше словами, что ты хочешь получить. Твой псевдокод понимаю совсем не способствует.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Re: Коллстак
паренек видать об этом спрашивал...drabadan wrote:http://stealth.od.ua/forum/viewtopic.php?f=6&t=1506
8000й нах!
типа так?
Code: Select all
program ProceduresTest;
var
ArrayOfProc : Array of String;
i : Integer;
procedure One;
begin;
end;
procedure Two;
begin
end;
procedure Three;
begin
end;
procedure CallProcedures(ProcName : String);
begin
case ProcName of
'One' : One;
'Two' : Two;
'Three' : Three;
end;
end;
begin
ArrayOfProc := ['One', 'Two', 'Three'];
for i := 0 to Length(ArrayOfProc)-1 do
CallProcedures(ArrayOfProc[i]);
end.
Re: Коллстак
оо да.
только как быть с аргументами?
и есть альтернативы без сравнения по строкам, более компактная?
только как быть с аргументами?
и есть альтернативы без сравнения по строкам, более компактная?
Re: Коллстак
Az_Rieil wrote:оо да.
только как быть с аргументами?
и есть альтернативы без сравнения по строкам, более компактная?
типа того? я не компилил, но идея думаю понятна. У меня ограниченное очень познания в программировании, я даю как сам бы делал! Если бы кто-то у кого есть мозги показал как правильно, мне бы самому было интересно!
Code: Select all
program TestProcedures;
type
TArgs = record
fWord : Word;
fWords : Array of Word;
fCardinal : Cardinal;
fCardinals : Array of Cardinals;
fString : String;
fStrings : Array of String;
end;
type
TMyProc = record
ProcName : String;
ProcArgs : TArgs;
end;
var
MyProcs : Array of TMyProc;
i : Integer;
procedure One(Args : TArgs);
begin
end;
procedure Two(Args : TArgs);
begin
end;
procedure CallProc(Proc: TMyProc);
begin
case Proc.Name of
'One' :
begin
MyProc.ProcName := 'One';
MyProc.ProcArgs.fWord := $1111;
MyProc.ProcArgs.fCardinals := [$0000000, $0000001, $000000002];
One(MyProc.Args);
end;
'Two' :
begin
MyProc.ProcName := 'Two';
MyProc.ProcArgs.fWord := $1222;
MyProc.ProcArgs.fStrings := ['Stealth', 'Client', 'is', 'the Best'];
Two(MyProc.Args);
end;
end;
procedure AddProc(Name : String);
begin
SetLength(MyProcs, Length(MyProcs)+1);
MyProcs[High(MyProcs)].ProcName := Name;
end;
begin
AddProc('One');
AddProc('Two');
for i := 0 to Length(MyProcs)-1 do
CallProc(MyProcs[i]);
end.
Re: Коллстак
если мне не изменяет склероз, ПС не умеет передавать строки в case
Delphi точно не умеет. Там это обходится непростым путем, но в ПС так не выйдет.
Delphi точно не умеет. Там это обходится непростым путем, но в ПС так не выйдет.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Re: Коллстак
отлично работает, или ты не об етом?Vizit0r wrote:если мне не изменяет склероз, ПС не умеет передавать строки в case
Delphi точно не умеет. Там это обходится непростым путем, но в ПС так не выйдет.
Code: Select all
procedure Traveler(Destination : String);
begin
case Destination of
'Arenas' : MoveTo(3638, 1298, 6);
'Dressing Square' :
begin
MoveTo(3772, 1273, 0);
NewMoveXY(3651, 1299, true, 0, true);
end;
'Quatro Arena' : MoveTo(3726, 1367, 4);
end;
end;
Re: Коллстак
хм. Круто, хочу чтобы так же просто было в дельфах 
Сейчас для строк приходится городить конструкции вида
и т.д.

Сейчас для строк приходится городить конструкции вида
Code: Select all
type
TGumpNumElement = (gne_noclose,
gne_nodispose,
gne_nomove,
gne_noresize,
gne_group,
.....
);
case TGumpNumElement(GetEnumValue(TypeInfo(TGumpNumElement), 'gne_'
+LowerCase(CommandName))) of
gne_noclose : fNoClose := true;
gne_nodispose : fNoDispose := true;
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".