Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.037 c
14-1121059952
Ricko
2005-07-11 09:32
2005.07.31
Остаться в живых


3-1118924142
Lenz
2005-06-16 16:15
2005.07.31
Как изменить структуру базы данных (dbf) если исходная на SQL


1-1121028718
Slicer
2005-07-11 00:51
2005.07.31
Как спрятать заголовок окна в taskbar е


1-1121085805
Kyro
2005-07-11 16:43
2005.07.31
Местоположение приложения


4-1117649455
vi.ki.ng-vku
2005-06-01 22:10
2005.07.31
Перехват нажатия клавиши





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский