Hilfe erbeten: Indizierung von Strings

Liebe Delphi-Cracks,

angenommen ich habe ein array [1..5] of integer und fünf Buttons, die BUTTON.1, BUTTON.2 usw. heißen, wie bekomme ich diesen Index beispielsweise in den Befehl

ExecuteCommand('BUTTON.<n> OFF')

reingemurkst? Ich finde (kann aber an mir liegen) da nirgends Beispiele für die Syntax.

Unwissende Grüße

TSD


Edit: Redundante Information gestrichen.

Ich glaube, ich habe eine Lösung:

begin
  for i := 1 to 5 do
    ExecuteCommand('BUTTON.' + IntToStr(i) + ' OFF');
end;

Kann das jemand bestätigen? (Ich kann es im Moment nicht ausprobieren.)

Entdeckte Grüße

TSD


Nachtrag: Die Information mit dem array war übrigens redundant, sorry.

Ich bin ja relativ unwissend, was Programmiersprachen angeht aber das sieht auf den ersten Blick aus, wie eine einfacher Schleifenzähler. Ich kann da keine Verbindung zu einem Array herstellen.

Ein Array wäre für mich ein 2 oder 3 Dimensionales Datenfeld, dass weitere Informationen enthält. Ich kann mir z.B. den kompletten Status eines Icecast Server in ein Array lesen und dann einzelne Zellen von diesem Inhalt verarbeiten.
Hier z.B.


Einlesen, dann verarbeite ich erst mal den Status des Servers, ist der überhaupt online? Wenn ja, dann Bitte aus dem Info Feld, den Titel lesen.
Im Beispiel halt nicht nur von einem, sondern je 2 mount points von 2 Servern.

Mit Deinem Beispiel hier, müsste ich aber eigentlich meinen PTT Spagetti Code reduzieren können.

Vielen Dank für die Mühe. Das Array, hab ich ja zugegeben, ist aus einem vorherigen Gedankenschritt übriggeblieben – vergessen wir das mal. Mir geht es in erster Linie darum, die Befehle mit den Indizes zu modifizieren.

Dein Code könnte, so es denn so funktioniert, so ähnlich aussehen:

var
  i : integer;

procedure OnEncoderInputToggle(Input: TEncoderInput; NewState: boolean);  
begin
  if (Input = eiMic) and (NewState = false) then begin
    for i := -12 to 0 do
      begin
        ExecuteCommand('PLAYER 1-1 VOLUME ' + IntToStr(i));
        ExecuteCommand('PLAYER 1-2 VOLUME ' + IntToStr(i));
        Sleep(100);
      end;
  end
  else if (Input = eiMic) and (NewState = true) then begin
    for i := 0 downto -12 do
      begin
        ExecuteCommand('PLAYER 1-1 VOLUME ' + IntToStr(i));
        ExecuteCommand('PLAYER 1-2 VOLUME ' + IntToStr(i));
        Sleep(100);
      end;
  end;
end;

Gezählte Grüße

TSD


Edit: begins und ends reingefummelt. Sorry.

Ich kann berichten, es funktioniert. Habe dann noch den Zielwert und das Delay in Variablen verpackt.

var
  i, target, delay : integer;

procedure OnEncoderInputToggle(Input: TEncoderInput; NewState: boolean);  
begin
target := -12; // set your target duck range here
delay := 100; // set the delay betwee steps here to smoothen the fade

  if (Input = eiMic) and (NewState = false) then begin
    for i := (target) to 0 do
      begin
        ExecuteCommand('PLAYER 1-1 VOLUME ' + IntToStr(i));
        ExecuteCommand('PLAYER 1-2 VOLUME ' + IntToStr(i));
        Sleep(delay);
      end;
  end
  else if (Input = eiMic) and (NewState = true) then begin
    for i := 0 downto (target) do
      begin
        ExecuteCommand('PLAYER 1-1 VOLUME ' + IntToStr(i));
        ExecuteCommand('PLAYER 1-2 VOLUME ' + IntToStr(i));
        Sleep(delay);
      end;
  end;
end;

:+1: