Nazwa obiektu jako zmienna do przypisania parametru obiektu

0

Witam.

Jestem początkującym w języku Delphi. Znalazłem sobie jakiś kurs, i przerabiam go próbując rozszerzać zadania na własną rękę.

Utknąłem w jednym punkcie, i głowię się z tym już trochę, nie mogąc znaleźć rozwiązania. Na chwilę obecną skończyły mi się już pomysły :(

Generalnie chodzi o to, że na formatce głównej mamy ListBox'a, i 2 RadioButton'y, oraz etykietkę. W ListBox'ie mamy wyróżnione kolory. Kliknięcie na kolorze ma powodować zmianę koloru tła okna głównego, LUB etykiety, a decyduje o tym odpowiednia opcja zaznaczona w RadioButton'ach.

Procedura która mi działa wygląda tak:

    procedure TForm1.ListBox1Click(Sender: TObject);
    begin
        if rad_kolor_formatki_.checked = true then
            case ListBox1.ItemIndex of
                0: Form1.Color := ClYellow;
                1: Form1.Color := ClRed;
                2: Form1.Color := ClBlue;
                3: Form1.Color := ClGreen;
                4: Form1.Color := ClBlack;
            end;

        if rad_kolor_etykiety_.checked = true then
            case ListBox1.ItemIndex of
                0: lab_Etykietka_.Color := ClYellow;
                1: lab_Etykietka_.Color := ClRed;
                2: lab_Etykietka_.Color := ClBlue;
                3: lab_Etykietka_.Color := ClGreen;
                4: lab_Etykietka_.Color := ClBlack;
            end;

    end;

Ja jednak od początku miałem w głowie trochę inną wersję. Nie mogę jej jednak odpowiednio skomponować. Chciałem mianowicie zadeklarować jakąś zmienna wybor która będzie przyjmowała wartości Form1 lub lab_Etykietka_. Można by wówczas zmniejszyć trochę kod. Nie ma to oczywiście znaczenia dla tego "programu", lecz miała by na pewno dla bardziej rozbudowanego.

Próbowałem napisać coś takiego:

    procedure TForm1.ListBox1Click(Sender: TObject);
    begin
        if rad_kolor_formatki_.checked = true then wybor := Form1;
        if rad_kolor_etykiety_.checked = true then wybor := lab_Etykietka_;          
            case ListBox1.ItemIndex of
                0: wybor.Color := ClYellow;
                1: wybor.Color := ClRed;
                2: wybor.Color := ClBlue;
                3: wybor.Color := ClGreen;
                4: wybor.Color := ClBlack;
            end;
    end;

przy czym wyżej deklarowałem zmienna wybor w części Implementation
var wybor : TObject;
Czy ktoś byłby w stanie pomóc mi sprawić żeby ten drugi kod zadziałał? W chwili obecnej wywala mi błąd, że "identyfikator Color przy zmiennej wybor nie zostal zadeklarowany". Przy innych moich wcześniejszych próbach miałem problemy z niekompatybilnością typów wybor oraz Form1 i lab_Etykietka_.

Domyślam się, że dla Was, "wyjadaczy z Delphi", nie będzie to żaden problem. Ja natomiast mam już niezły mętlik w głowie :)

0

Kombinujesz ;-P

var
  WybranyKolor:TCOLOR;

procedure TForm1.ListBox1Click(Sender: TObject);
begin

            case ListBox1.ItemIndex of
                0: WybranyKolor := ClYellow;
                1: WybranyKolor := ClRed;
                2: WybranyKolor := ClBlue;
                3: WybranyKolor := ClGreen;
                4: WybranyKolor := ClBlack;
            end;

        if rad_kolor_formatki_.checked then Form1.Color:=WybranyKolor;
        if rad_kolor_etykiety_.checked  then lab_Etykietka_.Color:=WybranyKolor;
end;

W zmiennych typu bool nie trzeba pisać if zmienna=true wystarczy samo if zmienna
podobnie if zmienna = false zamieniasz if not zmienna

co do użycia samego object samo Sender:TObject nic nie daje , trzeba wskazać czym jest Sender :

(Sender as TLabel).Color // Traktowany jako Label
(Sender as TImage).Color // Traktowany jako TImage
0

No cóż, jak to zwykle bywa rozwiązanie okazało się bardzo proste :) Chyba za długo patrzyłem się już na ten kod, i tak jak piszesz, przekombinowałem :)

Dzięki za pomoc i wszelkie uwagi!

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