TValueListEditor Button und Picklist

Rund um die LCL und andere Komponenten
Antworten
Warf
Beiträge: 2122
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

TValueListEditor Button und Picklist

Beitrag von Warf »

Hey ho,

ich wollte mal Fragen ob die TValueListEditor Komponente die Möglichkeit bietet sowohl einen Button (esEllipsis) und eine Pickligste (esPicklist) auf einmal zu verwenden (so ähnlich wie es z.B. Lazarus bei dem Ereigniseditor) zu haben, oder gibt es dafür eine bessere Komponente.

Außerdem, wo ich grade beim Thema bin, während dem Editieren eines wertes werden in dessen Edit keine Events gefeuert (onClick oder onDblClick), kann man das vielleicht auch irgendwie fixen?

Grüße

wp_xyz
Beiträge: 5154
Registriert: Fr 8. Apr 2011, 09:01

Re: TValueListEditor Button und Picklist

Beitrag von wp_xyz »

Nachdem der ValuelistEditor direkt von TCustomStringGrid abgeleitet ist, kann er alles, was das TStringGrid auch kann. Insbesondere kannst du über OnSelectEditor festlegen, welcher Zell-Editor verwendet wird (http://wiki.lazarus.freepascal.org/Grid ... ll_Editors).

Hier ist ein Beispiel, wie man in der 2.Spalte des ValueListEditors abwechselnd einen cbsEllipsis und einen cbsPickList-Editor realisieren könnte. Für's Nachbauen brauchst du ein Formular mit einem TCalendardialog und einem TValueListEditor drauf, bei dem die Ereignisse OnEditButtonClick und OnSelectEditor behandelt werden:

Code: Alles auswählen

procedure TForm1.ValueListEditor1EditButtonClick(Sender: TObject);
var
  c, r: Integer;
begin
  c := ValueListEditor1.Col;
  r := ValueListEditor1.Row;
  if ValueListEditor1.cells[c, r] <> '' then
    CalendarDialog1.Date := StrToDate(ValueListEditor1.Cells[c, r]);
  if CalendarDialog1.Execute then
    ValueListEditor1.cells[c, r] := DateToStr(CalendarDialog1.Date);
end;
 
procedure TForm1.ValueListEditor1SelectEditor(Sender: TObject; aCol,
  aRow: Integer; var Editor: TWinControl);
begin
  if (aCol = 1) then begin
    if odd(aRow) then begin
      if calendarDialog1 = nil then
        exit;
      Editor := ValueListEditor1.EditorByStyle(cbsEllipsis);
    end else
    begin
      Editor := ValueListEditor1.EditorbyStyle(cbsPickList);
      if (Editor is TCustomComboBox) then
        with Editor as TCustomComboBox do begin
          if (aRow mod 3=0) then
            Style := csDropDown
          else
            Style := csDropDownList;
          case aRow of
            1: Items.CommaText := 'ONE,TWO,THREE,FOUR';
            2: Items.CommaText := 'A,B,C,D,E';
            3: Items.CommaText := 'MX,ES,NL,UK';
            4: Items.CommaText := 'RED,GREEN,BLUE,YELLOW';
          end;
        end;
    end;
  end;
end;

Antworten