BCB, Forms, widoczność

dział ogólny

BCB, Forms, widoczność

Nowy postprzez Rafaloos » czwartek, 23 lipca 2009, 16:54

Witam,

Jestem w trakcie tworzenia elektronicznego terminarza.
Mam mały problem.
Może mi ktoś podpowiedzieć jak zmusić dwie rożne formy aby wzajemnie się widziały.
Przykład: mam zadeklarowana gotowa listę:
list<Termin*> lst;
która przechowuje mi obiekty danej klasy.
Na zupełnie innej formie chce mieć buttona, który usuwa mi wybrany element danej listy.
Any ideas?

@down:
Dzięki Szefie, nie zauważyłem :P
Ostatnio edytowano czwartek, 23 lipca 2009, 17:10 przez Rafaloos, łącznie edytowano 1 raz
Jeszcze nie umiem programować ale się uczę..
Peace & Respect :D
Avatar użytkownika
Rafaloos
Bladawiec
Bladawiec
 
Posty: 6
Dołączył(a): piątek, 8 maja 2009, 15:12
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana

Re: BCB, Forms, widoczność

Nowy postprzez Cyfrowy Baron » czwartek, 23 lipca 2009, 17:06

► patrz serwis: Cyfrowy Baron dziaÅ‚: teoria -> przekazywanie obiektów i funkcji pomiÄ™dzy formularzami.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: BCB, Forms, widoczność

Nowy postprzez Rafaloos » czwartek, 23 lipca 2009, 23:46

My next problem is:

Kod: Zaznacz cały
void __fastcall TForm1::Button2Click(TObject *Sender)
{
list<Termin*>::iterator iter2=Form2->lst.begin();
advance (iter2,Form1->ARow_);
iter2=Form2->lst.erase(iter2);
Form2->ile=Form2->lst.size();
Label4->Caption=Form2->ile;

                  int i=0;
                 for(iter2=Form2->lst.begin(); iter2 != Form2->lst.end(); ++iter2){


                        Termin& v= **iter2;
                        Form1->StringGrid1->Cells[0][i]= v.pokaz_date();
                        Form1->StringGrid1->Cells[1][i]= v.pokaz_godz();
                        Form1->StringGrid1->Cells[2][i]= v.napis();
                        i++;

                        }
}


Mam StringGrid'a w ktorym umieszczam sobie elementy(obiekty) mojej listy.
Zrobiłem tego buttona, który rzekomo ma usuwać mi wybrany element tj wskazywany w stringgridzie. Ok i to na pewno robi.
Zrobiłem sobie pętle, która po usunięciu wybranego elementu ( w tym przypadku wiersza w stringgridzie) ma mi zaktualizować, tj wyświetlić aktualna listę obiektów.
Jednak tego nie robi :?
Czy może mi ktoś podpowiedzieć co robię nie tak?

//Edit: Ok, sprawa zalatwiona, jak wspomniałem elementy listy usuwały się OK, ale w StringGridzie nie było tego widać, sprawa prosta:
list<Termin*>::iterator iter2=Form2->lst.begin();
advance (iter2,Form1->ARow_);
iter2=Form2->lst.erase(iter2);
for (int i= 0; i<3; i++)
Form1->StringGrid1->Cells[i][ARow_]= " ";


Wystarczy tylko wyczyścić odpowiedni wiersz.

Cheers
Jeszcze nie umiem programować ale się uczę..
Peace & Respect :D
Avatar użytkownika
Rafaloos
Bladawiec
Bladawiec
 
Posty: 6
Dołączył(a): piątek, 8 maja 2009, 15:12
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana

Re: BCB, Forms, widoczność

Nowy postprzez Witold » piÄ…tek, 24 lipca 2009, 13:29

Rafaloos napisał(a):iter2=Form2->lst.erase(iter2);


Jeżeli dobrze rozumiem, kasujesz element z listy, który jest wskaźnikiem na obiekt który trzeba zwolnić. Zwalniasz go?
Avatar użytkownika
Witold
Konstrukcjonista
Konstrukcjonista
 
