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

اداة جميلة ومميزات مذهلة اسمها Richedit1 و Memo

بدأه Framework2 في 10 نوفمبر 2008 · 7 رد · 1,056 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

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

الاخوة الاعزاء

من منكم يعلم شيئا عن هاتين الاداتين الغبيتين

والمجنونتان

واحدها أسمها RichEdit1

والثانية اسمها Memo

ان أبناء عمومتها في الفجوال بيسك 6 والفجوال نت كانتا اكثر ذكاء بحيث كنت استخدم الخاصية Rtf

لاستخلاص النص منها واسناد النص اليها

ولكن الان حاولت ان اسند لها النص المخزن بقاعدة البيانات أكسس كالتالي:

sRichEdit1.Lines.Add( ADOTable1.FieldByName('code').Text) ;

ولكنها تظهر لي النص

[Memo]

بهذا الشكل

وحتى عن طريق الخاصية Text

وتكهنت ان الخاصية Line هي مثل الخاصية Rtf

علما بأن نوعية الحقل بقاعدة البيانات من النوع Memo

فمن له علم بها فيكتب لنا وصفة لها ونخرجها من المشفى

مبتدئ في الدلفي

#2

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

الخاصية Text للكائن TField لا تعطيك القيمة المحفوظة في الحقل، بل النص أو التنسيق الذي يتم عرضه في المكون المرتبط بالحقل أثناء تحرير قيمة الحقل.

للحصول على القيمة المخزنة في الحقل استعمل الخاصية AsString للحقل أو الخاصية FieldValues للـ DataSet (أي الـ Table أو الـ Query) كالتالي:

  1. sRichEdit1.Text := ADOTable1.FieldByName('code').AsString;
  2. // أو
  3. sRichEdit1.Text := ADOTable1.FieldValues['code'];
  4. // أو
  5. sRichEdit1.Text := ADOTable1['code'];
  6.  

لاحظ في الطريقة الثالثة أنن حذفنا الخاصية FieldValues لأنها هي الخاصية الافتراضية للـ DataSet.

لاحظ كذلك أننا نستعمل القوسين المربعين [ ] مع الخاصية FieldValues.

نرجو الاستفادة و السلام.

وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ

صدق الله العظيم

#3

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

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

شكرا جزيلا وعلما وفيرا

ولكن

لم تجدي كل المحاولات نفعا

لاحظ يا اننا لا زلنا نستخدم الخاصية Text مع الاداة او المكون ونقوم بتغيير في خصائص الجدول او طريقة اتصاله بقاعدة البيانات

والمشكلة فعلا هي مع كيفية استقبال المكون لبيانات

ان كانت نص عادي استقبلها كنص عادي

وان كان النص منسق وجب استقبالها بطرقة خاصة هي اقرب الى التنسيق HTML

بحيث بعض النص لونه ازرق وبعضه اكبر من بعض وهكذا

واذا لم تخني ذاكرتي يتم استخدام Tstream او شئ كهذا مع المكون بحيث يستقبل البيانات تم يتم استنادها الى المكون

للاسف التعليمات وكل الكتب تتحدث عن الطريقة للقراءة من ملفات نصية من نوع

RTF or TEXT FILE

ولم تذكر الطريقة للقراءة من قاعدة بيانات

ولا اعلم

ولكن ربما لديكم حل ولكن لم تستخدموا هذه الطريقة من قبل فقط

وحتى ذلك الوقت سنبقي على هذه الاداتين تحت الحجز

والسلام

مبتدئ في الدلفي

#4

السلام عليكم

ردوا علينا يا اهل العلم.......؟

قولوا لنا حتى صباح الخير على الاقل.

:huh:

مبتدئ في الدلفي

#5
Framework2 كتب:
من منكم يعلم شيئا عن هاتين الاداتين الغبيتين

والمجنونتان

واحدها أسمها RichEdit1

والثانية اسمها Memo

لا يوجد بدلفي مكونات غبية او مجنونة

ان كان تطبيقك قواعد بيانات وليد نص به اكثر من سطر استخدم:

DBMemo ان كان نص فقط وغير منسق

DBRichEdit ان كان نص منسق

طبعا الحقل المتصل بها يكون من نوع Blob

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

d4baa0.gif
#6

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

بصراحة الاداة هذه ليست مرنة

ولا اريد ان اقول ليست ذكية

فيبدو انها اثارات حساسية شديدة لمحبي الدلفي

وانا قد مدحت الدلفي كثيرا وهاجمت اللغات الاخرى بعدة مشاركات لي هنا بالمنتدى

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

ومع ذلك ايضا انا متاكد ان هذه الاداة بالدلفي يمكنها فعل ذلك

ولكن كيف

الطريقة التي ذكرتها هنا فعلا تفيد ولكن ليس بالشكل المطلوب

فمثلا انا سوف استخدم الاداة SynEdit لاظهار الاكواد

وهي اداة مثل هذه تماما ولكنها مطورة او تم اضافة لها بعض الخصائص والاحداث الجديدة وتم حذف بعض الخصائص ومنها قدرتها على الاتصال بقاعدة البيانات مباشرة

من الممكن ان استقبل البيانات من قاعدة البيانات في الاداة DBRichEdit وبعد ذلك استخلص النص منها وارسله الى الاداة RichEdit العادية عن طريق الخاصية Text

وعملت بشكل سليم

