Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.48 MB
Время: 0.05 c
15-1161276639
*Стажер*
2006-10-19 20:50
2006.11.05
UPX


15-1160643476
xayam
2006-10-12 12:57
2006.11.05
Что дальше или в чем ВАШ смысл жизни?


15-1161055357
Slider007
2006-10-17 07:22
2006.11.05
С днем рождения ! 17 октября


2-1160819011
T54
2006-10-14 13:43
2006.11.05
ООП


2-1161292434
fog
2006-10-20 01:13
2006.11.05
Глюк !!!