DBGrid içinde Memo

Yapmak istediğiniz işle ilgili doğru bileşeni bulmak için burayı kullanabilirsiniz. Sadece bulmak için, diğer sorular Programlama forumuna lütfen.
Forum kuralları
Bu forum sadece yapacağınız işle alakalı doğru bileşeni bulmak içindir. Şöyle bir şey yapmam lazım, hangi bileşeni kullanıyım diyorsanız, doğru yerdesiniz.
Cevapla
Kullanıcı avatarı
muskut
Kıdemli Üye
Mesajlar: 1118
Kayıt: 22 Ara 2003 09:50
Konum: Sandalyemden
İletişim:

DBGrid içinde Memo

Mesaj gönderen muskut »

DBGrid'deki TMemoField cinsindeki alanları editleyen bedava bir bileşen veya bir çözüm yolu arıyorum.
oguzozturk74
Kıdemli Üye
Mesajlar: 574
Kayıt: 01 Şub 2004 12:29
Konum: Erdemli - MERSİN

Mesaj gönderen oguzozturk74 »

Elimde Memo Alanları DBGrid içerisine gömen ik farklı kod var . Umarım işine yarar ...

Kod: Tümünü seç

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}
  S: String;
begin
  if Field is TMemoField then
  begin
    with (Sender as TDBGrid).Canvas do
    begin
      BS:= tBlobStream.Create(TBlobField(Field), bmRead);
      FillChar(P, SizeOf(P), #0);            {terminate the null string}
      BS.Read(P, 50);              {read 50 chars from memo into blobStream}
      BS.Free;
      S:= StrPas(P);
      while Pos(#13, S) > 0 do
        S[Pos(#13, S)] := ' ';
      while Pos(#10, S) > 0 do
        S[Pos(#10, S)] := ' ';
      FillRect(Rect);                {clear the cell}
      TextOut(Rect.Left, Rect.Top, S);               {fill cell with memo data}
    end;
  end;
end;

Kod: Tümünü seç

 procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
   Field: TField; State: TGridDrawState);
 var
   Grid  : TStringGrid;
   Texto : String;
   Rectangulo : TRect;
 begin
   Rectangulo:=Rect;
   Grid := TStringGrid(Sender);
   if Field.IsBlob then
   begin
     Grid.Canvas.FillRect(Rect);
     Texto := Field.AsString;
     DrawText( Grid.Canvas.Handle, PChar(Texto),StrLen(PChar(Texto)), Rectangulo, DT_WORDBREAK);
   end;
 end;
Kullanıcı avatarı
muskut
Kıdemli Üye
Mesajlar: 1118
Kayıt: 22 Ara 2003 09:50
Konum: Sandalyemden
İletişim:

Mesaj gönderen muskut »

Sanırım bu kodlarınız sadece görmek için kullanılıyor. Şu şekilde bir çözüm kullandım.
Ayrı bir form tasarlayıp içine bir adet DBMemo koydum.

DBGrid'in OnDrawColumCell olayına şöyle bir kod yazıyorum

Kod: Tümünü seç

procedure TfrmMalzemeDuzenleme.grdMalzemelerDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if (Column.FieldName = 'ACIKLAMA') and (gdFocused in state) then
  begin
    with frmMemo do
    begin
      Memo.DataField := 'ACIKLAMA';
      Memo.DataSource := DataModule1.dsMalzemeTablosu;
      Left := frmMalzemeDuzenleme.Left + grdMalzemeler.Left + Rect.Left + 5;
      Top := frmMalzemeDuzenleme.Top + grdMalzemeler.Top + Rect.Bottom + 15;
      Show;
    end;
  end;
end;
DBGrid'in OnColExit olayınada şöyle bir kod yazdım:

Kod: Tümünü seç

procedure TfrmMalzemeDuzenleme.grdMalzemelerColExit(Sender: TObject);
begin
  if grdMalzemeler.SelectedField.FieldName = 'ACIKLAMA' then
    frmMemo.Hide;
end;
Selametle.
Cevapla