delphi4arab منتديات دلفي للعرب

نسخة كاملة : بناء دالة لتغيير لون النص في الكونسول
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
بسم الله الرحمن الرحيم
الأعضاء الكرام السلام عليكم
أخوكم لايزال مبتدأ جداَ في الدلفى .. حاولت أن اكتب دالة لتغير لون الخط في الكنسول معتمد على دوال الوندوز لكن واجهتنى مشاكل

كود :
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 ؟
وعليكم السلام ورحمة الله

تعديل بسيط + حذف 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 ومن المفروض ان تعيد قيمة!
اخي الكريم 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 من المفروض ان تعيد قيمة! هل ممكن أن تشرح لى أكثر في ضوء الدالة السابقة أى نوع القيمة التي يجب ان تعيدها.
@Amer12
أنصحك بمشاهدة السلسلة الممتعة:
30 Camtasia Demos in 30 Days Series
كود :
http://delphi.wikia.com/wiki/Delphi_Videos
شكرا على الرد أخي kachwahed معاناة المبتدأ في دلفي هي قلة المصادر التعليمية مقارنة مع لغات أخرى..