Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.011 c
3-51080
MsGuns
2003-09-25 20:42
2003.10.16
LEFT JOIN


6-51389
BorH
2003-08-17 04:16
2003.10.16
Как по http узнать размер файла??


7-51535
Echelon
2003-08-01 13:50
2003.10.16
RegisterServiceProcess


14-51418
Verg
2003-09-26 11:42
2003.10.16
Чо вам эта борода сдалась? Как отростить рога?!


6-51370
Koki
2003-08-14 17:42
2003.10.16
Подскажите как отключить клаву у соседнего компа





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский