Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

Обычный наследник от TPanel


dmk ©   (22.04.15 03:06

а если поместить на форму, то не прорисовывается 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.


dmk ©   (22.04.15 03:07[1]

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;

Вот так работает.


dmk ©   (22.04.15 13:12[5]

>WM_PAINTicon
Мне это не нужно.

http://s27.postimg.org/87cewfusj/image.jpg
Вот проблема.

>писал человек не читавший про компоненты ни строчки.
Не читал. Первый раз. Все когда-то происходит первый раз.

>Выше Ерунду какую то написал.
Эта ерунда работает идеально, как и задумано, но возник такой эффект с исчезновением Ctl3D.


dmk ©   (22.04.15 13:18[6]

Pavia ©   (22.04.15 13:08) [4]

Помогло! Спасибо.


dmk ©   (22.04.15 13:22[7]

Почему-то считал, что inherited нужен там, где стоит override.


icWasya ©   (22.04.15 15:05[8]

Все обработчики Messages являются виртуальными(dynamic) функциями.
При этом inherited вызывает метод предка не с таким именем, а с таким же номером события. В данном случае вызовется предыдущий обработчик WM_PAINT, как бы он не назывался в предке.


dmk ©   (22.04.15 19:41[9]

Спасибо!


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]

Удалено модератором


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо