Wróciłem do mojego głównego projektu i teraz próbuje trochę poprawić ten kod. Mam menu główne, które składa się z 6 przycisków. Wszystkie znajdują się na jednym głównym panelu. Natomiast same przyciski składają się z 3 elementów. Mniej więcej wygląda to tak:
-PanelPrzyciskTlo
--PanelPrzyciskWnetrze
---LabelPrzyciskNapis
Oczywiście, każdy z tych przycisków jest oznaczony jeszcze słowem oznaczającym daną opcję. Każdy przycisk ma 3 zdarzenia. onClick, onMouseEnter i onMouseLeave. Mój problem dotyczy tych dwóch ostatnich zdarzeń. Cel jest taki, aby po najechaniu na przycisk wszystkie trzy komponenty zmieniały swój kolor. Udało mi się to osiągnąć. Jednak musiałem stworzyć dla każdego PanelPrzyciskTlo oddzielne zdarzenia i później wstawić je też dla tych podrzędnych komponentów. A więc kod wyglądał tak:
procedure TProjekt.PanelPrzyciskTloMouseLeave(Sender: TObject);
begin
PanelPrzyciskTlo.Color := KolorTlaOpcjiMenuGlownego;
PanelPrzyciskWnetrze.Color := KolorOpcjiMenuGlownego;
LabelPrzyciskNapis.Font.Color := KolorCzcionki;
end;
To daje łącznie 12 zdarzeń, a jeśli opcji będzie więcej, bo zamierzam dodać jeszcze 2 lub 3, to wtedy dalej to będzie rosło. Chciałbym to zrobić w sposób jaki przedstawił to Olesio w innym moim temacie.
//...
var
Edt : TEdit;
begin
Edt := TEdit(Sender);
if (Edt <> nil) and (Length(Edt.Text) = 1) then
SelectNext(Edt, True, True);
end;
Jednak tu mam problem, bo zdarzenie musi obejmować trzy komponenty. A jeśli wstawiłbym coś takiego
var
Panel: TPanel;
begin
Panel := TPanel(Sender);
Panel.Color := KolorTlaOpcjiMenuGlownego;
end;
to zarówno po najechaniu na tło i na wnętrze ono zmieniało by kolor na ten sam. Czy jest jakaś mozliwość aby w taki sposób ustawić, że kolor ma zmienić np. Panel który jest bezpośrednio pod lub nad obecnym Panelem?
Mam nadzieję, że zrozumiale wytłumaczyłem o co mi chodzi.