Results 1 to 5 of 5

Thread: listview Ondrawsubitem geeft na image alle tekst bold

  1. #1
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,531

    listview Ondrawsubitem geeft na image alle tekst bold

    Zonder subitemdraw ziet alles er goed uit. Echter wordt alle tekst na gebruik van een image bold afgedrukt.
    Click image for larger version. 

Name:	listview_image.png 
Views:	35 
Size:	64.0 KB 
ID:	7878
    Ik weet niet waarom. Ik gebruik verder geen fontselectie Ondanks de fontstyle leeg te maken, komt de tekst na de ownerdraw terug als bold.

    Heeft iemand enig idee hoe ik dat moet oplossen?

    Delphi Code:
    1. procedure TFrmBasisGrootboeknummers.ListView1CustomDrawSubItem(
    2.   Sender: TCustomListView; Item: TListItem; SubItem: Integer;
    3.   State: TCustomDrawState; var DefaultDraw: Boolean);
    4. var aRect : TRect;
    5.     iWidth, X : smallint;
    6.     Bmp : TBitmap;
    7. begin
    8.   if (subitem=4)  then
    9.   begin
    10.     Bmp := TBitmap.Create;
    11.     try
    12.       if item.SubItems[subitem - 1] = 'A' then
    13.         LVImagelist.GetBitmap(0, Bmp)
    14.       else
    15.         LVImagelist.GetBitmap(1, Bmp);
    16.       aRect:=Item.DisplayRect(drBounds);
    17.       iWidth := 0;
    18.       For X := 0 to 3 do
    19.         iWidth := iWidth + listview1.Column[X].Width;
    20.       Sender.Canvas.Draw(aRect.Left + iWidth - 2, aRect.Top, Bmp);
    21.       Sender.Canvas.Font.Style := [];
    22.     finally
    23.       bmp.Free;
    24.     end;
    25.     DefaultDraw:=False;
    26.   end;
    27. end;
    Delphi is great. Lazarus is more powerfull

  2. #2
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,531
    Het lijkt er op dat alle tekst 2 keer wordt afgedrukt. Het heeft dus te maken met de defaultdraw. Maar ik zie nog niet de oplossing.
    Last edited by jkuiper; 25-Jan-19 at 12:15.
    Delphi is great. Lazarus is more powerfull

  3. #3
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,531
    Oplossing. Laat alle tekst van de subitems door textout in de listview afdrukken. Vervolgens defaultdraw op false zetten.
    Vervolgens je afbeelding laten afdrukken als het nodig is. Voor alle andere subitems in de else van de if dit toepassen:
    Delphi Code:
    1. aRect:=Item.DisplayRect(drBounds);
    2.       iWidth := 0;
    3.       For X := 0 to subitem - 1 do
    4.         iWidth := iWidth + listview1.Column[X].Width;
    5.       Sender.Canvas.TextOut(aRect.Left + iWidth + 5, aRect.Top, item.SubItems[subitem - 1]);
    Ik snap alleen niet waarom je niet de column width, zoals en een grid, kan uitlezen.

    Mocht er een betere oplossing zijn, hou ik mij aanbevolen.
    Delphi is great. Lazarus is more powerfull

  4. #4
    Quote Originally Posted by jkuiper View Post
    Het heeft dus te maken met de defaultdraw. Maar ik zie nog niet de oplossing.
    Ik weet niet precies waar je dat op baseert, maar wellicht dat de waarde van DefaultDraw wordt vastgehouden. In dat geval zou de oplossing zijn om deze op True te zetten aan het begin van de event handler, zodat ie alleen False is voor subitem 4, en niet voor de kolommen die erna komen.

    Ik zou alleen verwachten dat als DefaultDraw false is, en je niets doet in je event, dat er dan geen tekst getekend wordt, i.p.v. twee keer...
    1+1=b

  5. #5
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,531
    Ik heb gespeeld met die vlag, maar op een of andere manier wordt toch twee keer tekst geplaatst. Op optie false print alleen wat op dat moment wordt opgegeven (tekst / afbeelding). Ik heb niet gecontroleerd, maar zover ik weet krijgt defaultdraw telkens de waarde true.

    Het kan een ding zijn in D10.3 en niet in eerdere versies.
    Delphi is great. Lazarus is more powerfull

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •