![]() |
ComboBox wird falsch gezeichnet
Liste der Anhänge anzeigen (Anzahl: 1)
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; |
AW: ComboBox wird falsch gezeichnet
Hat denn keiner eine Idee? Braucht ihr irgendwelche Infos die nicht im ersten Post stehen?
|
AW: ComboBox wird falsch gezeichnet
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 ...
|
AW: ComboBox wird falsch gezeichnet
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... |
AW: ComboBox wird falsch gezeichnet
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Zitat:
Zitat:
|
AW: ComboBox wird falsch gezeichnet
lad doch lieber alles für TCsCutomPanel als Datei hoch, da fehlen
TCsBorderStyle,TCsPanelStyle,TCsBorderPosition etc.... |
AW: ComboBox wird falsch gezeichnet
Hi,
sei bitte so nett und verfrachte den Source in einen Anhang. Das seitenweise Scrollen macht nicht wirklich Spaß ;) LG, Frederic |
AW: ComboBox wird falsch gezeichnet
Zitat:
|
AW: ComboBox wird falsch gezeichnet
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...
|
AW: ComboBox wird falsch gezeichnet
Liste der Anhänge anzeigen (Anzahl: 1)
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? Zitat:
Delphi-Quellcode:
Den Hintergrund selbst zeichnen löst leider nicht das Problem mit der ComboBox.
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; Alle anderen Controls werden übrigens korrekt gezeichnet. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:38 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