Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (версии 2009, 2010 Weaver, 2011 Fulcrum)

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

0D0A

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
 
unit Unit9;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls;
 
type
  TForm9 = class(TForm)
    RichEdit1: TRichEdit;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  public
    FRichWindowProc: TWndMethod;
    procedure RichWindowProc(var message: TMessage);
  end;
 
var
  Form9: TForm9;
 
implementation
 
{$R *.dfm}
 
procedure TForm9.FormCreate(Sender: TObject);
begin
  SetWindowLong(Handle, GWL_STYLE,
    GetWindowLong(Handle, GWL_STYLE) and not WS_CLIPCHILDREN);
  SetWindowLong(RichEdit1.Handle, GWL_EXSTYLE,
    GetWindowLong(RichEdit1.Handle, GWL_EXSTYLE) or WS_EX_TRANSPARENT);
  FRichWindowProc := RichEdit1.WindowProc;
  RichEdit1.WindowProc := RichWindowProc;
end;
 
procedure TForm9.RichWindowProc(var message: TMessage);
var
  Buffer: HDC;
  Bitmap, OldBitmap: HBITMAP;
  Origin: TPoint;
begin
  if message.Msg <> WM_ERASEBKGND then
    FRichWindowProc(message)
  else
  begin
    message.Result := 1;
    Buffer := CreateCompatibleDC(TWMEraseBkGnd(message).DC);
    Bitmap := CreateCompatibleBitmap(TWMEraseBkGnd(message).DC,
      RichEdit1.Width, RichEdit1.Height);
    OldBitmap := SelectObject(Buffer, Bitmap);
    Origin := ScreenToClient(RichEdit1.ClientOrigin);
    MoveWindowOrg(Buffer, -Origin.X, -Origin.Y);
    Perform(WM_ERASEBKGND, Buffer, 0);
    Perform(WM_PAINT, Buffer, 0);
    MoveWindowOrg(Buffer, Origin.X, Origin.Y);
    BitBlt(TWMEraseBkGnd(message).DC, 0, 0, RichEdit1.Width,
      RichEdit1.Height, Buffer, 0, 0, SRCCOPY);
    SelectObject(Buffer, OldBitmap);
    DeleteDC(Buffer);
    DeleteObject(Bitmap);
  end;
end;
 
procedure TForm9.FormDestroy(Sender: TObject);
begin
  RichEdit1.WindowProc := FRichWindowProc;
end;
 
end.
 

Всего записей: 158 | Зарегистр. 21-09-2009 | Отправлено: 14:41 15-12-2010 | Исправлено: 0D0A, 14:43 15-12-2010
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (версии 2009, 2010 Weaver, 2011 Fulcrum)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru