AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

GDI-Zeichnungen entfernen

Ein Thema von Chewie · begonnen am 20. Jul 2003 · letzter Beitrag vom 1. Aug 2003
 
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#1

GDI-Zeichnungen entfernen

  Alt 20. Jul 2003, 12:53
Ich bastele gerade mit der GDI herum, komme aber jetzt nicht weiter.
Ich zeichne um die Spalten eines Report-Listviews einen Markierungsrahmen. Oder besser gesagt, ich zeichne die an die Position der Spalte via DrawText den Text der Spalte mit der Hintergrundfarbe COLOR_HIGHLIGHT. Um die Spalte wieder zu deselektieren, habe ich versucht, den Text nit Standard-Hintergrund und -schriftfarbe an die gleuiche Stelle zeichnen. Aber das klappt nicht.
Folgendermaßen sieht der Code zum Zeichnen der Markierung aus:

Delphi-Quellcode:
procedure THexListView.ColDrawRoutine(Rect: TRect; iItem, iSubItem: Integer);
var
  LVDC: HDC;
  lpText: String[255];
  TextLen: Integer;
begin
  LVDC := GetDC(ListViewHandle);

  //alte Markierung entfernen
  DeselectColumns;

  //neuen Eintrag Zeichnen
  SetBkColor(LVDC, GetSysColor(COLOR_HIGHLIGHT));
  SetTextColor(LVDC, RGB($FF, $FF, $FF));
  SelectObject(LVDC, FhLVFont);
  TextLen := 255;
  lpText := StringOfChar(#0, TextLen);
  ListView_GetItemText(ListViewHandle, iItem, iSubItem, @lpText[1], TextLen);
  DrawText(LVDC, @lpText[1], -1, Rect, DT_CENTER or DT_SINGLELINE or DT_VCENTER);
  FSelCol.iItem := iItem;
  FSelCol.iSubItem := iSubItem;
  FSelCol.Selected := True;

  ReleaseDC(ListViewHandle, LVDC);
end;
Und so versuche ich, die Markierung wieder zu entfernen:
Delphi-Quellcode:
procedure THexListView.DeselectColumns;
var
  LVDC: HDC;
  lpText: String[255];
  TextLen: Integer;
  Rect: TRect;
begin
  //stoppen, falls nichts markiert ist
  if not FSelCol.Selected then Exit;

  LVDC := GetDC(ListViewHandle);

  //Device Context modifizieren
  SetBkColor(LVDC, ListView_GetTextBkColor(ListViewHandle));
  SetTextColor(LVDC, ListView_GetTextBkColor(ListViewHandle));
  SetBkColor(LVDC, GetSysColor(COLOR_HIGHLIGHT));
  SetTextColor(LVDC, RGB($FF, $FF, $FF));
  SelectObject(LVDC, FhLVFont);

  //zeichnen
  TextLen := 255;
  lpText := StringOfChar(#0, TextLen);
  Rect := GetSubItemRect(FSelCol.iItem, FSelCol.iSubItem)^;
  ListView_GetItemText(ListViewHandle, FSelCol.iItem, FSelCol.iSubItem, @lpText[1], TextLen);
  DrawText(LVDC, @lpText[1], -1, Rect,
    DT_CENTER or DT_SINGLELINE or DT_VCENTER);

  FSelCol.Selected := False;

  ReleaseDC(ListViewHandle, LVDC);
end;
Leider wird in der zweiten Prozedur nichts gezeichnet.

Die zweite Möglichkeit wäre, eigentlich die bessere, alle selbst gezeichneten Elemente zu entfernen. Geht das irgendwie?
Die GDI ist völliges Neuland für mich, und ein umfassendes Tutorial habe ich auch noch nicht gefunden. Und das PSDK hilft mir auch nur bedingt weiter.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
 


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 05:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz