Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
erdogan_ozkaya
Üye
Mesajlar: 839 Kayıt: 03 Eki 2007 02:00
Mesaj
gönderen erdogan_ozkaya » 21 Kas 2017 06:29
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: 1657 Kayıt: 12 Eyl 2015 12:45
Mesaj
gönderen ertank » 22 Kas 2017 09:37
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
Mesaj
gönderen erdogan_ozkaya » 22 Kas 2017 09:51
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: 1657 Kayıt: 12 Eyl 2015 12:45
Mesaj
gönderen ertank » 22 Kas 2017 10:19
Memo Font adı nedir şu anda?
ertank
Kıdemli Üye
Mesajlar: 1657 Kayıt: 12 Eyl 2015 12:45
Mesaj
gönderen ertank » 22 Kas 2017 10:22
İ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
Mesaj
gönderen erdogan_ozkaya » 22 Kas 2017 10:40
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: 1657 Kayıt: 12 Eyl 2015 12:45
Mesaj
gönderen ertank » 22 Kas 2017 10:46
Kullandığınız Delphi sürümü nedir?
erdogan_ozkaya
Üye
Mesajlar: 839 Kayıt: 03 Eki 2007 02:00
Mesaj
gönderen erdogan_ozkaya » 22 Kas 2017 01:16
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: 1657 Kayıt: 12 Eyl 2015 12:45
Mesaj
gönderen ertank » 22 Kas 2017 02:28
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) 64 kere indirildi