dbgrid memo nesnesine aktarma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

dbgrid memo nesnesine aktarma

Mesaj gönderen erdogan_ozkaya »

Arkadaşlar,

aşağıdaki kod ile grind içeriğini memo'ya aktarıyorum fakat biçimsizce oluyor daha düzgün bir halini nasıl yapabilirim ?

Teşekkürler

Kod: Tümünü seç

procedure TForm1.btn2Click(Sender: TObject);
begin

     mmoMAIL_ICERIK.lines.add('TARIH '+''#9' :'+    DateToStr(Date));
     mmoMAIL_ICERIK.lines.add('----HAREKET DETAYI-----------------------------------------------------------');
     mmoMAIL_ICERIK.lines.add(' ');


       mmoMAIL_ICERIK.lines.add(
       'DURUMU'
      +''#9''+ 'CIKIS TARIHI'
      +''#9''+   'CIKIS SAAT'
      +''#9''+  'GIRIS TARIH'
      +''#9''+   'GIRIS SAAT'
      +''#9''+ 'PLAKA'
      +''#9''+  'SOFOR'
      +''#9''+   'GUZERGAH');
       mmoMAIL_ICERIK.lines.add('-------------- ---------------------------------------------------------------');
 

       try    QRYARAC_HAREKET.First;
  QRYARAC_HAREKET.DisableControls;
  while (not QRYARAC_HAREKET.Eof) do
    begin
       mmoMAIL_ICERIK.lines.add(
                QRYARAC_HAREKET.FieldByName('DURUMU').Text
      +''#9''+  QRYARAC_HAREKET.FieldByName('CIKIS_TARIH').Text
     // +''#9''+  QRYARAC_HAREKET.FieldByName('CIKIS_SAATI').Text
      +''#9''+  RightStr(QRYARAC_HAREKET.FieldByName('CIKIS_SAATI').Text,8)
      +''#9''+  QRYARAC_HAREKET.FieldByName('GIRIS_TARIH').Text
      +''#9''+  RightStr(QRYARAC_HAREKET.FieldByName('GIRIS_SAATI').Text,8)

     //  +''#9''+  FormatDateTime('t', QRYARAC_HAREKET.FieldByName('GIRIS_SAATI').Value
      +''#9''+  QRYARAC_HAREKET.FieldByName('PLAKA').Text
      +''#9''+  QRYARAC_HAREKET.FieldByName('SOFOR').Text
      +''#9''+  QRYARAC_HAREKET.FieldByName('GUZERGAH').Text   );
      QRYARAC_HAREKET.Next;
    end;
finally
       QRYARAC_HAREKET.EnableControls;
    end;
       mmoMAIL_ICERIK.lines.add('------------------------------------------------------------------------------'); 
end;
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: dbgrid memo nesnesine aktarma

Mesaj gönderen ertank »

Merhaba,

Yapılabilecek iki şey geliyor aklıma.
1- Memo Font Adını sabit genişlikli bir font olarak değiştirin.
2- TAB karakteri kullanmak yerine boşluk karakteri kullanın. Her bir alanın karakter sayısını belirleyip küçük ise başına ya da sonuna boşluk ekleyerek her zaman sabit genişlikte olmasını sağlayın. Böyle olduğu zaman alanlar arası bir boşluk bile bıraksanız yeterli olacaktır.
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: dbgrid memo nesnesine aktarma

Mesaj gönderen erdogan_ozkaya »

Merhaba Hocam cevabınız için teşekkür ederim, ama genişlikler değişken olduğu için sürekli bozuk çıkıyor
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: dbgrid memo nesnesine aktarma

Mesaj gönderen ertank »

Memo Font adı nedir şu anda?
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: dbgrid memo nesnesine aktarma

Mesaj gönderen erdogan_ozkaya »

MS Sans Serif
DEFAULT_CHARSET
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: dbgrid memo nesnesine aktarma

Mesaj gönderen ertank »

İlk cevabımı okudunuz mu? 1 numaralı maddesinde yazan ifadede sabit genişlikli bir font seçmenizi önermiştim. Aşağıdaki fontlardan hangisi mevcut ise bir tanesini Memo.Font.Name olarak ayarlayabilir misiniz?

Consolas
Courier New

Bu yazı tiplerinin her karakteri aynı genişlikte olur ve eski DOS ekranından alışıldığı şekilde kullanıma uygundur.
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: dbgrid memo nesnesine aktarma

Mesaj gönderen erdogan_ozkaya »

Hocam aslında şunu yapmak istiyorum dbgrid içeriğini mail atma istiyorum bunun için böyle birşey yapıyorum memoya aktarmak kolayda mail attığında yine font değişiyor ve karışıyor öneriniz ne olabilir ?

Teşekkür Ederim.
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: dbgrid memo nesnesine aktarma

Mesaj gönderen ertank »

Kullandığınız Delphi sürümü nedir?
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: dbgrid memo nesnesine aktarma

Mesaj gönderen erdogan_ozkaya »

hocam delphi 7 kullanıyorum,

listeyi memoya aktarıp mail atıyordum mail gönderimi ile ilgili kod aşağıdaki gibi indy10 kullanıyorum


Teşekkür Ederim.

Kod: Tümünü seç

procedure TForm1.btnMAIL_GONDERClick(Sender: TObject);
begin
inherited;
      mmoDURUM.Lines.Add('');
      Application.ProcessMessages;
      mmoDURUM.Lines.Add('Bağlantı Kuruluyor.');
  try
    if SMTP.Connected then SMTP.Disconnect;
    SMTP.Host := MAIL_AYARLARI.edtGIDEN_SUNUCU.Text; //EditHOST.Text;
    //SMTP.AuthType := satNone;
    SMTP.AuthType := atDefault;
    SMTP.Username := MAIL_AYARLARI.edtKULLANICI_ADI.Text;//EditUSER.Text;
    SMTP.Password := MAIL_AYARLARI.edtKULLANICI_SIFRE.Text;//EditPASSWORD.Text;

    SMTP.Port := 25;
      if StrToIntDef(MAIL_AYARLARI.GIDEN_SUNUCU_PORT.Text, -1) > 0
      then SMTP.Port :=  StrToInt(MAIL_AYARLARI.GIDEN_SUNUCU_PORT.Text);

    // SSL ayarları
    if MAIL_AYARLARI.edtGIDEN_SUNUCU_SIFRELEME.Text='Yok' then
    begin
      SMTP.UseTLS := utNoTLSSupport;
      SMTP.IOHandler := nil;
      SMTP.ConnectTimeout := 3000;
    end else


    begin
      mmoDURUM.Lines.Add('Bağlantı ayarları yapılıyor.');
      LHandler.Destination := SMTP.Host + ':' + IntToStr(SMTP.Port);
      LHandler.Host := SMTP.Host;
      LHandler.Port := SMTP.Port;
      LHandler.DefaultPort := 0;
      LHandler.SSLOptions.Method := sslvTLSv1;
      LHandler.SSLOptions.Mode := sslmUnassigned; // sslmClient;
      LHandler.SSLOptions.VerifyMode := [];
      LHandler.SSLOptions.VerifyDepth := 0;
      SMTP.IOHandler := LHandler;
    end;

     if MAIL_AYARLARI.edtGIDEN_SUNUCU_SIFRELEME.Text='SSL'
     then  SMTP.UseTLS := utUseImplicitTLS;

     if MAIL_AYARLARI.edtGIDEN_SUNUCU_SIFRELEME.Text='TSL'
     then  SMTP.UseTLS := utUseExplicitTLS;

      SMTP.ConnectTimeout := 10000;


    mmoDURUM.Lines.Add('Sunucuya Bağlanılıyor.');
    SMTP.Connect;

    mmoDURUM.Lines.Add('E-posta gönderiliyor.');

    EPosta.Clear;
    EPosta.From.Address := MAIL_AYARLARI.edtHAREKET_MAIL_ADRESI.Text;//EditUSER.Text;
    EPosta.From.Name := 'ARAC TAKIP RAPORU';
    EPosta.ReplyTo.EMailAddresses :=  MAIL_AYARLARI.edtKULLANICI_ADI.Text;
    //EPosta.ReplyTo.Name := EditUSER.Text;

    with EPosta.Recipients.Add do
    begin
      if MAIL_AYARLARI.edtHAREKET_MAIL_ADRESI.Text  > '' then
      begin
        Name := MAIL_AYARLARI.edtHAREKET_MAIL_ADRESI.Text ;
        Address := MAIL_AYARLARI.edtHAREKET_MAIL_ADRESI.Text ;
      end else
      begin
        Name :=MAIL_AYARLARI.edtHAREKET_MAIL_ADRESI.Text;
        Address := MAIL_AYARLARI.edtHAREKET_MAIL_ADRESI.Text;
      end;
    end;
    EPosta.Subject := DateToStr(dtpTARIH.Date)+ ' TARIH ARAC TAKIP RAPORLARI';
    EPostaIcerikHazirla(Sender);
    SMTP.Send(EPosta);
    mmoDURUM.Lines.Add('Bağlantı başarılı. E-posta gönderilmiştir.');
   finally
    mmoDURUM.Lines.Add('Bağlantı sonlandırılıyor.');
    if SMTP.Connected then SMTP.Disconnect;
  end;
end;
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: dbgrid memo nesnesine aktarma

Mesaj gönderen ertank »

Email gönderir iken "Plain Text" veya "HTML" gönderebilirsiniz. Her halukarda alıcının bilgisayarında kullandığı Email okuma programına bağlısınız. Eğer kullanıcı "Plain Text" emailleri sabit genişlikli bir font ile okuyor ise mevcut halde gönderdiğiniz, sizde genişlikleri farklı gözüken yazılar karşı tarafta çok düzgün gözükecektir.

Günümüzde HTML formatını desteklemeyen e-mail kullanan sayısı çok olmadığını düşünerek ekteki örnek uygulamayı hazırladım. Indy10 uyumludur. Delphi 10.2 ile çalışmaktadır. Delphi 7 uyumlu hale getirmeye çalıştım ancak gözümden kaçan ve düzeltilmesi gereken noktalar olabilir.

Uygulama TDataSet içinden nasıl sabit genişlikli veri okunabileceğini ve html formatlı e-mail olarak nasıl sabit genişlikli olarak gönderilebileceğini göstermektedir.
Dosya ekleri
sendemail_fixedwidth.rar
(9.15 KiB) 61 kere indirildi
Cevapla