معلم دلفی

سه‌شنبه، دی ۰۶، ۱۳۸۴

تغییر رنگهای یک گرید

How to change the string grid cell color?

سورس کد زیر به شما کمک می کند که با استفاده از رویدادهای انتخاب یک سلول یا در زمان ایجاد تصویر سلول تغییرات مورد نظر شما در زمینه رنگ سلولها اعمال شود.



type
TGridCracker = Class( TStringgrid );
// required to access protected method Invalidaterow


procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean);
begin
With TGridCracker( Sender As TStringgrid ) Do Begin
InvalidateRow( Row );
InvalidateRow( aRow );
End;
end;


procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
grid: TStringgrid;
begin
If gdFixed In State Then Exit;


grid := Sender As TStringgrid;
If grid.Row = aRow Then Begin
With Grid.Canvas.Brush Do Begin
Color := $C0FFFF;
Style := bsSolid;
End;
grid.Canvas.FillRect( Rect );
grid.Canvas.Font.Color := clBlack;
grid.Canvas.TextRect( Rect, Rect.Left+2, Rect.Top+2, grid.Cells[acol, arow]);
Grid.Canvas.Brush := grid.Brush;
End;



چهارشنبه، آذر ۰۹، ۱۳۸۴

انتقال یک فایل بزرگ از طریق تقسیم به قطعات کوچک در دلفی

گاهی برای انتقال یک فایل بزرگ محدودیت پهنای باند داریم و نمی توانیم آنرا یکجا منتقل کنیم. در این زمیان با تقسیم فایل به قسمتهای کوچک و انتقال هر قسمت به مقصد و در نهایت ساختن فایل اصلی راه حل خوبی است.
در حال حاضر برنامه های زیادی هستند که انتقال فایل از اینترنت را با این روش انجام می دهند و کاربران ایرانی هم بدلیل سرعت اینترنت در ایران از متقاضیان اینگونه برنامه ها هستند.
نمونه این برنامه ها FlashGet یا ReGet هستند.
حال اگر می خواهید اینکار را در دلفی انجام دهید می توانید با استفاده از TStream و سورس کد نمونه زیر اینکار را انجام دهید.



procedure SplitFile(FileName : TFileName; FilesByteSize : Integer) ;
// FileName == file to split into several smaller files
// FilesByteSize == the size of files in bytes
var
fs, ss: TFileStream;
cnt : integer;
SplitName: String;
begin
fs := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite) ;
try
for cnt := 1 to Trunc(fs.Size / FilesByteSize) + 1 do
begin
SplitName := ChangeFileExt(FileName, Format('%s%d', ['._',cnt])) ;
ss := TFileStream.Create(SplitName, fmCreate or fmShareExclusive) ;
try
if fs.Size - fs.Position < FilesByteSize then
FilesByteSize := fs.Size - fs.Position;
ss.CopyFrom(fs, FilesByteSize) ;
finally
ss.Free;
end;
end;
finally
fs.Free;
end;
end;






procedure MergeFiles(FirstSplitFileName, OutFileName : TFileName) ;
// FirstSplitFileName == the name of the first piece of the split file
// OutFileName == the name of the resulting merged file
var
fs, ss: TFileStream;
cnt: integer;
begin
cnt := 1;
fs := TFileStream.Create(OutFileName, fmCreate or fmShareExclusive) ;
try
while FileExists(FirstSplitFileName) do
begin
ss := TFileStream.Create(FirstSplitFileName, fmOpenRead or fmShareDenyWrite) ;
try
fs.CopyFrom(ss, 0) ;
finally
ss.Free;
end;
Inc(cnt) ;
FirstSplitFileName := ChangeFileExt(FirstSplitFileName, Format('%s%d', ['._',cnt])) ;
end;
finally
fs.Free;
end;
end;





بصورت زیر می توان این توابع را صدا زد و مورد استفاده قرار داد.




SplitFile('c:\mypicture.bmp', 1024) ; //into 1 KB files
...
MergeFiles('c:\mypicture._1','c:\mymergedpicture.bmp') ;






در این مثال یک فایل تصویری به قطعات یک کیلو بایتی تقسیم شده و سپس این قطعات در مقصد با هم فایل اصلی را خواهند ساخت.

سه‌شنبه، آذر ۰۸، ۱۳۸۴

استفاده از اکتیو ایکس در برنامه های دلفی

یکی از روشهای بسیار کارا در برنامه نویسی امکان استفاده از اکتیو ایکس در برنامه است که دلفی هم این امکان را در اختیار برنامه نویسان قرار داده است.
مثلا فرض کنید شما می خواهید در برنامه خودان یک فایل پی دی اف را باز کرده و نمایش دهید.
برای اینکار می توانید با وارد نمودن اکتیو ایکس مربوط به آکرویات ریدر در دلفی براحتی از تمام امکاناتی که در برنامه آکروبات ریدر دارید در برنامه دلفی خودتان استفاده نمائید.

راهنمای وارد کردن اکتیو ایکس در دلفی :

1- دلفی را اجرا کرده و از منوی Component گزینه Import Activex Control را انتخاب نمائید.
2- از لیست نمایش داده شده اکتیو ایکس مورد نظر خود را پیدا کرده و انتخاب نمائید.
3- محل قرار دادن این اکتیو ایکس را در دلفی انتخاب کنید. این کامچوننت بصورت پیش فرض در ActiveX گذاشته می شود.
4- روی Install کلیک کنید.
5- بسته ای که می خواهید این کامپوننت در آن نصب شود را انتخاب نمائید. پیشنهاد می کنم از گزنه های پیش فرض خود دلف یدر این مورد استفاده کنید و چیزی را تغییر ندهید . فقط تائید کنید.
6- بعد از نصب و بستن پنجره های پیام سیستم می توانید در پلت ActiveX کامپوننت را پیدا پیدا کرده و از آن براحتی مانند بقیه کامپوننتهای دلفی استفاده نمائید.

