Avatar billede vint Nybegynder
19. april 2008 - 00:37 Der er 4 kommentarer og
1 løsning

Hvilken komponent - evt. hjælp til StringGrid

Jeg skal på en form vise en række data fordelt i 3 kolonner.

Første kolonne er tallene fra 1-20.
Anden kolonne er nogle intervaller, jeg har angivet i forrige skærmbillede
Tredje kolonne er nogle resultater Beregnet ud fra intervallerne angivet i forrige skærmbillede.

Spørgsmålet er nu, hvilken komponent, der vil være mest velegnet. Det skal være read-only. Jeg havde tænkt mig en StringGrid, men synes ikke, at jeg kan komme af med, at man kan "markere" i den.

Vil i alligevel foreslå en StringGrid har i så en løsning til nævnte problem med denne?
Avatar billede kroning Nybegynder
19. april 2008 - 09:16 #1
Brug TListView
Avatar billede hrc Mester
19. april 2008 - 22:32 #2
Hvis du ikke kender den er kan det lette lidt at vide at du skal sætte den i report-mode og at et TListItem er nedarvet fra TCollectionItem. Det betyder at for at lave en linje skriver du:

  ListItem := TListView1.Items.Add;
  ListItem.Caption := 'Hello'; // Første kolonne
  ListItem.SubItems.Add('world'); // Anden kolonne

Hvis du har et objekt du gerne vil have koblet på linjen har TListItem også en bekvem .Data property.

  ListItem.Data := MyObject;

Det er meget almindeligt at koble objektet på så man ikke skal lede efter det når der klikkes på linjen. I TListView.OnSelectedItem kan man hente det direkte i Item.Data

Hvis det er mange records der skal i listen skal du huske følgende:

  var
    ListItem: TListItem;
  begin
    ListItem1.Items.BeginUpdate;
    try
      ListItem1.Items.Clear;
      for i := 0 to Count - 1 do
      begin
        ListItem := ListItem1.Items.Add;
        ListItem.Caption ...
      end;
    finally
      ListView1.Items.EndUpdate;
    end;
  end;

Men, hvis mange records er rigtig mange - for et TListView er det allerede > 2000 - er det smartere at bruge en virtuel liste da ydelsen bliver ret dårlig. Jeg har beskrevet det andetsteds. Er det situationen skal jeg gerne hjælpe med at finde indslaget.
Avatar billede vint Nybegynder
20. april 2008 - 19:05 #3
tak Kroning og hrc.

hrc => Vil du smide et svar for din hjælp?
Avatar billede hrc Mester
21. april 2008 - 07:50 #4
ok
Avatar billede js_delphi Nybegynder
21. april 2008 - 08:26 #5
Med foelgende kode fjerner du markeringen i en StringGrid:
StringGrid1.Selection := TGridRect(Rect(-1,-1,-1,-1));
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