-
а если поместить на форму, то не прорисовывается Caption и рамки.
Может не так что сделал?unit DmClasses;
interface
uses
System.SysUtils, System.Classes, Vcl.Controls, Vcl.StdCtrls, Vcl.ExtCtrls, Messages, Graphics, Windows;
type
[ComponentPlatformsAttribute (pidWin32 or pidWin64)]
TDmPanel = class(TPanel)
protected
FFrameColor: TColor;
FFrameVisible: boolean;
procedure WMPaint(var m: TWMPaint); message WM_PAINT;
published
property FrameColor: TColor read FFrameColor write FFrameColor;
property FrameVisible: boolean read FFrameVisible write FFrameVisible;
end;
procedure Register;
implementation
procedure DrawWindowFrame(wnd: HWND; AColor: TColor);
var
c: TCanvas;
R, DR: TRect;
begin
GetWindowRect(wnd, R);
DR.Left := 0;
DR.Top := 0;
DR.Width := R.Right - R.Left;
DR.Height := R.Bottom - R.Top;
c := TCanvas.Create;
with c do
begin
Handle := GetWindowDC(wnd);
Brush.Style := bsClear;
Pen.Color := AColor;
Pen.Style := psDot;
Pen.Width := 1;
Rectangle(DR);
ReleaseDC(wnd, Handle);
Handle := 0;
Free;
end;
end;
procedure TDmPanel.WMPaint(var m: TWMPaint);
begin
m.Result := 0;
DefaultHandler(m);
if FrameVisible then DrawWindowFrame(Handle, FFrameColor);
end;
procedure Register;
begin
RegisterComponents('TDmClasses', [TDmPanel]);
end;
end. -
Delphi XE6, win64
-
Pavia © (22.04.15 12:39) [2]Вместо WM_PAINT использовать WM_PAINTicon
Если честно то код очень странный. Такое впечатление, что писал человек не читавший про компоненты ни строчки. -
Pavia © (22.04.15 12:45) [3]Выше Ерунду какую то написал.
-
Pavia © (22.04.15 13:08) [4]
procedure TDmPanel.WMPaint(var m: TWMPaint);
begin
inherited;
m.Result := 0;
if FrameVisible then DrawWindowFrame(Handle, FFrameColor);
end;
Вот так работает. -
>WM_PAINTicon
Мне это не нужно.
http://s27.postimg.org/87cewfusj/image.jpg
Вот проблема.
>писал человек не читавший про компоненты ни строчки.
Не читал. Первый раз. Все когда-то происходит первый раз.
>Выше Ерунду какую то написал.
Эта ерунда работает идеально, как и задумано, но возник такой эффект с исчезновением Ctl3D. -
Pavia © (22.04.15 13:08) [4]
Помогло! Спасибо. -
Почему-то считал, что inherited нужен там, где стоит override.
-
Все обработчики Messages являются виртуальными(dynamic) функциями.
При этом inherited вызывает метод предка не с таким именем, а с таким же номером события. В данном случае вызовется предыдущий обработчик WM_PAINT, как бы он не назывался в предке. -
Спасибо!
-
Adelaide (25.11.15 02:29) [10]Удалено модератором
-
Alice (25.11.15 03:24) [11]Удалено модератором
-
Karina (25.11.15 03:47) [12]Удалено модератором
-
имя(21.04.16 13:38) [13]Удалено модератором -
имя(21.04.16 14:08) [14]Удалено модератором -
имя(21.04.16 14:31) [15]Удалено модератором -
имя(21.04.16 14:35) [16]Удалено модератором -
имя(21.04.16 14:51) [17]Удалено модератором -
имя(21.04.16 15:01) [18]Удалено модератором -
имя(21.04.16 15:11) [19]Удалено модератором