AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Icon auf Canvas im SubItem zeichnen mit Hintergrundfarbe
Thema durchsuchen
Ansicht
Themen-Optionen

Icon auf Canvas im SubItem zeichnen mit Hintergrundfarbe

Ein Thema von RWarnecke · begonnen am 10. Jun 2012 · letzter Beitrag vom 11. Jun 2012
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#1

Icon auf Canvas im SubItem zeichnen mit Hintergrundfarbe

  Alt 10. Jun 2012, 18:49
Hallo zusammen,

mit der Procedure zeichne ich in einer TAdvListView ein bestimmtes Icon in die 8.Spalte. Das funktioniert auch soweit.
Delphi-Quellcode:
////////////////////////////////////////////////////////////////////////////////
///
/// [Orginal : http://www.delphipraxis.net/1115406-post3.html]
///
procedure TMainForm.AdvLV_OverviewListCustomDrawSubItem(Sender: TCustomListView;
  Item: TListItem; SubItem: Integer; State: TCustomDrawState;
  var DefaultDraw: Boolean);
var
  aRect: TRect;
  aIcon: TIcon;
begin
  if (SubItem = 7) and (AdvToolBarPg_Main.ActivePageIndex = 1) then
  begin
    aIcon:= TIcon.Create;
    try
      DefaultDraw:= False;
      ListView_GetSubItemRect(Sender.Handle,Item.Index,SubItem,LVIR_BOUNDS,@aRect);
      if (TRechnung(RechnungsListe.Items[Item.Index]).Verschickt) and (not TRechnung(RechnungsListe.Items[Item.Index]).Bezahlt) then
        ImgL_SmallImages.GetIcon(11, aIcon)
      else
        if (TRechnung(RechnungsListe.Items[Item.Index]).Verschickt) and (TRechnung(RechnungsListe.Items[Item.Index]).Bezahlt) then
          ImgL_SmallImages.GetIcon(10, aIcon)
        else
          ImgL_SmallImages.GetIcon(12, aIcon);
      Sender.Canvas.Brush.Style := bsDiagCross;
      if Odd(Item.Index) then
        SetBkColor(Sender.Canvas.Handle, ColorToRgb(cl3DLight))
      else
        SetBkColor(Sender.Canvas.Handle, ColorToRgb(clWhite));
      Sender.Canvas.FillRect(aRect);
      Sender.Canvas.Draw(aRect.Left + ((aRect.Right - aRect.Left - aIcon.Width) div 2), aRect.Top, aIcon);
    finally
      aIcon.Free;
    end;
  end;
end;
Meine beiden Probleme seht Ihr in dem angehängten Bild. Ich möchte gerne jede zweite Zeile grau haben und dann jeweils nach Bedingung die entsprechenden Icons. Leider sieht bei mit das grau wie ein Muster aus und ist nicht als durchgängige Farbe. Das zweite Problem, was ich habe ist der Cursorbalken, der in der letzten Spalte nur noch den Rahmen zeigt.

Was muss ich an meinem obenstehenden Quelltext ändern, damit ich die Probleme weg bekomme ?

Bei den anderen Spalten benutze ich die folgende Procedure um jede zweite Zeile grau zu bekommen :
Delphi-Quellcode:
procedure TMainForm.AdvLV_OverviewListCustomDrawItem(Sender: TCustomListView;
  Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
  if Odd(Item.Index) then
    Sender.Canvas.Brush.Color := cl3DLight
  else
    Sender.Canvas.Brush.Color := clWhite;
end;
Kann es sein, dass sich hier etwas nicht verträgt ? Wenn ja, was ?
Miniaturansicht angehängter Grafiken
ownerdraw-problem.jpg  
Rolf Warnecke
App4Mission

Geändert von RWarnecke (10. Jun 2012 um 19:34 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: Icon auf Canvas im SubItem zeichnen mit Hintergrundfarbe

  Alt 10. Jun 2012, 19:14
ich verwende kein ADV... und das Bild scheint zu fehlen, im Code fällt folgendes auf


Zitat:
Leider sieht bei mit das grau wie ein Muster aus und ist nicht als durchgängige Farbe
Sender.Canvas.Brush.Style := bsDiagCross;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#3

AW: Icon auf Canvas im SubItem zeichnen mit Hintergrundfarbe

  Alt 10. Jun 2012, 19:22
Zitat:
Leider sieht bei mit das grau wie ein Muster aus und ist nicht als durchgängige Farbe
Sender.Canvas.Brush.Style := bsDiagCross;
Der Style ist doch auf bsDiagCross gesetzt.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: Icon auf Canvas im SubItem zeichnen mit Hintergrundfarbe

  Alt 10. Jun 2012, 19:26
dann verstehe ich Dich nicht ...
eine durchgängige Farbe würde ich bei bsSolid erwarten
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#5

AW: Icon auf Canvas im SubItem zeichnen mit Hintergrundfarbe

  Alt 10. Jun 2012, 19:35
dann verstehe ich Dich nicht ...
eine durchgängige Farbe würde ich bei bsSolid erwarten
Sorry, ich habe den Anhang vergessen und jetzt im ersten Beitrag angehängt. Dieses Bild zeigt das Problem.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Icon auf Canvas im SubItem zeichnen mit Hintergrundfarbe

  Alt 10. Jun 2012, 23:36
Leider sieht bei mit das grau wie ein Muster aus und ist nicht als durchgängige Farbe.
Sender.Canvas.Brush.Style := bsDiagCross;
Was erwartest du, wenn du dem System mitteilst: "Mach ma so diagonale Kreuze als Muster da mit rein"?

Änder das mal - wie Bummi schon versucht hat dir mitzuteilen - auf bsSolid ab.

Und dann sagst du dem System auch noch, dass in der Spalte mit dem Icon kein DefaultDraw gemacht werden soll. Ok, aber wann und wo zeichnet das System wohl diesen CursorBalken? Im DefaultDraw?
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#7

AW: Icon auf Canvas im SubItem zeichnen mit Hintergrundfarbe

  Alt 11. Jun 2012, 03:21
Hallo Sir Rufo,

dann hatte ich Bummi mit dem bsSolid falsch verstanden. Habe den Style jetzt mal mit bsSolid probiert und den Wert DefaultDraw auf True gesetzt. Dann bekomme ich das Ergebnis aus dem Anhang. Ich bekomme jetzt nur das Icon angezeigt, wenn der Eintrag in der Listview auch markiert ist. Selbst dann wird der blaue Markierungbalken nicht durchgängig gezeichnet. Das zweite Problem was auftritt ist, dass beim runterscrollen des blauen Balkens die Einträge in den anderen Spalten mit einem schwarzen Kasten dargestellt werden (s. Anhang).
Miniaturansicht angehängter Grafiken
ownerdraw-problem-2.jpg  
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Icon auf Canvas im SubItem zeichnen mit Hintergrundfarbe

  Alt 11. Jun 2012, 05:39
Das waren ja auch nur die direkten Antworten auf die Fragen warum das so ist

Du musst halt auch auswerten ob die aktuelle Zeile/Zelle ausgewählt ist und darauf in deinem OnPaint reagieren.

Ein Beispiel findest du hier http://www.delphipraxis.net/1128926-post35.html
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#9

AW: Icon auf Canvas im SubItem zeichnen mit Hintergrundfarbe

  Alt 11. Jun 2012, 06:08
Das waren ja auch nur die direkten Antworten auf die Fragen warum das so ist
Ich habe ja auch nur versucht Deine Hinweise entsprechend umzusetzen in verschiedenen Kombinationen. Leider hat aber keine der Kombinationen zum Erfolg geführt.


Du musst halt auch auswerten ob die aktuelle Zeile/Zelle ausgewählt ist und darauf in deinem OnPaint reagieren.

Ein Beispiel findest du hier http://www.delphipraxis.net/1128926-post35.html
Das Beispiel ist aus meiner Sicht doch nicht vergleichbar. Ich benutze die TAdvListview und nicht ein Grid. Ich verstehe noch nicht, wie mir das weiterhelfen soll.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

AW: Icon auf Canvas im SubItem zeichnen mit Hintergrundfarbe

  Alt 11. Jun 2012, 11:26
Weil das AdvGrid ähnlich tickt wie das normale Grid. Auch dort gibt es eine DefaultPaint Methode.
Und wenn du eine Zeile gemalt haben möchtest, so wie die default gezeichnt wird, dann musst du dieses eben komplett selber implementieren oder eben geschickt übrgeben.

Das Beispiel von mir zeigt dir, wie das beim normalen Grid geht.

Beim AdvGrid kann ich nicht direkt weiterhelfen, da ich mich von den TMS vor einiger Zeit verabschiedet habe.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz