Size bir proje hazırladım oradan bakıp sorunun ne olduğunu anlayabilirsiniz.
Tek fark olarak ilk sütunu ifade edecek şekilde Index vererek, 'Btn' olan sütun ismi şartını kaldırdım ki veritabanı sql sorguları olduğu gibi kullanılabilsin.
Kaynak kodlar ve veritabanı bu mesaj ekindedir...
Kaynak kodların açık hali aşağıda verdiğim şekilde
Tek fark olarak ilk sütunu ifade edecek şekilde Index vererek, 'Btn' olan sütun ismi şartını kaldırdım ki veritabanı sql sorguları olduğu gibi kullanılabilsin.
Kaynak kodlar ve veritabanı bu mesaj ekindedir...
Kaynak kodların açık hali aşağıda verdiğim şekilde
procedure TForm1.BitBtn1Click(Sender: TObject);
const
LConnStr = 'Provider=Microsoft.Jet.OLEDB.4.0;'
+ 'Data Source=%s;'
+ 'Jet OLEDB:Database Password=%s;';
LPwd = '';
var
LSourceMDB : string;
i : Integer;
begin
DBGrid1.Font.Name := 'Courier New';
DBGrid1.Font.Size := 12;
LSourceMDB := ExtractFilePath(ParamStr(0)) + 'data\movies.mdb';
ADOConnection1.LoginPrompt := False;
ADOConnection1.ConnectionString := Format( LConnStr, [LSourceMDB, LPwd] );
ADOConnection1.Connected := True;
DataSource1.DataSet := ADOQuery1;
DBGrid1.DataSource := DataSource1;
DBGrid1.Options := DBGrid1.Options + [dgRowSelect];
ADOQuery1.SQL.Text := ''
+ sLineBreak + 'SELECT ''.'' as [*]'
+ sLineBreak + ' , M_Name as [Film Adı]'
+ sLineBreak + ' , M_Year as [Yıl]'
+ sLineBreak + ' , M_Directed as [Yönetmen]'
+ sLineBreak + ' , M_Genre as [Tür]'
+ sLineBreak + ' , LEFT(TRIM(M_Plot_TR), 255) AS [Özet]'
+ sLineBreak + 'FROM [Movies]';
ADOQuery1.Connection := ADOConnection1;
ADOQuery1.Active := true;
for i := 0 to DBGrid1.Columns.Count-1
do
if DBGrid1.Columns[i].Width > 255
then
DBGrid1.Columns[i].Width := 255;
DBGrid1.Columns[0].Width := BitBtn2.Width;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
var
LRecord : String;
begin
LRecord := '';
if (DBGrid1.DataSource = nil) then exit;
With DBGrid1.DataSource.DataSet do
if (Active )
AND (RecNo > 0)
then
LRecord := Format( 'Film "%s" (%s)' + sLineBreak
+ 'Yönetmen "%s"' + sLineBreak
+ '%s' + sLineBreak + sLineBreak
+ '%s',
[
FieldByName('Film Adı').AsString
,FieldByName('Yıl').AsString
,FieldByName('Yönetmen').AsString
,FieldByName('Tür').AsString
,trim( FieldByName('Özet').AsString )
]);
if LRecord = '' then exit;
MessageDlg( LRecord, TMsgDlgType.mtInformation, [TMsgDlgBtn.mbOk], 0 );
DBGrid1.SetFocus;
end;
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
Field: TField; State: TGridDrawState);
var
LMoveControl : TControl;
begin
// Buton için uygun column/field hangisisye oraya odaklanacağız...
LMoveControl := BitBtn2;
if ( Field.FieldNo = 1 ) then
begin
if ( Field.DataSet.RecordCount > 0 ) then
begin
// Kayıt Seçili ve Odaklı ise Butonu yerleştir.
If ( (gdSelected in State) or (gdFocused in State) ) then
begin
LMoveControl.Height := Rect.Bottom-Rect.Top +2;
LMoveControl.Width := Rect.Right -Rect.Left;
LMoveControl.Left := Rect.Left + tDBGrid(Sender).Left + 1;
LMoveControl.Top := Rect.Top + tDBGrid(Sender).Top;
LMoveControl.Visible := True;
LMoveControl.BringToFront;
end;
end;
end;
end;
Saygılarımla
Muharrem ARMAN

Muharrem ARMAN


