![]() |
|
DBGrid Detay Gösterilmesi. - Baskı Önizleme +- Delphi Can (https://www.delphican.com) +-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3) +--- Forum: Genel Programlama (https://www.delphican.com/forumdisplay.php?fid=6) +--- Konu Başlığı: DBGrid Detay Gösterilmesi. (/showthread.php?tid=3542) Sayfalar:
1
2
|
Cvp: DBGrid Detay Gösterilmesi. - Pimapen_Nuri - 20-03-2024 (12-04-2019, Saat: 12:27)mrmarman Adlı Kullanıcıdan Alıntı: Örnek : Hocam delphi 7 de uyguladım ancak, button ilgili satırda görüntülenmedi, hatada yok, anlamadım. !.? DBGrid Detay Gösterilmesi. - mrmarman - 20-03-2024 Merhaba Hata yok dediniz, ilk akla gelen if'i geçememiş olma ihtimali. İlk sütunun adı 'Btn' olup olmadığı kontrol ediliyor. Sizde nedir? gif / video vb bir kod örneği vs koysaydınız mesaj içine daha sonuç odaklı cevap yazabilirdim. Cvp: DBGrid Detay Gösterilmesi. - Pimapen_Nuri - 01-04-2024 (20-03-2024, Saat: 20:10)mrmarman Adlı Kullanıcıdan Alıntı: Merhaba DBGrid Detay Gösterilmesi. - engerex - 01-04-2024 Buton gridin arkasında kalıyor olabilir mi? DBGrid Detay Gösterilmesi. - Pimapen_Nuri - 02-04-2024 Muharrem hocamın kodlarını uyguladım, arkada kaldığını nasıl anlayabilirim acaba... DBGrid Detay Gösterilmesi. - frmman - 02-04-2024 Formunuza başka bir buton daha koyup aşağıdaki kodu deneyin. Grid için kullandığınız buton ismi BitBtn1 değilse aşağıdaki kodda gerekli değişikliği yapmayı unutmayınız. BitBtn1.Left := 40; //buton korrdinatları için sabit değer BitBtn1.Top := 40; BitBtn1.Visible := True; BitBtn1.BringToFront; Buton burada görünüyorsa DBGrid1DrawDataCell eventindeki IF yapılarındaki kontrollere odaklanın. Benzer senaryo gösterimi (visible kullanılmıyor sadece bringtofront etkisi gösteriliyor): ![]() Sonradan aklıma gelen bir ihtimal daha: DBGrid ve BitBtn1 farklı paneller içerisnde ise bringtofront işlemi sonunda buton panellerin z-order durumuna göre hiç görünmeyebilir. Aşağıdaki kullanımda, grid panel1 içinde BitBtn2 ise panel2 içerisinde. BitBtn2 gridin üstüne çıkamıyor. (Panel2 panel1 in arkasında.) Bu şekilde tahminlerde bulunmak yerine, projenizde sorun yaşadığınız kısmı soyutlayıp ilgili kısmı paylaşırsanız çok daha hızlı çözüme ulaşırsınız.
DBGrid Detay Gösterilmesi. - mrmarman - 02-04-2024 Kalan ihtimallerden birisi de ROWSELECT özelliği kapalı olması. Sütunu seçince buton gezer ama kaydı tıklayınca sütun tetiklenmez. Şu satırı eklemeyi dener misiniz ... DBGrid1.Options := DBGrid1.Options + [dgRowSelect]; DBGrid Detay Gösterilmesi. - Pimapen_Nuri - 04-04-2024 DrawDataCell de yazıl kodlar devreye girmediğini anlıyorum, bitbutonu visible true yapıp çalıştırdığımda, dbgrid te yaptığım seçimlerde button aynı yerinde kalıyor, tıklanınca istenen alanı show ediyor, muharrem hocam yaptığınız örneği buraya ekleme yapabilirmisiniz. yada mail olarak Pimapen_Nuri@ hotmail.com a gönderirseniz, ben nerede hata yapıyorum görmek isterim. Sizin kodların birebir aynısını projeme uyguluyorum. İlginç bir durumla karşı karşıyayım. DBGrid Detay Gösterilmesi. - mrmarman - 04-04-2024 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
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;
DBGrid Detay Gösterilmesi. - Pimapen_Nuri - 05-04-2024 Teşekkürler Muharrem hocam, son örneğiniz sorunsuz çalışıyor, projemde uyguladım. Delphi 7 de MessageDlg( LRecord, TMsgDlgType.mtInformation, [TMsgDlgBtn.mbOk], 0 ); // Object or class type required ReportMemoryLeaksOnShutdown := true; // Undeclared identifier hataları mevcut delphi 10.2 de sorun olmuyor, Sanırım delphi 7 ye veda etme zamanı geldi. ![]() Allah ilizyon ilminizi artırsın... |