Posty: 223
Dołączył(a): piątek, 29 sierpnia 2008, 10:53
PodziÄ™kowaÅ‚ : 1
OtrzymaÅ‚ podziÄ™kowaÅ„: 14
Kompilator: bcb6, Turbo C++ Explorer
    NieznanyNieznana

Re: BCB, Forms, widoczność

Nowy postprzez Rafaloos » piÄ…tek, 24 lipca 2009, 14:01

Chwilowo nie :P
Napisać odpowiednie destruktory to małe piwo, narazie mam inne zmartwienia :)
Jeszcze nie umiem programować ale się uczę..
Peace & Respect :D
Avatar użytkownika
Rafaloos
Bladawiec
Bladawiec
 
Posty: 6
Dołączył(a): piątek, 8 maja 2009, 15:12
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana

Re: BCB, Forms, widoczność

Nowy postprzez banita » piÄ…tek, 24 lipca 2009, 14:42

chyba pomyliles pojecia ;)
Avatar użytkownika
banita
Kreacjusz
Kreacjusz
 
Posty: 283
Dołączył(a): poniedziałek, 28 lipca 2008, 20:07
PodziÄ™kowaÅ‚ : 1
OtrzymaÅ‚ podziÄ™kowaÅ„: 18
System operacyjny: Windows 7 Professional
Kompilator: C++Builder 2010 Update 5,
Delphi 2010 Update 5,
NetBeans 6.9(MinGw + Qt),
Visual Studio 2008 + Qt
Gadu Gadu: 0
    NieznanyNieznana

Re: BCB, Forms, widoczność

Nowy postprzez Rafaloos » piÄ…tek, 24 lipca 2009, 15:06

heh :)

Zastanawiam się teraz jak zrobić sortowanie tej listy wg daty i godziny.
Na mojej liście przechowuje wskaźniki do obiektów, które składają się z:

Kod: Zaznacz cały
class Termin
{
public:
Termin();
Termin(TDateTime data_, TDateTime godz_, AnsiString temat_, AnsiString memo_);
~Termin();

Termin& operator=(const Termin&);
//virtual int podaj ();
virtual AnsiString napis ();
AnsiString pokaz_date ();
AnsiString pokaz_godz ();
AnsiString pokaz_memo();

protected:

TDateTime data;
TDateTime godzina;
AnsiString temat;
AnsiString memo;

};

Dostęp do tych atrybutów mam poprzez odpowiednie metody.
Ma ktoś jakiś pomysł?
Jeszcze nie umiem programować ale się uczę..
Peace & Respect :D
Avatar użytkownika
Rafaloos
Bladawiec
Bladawiec
 
Posty: 6
Dołączył(a): piątek, 8 maja 2009, 15:12
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana

Re: BCB, Forms, widoczność

Nowy postprzez banita » piÄ…tek, 24 lipca 2009, 15:39

http://www.cplusplus.com/reference/stl/list/sort/

jako argument podajesz adres funkcji porownujacej dwa elementy listy. funkcja taka(predykat) zwraca wartos bool.
zamiast zwyklej funkcji mozesz zastosowac obiekt funkcyjny ktore pelni podobne zadanie ale moze miec rozny stan.
obiekt funkcyjny to klasa ktora ma zaimplementowany odpowiedni operator 'operator()'

przykladowy obiekt funkjcyjny pelniacy role predykatku dla funkcji sortujacej:

Kod: Zaznacz cały
template <typename T>
class sortT
{
   private:
   public:
      sortT(){}
      bool operator() (T x, T y) const { return x > y; }
   protected:
};


lub taki:

Kod: Zaznacz cały
template <typename T>
class runTimeCmp
{
   public: enum option {normal, other};
   
   private:
      option mode;
   
   public:
      runTimeCmp(option v=normal): mode(v) {};
   
   bool operator() (const T& temp, const T& temp2) const
   {
      if(mode == normal) return temp < temp2;
      else return temp > temp2;
   }
};
Avatar użytkownika
banita
Kreacjusz
Kreacjusz
 
