وبلاگهاي جديد من

من جديدا مطالب در مورد دلفي و ويژوال بيسيك را در وبلاگهاي جداگانه مي نويسم.
دلفي
ويژوال بيسيك
DirectX   
نویسنده : محمد ; ساعت ٢:٤٤ ‎ق.ظ روز سه‌شنبه ٢٠ اسفند ،۱۳۸۱

بدبخت شديم رفت!

سلام. الان مي خوام بدترين خبر ممكن رو بهتون بدم. من شنيدم كه مي خوان همه ISP ها رو فيلتردار كنن به طوري كه يه ISP مادر مي خوان درست كنن كه همه رقم فيلتر شده باشه و ISP هاي ديگه بيان از اين ISP اصلي منشعب بشن. در ضمن قرار اينترنت رو هم شديدا كنترل كنن. يعني فكرشو بكنيد يه نفر اونجا نشسته و داره سايتهايي كه شما مي رين رو مي بينه و چتهايي كه مي كنيد رو گوش ميده و اگر حرفي بزني كه دوست نداشته باشن، يا سايتي بري كه خوششون نياد،‌ به جريمه، زندان، اعدام و ... محكوم مي شي. و اين به نظر من يعني پايان زندگي اينترنتي در ايران.

  
نویسنده : محمد ; ساعت ۳:۱٤ ‎ق.ظ روز پنجشنبه ۸ اسفند ،۱۳۸۱

ًهدقشق

شما وقتي مي خواهيد فايلهايي با اسامي فارسي را آرشيو كنيد،‌ فايهايي كه در اسم آنها از حروف گ چ پ ژ دارند قابل extract شدن نيستند. (امتحانش مجانيه) براي حل اين مشكل شما بايد آنها را فرمت zip به جاي rar آرشيو كنيد. هر چند كه اين طوري هم اسم فايل درست بازيابي نمي شود ولي extract مي شود.   
نویسنده : محمد ; ساعت ۳:۱٤ ‎ق.ظ روز پنجشنبه ۸ اسفند ،۱۳۸۱

شيء‌ ApplicationEvents

اين شيء در دلفي، پيامهاي ويندوزي كه براي برنامه مان فرستاده مي شود را بر مي گرداند.
اين موقعي خوب است كه شما يك پيام ويندوز مثل WM_SysCommand را كه هيچ مدير رويدادي براي آن فراهم نشده است را مي خواهيد مديريت كنيد.

به عنوان مثال مي خواهيد يك آيتم به آيتمهاي داخل منوي سيستم يك برنامه اي اضافه كنيد. براي اين كار دلفي هيچ مدير رويدادي فراهم نكرده است! بنابراين، اين شيء در اينجا كارساز مي باشد   
نویسنده : محمد ; ساعت ۳:۱٤ ‎ق.ظ روز پنجشنبه ۸ اسفند ،۱۳۸۱

يك سري توابع كار راحت كن در C



1-Dirring
بايد از توابع findfirst و findnext استفاده كنيم عين دلفي منتها اولش بايد فايلهاي dos.h , dir.h را #include كنيم.
و بايد يك ساختار ffblk تعريف كنيم كه با استفاده از ff_name آن، نام فايل پيدا شده را بر مي گردانيم.

2-تغيير رنگ
براي اين كار بايد از تابع textcolor() استفاده كرد.
#include
#include
void main()
{
textcolor(RED);
cprintf(“\n\rHello I am red”);
}

3-دريافت كاراكتر بدون انتظار
براي اين كار بايد از سرويس 6 وقفه 21h استفاده كرد به شرح زير:
Inkey()
{
asm {
Mov ah,06h
Mov dl,0ffh
Int 21h
}
return _AL;
}
اين معادل همان تابع INKEY$ در QBasic است.

4- PutPixel31h
براي نوشتن پيكسل ها در حالت 13h تابع putpixel13h را به صورت زير تعريف ميكنيم:
putpixel13h(int x,int y,int c)
{
char far *ptr1;
ptr1=0xA0000000;
ptr1+=x+y*320;
*ptr1=c;
}
ابتدا يك اشاره گر far تعريف كرديم. سپس آن را برابر سگمنت A000 و افست 0000 قرار داديم. چون حالت 13، 320*200 است، بنابراين نحوه آدرس دهي آن از فرمول addr=x+(y*320) بدست ميآيد.
ptr1+=x+y*320;

