Arsip: Beda canvas dan HDC

 
user image
more 18 years ago

kodok_bancret

Kk-kk delphi-id, apa sih bedanya canvas dengan HDC ?
user image
more 18 years ago

Manz

Kalo yang saya tau seh : o Canvas adalah sebuah class yang dipakai oleh device context dan mempunyai beberapa graphical object, TBitmap, TIcon dan etc etc etc... o HDC adalah (Handle Device Context) sebuah handling untuk menangani device contect, maksudnya sebuah pointer yang diperlukan untuk menangani device context yang dipakai, tidak hanya canvas, tetapi component yang bersifat container.
user image
more 18 years ago

DelphiExpert

:mrgreen: TCanvas adalah sebuah class yg meng-enkapsulasi fungsi-fungsi (dasar) windows yg berkaitan dengan manipulasi graphics, pada intinya, TCanvas dibuat utk memudahkan programmer Delphi dalam berhubungan dengan device context yg notabene (seharusnya) harus menggunakan Windows API. HDC sendiri seperti manz_delphi bilang adalah sebuah Handle terhadap Device Context (Device context dapat dianalogikan sebagai sebuah device yg dapat dimanipulasi menggunakan perintah2 graphics (related to HDC) misal: (Screen, Printer, Plotter dll) TCanvas sendiri mempunyai property HDC (Handle) yg merujuk pada sebuah device context tertentu (biasanya dialokasikan otomatis) Dalam pemrograman windows; sebenarnya utk menuliskan (menggambar/me-render lebih tepatnya) text, rectangle, gambar dll. ke sebuah device, harus melalui HDC (silahkan cek, semua fungsi windows API yg berhubungan dng graphics pasti mempunyai parameter HDC - sebagai isyarat fungsi tersebut akan me-render sesuatu ke mana). mengganti font color, atau brush color sebenernya ngga' se-simple seperti yg dilakukan kalau kita menggunakan TCanvas (dan untuk itulah TCanvas dibuat - TCanvas dengan 'halus' telah menyembunyikan fungsi2 yg berkaitan dengan windows API dng baik) misal utk membuat sebuah rectangle di koordinat 0, 0, 300, 300: - menggunakan windows API

var hbr: HBRUSH;
    hpn: HPEN;
    R: TRect;
    DC: HDC;
begin
  // destination rectangle - filled with blue color & outlined by black color
  R:= Rect(0, 0, 300, 300);
  DC:= GetDC(Panel1.Handle);
  hpn:= CreatePen(PS_SOLID, 1, ColorToRGB(clBlack));
  hbr:= CreateSolidBrush( ColorToRGB(clBlue) );
  try
    SelectObject(DC, hbr);
    Windows.FillRect(DC, R, hbr);
    SelectObject(DC, hpn);
    with R do
      Windows.Rectangle(DC, Left, Top, Right, Bottom);
  finally
    DeleteObject(hrb);
    DeleteObject(hpn);
    ReleaseDC(Panel1.Handle, DC);
  end;
- menggunakan TCanvas

type THackPanel = class(TCustomPanel);
var Canvas: TCanvas;
  R: TRect;
begin
  // destination rectangle - filled with blue color & outlined by black color
  R:= Rect(0, 0, 300, 300);
  // access TPanel canvas
  Canvas:= THackPanel(Panel1).Canvas;
  Canvas.Pen.Width:= 1;
  Canvas.Pen.Color:= clBlack;
  Canvas.Brush.Style:= bsSolid;
  Canvas.Brush.Color:= clBlue;
  Canvas.Rectangle(R);
sama-sama menggambarkan sebuah kotak, tapi lihat beda dlm coding-nya xixix sekalipun sama-sama menggunakan Windows API, dikau lebih dimanja jika menggunakan class wrapper-nya; yaitu TCanvas tapi dng sedikit catatan, namanya wrapper tentu performance-nya lebih rendah jika dibandingkan langsung menggunakan core API-nya :mrgreen:
user image
more 18 years ago

Manz

Waduh ... kalo yang expert udah angkat bicara kayak begini dech ... bingung juga aku :mrgreen:
more ...
  • Pages:
  • 1
Share to

AI Forward

🚀 We're thrilled to partner with Alibaba Cloud for "AI Forward - Alibaba Cloud Global Developer Summit 2025" in Jakarta! Join us and explore the future of AI. Register now: https://int.alibabacloud.com/m/1000400772/
#AlibabaCloud #DeveloperSummit #Jakarta #AIFORWARD

Random Topic

Local Business Directory, Search Engine Submission & SEO Tools FreeWebSubmission.com SonicRun.com