چهارشنبه، آبان ۲۵، ۱۳۸۴

استفاده از توابع تلفن ویندوز

در API ویندوز مجموعه ای از توابع وجود دارند که با استفاده از آنها می توان تمام کارهای مربطو به تلفن و ارتباط برنامه از طریق تلفن را انجام داد.
این مجموعه با نام TAPI شناخته شده است.
برای استفاده از این مجموعه در دلفی در پروژه JEDI مجموعه ای قرار داده شده که افراد علاقه مند می توانند آنرا دانلود کرده و استفاده نمایند.
برای دانلود می توانید به صفحه سایت JEDI در این زمینه مراجعه نمائید.
ftp://delphi-jedi.org/api/TAPI.zip (162k)
در آینده سعی خواهم کرد نمونه سورس کدهای این برنامه را هم در اینجا ارائه نمایم.

برای اطلاعات بیشتر در زمینه این API می توانید به سایت زیر مراجعه نمائید.
http://www.microsoft.com/windows2000/techinfo/howitworks/communications/telephony/iptelephony.asp

در ضمن تعریف دیگری هم در سایت ویکی پدیا در این زمینه وجود دارد
http://en.wikipedia.org/wiki/Telephony_Application_Programming_Interface

اطلاعات بیشتر در مورد تمامی توابع API که در پروژه JEDI تعریف شده اند را می توانید در این سایت ببینید
http://www.delphi-jedi.org/APILIBRARY:226293

شنبه، مهر ۲۳، ۱۳۸۴

چطور یک برنامه تنظیم اولیه بنویسیم.

Using the RunOnce Registry Key

گاهی نیاز داریم که یک برنامه فقط یکبار آنهم زمانی که ویندوز بالا می آید اجرا شده و در دفعات دیگر بالا آمدن ویندوز اجرا نشود. مثلا می خواهیم این برنامه در اولین بار بعد از نصب برنامه ما بر روی سیستم اجرا شده و تنظیمات خاصی را بر روی سیستم انجام دهد.
برای اینکار در رجیستری ویندوز کلید خاصی وجود دارد که اگر درست تنظیم نمائیم اینکار را برای ما انجام می دهد.
نمونه سورس کد دلفی زیر می تواند به شما در این زمینه کمک نماید.

uses Registry;

procedure TForm1.Button1Click(Sender: TObject) ;
var reg: TRegistry;
begin
reg := TRegistry.Create;
reg.RootKey := HKEY_LOCAL_MACHINE;
reg.LazyWrite := False;
reg.OpenKey(
'Software\Microsoft\Windows CurrentVersion\RunOnce',
False) ;
reg.WriteString('Delete Me!',
'command.com /c del Dummy.txt') ;
reg.CloseKey;
reg.free;
end;


در رجیستری ویندوز در بخض زیر اطلاعات مورد نظر ما نوشته خواهد شد. البته شما می توانید نام هر برناه دیگری را هم در این بخش بنویسید.
برنامه بالا در اولین بار بالا آمدن ویندوز یک فایل که اسمش نوشته شده را پاک می نماید.


HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce

چهارشنبه، مهر ۱۳، ۱۳۸۴

سورس کد یک برنامه نمونه برای لرزاندان پنجره برنامه

حتما در برنامه یاهو دیده اید که با زدن زنگ پنجره برنامه شروع به لرزش می کند. اگر می خواهید اینکار را در دلفی انجام دهید می توانید از سورس کد زیر استفاده نمائید.



procedure WindowShake(wHandle: THandle) ;
const
MAXDELTA = 4;
SHAKETIMES = 500;
var
oRect, wRect :TRect;
deltax : integer;
deltay : integer;
cnt : integer;
dx, dy : integer;
begin
//نگهداری محل اصلی پنجره
GetWindowRect(wHandle,wRect) ;
oRect := wRect;

Randomize;
for cnt := 0 to SHAKETIMES do
begin
deltax := Round(Random(MAXDELTA)) ;
deltay := Round(Random(MAXDELTA)) ;
dx := Round(1 + Random(2)) ;
if dx = 2 then dx := -1;
dy := Round(1 + Random(2)) ;
if dy = 2 then dy := -1;
OffsetRect(wRect,dx * deltax, dy * deltay) ;
MoveWindow(wHandle, wRect.Left,wRect.Top,
wRect.Right - wRect.Left,wRect.Bottom - wRect.Top,true) ;
end;
//برگرداندن برنامه به محل اصلی
MoveWindow(wHandle, oRect.Left,oRect.Top,
oRect.Right - oRect.Left,oRect.Bottom - oRect.Top,true) ;
end;


برای استفاده می توانید در برنامه اصلی مثلا بر روی رویداد کلیک یک دکمه بصورت زیر بنویسید :


WindowShake(Application.MainForm.Handle) ;

چهارشنبه، مهر ۰۶، ۱۳۸۴

چطور امکان ویرایش اطلاعات را در درون یک لیست باکس اضافه کنیم؟

همانطور که می دانید لیست باکس فقط آیتمهای موجود و تعریف شده در خودش را نشان می دهد و امکان ویرایش آیتمها نیست. اما اگر شما در برنامه ای بخواهید امکان ویرایش آیتمهای لیست باکس را به کاربر بدهید چکار خواهید کرد؟
برنامه زیر روش انمجام اینکار را به شما نشان می دهد. استفاده از این روش برای همه کامپوننتهای دیگر هم جواب می دهد.