در دستور *ptr1=c; مي گيم كه اون نقطه رو كه آدرس دهيش كرديم، با رنگ فلان پر كن.

5-تغيير رجيسترهاي DAC (Color Pallette )
setdacreg(int colornum,int rint,int gint,int bint)
{
asm {
mov ah,10h
mov al,10h
mov bx,colornum
mov ch,gint
mov cl,bint
mov dh,rint
int 10h
}
}
با اين تابع ما يك رنگ بين 0 تا 255 رو با رنگي كه خودمون ميخوايم جايگزين مي كنيم.
توضيح خلاصه: از سرويس 10 وقفه 10 استفاده مي كنيم كه پارامترها را در رجيسترهاي مخصوص به خود قرار مي دهيم.
  
نویسنده : محمد ; ساعت ۳:۱۳ ‎ق.ظ روز پنجشنبه ۸ اسفند ،۱۳۸۱

نمايش تاريخ شمسي در ويندوزهاي فارسي

احتمالا شما هم برنامه هايي مثل ACDSee , WinRAR و غيره را ديده ايد كه با اينكه برنامه نويسي براي نمايش تاريخ شمسي نكردهاند، ولي تاريخ شمسي نمايش مي دهند! (البته در ويندوزهاي فارسي همچون نوين و پارسا99) براي اين كار بايد از تابع GetDateFormat استفاده كرد. كه يك تاريخ به آن مي دهيم و آن را به شمسي تبديل مي كند.

procedure TForm1.Button1Click(Sender: TObject);
var dstr:array[0..100]of char;
begin
GetDateFormatA(locale_system_default,0,nil,'، dddd,dd/MMMM/yyyy',dstr,sizeof(dstr));
edit1.text:=dstr;
end;
  
نویسنده : محمد ; ساعت ۳:۱٢ ‎ق.ظ روز پنجشنبه ۸ اسفند ،۱۳۸۱

ويژوال بيسيك ۶ يا ۵؟

اگر شما هم از ويژوال بيسيك 6 براي برنامه نويسي استفاده مي كنيد، يك عيب دارد كه ويژوال بيسيك 5 آن را مرتفع مي كند. فايل msvbvm60.dll. اين فايل احتمالا تا حالا خيلي حال شما را گرفته است و برنامه تان را به كسي داده ايد و او گفته است كه اجرا نمي شود. همه برنامه هاي نوشته شده با ويژوال بيسيك ۶ به اين dll نياز دارند. در ويژوال بيسيك ۵، فايل msvbvm50.dll استفاده مي شود كه به طور پيش فرض در ويندوز ۹۸ قرار گرفته است. بنابراين اگر شما برنامه هاي خودتان را با ويژوال بيسيك ۵ EXE كنيد، ديگر به چنين مشكلي بر نخواهيد خورد (قول ميدم).
و اما Activex ها.
احتمالا برنامه شما به يك سري activex نيز ربط دارد.
ٌاگر شما هم از كنترل هاي MSCOMCTL.OCX استفاده مي كنيد و وقتي برنامه تان را به كسي مي دهيد، روي كامپيوترش اجرا نمي شود، مي توانيد از كتابخانه ComCtl32.ocx استفاده كنيد. اين فايل نيز به طور پيش فرض با ويندوز 98 نصب ميشود. كه بيشتر كنترل هاي MSCOMCTL.OCX را دارد. فقط يك سري امكانات كمتر دارد مثل نبود FullRowSelect در TreeView و ListView و نبود Orientation در ProgressBar و از اين جور چيزهاي جزئي.
قيد Comct332.ocx يعني Coolbar را به كلي بزنيد. چون اين فايل را حتي اگر برنامه خود را Setupy بكنيد و به كس ديگري بدهيد اجرا نمي شود و او حتما بايد Activexهاي ويژوال بيسيك 6 را نصب كرده باشد تا بتواند اين برنامه را اجرا كند. (2 سال پيش امتحانش كردم نشد).

