![]() |
Memo içerisinde 4 kolonlu tablo tipi string göstermek (String Format) - 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ığı: Memo içerisinde 4 kolonlu tablo tipi string göstermek (String Format) (/showthread.php?tid=5941) |
Memo içerisinde 4 kolonlu tablo tipi string göstermek (String Format) - Syntax - 22-04-2021 Merhabalar, Aram bu string format ve Regex tipi yapılarla pek iyi değil. Memo içerisinde düzenli bir yapıda içerik göstermek istiyorum. İsim Soyisim S.NO Şehir Aras Yıldız 24565 İstanbul Şeklinde bir çıktı elde etmek için çabalıyorum. Bunun için 2 kolonlu bir yapıya uygun olarak aşağıdaki kodu kullanıyorum. Kod: procedure Output(const AStr1, AStr2: string; AWidth: Integer); ![]() Bu bana düzgün şekilde 2 kolonlu bir tablo yapısı veriyor fakat ben bu kodu aşağıdaki şekilde modifiye ettiğimde Kod: procedure Output(const AStr1, AStr2, AStr3, AStr4: string; AWidth: Integer); Kolon yapısı bozuluyor ve metin aralarında kaymalar oluyor. ![]() Format kodumda sorun var sanırım. Bu syntax mantığını öğrenebileceğim bir yer tavsiye ederseniz çok sevinirim. Not: İçerik gösterimi için Memo kullanımım zorunlu. Richedit kullanamıyorum malesef. Teşekkürler. Cvp: Memo içerisinde 4 kolonlu tablo tipi string göstermek (String Format) - ugorkem - 23-04-2021 biçimlendirmenizde hata yoksa karakter genişliği sabit olan aşağıdaki fontlardan birini memo nun font u olarak kullanınız. Courier New,Droid Sans Mono ,Consolas,Menlo,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,monospace,serif isterseniz aşağıdaki fonksiyonu da kullanabilirsiniz. function cwRightPad(Str: string; const CharCount: Integer = 15; FillChar: Char=' '): string; var l_restLength: Integer; begin Result := str; l_restLength := CharCount - Length(str); if (l_restLength < 1) then exit; Result := str + StringOfChar(FillChar, l_restLength) ; end; //kullanımı memo1.Lines.Add( cwRightPad('metin1')+ cwRightPad('metin1')+cwRightPad('145')+cwRightPad('20') ) ; Memo içerisinde 4 kolonlu tablo tipi string göstermek (String Format) - mrmarman - 23-04-2021 * Fantazi olsun diye yazayım, dinamik bir yaklaşım da buradan. - dinamik derken içerik uzunluğu kadar boşluk - - Uzunuluklar için Type tanımına gerek yok, sadece Liste alanları kadar değişkeni bir defada gruplamak açısından kolay geldi o bakımdan. Type tIsimListesi = Record Ad, Soyad, Sicil, Sehir : String; End; var FList : Array of tIsimListesi; procedure AddList( const AAd, ASoyad, ASicil, ASehir: string ); begin if High(Flist) < 0 then SetLength( FList, 1 ) else SetLength( Flist, High(Flist) + 1 + 1 ); With FList[ High(FList) ] do begin Ad := AAd; Soyad := ASoyad; Sicil := ASicil; Sehir := ASehir; end; end; procedure MakeOutput( aList: TStrings ); Type tIsimListesiUz = Record Ad, Soyad, Sicil, Sehir : Integer; End; var LUz : tIsimListesiUz; i : Integer; begin // Önce döngü ile en uzun boylu ifadelerin tespiti. LUz := default(tIsimListesiUz); // Reset for i := low( FList ) to high( Flist ) do begin if LUz.Ad < Length(FList[i].Ad) then LUz.Ad := Length(FList[i].Ad); if LUz.Soyad < Length(FList[i].Soyad) then LUz.Soyad := Length(FList[i].Soyad); if LUz.Sicil < Length(FList[i].Sicil) then LUz.Sicil := Length(FList[i].Sicil); if LUz.Sehir < Length(FList[i].Sehir) then LUz.Sehir := Length(FList[i].Sehir); end; // Sonra benzer döngü ile bu uzunlukları çıktıda kullanmak. for i := low( FList ) to high( Flist ) do begin aList.Add( Format( ' %-'+IntToStr(LUz.Ad )+'s' + ' %-'+IntToStr(LUz.Soyad)+'s' + ' %-'+IntToStr(LUz.Sicil)+'s' + ' %-'+IntToStr(LUz.Sehir)+'s' , [ FList[i].Ad, FList[i].Soyad, FList[i].Sicil, FList[i].Sehir ] ) ); end; end; procedure TForm1.Button1Click(Sender: TObject); begin // Liste reset işlemi Finalize( FList ); // Listelenecek içeriğin eklenmesi işlemi AddList( 'Aras', 'Tekin', '2365', 'İstanbul' ); AddList( 'Mehmet', 'Yıldızoğlu', '8476', 'Edirne' ); AddList( 'Tufan', 'Pekcan', '7590', 'Ankara' ); //AddList( '00000000000', '111111111111', '2222222222', '33333333333333' ); // İçeriğin çıktı işlemi MakeOutput( Memo1.Lines ); end; Memo içerisinde 4 kolonlu tablo tipi string göstermek (String Format) - Syntax - 23-04-2021 @ugorkem ve @mrmarman cevaplarıız için çok teşekkür ederim. İki metot da işimi gördü. İyi çalışmalar dilerim. Memo içerisinde 4 kolonlu tablo tipi string göstermek (String Format) - Bay_Y - 05-05-2023 @ugorkem ve @mrmarman her iki kullanımda gayet kullanışlı ve açıklayıcı olmuş. Teşekkürler. |