ابتدا یک لیست باکس درون فرم خود قرار دهید و در تعریف فرم خود سورس زیر را اضافه کنید:

type
TForm1 = class(TForm)
...
private
ListEdit : TEdit;
procedure ListEditKeyPress(Sender: TObject; var Key: Char) ;
end;



متغیر اول برای این است که بتوانیم یک editbox را در زمان اجرا ایجاد کنیم و به آیتم انتخاب شده در لیست باکس مقدار دهی کنیم.
روال نام برده شده هم برای این است که بتوانیم کنترل ورود صفحه کلید را برای این برنامه داشته باشیم.

شیء مربوط به ویرایش را باید در زمان ایجاد فرم بسازیم. و والد آ«را به لیست باکس تغییر دهیم. با سورس کد زیر میشه اینکار را انجام داد که باید در بخش مربطو به رویداد ایجاد فرم نوشته بشه.


procedure TForm1.FormCreate(Sender: TObject) ;
begin
ListEdit := TEdit.Create(self) ;
ListEdit.Visible := false;
ListEdit.Ctl3D := false;
ListEdit.BorderStyle := bsNone;
ListEdit.Parent := ListBox1;
ListEdit.Width := ListBox1.ClientWidth;
ListEdit.OnKeyPress := ListEditKeyPress;
end;



حالا باید کاری کنیم که با کلیک روی یک آیتم لیست باکس ، ادیت باکس خودمون را بیاریم و در همان مکان نشان بدیم.
با استفاده از سورس زیر در رویداد onclick لیست باکس میشه اینکار را انجام داد.


procedure TForm1.ListBox1Click(Sender: TObject) ;
var
ii : integer;
lRect: TRect;
begin
ii := ListBox1.ItemIndex;
if ii = -1 then exit;

lRect := ListBox1.ItemRect(ii) ;
ListEdit.Top := lRect.Top + 1;
ListEdit.Left := lRect.Left + 1;
ListEdit.Height := (lRect.Bottom - lRect.Top) + 1;

ListEdit.Text := ListBox1.Items.Strings[ii];
ListBox1.Selected[ii] := False;

ListEdit.Visible := True;
ListEdit.SelectAll;
ListEdit.SetFocus;
end;


تنها کاری که باید انجام دهیم نوشتن روتین مربطو به فشرده شدن کلید هست.

procedure TForm1.ListEditKeyPress(Sender: TObject; var Key: Char) ;
var
ii: Integer;
begin
if Key = #13 then
begin
ii := ListBox1.ItemIndex;
ListBox1.Items.Delete(ii) ;
ListBox1.Items.Insert(ii, ListEdit.Text) ;
ListEdit.Visible := False;
Key := #0;
end;
end;

در سورس کد بالا بعد زا اینکه کلید Enter زده شد باید مقدار EditBox را در ListBox بگذاریم و مقدار قبلی را حذف کنیم.

و در کنار آنهم باید بعد از اینکه focus از روی listbox برداشته شد editbox را پنهان کنیم که سورس کد زیر اینکار ار انجام میده.
این سروس کد باید در رویداد خروج لیست باکس نوشته بشه.


procedure TForm1.ListBox1Exit(Sender: TObject) ;
begin
ListEdit.Visible := false;
end;

یک سورس کد دلفی خوب - چطور میشه با حرکت موس روی listbox آیتم زیر اون انتخاب بشه

کاری که باید انجام بشه اینه که روی رویداد مربوط به حرکت موس در لیست باکس برنامه زیر را بنویسیم.
در این برنامه بسته به اینکه موس کجا قرار گرفته ، آیتم مربوط به لیست باکس فعال میشه.


procedure TForm1.ListBox1MouseMove
(Sender: TObject; Shift: TShiftState; X, Y: Integer) ;
begin
ListBox1.ItemIndex := ListBox1.ItemAtPos(Point(x,y), True) ;
end;

شنبه، مهر ۰۲، ۱۳۸۴

کامپوننت تقویم فارسی برای برنامه نویسی

کامپوننت تقویم فارسی برای برنامه نویسان دلفی
به طراح خوب این کامپوننت پیشنهاد می کنم که اسمی حرفه ای برای این کامپوننت خوب انتخاب کنند. داشتن یک اسم با معنی و حرفه ای فروش را افزایش خواهد داد.
اینکه فقط اسم کامپوننت را بصورت اسم کلاس آن اعلام کنیم یا توضیح دهیم و اسم نگذاریم تاثیر منفی در فروش در طولانی مدت خواهد داشت.


نقل از سایت رسمی این کامپوننت :
راهکارهای تاريخ هجری شمسی پشتيبانی کامل تاريخ هجری شمسی در دلفی را فراهم می کند. اين بسته شامل روال های بنيادی برای استفاده از نوع TDateTime و فيلدهای DATETIME با تاريخ هجری شمسی و کامپوننت های ويژوال جهت ارايه مقادير تاريخ هجری شمسی برای مقاصد نمايش و ويرايش می باشد.

با استفاده از اين بسته می توانيد کاربردهای دارای تاريخ هجری شمسی را با کمترين کدنويسی و صرف وقت، با کيفيت بالا توسعه دهيد.

