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=2191)

الصفحات: 1 2


مشاكل الكومبو بوكس - m_m_saad - 16-07-2010

استخدم 3 كمبو بوكس
الاول به مصر - السودان - الجزائر - الخ
الثاني به القاهرة - الخرطوم -طرابلس
الثالث به اسماء احياء القاهرة والخرطوم

لما اختار علي مصر يظهر لي في الثاني القاهرة و مدن مصر
ولما اختار علي القاهرة تظهر لي احياء القاهرة فقط

هذه كل المشكله
هل يوجد طريقة غير معقدة لعمل ذلك

الطريقة المعتادة
اني اعمل
كود :
if combobox1.itemindex=0 then Combobox2.items.Clear; Combobox2.items.Add('القاهرة

ولكن هذا مرهق وذلك لان اعمل هذا في كل الاختيارات بالكامل

احاول استخدمه لتحقيق نفس الهدف
كود :
procedure TForm1.ComboBox1Change(Sender: TObject); begin if combobox1.itemindex=0 then begin if combobox2.itemindex=1 then begin combobox3.ItemIndex:=1 end; end; end;

الغريب انه يعطيني رساله خطأ في سطر فارغ تماما
و رساله الخطأ تقول
declaration expected but end of file found


مشاكل الكومبو بوكس - Lam.Abdeldjalil - 16-07-2010

السلام عليكم

كما ذكر سابقا لا يمكن الفلترة في الكومبوبوكس

لذا يجب عليك إنشاء قوائم لمعطياتك بالشكل التالي

البلد 1 قائمة الولايات الولاية 1 قائمة الأحياء الولاية 2 قائمة الأحياء ..
البلد 2 قائمة الولايات الولاية 2 قائمة الأحياء الولاية 2 قائمة الأحياء ..

التطبيق بالكود
تصريح عام

كود :
City1,City2,state1,state2 : TStringList ;

إعطاء القيم ( الولايات ، الأحياء )

كود :
procedure TForm1.Button1Click(Sender: TObject); begin City1 := TStringList.Create; City2 := TStringList.Create; state1 := TStringList.Create; state2 := TStringList.Create; city1.Add('State1City1_1') ; city1.Add('State1City1_2') ; city1.Add('State1City1_3') ; city2.Add('State1City2_1') ; city2.Add('State1City2_2') ; city2.Add('State1City2_3') ; state1.Add('County1state1') ; state1.Add('County1state2') ; state1.Add('County1state3') ; state2.Add('County2state1') ; state2.Add('County2state2') ; state2.Add('County2state3') ; end;

تغيير الولايات حسب البلد في الكومبو 1

كود :
procedure TForm1.ComboBox1Change(Sender: TObject); begin case ComboBox1.ItemIndex of 0:begin // البلد1 ComboBox2.Items.Clear ; ComboBox2.Items.AddStrings(state1); end; 1: begin // البلد2 ComboBox2.Items.Clear ; ComboBox2.Items.AddStrings(state2); end; end;

تغيير الأحياء حسب الولاية في الكمبو 2

كود :
procedure TForm1.ComboBox2Change(Sender: TObject); begin case ComboBox2.ItemIndex of 0:begin // الولاية1 ComboBox3.Items.Clear ; ComboBox3.Items.AddStrings(city1); end; 1: begin // الولاية 2 ComboBox3.Items.Clear ; ComboBox3.Items.AddStrings(city2); end; end;



نتمنى أن يفيدك
بالتوفيق
و السلام عليكم


مشاكل الكومبو بوكس - kachwahed - 16-07-2010

السلام عليكم
طريقة أخرى...
PHP كود :
var
  
Form1: TForm1;
  
Country: array[0..2] of string = ('الجزائر', 'مصر', 'السودان');
  
City: array[0..2, 1..2] of string = (('عنابة', 'وهران') ,('القاهرة', 'الاسكندرية'),('الخرطوم', 'الأبيض'));

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  
i: Integer;
begin
  
for i:= Low(Country) to High(Country) do ComboBox1.Items.Add(Country[i]);
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
var
  
i: Integer;
begin
  ComboBox2
.Clear;
  for 
i:= Low(City[ComboBox1.ItemIndex]) to High(City[ComboBox1.ItemIndex]) do
    
ComboBox2.Items.Add(City[ComboBox1.ItemIndex, i]);
end; 
بالتوفيق.



مشاكل الكومبو بوكس - m_m_saad - 17-07-2010

شكرا جزيلا اخي lam.abdeljalil
بارك الله فيك ولكن هذا الكود جربته يعمل جيدا علي المستوي الثاني
أما علي مستوي التفرع الثالث لا يؤدي المطلوب وذلك للأتي
اذا قلت
الكومبو الاول
country1
country2
الكومبو الثاني
city1-country1
city2-country1

city1-country2
city2-ountry2

الكومبو الثالث
state1-city1-country1
state2-city1-country1

state1-city2-country1
state2-city2-country1

state1-city1-country2
state2-city1-country2

state1-city2-country2
state2-city2-country2

هذا الكومبو الثالث لا يعمل جيدا بالتصنيف الهرمي
وذلك لان الشرط الموجود بالكومبو 2
يتعلق ب itemindex 0,1 فقط وهذا يجعله يعطيني نفس state

فهل من حل لهذا
ولو انني اخطأت الفهم - ان لم يكن فيها حرج
لو تعمل المثال و تبعت لي الملف .pas علي المنتدي او الايميل
اكون شاكرا لك . وجزاك الله خيرا


مشاكل الكومبو بوكس - Lam.Abdeldjalil - 17-07-2010

السلام عليكم

العفو أخي m_m_saad

أعطيتك مثال فقط لكي تكمل العمل مع الباقي بنفس الطريقة

الملف المرفق

و السلام عليكم


مشاكل الكومبو بوكس - m_m_saad - 17-07-2010

جزاك الله خيرا
بارك الله لك وزادك علما علي علم


مشاكل الكومبو بوكس - m_m_saad - 18-07-2010

الاخ - عبد الجليل

سؤال آخر لو اردنا تحسين نتيجه البرنامج
عندما نختار الدوله في كومبو 1
تظهر المحافظات في كومبو 2 و عند اختيار محافظه من كومبو 2
بالتالي تظهر الاحياء في كومبو 3

ولكن اذا رجعنا الي كومبو 1 بعد اختيار احد ا لمحافظات والاحياء يظل الاختيار كما هو
يعني نريد ان نعمل refresh للبرنامج
لانه من يعمل عليه قد يخطأ بسبب ذلك

هل هذا ممكن
سؤال آخر لماذا يتم وضع
end;
ثلاث مرات متتاليات رغم ان begin مرة واحده


مشاكل الكومبو بوكس - Lam.Abdeldjalil - 18-07-2010

السلام عليكم

إقتباس :ولكن اذا رجعنا الي كومبو 1 بعد اختيار احد ا لمحافظات والاحياء يظل الاختيار كما هو
يعني نريد ان نعمل refresh للبرنامج

ما عليك إلا إضافة السطرين للحدث ComboBox1Change
كود :
ComboBox2.Items.Clear ; ComboBox3.Items.Clear ;

الصيغة العامة للعمل بالـ Case

كود :
case Var of 0:begin instructions end; 1: begin instructions end; else end;

و السلام عليكم


مشاكل الكومبو بوكس - m_m_saad - 18-07-2010

عندما استخدمها في اول سطر في combo1 change
تقوم بمسح القائمه كلها


مشاكل الكومبو بوكس - Lam.Abdeldjalil - 18-07-2010

السلام عليكم

خطأ فني ->قم مسح الكمبو 3 فقط

يصبح الكود

كود :
procedure TForm1.ComboBox1Change(Sender: TObject); begin ComboBox3.Items.Clear ; case ComboBox1.ItemIndex of 0:begin // البلد1 ComboBox2.Items.Clear ; ComboBox2.Items.AddStrings(state1); end; 1: begin // البلد2 ComboBox2.Items.Clear ; ComboBox2.Items.AddStrings(state2); end; else ComboBox2.Items.Clear ; end; end;