Hi,
@Trouble_Maker:
Hm, dann habe ich das was ich verstanden hab nur falsch wiedergegeben. Ich meinte es so, wie du es beschrieben hast.
Leider geht es so nicht. Moori hat da schon einen Weg genannt. Ich weiß nicht obs der einzige ist, aber mir würd kein anderer einfallen.
Dass du für deine Befehle eine Art Interpreter brauchst, der aus Nachrichten herausliest was er ausführen soll, beschränkt deine Möglichkeiten.
So kannst du dem Client nämlich nicht irgendwelche neu ausgedachten Befehle schicken. Alles was er ausführen können soll musst du im Interpreter erst vorbereiten, also z.B. die Prozeduren für die Befehle die du sendest müssen schon da sein, weil der Interpreter nur etwas ausführen kann, was er auch kennt.
So einen Interpreter kann man in den meisten Fällen entweder mit gaaanz vielen Ifs machen, also z.B.
if CommandString = 'ProgrammAusfuehren' then ...
,
oder etwas bequemer per Case.
Dafür musst du deinen Befehlen aber Kennziffern geben. Also z.B. für "ProgrammAusfuehren" einen Integer mit dem Wert 1, für "ZeigeEineMessageBox" nen Integer mit dem Wert 2.
Das erreichst du entweder, indem du schon beim Senden des Befehls den jeweiligen Integer per inttostr in die Befehlskette schreibst, oder indem du dir ne Prozedur machst die aus den einzelnen verschiedenen CommandStrings eindeutige Integers macht, damit du dann damit im Case arbeiten kannst.
Erste Möglichkeit hat den Vorteil dass du keine so lange Prozedur schreiben musst die dir die Befehle anhand der Strings als Integers zurückgibt, hat allerdings den Nachteil dass die Befehle auf beiden Seiten die selben Nummern haben müssen.
Dementsprechend umgekehrt sind diese Argumente für die zweite Möglichkeit anzubringen.
Naja, und wenn du dann erstmal die Nummern der Befehle kennst, kannst du anstatt obigen Ifs bequem mit Case arbeiten:
Delphi-Quellcode:
case BefehlsNummer of
1: begin
...
end;
2: begin
...
end;
end;
Bis dann,
S - tefano