AGB  ·  Datenschutz  ·  Impressum  







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

ComboBox wird falsch gezeichnet

Offene Frage von "Andreas L."
Ein Thema von Andreas L. · begonnen am 20. Okt 2011 · letzter Beitrag vom 27. Okt 2011
Antwort Antwort
Andreas L.

Registriert seit: 23. Mai 2011
Ort: Furth im Wald
308 Beiträge
 
Delphi 11 Alexandria
 
#1

ComboBox wird falsch gezeichnet

  Alt 20. Okt 2011, 12:01
Hallo,

ich habe mir eine Komponente von TCustomPanel abgeleitet. Platziere ich darauf eine TComboBox mit Style csDropDownList wird diese falsch gezeichnet. Auf einem normalen TPanel sieht die Box aber richtig aus (siehe Bild). Wie kommt das zu stande? Was mache ich falsch?

Delphi-Quellcode:
procedure TCsCustomPanel.Paint;
begin
  inherited Paint;

  RefreshPadding;

  if FDrawHovered then
  begin
    if FEnableHoverColor then
      inherited Color := FHoverColor;

    inherited Paint;

    if FEnableHoverBorder then
    begin
      DrawBorder(FHoverBorderTop, cbpTop);
      DrawBorder(FHoverBorderBottom, cbpBottom);
      DrawBorder(FHoverBorderRight, cbpRight);
      DrawBorder(FHoverBorderLeft, cbpLeft);
    end;{
    else
    begin
      DrawBorder(FBorderLeft, cbpLeft);
      DrawBorder(FBorderRight, cbpRight);
      DrawBorder(FBorderTop, cbpTop);
      DrawBorder(FBorderBottom, cbpBottom);
    end; }

  end
  else
  begin
    inherited Color := FColor;
    inherited Paint;
    DrawBorder(FBorderLeft, cbpLeft);
    DrawBorder(FBorderRight, cbpRight);
    DrawBorder(FBorderTop, cbpTop);
    DrawBorder(FBorderBottom, cbpBottom);
  end;
end;

procedure TCsCustomPanel.Refresh;
begin
  inherited Refresh;

  Invalidate;

  if Assigned(FOnRefreshed) then
    OnRefreshed(Self);
end;

procedure TCsCustomPanel.DrawBorder(Style: TCsBorderStyle;
  Position: TCsBorderPosition);
var
  Coord: TPoint;
  BorderRect: TRect;
begin
  if Style.Visible and (Style.Width > 0) then
  begin
    // Startposition ermitteln
    Coord := GetBorderStartPosition(Position, Style.Width);
    BorderRect.TopLeft.X := Coord.X;
    BorderRect.TopLeft.Y := Coord.Y;

    // Endposition ermitteln
    Coord := GetBorderEndPosition(Position, Style.Width);
    BorderRect.BottomRight.X := Coord.X;
    BorderRect.BottomRight.Y := Coord.Y;

    Canvas.Brush.Color := Style.Color;

    Canvas.FillRect(BorderRect);

    // ggf. Schatten zeichnen
    if Style.ShadowVisible then
    begin
      Canvas.Pen.Color := Style.ShadowColor;
      Canvas.Pen.Width := 1;

      Canvas.PenPos := GetBorderShadowStartPostition(Position, Style.Width);

      Coord := GetBorderShadowEndPosition(Position, Style.Width);

      Canvas.LineTo(Coord.X, Coord.Y);
    end;

  end;
end;

procedure TCsCustomPanel.RefreshPadding;
var
  PaddLeft, PaddRight, PaddTop, PaddBottom: Integer;
begin

  // Padding links ermitteln
  PaddLeft := FPadding.Left;

  if FDrawHovered and (FHoverBorderLeft.Width > 0) and FHoverBorderLeft.Visible then
    PaddLeft := PaddLeft + FHoverBorderLeft.Width
  else
    PaddLeft := PaddLeft + FBorderLeft.Width;

  // Padding rechts ermitteln
  PaddRight := FPadding.Right;

  if FDrawHovered and (FHoverBorderRight.Width > 0) and FHoverBorderRight.Visible then
    PaddRight := PaddRight + FHoverBorderRight.Width
  else
    PaddRight := PaddRight + FBorderRight.Width;

  // Padding oben ermitteln
  PaddTop := FPadding.Top;

  if FDrawHovered and (FHoverBorderTop.Width > 0) and FHoverBorderTop.Visible then
    PaddTop := PaddTop + FHoverBorderTop.Width
  else
    PaddTop := PaddTop + FHoverBorderTop.Width;

  // Padding unten ermitteln
  PaddBottom := FPadding.Bottom;

  if FDrawHovered and (FHoverBorderBottom.Width > 0) and FHoverBorderBottom.Visible then
    PaddBottom := PaddBottom + FHoverBorderBottom.Width
  else
    PaddBottom := PaddBottom + FBorderBottom.Width;

  inherited Padding.Left := PaddLeft;
  inherited Padding.Right := PaddRight;
  inherited Padding.Top := PaddTop;
  inherited Padding.Bottom := PaddBottom;
end;
Miniaturansicht angehängter Grafiken
cspanel_combobox_error.png  
Andreas Lauß
Blog
  Mit Zitat antworten Zitat