فايده ها:
توسعه سريع کاربرد (RAD) در کاربردهايی که تاريخ هجری شمسی بکار می برند، بويژه کاربردهای ديتابيسی.
استفاده از نوع استاندارد TDateTime برای نگهداری مقادير تاريخ و زمان هجری شمسی؛ داشتن سازگاری.
تعريف فيلدهای تاريخ هجری شمسی در ديتابيس ها از نوع استاندارد.
نمايش تاريخ-زمان های قالب دهی شده، سودمند در ساخت گزارش ها.
ايجاد رابط کاربرهای با کيفيت بالا، بهمراه آوردن سادگی و سرعت در وارد کردن تاريخ ها برای کاربر نهايی.
بی نياز از بررسی اعتبار تاريخ های هجری شمسی وارد شده توسط کاربر.
مستقل از نوع تقويم سيستم عامل.
پشتيبانی از تم های XP.



دوشنبه، شهریور ۲۸، ۱۳۸۴

چطور میشه در برنامه دلفی امکان ویرایش یک صفحه وب را داد؟

یک کامپوننت مرورگر اینترنت در فرم برنامه بگذارید . در بخش تابع مربوط به ایجاد فرم سورس زیر را بنویسید.

uses MSHTML;

procedure TForm1.FormCreate(Sender: TObject) ;
begin
WebBrowser1.Navigate('http://delphi.webrah.com') ;
end;



در بخش مربوط به رویداد مرورگر اینترنتی هم سورس پائین را اضافه نمایئد.


procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant) ;
begin
((Sender as TWebBrowser).Document as IHTMLDocument2).designMode := 'on';
end;



حالا برنامه را اجرا کنید و ببینید که چطور براحتی میشه در این صفحه وب نوشت.
برای اینکه بتوانید این صفحه ویرایش شده را نگهداری کنید باید آنرا ذحیره نمائید. راهنمای ذخیره یک صفحه وب هم از طریق برنامه در مقاله زیر توضیح داده شده است.
چطور میشه محتوای یک صفحه html را ذخیره کرد

یک سایت خوب با سورس کد رایگان برای برنامه های دلفی

آموزش دلفی
در این سایت می توانید سورس کدهای مربوط به موارد زیر را با توضیحات کامل دانلود کرده و استفاده نمائید.
  1. استفاده از دیتابیس اکسز تو دلفی
  2. ترکیب دو تصویر
  3. حلقه در حال گردش
  4. طراحي فيلتر نگاتيو
  5. به دست آوردن رنگ (RGB) هر نقطه با حركت ماوس بر روي دسكتاپ يا هر جاي ديگه
  6. نمايش زمان و تاريخ به صورت خودكار در دلفي
  7. سياه و سفيد كردن تصوير با دلفي

    راستی اگر شما هم سایت می شناسید که سورس کد دلفی داره در اینجا معرفی کنید.

شنبه، شهریور ۲۶، ۱۳۸۴

چطور میشه لیست دستگاههای موجود در سیستم را در زبان دلفی تهیه کرد؟

با سورس کد زیر می توانید لیست دستگاههای موجود در کامپیوتر را ببینید.
کامپوننتهای زیر را اضافه کنید و در بخش مربوط به رویداد لیک دکمه خود سورس زیر را هم بنویسید
TMemo
TButton
اینکه چطور میشه به یک پورت اطلاعات فرستاد یا اطلاعاتی را خواند را هم در مقالات بعدی توضیح خواهم داد.

procedure TForm1.Button1Click(Sender: TObject) ;
var
istr: string;
isize, j: dword;
begin
setlength(istr, 4000) ;
isize := QueryDosDevice(nil, @istr[1], 4000) ;
for j := 1 to isize do
if istr[j] = #0 then istr[j] := #10;
memo1.lines.CommaText := istr;
end;

چهارشنبه، مرداد ۲۶، ۱۳۸۴

شبیه سازی فشرده شدن یک کلید از درون برنامه

گاهی شما می خواهید از درون برنامه خودتان فشرده شدن یک کلید را برای برنامه شبیه سازی نمائید بطوریکه انگار یک کاربر این کلید را فشرده است.

در این روتین برای همه کلیدهائی که قابل نمایش هستند فق کافیست که کد اسکی آنها را به این روتین بدهید و برای کلیدهای شیفت یا کنترل بایستی متغیر مربوطه را تنظیم نمائید.



Procedure PostKeyEx32(key: Word; const shift: TShiftState; specialkey: Boolean) ;

type
TShiftKeyInfo = record
shift: Byte ;
vkey: Byte ;
end;
ByteSet = set of 0..7 ;
const
shiftkeys: array [1..3] of TShiftKeyInfo =
((shift: Ord(ssCtrl) ; vkey: VK_CONTROL),
(shift: Ord(ssShift) ; vkey: VK_SHIFT),
(shift: Ord(ssAlt) ; vkey: VK_MENU)) ;
var
flag: DWORD;
bShift: ByteSet absolute shift;
j: Integer;
begin
for j := 1 to 3 do
begin
if shiftkeys[j].shift in bShift then
keybd_event(shiftkeys[j].vkey, MapVirtualKey(shiftkeys[j].vkey, 0), 0, 0) ;
end;
if specialkey then
flag := KEYEVENTF_EXTENDEDKEY
else
flag := 0;

keybd_event(key, MapvirtualKey(key, 0), flag, 0) ;
flag := flag or KEYEVENTF_KEYUP;
keybd_event(key, MapvirtualKey(key, 0), flag, 0) ;

for j := 3 downto 1 do
begin
if shiftkeys[j].shift in bShift then
keybd_event(shiftkeys[j].vkey, MapVirtualKey(shiftkeys[j].vkey, 0), KEYEVENTF_KEYUP, 0) ;
end;
end;


برای استفاده از کد بالا در برنامه هم می توانید از سورس دلفی زیر استفاده نمائید:


procedure TForm1.SpeedButton1Click(Sender: TObject) ;
begin
// Simulate PRINTSCREEN - snapshot of the full screen
PostKeyEx32(VK_SNAPSHOT, [], False) ;

// Simulate PRINTSCREEN - snapshot of the active window
PostKeyEx32(VK_SNAPSHOT, [ssAlt], False) ;

// Simulate left Windows key
PostKeyEx32(VK_LWIN, [], False) ;

// Simulate Alt+F4 - close active window
PostKeyEx32(VK_F4, [ssAlt], False) ;
end


برداشتی از سایت Delphi.About.com

دوشنبه، مرداد ۲۴، ۱۳۸۴

چطور میشه برنامه را از نوار وظیفه پنهان کرد؟



procedure TForm1.FormCreate(Sender: TObject) ;
begin
ShowWindow(Application.Handle, SW_HIDE) ;
SetWindowLong(Application.Handle, GWL_EXSTYLE,
getWindowLong(Application.Handle, GWL_EXSTYLE) or
WS_EX_TOOLWINDOW) ;
ShowWindow(Application.Handle, SW_SHOW) ;
end;

سه‌شنبه، تیر ۲۸، ۱۳۸۴

چطور می توان رزولوشن صفحه نمایش را از با برنامه نویسی تغییر داد؟

شاید شما هم برای اینکه برنامه تان بتواند کامل د مناسب نمایش داده شود، نیاز دارید که در یک اندازه خاص از صفحه نمایش کار کنید.
برای اینکار می توانید اندازه رزولوشن صفحه را در هنگام اجرا تغییر دهید.
برنامه زیر به شما کمک خواهد کرد تا با کمک API ویندوز اینکار را در دلفی انجام دهید

function SetScreenResolution(Width, Height: integer): Longint;
var
DeviceMode: TDeviceMode;
begin
with DeviceMode do begin
dmSize := SizeOf(TDeviceMode);
dmPelsWidth := Width;
dmPelsHeight := Height;
dmFields := DM_PELSWIDTH or DM_PELSHEIGHT;
end;
Result := ChangeDisplaySettings(DeviceMode, CDS_UPDATEREGISTRY);
end;



با کمک سورس کد زیر هم میشه این روتین را صدا زد :


var
OldWidth, OldHeight: integer;

procedure TForm1.Button1Click(Sender: TObject);
begin
OldWidth := GetSystemMetrics(SM_CXSCREEN);
OldHeight := GetSystemMetrics(SM_CYSCREEN);
SetScreenResolution(800, 600);
end;

پنجشنبه، تیر ۲۳، ۱۳۸۴

Windows Telephony (TAPI) Support in Windows NT 4.0

در سایت شرکت میکروسافت می توانید با TAPI آشنا بشید که راهنمای برنامه نویسی و ارتباط با تلفن را بطور کامل توضیح داده است.
سورس کدهای نوشته شده در اینجا همگی با وی بی یا سی هستند که شما براحتی می توانید اونها را به زبان دلفی نوشته و استفاده کنید.

Windows Telephony (TAPI) Support in Windows NT 4.0

استفاده از SPSs در برنامه دلفی

شاید برای شما هم پیش آمده که در پروژه ای نیاز به استفاده از ابزار قوی
SPSS در برنامه خود داشته باشید.
در این سایت می توانید کامپوننتهائی را پیدا کنید که امکان استفاده از تمام ویژگیهای این برنامه را به شما می دهد.
http://users.erols.com/eischeid/TSPSSDataFile/

البته یک را ساده برای تمام برنامه های از این نوع، برنامه نویسی به صورت OLE است.

چهارشنبه، تیر ۰۱، ۱۳۸۴

Creating a roll up Delphi form (with animation)

با استفاده از این کد می توانید یک فرم با انیمیشن داشته باشید.
با کلیک راست بر روی عنوان فرم می توانید اجرا برنامه را ببینید.
می توانید از این سورس کد دلفی در برنامه خودتان استفاده نمائید. فقط کافیه کپی کرده و در برنامه اضافه نمائید.

type
TForm1 = class(TForm)
private
fOldClientHeight: Integer;
procedure WMNCRButtonDown(var Msg: TWMNCRButtonDown) ; message WM_NCRBUTTONDOWN;
public
end;

var
Form1: TForm1;

implementation
{$R *.dfm}

procedure TForm1.WMNCRButtonDown(var Msg: TWMNCRButtonDown) ;
var
h : integer;
begin
if (Msg.HitTest = HTCAPTION) then
begin
if (ClientHeight = 0) then
begin
for h := 0 to fOldClientHeight do ClientHeight := h;
Application.ProcessMessages;
end
else
begin
fOldClientHeight := ClientHeight;
for h := fOldClientHeight downto 0 do ClientHeight := h;
Application.ProcessMessages;
end;
end;
end;

چهارشنبه، اردیبهشت ۰۷، ۱۳۸۴

اگر می خواهید برنامه شما در دلفی با بارکد کار کند ، این برنامه را دانلود کنید.

این مجموعه کامپوننت بهمراه سورس ارائه شده است. براحتی می توانید این مجموعه را برای خواندن یا تولید و یا نوشتن بار کد در برنامه دلفی استفاده نمائید.



لینک برنامه برای دانلود

اگر می خواهید بصورت حرفه ای برنامه را در این زمینه استفاده نمائید بهتر است نگاهی هم به این سایت داشته باشید
http://www.zornsoftware.com/barcomp/
می توانید برنامه آزمایش را هم دانلود نمائید.

یکشنبه، اردیبهشت ۰۴، ۱۳۸۴