ولكن اعتقد انها طريقة ملفقة وسيعمل البرنامج بشكل سليم حتى وان كان المستخدم لا يعلم ما الذي يجري بالخلفية

جربت هذه الاداة مع بيانات تم تخزينها بواسطة اداة RichEdit الموجودة في الفجوال نت وقد تعرفت على الوسوم بشكل ممتاز مما يعني انها وتلك الاداة من عائلة واحدة فعلا

والسؤال هو كيف اذا يمكن استخلاص البيانات من قاعدة البيانات لها مباشرة

فمثلا هذا نص منسق مخزن بقاعدة البيانات تعرفت عليه الاداة DBRcichEdit بسهولة وهو ليس مخزن بواسطتها او باختها Rcichedit العادية

{\rtf1\fbidis\ansi\ansicpg1256\deff0\deflang1025{\fonttbl{\f0\fnil\fprq1\fcharset0 Courier New;}{\f1\fnil\fprq1\fcharset178{\*\fname Courier New;}Courier New (Arabic);}{\f2\fnil\fcharset0 Courier New;}}
{\colortbl;\red0\green0\blue255;\red0\green128\blue0;}
\viewkind4\uc1\pard\ltrpar\lang1024\f0\fs20  \cf1 Public\cf0  \cf1 Function\cf0  ReadTextFromFile(\cf1 ByVal\cf0  Filename \cf1 As\cf0  \cf1 String\cf0 ) \cf1 As\cf0  \cf1 String\f1\rtlch\par
\cf0		 \cf2\f0\ltrch  ' Returns text from the specified file\f1\rtlch\par
\cf0		 \cf1\f0\ltrch On\cf0  \cf1 Error\cf0  \cf1 Resume\cf0  \cf1 Next\f1\rtlch\par
\cf0		 \cf1\f0\ltrch Dim\cf0  strFileText \cf1 As\cf0  \cf1 String\f1\rtlch\par
\cf0		 \cf2\f0\ltrch  ' Open the file and launch StreamReader object\f1\rtlch\par
\cf0		 \cf1\f0\ltrch Dim\cf0  MyReader \cf1 As\cf0  System.IO.StreamReader = _\f1\rtlch\par
		\f0\ltrch System.IO.File.OpenText(Filename)\f1\rtlch\par
		\cf2\f0\ltrch  ' Read all text through to the end\f1\rtlch\par
\cf0		 \f0\ltrch strFileText = MyReader.ReadToEnd\lang1033  \par

وطالما تعرفت عليه فهذا يعني انها تستطيع ان تخزن مثله كذلك.

وعن طريق الخاصية Text or Line or GetText

لم يفلح الامر وتخزنه كنص عادي

وهذه الاداة باللغات الاخرى تخزن وتستقبل النص المنسق عن طريق الخاصية RTF

ولذلك قلت انها اكثر ذكاء

والاداة ذكاءها من ذكاء مبرمجها

لذلك اردت توظيحا من خبراء الدلفي لما يجري

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

مبتدئ في الدلفي

#7

مشكلتك انك لاتزال تفكر بمنطق VB

ارفق محاولتك لكي يمكن مساعدتك

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

d4baa0.gif
#8

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

اقتباس
مشكلتك انك لاتزال تفكر بمنطق VB

ارفق محاولتك لكي يمكن مساعدتك

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

جميل جدا

صحيح لا زالت أفكر من منطق الفجوال

وهذا هو السبب

وشكرا كثيرا أخ محمد

ولكن لا اعلم ما الذي حدث وانما تم الامر بشكل سليم

كيف لا اعرف.

وانما قبلت الاداة النص من قاعدة البيانات مباشرة

  1.  
  2.  
  3. procedure TForm2.ToolButton1Click(Sender: TObject);
  4. begin
  5.  
  6. form1.Caption:='New Code';
  7. SynMemo1.Clear;
  8. edit2.Clear ;
  9.  
  10. procedure TForm2.ToolButton2Click(Sender: TObject);
  11. begin
  12. form1.ADOTable1.Open;
  13. form1.ADOTable1.Insert;
  14. form1.ADOTable1.FieldByName('groubname').Value:= form1.TreeView1.Selections;
  15. form1.ADOTable1.FieldByName('itemname').Value:= Edit2.Text;
  16. form1.ADOTable1.FieldByName('code').Value:= SynMemo1.Lines.GetText ;
  17.  
  18. form1.ADOTable1.Post;
  19. form1.ADOTable1.Close;
  20.  
  21.  

تم استخدام الخاصية GetText لاستخلاص البيانات

وعند الرغبة في اسناد بيانات الحقل الى الاداة تم استخدام الخاصية Value الخاصة بالـ AdoTabel والخاصية Text للاداة SynMemo

وطبعا تم تخزينها كنص عادي وهو المهم بالنسبة لي لان الاداة SynMemo تقوم هي بتنسيق النص بدلا مني ولا تحتاج الا الى نص برمجي عادي غير منسق

في البداية كنت اخشى ان لا يتم كتابة كل سطر تحت السطر الذي يليه حسب ما هو مرتب وكما بالشكل ويتم وضع السطر الاول تم وبنهايته يتم وضع السطر الثاني وهكذا

وهذا ما كان يجري في الفجوال بحال استخدام نص عادي غير منسق

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

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

سادرس الموضوع وارفق مثال هنا إن شاء الله للاستفادة

والله الموفق

مبتدئ في الدلفي

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