Текущий архив: 2005.07.31;
Скачать: CL | DM;
ВнизКак нарисовать рамку вокруг TEdit? Найти похожие ветки
← →
AlexTregubov (2005-06-01 15:54) [0]Вообще, как что-то нарисовать на TEdit?
Заранее спасибо.
← →
Digitman © (2005-06-01 16:25) [1]на TEdit и вокруг (т.е. вне) TEdit, согласись, разные вещи, ты уж определись что точно тебе нужно
на TEdit ты ничего не нарисуешь.
вокруг же рисий себе на здоровье что угодно - положи, например, на форму панель, на панель положи TEdit, укажи у TEdit св-во Align=Client, у панели установи св-ва, имеющие отношение к бордюру
← →
Marser © (2005-06-01 16:48) [2]Используем класс TControlCanvas.
with TControlCanvas.Create do
try
Control:=Edit;
//Дальше как с обічной канвой.
finally
free
end;
Ещё можно непосредственно с DC, но канва намного удобнее.
← →
alpet © (2005-06-01 17:05) [3]По сабжу - установи свойство Ctrl3D компонента в false, будет обычная рамка (черная).
Вот самый простой способ измения цветов контрола (всех точнее TEdit), с перекраской:
type TForm1 = class (TForm)
...
public
procedure WMCtrlColor (var msg: TMessage); message WM_CTLCOLOREDIT;
end;
procedure TForm1.WMCtrlColor(var msg: TMessage);
begin
// Decoment this, to use for single control
// if msg.LParam = edit1.Handle then
begin
SetTextColor (msg.WParam, GetSysColor (COLOR_CAPTIONTEXT));
// SetBkColor (msg.WParam, GetSysColor (COLOR_3DHILIGHT)); // backgnd color
SetBkMode (msg.wParam, TRANSPARENT); // прозрачный цвет текста
msg.Result := GetSysColorBrush (COLOR_ACTIVECAPTION);
end;
end;
← →
AlexTregubov (2005-06-02 11:48) [4]Что-то не получается.
Пробую применять TControlCanvas - рамка рисуется, а потом часть стирается текстом.
Вообще, мне нужно сделать компонент, похожий на Edit (BorderStyle:=bsNone) и вокруг рамка, как у Bevel (Shape=Frame).
Может подскажете как.
← →
Игорь Шевченко © (2005-06-02 12:34) [5]
> Может подскажете как.
unit main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, HSVisualStyler;
type
TfMain = class(TForm)
Edit: TEdit;
Edit1: TEdit;
procedure FormCreate(Sender: TObject);
private
FStyler: THSVisualStyler;
FOldEditWndProc: TWndMethod;
procedure EditWndProc (var Message: TMessage);
procedure PaintEditBorder;
end;
var
fMain: TfMain;
implementation
{$R *.dfm}
{ TfMain }
procedure TfMain.EditWndProc(var Message: TMessage);
begin
if Message.Msg = WM_NCCALCSIZE then begin
FOldEditWndProc (Message);
InflateRect(TWmNcCalcSize(Message).CalcSize_Params^.rgrc[0],
-Succ(FStyler.BorderWidth), -Succ(FStyler.BorderWidth));
end else if Message.Msg = WM_NCPAINT then begin
PaintEditBorder;
Message.Result := 0;
end else if (Message.Msg = CM_MOUSEENTER) or
(Message.Msg = WM_SETFOCUS) then begin
if Message.Msg = WM_SETFOCUS then
FOldEditWndProc (Message);
FStyler.Color := clRed;
SetWindowPos (Edit.Handle, 0, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or
SWP_NOZORDER or SWP_NOACTIVATE or SWP_DRAWFRAME);
end else if (Message.Msg = CM_MOUSELEAVE) or
(Message.Msg = WM_KILLFOCUS) then begin
if Message.Msg = WM_KILLFOCUS then begin
FOldEditWndProc (Message);
FStyler.Color := clBlue;
SetWindowPos (Edit.Handle, 0, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or
SWP_NOZORDER or SWP_NOACTIVATE or SWP_DRAWFRAME);
end else if (GetFocus <> Edit.Handle) then begin
FStyler.Color := clBlue;
SetWindowPos (Edit.Handle, 0, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or
SWP_NOZORDER or SWP_NOACTIVATE or SWP_DRAWFRAME);
end;
end else
FOldEditWndProc (Message);
end;
procedure TfMain.FormCreate(Sender: TObject);
begin
FStyler := THSVisualStyler.Create(Self);
FStyler.Color := clBlue;
FStyler.BorderStyle := hbsFlat;
FStyler.SolidBorderKind := sbkSingle;
FOldEditWndProc := Edit.WindowProc;
Edit.WindowProc := EditWndProc;
end;
procedure TfMain.PaintEditBorder;
var
ARect: TRect;
ACanvas: TCanvas;
begin
ACanvas := TCanvas.Create;
try
ACanvas.Handle := GetWindowDC(Edit.Handle);
try
GetWindowRect (Edit.Handle, ARect);
OffsetRect (ARect, -ARect.Left, -ARect.Top);
FStyler.DrawBorder(ACanvas, ARect, true);
ACanvas.Brush.Color := Edit.Color;
ACanvas.FrameRect(ARect);
finally
ReleaseDC (Edit.Handle, ACanvas.Handle);
end;
ACanvas.Handle := 0;
finally
ACanvas.Free;
end;
end;
end.
ЗЫ: Это идея, а не готовый для компиляции код.
Страницы: 1 вся ветка
Текущий архив: 2005.07.31;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.046 c