اجرای فایل فلش در برنامه دلفی

برای اینکه بتوانیم فایلهای فلش را در برنامه دلفی اجرا نمائیم بایستی اکتیوایکس فلش را در دلفی نصب و آنرا در برنامه دافی صدا بزنیم.
راهنمای تصویری اینکار در سایت زیر ارائه شده است.
این راهنما به زبان انگلیسی است اما بدلیل استفاده از تصویر براحتی برای افرادی که به زبان انکلیسی هم آشنا نستند قابل استفاده می باشد.
Running Flash animations with Delphi

چطور در برنامه دلفی بفهمیم که آیا کامپیوتر به اینترنت متصل هست یا نه؟



procedure TForm1.Button1Click(Sender: TObject) ;

function FuncAvail(_dllname, _funcname: string; var _p: pointer): boolean;
{return True if _funcname exists in _dllname}
var _lib: tHandle;
begin
Result := false;
If LoadLibrary(PChar(_dllname)) = 0 then exit;
_lib := GetModuleHandle(PChar(_dllname)) ;
If _lib <> 0 then
begin
_p := GetProcAddress(_lib, PChar(_funcname)) ;
if _p <> NIL then Result := true;
end;
end;

{
Call SHELL32.DLL for Win > Win98
otherwise call URL.dll
}
{buton code:}
var
InetIsOffline : function(dwFlags: DWORD):
BOOL; stdcall;
begin
if FuncAvail('URL.DLL', 'InetIsOffline', @InetIsOffline) then
if InetIsOffLine(0) = true then
ShowMessage('Not connected')
else
ShowMessage('Connected!') ;
end;




آیا ما به اینترنت متصل هستیم؟

سه‌شنبه، فروردین ۰۹، ۱۳۸۴

استفاده از اسکنر در دلفی

یک نمونه سورس کد در سایت زیر هست. حتما ببینید
سورس کد نمونه برای کار با اسکنر در دلفی

علاوه بر این در گروه معلم دلفی چند آدرس دیگه هم معرفی شده که در صورت تمایل میتوانید در آدرس زیر آنها را ببینید
گروه معلم دلفی

دات نت در دلفی 2005

نمی دانم دلفی 2005 را دیده اید یا نه؟ اگرگ تابحال با این برنامه کار نکرده اید حتما این تجربه را شروع کنید.
بورلند با ارائه دلفی هست بنظر من کمی برای برناهم نویسان قدیمی دلفی ایجاد مشکل کرد. اینکه امکان برنامه نویسی بصورت غیر دات نتی وجود نداشت خیلیها را دچار مشکل کرد.
اما در دلفی 2005 شما هم می توانید دلفی معمولی بنویسید و هم دات نت و علاوه بر همه اینها می توانید سی شارپ هم بنویسید.
و الیته برنامه نویسی تحت وب دات نت بسیار آسان شده ( هرچند در دلفی هشت هم آسان بود)
پیشنهاد می کنم برنامه نویسی تحت وب را حتما با سی شارپ یا دلفی و در بورلند 2005 انجام دهید.
تجربه ای است که بعد از آن شما با هیچ ابزار دیگری برای برنامه نویسی کار نخواهید کرد.

اگر در این زمینه سوالی داشتید در اینجا مطرح کنید. من در حد توانم پاسخگو خواهم بود.

سه‌شنبه، فروردین ۰۲، ۱۳۸۴

ارتباط بآ مودم در برنامه دلفی

سوالی که بیشتر مواقع پرسیده می‌شود، چگونگی ارتباط با مودم از درون برنامه دلفی است. متاسفانه در این زمینه کامپوننت رایگانی وجود ندارد یا حداقل من نتوانسته‌ام پیدا کنم. اما یک راه حل کامل وجود دارد.

استفاده از TAPI یا Telephone API

توابع موجود در این کتابخانه که از کتابخانه‌های ویندوز است به شما امکان انجام تمام کارهای تعریف شده با مودم را می‌دهد.

تلاش می کنم سورس کد نمونه‌ای برای کار با این تابع پیدا کرده و در اختیار شما قرار دهم.

 

موفق باشید

 

چهارشنبه، اسفند ۱۲، ۱۳۸۳

SQL Server and Delphi

سوالی که بیشتر بازدیدکنندگان سایت من می پرسند در مورد نحوه استفاده از بانک اطلاعاتی SQL Server در دلفی است

برای اینکه فردی بتواند اینکار را انجام دهد باید مهارتهای زیر را در دلفغی داشته باشد
اول از همه آشنائی با مفاهیم بانکهای اطلاعاتی
آشنائی با زبان SQL
آشنائی با دلفی

برای اینکه بتوان یک برنامه با این بانک اطلاعاتی نوشت، موارد زیر را باید بتوانیم ایجاد کنیم
1- ایجاد بانک اطلاعاتی بر روی سرور
2- ایجاد ارتباط بین برنامه دلفی و سرور
3- برنامه نویسی

قبل از هرچیز باید بانکهای اطلاعاتی را بر روی SQL Server درست کنیم
برای این منظور بسادگی می توان از ابزار Enterprise Management که در خود SQL Server وجود دارد استفاد نمود

مرحله دوم ایجاد ارتباط بین برنامه دلفی و بانک اطلاعاتی است.
در این مورد میتوانید از کامپوننتهای ADO استفاده نمائید
ADoQuesry
ADOTable
ADOconnection
کامپوننت آخر بایستی بر اساس تعاریف یانک اطلاعاتی SQL Server تنظیم شود.
و استفاده از کامپوننت آخر در کامپوننتهای دیگر ، ارتباط بین بانک و برنامه را ایجاد می کند.

