Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.12;
Скачать: CL | DM;

Вниз

различный вывод графики   Найти похожие ветки 

 
frofis ©   (2002-08-29 12:46) [0]

Извините пишу на ВСВ, если нужно переведу на Delphi

есть две функции:

одна портит изображение компонентов на форме (хэндл) другая нет - как бороться

(если предложите вычислять регион отрисовки - то компонентов очень много)

void __fastcall TForm1::LinesCanvas(TCanvas *on) {
int i;
on->Pen->Style = psSolid;
on->Pen->Mode = pmCopy;
on->Pen->Color = clBtnHighlight;
for (i = 0; i < Height; i = i + 2) {
on->MoveTo(0, i);
on->LineTo(Width, i);
}
}

void __fastcall TForm1::Lines(TWinControl *on) {
int i;
HDC handle = GetWindowDC(on->Handle);
HPEN newPen, oldPen;
HBRUSH oldBrush;
//int oldRop;
newPen = CreatePen(PS_SOLID, 1, ColorToRGB(clBtnHighlight));
oldPen = SelectObject(handle, newPen);
oldBrush = SelectObject(handle, GetStockObject(LTGRAY_BRUSH));
//oldRop = GetROP2(handle);
//SetROP2(handle, R2_XORPEN);
for (i = 0; i < on->Height; i = i + 3) {
MoveToEx(handle, 0, i, NULL);
LineTo(handle, on->Width, i);
}
//SetROP2(handle, oldRop);
SelectObject(handle, oldBrush);
SelectObject(handle, oldPen);
DeleteObject(newPen);
ReleaseDC(on->Handle, handle);
}


 
Игорь Шевченко ©   (2002-08-29 12:53) [1]

А почему GetWindowDC, а не GetDC ?


 
Игорь Шевченко ©   (2002-08-29 13:15) [2]

Эту процедуру надо вызывать, IMHO, при обработке WM_PAINT соответсвующего WinControl"a (TWinControl* on)


 
Игорь Шевченко ©   (2002-08-29 13:40) [3]

Работающий вариант на Delphi: unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Panel1: TPanel;
private
{ Private declarations }
procedure Lines(AOn : TWinControl);
procedure WMEraseBkGnd (var Message : TMessage); message WM_ERASEBKGND;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Lines(AOn : TWinControl);
var i : Integer;
ADC : HDC;
newPen, oldPen : HPEN;
oldBrush : HBRUSH;
begin
ADC := GetDC(Aon.Handle);
newPen := CreatePen(PS_SOLID, 1, ColorToRGB(clBlack{BtnHighlight}));
oldPen := SelectObject(ADC, newPen);
oldBrush := SelectObject(ADC, GetStockObject(LTGRAY_BRUSH));
//oldRop = GetROP2(handle);
//SetROP2(handle, R2_XORPEN);
I := 0;
while i < AOn.Height do begin
MoveToEx(ADC, 0, i, nil);
LineTo(ADC, AOn.Width, i);
Inc(I, 3);
end;
//SetROP2(handle, oldRop);
SelectObject(handle, oldBrush);
SelectObject(handle, oldPen);
DeleteObject(newPen);
ReleaseDC(AOn.Handle, handle);
end;


procedure TForm1.WMEraseBkGnd(var Message: TMessage);
begin
inherited;
Lines(Self);
end;




Страницы: 1 вся ветка

Текущий архив: 2002.12.12;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.021 c
3-36033
AndrewVolkov
2002-11-22 15:56
2002.12.12
dbExpress с чем его едят или зачем он нужен???


14-36412
Acorus
2002-11-22 15:58
2002.12.12
Где взять DsgnIntf.dcu ?


7-36432
Beer
2002-09-27 15:02
2002.12.12
АОН


3-36002
ev1972
2002-11-22 15:47
2002.12.12
Как определить размер и точность Numeric поля?


3-35988
Ivan Voronov
2002-11-22 19:11
2002.12.12
Получить значение из редактирующегося DBGrid