کمک در مورد پاسکال تحت ویندوز

mohammad rasool

New Member
میخواستم یه سوال فنی بپرسم
من برنامه ی جدول ضرب 10*10 رو نوشتم ولی وقتی میخوام اونو داخل جدول بذارم نمیشه چون حروفی رو که میخوام توی پاسکال تحت ویندوز چاپ نمیکنه و هر کدوم رو که توش کپی میکنم همش علامت سوال چاپ میکنه لطفا یکی جواب بده که چیکار
کنم .
با تشکر:neutral:
 

the_king

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

اگر می خواهید به برنامه نویسی با توربو پاسکال تحت ویندوز مسلط شوید چاره ای جز یادگیری توابع API ویندوز
و مفاهیم برنامه نویسی ویژوال این سیستم عامل ندارید.
من توصیه می کنم حدالامکان از Turbo pascal تحت dos استفاده کنید، حداقل ویرایشگر و محیط IDE اش از
این نسخه تحت ویندوز بهتره.

نمونه برنامه جدول ضرب اینچنین خواهد بود :

کد:
{$S-}

uses wintypes, winprocs, windos, strings, filedlgs;

const
	appname = 'multiplytable';

procedure showtable(dc:hdc); forward;

function mainwndproc(window: hwnd; message, wparam: word;
	lparam: longint): longint; export;
var
	dc: hdc;
	ps: tpaintstruct;
begin
	mainwndproc:=0;
	case message of
		wm_paint:
      		begin
			dc:= beginpaint(window, ps);
			showtable(dc);
			endpaint(window,ps);
		end;
		wm_destroy:
		begin
			postquitmessage(0);
			exit;
		end;
	end;
 	mainwndproc := defwindowproc(window, message, wparam, lparam);
end;


procedure initapplication;
const
	windowclass: twndclass = (
		style: 0;
		lpfnwndproc: @mainwndproc;
		cbclsextra: 0;
		cbwndextra: 0;
		hinstance: 0;
		hicon: 0;
		hcursor: 0;
		hbrbackground: 0;
		lpszmenuname: appname;
		lpszclassname: appname);
begin
	windowclass.hinstance := hinstance;
	windowclass.hicon := loadicon(0, idi_application);
	windowclass.hcursor := loadcursor(0, idc_arrow);
	windowclass.hbrbackground := getstockobject(white_brush);
	if not registerclass(windowclass) then halt(1);
end;

procedure initinstance;
var
	window: hwnd;
begin
	window := createwindow(
		appname,
		'Multiply Table',
		ws_overlapped or ws_caption or ws_sysmenu or ws_minimizebox or ws_visible,
		cw_usedefault,
		cw_usedefault,
		410,
		435,
		0,
		0,
		hinstance,
		nil);
		if window = 0 then halt(1);
		showwindow(window, cmdshow);
		updatewindow(window);
end;

procedure winmain;
var
	message: tmsg;
begin
	if hprevinst = 0 then initapplication;
	initinstance;
	while getmessage(message, 0, 0, 0) do
	begin
		translatemessage(message);
		dispatchmessage(message);
	end;
	halt(message.wparam);
end;

procedure showtable(dc:hdc);
var
	s: array[0..3] of char;
	i,j,m:integer;
	brush:hbrush;
	rect:trect;
begin
	brush:=createsolidbrush(rgb(0,0,255));
	settextcolor(dc,rgb(0,0,0));
	for j:=1 to 10 do
		for i:=1 to 10 do
		begin
			m:=i*j;
			wvsprintf(s,'%3d',m);
			textout(dc,i*35,j*35,s,strlen(s));
			setrect(rect,i*35-5,j*35-9,i*35+31,j*35+27);
			framerect(dc,rect,brush);
		end;
	setrect(rect,28,24,383,379);
	framerect(dc,rect,brush);
	deleteobject(brush);
end;

begin
	winmain;
end.

در این برنامه تنها قسمت مهم اون از نظر شما بایستی این روتین showtable باشه :

کد:
procedure showtable(dc:hdc);
var
	s: array[0..3] of char;
	i,j,m:integer;
	brush:hbrush;
	rect:trect;
begin
	brush:=createsolidbrush(rgb(0,0,255));
	settextcolor(dc,rgb(0,0,0));
	for j:=1 to 10 do
		for i:=1 to 10 do
		begin
			m:=i*j;
			wvsprintf(s,'%3d',m);
			textout(dc,i*35,j*35,s,strlen(s));
			setrect(rect,i*35-5,j*35-9,i*35+31,j*35+27);
			framerect(dc,rect,brush);
		end;
	setrect(rect,28,24,383,379);
	framerect(dc,rect,brush);
	deleteobject(brush);
end;

کد برنامه pas و همچنین فایل اجرایی exe را ضمیمه این پست کردم.
 

پیوست ها

  • test.zip
    2.4 کیلوبایت · بازدیدها: 6

mohammad rasool

New Member
همانطور که قبلا هم گفتم بایستی در حالت گرافیکی جدول را رسم کنید و از بکارگیری کاراکتر های
متفرقه خودداری نمایید. برای رسم جدول از توابع گرافیکی API ویندوز استفاده کنید، البته کد برنامه های
ویندوز بیشتر شبیه به ++C خواهند بود تا Pascal.

اگر می خواهید به برنامه نویسی با توربو پاسکال تحت ویندوز مسلط شوید چاره ای جز یادگیری توابع API ویندوز
و مفاهیم برنامه نویسی ویژوال این سیستم عامل ندارید.
من توصیه می کنم حدالامکان از Turbo pascal تحت dos استفاده کنید، حداقل ویرایشگر و محیط IDE اش از
این نسخه تحت ویندوز بهتره.

خیلی متشکرم از جوابتون من خواستم که پاسکال تحت داس استفاده کنم ولی همش ارور 15 رو میده من برنامه ی کامل رو نصب کردم حتی از استادمون هم پرسیدم گفت برنامت ناقصه تازه در مورد چاپ نشدن کاراکترها هم گفت باید از فونتهای قدیمی ویندوز استفاده کنم مثلا ویندوز 98 (در پاسکال تحت ویندوز) ولی شما اینو میگید . من جفتشو انجام میدم
باز هم از جوابتون متشکرم
میشه یه کتاب خوب برای یادگیری محیط گرافیکی پاسکال تحت ویندوز رو معرفی کنید خیلی ممنون میشم.:)
 

the_king

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

کتابهایی که درباره Turbo Pascal for Windows نوشته شدند اینها هستند :

Turbo Pascal for Windows, Windows Programming Guide, 348 pages
Turbo Pascal for Windows, Programmer's Guide, 436 pages
Turbo Pascal for Windows, Windows Reference Guide, 512 pages
Turbo Debugger for Windows (version 3.1), User's Guide, 268 pages
Turbo Pascal for Windows, User's Guide, 197 pages

من هیچوقت سراغ نسخه تحت ویندوز پاسکال نرفتم، اما در نوشتن این برنامه جدول ضرب به
هیچ مشکلی بر نخوردم، چرا؟
چون همونطور که گفتم فقط با توابع API ویندوز اینجور برنامه ها نوشته میشه، اگه با ویژوال سی برنامه نوشته باشید،
کدهای API را می شناسید.
یعنی اگه این کد را نشون یک برنامه نویس ++Visual C بدهید کاملا متوجه میشه و برایش آشنا است.
به همین دلیل حتی یک کتاب مقدماتی آموزش ویژوال سی هم به شما کمک زیادی می کنه.
 

جدیدترین ارسال ها

بالا