![]() |
|
استفسار حول القيم المكررة - نسخة قابلة للطباعة +- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum) +-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3) +--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15) +--- الموضوع : استفسار حول القيم المكررة (/showthread.php?tid=11192) |
استفسار حول القيم المكررة - Ibn Battuta - 03-01-2021 السلام عليكم ورحمة الله وبركاته
ماهو سطر الكود الذي من خلاله احصي
كل الاسماء والقيم المكررة في المكون StringGrid
واعرضها بالمكون Memo ..بارك الله فيكم
![]() RE: استفسار حول القيم المكررة - Delphi4Us - 04-01-2021 وعليكم السلام ورحمة الله وبركاته عذرا ً لن اعطيك الكود المطلوب كاملا وهذا لمصلحتك حتى تستنبط الحلول بنفسك فيما بعد ولا تحتاج الى احد انت اكيد تعلم ان الوصول لاي خلية بالمكون هي عن طريق : كود : StringGrid1.Cells[ACol, ARow];حيث Acol هو العمود و الـ ARow السطر فحيث تتقاطع قيمة العمود مع السطر تحصل على قيمة الخلية اذا تحتاج للمرور على كل القيم بواسطة الامر For وكل خلية تقراء قيمتها تخزنها بمصفوفة او حتى مكون TlistBox وكل خلية تقراء قيمتها تنظر هل هي موجودة بالمكون TlistBox ام لا اذا كانت موجودة يعني انها مكررة فتضعها بمصفوفة اخرى او مكون TlistBox أخر فيكون لديك مكونان من TlistBox واحد تضع به القيم كلها والاخر القيم المكررة فقط هذه الفكرة التي تحضرني الان جرب البدء في البرمجة وما يعترضك من مشاكل اعرضها هنا RE: استفسار حول القيم المكررة - Ibn Battuta - 04-01-2021 حسنا يا محترم سوف احاول وشكرا على المعطيات الأولية لبداية المحاولات .. RE: استفسار حول القيم المكررة - Delphi4Us - 05-01-2021 لقد تأخرت في طرح ما لديك اما انك وجدت الحل واما ان الامور اختلطت عليك تلميح للمساعدة بامكانك المرور على كل الخلايا وقراءتها بالشكل التالي: كود : var
Acol, ARow: Integer;
begin
for Acol := 0 to Pred(StringGrid1.ColCount) do
for ARow := 1 to Pred(StringGrid1.RowCount) do
begin
End;ِArow يبداء من الصف الثاني باعتبار ان الصف الاول به العناوين اذا لم يكن كذلك اجعله = 0 RE: استفسار حول القيم المكررة - Ibn Battuta - 05-01-2021 اصبت اخي الكريم الامور اختلطت علي لم اجد الحل بعد .. خاصة انني اتعلم تعلم بيزنطي وليس اكاديمي ومنكم استفيد اخواني الافاضل شكرا مجددا على التلميحات والمساعدات من اجل التعلم جزاك الله كل الخير
RE: استفسار حول القيم المكررة - Delphi4Us - 05-01-2021 إقتباس :خاصة انني اتعلم تعلم بيزنطي وليس اكاديمي كلنا في الهواء سواء اخي وصدقني لا تنزعج من كل محاولة فاشلة كنت تنفذها فقد اعطت ثمارها المطلوبة الان وبعد محاولاتك يمكنني ان اعطيك اجابة بيزنطية ضع StringGrid على النموذج واداتين ListBox وزر واحد وفي الحدث FormLoad ضع الكود التالي لتعبئة StringGrid بالبيانات كود : StringGrid1.Cells[0, 1] := 'Salem';
StringGrid1.Cells[0, 2] := 'Omar';
StringGrid1.Cells[0, 3] := 'Khaled';
StringGrid1.Cells[0, 4] := 'Ali';
StringGrid1.Cells[1, 1] := 'Mansor';
StringGrid1.Cells[1, 2] := 'Mohamed';
StringGrid1.Cells[1, 3] := 'Ahmad';
StringGrid1.Cells[1, 4] := 'Naser';
StringGrid1.Cells[2, 1] := 'Thareq';
StringGrid1.Cells[2, 2] := 'Omar';
StringGrid1.Cells[2, 3] := 'Waled';
StringGrid1.Cells[2, 4] := 'Haetem';مجموعة اسماء فيها اسم واحد مكرر في حدث الزر ضع الكود التالي كود : procedure TForm1.Button1Click(Sender: TObject);
var
Acol, Arow,ListCount: Integer;
begin
for Acol := 0 to Pred(StringGrid1.ColCount) do
for Arow := 1 to Pred(StringGrid1.RowCount) do
begin
ListBox1.Items.Add(StringGrid1.Cells[Acol, Arow]);
for ListCount := 0 to ListBox1.Items.Count -1 do
begin
if ListBox1.Items[ListCount]=StringGrid1.Cells[Acol, Arow+1] then
ListBox2.Items.Add(StringGrid1.Cells[Acol, Arow+1]);
end;
end;
end;سوف يتم وضع كل اسم مكرر في الاداة ListBox2 اما في الاداة ListBox1 سوف ترى كل الاسماء كود : for Acol := 0 to Pred(StringGrid1.ColCount) do
for Arow := 1 to Pred(StringGrid1.RowCount) doهذا الكود طبعا للمرور على كل الخلايا كود : ListBox1.Items.Add(StringGrid1.Cells[Acol, Arow]);هنا وضعنا كل اسم نمر به في الاداة الاولى كود : begin
if ListBox1.Items[ListCount]=StringGrid1.Cells[Acol, Arow+1] then
ListBox2.Items.Add(StringGrid1.Cells[Acol, Arow+1]);
end;
end;هنا نقارن محتوى الاداة الاولى بكل اسم نمر به في ال StringGrid لاحظ فقط انني في الـ StringGrid زدت واحد في Arow وهذا حتى اقارن الاسم التالي دائما فتسبق بخانة ولولا ذلك لكانت محتويات ListBox1 دائما تساوي محتويات StringGrid RE: استفسار حول القيم المكررة - Ibn Battuta - 05-01-2021 حسب ما تفضلت به يا محترم تاكدت بانني لن اتوصل اليه ...( مهما بحثت وحاولت واااع أحييك اخي الكريم على رحبة صدرك، لكن لي سؤال لماذا يجب اضافة اثنان من المكون listbox الا يمكن اضافة مكون واحد ومباشرة نذكر به الاسماء المكررة وكم عدد المرات التي تكررت ؟ RE: استفسار حول القيم المكررة - Delphi4Us - 06-01-2021 الاداة الاولى نحتاجها لمقارنة محتوياتها من الاسماء بالاسماء الموجوة في StringGrid اولا يمكنك اخفائها وترك الثانية وثانيا يمكنك حذفها واستبدالها بي TStrings كما بالكود هنا للزر كود : procedure TForm1.Button1Click(Sender: TObject);
var
Acol, Arow,ListCount: Integer;
Tstr:TStrings;
begin
Tstr := TStringList.Create();
try
for Acol := 0 to Pred(StringGrid1.ColCount) do
for Arow := 1 to Pred(StringGrid1.RowCount) do
begin
Tstr.Add(StringGrid1.Cells[Acol, Arow]);
for ListCount := 0 to Tstr.Count -1 do
begin
if Tstr [ListCount]=StringGrid1.Cells[Acol, Arow+1] then
ListBox2.Items.Add(StringGrid1.Cells[Acol, Arow+1]);
end;
end;
finally
Tstr.Free;
end;
end;اولا تعريف متغير من نوع TStrings كود : Tstr:TStrings;وبعدها انشاءه او الاشتقاق منه كود : Tstr := TStringList.Create();وبعد ان نكمل به عملنا نلغيه من الذاكرة او نقتله كود : Tstr.Free;ولاجل ذلك نستخدم العبارة Try حيث بعد العبارة finally نقوم بالغاءه اي سيتم تنفيذ الكود وعند النهاية من التنفيذ ستم تنفيذ مابعد العبارة finally كود : try
finally
end;كما يمكن مقارنة محتويات StringGrid بنفسها بدل استخدام ListBox او حتى TStrings لديك الطريقة كيف تمر على كل خلايا StringGrid فتقراء اول اسم تم تقول بدورة اخرى تقارنه بمحتوياتها وتنتقل الى الاسم الذي يليه وهكذا يمكنك تجربة هذه الطريقة بعد ان صار معك كل ماتحتاج RE: استفسار حول القيم المكررة - Ibn Battuta - 15-01-2021 شكرا جزيلا اخي المحترم على مساعدتك لي
![]() والتوضيح لعمل احصاء ما هو متكرر من اسماء وقيم لقد ارفقت برنامج الاخ لعربي بارادوكس سابقا الخاص بملف txt خاص بالاجور .. حيث اضفت اليه زر الطباعة عن طريق مكون الكويكريبورت وايضا زر اخر ساعدني فيه الاخ المحترم لعربي [size=small]بارادوكس[/size] للطباعة عن طريق مكون فاست ريبورت والحمد لله فهمت جيدا هذا النوع من الطباعة احاول [b][size=small]كلما [b][size=small]مرة [/size][/size][/b]اضافة شيء جديد لهذا البرنامج مثلما احاول حاليا على فرز او احصاء الاسماء وارقام الحسابات المتكررة [/b] ![]() RE: استفسار حول القيم المكررة - ALG2009 - 16-01-2021 تفضل أخي كود : for i := 1 to StringGrid1.RowCount -1 do
for j := i+1 to StringGrid1.RowCount -1 do
begin
if StringGrid1.Cells[3, i] = StringGrid1.Cells[3, j] then
begin
s:=s+1;
end;
end;أستخدم هذا الكود ،حيث يعطيك عدد الحسابات المكررة [StringGrid1.Cells[3, i] تمثل خانة رقم الحساب إن أردت إظهار بقية الخانات كالإسم وغير غير رقم الخلية المجموع الكلي داخل المعرف s أي مجموع القيم المكررة |