Andreas L.

Registriert seit: 23. Mai 2011
Ort: Furth im Wald
308 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: ComboBox wird falsch gezeichnet

  Alt 21. Okt 2011, 12:07
Hat denn keiner eine Idee? Braucht ihr irgendwelche Infos die nicht im ersten Post stehen?
Andreas Lauß
Blog
  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
 
#3

AW: ComboBox wird falsch gezeichnet

  Alt 21. Okt 2011, 12:18
Ich hatte gestern kurz versucht es zu simulieren, konnte aber den beschriebenen Fehler nicht reproduzieren (Delphi XE), Du könntest gegf. den kompletten Komponentensource hochladen ...
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 stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: ComboBox wird falsch gezeichnet

  Alt 21. Okt 2011, 12:22
Nur mal zur Fehlereingrenzung: Hast Du mal die ComboBox etwas verkleinert, so dass ein Teil des Panels sichtbar bleibt?
Das könnte die Fehlesuche vielleicht in die richtige Richtung leiten.

Wenn Du mal ein kleines Demoprojekt anhängst, könnte ich heute Abend einmal drauf schauen...
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Andreas L.

Registriert seit: 23. Mai 2011
Ort: Furth im Wald
308 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: ComboBox wird falsch gezeichnet

  Alt 21. Okt 2011, 12:39
...Du könntest gegf. den kompletten Komponentensource hochladen ...
Nur mal zur Fehlereingrenzung: Hast Du mal die ComboBox etwas verkleinert, so dass ein Teil des Panels sichtbar bleibt?
Der blaue Bereich auf dem die ComboBox liegt ist das Panel.

Wenn Du mal ein kleines Demoprojekt anhängst, könnte ich heute Abend einmal drauf schauen...
siehe Anhang
Angehängte Dateien
Dateityp: zip cspanel_combo_test.zip (412,6 KB, 15x aufgerufen)
Andreas Lauß
Blog

Geändert von Luckie (22. Okt 2011 um 07:42 Uhr) Grund: Drei Millionen Zeilen Code müssen in einem Posting nicht sein. ;)
  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
 
#6

AW: ComboBox wird falsch gezeichnet

  Alt 21. Okt 2011, 12:52
lad doch lieber alles für TCsCutomPanel als Datei hoch, da fehlen
TCsBorderStyle,TCsPanelStyle,TCsBorderPosition

etc....
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 fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#7

AW: ComboBox wird falsch gezeichnet

  Alt 21. Okt 2011, 12:55
Hi,

sei bitte so nett und verfrachte den Source in einen Anhang. Das seitenweise Scrollen macht nicht wirklich Spaß


LG, Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: ComboBox wird falsch gezeichnet

  Alt 21. Okt 2011, 17:58
lad doch lieber alles für TCsCutomPanel als Datei hoch, da fehlen
TCsBorderStyle,TCsPanelStyle,TCsBorderPosition
etc....
Ja, sonst wird das sicher nix...
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#9

AW: ComboBox wird falsch gezeichnet

  Alt 21. Okt 2011, 18:20
K.a. obs daran liegt, aber im Paint setzt Du (bei FEnableHoverColor=True) dein Color auf FHoverOverColor. Was macht denn der Setter von TPanel.Color.... nicht das der Paint aufruft und damit alles durcheinander kommt. Großartig aufregend ist das TPanel.Paint ja nicht (Fill) sodaß Du das vielleicht noch selbst hinkriegen könntest, ohne Color zu setzen...
  Mit Zitat antworten Zitat
Andreas L.

Registriert seit: 23. Mai 2011
Ort: Furth im Wald
308 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: ComboBox wird falsch gezeichnet

  Alt 27. Okt 2011, 10:41
Ich habe jetzt TCsCustomPanel von den anderen Komponenten getrennt und in eine eigene Unit verfrachtet (siehe Anhang).

Hat jemand eine Idee wieso der Fehler auftritt?

K.a. obs daran liegt, aber im Paint setzt Du (bei FEnableHoverColor=True) dein Color auf FHoverOverColor. Was macht denn der Setter von TPanel.Color.... nicht das der Paint aufruft und damit alles durcheinander kommt. Großartig aufregend ist das TPanel.Paint ja nicht (Fill) sodaß Du das vielleicht noch selbst hinkriegen könntest, ohne Color zu setzen...
Der Setter von Color macht folgendes:
Delphi-Quellcode:
procedure TControl.SetColor(Value: TColor);
begin
  if FColor <> Value then
  begin
    FColor := Value;
    FParentColor := False;
    if (csDesigning in ComponentState) and not (csReading in ComponentState) and (Self is TWinControl) then
      TWinControl(Self).ParentBackground := False;
    Perform(CM_COLORCHANGED, 0, 0);
  end;
end;
Den Hintergrund selbst zeichnen löst leider nicht das Problem mit der ComboBox.

Alle anderen Controls werden übrigens korrekt gezeichnet.
Angehängte Dateien
Dateityp: pas CsPanels.pas (7,7 KB, 5x aufgerufen)
Andreas Lauß
Blog
  Mit Zitat antworten Zitat
Antwort Antwort


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 20:17 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