Форум: "Основная";
Текущий архив: 2005.09.04;
Скачать: [xml.tar.bz2];
ВнизTTreeView Background Найти похожие ветки
← →
Ded Moroz © (2005-08-08 13:19) [0]Мастера! Подскажите, плз, как добавить bmp-фон в TTreeView чтобы он не затирался и не прокручивался. Для ListView я сделал так:
uses
CommCtrl;
procedure TForm1.FormShow(Sender: TObject);
begin
ListView1.Brush.Bitmap := Image1.Picture.Bitmap;
ListView_SetBkcolor(ListView1.Handle, CLR_NONE);
ListView_SetTextBkcolor(ListView1.Handle, CLR_NONE);
end;
С TreeView по-аналогии не выходит... Подскажите...
← →
DVM © (2005-08-08 13:28) [1]WM_ERASEBKGND
← →
Ded Moroz © (2005-08-08 21:48) [2]Видимо я неточно выразился. У меня не получается именно вставить фон в TTreeView
← →
Ученик (2005-08-09 00:14) [3]Простых путей вроде нет
type
TMyTreeView = class(TTreeView)
protected
procedure WndProc(var Message: TMessage); override;
procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
end;
TTreeView = class(TMyTreeView);
TForm1 = class(TForm)
Image1: TImage;
TreeView1: TTreeView;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses
CommCtrl;
procedure TMyTreeView.WndProc(var Message: TMessage);
begin
if Message.Msg = WM_ERASEBKGND then
Message.Result := 1
else begin
case Message.Msg of
CN_NOTIFY: if TWMNotify(Message).NMHdr^.code = TVN_ITEMEXPANDING then
InvalidateRect(Handle, nil, False);
WM_HSCROLL, WM_VSCROLL, WM_MOUSEWHEEL: InvalidateRect(Handle, nil, False);
end;
inherited
end
end;
procedure TMyTreeView.WMPaint(var Message: TWMPaint);
var
DC, TempDC: HDC;
TempBmp, OldBmp: HBITMAP;
PS: TPaintStruct;
TempRect: TRect;
begin
if Message.DC <> 0 then
inherited
else begin
TempRect := ClientRect;
BeginPaint (Handle, PS);
DC := GetDC(Handle);
TempDC := CreateCompatibleDC(DC);
TempBMP := CreateCompatibleBitmap(DC, TempRect.Right, TempRect.Bottom);
OldBmp := SelectObject(TempDC, TempBMP);
try
Message.DC := TempDC;
WMPaint(Message);
Message.DC := 0;
FillRect(DC, ClientRect, Brush.Handle);
TransparentBlt (DC, 0, 0, TempRect.Right, TempRect.Bottom, TempDC, 0, 0,
TempRect.Right, TempRect.Bottom, clFuchsia)
finally
SelectObject (TempDC, OldBmp)
end;
DeleteObject (TempBMP);
ReleaseDC (Handle, TempDC);
ReleaseDC (Handle, DC);
EndPaint (Handle, PS)
end
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
TreeView1.Brush.Bitmap := Image1.Picture.Bitmap;
end;
end.
← →
Zer0 © (2005-08-09 00:23) [4][3] Ученик
TTreeView = class(TMyTreeView);
плакалъ! аффтар жжош!
блин простой ход, но не очевидный. я бы начал думать как создать одтельный компонент TMyTreeView...
← →
Ученик (2005-08-09 00:28) [5]>Ученик (09.08.05 00:14) [3]
Дополнительно (установлено в дизайнере)
TreeView1.Color = clFuchsia;
TreeView1.BorderStyle = bsNone
← →
Ded Moroz © (2005-08-11 13:08) [6]За пример большое спасибо, но что-то он плохо работает... При работе с TreeView вижу как мелькает фон, но он все время стирается и TreeView остается белым. И еще можно ли сделать чтобы картинка не дублировалась, а находилась в единственном экземпляре в верхнем левом углу?
← →
DVM © (2005-08-11 18:48) [7]
> И еще можно ли сделать чтобы картинка не дублировалась,
> а находилась в единственном экземпляре в верхнем левом углу?
Можно. Не использовать кисть, а просто рисовать на канве.
← →
Ученик (2005-08-11 19:48) [8]>Ded Moroz © (11.08.05 13:08) [6]
TreeView1.Color = clFuchsia;
TreeView1.BorderStyle = bsNone
← →
Ученик (2005-08-11 20:17) [9]Новый вариант
type
TMyTreeView = class(TTreeView)
private
FBitmap: TBitmap;
protected
procedure WndProc(var Message: TMessage); override;
procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
public
property Bitmap: TBitmap read FBitmap write FBitmap;
end;
TTreeView = class(TMyTreeView);
TForm1 = class(TForm)
Image1: TImage;
TreeView1: TTreeView;
Button1: TButton;
XPManifest1: TXPManifest;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses
CommCtrl;
procedure TMyTreeView.WndProc(var Message: TMessage);
begin
if Message.Msg = WM_ERASEBKGND then begin
Message.Result := 1
end else begin
case Message.Msg of
CN_NOTIFY: if TWMNotify(Message).NMHdr^.code = TVN_ITEMEXPANDING then
InvalidateRect(Handle, nil, False);
WM_KEYDOWN, WM_HSCROLL, WM_VSCROLL, WM_MOUSEWHEEL:
InvalidateRect(Handle, nil, False);
end;
inherited
end
end;
procedure TMyTreeView.WMPaint(var Message: TWMPaint);
var
DC, TempDC, TempDC1: HDC;
TempBmp, OldBmp, OldBmp1, TempBMP1: HBITMAP;
PS: TPaintStruct;
TempRect: TRect;
begin
if Message.DC <> 0 then
inherited
else begin
TempRect := ClientRect;
BeginPaint (Handle, PS);
DC := GetDC(Handle);
TempDC := CreateCompatibleDC(DC);
TempDC1 := CreateCompatibleDC(DC);
TempBMP := CreateCompatibleBitmap(DC, TempRect.Right, TempRect.Bottom);
TempBMP1 := CreateCompatibleBitmap(DC, TempRect.Right, TempRect.Bottom);
OldBmp := SelectObject(TempDC, TempBMP);
OldBmp1 := SelectObject(TempDC1, TempBMP1);
try
Message.DC := TempDC;
WMPaint(Message);
Message.DC := 0;
FillRect(TempDC1, TempRect, GetStockObject(WHITE_BRUSH));
if FBitmap <> nil then
BitBlt(TempDC1, 0, 0, FBitmap.Width, FBitmap.Height, FBitmap.Canvas.Handle, 0, 0, SRCCOPY);
TransparentBlt (TempDC1, 0, 0, TempRect.Right, TempRect.Bottom, TempDC, 0, 0,
TempRect.Right, TempRect.Bottom, clFuchsia);
BitBlt(DC, 0, 0, TempRect.Right, TempRect.Bottom, TempDC1, 0, 0, SRCCOPY);
finally
SelectObject (TempDC, OldBmp);
SelectObject (TempDC1, OldBmp1)
end;
DeleteObject (TempBMP);
DeleteObject (TempBMP1);
ReleaseDC (Handle, TempDC);
ReleaseDC (Handle, TempDC1);
ReleaseDC (Handle, DC);
EndPaint (Handle, PS)
end
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
TreeView1.Bitmap := Image1.Picture.Bitmap;
TreeView1.Color := clFuchsia;
TreeView1.BorderStyle := bsNone;
end;
end.
← →
Ded Moroz © (2005-08-11 23:37) [10]Все работает! ОГРОМНОЕ ВСЕМ СПАСИБО! :)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.09.04;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.01 c