delphi4arab منتديات دلفي للعرب

نسخة كاملة : كيف اظهر memo في DBGrid
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم ورحمىة الله وبركاته


لدي قاعدة بينات بها حقل من نوع memo عندما اعرض البينات في dbgrid جميع الحقول تظهر ماعدى حقل Memo بيناته لا تظهر كل حقل يبقى مكتوب فيه
memo

صورة من dbgrid

[صورة: emXpjdp.png]


جزاكم الله خيرا
PHP كود :
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState);
var
 
Left: Integer;
 
Text : string;
begin
  if 
(Field.DataType = ftMemo) or
 
    (Field.DataType = ftFmtMemo) then
  begin
    Text 
:= Field.AsString;

 
   case Field.Alignment of
      taLeftJustify
:
 
       Left := Rect.Left + 2;
 
     taRightJustify:
 
       Left := Rect.Right - TDBGrid(Sender).Canvas.TextWidth(Text) - 3;
 
   else // center
 
     Left := Rect.Left + (Rect.Right - Rect.Left) shr 1 - (TDBGrid(Sender).Canvas.TextWidth(Text) shr 1);
 
   end;
 
   TDBGrid(Sender).Canvas.TextRect(Rect, Left, Rect.Top + 2, Text);
 
   
  end
;
end; 
اهلا Delphi4Us الكود لم يظهر اي خطا كما انه لم يشتغل لم تعرض memo في dbgrid
عموما انا اخطا انا استخدم DBMemo وليس memo هل لهذا السبب لم يعمل !!!

وشكرا وجزاك الله خيراااا
كيف لم يعمل ، هل وضعته بالحدث المناسب له وربطته بالاداة DBgrid
انا لم اجرب شيئا وانما بحتث لك عن المعلومة فقط ، مثال أخر
PHP كود :
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const 
 
                Rect: TRect; Field: TField; State: 
 
                TGridDrawState);

var
 
 P: array [0..50] of char; {array size is number of   
                             characters needed
}
 
 bs: TBlobStream;          {from the memo field}
 
 hStr: String;

begin
  if Field is TMemoField then
  begin
    with 
(Sender as TDBGrid).Canvas do
 
   begin   {Table1Notes is the TMemoField}
 
     bs := TBlobStream.Create(Table1Notes, bmRead);
 
     FillChar(P,SizeOf(P),#0); {terminate the null string}
 
     bs.Read(P, 50); {read 50 chars from memo into blobStream}
 
     bs.Free;
 
     hStr := StrPas(P);
 
     while Pos(#13, hStr)  0 do  {remove carriage returns and}
 
       hStr[Pos(#13, hStr)] := ' '; 
 
     while Pos(#10, hStr)  0 do  {line feeds}
 
       S[Pos(#10, hStr)] := ' ';

 
     FillRect(Rect);  {clear the cell}
 
     TextOut(Rect.Left, Rect.Top, hStr);  {fill cell with memo 
                                            data
}
 
   end;
 
 end;
end; 
بانسة للكود الاول قمت بوضعه في الحدث المناسب ل dbgrid ماذا تقصد بربطه مع dbgrid ! كيف اربطه

[صورة: 9R8ULws.png]
النتيجة

[صورة: Dt62M32.png]
-----------------
الكود الثاني يعطي خطا Undecided

[صورة: bsoKNwA.png]

شكرا وجزاك الله خيراا على محاولة المساعدة
السلام عليكم, اضف الحقول, ثم إختر الحقل المراد اظهاره, في الغالب يكون من نوع "Text" في SQL لذا يظهر هكذا, ثم من خلال خاصية Display Value, غير dvClass الى dvClip لاظهار نقاط آخر النص أو dvfull لاظهار القيمة كلها
[صورة: GkY7HHy.png][صورة: mIBGkpx.png][صورة: 1JIXqww.png]
انا اتعامل مع ACCESS وهذه الخاصية غير موجودة
شكرا وجزاك الله خيراا
[صورة: HYgig7r.png]
انقر على الحدث OnGetText الخاص بالحقل, ثم أكتب:

PHP كود :
Text:= Sender.AsWideString; 


[صورة: pAci4bH.png]
سيبدو هكذا:
PHP كود :
procedure TForm1.ADOTable1infoGetText(Sender: TField; var Text: string;
 
 DisplayText: Boolean);
begin
Text
:= Sender.AsWideString;
end; 
راجع هذا المثال سيفيدك
[صورة: 6d2fea3aa7acace.jpg]
http://delphi4arab.net/forum/showthread.php?tid=9502
تم بواسطة Ben.Ja و Delphi4Us جزاك الله خيراا في ميزان حسناتكم

Ben.Ja حركة حلوة
Delphi4Us اضافتك رائعة