PDA

Tam Sürümünü Görmek İçin : BorLand c BuiLder ile acılıs forumu


ChiGhDeM
24/04/2008, 18:44
Acılıs formunu timer iLe yapmak istıorum..
bir adet unit1(ana form)
bır adet de Unit2(acılısta cıkacak oLan form)um var.
unit2 ye timer atacagız..unit2 ekranda bes sn kadar kaLdıktan sonra kapanacak ve Unit1 acıLacak...
Timer ı hıc kuLLanmadıgım ıcın yapamıyorum..
yardımcı oLursanız sevınırım tesekkurLer...


HoLyZone
24/04/2008, 20:26
Demek istediğini biraz daha açık belirtirmisin ?

ChiGhDeM
24/04/2008, 20:32
ŞoyLe acıkLayayım..Bır cok Programda Ekranda bır kac sanıye bekleyen bı grafık goruntuLenıor..Ornegın photoshop ya da kuLLandıgımız BorLand c 6..ekranda bır kac sn kaLdıktan sonra o grafık kapanıyor..Ve programımız caLısmaya basLıor..Gırıs formum oLan form 2 de grafıgımı hazırLadım...ana formum oLan form 1 tum ıcergı ıLe hazır...tek yapmam gereken form 2 yı ekranda 5 sn bekletıp kapanmasını sagLamak ve form1 ı acmak..

USERES("Project1.res")
USEFORM("Unit1.cpp",TForm1);
USEFORM("Unit2.cpp",TForm2);
//---------------------------------------------------------------------------

