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

طلب مساعدة - كيف نحدد حجم البفر (buffer) في الفيجوال بيزك 6 ?

بدأه youssefchou في 26 أغسطس 2008 · 5 رد · 870 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

اود ان اسالكم اخوتي عن كيفة حجز متغير وتحديد حجمه

فمثلا في الC++ نكتب :

CString variable[15];

فكيف ان امكن في الفيجوال بيسك 6

واتمنى ان يكون السؤال واضح

وهذا هو السؤال بصيغة اخرى :

كيف نحدد حجم البفر (buffer)

في الفيجوال بيزك 6

شكراااااا

#2

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

لتحديد حجم الـ Buffer:

1. قم بالتصريح عن متغير من النوع String.

2. استعمل الدالة String لملئه بالقيم NULL أو الدالة Space لملئه بالفراغات حسب الحجم الذي تريده.

  1. Dim MyBuffer As String
  2.  
  3. MyBuffer = String$(255, 0) ' Fill the variable with Null character (Chr(0))
  4.  
  5. ' OR:
  6. ' MyBuffer = Space$(255) ' Fill the variable with Space character (Chr(32))
  7.  

يجب الانتباه إلى أن حجم MyBuffer في الكود السابق، سواء باستعمال الدالة String أو الدالة Space هو 256 و ذلك لأن Visual Basic تضيف تلقائياً Null Character إلى نهاية الـ string.

نقطة أخرى مهمة إذا كنت تريد استعمال الـ Buffer مع دوال ويندوز (Windows API functions) فهي - حسب لغة C - تعتبر أن أول حرف Null في الـ String هو نهاية الـ String، أما Visual Basic فلا تهتم لعدد الـ Null Chars في الـ String. و بالتالي فللحصول على الـ String الفعلي الذي تعيده إحدى دوال Windows قم بإسناد القيمة التي تعيدها الدالة إلى متغير من النوع Long (مثل هذه الدوال تعيد عدد الـ characters التي تم الحصول عليها دون احتساب الـ Null char)، ثم استعمل قيمة هذا المتغير مع الدالة Left، كما في الثال التالي:

  1. Declare Function GetWindowText Lib "USER32" Alias "GetWindowTextA" ( _
  2. ByVal hWnd As Long, ByVal lpString As String, _
  3. ByVal nMaxCount As Long) As Long
  4. ' ...
  5. ' ...
  6. ' ...
  7. Dim MyBuffer As String, WinTitle As String, Cnt As Integer
  8.  
  9. MyBuffer = String$(255, 0)
  10. Cnt = GetWindowText(Handle, MyBuffer, 256)
  11. WinTitle = Left$(MyBuffer, Cnt)
  12.  

حيث تعيد الدالة GetWindowText عدد الـ characters التي تم تخزينها في المتغير MyBuffer دون الـ Null char، و لهذا احتجنا لحفظ هذا العدد في المتغير Cnt لاستعماله مع الدالة Left للحصول على الـ string المطلوب.

نقطة أخيرة للفائدة: إذا احتجت لتمير Null Pointer إلى إحدى دوال ويندوز فاستعمل الثابت vbNullString.

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

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

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

#3

السلام عليكم

اشكرك اخي على المساعدة والشرح الكامل

لكن لا تزال مشكلة

عندما احاول نقل نص الى MyBuffer

لاينقل اي يبقى دائما فارغا

وهذا هو المكود الذي كتبته :

Dim MyBuffer As String
MyBuffer = String$(255, 0)
MyBuffer = Text1.Text

وشكرااا

تم تعديل هذه المشاركة بواسطة youssefchou في 27 أغسطس 2008 في 11:57

#4

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

أولاً الكود الذي أرسلته في مشاركتك صحيح! و للتأكد اكتب MsgBox MyBuffer و سيعرض لك النص الموجود في Text1.

ثانياً إذا كنت ستسعمل المتغير بهذه الطريقة (أي أن تسند إليه قيمة مثل Text1.Text أو غيرها) فأنت لست في حاجة لتحديد حجمه مسبقاً لأن حجمه سيكون تلقائياً حجم النص المخزن فيه، و يمكنك الحصول على ذلك الحجم (أو الطول) باستخدام الدالة Len:

  1. StrLen = Len(MyBuffer)
  2.  

حيث سيحتوي المتغير StrLen على حجم (أو طول) الـ string المخزن في MyBuffer دون اعتبار الـ Null char و لذلك عند تمريره إلى API function يجب إضافة 1 إليه (لأن ال Null char موجود فعلاً في نهاية الـ string لكن VB لا تعتبره جزءاً منه).

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

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

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

#5

حسنا شكرا اخي على الدعم

جعله الله في ميزن حسناتك

#6

وأيضا يمكن تحديد طول المتغير النصي كما يلي :

Dim MyBuffer As String * 5

ولا يمكن بهذه الطريقة أن يعرّف بمتحول عام

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…