![]() |
|
Yazı renklendirme - Baskı Önizleme +- Delphi Can (https://www.delphican.com) +-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3) +--- Forum: Mobil Platform - FireMonkey (FMX) (https://www.delphican.com/forumdisplay.php?fid=7) +--- Konu Başlığı: Yazı renklendirme (/showthread.php?tid=4965) Sayfalar:
1
2
|
Yazı renklendirme - Nese - 16-06-2020 Merhaba; ![]() Örnekteki gibi string bir yazıyı nasıl renklendire bilirim? var Texts:String; begin Text:='MERHABA DÜNYA'; with Texts.Canvas do begin BeginScene(); Font.Style := []; Font.Size := 12; Fill.Color := TAlphaColors.Red; FillText(TRectF.Create(10, 10, 300, 295), Texts, False, 100, [], TTextAlign.Center, TTextAlign.Center); EndScene; Yazı renklendirme - mcuyan - 16-06-2020 Hafıza da mı renklendirecek siniz? Bir nesne oluşturun label edit button vs.. bu şekilde renklendirein. label1.TextSettings.FontColor:=TAlphaColorRec.Blanchedalmond; gibi Yazı renklendirme - arsl01 - 16-06-2020 Merhaba, Memoda istediğimiz satırı farklı renk yapabiilirmiyiz? Yazı renklendirme - mrmarman - 16-06-2020 Merhaba @Nese - Cevabınızı sorunun içinde vermişsiniz. Daha önce başka bir başlıkta benzer bir sorunuz olmuş ve çözüm üretmiştiniz. Orada bir TCanvas üzerine yazdırmıştınız. Şimdi nereye yazdırmak istiyorsunuz. @mcuyan 'ın önerisini dikkate alırsanız çözümünüz budur. @arsl01 - Memo deyince iki durum var, üzerine kullanıcının Word / Excel gibi yazmak isteyebileceği bir şekilde mi yoksa sadece görsel olarak readonly bir durum için mi ? - Bu önemli çünkü yazmak için ise RichText gibi bir yapı lazım gelir, aksi halde bir Text Layout, memo yerine iş görecektir. - Son olarak FMX mi yoks VCL tarafında mı olduğunu teyit edersen taşlar daha da yerine oturacaktır. Yazı renklendirme - arsl01 - 16-06-2020 Hocam öncelikle fmx'te olacak ve readonly şekilde calişacak. Yani kullanıcı mudahale etmicek. Ben memo.lines.add dediğimde o satıra istediğim rengi yazabilmek istiyorum. Yazı renklendirme - mrmarman - 16-06-2020 Merhaba. - Readonly ise şöyle basit bir örnek hazırladım sizin için. Size metni parse ederek nerede hangi renk çıktı verilecek ise orada ilgili renkte baskı yapmak kalıyor. Formun üzerine Memo yerine bir TScrollBox ( sağa sola, yukarı aşağı scroll yapabilmek için ) ve bunun içine bir tane boyutu önemli değil, sadece Alignment özelliği alNone olan, boyutunu bizim değiştrebileceğimiz, dolayısıyla ScrollBox devreye alabilecek bir TImage ekleyiniz. - Aşağıdaki Procedure sizin için hazırladığım procedure AddNewLineWithText( OriginalBitmap: TBitmap; aText: String; aFontSize:Single; aFontFamily:TFontName; aFontColor: TAlphaColor; aFontStyle:TFontStyles ); const TextPadding = 5; var aBitmap : TBitmap; aTextWidth, aTextHeight, aWidth, aHeight : Integer; begin aBitmap := TBitmap.Create; try // Original Image Backup if exists.... if NOT OriginalBitmap.IsEmpty then aBitmap.Assign( OriginalBitmap ); // Font Defines will needed by Canvas Text Measurement.... with OriginalBitmap.Canvas do begin Font.Size := aFontSize; Font.Family := aFontFamily; Fill.Color := aFontColor; Font.Style := aFontStyle; aTextWidth := Trunc( TextWidth ( aText ) ) + TextPadding; aTextHeight := Trunc( TextHeight( aText ) ) + TextPadding; if OriginalBitmap.IsEmpty then begin aWidth := aTextWidth; aHeight := aTextHeight; end else begin aWidth := Width; aHeight := Height; end; // Set New Image Size... if NOT OriginalBitmap.IsEmpty then begin if aTextWidth > aWidth then aWidth := Trunc( aTextWidth ); aHeight := Height + aTextHeight; end; end; OriginalBitmap.SetSize( aWidth, aHeight ); // Resize Image with new size... OriginalBitmap.Clear(TAlphaColors.black); with OriginalBitmap.Canvas do begin // Reformat Canvas Font for painting... Font.Size := aFontSize; Font.Family := aFontFamily; Fill.Color := aFontColor; Font.Style := aFontStyle; end; // Finalize Bitmap with New Text Line... with OriginalBitmap.Canvas do begin BeginScene; if NOT aBitmap.IsEmpty then // Draw Backup Image, before FillText... DrawBitmap( aBitmap , RectF(0, 0, aBitmap.Width, aBitmap.Height) , RectF(0, 0, aBitmap.Width, aBitmap.Height), 1); // Draw New Text on Canvas... FillText(TRectF.Create(0, aHeight-aTextHeight, aWidth, aHeight), aText, false, 1, [], TTextAlign.Leading, TTextAlign.Center ); EndScene; end; finally aBitmap.Free; end; end; Kullanımı için ise şu şekilde bir reelshow hazırladım. procedure TForm1.Button1Click(Sender: TObject); var i : Integer; aList : TStringList; begin Image1.WrapMode := TImageWrapMode.Original; aList := TStringList.Create; try aList.LoadFromFile( '..\..\Units\Unit1.pas'); for i := 0 to pred(aList.count) do case i mod 6 of 0: AddNewLineWithText( Image1.Bitmap, aList[i], 12, 'Times New Roman', TAlphaColors.Red, [ TFontStyle.fsBold] ); 1: AddNewLineWithText( Image1.Bitmap, aList[i], 12, 'Courirer New', TAlphaColors.Blue, [ TFontStyle.fsItalic] ); 2: AddNewLineWithText( Image1.Bitmap, aList[i], 12, 'Calibti', TAlphaColors.Aqua, [ TFontStyle.fsBold] ); 3: AddNewLineWithText( Image1.Bitmap, aList[i], 12, 'Verdena', TAlphaColors.Fuchsia, [ TFontStyle.fsBold] ); 4: AddNewLineWithText( Image1.Bitmap, aList[i], 12, 'Arial Narrow', TAlphaColors.Brown, [ ] ); 5: AddNewLineWithText( Image1.Bitmap, aList[i], 12, 'Arial Bold', TAlphaColors.Yellow, [ TFontStyle.fsBold, TFontStyle.fsStrikeOut] ); end; finally aList.Free; end; Image1.Height := Image1.Bitmap.Height; Image1.Width := Image1.Bitmap.Width; end; Sonucu aşağıdaki şekilde. Cvp: Yazı renklendirme - Nese - 17-06-2020 (16-06-2020, Saat: 18:08)mrmarman Adlı Kullanıcıdan Alıntı: Merhaba Yanlış anlaşılma oldu sanırım. Farklı bir şekilde anlatayım stringde örnek olarak "Bu akşam hava çok güzel" yazıyor bu yazını etrafında 200 x 300 background olacak. Bu yazıyı memoya veya labelde alsam 200 x 300 background birlikte almak istiyorum. Umarım anlata bilmişimdir. Yazı renklendirme - mrmarman - 17-06-2020 @Nese - FMX platformunda Memo olsun Label olsun Edit olsun, ne olursa olsun Style'ler konuşur. Bu konuda çalışmanız lazım. - Size verdiğim örnekler bunlara bulaşmadan TBitmap üzerine CANVAS boyama şeklindeydi. - Bunları bir kenara bırakarak palyatif basit bir çözüm istiyorsanız önerim aşağıdaki şekilde olacaktır. * TLabel adedi kadar TRectangle oluşturup, her TLabel'i ait olacağı bir TRectangle'i onun parenti olacak şekilde bağlayabilirsiniz. Aşağıda görselde bunu gösterdim. * Böylece TRectangle'lerin rengi ne ise ilgili Label'in background rengi de o olacaktır. Şöyle basit bir yapı hazırladım sizin için...
procedure TForm1.Button2Click(Sender: TObject); var i : Integer; aRctn : TRectangle; aLabel : TLabel; begin Label1.Tag := TAlphaColors.Red; Label2.Tag := TAlphaColors.Blue; Label1.TextSettings.HorzAlign := TTextAlign.Center; Label1.TextSettings.VertAlign := TTextAlign.Center; Label2.TextSettings.HorzAlign := TTextAlign.Center; Label2.TextSettings.VertAlign := TTextAlign.Center; for i := 0 to pred(ComponentCount) do begin if ( Components[i] is TLabel ) and ( TLabel(Components[i]).Parent is TRectangle ) then begin aLabel := TLabel( Components[i] ); aRctn := TRectangle( aLabel.Parent ); aRctn.Fill.Color := aLabel.Tag; aLabel.Width := aRctn.Width; aLabel.Height := aRctn.Height; aLabel.Position.X := 0; aLabel.Position.Y := 0; end; end; end; Cvp: Yazı renklendirme - Nese - 17-06-2020 (17-06-2020, Saat: 11:04)mrmarman Adlı Kullanıcıdan Alıntı: @Nese Anladım hocam, Çok teşekkür ederim. Yazı renklendirme - mcuyan - 17-06-2020 FMX de rectangle componentini araştırın. orada buton gibi bir panele renk verip, üzerine yazı yazıp istediğiniz rengi verebiliyorsunuz.. Yada bir dönem çok sık kullandığım barış atalay arakdaşımızın yazdığı FlatRectButton componenti görsel olarak da göze gayet güzel gürünümü ile de işinizi görecektir. |