Einzelnen Beitrag anzeigen

oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#26

Re: Neue Komponente mit 2 TEdit Komponenten

  Alt 4. Jun 2009, 14:19
Hallo,

ja, eine ganze Menge Fragen, erschreckt aber nicht. Bin seit heute erst wieder zurück.
Ich denke, wir machen eins nach dem anderen. Das ganze Thema mit dem Fokus habe ich noch nicht so richtig geschnallt. Ich würd lieber mit den Ereignissen anfangen.
Du hast ja eine recht eindeutige Nummerierung deiner Spiele. Ich denke mal, dass du im Programmablauf auf die Eigaben bezüglich der Auswertung usw. reagieren willst. Wobei ich denke, dass das auch in der Kompo klappen sollte.
Ich würde der Kompo erst ein mal eine Property PlayerCount verpassen. Da gibt man dann die Anzahl der Spieler ein. Daraus wird dann auch automatisch das Schema in deiner Abbildung Spielplan_16 erstellt. Die Anzahl der TDartResultEdits ergibt sich ja automatisch. Jedes Edit sollte als Name den Text erhalten, den du über die Spielerpaare geschrieben hast mit dem suffix 1 oder 2 erhalten.
Bsp.:
Delphi-Quellcode:
  For PlayRount := 1 to PlayerCount div 2 do begin
    For Player := 1 to 2 do begin
      with TDartResultEdit.create(nil) do begin
        Name := Format('R1_%d_%d', [PlayRound, Player]);
        OnChange := self.OnDartResultEditChange;
        ...
Das ist nur ein erster Ansatz. Die Logik, wieviel Spiele wie zusammengestellt werden kennst du selbst am besten.
Jetzt nimmst du dein Ereignis On Change und wertest die Einträge aus. Somit kannst du gleich alle folgenden Felder mit den Spielernamen füllen.
Delphi-Quellcode:
procedure MyCustomControl.OnDartResultEditChange(Sender : TObject);
var SenderName : String;
    RoundChar : Char;
    PLayRound, Player : Integer;
begin
  // hier macht es Sinn, den Namen des sendenden Edit zu zerlegen.
  if not Sender is TDartResultEdit then
    Exit;
  SenderName := TComponent.Name;
  // jetzt zerlegen und auf die einzelnen Segmente prüfen
  case ORD(RoundChar) of // das ist z.B. das R
    ORD('R') : begin
      case PlayRound of // das ist das Spiel der Runde
        1 : begin
            .... // usw.
        end;
      end;
    end;
    ...
  end;
end;
Ich denke, dass es Sinn macht, die einzelnen Cases in Funktionen auszulagern. Desgleichen würde ich für die einzelnen Spieler eine eigene Klasse TPlayer = class TObject anlegen. Die dann alle in einer ObjectList halten. So wird die Verwaltung einfacher. An das Programm würde ich eigentlich nichts hoch senden. Die Einträge in die weiteren Felder kann eigentlich deine Komponente machen. Über das Programm steuerst du eigentlich nur den Input wie Anzahl Spieler, Spielername, zufällige oder feste Paarbildung usw.

Ich glaube, ich hab hier versehentlich TDartResultEdit als Eingabefeldt (Edit) des Spielstandes gesetzt. Wenn das falsch ist, sag bescheid.

Jo, sag mal, wie dier das gefällt. Dann können wir ja konkret weiter machen.

Gruß oki
42
  Mit Zitat antworten Zitat