معلم دلفی

یکشنبه، آبان ۱۰، ۱۳۸۳

How to call the View Source dialog in WebBrowser

برداشتي از سايت http://delphi.about.com
اگر مي خواهيد تابع ViewSource از مرورگر اينترنت خودتان را صدا بزنيد با برنامه نمونه زير مي توانيد اينکار را انجام دهيد
براي اينکار کافيست يک فرم و يک Buttom و يک TWebBrowser داشته باشيد
و برنامه زير را استفاده کنيد.



~~~~~~~~~~~~~~~~~~~~~~~~~
uses ActiveX;

procedure WBViewSourceDialog(AWebBrowser: TWebbrowser) ;
const
CGID_WebBrowser: TGUID = '{ED016940-BD5B-11cf-BA4E-00C04FD70816}';
HTMLID_VIEWSOURCE = 2;

var
CmdTarget : IOleCommandTarget;
vaIn, vaOut: OleVariant;
PtrGUID: PGUID;
begin
New(PtrGUID) ;
PtrGUID^ := CGID_WebBrowser;
if AWebBrowser.Document <> nil then
try
AWebBrowser.Document.QueryInterface(IOleCommandTarget, CmdTarget) ;
if CmdTarget <> nil then
try
CmdTarget.Exec(PtrGUID, HTMLID_VIEWSOURCE, 0, vaIn, vaOut) ;
finally
CmdTarget._Release;
end;
except
end;
Dispose(PtrGUID) ;
end;

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

procedure TForm1.Button1Click(Sender: TObject) ;
begin
WBViewSourceDialog(WebBrowser1) ;
end;

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

Simulating keystrokes from code


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

پارامترها:
Key
کد انسی مروبط به کلیدی که می خواهید فشرده شدن آنرا شبیه سازی کنید
Shift
مشخص کننده وضعیت کلید شیفت
SpecialKey
معمولا باید مقدار نادرست را برای این پارمتر در نظر گرفت مگر اینکه بخواهید بخش کی پد را شبیه سازی کنید.


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;


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


~~~~~~~~~~~~~~~~~~~~~~~~~
Example of usage:
~~~~~~~~~~~~~~~~~~~~~~~~~
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 Teacher

شنبه، آبان ۰۲، ۱۳۸۳

Getting Serial Number of a disk

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


var
VolSerNum: DWORD;
Dummy1, Dummy2: DWORD;
begin
if GetVolumeInformation('c:\', NIL, 0, @VolSerNum, Dummy1, Dummy2, NIL, 0) then
ShowMessage(Format('%.4x:%.4x', [HiWord(VolSerNum), LoWord(VolSerNum)]));
end;


نمونه دوم

function GetSerialNumber(Const ADrive: Char): Integer;
var
SerialNum : pdword;
a, b : dword;
Buffer : array[0..255] of char;
begin
Result:=0;
if GetVolumeInformation(PChar(ADrive+':\'),
Buffer,
SizeOf(Buffer),
SerialNum,
a,
b,
nil,
0) then
Result:=SerialNum^;
end;

پنجشنبه، مهر ۲۳، ۱۳۸۳

تاريخچه زبان دلفي


در يان مقاله شما با تاريحچه زبان دلفي از دلفي ١ تا دلفي ٦ آشنا مي شويد.

"
تاريخچه دلفي

در قلب دلفي ،يك كامپايلر (همگردان) پاسكال است . دلفي 6 مرحله ديگري از تكامل همان كامپايلر پاسكالي است كه شركت بورلند از هنگامي كه (17 سال پيش) Anders Hejlberg ، اولين كامپايلر توربو پاسكال را نوشت مشغول توسعه آن بوده است . طي سالها ، برنامه نويسان پاسكال از پايايي و موزون بودن و نيز سرعت كامپايل كه توربو پاسكال ارائه مي دهد ، لذت برده اند . دلفي 6 نيز از اين صفات مستثني نيست ، كامپايلر آن تركيبي از يك دهه تجربه كامپايلر و پيشرفته ترين كامپايلر بهينه ساز 32 بيتي است . با وجود رشد قابل توجه قابليت هاي كامپايلر در طي چندين سال ، سرعت كامپايل به طرز جالب توجهي تنها اندكي كم شده است . علاوه بر اين ، پايداري كامپايلر دلفي مي رود تا معيار و نمونه اي براي سايرين باشد .

"

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

Delphi Printing Info and Links

حعمولا بیشتر کامپوننتهای دلفی تابع پرینتر را ارائه می کنند . اما در حالتی این امکان وجود ندارد یا اینکه برنامه نویس می خواهد مدیریت چاپگر را در برنامه انجام دهد توابع موجود در کتابخانه زیر می تواند کمک زیادی بکند.
Printer.pas
برای استفاده از این کتابخانه بایستی آنرا در بالای برنامه Uses کنید
علاوه بر این در آدرس زیر لینکهای زیادی در مورد انواع و اقسام کارکردهای چاپگر ارائه شده است که مطالعه آنها برای برنامه نویسی مناسب و مفید است.
efg's Computer Lab -- Delphi Printing Info and Links

پنجشنبه، مهر ۱۶، ۱۳۸۳

Farsi Components . ShDate Solutions

بيشتر دوستاني کخ با بانکهاي اطلاعاتي کار ميکنند و مي خواهند تاريخ را بصورت شمسي وارد بانک خود کنند با مشکل تبديل تاريخ ميلادي به شمسي مواجه هستند.
در اين سايت شما مي توانيد کامپوننتي را دانلود کنيد که اينکار را براي شما انجام مي دهد.
سورس کد برنامه به زبان دلفي هم موجود است.
Farsi Components . ShDate Solutions
البته نسخه آزمايشي برنامه قابل دانلود است . براي استفاده از بنامه اصلي بايد هزنيه اي را داد.

یکشنبه، مهر ۱۲، ۱۳۸۳

Farsi in Delphi

سوال :
آیا می توان در دلفی برنامه ای نوشت که به فارسی باشد و در تمام ویندوزهای غیر فارسی هم کار کند؟
جواب :
بله
روش کار :
برای اینکه بتوانید برنامه ای بنویسید که در تمام سیستمهای ویندوز کار کند باید از فارسی شبیه به ایران سیستم قدیمی استفاده کنید.
ایران سیستم ( که در سیستم عامل داس زیاد استفاده می شد) مانند یک فونت انگلیسی در برنامه شما استفاده می شود. شما بایستی تمام کامپوننتهای برنامه را طوری تغییر دهید که مثلا راست به چپ آن در ورود اطلاعات یا نمایش اطلاعات درست کار کند. اینکار زحمت زیادی دارد.
اما اگر فارسی نویسی را به ویندوزهای جدید محدود کنید می توانید از همان کامپوننتهای معروف تی ان تی استفاده کنید.
برای اطلاعات بیشتر مراجعه کنید به مطلبی که قبلا با همین عنوان نوشته بودم.
http://www.webrah.com/delphi/2004/06/delphi-unicode-farsi.html