Farklı Temalarda BitBtn Caption Center Sorunu

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
xozcanx
Üye
Mesajlar: 362
Kayıt: 05 Oca 2012 12:55

Farklı Temalarda BitBtn Caption Center Sorunu

Mesaj gönderen xozcanx »

Merhaba;
BitBtn WordWrap özelliği True yapıldığında, XE sürümü içinde bulunan temalardan birini seçtiğim de Btn üzrerinde yazan ismin Sola Hizalı olduğunu farkettim. Normal temada olduğu gibi ortalama yapabilirmiyiz?

Teşekkürler.

Resim
Nasibinde varsa, alırsın karıncadan bile ders, Nasibinde yoksa, bütün cihan önüne serilse, sana ters..
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: Farklı Temalarda BitBtn Caption Center Sorunu

Mesaj gönderen Lord_Ares »

Font özellikleri kısmında align ile hizalayabilirsin. En kötü ihtimal buttonun caption kısmında yazarken space tuşu ile bir boşluk atarak hizalamayı deneyin.
Kullanıcı avatarı
xozcanx
Üye
Mesajlar: 362
Kayıt: 05 Oca 2012 12:55

Re: Farklı Temalarda BitBtn Caption Center Sorunu

Mesaj gönderen xozcanx »

Hocam Boşluk koyduğum zaman oluyor onu denemiştim. Ben kullanıcıya Tema Seç bölümü hazırlamıştm, kullanıcı buradan istediği temayı seçebilecek. Standart temayı kullanıyorsa Sıkıntı yok ama standart tema dışında bir tema kullanırsa Yukarıdaki problem oluşuyor. Bu durumda benim Form her Create edildiğinde, bir Procedure ile bu durumdaki tüm butonların gerekli alanlarına boşluk karaktari atamam gerekecek. İlk aklıma gelen bu oldu. Düşünce olarak kulağı çok tersten tutmak istemiyorum. Farklı bir bakış açısı farklı bir çözüm varmıdır onu merak ettim. :wink:
Ayrıca Hocam ben mi dediğinizi yanlış algıladım acaba :( Font özelliklerinde Aling göremedim.

Resim
Nasibinde varsa, alırsın karıncadan bile ders, Nasibinde yoksa, bütün cihan önüne serilse, sana ters..
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Farklı Temalarda BitBtn Caption Center Sorunu

Mesaj gönderen SimaWB »

Rodrigo Ruz'un temalarla ilgili bug'ları düzeltmekle alakalı çok çalışması olmuştur.
Bunları artık GitHub'ta yayınlıyor.
Belki sizin sorununuzu da çözmüştür, kontrol etmekte fayda var.
There's no place like 127.0.0.1
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Farklı Temalarda BitBtn Caption Center Sorunu

Mesaj gönderen mrmarman »

Merhaba.

- Tüm TBitBtn için gereği kadar boşluk ekleme işlemine örnek hazırladım. :)

- Font tipi olarak "Courier New" kullandım çünkü karakterler arasındaki genişlik her zaman aynı. Arial veya başka bir karakter kullanmak durumunda kalırsanız, bu procedure biraz daha detaylı işleme tabi tutulmak durumunda kalırsınız. O zaman ilgili fontun büyüklüğündeki Canvas'ın TEXWIDTH ile tüm satırdaki kelimenin genişliği alınıp, ilave kaç boşluk ile diğer satırlar ile aynı genişliği elde edebileceğimize bakmak gibi biraz daha uzun bir işlem gerekecektir. :!:

- Yapacağınız işlem, buton başlıklarında ENTER ile alta geçecek olanların arasına ayraç olarak | karakteri koymak. Kaç satır olmasını istiyorsanız siz ayracı koyun gerisini kod halledecek.

- Ne yapıyor, her satırda kaç karakter olduğunu sayıp en büyük olanın toplam uzunluğu belirlemesini sağlıyor.
- Geriye kalan satırların başına da, max satır uzunluğundan ilgili satırın uzunluğu çıkartıp ikiye bölüyor. Bu zaten bilinen klasik yöntem. +/- 1 karakter sapma bize bir şey kaybettirmez.

