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

محاذاة بعض العناصر نحو اليمين

مغلق
بدأه raidff في 20 أغسطس 2007 · 4 رد · 716 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

مشكلة غير متوقعة من دلفي في محاذاة بعض العناصر نحو اليمين

اقرأ الكود التالي:

procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
  pnl : tpanel;
begin
  for i := 1 to 5 do begin
	pnl := tpanel.Create(panel1);
	pnl.Parent := Panel1;
	pnl.Align :=alRight;
	pnl.Width := 30+i*10;
	pnl.Caption := inttostr(i);
  end;
end;

المتوقع ان عناصر البانل تظهر بالترتيب من جهة اليمين لليسار من 1 إلى 5 ، لكنها ستظهر بالعكس من 5 إلى 1

الآن اجعل عرض كل منها متناقص، أي استبدل السطر التالي

pnl.Width := 30+i*10;

بالسطر

pnl.Width := 100-i*10;

ولاحظ أن المحاذاة نجحت !

السلوك المتوقع أن تتم المحاذاة من اليمين إلى اليسار بترتيب الانشاء بدون الالتفات لعرض العنصر

والآن هل يمكنكم أيها السادة مساعدتي في محاذاة هذه العناصر من اليمين إلى اليسار بغض النظر عن العرض ؟

#2

تحياتي لكم جميعاً من قراء الموضوع

أستغرب ولا تعقيب بعد 31 مشاهدة !

فهل نتحدث عن مشكلة بلا حل، بالمناسبة بعد تجريب نفس الكود عند حدث لنقر الزر يعمل بالطريقة المتوقعة، أي أن استعمال خاصية المحاذات في الحدث OnCreate Form يؤدي لمثل هذا الخلل، وفي أي مكان بعد ذلك يعمل بالطريقة الصحيحة.

هل من اقتراح ؟

#3

بسم الله الرحمن الرحيم

من المفروض ان الدلفي يقوم بمحادات الكتابة من اليمين الى اليسار عند استعمال الخاصية

BiDiMode=bdRightToLeft

لكن هذا لاينجح دائما

لقد وجدت طريقة وهي اضافة السطر التالي

SysLocale.MiddleEast := True;

في

procedure TForm1.FormCreate(Sender: TObject);

begin

SysLocale.MiddleEast := True;

end;

جرب هذه الطريقة وانشاء تنجح

نصف العلم *** البحث الجيد

#4

سؤال ممتاز ...

جرب هذا الحل

procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
  pnl : tpanel;
begin
  for i := 1 to 5 do begin
	pnl := tpanel.Create(panel1);
	pnl.Parent := Panel1;
	if not pnl.HandleAllocated then
	begin
	 pnl.HandleNeeded;
	end;
	pnl.Align :=alRight;
	pnl.Width := 30+i*10;
	pnl.Caption := inttostr(i);
  end;
end;

لا تسألني كيف جاء هذا الحل ...

فقد قضيت ساعتين أتتبع كود الـ VCL بعمل عدة نقاط توقف في control.pas لمراقبة التغيرات التي تحدث ومحاولة مناداة عدة توابع خاصة بـ الـ TPanel لشكي بوجود شئ ما ناقص ...

لاحظ أنك لو أخرجت (باستدعاء ShowMessage مثلاً ) قيمة الـ Handle الخاص بـ pnl ستجد الأمور صحيحة ... السبب أعتقد معروف الآن .. :)

"First they ignore you, then they laugh at you, then they attack you, then you win"

===

اقتباس

حُكَّامُـنَا إِنْ تَصَـدّوا لِلْحِمَــى اقْتَحَمُـوا ***** وَإِنْ تَصَدَّى لَـهُ المُسْتَعْمِـرُ انْسَحَبُـوا

هُمْ يَفْرشـُونَ لِجَيْـشِ الغَــزْوِ أَعْيُنَـهُـمْ ***** وَيَدَّعُــونَ وُثُـوبَـاً قَـبْـلَ أَنْ يَثِـبُــوا

الحَاكِمُـونَ و«وَاشُنْـطُـنْ» حُكُومَتُـهُـمْ ***** وَاللامِعُــونَ وَمَـا شَعَّـوا وَلا غَرَبُــوا

القَاتِلُـــونَ نُبُــوغَ الشَّـعْــبِ تَرْضِـيَـــةً ***** لِلْمُعْتَدِيــنَ وَمَـا أَجْـدَتْـهُـمُ الـقُــرَبُ

لَهُمْ شُمُـوخُ «المُثَنَّـى» ظَاهِـرَاً وَلَهُـمْ ***** هَـوَىً إِلَـى بَابَـك الخَرْمِـيّ يُنْتَسَـبُ

البردوني "أبو تمام وعروبة اليوم" 1971

===

اقتباس
عبيد الهوى يحكمون البـلاد ***** ويحكمهــم كلّهـــم درهــــــم

و تقتـادهـم شهـوة لا تنــام ***** وهـــم فـي جـهالتهــم نــــوّم

ففــي كـــلّ ناحيــة ظـالـــم ***** غبــــــيّ يسـلـّطــــه أظلـــم

أيا من شبعتم على جوعــنا ***** وجـــوع بنينـا ألـم تتخمـــوا ؟

ألم تفهموا غضبة الكادحين ***** على الظلـم ؟ لا بدّ أن تفهموا

البردوني "نحن و الحاكمون "

#5

:) :) :) :)

السلام عليكم

شكراً جزيلاً لكل من قرأ الموضوع، ولكل من حاول حل المشكلة، وأتمنى أن اكون أسهمت من خلال السؤال بإضافة فكرة أو معلومة.

عزيزي billel_del2006 أشكر لك مشاركتك، وأنا متأكد من أني سأستفيد من الكود الذي وضعته في مكان آخر.

أما الأستاذ cipher فقد أبليت اليلاء الحسن والله، وفي إجابتك وجدت ضالتي فبارك الله فيك للمنتدى، وبارك الله لك في علمك.

كنت قد عرفت أصل المشكلة، لكني لم أجد الحل.

تحياتي للجميع.

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

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