| Delphi Tips & Tricks | softsale > Delphi Tips & Tricks |
| < poprzednia rada | następna rada > |
Kolorowanie aktywnych elementów edycyjnychCzasem, przy wielu elementach edycyjnych na formularzu, celowe jest zaznaczenie jakimś wybranym kolorem elementu w danej chwili aktywnego, czyli posiadającego tzw. focus. Korzystamy w tym przypadku z obsługi dwóch zdarzeń: OnEnter oraz OnExit. W obsłudze zdarzenia OnEnter wybieramy kolor, który jest kolorem wyróżnionym, a w obsłudze zdarzenia OnExit kolor, który jest kolorem dla elementu edycyjnego aktualnie niewybranego. Taką obsługę tych zdarzeń musimy przypisać do wszystkich elementów edycyjnych na formularzu. Jeżeli na formie umieściliśmy np. 10 elementów klasy TEdit, nie musimy oczywiście pisać 20 procedur obsługi a tylko dwie, używając parametru Sender dla odróżnienia, którego Edita w danym momencie to dotyczy. procedure Tform1.Edit1Enter(sender:TObject); begin TEdit1(Sender).Color:=clgreen; end; procedure Tform1.Edit1Exit(sender:TObject); begin TEdit1(Sender).Color:=clWhite; end; Problem się lekko komplikuje gdy na formie umieścimy elementy edycyjne różnych typów np: TEdit, TDBEdit, TMemo, TDBMemo, TMasEdit. Uniwersalne rozwiązanie przedstawiono poniżej. Taką uniwersalną formę można dołączyć do Repozytorium systemu Delphi i wykorzystywać ją zawsze jako wzorzec w przypadku, kiedy chcemy wyróżniać wybranym kolorem aktywne elementy edycyjne. Forma (Kolor_focus) zawiera dwa publiczne pola typu TColor. Kolor_wybrany: TColor; Kolor_niewybrany: TColor;oraz dwa handlery obsługi zdarzeń: OnEnter oraz OnExit. Na zdarzeniu OnCreate formy zastosowano pętlę przejścia po wszystkich komponentach istniejących na formie (korzysta się tu z systemowej tablicy Components oraz licznika ComponentCount). Poszczególnym elementom edycyjnym przypisywane są odpowiednie procedury obsługi zdarzeń OnEnter i OnExit. procedure TKolor_focus.ControlEnter(Sender: TObject);
begin
if Sender is TEdit then
TEdit(Sender).Color := Kolor_wybrany
else if Sender is TMemo then
TMemo(Sender).Color := Kolor_wybrany
else if Sender is TDBMemo then
TDBMemo(Sender).Color := Kolor_wybrany
else if Sender is TMaskEdit then
TMaskEdit(Sender).Color := Kolor_wybrany
else if Sender is TDBEdit then
TDBEdit(Sender).Color := Kolor_wybrany;
end;
procedure TKolor_focus.ControlExit(Sender: TObject);
begin
if Sender is TEdit then
TEdit(Sender).Color := Kolor_niewybrany
else if Sender is TMemo then
TMemo(Sender).Color := Kolor_niewybrany
else if Sender is TDBMemo then
TDBMemo(Sender).Color := Kolor_niewybrany
else if Sender is TMaskEdit then
TMaskEdit(Sender).Color := Kolor_niewybrany
else if Sender is TDBEdit then
TDBEdit(Sender).Color := Kolor_niewybrany;
end;
procedure TKolor_focus.FormCreate(Sender: TObject);
var
i: Integer;
begin
Kolor_wybrany := clTeal;
Kolor_niewybrany := clWhite;
for i := 0 to Self.ComponentCount - 1 do
if Self.Components[i] is TEdit then
begin
TEdit(Self.Components[i]).OnEnter := ControlEnter;
TEdit(Self.Components[i]).OnExit := ControlExit;
TEdit(Self.Components[i]).Color := Kolor_niewybrany;
end
else if Self.Components[i] is TMemo then
begin
TMemo(Self.Components[i]).OnEnter := ControlEnter;
TMemo(Self.Components[i]).OnExit := ControlExit;
TMemo(Self.Components[i]).Color := Kolor_niewybrany;
end
else if Self.Components[i] is TDBMemo then
begin
TDBMemo(Self.Components[i]).OnEnter := ControlEnter;
TDBMemo(Self.Components[i]).OnExit := ControlExit;
TDBMemo(Self.Components[i]).Color := Kolor_niewybrany;
end
else if Self.Components[i] is TMaskEdit then
begin
TMaskEdit(Self.Components[i]).OnEnter := ControlEnter;
TMaskEdit(Self.Components[i]).OnExit := ControlExit;
TMaskEdit(Self.Components[i]).Color := Kolor_niewybrany;
end
else if Self.Components[i] is TDBEdit then
begin
TDBEdit(Self.Components[i]).OnEnter := ControlEnter;
TDBEdit(Self.Components[i]).OnExit := ControlExit;
TDBEdit(Self.Components[i]).Color := Kolor_niewybrany;
end;
end;
|
|
SOFTSALE - Oprogramowanie i Szkolenia softsale@softsale.com.pl 03-565 Warszawa , ul. Borzymowska 43 lok. 301C tel/fax:4084840,GSM:0607612428 |