در مورد برنامه نویسی هم دقیقا مانند بقیه ابزارهای بانک اطلاعاتی دلفی می توانید برنامه نویسی کنید و تفاوت زیادی ندارد.

البته به یاد داشته باشید که SQL Server ابزارهای زیادی دارد که می تواند در برنامه نویسی شما مورد استفاده قرار گیرد که در اینجا اشاره ای به آنها نداشتم.
بعنوان مثال
Stored Procedure
یکی از ابزارهای بسیار قوی SQL Server است که می توانید بخوبی از آن در برنامه نویسی خودتان استفاده نمائید.

جمعه، بهمن ۲۳، ۱۳۸۳

چطور می توان به اس کیو ال پارامتر پاس کرد؟

How could we pass a parameter to a Query?
به نمونه برنامه زیر دقت کنید:

Select *
From TableName
Where Field1 = :Param1

دقت داشته باشید که قبل از نام پارامتر شما حتما باید علامت دو نقطه وجود داشته باشد.
حال برای اینکه بتوان از درون برنامه مقدار این پارامتر را تنظیم کرد از دستور زیر در محیط دلفی استفاده می کنیم

Query1.ParamByName('Param1').AsString:='Param Value';

این دستور قبل از باز شدن Query باید صدا زده شود.

اگر در این زمینه سوالی داشتید حتما برای من ایمیل بفرستید.

چرا دلفی

یکی از سوالاتی که همیشه از من پرسیده میشه اینه که چرا زبان دلفی؟ بعیارت دیگر اگر فردی بخواهد یک زبان برنامه ویسی را یاد بگیرد، پیشنهاد شما چیست؟
جواب من اینه :
واقیت اینه که همه زبانها الان خیلی به هم نزدیک هستند ، البته از نظر امکانات
شما اگر می خواهید بدانید کدام زبان بهتر است باید شرایط خودتان را نگاه کنید.
من بین سه زبان زیر یک مقایسه انجام می دهم
زبان ویژوال سی
زبان ویژوال بیسیک
زبان دلفی

اگر می خواهید در فرصتهای کاری زیادی داشته باشید، پیشنهاد اول من زبان ویژوال بیسیک است. بدلیل سادگی این زبان بیشتر پروژه های نرم افزاری در ایران با این زبان نوشته شده اند و در نتیجه احتمال وجود یک کار برای افرادی که این زبان را می دانند بیشتر است. اما باید بدانید که بدلیل همین سادگی بسیاری از افراد با این زبان آشنا هستند و محیط کار بسیار رقابتی است.

اگر می خواهید حرفه ای و در زمینه برنامه نویسی سیستمهای سخت افزاری و نرم افزاری بطور همزمان فعال باشید اولین گزینه زبان ویژوال سی است . هرچند دو زبان دیگه هم تمام این امکانات را در اختیار شما قرار می دهند.

اما اگر می خواهید برای خودتان کاری را شروع کنید یا اینکه در محیطهای برنامه نویسی حرفه ای در ایران فعالیت کنید، من زبان دلفی را پیشنهاد می کنم. این زبان بسیار قوی است و از نظر بین المللی سریعترین زبان برنامه نویسی است.

شرکت بورلند فعالیتی را مجددا بر روی این زبان آغاز کرده و آینده درخشانی در انتظار این زبان برنامه نویسی است.

البته علاوه بر این سه زبان زبان جاوا هم وجود دارد که بیشتر برای افرادی که می خواهند در خارح از ایران یک کار پر درآمد داشته باشند مناسب است. هنوز در ایران تعداد پروژه های انجام شده با این زبان زیاد نیست. اما آینده خوبی دارد. بخصوص اینکه شرکت بورلند نگارشی از این زبان را هم ارائه داده است.

در انتها می خواهم بگویم که همه این زبانها ابزار هستند و اگر شما اصول برنامه نویسی را بدانید ( بخصوص برنامه نویسی شیءگرا) براحتی می توانید از یک زبان به دیگری حرکت کنید و برنامه نویسی کنید.

توصیه من تمرکز بر روی روشها و تکنیکهای برنامه نویسی است نه صرفا زبان برنامه نویسی

اگر در این زمینه سوالی داشتید حتما در بخش نظر خواهی بنویسید یا اینکه برای من ایمیل بفرستید. خوشحال خواهم شد بتوانم به سوالات شما جواب بدهم.

سه‌شنبه، بهمن ۰۶، ۱۳۸۳

نصب دستی موتور یانک اطلاعاتی بورلند

Installing the BDE (manually or using an install program)
تمام برنامه های دلفی که از بانک اطلاعاتی پرادکس استفاده می نمایند نیاز دارند که در هنگام نصب برنامه در کامپیوتر دیگر موتور بانک اطلاعاتی بورلند را بر روی کامپیوتر جدید نصب نمایند.
یک را برای اینکار استفاده از برنامه اینستال شیلد است که قبلا در مورد آن توضیح داده ام.
اما هستند افرادی که می خواهند خودشان اینکار را انجام دهند. یا از سریق یک برنامه نوشته شده یا بصورت دستی.
در این زمینه مقاله ای منتشر شده که توجه شما را به آن جلب می کنم.

فولدر مربوط به این موتور در کامپیوتر شما در آدرس زیر موجود می باشد.

\Program Files\Common Files\Borland Shared
در این فولدر یک بافیل به نام زیر موجود است:
BDEINST.CAB
شما بایستی این فایل را با استفاده از برنامه WinZip یا برنامه های مشابه باز کرده و DLL ها موجود در آنرا استخراج نمائید.
یکی از این DLL ها BDEINST.DLL است که باید در کامپیتر ثبت شود. برای اینکار می توانید از برنامه زیر استفاده نمائید.
regsvr32.exe
اسم قایل DLL رابعنوان پارامتر به این برنامه بدهید تا آ«را برای شما ثبت کند.

