الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

هدية لكم يا أهل Delphi ( + نكتة )

مغلق
بدأه أبو محمد اللحياني في 5 مارس 2006 · 9 رد · 1,292 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

لما اشتغلت فترة بتصميم المواقع واجهتني مشكلة التقاط بعض الألوان من الشاشات والنوافذ والمواقع التي أعجبت بها .

ثم رأيت الحل أن أرجع إلى الدلفي التي تناسيتها

ثم كان هذا البرنامج الموجود بالمرفقات

وفكرته التقاط اللون بمجرد وضع المشيرة عليه وسيظهر لك في البرنامج باللون الرقم الستعشري والرقم الثلاثي .

سواء كان نشطاً أو غير نشط

ثم إذا أردت نسخه إلى الحافظة ما عليك إلا أن تضغط على Enter .

ثم إذا أردت أيضاً بعد ذلك أن تغير في تدريجاته باستطاعتك أن تغير في الأحمر والأزرق والأخضر حتى يظهر لك ما تريد وفي كل مرة تغير فيها اللون سينسخ إلى الحافظة بدون ضغط Enter >

# _________________________________________________#

وأنتم الآن مشتوقون للنكتة وهي أن هذا البرنامج ولسوء الحظ لا يلتقط اللون ولكن يتلقط مقابله

والحل أنك تأخذ كود اللون ثم تضعه في خلفية صفحة ويب وتنظر في المتصفح ثم تلتقط اللون الذي يظهر في المتصفح بهذا البرنامج وسيكون الكود التابع للون الأخير هو ما تريد .

# _________________________________________________#

وهذه النكتة هي المشكلة ما هو حلها ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

أفتونا مأجورين .

GetColor.rar

ولو وافيت ربك دون ذنب *** وناقشك الحساب إذاً هلكتا

ولم يظلمك في عملٍ ولكن *** عسير أن تقوم بما حملتا

#2

مشكور شي حلو الله يوفقك

#3

السلام عليكم :) .

هذه نكتة روعة يا أخي أبو محمد اللحياني.

أعتقد أني سأحكي لك نكتة مثلها :lol: :

ما الفرق ما بين هتين الشفرتين:

procedure Tfrm.GetColor (Value : COLORREF);
begin
  Red := GetBValue(Value);
  Green := GetGValue(Value);
  Blue := GetBValue(Value);
  HexColor := RGBToHex(pColor);
end;

procedure Tfrm.GetColor (Value : COLORREF);
begin
  Red := GetRValue(Value);
  Green := GetGValue(Value);
  Blue := GetBValue(Value);
  HexColor := RGBToHex(pColor);
end;

:P

خطأ مطبعي لكنه ظريف و يقع في أحسن العائلات :lol: .

نكتة أخرى وهي التي تبحث عنها هو أن نظام الهكس للألوان هو RGB لكن بالنسبة ل COLORREF فهي تكتب هكذا $00BBGGRR.

يعني هذه الطريقة في التحويل من HEX إلى string باستعمال IntToHex غير صحيحة:

function Tfrm.RGBToHex (Value : Integer) : String;
begin
  result := '';
    try
      result := IntToHex(Value,6);
    except
      Beep;
    end;
end;

عوضا عنها :

function Tfrm.RGBToHex (RGB : Integer) : String;
var:
  BGR: integr;
begin
  result := '';
    try
	BGR :=  ((RGB AND ($0000FF)) shl 16) OR             // Blue
          (((RGB shr 8) AND ($0000FF)) shl 8) OR      // Green
          (((RGB shr 16) AND ($0000FF)));             // Red
//// or like this
//  BGR:= (RGB and $0000FF) * $10000      //$0000bb -> $bb0000
//        +(RGB and $00ff00)              //$00gg00 -> $00gg00;) nothing
//        +(RGB and $ff0000) div $10000;	//$rr0000 -> $0000rr
	result := '#'+IntToHex(BGR,6);
    except
      Beep;
    end;
end;

:lol:

تم تعديل هذه المشاركة بواسطة ikossan في 6 مارس 2006 في 04:07

