Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[Delphi] Uchwyt obiektów z innej formy ...

tkalinows 15 Lut 2005 21:20 1551 4
  • #1 15 Lut 2005 21:20
    tkalinows
    Poziom 12  

    Witam, w tym temacie jestem oporny i zawily, ale prosze o pomoc.
    Problem przedstawia sie następująco.
    Założenia: Form1 i Form2.
    na Form1 znajdują się dwa Memo (Memo1 i Memo2).

    Dwukrotne kliknięcie w wybrane memo (Memo1) powoduje otwarcie Form2 np z paletą kolorów. Wybranie koloru powinno zmienic kolor Memo1. Jeżeli kliknę 2x w memo2 chce zmienic kolor korzystając z Form2 dla memo2.
    Jak to zrobić korzystając z uchwytów, czy czegos w tym rodzaju, bo załóżmy, że takich memo jest nie 2 ale 100.

    Z góry dzięki, i przepraszam za zawilosc i lamestrwo w tej kwiestii :)

    Zamykam. - arnoldziq

    0 4
  • Pomocny post
    #2 15 Lut 2005 21:36
    elektryk
    Poziom 42  

    Zrób coś takiego w kodzie do Form1, mój zapis to tylko szkic przybliżony do składni Delphi.

    Memo1_onClick.....
    begin
    form2.zmien_kolor(self);
    end;

    a w kodzie do Form2 dodaj metode:

    zmien_kolor(zrodlo:Tmemo)
    begin
    kolor_ustawiony=zrodlo.kolor; {trzeba ustawić sobie stary kolor}
    showmodal;
    zrodlo.kolor=kolor_ustawiony; {skopiowanie koloru}
    end;


    Ale żeby to było bardziej "profesjonalnie" ;) to trzeba by dorobić takie rzeczy:
    1. zdefiniować klase TMyMemo która dziedziczy wszystko po TMemo przy czym funkcje onClick od razu ma zdefiniowaną, a wskazanie na to co będzie wywyływane przekazywać w konstruktorze TMyMemo
    2. zdefiniować klase TMemoColorChanger jako forme z guziczkami jw z tym uzupełnieniem że będzie wywoływana przy pomocy Show i będzie po zmianie koloru "odświeżała" memo do którego będzie "przypisane";
    3. w onClick po każdym naciśnięciu tworzyć nowy obiekt klasy TMemoColorChanger, który będzie sobie żyć własnym życiem, dopóki się go nie zamknie
    4. zapewnić albo blokowanie tworzenia dwóch obiektów zmieniających kolor do jednego memo i zamiast tego przenoszenie na wierzch okna przypisanego do danego TMyMemo albo odświeżanie "bieżącego" koloru w metodzie "onActivate", kiedy okno dostanie Focusa (wtedy może być więcej okien do zmiany koloru TMyMemo)..

    Po wprowadzeniu tych 4 punktów będziesz mógł jednoczesnie oprócz okna typu Form1 mieć wiele okienek typu Form2 z których każde będzie przypisane do jednego elementu TMyMemo w czasie korzystania z Form1.

    0
  • #3 15 Lut 2005 22:26
    tkalinows
    Poziom 12  

    Wielkie dzięki za pomoc. Problem jest nieco bardziej skomplikowany, ale Twoja podpowiedź jest super. Jeszcze raz dzieki, jak będzie ból - to będę pisał ;)

    0
  • Pomocny post
    #4 16 Lut 2005 13:08
    Bielsky
    Poziom 20  

    Nie wiem jak jest skonstruowany twój projekt, ale z tego co pamiętam - w delphi można się odwołać tak:

    Form1->Memo1->to_do_czego_sie_odwolujesz
    albo:
    Form1.Memo1.to_do_czego_sie_odwolujesz

    Poza tym......
    Wydaje mi się że delphi ma komponent, bodajże TColorDialog, nie musiałbyś tworzyć drugiego formularza.

    0
  • #5 16 Lut 2005 15:39
    tkalinows
    Poziom 12  

    100 memo i kilka kolorów to tylko przyklad. W rzeczywistosci na 1 formie mam kilka wykrasow, druga forma sluzy zmienianiu roznych parametrow danego wykresu, takich jak zakres amplitudy, zakres osi x, odswierzanie, przesuniecie wykresu, kreslenie trendow itd.

    Dzieki za wszystkie opowiedzie i prosze o wiecej, lacznie z przykladami. Nie musicie sie trudzic i pisac cos pod dokladnie ten przyklad, mozecie wkleic kawalek kodu o podobnym dzialaniu (czyli obsluga jednej formy zdrugiej)

    Pozdrawiam... ;)

    0