Posty: 283
Dołączył(a): poniedziałek, 28 lipca 2008, 20:07
PodziÄ™kowaÅ‚ : 1
OtrzymaÅ‚ podziÄ™kowaÅ„: 18
System operacyjny: Windows 7 Professional
Kompilator: C++Builder 2010 Update 5,
Delphi 2010 Update 5,
NetBeans 6.9(MinGw + Qt),
Visual Studio 2008 + Qt
Gadu Gadu: 0
    NieznanyNieznana

Re: BCB, Forms, widoczność

Nowy postprzez Rafaloos » wtorek, 28 lipca 2009, 17:22

Heya,

Uporałem się z tym sortowaniem i wszystko fajnie gdyby to było po dacie i godzinie, a nie tylko po tym pierwszym :(

Kod: Zaznacz cały
bool compa(Termin* a, Termin* b ) {

         Termin& lol1= *a, lol2= *b;
         //lol1= *a;
         //lol2= *b;
   return  lol1.data_() < lol2.data_();
  /* if (lol1.data_() < lol2.data_())
   return true;
  */
   //   && (lol1.godz_() < lol2.godz_())

  //return a > b;
}



a to wywołanie:
Kod: Zaznacz cały
Form2->lst.sort(compa);



ma ktoś może jakiś pomysł jak zrobić po tym i po tym?
próbowałem tak:

Kod: Zaznacz cały
if( (lol1.data_() < lol2.data_()) && (lol1.godz_() < lol2.godz_()) )
return true;



i niby fajnie
ale jakies cyrki sie robia
a nie sortowanie
Jeszcze nie umiem programować ale się uczę..
Peace & Respect :D
Avatar użytkownika
Rafaloos
Bladawiec
Bladawiec
 
Posty: 6
Dołączył(a): piątek, 8 maja 2009, 15:12
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana

Re: BCB, Forms, widoczność

Nowy postprzez banita » wtorek, 28 lipca 2009, 19:35

nie rozumiem juz na cyzm ma polegac to twoje sortowanie. jak po dacie i po godzinie?
rozumiem ze sortujesz np po dacie, jesli daty sa rowne to wtedy porownujemy godziny.

Kod: Zaznacz cały
if(data1 < data2) return true;
else if(data1 == data2)
{
  if(godzina1< godzina2) return true;
  else return false;
}
else return false;
Avatar użytkownika
banita
Kreacjusz
Kreacjusz
 
Posty: 283
Dołączył(a): poniedziałek, 28 lipca 2008, 20:07
PodziÄ™kowaÅ‚ : 1
OtrzymaÅ‚ podziÄ™kowaÅ„: 18
System operacyjny: Windows 7 Professional
Kompilator: C++Builder 2010 Update 5,
Delphi 2010 Update 5,
NetBeans 6.9(MinGw + Qt),
Visual Studio 2008 + Qt
Gadu Gadu: 0
    NieznanyNieznana

Re: BCB, Forms, widoczność

Nowy postprzez Rafaloos » wtorek, 28 lipca 2009, 19:59

Nom o to mi chodziło, a oto moje wypociny:

Kod: Zaznacz cały
bool compa(Termin* a, Termin* b ) {

         Termin& lol1= *a, lol2= *b;
         //lol1= *a;
         //lol2= *b;
   //return  lol1.data_() =< lol2.data_();
  ///*
  if (lol1.data_() < lol2.data_())
    return true;
  else if  (lol1.data_() > lol2.data_())
    return false;
  if (lol1.data_() == lol2.data_()) {
        if(lol1.godz_() < lol2.godz_())
        return true;
        }
        return false;
  //*/
   //   && (lol1.godz_() < lol2.godz_())

  //return a > b;
}


Dziękówa :mrgreen:
Jeszcze nie umiem programować ale się uczę..
Peace & Respect :D
Avatar użytkownika
Rafaloos
Bladawiec
Bladawiec
 
Posty: 6
Dołączył(a): piątek, 8 maja 2009, 15:12
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana


Powrót do Ogólne problemy z programowaniem

Kto przeglÄ…da forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 5 gości