معلم دلفی

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

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

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

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

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;