Einzelnen Beitrag anzeigen

Roaster

Registriert seit: 21. Jul 2004
Ort: bei mir zu Hause
107 Beiträge
 
#5

Re: Artefakte beim Zeichnen auf Edit Canvas

  Alt 15. Okt 2009, 07:47
Armin,

das Repaint brachte ebenfalls keine Änderungen.

Zum anderen, ja ich dachte auch ich bin schon an Position 0,0 mit dem Image, aber trotzdem stehen, wie im Bild gezeigt, an oberster Linie und am linken Rand diese Pixel.

Ich habe jetzt mal folgendes noch getestet:
Delphi-Quellcode:
    
procedure TJvEdit.WMPaint(var Msg: TWMPaint);
var
  MyDC: Boolean;
  ps: TPaintStruct;
  NewPen, OldPen: HPEN;
  Canvas: TCanvas;
begin
  if Images <> nil then
  begin
    if UpdateEditMargins then
      Exit; // UpdateEditMargins called Invalidate()

    MyDC := Msg.DC = 0;
    if MyDC then
      Msg.DC := BeginPaint(Handle, ps);

    inherited;
  inherited;
  Brush.Color := clNavy;
  FillRect(Msg.DC, Rect(0, 0, 16,16), Brush.Handle);
    if MyDC then
      EndPaint(Handle, ps);
  end
  else
    inherited;
end;
D.h. ich habe das eigentliche Zeichnen des Bitmaps und sonstiges Zeug mal entfernt. Ich dachte, dass FillRect() jetzt ein Rechteck an Position 0,0 zeichnen wird, aber weit gefehlt. Es ist nach wie vor ein Rand von einem Pixel, der entweder weiß bleibt oder mit undefinierten Pixel gezeichnet wird, siehe Bild.

Es sieht irgendwie so aus als ob hier das TJvEdit oder in der Basisklasse noch etwas passiert oder evtl. sogar von der Windows API her. Oder ich mache noch was falsch...

Nachtrag:
Es sieht irgendwie so aus, als ob diese Zeilen hier dafür verantwortlich sind:

Delphi-Quellcode:
procedure TJvEdit.WndProc(var Msg: TMessage);
begin
  case Msg.Msg of
    CN_CTLCOLORSTATIC,
    CN_CTLCOLOREDIT:
      if Images <> nil then
        ExcludeClipRect(Msg.WParam, 1, 1, Images.Width + FImageMarginRight + 2, Images.Height);
  end;
Genau genommen das ExcludeClipRect(Msg.wParam, 1,1...

Nur wenn ich hier ExcludeClipRect(Msg.wParam, 0,0... schreiben, dann es nicht viel besser aus, es wird jetzt zusätzlich auch der Rand des Edits überzeichnet, siehe zweites Bild 'Rand überezeichnet'
Miniaturansicht angehängter Grafiken
wei_er_rand_198.png  
Angehängte Grafiken
 
cu, Michael

Windows 7, WinXP Pro, Vista, WinXP Home, Win98 SE
D4 C/S, D7 Enterprise, Turbo Delphi Pro, Delphi 2009
  Mit Zitat antworten Zitat