#include "Unit2.h"
#include "Unit1.h"
WINAPI WinMain(HINSTANCE, HISTANCE, LPSTR, int)
{
try
{
Form2=new TForm7(Application);
Form2->Show();
Application->ProcessMessages();
Application->Initalize();
Application->CreateForm(__classid(TForm4),&TForm4);
Sleep(5000);
Form2->Hide();
Form2->Close();
Application->run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
return 0;
}

bu sekıLde yapıLıs tazrı var ama

ben timer kuLLanmak ıstıorum

Akın Öcal
25/04/2008, 21:08
1. Normal timeri kullanip kendin zaman degerini kontrol ederek ya da timer in periyodunu bildigin icin timer in cagrilis sayisina bakarak yapabilirsin. Timer in periyodunu 5000 ms yaparsan ilk cagrilista acilis formunu kapattirabilirsin.

#define ID_TIMER 101
static UINT idTimer ;

idTimer = SetTimer(hWnd,ID_TIMER,5000,TimerProc);

VOID CALLBACK TimerProc
(
HWND hWnd ,
UINT uMsg,
UINT idEvent,
DWORD dwTime
)
{ ... }

Peki WinMain in kendini kapatacagini nereden bilecek ? Burada global flag degiskenleri kullanabilirsin , fakat bunun yerine Event senkronizasyon nesneni kullanman daha dogru olur. Baska bir yontem olarak da handle ini bildigin acilis dialoguna timer fonksiyonundan SendMessage la WM_CLOSE gonderebilirsin ya da WPARAM veya LPARAM kullanarak kendine has bir mesaj olusturabilirsin.

2. WinAPI de ayrica WaitableTimer nesneleri var. CreateWaitableTimer , SetWaitableTimer ile beraber diger senkronizasyon nesnelerinde oldugu gibi WaitForSingleObject i de kullanman gerekecektir.

Senkronizasyon nesnelerine girmeden bu ornekte global bir flag degiskeniyle is halledilebilir.

ChiGhDeM
26/04/2008, 01:20
Winapi ıLe su anda istedıgım seyı gercekLestırıorum.Fakat Akın Bey bahsettıgınız bır cok terıme yabancıyım...Verdıgınız kod satırını bı kac degısıkLıkLe denedım..
Aslında sahıpsenız bana timer in genıc kapsamLı bır kuLLanımı sunabıLır mısınız.?
Cunku ekran Koruyucu ıLe de bır ProbLemım var..Ve asLında sızı buLmusken .exe tipLi bır screen saver ı programıma atmak ve yıne beLırLedıgım zaman suresı doLunca onu cagırıp ekranda goruntuLemek ıstıorum..BorLand da hazırLadıgım bı ekran koruyucu var ..Fakat Cok basit kaLıor. ekran koruyucuların Uzantısı .scr oLmak zorunda mı?

Cok sordum ama son bır sey daha..Form uzerıne buton atıp windows un kendı bıLesenLerını cagıramaz mıyız?MeseLa word exceL outlook ex. hesap makinesi yada paint...
kurumsaL bordro programı yazıorum(devlet dairesi için)PersoneLın resmının web cam den anında cekıLıp kayıt edıLmesı ıstenıor.Gercı onu yapamam dedım..ama emınım BorLan c bunu yapabıLıordur.tek clickLe kuLLanıcı pc nın ıcerısınde oLan ozeLLıkLere uLasamaz mı?

CLMan
26/04/2008, 10:54
Aşağıdaki kod C++ Builder Turbo C++ Explorer versiyonu ile denenmiş ve çalıştırılmıştır. Sadece Unit2.cpp (Açılış formu) üzerine bir Timer ekleyin. Özelliklerini başlangıç için aşağıdaki şekilde ayarlayın:

Timer1->Enabled = false;
Timer1->Interval = 5000;

// Project1 dosyası

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
//---------------------------------------------------------------------------
#include <memory>
#include "Unit2.h"

USEFORM("Unit1.cpp", Form1);
USEFORM("Unit2.cpp", Form2);
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
std::auto_ptr<TForm2> AcForm(new TForm2(NULL));
AcForm->ShowModal();

Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
// Application->CreateForm(__classid(TForm2), &Form2);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
catch (...)
{
try
{
throw Exception("");
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
}
return 0;
}
//---------------------------------------------------------------------------

// Unit2.cpp (Açılış Formu)

#include <vcl.h>
#pragma hdrstop

#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm2::FormShow(TObject *Sender)
{
Timer1->Enabled = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Timer1Timer(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------

Akın Öcal
26/04/2008, 12:01
Timer in kullanimini ben saf WinAPI icin verdim , CLMan zaten güzel bir sekile VCL ortami icin ornegi vermis. Timer in süresini acilis formunuzun ekranda goruntulenmesini istediginiz süre yaparsaniz , timer in tek bir defa cagrilmasi yetecektir. , dolayisiyla herhangibir bool degisken ya da senkronizasyon nesnelerine ihtiyaciniz kalmayacak. Bunun haricinde benim yazdigim kisim WinAPI tabanli yani C seklikde oldugu icin , callback fonksiyonu form sinifinin bir metodu degil , fakat bunun yerine formun HWND nesnesini parametre olarak aliyor. Bunu kullansaydiniz WM_CLOSE mesaji gondermeniz gerekecekti fakat VCL ortamindaki gibi kullanirsaniz zaten ayni sinifin fonku oldugundan bu tarz mesajlasmalara ihtiyaciniz kalmayacak.

Sscreensaver konusunda tecrübe sahibi degilim , sadece konseptin farkindaligina sahibim o kadar , scr uzantisi da olsa exe dll gibi Win icin olan "Portable Executable" dan farkli bir yapida degiller , fakat ek olarak desteklenmesi gereken ( programcinin implemenet etmesi gereken) fonksiyonlar var -> http://www.wischik.com/scr/howtoscr.html

Ben VC++\MFC ortaminda calisiyorum ne yazikki Borland ortamında COM\ActiveX bilesenlerinin nasil cagrilacagini bilmiyorum , ama yapabileceginizi biliyorum. Fakat herseyin
bilesen olmasini beklemeyin , ornegin Word ,Excel , IE browser i bir bilesen olarak ekleyip kullabilirsiniz.

Webcam den resim almak icin Windows da bir kac yolunuz var 1. MS Directshow 2. MS WIA (Windows Image Acquisition) 3. TWAIN kütüphanesi , pratik olarak Directshow cok kompleks kalacaktir WIA ya da TWAIN e bakin derim.
http://www.codeproject.com/info/search.aspx?artkw=wia&sbo=kw