Witam, tworze sobie dynamicznie przyciski i do nich podpinam funkcję która ma tworzyć nowe okno. Też dynamicznie. Teraz chciał bym, żeby te okno jakoś było powiązane z konkretnym przyciskiem, aby np gdy niszcze przycisk wiadomo było które okno ma być zniszczone, gdy klikne go drugi raz żeby sprawdzało czy okno już jest czy nie i czy ma utworzyć nowe. Wie ktoś jak to rozwiązać?
mozesz uzyc pola Tag
Hmm a do czego ono słóży? Czy mam szukać sam :P?
DOPISANO
A już chyba wiem. po prostu zwykła liczbe tam można wstawić tak? Takie wolne pole jak by? Czy jeszcze coś innego?
Wielkie dzięki w każdym razie :)
moze byc wskaznik np. dla Buttona do Form a dla Form do Buttona
Super!! Działa właśnie tak jak chciałem :) DZIĘKI
Hmm a jak mam tablicę struktur to da się jeden z jej elementów do tego pola przypisać?
Jak rozmiar mniejszy od rozmiaru int-a to mozesz jak nie to wskaznik.
Paskudne to rozwiazania, lepiej jakies nowe typy sobie porobic.
jak wiadomo adres na systemie 32 bitowym jest to liczba 32 bitowa wiec kazdy adres jaki przechowuje dowolony wskaznik mozna przedstawic jako liczbe:
char *str = "tutaj jest jakis tekst";
int adres = (int)str;
i zmienna adres przechowuje teraz liczbowa reprezentacje adresu wskazujacego lancuch "tutaj jest jakis tekst" i jakbym chcial teraz z powrotem w programie uzyskac dostep do tego tekstu po prostu konwertuje znow reprezentacje liczbowa na konkretyn typ wskaznikowy:
char *tekst = (char*)adres;
odnoszac do Twojego problemu ze struktura czy tablica struktur
mozesz przypisac jej adres do Tag poniewaz tag to liczba 32 bitowa wiec moze go przechowywac a pozniej jak bedziesz chcial uzyskac dostep do tej tablicy struktur zamieniasz sobie ta liczbe na wskaznik do tej tablicy i wszystko ale w sumie takie rozwiazanie sie skrajnie stosuje bo na pewno mozna zrobic to o wiele prosciej.
Tym bardziej ze sa tzw. Parent oraz Owner dzieki ktorym mozna zidentyfikowac jaki obiekt do czego nalezy albo zastosowac po prostu FindComponent i podczas tworzenia dynamicznych Buttonow czy form uzywac pola Name z indeksem liczbowym i pozniej tak tez je sprawdzac sa rozne sposoby
No tak "podpięłem" już okno pod przycisk ale teraz chciał bym jeszcze przyciskowi dać inne właściwości numer nazwisko imię itd. Próbowałem dziedziczyć po klase TSpeedButton ale mam problem z konstruktorem. Da się takie coś wykonać?
Tworzysz sobie klase i w niej np. taki konstruktor.
class TPrzycisk : public TSpeedButton{
public:
AnsiString imie, nazwisko;
__fastcall TPrzycisk(TComponent * Owner,
const AnsiString & imie,
const AnsiString & nazwisko ) :
TSpeedButton(Owner), imie(imie), nazwisko(nazwisko){
}
};
w public klasy okna dajesz sobie np:
public: // User declarations
void __fastcall Klik_klik(TObject *Sender);
TPrzycisk * multum_przyciskow[12];
Gdzies sobie tworzysz przyciski:
for (int i = 0; i < 12; i++){
multum_przyciskow[i] = new TPrzycisk(this, i, i);
multum_przyciskow[i]->Parent = this;
multum_przyciskow[i]->Top = random(300);
multum_przyciskow[i]->Left = random(300);
multum_przyciskow[i]->Caption = i;
multum_przyciskow[i]->OnClick = Klik_klik;
}
Dla sprawdzenia czy wzystko dziala jak powinno mamy metode:
void __fastcall TForm1::Klik_klik(TObject *Sender){
TPrzycisk * p = (TPrzycisk *) Sender;
ShowMessage(p->imie);
}
jak juz konczysz to zwalniasz pamiec i tyle.
Całą reszte wiedziałem chodziło mi o konstruktor. Bardzo dziękuję za odpowiedź :) siadam do kodowania :)...
Mam jeszcze jedno pytanie. Czy tak samo można dziedziczyć formę? Bo jak tak robie to kompiluje się ale podczas jej tworzenia wyskakuje mi błąd i zaznaczą tą linijke w forms.hpp:
inline __fastcall virtual TForm(Classes::TComponent* AOwner) : TCustomForm(AOwner) { }
Kod mojej klasy:
class TRozmowa : public TForm{
public:
TSpeedButton *buton;
__fastcall TRozmowa (TComponent * Owner) : TForm(Owner)
{}
};