Avatar billede stigc Nybegynder
11. november 2002 - 10:30 Der er 9 kommentarer og
1 løsning

Builder tList

Jeg skal vide lidt om subitems på et TListview.

TListItem  *ListItem;
ListItem = myListView->Items->Add();
ListItem->Caption = "test";
ListItem->SubItems->Add(10);

er det forkert at addere et subitem som er en integer, eller skal man Ansistringe den?

ListItem->SubItems->Add(AnsiString(10));
Avatar billede borrisholt Novice
11. november 2002 - 10:34 #1
du skal konvetere den til en Strend. Prøv etv IntToStr.

Jens B
Avatar billede stigc Nybegynder
11. november 2002 - 10:40 #2
Hvordan kan de så være at koden kører fint, uden AnsiString? Jeg prøver at finde en fejl en bruger har oplevet, og det kunne evt. være dette....
Avatar billede borrisholt Novice
11. november 2002 - 10:47 #3
Så lad mig vende den anderledes ....

Jeg har aldrig oplevet fejl når jeg selv konveterer det til Strenge.

Jens B
Avatar billede borrisholt Novice
11. november 2002 - 10:50 #4
Fede billeder fra Island (By the way)

Jens B
Avatar billede stigc Nybegynder
11. november 2002 - 10:51 #5
borrisholt >> Jeg er nød til at vide om det kan være en fejlkilde....:)
Avatar billede soepro Nybegynder
11. november 2002 - 11:43 #6
Mon ikke det virker, fordi Add() er overloaded, så den også kan tage en integer ? Hvad kommer bliver der vist i dit TListView ?
Avatar billede stigc Nybegynder
11. november 2002 - 11:57 #7
Det bliver vist fint.. Men en bruger har fået en "acces violation.. Read of address 00000000..." osv.. Tænkte der kunne være en pointer fejl i denne forbindelse.

Jeg har ikke kunne finde noge dokumentation der beviser, at den ikke kan kaldes med en integer.
Avatar billede soepro Nybegynder
11. november 2002 - 13:10 #8
SubItems->Add (i virkeligheden TStrings->Add) KAN kaldes med en integer, hvilket må tilskrives implementeringen af AnsiString, idet compileren tror at man kan "caste" (ligesom man kan for simple datatype char -> int -> float) en int til en AnsiString.

SubItems er beregnet til brug når ViewStyle er vsReport, og ignoreres ellers.
Indsættelse af andre værdier, må være beregnet på OwnerDraw, dvs. hvor du selv laver en "Cellrender" funktion til at "tegne" indholdet af item'et.

Der er derfor ingen tvivl om at det er tanken, at du laver IntToStr() i kaldet.

Jeg fandt følgende i on-line hjælpen:
  const char Names[6][2][10] =
  {{"Rubble","Barny"},
    {"Michael", "Johnson"},
    {"Bunny", "Bugs"},
    {"Silver", "HiHo"},
    {"Simpson", "Bart"},
    {"Squirrel", "Rockey"}};

  TListColumn  *NewColumn;
  TListItem  *ListItem;
  TListView  *ListView = new TListView(this);

  ListView->Parent = this;
  ListView->Align = alClient;
  ListView->ViewStyle = vsReport;
  NewColumn = ListView->Columns->Add();
  NewColumn->Caption = "Last";

  NewColumn = ListView->Columns->Add();
  NewColumn->Caption = "First";
  for (int i = 0; i < 6; i++)
  {
    ListItem = ListView->Items->Add();
    ListItem->Caption = Names[i][0];
    ListItem->SubItems->Add(Names[i][1]);
  }
Avatar billede stigc Nybegynder
11. november 2002 - 18:10 #9
soepro >> Har også selv fundet angivet eksempel. Jeg er ikke helt sikker på din konklusion.

Er "ListItem->SubItems->Add(10);" forbudt eller ej?
Avatar billede soepro Nybegynder
12. november 2002 - 08:30 #10
Det er IKKE forbudt - men BØR kun anvendes sammen med Owner-draw, for standard Draw-funktionen kan ikke finde ud af at "tegne" 10, hvorimod den godt kan finde ud at at "tegne" IntToStr(10).

Sidstnævnte er efter min mening den RIGTIGE måde at gøre det på. (Hvis du skal bruge tallet igen, skriver du bare StrToInt(ListView->Items->Item[x]->SubItems[y]);)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester