"Unit1.cpp" Dosyası

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Kırmızı renkte kare bir brush yaratılarak programa ait formun dışındaki masa
üstü alanında gösterilmektedir. Daha sonra bir Timer vasıtasıyla brush'a hareket
sağlanmaktadır. Hareketin arka palana zarar vermeden yapılabilmesi için brush'un
arkasında kalan masa üstü alanı hafızada bir değişkene kopyalanmış ve daha sonra
hafızadaki değişkenden tekrar masa üstüne kopyalanmıştır. Son olarak brush x
ekseni yönünde bir miktar ilerletilerek tekrar ekranda gösterilmiştir. Bu örnek
basit hareket ve kopyalama tekniklerini göstermektedir.
-----------------------------------------------------------------------------------------
Kullanılan Api Fonksiyonları Aşağıda Gösterilmiştir.
-----------------------------------------------------------------------------------------
GetDC;
CreateCompatibleDC;
CreateCompatibleBitmap;
SelectObject;
StretchBlt;
ReleaseDC;
-----------------------------------------------------------------------------------------
Program  : Taner Kocaova Mak. Müh.
e-mail : tanerkocaova@tekniktesisat.org
Tarih : Mart 2004
-----------------------------------------------------------------------------------------

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */


//---------------------------------------------------------------------------
#include <vcl\vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma resource "*.dfm"
TForm1 *Form1;

int x = 50;
int y = Screen->Height/2;
int pause = 1;
bool baslangic = false;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner)
{

Timer1->Enabled = false;

//Masa üstü handle numarasından bir DC yaratılıyor.
DC1 = GetDC(0);
//Kırmızı renkte bir kare oluşturuluyor.
Kare = ::CreateSolidBrush(RGB(255, 0, 0));

//Oluşturulan kare brush DC1'e seçiliyor.
::SelectObject(DC1, Kare);

//Resmi kopyalayabilmek için TCanvas cinsinden
//başlık dosyasında tanımlanmış değişken oluşturuluyor.
MasaUstuCanvas = new TCanvas();

//Masa üstü ile işlem yapabilmek için GetDC fonksiyonu
//ile masa üstünün handle numarası çizim yapmak için
//hafızada oluşturduğumuz değişkene atanıyor.
MasaUstuCanvas->Handle = ::GetDC(0);

//HDC tipinde tanımlanmış değişkenden "CreateCompatibleDC"
//fonksiyonu kullanılarak masa üstü ile uyumlu çizim
//yapılabilecek bir memory device context (DC) yaratılıyor.
MemoryDC = ::CreateCompatibleDC(MasaUstuCanvas->Handle);

//Masa üstü ile uyumlu bir Bitmap yaratmak için
//"HBITMAP" tipinde tanımlanan değişkenden, "CreateCompatibleBitmap"
//fonksiyonu kullanılarak yürürlükteki DC ile uyumlu
//bir bitmap yaratılıyor. Bitmap'in boyutları oluşturduğumuz
//kare brush ile aynı boyuttadır. Yani 50x50
ResimBmp = ::CreateCompatibleBitmap(MasaUstuCanvas->Handle, 50, 50);

//Bitmap yeni oluşturulan DC'ye seçiliyor.
//Böylece masaüstü görüntüleri "MemoryDC" değişkeninin
//içine hafızada kopyalanabilecektir.
::SelectObject(MemoryDC, ResimBmp);

}
//---------------------------------------------------------------------------


//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{

//Kare brush'un ekrana ilk basılacağı yerin altında
//kalan görüntü parçası hafızada saklanıyor.
//Ve masa üstünün bir bölümü hafızada "MemoryDC"
//değişkenine çizdiriliyor.
::StretchBlt(MemoryDC, 0, 0, 50, 50,
MasaUstuCanvas->Handle, x, y, 50, 50, SRCCOPY);

//Oluşturulan kare x yönünde 5 arttırılarak
//ekranın tamamında hareket ettiriliyor.
::Rectangle(DC1, x, y, x+50, y+50);

//Kırmızı karenin ekranda görünebilmesi için bir
//müddet bekleniyor.
::Sleep(40);

//MemoryDC değişkeni içindeki görüntü aynı boyutta
//yani büyütülüp küçültülmeden masaüstüne basılıyor.
//StretchBlt api fonksiyonu isterseniz görüntüyü
//büyültüp küçültebilir.
if (Timer1->Enabled == true)
::StretchBlt(MasaUstuCanvas->Handle, x, y, 50, 50,
MemoryDC, 0, 0, 50, 50, SRCCOPY);

x = x + 4;
pause = pause + 1;
baslangic = true;

}
//---------------------------------------------------------------------------


//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{

Timer1->Enabled = true;
if (pause == 0)
::StretchBlt(MasaUstuCanvas->Handle, x, y, 50, 50,
MemoryDC, 0, 0, 50, 50, SRCCOPY);

}
//---------------------------------------------------------------------------


//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{

if (baslangic == false)
return;

Timer1->Enabled = false;
pause = 0;

::StretchBlt(MemoryDC, 0, 0, 50, 50,
MasaUstuCanvas->Handle, x, y, 50, 50, SRCCOPY);
::Rectangle(DC1, x, y, x+50, y+50);

}
//---------------------------------------------------------------------------


//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{

//Değişkenler hafızadan atılıyor.
delete MasaUstuCanvas;
ReleaseDC(GetDesktopWindow(), MemoryDC);

}
//---------------------------------------------------------------------------

////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////

"Unit1.h" Dosyası

//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <vcl\Classes.hpp>
#include <vcl\Controls.hpp>
#include <vcl\StdCtrls.hpp>
#include <vcl\Forms.hpp>
#include

//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TTimer *Timer1;
TButton *Button1;
TButton *Button2;
void __fastcall Timer1Timer(TObject *Sender);
void __fastcall Button1Click(TObject *Sender);
void __fastcall Button2Click(TObject *Sender);
void __fastcall FormClose(TObject *Sender, TCloseAction &Action);

private: // User declarations
HDC DC1;
HBRUSH Kare;
HDC MemoryDC;
HBITMAP ResimBmp;
TCanvas *MasaUstuCanvas;

public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////

PROGRAMIN EKRAN GÖRÜNTÜSÜ

<<< Geri Dön