Текущий архив: 2006.11.05;
Скачать: CL | DM;
Вниз
Задать рамке TPanel стиль от TEdit Найти похожие ветки
← →
AlexeyT © (2006-09-26 22:35) [0]Компонент-наследник TPanel. Хочется сделать его выглядящим больше как едит - сделать рамку (при BorderStyle=bsSingle) выглядящей как у TEdit (в XP это тонкая синяя линия, а не утопленная 3d рамка).
Может, какой стиль выставить в CreateParams, какой?
//2Modetaror: если это больше вопрос по компонентам, то можно переместить.
← →
RASkov (2006-09-26 23:22) [1]Может так...
object Panel1: TPanel
Left = 20
Top = 40
Width = 129
Height = 21
BevelOuter = bvLowered
BevelWidth = 2
Caption = "Panel1"
Color = clWhite
TabOrder = 0
end
← →
AlexeyT © (2006-09-27 00:48) [2]Нет, еще раз: св-ва Border и Bevel* дают утопленную 3d-рамку. А мне нужна тонкая синяя линия, такая как у TEdit.
← →
RASkov (2006-09-27 01:14) [3]> [2] AlexeyT © (27.09.06 00:48)
У TEdit (без использования XPMan), помоему, нет тонкой синей линии...
С XPMan она у меня серая, если я правильно понял про какую линию...
← →
Percent (2006-09-27 01:26) [4]
unit unitRSSimplestPanel;
interface
uses
Graphics, Controls, Classes, Types, Windows, SysUtils, Messages;
type
TrBorder = (brTop, brLeft, brRight, brBottom);
TrBorders = set of TrBorder;
TRSSimplestPanel = class(TCustomControl)
private
m_Borders: TrBorders;
m_BorderColor: TColor;
procedure SetBorders(a_Borders: TrBorders);
procedure SetBorderColor(a_Color: TColor);
protected
procedure Paint; override;
function GetClientRect: TRect; override;
public
constructor Create(a_Owner: TComponent); override;
published
property Borders: TrBorders read m_Borders write SetBorders;
property BorderColor: TColor read m_BorderColor write SetBorderColor;
property Color stored True nodefault;
property Align;
property Constraints;
property Anchors;
property TabOrder;
property TabStop;
property OnResize;
property Font;
property ParentFont;
property AutoSize;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents("RS", [TRSSimplestPanel]);
end;
{ TRSSimplestPanel }
constructor TRSSimplestPanel.Create(a_Owner: TComponent);
begin
inherited Create(a_Owner);
Borders := [brTop, brLeft, brRight, brBottom];
ControlStyle := ControlStyle + [csAcceptsControls, csNoStdEvents{, csOpaque}];
BorderColor := clActiveCaption;
end;
function TRSSimplestPanel.GetClientRect: TRect;
begin
Result := Rect(0, 0, Width, Height);
if (brLeft in Borders) then
Result.Left := Result.Left + 1;
if (brRight in Borders) then
Result.Right := Result.Right - 1;
if (brTop in Borders) then
Result.Top := Result.Top + 1;
if (brBottom in Borders) then
Result.Bottom := Result.Bottom - 1;
end;
procedure TRSSimplestPanel.Paint;
begin
// Fill
Canvas.Brush.Color := Color;
Canvas.Brush.Style := bsSolid;
Canvas.FillRect(Rect(0, 0, Width, Height));
// Borders
Canvas.Pen.Color := BorderColor;
if (brLeft in Borders) then
begin
Canvas.MoveTo(0, 0);
Canvas.LineTo(0, Height);
end;
if (brRight in Borders) then
begin
Canvas.MoveTo(Width - 1, 0);
Canvas.LineTo(Width - 1, Height);
end;
if (brTop in Borders) then
begin
Canvas.MoveTo(0, 0);
Canvas.LineTo(Width, 0);
end;
if (brBottom in Borders) then
begin
Canvas.MoveTo(0, Height - 1);
Canvas.LineTo(Width, Height - 1);
end;
end;
procedure TRSSimplestPanel.SetBorderColor(a_Color: TColor);
begin
if (m_BorderColor <> a_Color) then
begin
m_BorderColor := a_Color;
Invalidate;
end;
end;
procedure TRSSimplestPanel.SetBorders(a_Borders: TrBorders);
begin
if (a_Borders <> m_Borders) then
begin
m_Borders := a_Borders;
Realign;
Invalidate;
end;
end;
end.
← →
AlexeyT © (2006-09-27 04:10) [5]Спасибо за юнит.
Но нужно не рисовать линии вручную на рамке панели, а - рисовать рамку TEdit с учетом текущей темы XP.
>У TEdit (без использования XPMan), помоему, нет тонкой синей линии...
Естественно с манифестом. А синяя она или нет - это зависит от темы. У меня дефолтная тема XP - там она синяя.
-----
Короче, ясно. Надо рисовать едит-контрол "через темы". Как это делается, мне уже подсказали. Другие способы не подходят.
Страницы: 1 вся ветка
Текущий архив: 2006.11.05;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.064 c