Einzelnen Beitrag anzeigen

neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#3

Re: GDI-Zeichnungen entfernen

  Alt 1. Aug 2003, 08:36
Vielleicht hilft es

Code:
var
  hDC: HDC;  
  hOldFont : HFONT;
  cText : array [0..255] of char;
begin
  hDC := GetDC(ListViewHandle);

  //alte Markierung entfernen
  DeselectColumns;

  //neuen Eintrag Zeichnen
  SetBkColor(hDC, GetSysColor(COLOR_HIGHLIGHT));
  SetTextColor(hDC, GetSysColor(COLOR_HIGHLIGHTTEXT));

  hOldFont := SelectObject(hDC, FhLVFont); // merke Vorgänder
  ListView_GetItemText(ListViewHandle, iItem, iSubItem, cText, 256);
  DrawText(hDC, cText, -1, Rect, DT_CENTER or DT_SINGLELINE or DT_VCENTER);
  FSelCol.iItem := iItem;
  FSelCol.iSubItem := iSubItem;
  FSelCol.Selected := True;

  // ganz wichtig immer aufräümen
  // sonst verliert Windows-Speicher welcher nur durch neustart wieder
  // hergestellt werden kann (Vorsicht bei HBITMAP, HFONT, HBRUSH
  // größten fresser
  SelectObject(hDC, hOldFont);
  ReleaseDC(ListViewHandle, hDC);
end
das sollte gehen

Warum bringst du nicht alles in einer Zeichenroutine unter
ungefähr so
Delphi-Quellcode:
  if Selected then
     begin
       SetTextColor( ????
       SetBkolor( ????
     end
   else
      begin
       SetTextColor( ????
       SetBkolor( ????
     end;

  Zeichen-Funktionen

DeselectItem könnte so aussehen

  FSelCol.Select := false
  Rect := GetSubItemRect(
  InvalidateRect(ListViewHandle, @Rect, true);


SelectItem:

  FSelCol.iItem := iItem;
  FSelCol.iSubItem := iSubItem;
  FSelCol.Selected := True;
  Rect := GetSubItemRect(
  InvalidateRect(ListViewHandle, @Rect, true);
nur ein Vorschlag, denn so lassen sich Änderungen besser verwalten!

[edit=Luckie]Man kann auch mehr als einen Code-Block verwenden. Mfg, Luckie[/edit]
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat