delphi4arab منتديات دلفي للعرب
بناء دالة لتغيير لون النص في الكونسول - نسخة قابلة للطباعة

+- 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;
تعديل اخر باستخدام case بدلا من if
كود :
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;
انتبه هذه Function ومن المفروض ان تعيد قيمة!



بناء دالة لتغيير لون النص في الكونسول - 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 معاناة المبتدأ في دلفي هي قلة المصادر التعليمية مقارنة مع لغات أخرى..