TDBCheckBox mit ValueChecked

Für Fehler in Lazarus, um diese von anderen verifizieren zu lassen.
Antworten
MmVisual
Beiträge: 1466
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

TDBCheckBox mit ValueChecked

Beitrag von MmVisual »

Hallo,

Im TDBCheckbox ist ein Fehler, (daher schreib ich ...)

WinXP, Lazarus 0.9.26, Datenbank egal

Ich habe ein Datenbank-Feld Typ Integer. Dort steht 0 oder 1 drin.
In der Query ist diesem Feld die Events OnGetText / und OnSetText genutzt, dabei wird die "0" zu einem "-" und die "1" zu einem "Ja" umgewandelt, also für die Anzeige in der Tabelle.
In der TDBCheckbox Eigenschaft ValueChecked muss ich damit auch auf "Ja", ValueUnchecked auf "-" setzen. Damit funktioniert die Anzeige.

Wenn ich nun auf die Checkbox klicke erscheint eine Fehlermeldung da versucht wird in Field.AsString das "Ja" / "-" rein zu schreiben. Das gibt Bruch.

Behebung:
Datei "dbcheckbox.inc" / Funktion "procedure TDBCheckBox.UpdateData(Sender: TObject);" folgendermassen abgeändert:

Code: Alles auswählen

procedure TDBCheckBox.UpdateData(Sender: TObject);
var
  NewFieldText: string;
begin
  if State = cbGrayed then
    FDataLink.Field.Clear
  else
    if FDataLink.Field.DataType = ftBoolean then
      FDataLink.Field.AsBoolean:=Checked
    else begin
      if Checked then
        NewFieldText:=FValueCheck
      else
        NewFieldText:=FValueUncheck;
      // ToDo: use Field.Text
      If Assigned(FDataLink.Field.OnSetText) Then    /// <<<< Neue Zeile
         FDataLink.Field.OnSetText(FDataLink.Field, NewFieldText)    /// <<<< Neue Zeile
      Else FDataLink.Field.AsString:=Trim(NewFieldText); /// <<< Else ist neu
    end;
end;


Also ich checke erst mal ob es ein Event "FDataLink.Field.OnSetText" gibt, wenn ja, dann muss der Innhalt damit gewandelt werden. Ansonsten wird (wie früher) auf .AsString zugewiesen.

PS: Diese Änderung wird nur übernommen wenn Lazarus neu aufgebaut wird.
EleLa - Elektronik Lagerverwaltung - www.elela.de

Antworten