PDA

View Full Version : هم تراز کردن ابیات یک شعر



zahra_no
چهارشنبه 28 تیر 1391, 22:55 عصر
سلام و خسته نباشید

دوستان من یک شعر رو به صورت مصراع مصراع در داخل یک فایل XML ریخته ایم. و حالا برای نمایش این ابیات به مشکل بر خوردم.
همون طور که از عنوان تاپیک مشخصه، چطوری میتونم اینها رو به صورت هم تراز مثل عکس زیر نشون بدم؟ که با تغییر فونت و سایز باز هم اون هم ترازیشونو از دست ندهند.

البته اینم بگم من بر اساس تعداد مصراع label می سازم و هر مصراع رو در اون لیبل نمایش میدم ( به خاطر اینکه باید امکان کلیک بر هر بیت رو داشته باشم) آیا راه درستیه؟؟ یا راه بهتر و بهینه تری رو باید انتخاب کنم؟

Ananas
پنج شنبه 29 تیر 1391, 02:57 صبح
سلام.
از کاراکتر tab بین مصراع ها استفاده کن. فکر میکنم درست بشه. البته اگه کل متن رو یکجا روی یک label (یا هر کنترل دیگه) بنویسید فکر میکنم درست بشه.

zahra_no
پنج شنبه 29 تیر 1391, 12:05 عصر
کوتاهی و بلندی متن میخوام مشخص نباشه،

کل متن رو هم نمیتونم یک جا در یک لیبل بزارم چون ابیات باید قابلیت select داشته باشه

Ananas
پنج شنبه 29 تیر 1391, 12:49 عصر
نمیدونم راه درستش چیه ولی برای دور زدنش میتونی از این راه استفاده کنی :
بیای متن رو تو لیبل بنویسی و ببینی لیبل عرضش چقدر شده بعد بیای تو یک حلقه انقدر بین کلمات space اضافه کنی تا width لیبل به اندازه ی دلخواهت برسه. مثلا شما یک مقدار width رو برای کل مصراع ها انتخاب میکنی که مطمئن هستی هیچ مصراعی width اش از اون بیشتر نمیشه، بعد سعی میکنی با این روش width همه ی لیبل ها رو برسونی به اون اندازه. البته AoutoSize لیبل رو باید فعال کنی.

zahra_no
پنج شنبه 29 تیر 1391, 13:24 عصر
اینم فکریه، ممنون عزیز

دراین مورد فکر کردم که با HTML یک table بسازم و با حالت justify این کارو انجام بدم ولی تو web browser حالت justify خودشو از دست میده. در حالی که به صورت عادی در browser های خود سیستم درست نمایش داده میشه.

firststep
پنج شنبه 29 تیر 1391, 14:10 عصر
چرا از string gride و یا list box استفاده نکنی
توی string gride طول فیلدتون به اندازی بزرگترین بیت اون صفحتونه (تعداد کارکترها (TF))
و توی قسمت لود رکرودها می تویسی که تعداد کارکتر (tc)و تعداد کلمه (tw) رو پیدا کنه بعد بین کلمها بیت درحال چینش به این میزانTF-TC/TW فضا قرار می دهید

Ananas
پنج شنبه 29 تیر 1391, 14:27 عصر
این کد رو امتحان کن. چند تا label بگذار روی فرم با Left یکسان بعد موقعی که روی فرم کلیک میکنی و در همون حال درگ می کنی میبینی که طول لیبل ها برابر میشه. شاید یکمی کند باشه ولی چون قراره یکبار انجام بشه خیلی به چشم نمیاد عوضش کار راه اندازه.

procedure SetLabelWidth(Label_ : TLabel; NewWidth_ : Integer);
var
s, s0 : string;
ifSpace : Boolean;
i : Integer;
begin
//
// clear spaces
//
s := Label_.Caption;
s0 := s[1];
for I := 1 to Length(s) - 1 do
begin
if not ((s[i + 1] = ' ') and (s0[Length(s0)] = ' ')) then
begin
s0 := s0 + s[i + 1];
end;
end;
Label_.Caption := s0;

//_________________
//_________________

//
// add spaces
//
while Label_.Width < NewWidth_ do
begin
ifSpace := False;
s := Label_.Caption;
if Pos(' ', s) <= 0 then
Break;
s0 := '';
for i := 1 to Length(s) do
begin
s0 := s0 + s[i];
if s[i] = ' ' then
begin
if not ifSpace then
begin
s0 := s0 + ' ';
ifSpace := True;
end;
end
else
ifSpace := False;
end;
Label_.Caption := s0;
end;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
I: Integer;
begin
if ssLeft in Shift then
begin
for I := 0 to Self.ControlCount - 1 do
if Self.Controls[i] is TLabel then
begin
SetLabelWidth(Self.Controls[i] as TLabel, X - Self.Controls[i].Left);
Self.Controls[i].Repaint;
end;
end;
end;

joooje
شنبه 31 تیر 1391, 12:15 عصر
دراین مورد فکر کردم که با HTML یک table بسازم و با حالت justify این کارو انجام بدم ولی تو web browser حالت justify خودشو از دست میده. در حالی که به صورت عادی در browser های خود سیستم درست نمایش داده میشه.

فایل رو تو ورد بسازید
منظورم همون ساخت جدول هست - یه جدول با یک ردیف و سه ستون - ستون اول کل مصرعهای اول توش نوشته میشه و ستون دوم فاصله بین مصرعها و ستون سوم کل مصرعهای دوم
بعد به جای اینتر برای هر مصرع از شیفت+ اینتر استفاده کنید تا دور چین کنه (البته بعد که دورچین رو انتخاب کنید)
بعد ازش html بسازید

HASANDDD
چهارشنبه 11 شهریور 1394, 19:45 عصر
منم همین مشکل رو دارم دوستان اگه راهحل بهتری برای تراز کردن ابیات شعر (http://www.hoosheparsi.ir/tabid/364/Default.aspx) دارید بگید

Ananas
پنج شنبه 12 شهریور 1394, 01:20 صبح
به جای اسپیس از ایـــــــــــــــــــــــ ــــــــــــــــــــن کاراکتر برای فاصــــــــــــــــــــــ ــــــله دادن استفاده کنیــــــــــــــــــــــ ـــــــــــــــــــد به نظرم بهتر باشه. من رو کیبوردم با "شیفت + ت" این کاراکتر رو نوشتم.

rahnema1
جمعه 13 شهریور 1394, 22:21 عصر
سلام، می شه از API ویندوز و uniscribe خصوصا تابع ScriptTextOut و تابعهای مربوطه مثل ScriptJustify استفاده کنید البته استفاده ازش یه کم درد سر داره

یوسف زالی
جمعه 13 شهریور 1394, 23:56 عصر
فکر می کنم بهترین کار استفاده از WebBrowser داخلی دلفی هست.
هم می تونید رنگیش کنبد، هم تراز، هم در resize قابلیتش رو از دست نده، هم کلیک و ...