Jak wywołać dynamcznie zdarzenie OnMouseMove dyn. kopmonen

Odpowiedz Nowy wątek
2005-09-29 18:34
0

Witam,

Mam taki problem, otóż posiadam liste Paneli utworzonych dynamicznie i ich nazwy to na przyklad kolejno: Kom1, Kom2, Kom3.... itd.
Wszystkie one mają jedno wspólne zdarzenie

KomorkaMouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);

Służy ono do tego aby w miarę jak przesuwam kursor po tych panelach, w innym miejscu pojawiały się ich nazwy, i jeszcze inne właściwości.
I teraz mam inne okienko, które służy do wyszukiwania tych Paneli. Lista znalezionych paneli wrzucana jest do ListBox'a. I teraz po kliknięciu na listBoxa chcę aby na Formie z tymi komórkami w miejscu gdzie wyświetlane są właścwości Paneli pojawiły się właściwości klikniętego znalezionego panelu. Wywołuję więc KomorkaMouseMove w ten sposób:

rejestracja.KomorkaMouseMove(TPanel(rejestracja.FindComponent(znalezione_komorki[id_komorki])),[ssAlt],Mouse.CursorPos.X,Mouse.CursorPos.Y);

No i w tym miejscu mi wywala błąd.
rejestracja to nazwa Formy gdzie wyświtlane sa komorki, znalezione_komorki[id_komorki] to nazwa klikniętej komorki w ListBox.
Wydaje mi się, że coś jest nie tak z FindComponent ale nie mogę dojść do strzału.
Czy ktoś mi może pomóc?

Pozostało 580 znaków

2005-09-29 20:06
0

Jaki błąd? Przed czy po kompilacji? I tak BTW: niepotrzebne jest rzutowanie pierwszego parametru funkcji.


Nowe pomysły są inną kombinacją starych elementów. Nie ma nowych elementów. Są tylko nowe kombinacje.

Pozostało 580 znaków

2005-09-29 20:30
0

Próbowałem na różne sposoby i ciągle ten sam błąd:

Access violation at address 0061E1F6 in module 'Project.exe'. Read of address 00000070

Błąd wywalany jest w trakcie działania programu w już skompilowanym projekcie.

Pozostało 580 znaków

2005-09-29 20:42
0

Mi to wygląda na taki scenariusz: FindComponent nie znajduje komponentu i przekazuje do funkcji nil. Tam się odwołujesz do tego nil'a co narusza pamięć. Daj w pierwszej linijce takie coś:

if Sender=nil then Exit;

I sprawdź czy błąd dalej występuje.


Nowe pomysły są inną kombinacją starych elementów. Nie ma nowych elementów. Są tylko nowe kombinacje.

Pozostało 580 znaków

2005-09-29 21:03
0

raczej

if not (Sender is TPanel) then exit;


Dwie zasady gwarantujące sukces:
1. Nigdy nie mów nikomu wszystkiego<span style="color: white">

Pozostało 580 znaków

2005-09-30 15:24
0
Adamo napisał(a)

if not (Sender is TPanel) then exit;

No tak, teraz nie wywala błędu. Źle jest więc podana nazwa komponentu?
Dodam, że te komórki sa mojej klasy TKomorka_nowa, która to klasa jest pochodną TPanel. Jednak nawet jeśli wpiszę: not(Sender is TKomorka_nowa) to też nie przechodzi. Hmm, cały problem polega w wyniku funkcji FindComponent, bo nawet jak chcę zrobić:

showmessage(TKomorka_nowa(rejestracja.FindComponent(znalezione_komorki[id_komorki])).ClassName); 

To też mi wywala ten błąd.
Chyba nieprawidłowo wyszukuję ten komponent na formatce rejestracja, no ale jak pokazać funkcji aby szukała tego komponentu na innej formatce?
Acha! I te dynamiczne komponenty przechowuję w tablicy array of TKomorka_nowa. Może ta informacja jest istotna?

Pozostało 580 znaków

2005-09-30 23:09
0

a nie możesz w sekcji public okna, na którym są te panele dać tak

Type
  TForm1 = class(TForm);
    ....
  public
    Panele: array of TMojPanel;
  ...

i zamiast je szukać FindComponent to masz je przez Panele[xxx]

PS. w TAGu danego panela możesz zapisać sobie jego Index w tablicy

I jeszcze jedno - powiedz może co chcesz uzyskać, bo być może jest prostsza droga (zawsze uważałem, że tworzenie więcej niż nastu komponentów tego samego rodzaju na jednej formie to złe podejście (chodzi głównie o buttony, panele itp., bo np. jak trzeba 30 editów to się tego nie przeskoczy)


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij

Pozostało 580 znaków

2005-10-03 21:33
0

Faktycznie, czasem się za bardzo kombinuje. Poszukiwanie po tablicy stworzonych komponentów dało zamierdzony efekt. Dziękuję wam wszystkim za pomoc.

P.S. Dynamiczne panele służą mi jako poprostu pola na grafiku (planie zajęć). Dzięki temu możesz sobie wrzucić na tygodniowym rozkładzie tyle planów paneli ile masz ich zajęć, jednocześnie ustawiając odrazu właściwe wartości np. width w zależności od czasu jego trwania. Jest to myślę dobre rozwiązanie i nieźle mi działa. A problem z tematu tego postu miał mi pomóc w zrobieniu wyszukiwania odpowiednich terminów, według ustalanych przez użytkownika parametrów.

Pozdrawiam

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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