السلام عليكم ورحمة الله وبركاته
من لا يشكر الناس لا يشكر الله
سؤالي هو لديا حقل في ق ب أود أن أعرف كيفية ادراج فيه
حزمة حرفية على شكل عدد وقوته ومن ثما القدرة على قراءة قيمة هذا الحقل
والتفريق بين العدد وقوته وشكرا
والله الموفق والمستعان
السلام عليكم ورحمة الله وبركاته
من لا يشكر الناس لا يشكر الله
سؤالي هو لديا حقل في ق ب أود أن أعرف كيفية ادراج فيه
حزمة حرفية على شكل عدد وقوته ومن ثما القدرة على قراءة قيمة هذا الحقل
والتفريق بين العدد وقوته وشكرا
والله الموفق والمستعان
ربي اشرح لي صدري و يسر لي أمري واحلل عقدة من لساني يفقهوا قولي، باسم الله الفتاح اللهم لا سهل إلا ما جعلته سهلاٌُ يا أرحم الراحمين.
السلام عليكم...
ربما أسهل طريقة لتخزينه و معالجته في البرنامج هي استعمال رمز الأس ^ للفصل بين العدد و القوة (الأس). مثلاً:
1234^3
و عند قراءته في البرنامج يمكنك استخلاص الجزأين. في المثال التالي:
1. ضع على الـ Form ثلاث مكونات Label و Edit واحدة و Button واحد.
2. أضف اسم الوحدة Math إلى جملة uses.
3. تحت القسم implementation اكتب الدالة التالية:
// دالة لفصل العدد و الأس و إعادة نتيجة رفع العدد إلى الأس
function GetPoweredNumber(ANumber: string; var ABase: Real; var AExponent: Real): Real;
// دالة داخلية للتأكد من أن النص الممرر يمثل عدداً حقيقياً
function IsFloat(AText: string): Boolean;
begin
try
StrToFloat(AText);
Result := True;
except
Result := False;
end;
end;
var
ExpPos: Integer;
TempBase, TempExp: string;
begin
Result := 0.0;
ABase := 0.0;
AExponent := 1.0;
ANumber := Trim(ANumber);
if ANumber = '' then
Result := 0
else begin
ExpPos := Pos('^', ANumber);
if ExpPos = 0 then begin
TempBase := ANumber;
if IsFloat(TempBase) then begin
ABase := StrToFloat(TempBase);
Result := ABase;
end;
end
else begin
TempBase := Copy(ANumber, 1, ExpPos - 1);
TempExp := Copy(ANumber, ExpPos + 1, Length(ANumber) - ExpPos);
if IsFloat(TempBase) then begin
ABase := StrToFloat(TempBase);
if IsFloat(TempExp) then begin
AExponent := StrToFloat(TempExp);
Result := Power(ABase, AExponent);
end
else
Result := ABase;
end
else if IsFloat(TempExp) then
AExponent := StrToFloat(TempExp);
end;
end;
end;4. انقر نقراً مزدوجاً على الزر و اكتب الكود التالي:
procedure TForm1.Button1Click(Sender: TObject);
var
MyNumber: string;
ABase, AExp: Real;
AResult: Real;
begin
MyNumber := Edit1.Text;
if MyNumber <> '' then begin
AResult := GetPoweredNumber(MyNumber, ABase, AExp);
Label1.Caption := FloatToStr(ABase);
Label2.Caption := FloatToStr(AExp);
Label3.Caption := FloatToStr(AResult);
end;
end;5. شغل البرنامج و اكتب عدداً و أسه (أو قوته) بحيث تفصل بينهما بالعلامة ^ دون فراغات، ثم انقر الزر. سيحتوي الـ Label1 على العدد، و الـ Label2 على الأس، و الـ Label3 على نتيجة رفع العدد إلى ذلك الأس.
* لاستخدامها مع قيم مخزنة في قاعدة بيانات بتلك الطريقة يمكنك استعمال السطر التالي بدل السطر MyNumber := Edit1.Text:
MyNumber := ADOTable1.FieldByName('MyField').AsString;حيث ADOTable1 اسم مكون ADOTable (أو غيره مثل TTable أو TQuery... إلخ) و MyField اسم الحقل الذي به الأرقام في قاعدة البيانات.
* إضافة أخيرة: يمكنك طبعاً نقل الدالة الداخلية IsFloat لتكون دالة مستقلة من أجل استعمالها في أماكن أخرى.
نرجو الاستفادة و السلام.
تم تعديل هذه المشاركة بواسطة najy_zl في 10 فبراير 2013 في 01:12
وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ
صدق الله العظيم
شكرا لك أخي العزيز ناجي شرحك وافي وكافي فكرتك هذه جيدة وهذا لتحسس جميع حروف السلسلة المحرفية لكن الأسهل من ذلك هو تخزين الرقم في حقل وقوته في حقل وبعد ذلك أجري تطبيق دالة القوة على الرقم وقوته أخي العزيز ربما لم أوفق في ايصال ما أود الحصول عليه أرعب في تخزين العدد وقوته كما نرها في محرر الوارد لأني أريد ظهوره بنفس الشكل في الطباعة وعلى دبيقريد مثل الشكل الموجود في الورد وقوة العدد لن أكتبها رقم بل كلمة مثال العدد يكون 10 وفوقه كلة محرك صغيرة على شكل قوة في الورد فالرقم عشرة يعني لي عدد الترات وكلمة محرك تعني لي أن الزيت تم صبه في المحرك فالعدد 10 يهمني في حساب قيمة الزيت وكلمة محرك الصعيرة تعني أنه صب في محرك وليس في boite vitesse والهام جدا هو بالنسبة لي هو ظهور الحزمة الحرفية عدد فوقه كلمة صعيرة وقت الطباعة وعلى شبكة دبيقريد وشكرا لك مجددا أخي واعذرني على تأخر ردي والله المستعان والموفق.
ربي اشرح لي صدري و يسر لي أمري واحلل عقدة من لساني يفقهوا قولي، باسم الله الفتاح اللهم لا سهل إلا ما جعلته سهلاٌُ يا أرحم الراحمين.
المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية
جارٍ التحقق من المتواجدين…