برای برداشتن این برنامه از روی یک کامپیوتر بصورت دستی هم می توان اقدام کرد .
با کلیک بر روی این مقاله می توانید روشهای کامل را مشاهد نمائید.
http://delphi.about.com/od/adptips2004/a/bltip0904_5.htm

اگر در خواندن این مقاله مشکلی داشتید حتما با ایمیل من تماس بگیرید

یکشنبه، دی ۲۰، ۱۳۸۳

چگونه یک برنامه مشابه اینستال شیلد بنویسیم

نوشتن برنامه ای مانند اینستال شیلد خیلی ساده نیست. اما اگر نیازهای آنرا بدانید می توانید چنین برنامه ای را حداقل برای خوتان بنویسید. می دانید که ویژگی اینستال شیلد این است که با همه برنامه ها کار میکند و در همه ویندوزها.
اما حداقل نیازها :
1- یک برنامه در این زمینه باید بتواند کامپوننت رجیستر کند. یک دستور دارد که در ویندوز تعریف شده . از آ« استفاده کنید. در دلفی قابل فراخوانی است . علاوه بر این در خود دلفی برای این مورد یک تابع دارد.
2- باید بتواند در صورت لزوم تغییرانی را در رجیستری ویندوز اعمال کند. مراجعه کنید به راهنمای خواندن و نوشتن رجیستری
3- باید برنامه برعکس را هم داشته باشد. بتواند برنامه را از از سیستم حذف کند. با ایجاد تعدادی آیتم در رجیستری ویندوز می توان این امکان را اضافه کرد که کاربر از طریق کنترل پنل برنامه را از سیستم پاک کند.
4- شما باید بتوانید مسیرهای پیش فرض ویندوز را بدست آورده و در زمان نصب برنامه از آنها استفاده کنید. مثلا مسیر برنامه ها و مسیر سیستم ویندوز خیلی مهم هستند. این اطلاعات از سریق فراخوانی توابع API امكانپذیر است.
5- در دفی کامپیوننتهائی داریم که به شما اجازه ساختن فایلهای استاندارد CAB فایل را می دهد. از آنها برای فشرده سازی فایلهای برنامه و همچنین ساختن این فایلها استفاده کنید.
6- برای ساختن فایل اجرائی هم می توانید از استاندارد جدید ویندوز msi استفاده کنید یا بطور ساده یک فایل اجرائی exe درست کرده و تحویل بدهید.

نوشتن یک برنامه که بتواند برنامه قابل نصب از یک سری فایل ایجاد کند محدود به موارد بالا نیست . اما برای شروع موارد بالا می تواند به شما کمک کند تا مسیر نوشتن برنامه را بدانید.
در صورت نیاز می توانید برنامه را تحلیل کرده و به تک تک موارد جداگانه بپردازید.

شنبه، دی ۱۹، ۱۳۸۳

Network traffic monitor

آیا تابحال به ابن فکر کرده اید که چطور میشه ترافیک شبکه را اندازه گیری کرد؟ البته نرم افزارهای زیادی در این زمینه وجود دارند.
اما آیا هیچگاه فکر کرده اید که خودتان یکی از این برنامه های خوب را بنویسید.
سورس کد نمونه برای انجام اینکار به زبان دلفی وجود دارد
برای دانلود این سورس کد می توانید بر روی آدرس زیر کلیک کنید.
سورس کد برنامه مونیتور ترافیک شبکه

تصاویری از این برناهم را هم در شکلهای زیر می توانید مشاهده کنید:


سایت آموزشی About در این زمینه کمکهای زیادی می تواند به شما بکند
توصیه می کنم از بخشهای محتلف این سایت استفاده کنید.
آموزش دلفی با سورس کد برنامه

Network traffic monitor

پنجشنبه، دی ۱۷، ۱۳۸۳

آموزش InstallShield

کتاب آموزشی اینستال شیلد
یکی از سوالاتی که مرتب از منپرسیده می شود این است که چطور می توان یک برنامه دلفی نوشته شده را قابل نصب در همه کامپیوتر ها ساخت
برای اینکار دلفی برنامه ای در سی دی خود قرار داده است با نام
InstallShield
این برنامه نگارش محدود شده برنامه ای بزرگ از شرکتی با همین نام است.
در این زمینه آقای مهرداد اسماعیلی کتابی را منتشر کرده اند.
برای خرید این کتاب می توانید از سایت ایران بین کتاب را سفارش داده و آنرا درب منزل خود تحویل بگیرید.
در ضمن این کتاب در بازار کتاب هم موجود است.

خلاصه کتاب: در اين کتاب نحوه استفاده از نرم افزار Install Shield (ويژه محصولات شرکت بين‌المللی Borland) و فايل کامپيوتری دلفی 6 به صورت گام به گام آموزش داده شده است. مخاطبان در اين کتاب همچنين نحوه ايجاد برنامه‌های نرم افزاری قابل نصب (Setup Package) با استفاده از نرم افزار اينستال شيلد را فرا مي‌گيرند. نگاهی اجمالی به اينستال شيلد, سازماندهی Setup, تعيين داده‌های برنامه, پيکربندی سيستم مقصد, سفارشی کردن ظاهر Setup, تعيين نيازمندي‌های Setup و نحوه منتشر نموده Setup, عناوين اصلی کتاب را تشکيل مي‌دهند.