Runtime da Display formata müdahale

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Runtime da Display formata müdahale

Mesaj gönderen conari »

Çalışma esnasında Display formatı değiştirmek istiyorum fakat Fieldlar belli değil yani önceden Query deki fieldları tanımlayamıyorum.Seçilen kriterlere query oluşuyor ve gridde gösteriliyor.
Kodu yazarken de gelmiyor field(x).displayformat şeklinde
nasıl yapılabilir.
İyi çalışmalar.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: Runtime da Display formata müdahale

Mesaj gönderen aslangeri »

s.a.
şöyle bir kodla yapabilirsin.

Kod: Tümünü seç

for i:=0 to query.fields.count-1 do
begin
  if query.fields[i].fieldtype=ftcurrency then
     query.fields[i].displayformat:='#######'
end;
kodları afaki yazdım. doğruları ile değiştirirsin.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Runtime da Display formata müdahale

Mesaj gönderen conari »

fieldtype da gelmiyorki :roll:
fieldno,
fieldkind,
Fieldname geliyor.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: Runtime da Display formata müdahale

Mesaj gönderen Battosai »

Ben DBGrid de gösterim için bir procedure geliştirmiştim...hem sağa dayalı hem formatlı yazıyor duruma göre...

Kod: Tümünü seç

if Column.Field.DataType=ftFloat then
begin
S:=FormatFloat('#,##0.00',StrToFloatDef(Column.Field.Text,0));
end;
Senin istediğin kısmı böyle oluyor...aslangeri'nin örneğine uygulayabilirsin...
for i:=0 to query.fields.count-1 do
begin
if query.fields.DataType=ftcurrency then
query.fields.displayformat:='#######'
end;
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Runtime da Display formata müdahale

Mesaj gönderen conari »

Kod: Tümünü seç

with MainForm.ADOCariRap do begin
     Open;
   for i:=0 to fields.count-1 do
  begin
if fields[i].DataType=ftcurrency then
   fields[i].displayformat:='#######'
Displayformat diye bir şey yok diyor :shock:

Kod: Tümünü seç

[Error] Unit11.pas(110): Undeclared identifier: 'displayformat'
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
mahsuni
Üye
Mesajlar: 99
Kayıt: 21 Haz 2003 01:09
Konum: Ankara-Mamak

Re: Runtime da Display formata müdahale

Mesaj gönderen mahsuni »

Kod: Tümünü seç

for i:=0 to DataSet.fields.count-1 do 
begin
  if DataSet.fields[i].DataType=ftcurrency then
  TFloatField(DataSet.Fields[i]).DisplayFormat:='#,##0.00';
end
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: Runtime da Display formata müdahale

Mesaj gönderen Battosai »

yoktur zaten...Query de önceden tanımlı filedler için böyle bir method var bildiğin gibi...Buda Field in ongetext olayında çalışyor sanırsam...Dolayısıyla OnGetText methodu gibi çalışan bir procedure yapman icab edebilir her field için, bence luzumsuz birşey...Sana nerde lazım olcağını söylersen daha iyi çözümler sunulabilir..Bende ön tanımsız fieldler ile çalışıyorum dolayısıyla bütün DBGrid lerim için bir procedure yaptım ondrawcolumncell olayına yazıyorum mesele çözülüyor...çözüme birde bu taraftan bak...
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Runtime da Display formata müdahale

Mesaj gönderen conari »

Dbgridlerde kullacağım.
Fakat, Calculated fieldlarda kullanmam gerekecek efff
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: Runtime da Display formata müdahale

Mesaj gönderen Battosai »

Sana kendi procedure mu vereyim işine yarayabilir...
Procedure GridHucreFormatla(Sender: TObject;const Rect: TRect;Column: TColumn);
var
l_oldalign:word;
S:string;
Begin
with (Sender as TJvDBUltimGrid) do
begin
S:=Column.Field.Text;
Canvas.FillRect(Rect);
l_oldalign:=settextalign(canvas.handle,ta_left);
canvas.textrect(rect,rect.Left+2, Rect.top+2,S);
if Column.Field.DataType=ftFloat then
begin
S:=FormatFloat('#,##0.00',StrToFloatDef(Column.Field.Text,0));
l_oldalign:=settextalign(canvas.handle,ta_right);
canvas.textrect(rect,rect.right-2, Rect.top+2,S);
end;
if Column.Field.DataType=ftInteger then
begin
S:=FormatFloat('#,##',StrToFloatDef(Column.Field.Text,0));
l_oldalign:=settextalign(canvas.handle,ta_right);
canvas.textrect(rect,rect.right-2, Rect.top+2,S);
end;
settextalign(canvas.handle,l_oldalign);
End;
End;
İnteger alanları binlik ayraç koyar,float alanlarıda parasl yazar...ayrıca sağa dayalı yazar...yapman gereken DrawColumnCell olayına;
GridHucreFormatla(Sender,Rect,Column); yazman ..eğer bu olayda başka kodların varsa sona eklersen daha iyi olur....
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Runtime da Display formata müdahale

Mesaj gönderen conari »

mahsuni yazdı:

Kod: Tümünü seç

for i:=0 to DataSet.fields.count-1 do 
begin
  if DataSet.fields[i].DataType=ftcurrency then
  TFloatField(DataSet.Fields[i]).DisplayFormat:='#,##0.00';
end
Bu kod işimi çözdü.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Cevapla