Frage zum TStringGrid

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Benutzeravatar
photor
Beiträge: 445
Registriert: Mo 24. Jan 2011, 21:38
OS, Lazarus, FPC: Arch Linux: L 2.2.6 FPC 3.2.2 (Gtk2)
CPU-Target: 64Bit

Frage zum TStringGrid

Beitrag von photor »

Hallo Forum,

ich will in einem TStringGrid Parameter sammeln (eigentlich nur visualisieren). Dabei kann es vorkommen, dass es 1 bis doch einige Einträge (=Zeilen) gibt.
Das sieht im Prinzip so aus:

Code: Alles auswählen

procedure TMainForm.Init_UnitLoadFilesStrGrd;
begin
  UnitLoadFilesStrGrd.Clean;
  UnitLoadFilesStrGrd.FixedCols := 1;
  UnitLoadFilesStrGrd.FixedRows := 1;
  UnitLoadFilesStrGrd.ColCount := 5;
  UnitLoadFilesStrGrd.RowCount := 1;

  // total: 890 px
  UnitLoadFilesStrGrd.ColWidths[0] := 40;
  UnitLoadFilesStrGrd.ColWidths[1] := 540;
  UnitLoadFilesStrGrd.ColWidths[2] := 100;
  UnitLoadFilesStrGrd.ColWidths[3] := 100;
  UnitLoadFilesStrGrd.ColWidths[4] := 100;

  UnitLoadFilesStrGrd.Cells[0,0] := 'No';
  UnitLoadFilesStrGrd.Cells[1,0] := 'Unitload File';
  UnitLoadFilesStrGrd.Cells[2,0] := 'Sensor';
  UnitLoadFilesStrGrd.Cells[3,0] := 'Factor';
  UnitLoadFilesStrGrd.Cells[4,0] := 'Status';
end;
Also 5 Spalten.

Es geht im Wesentlichen um die 4. Spalte (col=3; 'Factor') - Die anderen sind schon definiert. Da müssen Gewichtungsfaktoren angegeben werden. Die können
  1. alle gleich sein (bis auf einen speziellen Eintrag; den kann man aber über die Einträge (z.B. 'Sensor' filtern). Da könnte es noch 2 Fälle geben (die man aber auch eventuelle zusammen abhandeln könnte):
    1. die Werte werden auf einen üblichen Standardwert gesetzt; das würde ich gerne fest verdrahten, weil dann weniger Gelegenheiten, dass sich Fehler einschleichen (Faktor 10 oder 1000 wird da gerne mal gemacht)
    2. einen frei zu vergebenden 'Factor', der in einem TEdit (dann enabled)steht.
  2. alle unterschiedlich; die sollen dann direkt im UnitLoadFilesStrGrd eingegeben werden. Dazu habe ich mir schon was überlegt, so dass dann nur die 'Factor'-Spalte editierbar ist.
Die Möglichkeiten aktiviere ich über eine TComboBox:
  • 1a: es reicht einfach den Eintrag in der TComboBox zu wählen und alle Einträge werden gesetzt - fertig
  • 1b: auch hier reicht es, alle in Frage kommenden Einträge direkt zu setzen; ich muss aber vorher den Wert noch in das TEdit eintragen, eventuell prüfen.
  • 2: hier wollte ich die Eintrage ja direkt eingeben; eventuell müsste man auch hier prüfen, ob die Zelleinträge sinnvoll und valide sind (Floats, Bereich ...)
Wenn alle Einträge gemacht sind, würde ich einen Update-Button nutzen, um die Werte/Einträge in eine Datenstruktur zu übertragen, wo sie dann während der Berechnung bereit liegen, wenn die dann gestartet wird.

Meine Frage bezieht sich darauf, wie ich die Eingabe in diesem UnitLoadFilesStrGrd am besten realisieren/organisieren kann?
  • Welchen Event kann man dafür nutzen?
  • am besten so, dass die oben beschriebenen Fälle möglichst unkompliziert abgedeckt sind
  • kann natürlich bedeuten, dass ich auch noch mal über das Konzept nachdenken muss
Ich brauche da mal etwas Input und wäre Euch dankbar dafür.

Ciao,
Photor

PS: geschrieben unter schwerem Böller-Feuer!
Aber trotzdem: Allen(!) ein gutes und gesundes neues Jahr.

Antworten