powiazanie komponentow

0

witam

mam idee, mianowicie
chcialbym powiazac ze soba dwa komponenty tak aby zmiana wlasciwosci jednego wplywala na drugiego i odwrotnie.

Jak ktos nie rozumie to chodzi mi o takie powiazanie jak ma TShellListView z TShellComboBox. Obie maja wlasciwosci sluzace do wybrania powiazanej kontrolki, przy czym po wybraniu w jednej automatycznie wybierana jest wlasciwa u drugiej (mozna ja zmienic) :)

Jaki mechanizm nalezy tutaj zastosowac?

dzieki

0

Propertys maja taka podstawowa zalete, ze w komponencie tworza wrazenie zwyklej zmiennej, natomiast jej zmiana zazwyczaj wywoluje odpowiedznia funkcje np.
property AutoSize: Boolean read FAutoSize write SetAutoSize default True;

Przy odczycie wlasciwosc AutoSize jest pobierana ze zmiennej prywatnej FAutoSize. Natomiast gdy zmienimy wartość AutoSize, to wywołana zostanie funkcja SetUatoSize, ktora oprocz przypisania wartosci do FAutoSize dodatkowo zmieni rozmiary komponentu, odswiezy itp.

No wiec jesli juz masz 2 komponenty i chcesz zeby zmiana wlasciwosci AutoSize w pierwszym komponencie zmieniala ta wartosc w drugim to:

Musisz miec zmienna w jednym komponencie ze wskaznikiem do drugiego komponentu i na odwrot. I teraz w SetAutoSize piszesz np. DrugiKomponent.AutoSize:= FAutoSize;
Oczywsicie trzeba w drugim wykrywac, ze wywolanie nastapilo od niego i zeby nie powstalo zapetlenie. Ciezko to opisac po ludzku, ale mam nadzieje ze naprowadzilem chociaz na wlasciwy trop :]

0

Musisz miec zmienna w jednym komponencie ze wskaznikiem do drugiego komponentu i na odwrot. I teraz w SetAutoSize piszesz np. DrugiKomponent.AutoSize:= FAutoSize;
Oczywsicie trzeba w drugim wykrywac, ze wywolanie nastapilo od niego i zeby nie powstalo zapetlenie. Ciezko to opisac po ludzku, ale mam nadzieje ze naprowadzilem chociaz na wlasciwy trop :]

tak, dzieki o to chodzilo
pierwszy problem jest taki ze zeby miec w obu klasach wskazniki na druga klase musze wlaczyc do sekcji uses pliki z ta klasa
proba wlaczenia plikow naglowkowych konczy sie bledem "[Fatal Error] nazwaplikuwlaczanego.pas(7): Circular unit reference to 'nazwaplikuwlaczanego'"

czyli pierwszy plik ort! wlaczac drugi ktory wlacza ten pierwszy :)

co z tym mozna zrobic?

0

Jedno z modułów dodaj w sekcji uses pod implementation

0

Jedno z modułów dodaj w sekcji uses pod implementation

e tam,

uses

interface

type
TMojaKlasa = class
private
InnaKlasa : TInnaKlasa ; // blad jak dodam to sekcji implementation
//plik w ktorym jest ta klasa
end ;

implementation

uses
plikzinnaklasa ;

podobnie jest z drugim plikiem tak czy siak jest blad tylko inaczej brzmi :)

0

No tak.. nie doczytałem - zdaje się, że pozostaje jedynie stworzenie trzeciego modułu i przeniesienie do jego części publicznej tych elementów, które stanowią przyczynę wystąpienia odwołania cyklicznego.

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