در مورد CommonDialog(ComDlg32.OCX) بايد يكي از اين دو راه سخت! را در پيش گيريد:
1-يا ComDlg32.OCX مال ويژوال بيسيك 5 رو گير بيارين و تو برنامه تون از اون استفاده كنين.
2-يا اينكه از تابع GetOpenFileName استفاده كنيد.

اگر با محيط ويژوال بيسيك 6 عادت داريد (البته فرق چنداني با 5 نداره) و مي خواهيد پروژه خود را در ويژوال بيسيك 5 باز كنيد و به يك خطا بر مي خوريد، فايل VBP را با يك Editor باز كرده و قسمت Retained=0 را حذف كرده و فايل را Save كنيد. با اين كار پروژه شما در ويژوال يسيك 5 نيز باز ميشود.

اگر با استفاده از كنترل MSINET، برنامه نويسي اينترنت مي كنيد، مي توانيد به جاي آن از توابع API منتاظر مثل InternetOpen، InternetOpenURL، FTPGetFile و … استفاده كنيد تا برنامه تان به MSINET.OCX وابسته نباشد.

خلاصه كلام: سعي كنيد تا جايي كه ميشه از Activex استفاده نكنيد.
  
نویسنده : محمد ; ساعت ۳:۱۱ ‎ق.ظ روز پنجشنبه ۸ اسفند ،۱۳۸۱

جلوگيري از تحليل رفتن منابع سيستم

اگر برنامه نويسي گرافيكي با دلفي كار كرده باشيد، يه چيزي احتمالا حالتان را گرفته است و آن تحليل رفتن منابع سيستم بعد از انجام عمليات گرافيكي مي باشد.
اگر شما زياد از Pen و Brush براي تغيير رنگ استفاده مي كنيد (مثلا تو تايمر مي ذارين)، ديده ايد كه كم كم منابع سيستم شما تحليل مي رود تا اينكه به صفر مي رسد و شما مجبوريد Reset كنيد. (اگر Resource Meter بيارين متوجه اين قضيه مي شين)
براي حل اين مشكل بايد شما بعد از اين كه از هر يك از اشياء Pen , Brush استفاده كرديد، آن را DeleteObject كنيد. و در آخر كار نيز، DC را DeleteObject كنيد.
مثال:

form1.canvas.brush.color:=clred;
form1.canvas.ellipse(10,10,200,300);
DeleteObject(form1.canvas.brush.handle);
DeleteObject(form1.canvas.handle);

با اين كار ديگه منابع سيستمتون پايين نمياد.



  
نویسنده : محمد ; ساعت ۳:۱۱ ‎ق.ظ روز پنجشنبه ۸ اسفند ،۱۳۸۱

DOS قديمي شده ولي هنوز فوايدي دارد.

DOS قديمي شده ولي هنوز فوايدي دارد.

احتمالا شما كاربر عزيز هم ديگر با داس كار نمي كنيد و همه ش در ويندوز هستيد. واقعا داس ديگر منقرض شده است. ولي هنوز يك فايده دارد كه به 1 ثانيه استفاده اش مي ارزد.
همان گونه كه مي دانيد ماندن يك تصوير ثابت به مدت زياد بر روي مونيتور مي تواند به آن آسيب برساند و عمر آن را كم كند. هر چند با استفاده از Screen Saver مي توان مونيتور را از اين آسيبها محافظت كرد. اما اين در صورتي است كه چندين دقيقه دست به كامپيوتر نزنيد.
فرض كنيد در حال تايپ يك متن يا يك برنامه هستيد. و مثلا يك ساعت پيوسته پشت كامپيوتر مي نشينيد طوري كه screen saver فرصت آمدن نمي كند و تصوير روي مونيتور هم تغيير چنداني نمي كند. در چنين مواقعي براي جلوگيري از وارد شدن صدمه به مونيتور مي توان از داس استفاده كرد. بهتر است كه شما مثلا هر 10 دقيقه يك بار يا هر 5 دقيقه يك بار يك پنجره داس باز كنيد و بعد از 1 ثانيه آن را ببنديد.
همين كه تمام صفحه در 1 ثانيه سياه مي شود كلي مفيد است و كار screen saver را مي كند. اگر بتوانيد به اين كار عادت كنيد عمر مونيتورتان خيلي بيشتر مي شود.
البته مي دانيد كه هميشه بايد از power management ويندوز استفاده كنيد و turn off monitor را در زماني مناسب مثلا 10 دقيقه قرار دهيد.


  
نویسنده : محمد ; ساعت ۳:۱٠ ‎ق.ظ روز پنجشنبه ۸ اسفند ،۱۳۸۱

