PDA

View Full Version : حذف کرسر در پاسکال



saeed_flash
جمعه 13 بهمن 1385, 23:08 عصر
با سلام خدمت دوستان
چگونه میشه تو پاسکال کاری کرد که کرسر به کاربر نشان داده نشه یعنی تو صفحه نمایش کرسر نباشه و هی روشن خاموش نشه

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

ممنون میشم کمکم کنید

someCoder
جمعه 13 بهمن 1385, 23:46 عصر
من پاسکال چیزی یادم نیست! اما فکر کنم تنها راهش وقفه باشه

mzjahromi
شنبه 14 بهمن 1385, 06:45 صبح
برای حذف نشانگر صفحه نمایش همونطور که دوستمون گفتن یه وقفه وجود داره که متاسفانه شماره اش یادم نیست(شاید هم دستور مستقیم داشته باشه)
ولی
برای اینکه چند جای صفحه بنویسی
تو که نمی تونی همزمان چند جا بنویسی درسته؟
دستوراتت خط به خط اجرا می شن و هر خط یه جای صفحه قراره بنویسه.
خوب مکان نما رو منتقل کن اونجا(با gotoxy) و بنویس . اینجوری همزمان به نظر میرسه.

arshia_
شنبه 14 بهمن 1385, 10:43 صبح
به اون سختی که فکر می کنید نیست
یه تابع ساده است

(false);showcursor



unction ShowCursor(Show: Bool): Integer;
The ShowCursor function shows or hides the cursor.
Parameter Description
Show Specifies whether the display count is incremented or decremented (increased or decreased
by one). If this parameter is TRUE, the display count is incremented; otherwise, it is
decremented.
Returns
The return value specifies the new display count, if successful.
Comments
A cursor show-level count is kept internally. It is incremented by a show operation and decremented by a hide
operation. The cursor is visible only if the count is greater than or equal to zero. If a mouse exists, the initial
setting of the cursor show level is zero; otherwise, it is -1.
The cursor is a shared resource. A window that hides the cursor should show it before the cursor leaves its
client area or before the window relinquishes control to another window.

m-khorsandi
شنبه 14 بهمن 1385, 18:30 عصر
به اون سختی که فکر می کنید نیست
یه تابع ساده است

(false);showcursor

احتمالاً سئوال رو نخوندی،

چند سال پیش این رو برای توربو پاسکال نوشته بودم،
باید امتحان کنی :


var
regs: registers;
begin
regs.ah:=$01;
regs.ch:=1;
regs.cl:=0;
intr($10,regs);
end;

saeed_flash
شنبه 14 بهمن 1385, 22:43 عصر
برای اینکه چند جای صفحه بنویسی
تو که نمی تونی همزمان چند جا بنویسی درسته؟
دستوراتت خط به خط اجرا می شن و هر خط یه جای صفحه قراره بنویسه.
خوب مکان نما رو منتقل کن اونجا(با gotoxy) و بنویس . اینجوری همزمان به نظر میرسه.


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

mzjahromi
یک شنبه 15 بهمن 1385, 07:10 صبح
ببینید
در آن واحد یعنی چی؟
مگه شما چند تا CPU دارید(که در همون حالت هم به این سادگی ها نیست)
به فرض که شما برنامه تان را به صورت ریسمانهای همروند بنویسید بازهم همزمان دستورات اجرا نمیشوند . بالاخره یک دستور اجرا می شود و بعد دستور بعدی(یه کم فکر کنید...)
دوم اینکه
سرعت آنقدر بالا است که شما اصلا احساس نمی کنید که این دوتا جداگانه نوشته شده اند یا با هم.

saeed_flash
دوشنبه 16 بهمن 1385, 01:23 صبح
درسته حرفاتو قبول دارم و خودم می دونم که در هر صورت این برنامه سینگل تسکه ولی کاری که من میخوام هم زمان اجرا میشن و من هم نیاز دارم به یه حرکتی که نیازی به کرسر نداشته باشم و بتونم چنتا شکل در صفحه نمایش نشون بدم و نیازی به کرسر نداشته باشم
امیدوارم متوجه شده باشین

در مورد وقفه ها امکانش هست یه مقدار توضیح بدین یا یه کتابی چیزی برام تو سایت بذارین

با تشکر Saeed_flash

saeed_rezaee
پنج شنبه 19 بهمن 1385, 20:11 عصر
سلام.
اصلا امکان نداره که شما همزمان روی صفحه بنویسید.
تنها راهی که وجود داره اینه که شما مستقیم از حافظه نمایشی استفاده کنید.
اگه بخواین نمایش اطلاعاتتون همزمان باشه میتونید از حافظه نمایشی یک کپی بگیرید، تغییرات رو روی ک÷ی اعمال کنید و بعد اونو روی حافظه نمایشی کپی کنید (ک در این حالت هم همزمان نمیشه ولی چون سرعت بالاست به چشم نمیاد)

حافظه نمایشی (برای کارتهای گرافیک رنگی) از آدرس B800 شروع میشه و 4000 بایت طولشه.
بایت اول Attribute کاراکتر و بایت دوم خود کاراکتر (یاد قدیما بخیر)!!!

procedure HideCursor;
begin
asm
MOV AH, 01h
MOV CX, 2000h
INT 10h
end;
end;

موفق باشید

mzjahromi
جمعه 20 بهمن 1385, 08:28 صبح
اینجوری هم در واقع سر خودمون رو کلاه میذاریم والا باز هم همونطوری که دوستمون گفتند همزمان نیست.(عملا همزمانی وجود ندارد به مفاهیم scheduling توجه کنید)

saeed_flash
یک شنبه 22 بهمن 1385, 00:38 صبح
خیلی ممنون از کمک همه شما دوستان عزیز ممنون

صابر طهماسبی
پنج شنبه 10 اسفند 1385, 07:24 صبح
لطفا کد زیر را کپی کنید در برنامه بعد هم هر جا خواستید با دو سوییچ on و off میتوانید به ترتیب کرسر را مخفی و نمایان کنید.:لبخندساده:


procedure HideCursor(Switch : boolean);
begin
if (Switch = true) then
asm mov CX, 2000h end
else
if ColorMode then
asm mov CX, 0607h end
else
asm mov CX, 0C0Dh end;
asm
mov AX, 0100h
int 10h
end
end;