Форум: "KOL";
Текущий архив: 2003.10.16;
Скачать: [xml.tar.bz2];
ВнизКак работать с Canvas??? Найти похожие ветки
← →
Юрец (2003-02-02 15:43) [0]Привет всем!
Мне необходимо обрабатывать действие onDrawItem но я не пойму как в KOLе работать с Canvas.
Смотрел исходники компонент, но ничего не понял!
Помогите или дайте ссылку на FAQ по Canvas в KOLе.
Заранее благодатен!
← →
SPeller (2003-02-02 19:23) [1]Странно, я всегда им пользовался как MyControl.Canvas. Попробуй так написать, а вдруг да получится? Канва есть и в КОЛ, куда же без неё то?
← →
Gandalf (2003-02-02 20:15) [2]В чем именно состоит проблемма?
← →
Юрец (2003-02-03 14:08) [3]Дело в том, что если работать с Canvas"ом в KOL"е как в Delphi плохо работает например DrawFocusRect или FillRect.
Я только недавно началь программировать в KOL и немогу никак разобраться в чем дело.
Зачем параметр "DC: HDC"?
← →
Gandalf (2003-02-03 15:44) [4]
> Дело в том, что если работать с Canvas"ом в KOL"е как в
> Delphi плохо работает например DrawFocusRect или FillRect.
Как это плохо?
> Зачем параметр "DC: HDC"?
Все API функии с графикой работают с HDC, по факту Canvas.Handle
← →
Kladov (2003-02-03 16:18) [5]DC для тех, кто не хочет использовать Canvas, и желает экономить объем кода. Если в программе не использован ни один Canvas, то весь TCanvas не компилируется.
← →
SPeller (2003-02-03 18:07) [6]
> Зачем параметр "DC: HDC"?
Все жалуются на недостаток примеров - пожалуйста: пример отрисовки итемов ListBox"а
function TfrmMain.ListBoxDrawItem(Sender: PObj; DC: HDC; const Rect: TRect;
ItemIdx: Integer; DrawAction: TDrawAction; ItemState: TDrawState): Boolean;
var R: TRect; TxtColor, BkColor, BorderColor: Cardinal;
hBr, oldBr, hPen, oldPen, oldBm, tmBmp, tmDC, fnt, oldfnt: Cardinal;
lf: tagLOGFONT; iName, iType: string; i, SelCount, tm: Cardinal;
begin
Result := True;
R := Rect;
tmDC := CreateCompatibleDC( DC );
tmBmp := CreateCompatibleBitmap( DC, R.Right - R.Left, R.Bottom - R.Top );
oldBM := SelectObject( tmDC, tmBmp );
iName := CurList.Items[ ItemIdx ];
if iName = "" then iName := "(Default)";
iType := ItemType2String[ CurList.Data[ ItemIdx ] ];
BkColor := BackColor;
BorderColor := BkColor;
TxtColor := ForeColor;
if odsSelected in ItemState then begin
BorderColor := CursorColor;
if InverseCursor then begin
BkColor := CursorColor;
TxtColor := CursorText;
end else begin
BkColor := BackColor;
txtColor := ForeColor;
( lf, SizeOf( lf )
> Зачем параметр "DC: HDC"?
Все жалуются на недостаток примеров - пожалуйста: пример отрисовки итемов ListBox"а
function TfrmMain.ListBoxDrawItem(Sender: PObj; DC: HDC; const Rect: TRect;
ItemIdx: Integer; DrawAction: TDrawAction; ItemState: TDrawState): Boolean;
var R: TRect; TxtColor, BkColor, BorderColor: Cardinal;
hBr, oldBr, hPen, oldPen, oldBm, tmBmp, tmDC, fnt, oldfnt: Cardinal;
lf: tagLOGFONT; iName, iType: string; i, SelCount, tm: Cardinal;
begin
Result := True;
R := Rect;
tmDC := CreateCompatibleDC( DC );
tmBmp := CreateCompatibleBitmap( DC, R.Right - R.Left, R.Bottom - R.Top );
oldBM := SelectObject( tmDC, tmBmp );
iName := CurList.Items[ ItemIdx ];
if iName = "" then iName := "(Default)";
iType := ItemType2String[ CurList.Data[ ItemIdx ] ];
BkColor := BackColor;
BorderColor := BkColor;
TxtColor := ForeColor;
if odsSelected in ItemState then begin
BorderColor := CursorColor;
if InverseCursor then begin
BkColor := CursorColor;
TxtColor := CursorText;
end else begin
BkColor := BackColor;
txtColor := ForeColor;
end;
end;
FillChar( lf, SizeOf( lf ), 0 );
lf.lfHeight := FontSize;
lf.lfWeight := FontWeight;
lf.lfCharSet := DEFAULT_CHARSET;
Move( FontName[ 1 ], lf.lfFaceName, Length( FontName ) );
fnt := CreateFontIndirect( lf );
oldFnt := SelectObject( tmDC, fnt );
hBr := CreateSolidBrush( BkColor );
oldBr := SelectObject( tmDC, hBr );
hPen := CreatePen( PS_SOLID, 1, BorderColor );
oldPen := SelectObject( tmDC, hPen );
SetTextColor( tmDC, TxtColor );
SetBkColor( tmDC, BkColor );
Rectangle( tmDC, 0, 0, R.Right - R.Left, R.Bottom - R.Top );
R.Right := R.Right - R.Left;
R.Bottom := R.Bottom - R.Top;
R.Top := 0;
R.Left := 3;
DrawText( tmDC, PChar( iName ), Length( iName ), R, DT_LEFT or DT_VCENTER or DT_SINGLELINE );
R.Left := FirstTab;
DrawText( tmDC, PChar( iType ), Length( iType ), R, DT_LEFT or DT_VCENTER or DT_SINGLELINE );
BitBlt( DC, Rect.Left, Rect.Top, Rect.Right - Rect.Left, Rect.Bottom - Rect.Top, tmDC, 0, 0, SRCCOPY );
SelectObject( tmDC, oldBm );
SelectObject( tmDC, oldFnt );
SelectObject( tmDC, oldPen );
SelectObject( tmDC, oldBr );
DeleteDC( tmDC );
DeleteObject( tmBmp );
DeleteObject( fnt );
DeleteObject( hPen );
DeleteObject( hBr );
ListBox.ItemData[ ItemIdx ] := PInteger( @ItemState )^;
end;
Принцип прост - рисуем в памяти, а затем конечный результат на экран. Нет раздражающего всех мерцания. И никакого TCanvas.
Страницы: 1 вся ветка
Форум: "KOL";
Текущий архив: 2003.10.16;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c