يك روش براي دانلود كردن موزيك از Bedehi.com

يك روش براي دانلود كردن موزيك از Bedehi.com

در سايت بدهي دات كام آرشيو بزرگي از موزيكهاي ايراني وجود دارد كه فقط به صورت زنده مي توان به آن گوش كرد و هيچ كدامشان قابل دانلود كردن نيستند.
با يك روش Capturing صوت مي توان آنها را در كامپيوتر خودمان ذخيره كنيم.
ولي بايد كارت صدايي داشته باشيم كه بتواند Capturing كند. يعني صداي خروجي را ضبط كند(همه كارت صداها اينجوري نيستن).
چون مستقيما نمي شود از بدهي دات كام موزيك دانلود كرد بايد همزمان موزيك را گوش كرده و Capture كنيم. اين كار با اجراي همزمان دو برنامه Jetaudio ميسر است.
كه با يكيش موزيك را از سايت پخش كرده و با ديگري آن را Capture مي كنيم. چون jetaudio در حالت عادي از اجراي دو نمونه همزمان جلوگيري مي كند بايد سريع دو دفعه آن را اجرا كنيم تا دو نمونه اجرا شود (وگرنه نميشه)
بعد با آن jetaudio اي كه قرار است ضبط كند record را مي آوريم و تنظيمات فايل ضبط شده را به دلخواه خود تغيير داده و سپس دستگاه خروجي مربوط به كارت صدا در ورودي (همه كارت صداها ندارن) را انتخاب كرده (ممكنه اسمش Wave Output باشه) و دكمه Finish كليك مي كنيم.
بعد از اين كار فايل صوتي جديد شروع به درست شدن مي كند


  
نویسنده : محمد ; ساعت ۳:۱٠ ‎ق.ظ روز پنجشنبه ۸ اسفند ،۱۳۸۱

يك روش براي پريدن از روي فيلتر ISP ها

يك روش براي پريدن از روي فيلتر ISP ها

احتمالا شما هم به فيلتر ISPها برخورده ايد كه مثلا خواسته ايد يك سايت بياوريد ولي پيامهاي Access Denied را مشاهده كرده ايد. من يك روشي پيدا كردم كه يه جورايي ميشه از روي فيلترشون بپري. يعني پيغام Access Denied مي بيني ولي سايته رو هم مي ري. (البته همه سايتها اينجوري نيستن).
ابتدا به وسيله يك برنامه Host Resolver آدرس IP سايت فيلتر شده را Get مي كنيد. سپس در Internet Explorer آدرس IP آن را مي نويسيد. بعد احتمالا آدرس يك سايت ديگر جلوي چشمتان مي آيد كه با استفاده از آن مي توانيد از روي فيلترشون بپري.


  
نویسنده : محمد ; ساعت ۳:۱٠ ‎ق.ظ روز پنجشنبه ۸ اسفند ،۱۳۸۱

دستكاري بازيها

دستكاري بازيها

اگر با بازي Paranoid تحت داس آشنا باشيد، ديدهايد كه اين در ابتدا ۳ عمر دارد و به سختي ميتوان با اين عمر كم تا مرحلههاي جلو رفت. در ضمن شايد كنجكاوي شما را كشته باشد كه مثلا مرحله ۱۴ چه شكلي است.
من اين بازي را طوري دستكاري كردهام كه در ابتدا ۹ عمر دارد. و در يك جاي ديگر هم طوري آن را دستكاري كردهام كه حدود ۲۰۰ عمر دارد و ضمنا از مرحله ۱۴ هم شروع ميشود.

