PDA

View Full Version : وسط چین title



loo30fer
چهارشنبه 17 فروردین 1390, 02:51 صبح
با سلام خدمت دوستان
میخواستم بدونم به جز استفاده از این کد راهی وجود داره که Title فرم رو وسط چین کرد؟
آخه Title اصلی رو وسط چین نمیکنه بلکه متن دیگری رو وسط چین میکنه :ناراحت:
ممنون میشم راهنمایی کنید.


procedure TCustomCaptionForm .DrawCaptionText;
const
captionText = 'delphi.about.com';
var
canvas: TCanvas;
begin
canvas := TCanvas.Create;
try
canvas.Handle := GetWindowDC(Self.Handle) ;
with canvas do
begin
Brush.Style := bsClear;
Font.Color := clMaroon;
TextOut(Self.Width - 110, 6, captionText) ;
end;
finally
ReleaseDC(Self.Handle, canvas.Handle) ;
canvas.Free;
end;
end;

procedure TCustomCaptionForm.WMNCACTIVATE(var Msg: TWMNCActivate) ;
begin
inherited;
DrawCaptionText;
end;

procedure TCustomCaptionForm.WMNCPaint(var Msg: TWMNCPaint) ;
begin
inherited;
DrawCaptionText;
end;

Felony
چهارشنبه 17 فروردین 1390, 13:06 عصر
یک نمونه کد براتون نوشتم ، کد رو در رویداد OnPaint فرم کپی کنید :

var
Title: String;
SpaceCount: Integer;
begin
Title:= Trim(Self.Caption);
Self.Caption:= '';
SpaceCount:= (((Self.ClientWidth - 110) div 2) div 3);
Self.Caption:= DupeString(' ', SpaceCount) + Title;
end;

-کتابخانه StrUtils رو به Uses اضافه کنید .

اگر میخواین دقت وسط چین شدن رو بالا ببرید باید طول Caption رو بر اساس پیکسل به دست بیارید و بر 2 تقسیم کنید تا متن دقیقا وسط بیافته ، برای این کار تا جایی که یادمه تابعی بود ولی الان اسمش رو به خاطر نمیارم و وقتش رو هم ندارم بیشتر از این رو این کد کار کنم ، چیزی که به ذهنم میرسه این هست که یک شی Edit به صورت Runtime بسازید و متن Caption رو داخلش بریزید و با تابع GetCaretPos طول هر کاراکتر در واحد پیکسل رو به دست بیارید و با هم جمع کنید و در آخر بر 2 تقسیم کنید و ادامه ماجرا ... ؛ البته این یک راه حل بود برای راه افتادن کارتون و گرنه زیاد فنی نیست ، به دنبال اون تابعی که گفتم بگردید .