Falsche Rückgabe TListView bei Anzahl Spalten SubItems...



  • Hallo

    ein TListView (frm17_lvTabelle) hat 5 Columns (1 Caption, 4 SubItems). Diese lege ich (wie immer) direkt im IDE über Columns an. Dann zeichne ich die TListView mit OwnerDraw selbst. Im Quellcode hole ich mit iAnz= die Anzahl der Subspalten. Was bis jetzt immer funktioniert hat, bringt jetzt immer die Zahl 6; egal ob ich im IDE bei Columns Spalten lösche oder hinzufüge. Habe den Quellcode schon komplett aus dem Projekt entfernt und neu hinzugefügt, die obj. vom Form17 gelöscht usw. Alles ohne Erfolg. Kennt jemand dieses Phänomen? 😕

    void __fastcall TForm17::frm17_lvTabelleDrawItem(TCustomListView *Sender, TListItem *Item, TRect &ARect, TOwnerDrawState State)
    {try {                                                                          // Fehlerroutine Start
     Integer iSymb,iAnz,iB,iStil,iItem,iTage; AnsiString z1,z2;                     // Vars definieren
     TColor f1,f2; TCanvas *ACanvas;                                                // Vars definieren
     TRect CRect;                                                                   // Rect Strukt vorbereiten
     Graphics::TBitmap *bmp;                                                        // Bitmap vorbereiten
    
     TListView   *LView= dynamic_cast<TListView   *>     (Sender);                  // Versuchen, Sender als TListView anzusprechen
    
     z1     =" "+Item->Caption;                                                     // aktuelle Spalte
     iAnz   =Item->SubItems->Count;                                                 // Anzahl Subspalten
     iItem  =Item->Index;                                                           // Index ermitteln
     ACanvas=LView->Canvas;                                                         // Canvas übergeben
     f1     =clWhite;                                                               // Voreinstellung HG in ws
     f2     =clMaroon;                                                              // Textfarbe
     iStil  =DT_LEFT;                                                               // Ausrichtung
    
     Form17->Caption="Anzahl Columns: "+IntToStr(iAnz)+"   Name: "+LView->Name;
    

    Alle anderen Werte stimmen 100%, z.B. der Name mit LView->Name usw.
    Verstehe die Welt nicht mehr... 😞

    Gruss Stefan



  • Hallo

    Bei TListView können sich die Anzahl der angezeigten Spalten des Controls und die Anzahl der Subitems einer Zeile sehr wohl unterscheiden, bzw. bei der Änderung der Anzahl Spalten bleiben beim gleichen Items-Einlesealgo trotzdem die gleichen Subitems.
    Die echte Anzahl Spalten des Controls kannst du mit

    iAnz   = ListView->Columns->Count;
    

    abfragen.

    Form17

    😮 Hast du wirklich 17 Formulare mit Standardnamen? Wie wäre es mit aussagekräftigen Namen?

    bis bald
    akari



  • Die Forms nummeriere ich nach Standardvorgabe durch; der Name der CPP ist dann bei mir eindeutig z.B. Form17 = Termine.cpp

    Ich brauche aber vom Zeileneintrag die SubItems Anzahl, da diese ja variieren kann (eben je Zeile). Die LView->Columns kann von den SubItems Anzahl her abweichen.

    ..und während ich das hier schreibe ist mir auch klar wo der Fehler ist.
    Ich habe in einen anderen CPP nämlich die Subs zuviel anhgehängt (eben mehr als
    die Columns vorhanden sind und daher dann der Fehler) Von daher hat Dein Hinweis mir geholfen, vielen Dank!!!

    Grüsse Stefan



  • Hallo

    Die Forms nummeriere ich nach Standardvorgabe durch; der Name der CPP ist dann bei mir eindeutig z.B. Form17 = Termine.cpp

    Dann würde ich empfehlen auch die Formklasse entsprechend zu benennen, zum Beispiel TTerminForm.

    bis bald
    akari


Anmelden zum Antworten