سأتغيب عن المنتدى وستكون لي زيارات خفيفة بين الحين و الحين

يا صاحب الهم إن الهم منفرج.....................أبشر بخير فإن الفارج الله.

اليأس يقطع أحيانا بصاحبه..........................لا تيأس فإن الكافي الله.

الله يحدث بعد العسر ميسرة.........................لا تفزعن فإن الصانع الله.

إذا بليت فثق بالله وارض به...................فإن الذي يكشف البلوى هو الله.

و الله ما لك غير الله من أحد.......................فحسبك الله في كل لك الله

أخوكم مراد

27_06_06_05_21_41_1151410901logo_adl_wal_ihsan.jpg

#4

شكرآ ابو محمد ... وشكرآ ikossan والحمد للة على السلامة ... صار لنا زمان يا رجل ما شفناك .

#5

جزاكم الله خيراً على حسن التفاعل

وأخي ikossan بارك الله فيك وأعطى نتائج ممتازة ولكني لم أفهم ما يجري في الطريقة الجديدة للتحويل

هل بالإمكان أن تشرح لي باختصار تلك العمليات لأني لا أريد أن أكون مقلداً

ولو وافيت ربك دون ذنب *** وناقشك الحساب إذاً هلكتا

ولم يظلمك في عملٍ ولكن *** عسير أن تقوم بما حملتا

#6

السلام عليكم

شكرا لك أخي source code :) . سأحاول قدر الإمكان أن أساهم في هذا المنتدى على قدر معلوماتي.. فقد أصبحت أنسى على دلفي :wacko: ... ما علينا.

بالنسبة للأخ أبو محمد :

هناك فرق ما بين Windows color و ما بين Html Color, الأولى هي عدد صحيح Integer يمكنك كتابتها في النظام الست عشري: 00bbggrr$, فكل لون يكتب في رقمين, rr تمثل اللون الأحمر, و gg تمثل اللون الأخضر, وbb تمثل اللون الأزرق.

أما في Html فكتابة اللون هي String و كتابتها النحوية هي rrggbb#.

جميل, فكلا نظامي الألوان تعتمد على فصل الألوان الثلاثة الأحمر والأخضر والأزرق.

فعند التحوييل من Tcolor (نظام الألوان في Window) إلى HtmlColor يجب أن نراعي ترتيب العناصر الثلاثة.

Hex($BBGGRR) ==> String(#RRGGBB

يعني يجب أن نبدل موضعي BB و RR.

  BGR:= (RGB and $0000FF) * $10000      //$0000rr -> $rr0000
        +(RGB and $00ff00)              //$00gg00 -> $00gg00;) nothing
        +(RGB and $ff0000) div $10000; //$bb0000 -> $0000bb

في السطر الأول قمت بعزل اللون الأحمر فقط باستعمال Filtre أو Mask هكذا RGB and $0000FF سنحصل على 0000RR$

بعدها نضرب في 10000 لنقوم بإزاحة RR من أقصى اليمين إلى أقصى اليسار.

في السطر الثاني لا شيئ سوا عزل اللون الأخضر RGB and $00ff00 دون أية لإزاحة لأنه سيحتفظ بنفس الترتيب في كلا الصيغتين RGB أو BGR.

في السطر الأخير نقوم بفلترة اللون الأزرق RGB and $ff0000 فنحصل على $BB0000, ولإزاحة BB من أقصى اليسار إلى أقصى اليمين ما علينا سوى ان نقسم قسمة طبيعية على 10000$.

يجب أن تكون عندك فكرة على كيفية التعامل مع الأعداد المكتوبة بالنظام الستعشري.

سأتغيب عن المنتدى وستكون لي زيارات خفيفة بين الحين و الحين

يا صاحب الهم إن الهم منفرج.....................أبشر بخير فإن الفارج الله.

اليأس يقطع أحيانا بصاحبه..........................لا تيأس فإن الكافي الله.

الله يحدث بعد العسر ميسرة.........................لا تفزعن فإن الصانع الله.

إذا بليت فثق بالله وارض به...................فإن الذي يكشف البلوى هو الله.

و الله ما لك غير الله من أحد.......................فحسبك الله في كل لك الله

أخوكم مراد

27_06_06_05_21_41_1151410901logo_adl_wal_ihsan.jpg

#7

السلام عليكم

ربما نكتة أخري،

أو لغز:

هل الكود فوق أسرع أم هذا

function Tfrm.RGBToHex (Value : Integer) : String;
begin
  result := '';
    try
      result := IntToHex(Value,6);
      result :=  Copy(result,5,2)+Copy(result,3,2)+Copy(result,1,2);
    except
      Beep;
    end;
end;

ونكتة أخرى في السورس المرفق فوق، frmو Form1

d4baa0.gif
#8

بارك الله فيكم اخواني

نعم ليس عندي خلفية عن التعامل مع الأعداد الستعشرية ولا الإزاحة

وإن شاء الله لما تدوم الأخوة والفزعة بيننا تنتعلم الكثير .

ولو وافيت ربك دون ذنب *** وناقشك الحساب إذاً هلكتا

ولم يظلمك في عملٍ ولكن *** عسير أن تقوم بما حملتا

#9

:D

بارك الله فيكم أبو محمد اللحياني + DeltaAziz ..

exuse me i have not arabic keybord now
and i'm a null (pointer) in english
pour DeltaAziz: des operation sur entiers est plus rapide que sur des string
moi j'ai utilisé une opration d'entier + une de conversation IntToHex(),
donc je pense que ca serai plus rapide que trois operation string avec Copy()
et la quatrieme avec un IntToHex(), wa allaho a3lam.
C'est quoi on avis sur ces deux fonctions:

:)

