Programı parametre ile açmak
Bu iş için ParamCount ve ParamStr'yi kullanabilirsiniz.
ParamCount : verilen parametre sayısını
ParamStr(x) : verilen parametreyi döndürür.
0 : exe'nin kendisini (path'i ile birlikte) döndürür.
1 : birinci parametreyi döndürür
2 : ikinci parametreyi döndürür ...
ana formun OnShow olayına aşağıdaki gibi bir kod yazmalısınız.
if ParamCount<> 1 then {eğer parametre verilmemişse veya birden fazla ise kapat}
Close; {bu iki satır seçimlik, istersen yazmayabilirsin}
if ParamStr(1) = '0' then // parametre olarak 0 verilmişse
{şunları şunları yap}
else
if ParamStr(1) = '1' then // parametre olarak 1 verilmişse
{şunları şunları yap}
QuickReport'ta toplam sayfa sayısını hesaplama
Qr'nin Prepare metodunu kullanırsanız, rapor önizleme açılmadan ve yazdırılmadan oluşturulur. Prepare ile raporu oluşturduktan sonra QrPrinter.PageCount ile sayfa sayısını alabilirsiniz. Örnek kod :
QuickRep1.Prepare;
QuickRep1.ReportTitle := 'Bu rapor toplam : ' + IntToStr(QuickRep1.QRPrinter.PageCount) + ' sayfadır.';
QuickRep1.QRPrinter.Free;
QuickRep1.QRPrinter := nil;
QuickRep1.Preview;
Programınızı koruma ve demo olarak dağıtma
Bazen programınızı potansiyel müşterilerinizin denemesi için demo olarak dağıtmak isteyebilirsiniz. Bunlarda genel mantık belli bir süre veya belli bir sayıda programın çalışması, bu süre sonunda çalışmayı kesmesidir. Artık bedava dağıtılan TurboPower OnGuard paketi ile dene-satın al türü uygulamalar oluşturabilirsiniz. Kullanıcı kısıtlı sürümü kurduktan sonra, sizden şifre alıp, aynı exe dosya ile limitsiz kullanıma ulaşabilir. Şifre kendi bilgisayarına özgü olduğu için başkalarına programı dağıtamaz.
Bu paketi indirip kurun. İndirme detayları için sitedeki 3. Parti bileşenler kısmındaki TurboPower yazısına bakabilirsiniz.
Outlook Express'i dosya ekleyerek (attach) açma
uses kısmına mapi unitini ekleyin.
function SendMail(const Subject, Body, FileName,
SenderName, SenderEMail,
RecipientName, RecipientEMail: string): Integer;
var
Message: TMapiMessage;
lpSender, lpRecipient: TMapiRecipDesc;
FileAttach: TMapiFileDesc;
SM: TFNMapiSendMail;
MAPIModule: HModule;
begin
FillChar(Message, SizeOf(Message), 0);
with Message do
begin
if (Subject <> '') then
lpszSubject := PChar(Subject);
if (Body <> '') then
lpszNoteText := PChar(Body);
if (SenderEmail <> '') then
begin
lpSender.ulRecipClass := MAPI_ORIG;
if (SenderName = '') then
lpSender.lpszName := PChar(SenderEMail)
else
lpSender.lpszName := PChar(SenderName);
lpSender.lpszAddress := PChar(SenderEmail);
lpSender.ulReserved := 0;
lpSender.ulEIDSize := 0;
lpSender.lpEntryID := nil;
lpOriginator := @lpSender;
end;
if (RecipientEmail <> '') then
begin
lpRecipient.ulRecipClass := MAPI_TO;
if (RecipientName = '') then
lpRecipient.lpszName := PChar(RecipientEMail)
else
lpRecipient.lpszName := PChar(RecipientName);
lpRecipient.lpszAddress := PChar(RecipientEmail);
lpRecipient.ulReserved := 0;
lpRecipient.ulEIDSize := 0;
lpRecipient.lpEntryID := nil;
nRecipCount := 1;
lpRecips := @lpRecipient;
end
else
lpRecips := nil;
if (FileName = '') then
begin
nFileCount := 0;
lpFiles := nil;
end
else
begin
FillChar(FileAttach, SizeOf(FileAttach), 0);
FileAttach.nPosition := Cardinal($FFFFFFFF);
FileAttach.lpszPathName := PChar(FileName);
nFileCount := 1;
lpFiles := @FileAttach;
end;
end;
MAPIModule := LoadLibrary(PChar(MAPIDLL));
if MAPIModule = 0 then
Result := -1
else
try
@SM := GetProcAddress(MAPIModule, 'MAPISendMail');
if @SM <> nil then
begin
Result := SM(0, Application.Handle, Message, MAPI_DIALOG or
MAPI_LOGON_UI, 0);
end
else
Result := 1;
finally
FreeLibrary(MAPIModule);
end;
if Result <> 0 then
MessageDlg('Mesaj gönderilemedi (' + IntToStr(Result) + ').',
mtError, [mbOK], 0);
end;
Kullanımı : SendMail ( 'Deneme', '', c:\deneme.txt, '', 'aaa@bbb.com', '', 'xyz@bbb.com' );
QuickReport'taki verileri text dosyaya kaydetmek
Qr ile hazır gelen export filtreleri var. Bunları kullanarak .txt, .csv (Excel) vs. aktarım yapabilirsiniz. ASCII (txt) olanı raporun olduğu forma koy, Ön izleme ekranında Save butonuna bastığında (*.txt) de çıkacaktır artık. Koddan yapmak istersen :
QuickRep1.ExportToFilter(TQRAsciiExportFilter.Crea te('c:\rapor.txt'));
Auto-run (otomatik açılan) CD'ler oluşturmak
Bu olayın direk olarak Delphi ile alakası yok ama lazım olabilir. Notepad ile ismi "autorun.inf" olan ve aşağıdaki gibi bir metni içeren bir text dosya oluşturun.
[autorun]
OPEN=myprogram.EXE
ICON=myicon.ICO
Burada Open kısmına çalışacak olan programın ismini, icon kısmına da CD'yi takınca gözükecek simgeyi yazmalısınız.
Windows Metafile'ı (.wmf) bitmap'e (.bmp) çevirme
procedure ConvertWMF2BMP (const WMFFileName, BMPFileName: TFileName);
var
MetaFile : TMetafile;
Bitmap : TBitmap;
begin
Metafile := TMetaFile.Create;
Bitmap := TBitmap.Create;
try
MetaFile.LoadFromFile(WMFFileName);
with Bitmap do
begin
Height := Metafile.Height;
Width := Metafile.Width;
Canvas.Draw(0, 0, MetaFile);
SaveToFile(BMPFileName);
end;
finally
Bitmap.Free;
MetaFile.Free;
end;
end;
Kullanımı : ConvertWMF2BMP('c:\mypic.wmf', 'c:\mypic.bmp')
Bitmap'i (.bmp) Windows Metafile'a (.wmf') çevirme
procedure ConvertBMP2WMF (AImage: TImage; FileName: String);
var
Wmf : TMetafile;
WmfCanvas: TMetafileCanvas;
begin
Wmf := TMetafile.Create;
try
//Must set width + Height before creating the canvas
Wmf.Width := AImage.Picture.Bitmap.Width;
Wmf.Height := AImage.Picture.Bitmap.Height;
WmfCanvas := TMetafileCanvas.Create(Wmf, 0);
try
WmfCanvas.Draw(0,0,AImage.Picture.Bitmap);
finally
WmfCanvas.Free;
end;
Wmf.SaveToFile(FileName);
finally
Wmf.Free;
end;
end;
Kullanımı : ConvertBMP2WMF(Image1, 'c:\mypic.wmf'); // bitmap resim image1'de yüklü.
TColor'u HTML Color'a çevirme
Bir ColorDialog, bir label ve bir buton koyup aşağıdaki kodu yazın.
procedure TForm1.Button1Click(Sender: TObject);
function ColorToHtml(DColor:TColor):string;
var
tmpRGB : TColorRef;
begin
tmpRGB := ColorToRGB(DColor);
Result:=Format('#%.2x%.2x%.2x',
[GetRValue(tmpRGB),
GetGValue(tmpRGB),
GetBValue(tmpRGB)]);
end; {function ColorToHtml}
begin
if ColorDialog1.Execute then
Label1.Caption:=ColorToHtml(ColorDialog1.Color);
end;
Delphi 7'de Quick Report'u nasıl yüklerim
Quick Report, Delphi 7 ile birlikte dağıtılıyor, ancak kurulu olarak gelmiyor. Quick Report'u Delphi 7'ye kurmak için :
1. Component menüsünden Install Packages komutunu verin.
2. Add butonuna tıklatın ve Delphi7\Bin klasöründeki dclqrt70.bpl isimli dosyayı seçin.
SMS Göndermek
Bu iş için bir kaç yöntem var :
1. Dahili modemi olan bir cep telefonunu kablo ile bağlayıp göndermek. Normal SMS ücreti ödersiniz. Bu iş için TurboPower Async Pro veya TOxygenSMS bileşenini (http://www.oxygensoftware.com) kullanabilirsiniz.
2. Dahili SMS modemler var. Bunu bilgisayarınıza takıyorsunuz ve SIM kart takıyorsunuz üstüne. Yine SMS ücreti ödersiniz.
3. Internet üzerinden bedava SMS hizmeti veren siteleri http ile kullanarak gönderebilirsiniz ancak bunlar Türkiye için pek kullanışlı değil. Çok sık takip etmeniz lazım. Ya servis kapanıyor ya da firmalar (Turkcell, Telsim vb.) bu tip servislerden gelen mesajları iletmeyebiliyor.
4. Yüklü miktarda SMS gönderecekseniz ve iletilmesi önemli ise Turkcell ve Telsim gibi hizmet aldığınız firmalarla anlaşma yapıp, http kullanarak daha uygun fiyatlı SMS gönderebilirsiniz. Bu durumda firma size gönderme bilgilerini verecektir.
Az mesaj gönderiyorsanız 1 veya 2'yi, Şirket için ve yüklü miktarda SMS gidecekse 4'ü, kişisel bir çalışma ise 3'ü seçin.
Fax Gönderme ve Alma
Fax gönderme ve alma işini bedava olarak dağıtılan TurboPower Async Pro ile yapabilirsiniz. Examples klasöründe örnekleri var
Barkod Bileşenleri
Artık bedava olarak dağıtılan Turbopower SysTools paketi içinde barkod bileşenleri var. Barkod işlemleriniz için bu bileşenleri kullanabilirsiniz.
USB Porttan Bilgi Okuma
1. USB/Serial dönüştürücüler var. Bunları kurduğunuz zaman USB potta, serial (COM) portlarda yapabildiğin şeyleri yapabilirsin. Mesela
http://www.ftdichip.com/ 2. Turbopower Async Pro USB serial cihazlarla haberleşebiliyor. Onu kullanabilirsiniz.
ICQ'ya Mesaj Gönderme
Turbopower iPro (Internet Pro) paketi içinde pager bileşenleri vardı. Bu bileşen ile mesaj atabilirsiniz.
Office XP Tarzı Menüler Oluşturmak
1. Güzel bir menü bileşeni olan Toolbar 2000 ve eklentisi TBX ile de yapabilirsiniz. İkisi de bedava.
www.jrsoftware.org 2. XP menu bileşeni ile yapabilirsiniz. O da bedava. Normal menu ve formlarla tasarımı yapıp, bu bileşeni forma koyduğunuz anda çalışma anında herşey XP tarzı oluyor.
Show ile ShowModal Arasındaki Fark
Show ile açarsanız formu kapatmadan başka formlara ulaşabilirsiniz, mesela ana form. Ama ShowModal ile açarsanız, arka planda kalan diğer formlara ulaşamazsınız.
Netmaster Paketinde Yer Alan NMSMTP Bileşenini Delphi 7'de Bulamıyorum?
Netmaster paketi artık Delphi ile dağıtılmıyor ve Delphi 7 ile de gelmiyor. Yeni kullanacaklar için, ileriye doğru sıkıntı olmaması için Indy kullanmanızı öneririm. Yarın birgün Delphi'nizi yenilerseniz, kodları değiştirmeniz gerekmez.
.mp3 Dosyalarını Çalma
Windows'un çalabildiği tüm ses dosyalarını System tabındaki MediaPlayer bileşeni ile çalabilirsiniz. Ayrıca PlaySound API'si ile de çalma işlemini gerçekleştirebilirsiniz.
Ağ üzerinde Mesaj Gönderme (net send, winpopup gibi)
Windows işletim sistemlerinde ağ üzerindeki bilgisayarlar birbirlerine mesaj atabilirler. Windows NT/2000/XP'de bunun için "net send" komutu kullanılır. Windows 9x'te ise Winpopup isimli program kullanılır.
Delphi'de yazacağınız program içersiniden bu tarz mesaj atmak için, bedava olarak dağıtılan TurboPower SysTools paketi içerisindeki stNetMessage isimli bileşeni kullanabilirsiniz.
Farklı Ekran Çözünürlüklerinde Formların Düzgün Gözükmesi
Align ve Anchors özelliklerini kullanarak formlarınızın farklı ekran çözünürlüklerinde en iyi şekilde görünmesini sağlayabilirsiniz. Form üzerine birkaç bileşen koyup, bu özellikleri değiştirerek görsel olarak olayı anlayabilirsiniz.
Align : bileşenin duracağı yeri belirler. Mesela bir panelin Align özelliğini alBottom verirseniz, pencereyi naparsanız yapın, panel hep ekranın altında kalır.
Anchors : bileşenin hangi kenara göre kendini ayarlayacağını belirler. Mesela sadece [akRight] derseniz, sağ kenara göre aradaki uzaklık sabit kalacak şekilde kendini ayarlar. Mesela sağ kenardan 100 birim uzakta ise, formu büyütünce ve küçültünce yine sağ kenardan 100 birim uzakta kalır.
System.pas not found Hatası
Delphi'de programı derlemek için gerekli olan unitlerin Library Path'te tanımlı olması gerekir. Delphi uniti proje klasöründe bulamazsa bu klasörlere bakarak uniti bulur ve programı derler.
Bazen bu Library Path tanımı silinebiliyor. Buna da genellikle bozuk ayarlanmış bileşenleri kurmak neden oluyor. Delphi'nin eski sürümlerinde eğer bu Library Path tanımı çok uzunsa yine problem çıkıyordu. Bunu sonraki sürümlerde düzelttiler.
Bu hatayı düzeltmek için ilgili unitin bulunduğu klasörleri Library Path'e eklemeniz gerekir. Örneğin system.pas not found hatası almışsanız :
1. Diskinizde "system.dcu" dosyasını aratın ve bulunduğu klasörü tespit edin.
2. Tools -> Environment Options komutunu verin.
3. Library sekmesine geçin.
4. Library Path'in yanındaki ... butonuna tıklatın.
5. Açılan pencerede yine ... butonuna basıp, system.dcu dosyasının bulunduğu klasörü seçin.
6. Add butonuna tıklatıp klasörü listeye ekleyin.
7. OK'leyerek pencereleri kapatın.
Bu hatanın önüne geçmek içinde birkaç önerimiz var :
1. Her önünüze gelen bileşeni yüklemeyin. Bozuk bileşenler Delphinizin düzenini ciddi manada bozabilir.
2. Yüklediğiniz ve kullanmadığınız bileşenler varsa silin ve klasörünü Library Path'ten kaldırın.
3. Bileşen kurmadan önce Library Path bilgisini copy-paste ile bir text dosyaya kaydedin. Problem çıkarsa, tekrar copy-paste ile yapıştırsınız, tek tek seçmek için uğraşmazsınız.
4. $Delphi alias'ını kullanabilirsiniz. Bu Library Path'te kullanabileceğiniz geçerli bir yazımdır ve Delphi klasörünü gösterir. Yani $Delphi = C:\Program Files\Borland\Delphi7'dir. Tabi bu kurduğunuz klasöre göre değişebilir.
Banker (parasal) Yuvarlaması
Parasal değerlerde bazen normal yuvarlama yerine 3-4 basamak birden yuvarlama yapmanız gerekebilir. Mesela 15.557.850 TL tutan bir ücreti 100 binlik bir hassasiyet ile yuvarlayarak 15.600.000 TL yapmak isteyebilirsiniz. İşte bunu RoundTo fonksiyonu ile yapabilirsiniz
Ekranları XP Görünümlü Yapmak
Delphi 7 içinde XP Manifest diye bir component var. Onu ana forma koyarsanız herşey XP görünümü çıkar. XP Manifest'in herhangi bir ayarı yok. Bileşeni ana forma koyun. Programı Windows XP'de çalıştırırsanız, program XP arayüzü ile açılır. Eğer diğer işletim sistemlerinde çalıştırırsanız, normal arayüzle çalışır.
Eğer daha önceki bir Delphi sürümü kullanıyorsanız, bedava olarak dağıtılan XP Menu isimli bileşen ile bu işi yapabilirsiniz :
www.torry.net ten indirebilirsiniz.
Delphi'de zip Sıkıştırma Formatını Kullanma
Turbopower Abbrevia ile zip, Microsoft CAB, tar ve gzip formatlarını kullanabilirsiniz.
.exe Dosyaların Boyutunu Küçültmek
Eğer sık sık program güncelliyorsanız ve bunuda internet gibi bir ortamdan dağıtıyorsanız .exe dosyanın boyutu bazen sıkıntı olabilir. .exe dosyanın boyutunu %99'lara varan oranda küçültme için .bpl'leri kullanabilirsiniz. Bir denememde 4 MB'lık bir dosyayı 40 KB'ye düşürdü.
Project - Options - Packages kısmındaki Built with runtime packages seçeneğini işaretleyin ve bu şekilde derleyin. Bir de bu seçeneğin hemen altında ismi yazan bpl'leri programı yüklediğiniz bilgisayarın Windows\System32 klasörüne bir sefer kopyalamanız yeterli.