DBGrid içinde Memo
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.
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.
DBGrid içinde Memo
DBGrid'deki TMemoField cinsindeki alanları editleyen bedava bir bileşen veya bir çözüm yolu arıyorum.
-
- Kıdemli Üye
- Mesajlar: 574
- Kayıt: 01 Şub 2004 12:29
- Konum: Erdemli - MERSİN
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;
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
DBGrid'in OnColExit olayınada şöyle bir kod yazdım:
Selametle.
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;
Kod: Tümünü seç
procedure TfrmMalzemeDuzenleme.grdMalzemelerColExit(Sender: TObject);
begin
if grdMalzemeler.SelectedField.FieldName = 'ACIKLAMA' then
frmMemo.Hide;
end;