Problem mit Handle zur Darstellung von TListView
-
Habe mir eine Klasse geschrieben in der ich zur Laufzeit ein TListView-Object
anlege. Da diese Klasse aber kein Formular besitzt muss ich dem ListView-Object
ja sagen auf welchen Formular ich es darstellen möchte. Jetzt habe ich in meiner
MainKlasse (mit Formular) ein Handle vom Typ HWND erzeugt und an die Klasse, in der ich das ListView - Object erzeuge übergeben. Das funzt aber leider nicht.
Habe die Klasse in der ich das ListView-Object erzeuge mitangefügt !
Vielleicht hat ja einer ne Idee :
Vielen Dank//--------------------------------------------------------------------------- /* * Example einer Standart C++ - VCL - Class !! * */ //--------------------------------------------------------------------------- #pragma hdrstop #include "list_view.h" //--------------------------------------------------------------------------- #pragma package(smart_init) //--------------------------------------------------------------------------- //Constructor __fastcall TListView_::TListView_(HWND Handle) { //Merke ParentHandle //ParentHandle ist im h-File deklariert -> HWND ParentHandle ParentHandle = Handle; } //Destructor __fastcall TListView_::~TListView_() { } //--------------------------------------------------------------------------- //------------ Definition der extern Fkt InstallListView -------------------- //--------------------------------------------------------------------------- void __fastcall TListView_::InstallListView(const int anz_item, const int anz_column, const TStringList *CaptionList, const TStringList *InitZeichen) { static const Trace error(__FILE__,__FUNC__); try { //Abbruchkriterien !! if(anz_item EQ 0) error.exception(__LINE__,TRACE::BAD_PARAM_1); if(anz_column NE CaptionList->Count AND anz_column NE InitZeichen->Count) error.exception(__LINE__,TRACE::BAD_PARAM_2); //Merke global MaxItem und MaxColumn vom ListView ListViewMaxItem = anz_item; ListViewMaxColumn = anz_column; //General ListView-Layout ListView = new TListView(ParentHandle); //ListView->Parent = ParentHandle; //hier mosert der Compiler (falscher Typ) ListView->Align = alTop; ListView->ViewStyle = vsReport; //Generate Column for(int i = 0; i LT anz_column; i++) { ListColumn = ListView->Columns->Add(); ListColumn->Caption = CaptionList->Strings[i]; //Column->AutoSize ListColumn->Width = -2; } //Generate Items + Inhalt for(int i = 0; i LT anz_item; i++) { ListItem = ListView->Items->Add(); ListItem->Caption = InitZeichen->Strings[0]; for(int j = 1; j LT anz_column; j++) { ListItem->SubItems->Add(InitZeichen->Strings[j]); } } } catch(...) { trace_error(__FILE__,__LINE__); } } //Code aus der MainKlasse void __fastcall TMainBox::FormShow(TObject *Sender) { try { ListView_ = new TListView_(Handle); //Handle ist Definiert in der Klasse TMainBox als HWND Handle; //Generierung des Layouts fuer TListView (dynamisch) ListView_->CaptionList = new TStringList(); ListView_->CaptionList->Add("channel"); ListView_->CaptionList->Add("dst_name"); ListView_->CaptionList->Add("dst_ip"); ListView_->CaptionList->Add("sip_dst_port"); ListView_->CaptionList->Add("rtp_dst_port"); ListView_->CaptionList->Add("status"); ListView_->CaptionList->Add("payload_type"); ListView_->InitZeichen = new TStringList(); ListView_->InitZeichen->Add("1"); ListView_->InitZeichen->Add("-"); ListView_->InitZeichen->Add("-"); ListView_->InitZeichen->Add("-"); ListView_->InitZeichen->Add("-"); ListView_->InitZeichen->Add("-"); ListView_->InitZeichen->Add("-"); ListView_->InstallListView(1,7,ListView_->CaptionList,ListView_->InitZeichen); } catch(...) { } } //---------------------------------------------------------------------------
Edit:
Bitte die Code-Tags benutzen. Danke![ Dieser Beitrag wurde am 16.01.2003 um 13:02 Uhr von Jansen editiert. ]
-
Habe so glaube ich selber eine Lösung gefunden !
Mache die Initialisierung der ListView Objektes jetzt im Konstruktor der
Klasse TListView_ !//--------------------------------------------------------------------------- //Constructor __fastcall TListView_::TListView_(HWND Handle, TForm *form) { ListView = new TListView(Handle); ListView->Parent = form; //Das fluppt auf jeden Fall } //Destructor __fastcall TListView_::~TListView_() { } //--------------------------------------------------------------------------- //------------ Definition der extern Fkt InstallListView -------------------- //--------------------------------------------------------------------------- void __fastcall TListView_::InstallListView(const int anz_item, const int anz_column, const TStringList *CaptionList, const TStringList *InitZeichen) { try { //Merke global MaxItem und MaxColumn vom ListView ListViewMaxItem = anz_item; ListViewMaxColumn = anz_column; ListView->Align = alTop; ListView->ViewStyle = vsReport; usw. ....
Trotzdem hätte ich noch ganz gerne gewusst, warum die Anweisung
//General ListView-Layout ListView = new TListView(Handle); ListView->Parent = Handle; //<- Anweisung
nich funktioniert .
Wo ist eigentlich der Unterschied zwischen einem Handle vom Typ HWND
und einem Pointer TForm *Form. Das habe ich nicht verstanden !!!Vielen Dank Bis denne....
<edit>Bitte Code-Tags benutzen! (Zum wiederholten male!)</edit>
[ Dieser Beitrag wurde am 20.01.2003 um 14:26 Uhr von junix editiert. ]