//this function is a assebler translation for this line in pascal:
//BGR:= (RGB and $0000FF)Shl 16      //$0000rr -> $rr0000
//       +(RGB and $00ff00)              //$00gg00 -> $00gg00;) nothing
//       +(RGB and $ff0000) shr 16; //$bb0000 -> $0000bb
function RgbToBgr(value:Dword): Dword;
asm
  MOV EDX,EAX         // save value in exa and edx

  AND EAx,$000000FF   // eax <- $000000rr
  SHL EAx,16          // eax <- $00rr0000
  MOV ECx,EAx         // ecx <- $00rr0000

  MOV EAx,EDX
  AND EAx,$0000FF00   // eax <- $0000gg00
  ADD ECx,EAx         // ecx <-  $00rrgg00 = $00rr0000 + $0000gg00

  MOV Eax,EDX
  AND EAx,$00FF0000   // eax <- $00bb0000
  SHR EAx,16          // eax <- $000000bb
  ADD EAX,ECx         // eax <-  $00rrggbb = $00rrgg00 + $000000bb

// this is the same function but optimized for small and speed
function RgbToBgr2(value:Dword): Dword;
asm
  bswap  eax         // $00xxyyzz => $zzyyxx00
  shr     eax,8         // eax <- $00zzyyxx
end;

//you can use them like this:
bgr:= RgbToBgr2(rgb); // or bgr:= RgbToBgr(rgb);
result:= '#' + IntToHex(BGR,6);

تم تعديل هذه المشاركة بواسطة ikossan في 6 مارس 2006 في 17:18

سأتغيب عن المنتدى وستكون لي زيارات خفيفة بين الحين و الحين

يا صاحب الهم إن الهم منفرج.....................أبشر بخير فإن الفارج الله.

اليأس يقطع أحيانا بصاحبه..........................لا تيأس فإن الكافي الله.

الله يحدث بعد العسر ميسرة.........................لا تفزعن فإن الصانع الله.

إذا بليت فثق بالله وارض به...................فإن الذي يكشف البلوى هو الله.

و الله ما لك غير الله من أحد.......................فحسبك الله في كل لك الله

أخوكم مراد

27_06_06_05_21_41_1151410901logo_adl_wal_ihsan.jpg

#10

Je pense que la meilleur en terme de rapidité et taille et la dernière fonction :D

أخي مراد، حتما إستخدمت طريقة إيكوسان لتجدها

بارك الله فيك

d4baa0.gif

هذا الموضوع مغلق.

مواضيع مشابهة