Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.11.05;
Скачать: [xml.tar.bz2];

Вниз

Задать рамке 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.04 c
15-1161093301
Почемучка
2006-10-17 17:55
2006.11.05
Помогите


2-1161184107
Tbegin
2006-10-18 19:08
2006.11.05
моя первая прога


15-1160848995
Kolan
2006-10-14 22:03
2006.11.05
Сижу, разговаривю по ICQ с отцом. Он в соседней комнате :)


2-1161126729
Wolfheart
2006-10-18 03:12
2006.11.05
Assembler &amp; Delphi


2-1161456513
Ekzot
2006-10-21 22:48
2006.11.05
Real в Int





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский