Combobox - wyświetlanie danych z użyciem csOwnerDrawFixed.

0

Witam,
mam problem dotyczący wyświetlania określonych wartości w Comboboxie po kliknięciu w DBGrid.

Jeśli COmbobox w STYLE ma wartość csDropDown wtedy wartości po kliknięciu w DBgrid są wyświetlane.
Zależy mi na kolorowym tle przy wyborze danych z Comboboxa dlatego ustawiłem STYLE na csOwnerDrawFixed.

Niestety po tej zmianie wartości nie są pokazywane.

Co należałoby zrobić?

Proszę o pomoc

0

Pokaż kod, jakim rysujesz itemy w OnDrawItem. To pewnie ktoś coś więcej doradzi.

0

I nie wiem jak się zabrać za to, aby po kliknięciu w DBGrid w dany wiersz w którym jest np wartość 'PRACA' pojawiła się ta wartość w Comboboxie który jest wygaszony (enabled).

 
procedure TForm_roboczgodziny.ComboBox1DrawItem(Control: TWinControl;
  Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
 with Control as TComboBox do
 begin
  if (odSelected in State) then
   Canvas.Brush.Color := clred;
   Canvas.FillRect(Rect);
   Canvas.TextOut(Rect.Left,Rect.Top, ComboBox1.Items[Index])

 end;
end;
2

Tuż po uzupełnieniu komponentu ustaw właściwość ItemIndex na wartość inną niż -1; Jeśli tego nie zrobisz - komponent edytor komponentu będzie pusty;

Przykład malowania:

procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
const
  COMBO_COLORS: array [Boolean] of TColor = (clRed, clWhite);
var
  Combo: TComboBox;
begin
  Combo := Control as TComboBox;

  with Combo.Canvas do
  begin
    { set colors for background and font }
    Font.Color  := COMBO_COLORS[odSelected in State];
    Pen.Color   := COMBO_COLORS[not (odSelected in State)];
    Brush.Color := Pen.Color;

    { draw that }
    Rectangle(Rect);
    TextOut(Rect.Left + 2, Rect.Top + 2, Combo.Items[Index]);

    { kill focus rect }
    if odFocused in State then
    begin
      Pen.Color := Pen.Color xor $FFFFFF;
      DrawFocusRect(Rect);
    end;
  end;
end;

Efekt działania kodu:

combo.png

Ale ustawienie ItemIndex jest tutaj kluczowe.

0

@furious programming Dziękuję ale nie o to mi chodziło.
Kolorować potrafię ale gdy STYLE := csOwnerDrawFixed wtedy jak kliknę w jakiś rekord w DBGrid to wartość z zaznaczonego rekordu (np znajduje się tam Praca)
powinna się pojawić w COMBOBOXIE, czyli w Comboboxie powinien pojawić się napis Praca.
A przy klikaniu nie zmienia swojej wartości.

0

Kolorować potrafię ale gdy STYLE := csOwnerDrawFixed wtedy jak kliknę [...]

To co pokazane wyżej to efekt działania podanego kodu z ustawionym Style na csOwnerDrawFixed w komponencie;

[...] w jakiś rekord w DBGrid to wartość z zaznaczonego rekordu (np znajduje się tam Praca)
powinna się pojawić w COMBOBOXIE, czyli w Comboboxie powinien pojawić się napis Praca.

Mam zgadywać co tam namodziłeś, czy pokażesz ten kod? Nie będę wróżyć, ale po kliknięciu na dany rekord musisz uzupełnić ComboBox w odpowiednią wartość (lub wartości) i ustawić ItemIndex na numer itema, który chcesz na początku wyświetlić w edytorze komponentu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1