Avatar billede hrc Mester
19. marts 2004 - 16:23 Der er 6 kommentarer og
1 løsning

Checkbokse på en virtuel TListView

Jeg har et TListView (i report-mode) som er virtuel idet OwnerData = true (har en tung liste på 10.000 records som nødvendiggør dette).

Når jeg kører normalt og checkboxes = true, så vises check-boksen som den skal, men når jeg slår OwnerData til, så forsvinder den.

Skal jeg mon forbi OwnerDraw for at få den frem?
Avatar billede bleze Nybegynder
19. marts 2004 - 16:33 #1
I ownerdrawn skal du selv sørge for at tegne...
Avatar billede hrc Mester
19. marts 2004 - 17:41 #2
Der er ikke andre måder? Hader at skulle igang med at tegne på canvas.
Avatar billede doc404 Novice
19. marts 2004 - 20:08 #3
Ellers tag et kig på denne:

http://www.soft-gems.net/VirtualTreeview/VT.php

Den kan næsten også klare kaffen ;-)
Avatar billede borrisholt Novice
20. marts 2004 - 09:35 #4
Fra Online hjælpen :

Specifies whether the list view control is virtual.

Delphi syntax:

property OwnerData: Boolean;

C++ syntax:

__property bool OwnerData = {read=FOwnerData, write=SetOwnerData, default=0};

Description

Set OwnerData to true to specify that the list view is virtual. A virtual list view can contain a huge number of items (specifically, up to a DWORD). However, you must manage the items of a virtual list view using the OnData, OnDataFind, OnDataHint, and OnDataStateChange event handlers. For example, you must explicitly provide a value to a list item’s StateIndex property if it is to display a check box.

When creating a virtual list view, you must set the Count property for the Items to the number of items in the virtual list.

The only information contained in a virtual list view control is the selection and focus information.

To improve the performance of a virtual list view control, cache items for quick retrieval. The OnDataHint event can help optimize retrieval from the cache.

Note:    Virtual list views need not be owner-drawn. The OnData, OnDataFind, OnDataHint, and OnDataStateChange events enable the list view’s default drawing, if desired.


Og måske vi her skulle opfordre bleze til at læse spørgsmålet før han svarer ?

Jens B
Avatar billede borrisholt Novice
20. marts 2004 - 09:57 #5
Kig lidt på hans artikkel den er ikke så dum :
http://planeta-delphi.com/print.php?sid=44
Avatar billede hrc Mester
20. marts 2004 - 20:59 #6
bleze: Ville rigtignok gerne undgå OwnerDraw, sådan som jeg eksplicit angav, men det kan jo være den eneste løsning, så jeg lader dit svar blive stående lidt endnu.

doc404: Den skal jeg kigge på - snarligt (det at den er bygget fra bunden udenom MS's COM'er tiltaler mig). Nu skal jeg bare have brug for et TTreeView - men den kan måske bruges som TListView?

borrisholt: Hvis jeg kører non-virtual og sætter checked=true så dur det fint. I virtual mode viser den caption og subitems fint, men ikke antydningen af en checkbox.
Mht. artiklen - med lille omskrivning: "It's all Polish to me"! Interessant, givetvis, ulæseligt, ja, men det lykkes. Der er desværre ikke noget nyt udover jeg måske endelig ser et fungerende (om end lidt primitivt) eksempel hvordan man bruger OnDataFind. Det måtte godt have været objekter i stedet for records. I mit testprogram har jeg en parallel TObjectList kørende og så ser mit testprograms kode sådan ud:

procedure TfrmMain.lvNamesData(Sender: TObject; Item: TListItem);
var
  Person : TPerson;
begin
  Person := fPersonList[Item.Index];
  if assigned(Person) then
    Person.FillListItem(Item);
end;

og TPerson.FillListItem ser sådan her ud:

procedure TPerson.FillListItem(aListItem: TListItem);
begin
  with aListItem do begin
    SubItems.Clear; // Not really needed as we always add to a new item
    case fSex of
      stUndefined : SubItems.Add('?');
      stMale      : SubItems.Add('Male');
      stFemale    : SubItems.Add('Female');
      stBoth      : SubItems.Add('Male/Female');
    end; // case
    Checked := fVisible; // May have to draw from bottom!
    Data := self; // Prepare Data-property
    Caption := fName; // Fires an OnChange event so if Data's used, have it prepared!
  end; // with
end;
Avatar billede hrc Mester
13. april 2004 - 20:59 #7
Tror jeg lukker spørgsmålet. Beklager bleze, men dit svar løste ikke problemet.
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