- Şunu da unutmadık, eğer stil yoksa ortalamayı Delphi'ye bırakması lazım onu da bir IF sorgusu ile hallettik. Sadece stil olduğunda ortalama bloğu işlev görecektir.

- Bu işlemi nereye koyacaksınız. Stil değişikliği yapılan yerin en son satırına koymanız yeterli.
- Bu işinizi görecektir diye umuyorum. Başarılar. :idea:

Kullanımı basit

Kod: Tümünü seç

MultiLine_Yap( self );

demeniz yeterli. Hangi formdaysanız, self ile o form parametre olarak düşecektir.

Kod: Tümünü seç

procedure MultiLine_Yap( Form: TForm );
Var
  i              : Integer;
  iSay, iMax     : Integer;
  Liste          : TStringList;
  strBaslik      : String;
begin
  Liste := TStringList.Create;
  for I := 0 to Form1.ComponentCount-1 do
  begin
    if Form.Components[i] is TBitBtn then
    begin
      Liste.Clear;
      strBaslik := StringReplace( TBitBtn(Form.Components[i]).Caption, #10, '|', [rfReplaceAll]) + '|';
      while Pos('|', strBaslik) > 0  do
      begin
        Liste.Add( Trim( Copy(strBaslik, 1, Pos('|', strBaslik)-1) ) );
        System.Delete(strBaslik, 1, Pos('|', strBaslik));
      end;

      if Assigned( TStyleManager.ActiveStyle )
      and ( TStyleManager.ActiveStyle.Name <> 'Windows' ) then
      begin // Style varsa caption ortalama sorunu vardır, biz çözelim...
        iMax := 0;
        for iSay := 0 to Liste.Count-1 // En büyük satır uzunluğunu buluyoruz.
          do if Length(Liste[iSay]) >= iMax
            then iMax := Length( Liste[iSay] );
        for iSay := 0 to Liste.Count-1 // Başına yeteri kadar boşluk ekliyoruz...
          do Liste[iSay] := StringOfChar(' ', (iMax-Length(Liste[iSay])) div 2) + Liste[iSay];
      end;

      strBaslik := '';
      for iSay := 0 to Liste.Count-1 do
        if strBaslik = '' then strBaslik := Liste[iSay]
                          else strBaslik := strBaslik + #10 + Liste[iSay];

      TBitBtn(Form.Components[i]).Caption := strBaslik;
    end;
  end;
  Liste.Free;
end;
Resim
Resim
Resim ....Resim
Kullanıcı avatarı
xozcanx
Üye
Mesajlar: 362
Kayıt: 05 Oca 2012 12:55

Re: Farklı Temalarda BitBtn Caption Center Sorunu

Mesaj gönderen xozcanx »

Veli Hocam Teşekkürler. Tema editörüde ilk baktığım alan olmuştu. Bunun içinde küçük bir araştırma yaptım fakat şuan için yeterli zamanım olmadığından tema kısmıyla ilgilenemeyeceğimi farkettim.

Muharrem Hocam Teşekkürler Vakit ayırıp açıklayıcı bir sunum yaptığınız için. Eğer bunu durumu procedure tanımlayarak yapacaksak böyle bir yöntem izlemek gerekir. Boşluk atama yapılabilir demiştim, fakat burada basit düşündüğümü farkettim genel kullanım olacaksa(2 den fazla kemime ve 2 den fazla saır) eğer bu şekilde olmalı. Ben 2 kelimelik bir yazı üzerinden düşündüğüm için buşekilde yorumlamıştım.
Sizinde söylediğiniz gibi diğer fontlara görede gerekli kodları eklediğimiz de bu problemi tek bir procedure ile çözümleyebiliriz.
Nasibinde varsa, alırsın karıncadan bile ders, Nasibinde yoksa, bütün cihan önüne serilse, sana ters..
Cevapla