اگر ميخواهيد اين بازي دستكاري شده را دانلود كنيد يا ميخواهيد مراحل جلوتر بازي را ببينيد، بگوييد تا برايتان بفرستم.
  
نویسنده : محمد ; ساعت ۳:٠٩ ‎ق.ظ روز پنجشنبه ۸ اسفند ،۱۳۸۱

نحوه گت كردن دايركتوري Desktop

procedure TForm1.Button1Click(Sender: TObject);
var pidl1:PItemIDList;
p1:array[0..1024]of char;
begin
SHGetSpecialFolderLocation(0,CSIDL_DESKTOP,pidl1);
اينجا مي گيم كه ما pidl مربوط به Dekstop رو مي خوايم.
SHGetPathFromIDListA(pidl1,@p1);
اينجا هم مي گيم كه ما مسير اين pidl رو مي خوايم.
edit1.text:=p1;
اينجا هم كه ميندازيم توي TextBox
end;
  
نویسنده : محمد ; ساعت ۳:٠٢ ‎ق.ظ روز پنجشنبه ۸ اسفند ،۱۳۸۱

كار با TreeView در دلفي

كار با TreeView در دلفي بسيار راحتتر از ويژوال بيسيك است.
شما اگر بخواهيد ريشه بسازيد فقط يك رشته مشخص مي كنيد و آن را به Tree اضافه مي كنيد.
TreeView1.Items.Add(nil,'This is IROT.');
و اگر هم بخواهيد يك زير شاخه براي يك آيتم در TreeView بسازيد يعني Child،‌ بدين صورت است:
TreeView1.Items.AddChild(TreeView1.Selected,'This is Child.');
كه اين، يك زير شاخه براي آيتمي كه در حال حاضر در Tree انتخاب شده است اضافه مي كند.

و اما در VB:
TreeView1.Nodes.Add , , "root", "IROT"
TreeView1.Nodes.Add "root", tvwChild, "child", "IChild"   
نویسنده : محمد ; ساعت ٢:٥۸ ‎ق.ظ روز پنجشنبه ۸ اسفند ،۱۳۸۱

پخش يك فايل صوتي كه درون برنامه خودمان ذخيره شده است

منظور اين است كه ما بخواهيم يك فايل صوتي را درون فايل exe خودمان بگنجانيم تا بتوانيم از آن استفاده كنيم. براي اين كار بايد با استفاده از يك Resource Editor‌ كه من Visual C‌ را پيشنهاد مي كنم، يك فايل Res ساخت. كه درون آن يك فايل صوتي حتما با پسوند Wav‌ بريزيم. و آن فايل را با دستور {$R file.res} به برنامه خودمون ربط بديم. بعدش بايد با استفاده از تابع PlaySound، آن را پخش كنيم. بدين صورت:
PlaySound('101',hInstance,snd_resource or snd_async);
ما مي گوييم كه اين رشته، يك منبع برنامه است نه يك فايل خارجي. با فلك snd_resource. و با فلك snd_async هم مي گيم كه ما مي خواهيم اين فايل به صورت ناهمزمان پخش شود يعني اگر در حين پخش فايل صوتي ديگري با تابع PlaySound، بخواهد فايل ديگري پخش شود، فايل قبلي Stop شده و فايل بعدي بلافاصله پخش مي شود. مثل ويندوز ۳۱.   
نویسنده : محمد ; ساعت ٢:٤٠ ‎ق.ظ روز پنجشنبه ۸ اسفند ،۱۳۸۱

توضيحی کوتاه در مورد خودم

من يک پسر ۱۸ ساله پشت کنکوری هستم.

به برنامه نويسی علاقه ی خيلی زيادی دارم.

هم اکنون زبانهای Visual Basic, Delphi , Visual C, Assembly , C For Dos , Pascal , DHTML , ASP , Javascript , VBScript را بلدم.

در اين وبلاگ قصد دارم مطالبی در مورد برنامه نويسی به زبانهای مختلف به شما آموزش بدم.

  
نویسنده : محمد ; ساعت ٦:٤۸ ‎ب.ظ روز شنبه ۳ اسفند ،۱۳۸۱