Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

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

AW: Kann mir das einer mit ListBoxDrawItem und odFocused erklären

  Alt 15. Okt 2012, 20:29
Das mache ich ja auch, ist ja inzwischen auch nicht das Problem. Und ich muß zugeben, dass ich damals durch harte Versuche selbst drauf gekommen bin. Zuletzt habe ich Blut gespuckt. Denn entweder hatte nie ein anderer je dieses Problem, weil das Entfernen des Rahmens so simpel ist und jeder einen angeborenen Instinkt hat es immer zuletzt zu plazieren, oder es ich weiß es nicht.

Wenn du dir aber das Beispiel 2 anguckst, dann lösche ich da vor FillRect den Rahmen. Aber auch das sehe ich nicht als das Problem an, denn Xor zeichnen verändert nicht die Eigenschaften der Pixel. Wenn also zu Anfang der Prozedur bereits ein Rahmen existiert, dann wird er spätestens nach FillRect weg sein. Xor hin, Xor her.

Wenn ich also (nach meiner Logik) am Ende der Prozedur selbst ein Xor Rahmen zeichne und das System danach wieder einen Xor Rahmen zeichnet, dann ist er weg. Somit müßte nach meinem Verständnis nach dem Ende der Prozedur wieder ein Xor Rahmen gezeichnet werden. Nur ich sehe nicht wo.
zu finden ist das hier:
Delphi-Quellcode:
unit Vcl.StdCtrls;
...
procedure TCustomListBox.CNDrawItem(var Message: TWMDrawItem);
var
  State: TOwnerDrawState;
begin
  with Message.DrawItemStruct{$IFNDEF CLR}^{$ENDIF} do
  begin

    ... // unwichtiger Krams ... wenigstens für diese Betrachtung :o)

    if Integer(itemID) >= 0 then
      DrawItem(itemID, rcItem, State) // <-- hier wird auch das OnDrawItem-Event ausgelöst
    else
      FCanvas.FillRect(rcItem);
    if (odFocused in State) and not TStyleManager.IsCustomStyleActive then

      DrawFocusRect(hDC, rcItem); // <-- da ist der schlimme Finger

    FCanvas.Handle := 0;
  end;
end;
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