sazian Napisano Sierpień 27, 2007 Zgłoś Share Napisano Sierpień 27, 2007 stworzyłem sobie prostą klasę o nazwie TZaklatka na bazie komponentu TSpeedButton w tej klasie dodałem drugi komponent TSpeedButton o nazwie p po kliknięciu na przycisk(p), cały komponent (TZaklatka) ma zostać zniszczony (wywołanie procedury Free) i usunięty z listy(TList) i wszystko nawet działa tylko że nie zawsze <_>czasem działa poprawnie a czasem wyskakuje piękny błąd a oto fragmenty kodu TZaklatka = class(TSpeedButton) p: TSpeedButton; fu[]^ [ĘN[XX]JSćW#D6ćVBfW'&FS&6VGW&RFVĆWFR6VćFW#D&(ą(Ń(ŃŃ(( constructor tzaklatka.Create(AOwner: TComponent); begin i]YHYY]X]J[N]HYNvĆDg&fĆRb33ć&b33vGFŁ#!Ą(Q(= ąŹąŃ(((ion := ''; Height := 25; end; procedure Tzaklatka[]J[X NY[YNLK[]J[^ ŚVćC&6VGW&RDf&ÓćFVĆWFRćFWFVvW\"f Ł)(ąąŃĄ((Ńźist.Count - 1 do begin TZaklatka(list.Items[j]).LeftHZ]J][JK]^ Z]J]V5śFWBb33b33GF7G\"b33b33ŹQiąŃĄą%Ńmt]Ń(QiąŃĄątems[j]).index := j; end; end; procedura jest na TForm1 żebym mógł wygodniej testować program i co ciekawe przy zewnętrznym(czyli poza tym komponentem) wywołaniu zawsze działa poprawnie Link do komentarza Udostępnij na innych stronach More sharing options...
KKKas Napisano Sierpień 27, 2007 Zgłoś Share Napisano Sierpień 27, 2007 E, może najpierw naucz się formatować kod ;-) ҉ Link do komentarza Udostępnij na innych stronach More sharing options...
sazian Napisano Sierpień 27, 2007 Autor Zgłoś Share Napisano Sierpień 27, 2007 nie no KKKas naprawdę bardzo pomocna odpowiedz tylko że ja chciałem się dowiedzieć dlaczego (czasem) mi ten błąd wyskakuje i ewentualnie jak to naprawić a poza tym co ty masz do mojego formatowania kodu ?? przecież jest bardzo czytelne Link do komentarza Udostępnij na innych stronach More sharing options...
KKKas Napisano Sierpień 27, 2007 Zgłoś Share Napisano Sierpień 27, 2007 nie no KKKas naprawdę bardzo pomocna odpowiedz tylko że ja chciałem się dowiedzieć dlaczego (czasem) mi ten błąd wyskakuje i ewentualnie jak to naprawić a poza tym co ty masz do mojego formatowania kodu ?? przecież jest bardzo czytelne Chętnie bym Ci pomógł, ale przy takich losowych wcięciach nie mogę odczytać kodu. Tutaj masz opis Borlanda jak powinno się formatować kod: http://dn.codegear.com/article/10280 ҉ Link do komentarza Udostępnij na innych stronach More sharing options...
Force Napisano Sierpień 27, 2007 Zgłoś Share Napisano Sierpień 27, 2007 Dla mnie ten sposób formatowania jest okropny, trudno wyodrębnić jakąś strukturę kodu, aż strach pomyśleć co się dzieje gdy masz 6 razy zagnieżdżone beginy i pętle. Dla mnie dziwna jest ta zakładka, dziedziczy po TSpeedButton i sama ma go w sobie. Kiedy zwalniasz p z TZakladka? I Sposób użycia TList jest dla mnie dziwny, przecież tam wrzuca się Pointery Baza tysięcy lotnisk: http://airportsbase.com Link do komentarza Udostępnij na innych stronach More sharing options...
sazian Napisano Sierpień 27, 2007 Autor Zgłoś Share Napisano Sierpień 27, 2007 CYTAT(Force @ pon, 27 sie 2007 - 20:25) Kiedy zwalniasz p z TZakladka? no i tu jest problem gdy probuje zwolnić "p" to zawsze krzyczy błędem próbowałem tutaj Tzaklatka.delete i w destruktorze Tzaklatka'ki I Sposób użycia TList jest dla mnie dziwny, przecież tam wrzuca się Pointery też sie zdziwiłem, ale działa Link do komentarza Udostępnij na innych stronach More sharing options...
Nvm Napisano Sierpień 27, 2007 Zgłoś Share Napisano Sierpień 27, 2007 też sie zdziwiłem, ale działa Jak widać nie do końca Link do komentarza Udostępnij na innych stronach More sharing options...
sazian Napisano Sierpień 27, 2007 Autor Zgłoś Share Napisano Sierpień 27, 2007 no dobra wyrażę się inaczej To akurat działa Link do komentarza Udostępnij na innych stronach More sharing options...
Force Napisano Sierpień 27, 2007 Zgłoś Share Napisano Sierpień 27, 2007 Zależy co wrzucasz do listy, a raczej jak wrzucasz. Tu akurat masz bardzo śliską sprawę Baza tysięcy lotnisk: http://airportsbase.com Link do komentarza Udostępnij na innych stronach More sharing options...
sazian Napisano Sierpień 27, 2007 Autor Zgłoś Share Napisano Sierpień 27, 2007 skoro twierdzisz że to ma znaczenie z := Tzaklatka.Create(panel2); z.Parent := panel2; z.[H[[[^H[[^ĆVgBŁs6WEFWBb33ś'WGF#b33GFŃĄą (Ź]Ń(ąĄ(^'jŹi(ui' procedure TForm1.Button2Click(Sender: TObject); begin tza]J][[ Y]K^ WJKYN[]JBVFCFWBŚVćC to wszystkie zakładki posłusznie znikają ------------------ ostatnio zauważyłem że tylko obiekty które początkowo znajdują się na 3 pierwszych miejscach listy wywołują błąd Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Sierpień 27, 2007 Zgłoś Share Napisano Sierpień 27, 2007 jak ustawuiasz parenta to komponenty dodaja sie do jego listy. Gdy parent ginie to niszczy swoje dzieci. W efekcie nastepuje podwojne kasowanie jednego elementu. Najpierw ty niszczysz w destruktorze a pozniej robi to parent. Takie jest moje zdanie, ale zaznaczam ze na kod zerknalem tylko pobierznie bo jest obrzydliwy. Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
sazian Napisano Sierpień 27, 2007 Autor Zgłoś Share Napisano Sierpień 27, 2007 ale zaznaczam ze na kod zerknalem tylko pobierznie bo jest obrzydliwy. nikt nie chce czytać mojego kodu, będę płakał a tak na serio czyli jeśli dobrze zrozumiałem najpierw mam zwolnić rodzica przez parent:=nil; a później wywołać procedurę free ?? bo jeśli tak to nie pomogło jak sazian skopie kod to nic nie pomoże PS. co wy chcecie od mojego kodu ?? Link do komentarza Udostępnij na innych stronach More sharing options...
Brainer Napisano Sierpień 27, 2007 Zgłoś Share Napisano Sierpień 27, 2007 PS. co wy chcecie od mojego kodu ?? Polecam plik, który zamieściłem. DelFor.zip .: Brainer :. patrick.nusbaum@gmail.com Link do komentarza Udostępnij na innych stronach More sharing options...
sazian Napisano Sierpień 27, 2007 Autor Zgłoś Share Napisano Sierpień 27, 2007 proszę bardzo kod przerobiony jeśli to ma w czymś pomóc Link do komentarza Udostępnij na innych stronach More sharing options...
Brainer Napisano Sierpień 27, 2007 Zgłoś Share Napisano Sierpień 27, 2007 proszę bardzo kod przerobiony jeśli to ma w czymś pomóc Gdzie ten kod, bo nie widzę. .: Brainer :. patrick.nusbaum@gmail.com Link do komentarza Udostępnij na innych stronach More sharing options...
KKKas Napisano Sierpień 27, 2007 Zgłoś Share Napisano Sierpień 27, 2007 Gdzie ten kod, bo nie widzę. Zedytował pierwszego posta. ҉ Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Sierpień 27, 2007 Zgłoś Share Napisano Sierpień 27, 2007 juz lepiej, ok popatrzmy..... w constructor tzaklatka.Create(AOwner: TComponent); tworzysz SpeedButona ktorego rodzicem bedzie twoj komponent, o ile sie nie myle jesli cos zniszczy twoj komponent to po wejsciu do inherited z destruktora zostanie wywolane niszczenie na twoim speed butonie teraz w: procedure Tzaklatka.delete(Sender: TObject); kasujesz obiekt na ktorym wykonujesz delete ? bo wywolanie samego free domyslnie bedzie na self.free.... czy to jest zamierzone ? jesli tak to strasznie dziwne ogolnie ten kod jest od d*** strony robiony... Napisz moze jaka funkcjonalnosc chciales uzyskac bo zwatpilem jak to przeanalizowalem... Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
KKKas Napisano Sierpień 27, 2007 Zgłoś Share Napisano Sierpień 27, 2007 procedure Tzaklatka.delete(Sender: TObject); begin Free; LK[]J[^ N[ Najpierw zwalniasz objekt (Free), a później odwołujesz się do jego właściwości (Index). Prawdopodobnie przez to masz AV. Tego odwołania do formy w klasie to nawet nie próbuję zrozumiec ;-) Btw. Nie ma to jak klasa z ortem, heh. ҉ Link do komentarza Udostępnij na innych stronach More sharing options...
Brainer Napisano Sierpień 27, 2007 Zgłoś Share Napisano Sierpień 27, 2007 ogolnie ten kod jest od d*** strony robiony... Napisz moze jaka funkcjonalnosc chciales uzyskac bo zwatpilem jak to przeanalizowalem... Mi się też tak wydaje. Ja zrobiłbym to trochę inaczej. Przede wszystkim kosmetyczne zmiany: TZaklatka = class(TSpeedButton) public { Public declaratiBYY][^[Y^[\067G'V7F\"7&VFRvćW#D6ćVBfW'&FSgVćŃMŃQĄLMŃMŃ(ąŃĄMObject); end; +kjzĄśŚzzZaYHZ]K[]J[X NY[YNf&ÓćFVĆWFRćFWŚVćC:'ęh)iźvę)dĄŹśśu--źśźm\",ĘŁĄhZx3jŚvZŚ)9Ą)ĄŃŃ( Ja osobiście tak zrobiłbym. Przy okazji, zmień nazwę tej klasy na TZakladka. .: Brainer :. patrick.nusbaum@gmail.com Link do komentarza Udostępnij na innych stronach More sharing options...
sazian Napisano Sierpień 27, 2007 Autor Zgłoś Share Napisano Sierpień 27, 2007 FreeAndNil(p); inherited Destroy(); vĄŚ)ąŃĄ)( a ten błąd był spowodowany tym że próbowałem już chyba dosłownie wszystkiego i przerabiałem to we wszystkie strony efekt ciągle jest ten sam Napisz moze jaka funkcjonalnosc chciales uzyskac bo zwatpilem jak to przeanalizowalem... chce żeby utworzyły się 2 komponenty TSpeedButton po naciśnięciu jednego z nich (tego o nazwie p) cały komponent ma zostać zniszczony Link do komentarza Udostępnij na innych stronach More sharing options...
Brainer Napisano Sierpień 27, 2007 Zgłoś Share Napisano Sierpień 27, 2007 chce żeby utworzyły się 2 komponenty TSpeedButtonpo naciśnięciu jednego z nich (tego o nazwie p) cały komponent ma zostać zniszczony To może spróbuj podpiać procedurę, która niszczy oba komponenty pod p.OnClick? .: Brainer :. patrick.nusbaum@gmail.com Link do komentarza Udostępnij na innych stronach More sharing options...
sazian Napisano Sierpień 27, 2007 Autor Zgłoś Share Napisano Sierpień 27, 2007 tak właśnie robie kod po drobnych przeróbkach TZakladka = class(TSpeedButton) public p: TSpeedBut[^[Y^[YHEFWB37G&ćr67G'V7F\"7&VFRvćW#D6ćVB(ąŃĄMQ=(()structor tzakladka.Create(AOwner: TComponent); begin inher]YHYY]X]J[N]HYNvĆDg&fĆRb33ć&b33vGFŁ#Ą(Q(= ąŹąŃźź3;!!!!! caption := ''; HeigHN[YHZYK[]J[X Nf ŁFVvW#Ś&VvĆ7BFVĆWFRćFWrŁfŃźą ź((QiąĄą%Ń[j]).Left := w; TZakladka(list.Items[j]).setText(TZakladJ][JK^ NĘ N [H NĘI3rŁrEŚśĆFśĆ7BFV5śvGFEŚśĆĄą%Ńmt(((()( Link do komentarza Udostępnij na innych stronach More sharing options...
Brainer Napisano Sierpień 27, 2007 Zgłoś Share Napisano Sierpień 27, 2007 Zdaje się, że teraz to będzie działać. Chociaż ja jeszcze poprawiłbym dwie rzeczy: 1.) for j := 0 to list.Count - 1 do jŹiźŚzZaH[LHżmŚ(QiąĄą%Ńmt1(QiąĄątems[j]).setText(TZakladka(list.Items[j]).text + '(Ǝ [H NĘINĘNH ZYJ^V5śvGFEŚśĆFśĆ7BFV5śććFWŁŁĘł:hŚ,śŚ+ui' list[j] Do reszty nie mogę się przyczepić. .: Brainer :. patrick.nusbaum@gmail.com Link do komentarza Udostępnij na innych stronach More sharing options...
sazian Napisano Sierpień 27, 2007 Autor Zgłoś Share Napisano Sierpień 27, 2007 jak zamieniłem tą pętle to efekt był taki sam tylko że odwrotny to znaczy normalnie błąd wyskakuje przy 3 pierwszych a teraz przy 3 ostatnich Link do komentarza Udostępnij na innych stronach More sharing options...
Brainer Napisano Sierpień 27, 2007 Zgłoś Share Napisano Sierpień 27, 2007 Nie wiem, czy to coś mogłoby pomóc, ale spróbuj dopisać to: protected { Protected declarations } procedure Notifica[P[[][][NY&6VGW&REŚśĆFśćFf6F6ćVCD6ćVCŃQ=Ń)(Ą=ŃI(AComponent = p) then p := nil; end; .: Brainer :. patrick.nusbaum@gmail.com Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.