Wiele obiektow typu Shape

0

Witam!!
Mam 64 obiekty Shape ulozone w 8x8. W procedurach obslugi zdarzenia Shape1MouseDown.... napisalem,ze kolory maja sie zmieniac w danym shape na przemian czarny-bialy. Tylko,ze mam 64 takich procedur!!.A zamierzam ich zrobic jeszcze wiecej(okolo 320). Nie da sie jakos inaczej tego zapisac niz pisac obsluge dla kazdego Shapea??. Procedury obslugi zdarzenia wygladaja jednakowo tylko zmienia sie numer Shapea.

if Shape1.Brush.Color=clWhite then
Shape1.Brush.Color:=clBlack
else
Shape1.Brush.Color:=clWhite

P.S. Pisze edytor do znakow, ktore pozniej wyrzucam na wyswietlacz graficzny.
Pozdro/smalski

0

http://4programmers.net/faq.php?id=819%3E

albo FindComponent + F! [sciana]

0

W porzadku!!
Ale i tak bede musial tworzyc dla kazdego shape`a obsluge zdarzenia.Czyli 320 obslugi zdarzen!!
Nie da sie zrobic tego w jednej procedurze??
Dzieki/smalski

0
smalski napisał(a)

W porzadku!!
Ale i tak bede musial tworzyc dla kazdego shape`a obsluge zdarzenia.Czyli 320 obslugi zdarzen!!
Nie da sie zrobic tego w jednej procedurze??
Dzieki/smalski

Da się..

0

nie latwiej jeden image i tablica booleanow ?

0
Drajwer napisał(a)

nie latwiej jeden image i tablica booleanow ?

a jeszcze lepiej jeden shape i jedna obsługa zdażenia i w obsłudze tej wyliczanie (na podstawie X i Y myszy) który "wirtualny shape" został kliknięty

0
Misiekd napisał(a)
Drajwer napisał(a)

nie latwiej jeden image i tablica booleanow ?

a jeszcze lepiej jeden shape i jedna obsługa zdażenia i w obsłudze tej wyliczanie (na podstawie X i Y myszy) który "wirtualny shape" został kliknięty

LUDZIE!!!
Czy tu nikt nie umie programowac w Delphi??? Co wy biedakowi proponujecie?? Rewelacja, macie moja nagrode w konkursie na bzdet miesiaca :D

Wystarczy w obsludze zdarzenia OnClick/OnMouseDown dac cos takiego:

if (Sender is TShape) then
  if TShape(Sender).Brush.Color=clWhite then
    TShape(Sender).Brush.Color:=clBlack
  else
    TShape(Sender).Brush.Color:=clWhite;

Smalski, kaz im wsadzic te porady w buty, beda wyzsi :P Wystarczy Ci jedna procedura obslugi tak prostego zdarzenia :)

Pozdr

0

Dzieki Shreq za dobra rade!!!

0
Shreq napisał(a)
Misiekd napisał(a)
Drajwer napisał(a)

nie latwiej jeden image i tablica booleanow ?

a jeszcze lepiej jeden shape i jedna obsługa zdażenia i w obsłudze tej wyliczanie (na podstawie X i Y myszy) który "wirtualny shape" został kliknięty

LUDZIE!!!
Czy tu nikt nie umie programowac w Delphi??? Co wy biedakowi proponujecie?? Rewelacja, macie moja nagrode w konkursie na bzdet miesiaca :D

Wystarczy w obsludze zdarzenia OnClick/OnMouseDown dac cos takiego:

if (Sender is TShape) then
  if TShape(Sender).Brush.Color=clWhite then
    TShape(Sender).Brush.Color:=clBlack
  else
    TShape(Sender).Brush.Color:=clWhite;

Smalski, kaz im wsadzic te porady w buty, beda wyzsi :P Wystarczy Ci jedna procedura obslugi tak prostego zdarzenia :)

Pozdr

Tak, a to jest kolejna cudowna odpowiedz typu "robie sapera i mam polę 100x100 jak zrobić przyciski? - zrób 10000 buttonów". Chłopie zastanów się troche. To, że ty nie potrafisz optymalizować swoich programów nie znaczy, że inni tego nie robią.

0
Misiekd napisał(a)

Tak, a to jest kolejna cudowna odpowiedz typu "robie sapera i mam polę 100x100 jak zrobić przyciski? - zrób 1000 buttonów". Chłopie zastanów się troche. To, że ty nie potrafisz optymalizować swoich programów nie znaczy, że inni tego nie robią.

Misiek - do kogo to bylo i na jaki temat? Bo trudno mi to przypiac, ani to rada ani dowcipne stwierdzenie :D

0

no akurat jeśli komponenty mają mieć jedno położenie i za wiele nie robić to Misiekd ma racje, tylko że trudniej by było zmienić kolor jednemu z takich "wirtualnych TShape'ów", nie można by było też przemieszczać ani nic, no ale zakładając że tylko chce sie mieć możliwość ich kliknięcia to wyliczenie pozycji jak najwłaściwsze. Chociaż nie bardzo rozumiem co znaczy zrobić image i tablicę booleanów :/ i nie rozumiem o co chodzi Shrekowi - skąd takie oburzenie, ale komponent TShape nie zajmuje właściwie za dużo miejsca w pamięci i w ogóle więc prawda z deczka leży po środku a jeśli zasoby nie są tak ważne to zdecydowanie lepiej jednak sobie dużo uprościć sprawę i zrobić na tych 320 Shape'ach - jeśli tylko program nie ma być cały czas uruchomiony w tle.

// aha, już zczaiłem o co chodziło z tymi booleanami ;P

0

Adamo - moje oburzenie nie bylo akurat do Miska, bo w czasie pisania swojego postu jeszcze nie odswiezylem, wiec nie widzialem jego porady :) Bzdetem nazwalem nieumiejetnosc wykorzystania obiektu Sender, i to wszystko :)

0

Mam podobny problem, tylko bardziej złożony;
25 komponentów Shape, dla każdego wczytuje dane z tabeli: 0 lub 1 i zmienia kolor, albo na czarny, albo biały (w zalezności jaka cyfra wczytana z tabeli).
Mam 25 takich funkcji (dla każdego Shape osobno):
if tab[1]=0
then
Shape1.Brush.Color:=clWhite
else
Shape1.Brush.Color:=clRed;

Czy da się to zapisać w jednej?

0
  1. nie odgrzebuje się starych postów!
  2. FindComponent i Components
  3. tablica array of TShape

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