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
TValueListEditor Button und Picklist
Re: TValueListEditor Button und Picklist
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:
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;