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. ]


Anmelden zum Antworten