![]() |
|
بناء دالة لتغيير لون النص في الكونسول - نسخة قابلة للطباعة +- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum) +-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3) +--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15) +--- الموضوع : بناء دالة لتغيير لون النص في الكونسول (/showthread.php?tid=2919) |
بناء دالة لتغيير لون النص في الكونسول - Amer12 - 22-03-2011 بسم الله الرحمن الرحيم الأعضاء الكرام السلام عليكم أخوكم لايزال مبتدأ جداَ في الدلفى .. حاولت أن اكتب دالة لتغير لون الخط في الكنسول معتمد على دوال الوندوز لكن واجهتنى مشاكل كود : Function txtcolor (i :integer):integer;
begin
if i =1 then
SetConsoleTextAttribute(GetStdHandle( STD_OUTPUT_HANDLE), FOREGROUND_GREEN)
else if i = 2 then
SetConsoleTextAttribute(GetStdHandle( STD_OUTPUT_HANDLE),FOREGROUND_GREEN
or FOREGROUND_INTENSITY )
else if i = 3 then
SetConsoleTextAttribute(GetStdHandle( STD_OUTPUT_HANDLE),FOREGROUND_RED )
else if i = 4 then
SetConsoleTextAttribute(GetStdHandle( STD_OUTPUT_HANDLE),FOREGROUND_RED
or FOREGROUND_INTENSITY )
else if i = 5 then
SetConsoleTextAttribute(GetStdHandle( STD_OUTPUT_HANDLE),FOREGROUND_BLUE )
else if i = 6 then
SetConsoleTextAttribute(GetStdHandle( STD_OUTPUT_HANDLE),FOREGROUND_BLUE
or FOREGROUND_INTENSITY )
else if i = 7 then
SetConsoleTextAttribute(GetStdHandle( STD_OUTPUT_HANDLE),FOREGROUND_RED
OR FOREGROUND_GREEN)
else if i = 8 then
SetConsoleTextAttribute(GetStdHandle( STD_OUTPUT_HANDLE),FOREGROUND_RED
OR FOREGROUND_GREEN
OR FOREGROUND_INTENSITY )
ELSE
SetConsoleTextAttribute(GetStdHandle( STD_OUTPUT_HANDLE),FOREGROUND_RED
or FOREGROUND_BLUE OR FOREGROUND_GREEN);
end;ما الخطأ في الكود السابق .. ؟ كيف يمكن بناء دالة أو اجراء لتغيير لون الخط وحفظه في وحدة مستقلةunit ومن ثم استدعائه في برامج اخري تماما مثل مكتبة crt ؟ بناء دالة لتغيير لون النص في الكونسول - محمد عبد العزيز - 23-03-2011 وعليكم السلام ورحمة الله تعديل بسيط + حذف else كود : Function txtcolor (i :integer):integer;
begin
SetConsoleTextAttribute(GetStdHandle( STD_OUTPUT_HANDLE),FOREGROUND_RED or FOREGROUND_BLUE OR FOREGROUND_GREEN);
if i =1 then SetConsoleTextAttribute(GetStdHandle( STD_OUTPUT_HANDLE), FOREGROUND_GREEN);
if i =2 then SetConsoleTextAttribute(GetStdHandle( STD_OUTPUT_HANDLE),FOREGROUND_GREEN or FOREGROUND_INTENSITY );
if i =3 then SetConsoleTextAttribute(GetStdHandle( STD_OUTPUT_HANDLE),FOREGROUND_RED );
if i =4 then SetConsoleTextAttribute(GetStdHandle( STD_OUTPUT_HANDLE),FOREGROUND_RED or FOREGROUND_INTENSITY );
if i =5 then SetConsoleTextAttribute(GetStdHandle( STD_OUTPUT_HANDLE),FOREGROUND_BLUE );
if i =6 then SetConsoleTextAttribute(GetStdHandle( STD_OUTPUT_HANDLE),FOREGROUND_BLUE or FOREGROUND_INTENSITY );
if i =7 then SetConsoleTextAttribute(GetStdHandle( STD_OUTPUT_HANDLE),FOREGROUND_RED OR FOREGROUND_GREEN);
if i =8 then SetConsoleTextAttribute(GetStdHandle( STD_OUTPUT_HANDLE),FOREGROUND_RED OR FOREGROUND_GREEN OR FOREGROUND_INTENSITY );
end;كود : Function txtcolor (i :integer):integer;
begin
case i of
1: SetConsoleTextAttribute(GetStdHandle( STD_OUTPUT_HANDLE), FOREGROUND_GREEN);
2: SetConsoleTextAttribute(GetStdHandle( STD_OUTPUT_HANDLE),FOREGROUND_GREEN or FOREGROUND_INTENSITY );
3: SetConsoleTextAttribute(GetStdHandle( STD_OUTPUT_HANDLE),FOREGROUND_RED );
4: SetConsoleTextAttribute(GetStdHandle( STD_OUTPUT_HANDLE),FOREGROUND_RED or FOREGROUND_INTENSITY );
5: SetConsoleTextAttribute(GetStdHandle( STD_OUTPUT_HANDLE),FOREGROUND_BLUE );
6: SetConsoleTextAttribute(GetStdHandle( STD_OUTPUT_HANDLE),FOREGROUND_BLUE or FOREGROUND_INTENSITY );
7: SetConsoleTextAttribute(GetStdHandle( STD_OUTPUT_HANDLE),FOREGROUND_RED OR FOREGROUND_GREEN);
8: SetConsoleTextAttribute(GetStdHandle( STD_OUTPUT_HANDLE),FOREGROUND_RED OR FOREGROUND_GREEN OR FOREGROUND_INTENSITY );
else
SetConsoleTextAttribute(GetStdHandle( STD_OUTPUT_HANDLE),FOREGROUND_RED or FOREGROUND_BLUE OR FOREGROUND_GREEN);
end;
End;بناء دالة لتغيير لون النص في الكونسول - Amer12 - 23-03-2011 اخي الكريم B.M.AbdelAziZ شكراً على تجاوبك. هدفي هو بمجرد كتابة اسم الدالة ثم رقم اللون في البرنامج الرئيس يتم تغيير لون الخط مباشرة على سبيل المثال كود : txtcolor (1)
write ('Hello');قمت بعمل وحدة unit تحتوي على الكود السابق كود : unit TextColor;
interface
uses windows;
Function txtcolor (i :integer):integer;
implementation
Function txtcolor (i :integer):integer;
begin
if i =1 then
SetConsoleTextAttribute(GetStdHandle( STD_OUTPUT_HANDLE), FOREGROUND_GREEN)
else if i = 2 then
SetConsoleTextAttribute(GetStdHandle( STD_OUTPUT_HANDLE),FOREGROUND_GREEN
or FOREGROUND_INTENSITY )
else if i = 3 then
SetConsoleTextAttribute(GetStdHandle( STD_OUTPUT_HANDLE),FOREGROUND_RED )
else if i = 4 then
SetConsoleTextAttribute(GetStdHandle( STD_OUTPUT_HANDLE),FOREGROUND_RED
or FOREGROUND_INTENSITY )
else if i = 5 then
SetConsoleTextAttribute(GetStdHandle( STD_OUTPUT_HANDLE),FOREGROUND_BLUE )
else if i = 6 then
SetConsoleTextAttribute(GetStdHandle( STD_OUTPUT_HANDLE),FOREGROUND_BLUE
or FOREGROUND_INTENSITY )
else if i = 7 then
SetConsoleTextAttribute(GetStdHandle( STD_OUTPUT_HANDLE),FOREGROUND_RED
OR FOREGROUND_GREEN)
else if i = 8 then
SetConsoleTextAttribute(GetStdHandle( STD_OUTPUT_HANDLE),FOREGROUND_RED
OR FOREGROUND_GREEN
OR FOREGROUND_INTENSITY )
ELSE
SetConsoleTextAttribute(GetStdHandle( STD_OUTPUT_HANDLE),FOREGROUND_RED
or FOREGROUND_BLUE OR FOREGROUND_GREEN);
end;
end.البرنامج يعمل عند استدعاء الفنكشن ولون النص يتغيير لكن احصل على تنبيه ان txtcolor غير معرف. هل هناك اخطاء في كتابة الوحدة أو طريقة مناداة الدالة؟ Function من المفروض ان تعيد قيمة! هل ممكن أن تشرح لى أكثر في ضوء الدالة السابقة أى نوع القيمة التي يجب ان تعيدها. بناء دالة لتغيير لون النص في الكونسول - kachwahed - 26-03-2011 @Amer12 أنصحك بمشاهدة السلسلة الممتعة: 30 Camtasia Demos in 30 Days Series كود : http://delphi.wikia.com/wiki/Delphi_Videosبناء دالة لتغيير لون النص في الكونسول - Amer12 - 27-03-2011 شكرا على الرد أخي kachwahed معاناة المبتدأ في دلفي هي قلة المصادر التعليمية مقارنة مع لغات أخرى.. |