View Full Version : سوال: چطور ميتونم يه coolbar را راست چين کنم
joooje
دوشنبه 08 آذر 1389, 17:09 عصر
با سلام
چطور ميتونم يه coolbar را راست چين کنم
ميخوام وقتي toolbar توش اضافه ميکنم راست چين باشه
آخه منوهام راست چينه و خيلي ضدحال که coolbarش چپ چين باشه
ممنون ميشم از دوستان
vcldeveloper
سه شنبه 09 آذر 1389, 02:35 صبح
متاسفانه خودِ Coolbar یا Toolbar در دلفی امکانی برای راست-به-چپ کردن چینش دکمه ها ارائه نمی کنند. شاید بتونید از طریق کدنویسی و ارسال پیام هایی به این کنترل ها، راست-به-چپ شون کنید، چون بالاخره هر دو کنترل های استاندارد Win32 هستند، اما من خودم تست نکردم.
یک راهکار برای دور زدن این محدودیت این هست که یک Separator قبل از اولین دکمه اضاف کنید، و اندازه آن را آنقدر بزرگ کنید که دکمه های شما به گوشه سمت راست toolbar برسند. یک راه دیگه استفاده از کامپوننت هایی هست که با راست-به-چپ کمتر مشکل دارند، مثلا کامپوننت toolbar و page control موجود در مجموعه Raize Components به خوبی از راست-به-چپ پشتیبانی می کنند.
BORHAN TEC
سه شنبه 09 آذر 1389, 11:34 صبح
متاسفانه خودِ Coolbar یا Toolbar در دلفی امکانی برای راست-به-چپ کردن چینش دکمه ها ارائه نمی کنند. شاید بتونید از طریق کدنویسی و ارسال پیام هایی به این کنترل ها، راست-به-چپ شون کنید، چون بالاخره هر دو کنترل های استاندارد Win32 هستند، اما من خودم تست نکردم
آیا این مشکل در Delphi XE هم وجود داره؟
حمید محمودی
سه شنبه 09 آذر 1389, 20:28 عصر
آیا این مشکل در Delphi XE هم وجود داره؟
بله. الان نگاه کردم ظاهرا چیزی برای رفعش در نسخه XE اضافه نشده.
joooje
چهارشنبه 10 آذر 1389, 08:56 صبح
سلام
چرا وقتی با این کد زoolbar رو راست چین میکنم ، میشه ولی toolbare داخل اون سیاه میشه.
یعنی همه چیز مثل دکمه ها و ... میره راست.فقط مشکل اینه که رنگ toolbar سیاه میشه
var
Form1: TForm1;
implementation
const
WS_EX_NOINHERITLAYOUT = $00100000; // Disable inheritence of mirroring by children
WS_EX_LAYOUTRTL = $00400000; // Right to left mirroring
procedure SetWinControlBiDi(Control: TWinControl);
var
ExStyle: Longint;
begin
ExStyle := GetWindowLong(Control.Handle, GWL_EXSTYLE);
SetWindowLong(Control.Handle, GWL_EXSTYLE, ExStyle or WS_EX_RTLREADING or WS_EX_RIGHT
or WS_EX_LAYOUTRTL or WS_EX_NOINHERITLAYOUT );
end;
{$R *.dfm}
//------------------------
procedure TForm1.But_3Click(Sender: TObject);
begin
SetWinControlBiDi(CoolBar1);
CoolBar1
1.Refresh;
end;
ممنون
vcldeveloper
پنج شنبه 11 آذر 1389, 00:33 صبح
چرا وقتی با این کد زoolbar رو راست چین میکنم ، میشه ولی toolbare داخل اون سیاه میشه.
یعنی همه چیز مثل دکمه ها و ... میره راست.فقط مشکل اینه که رنگ toolbar سیاه میشه
برای اینکه راست-به-چپ کردن به همین راحتی هم نیست. وقتی شما کنترل را راست-به-چپ می کنید، باید در هنگام رسم اون کنترل هم نکاتی برای رسم صحیح در حالت راست-به-چپ لحاظ بشه. در هر حال، مشکل فعلی شما به خاطر Transparent بودن Toolbar شما و مشکل در رسم صحیح toolbar در حالت transparent هست. می تونید خصوصیت Transparent اون رو False کنید، تا این مشکل برطرف بشه.
BORHAN TEC
پنج شنبه 25 آذر 1389, 12:20 عصر
اگر کد را به شکل زیر به کار ببرید مشکل به طور کلی حل می شود و کنترلها بدون کوچکترین مشکلی راست چین می شوند.(باور کنید یک ساعت برنامه را تحت هر شرایطی که به ذهنم می رسید تست کردم!!!)
implementation
const
WS_EX_NOINHERITLAYOUT = $00100000; // Disable inheritence of mirroring by children
WS_EX_LAYOUTRTL = $00400000; // Right to left mirroring
procedure SetWinControlBiDi(Control: TWinControl);
var
ExStyle: Longint;
begin
ExStyle := GetWindowLong(Control.Handle, GWL_EXSTYLE);
SetWindowLong(Control.Handle, GWL_EXSTYLE,
ExStyle or WS_EX_RTLREADING or WS_EX_RIGHT or WS_EX_LAYOUTRTL or
WS_EX_NOINHERITLAYOUT);
end;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
SetWinControlBiDi(CoolBar1);
SetWinControlBiDi(ToolBar1);
ToolBar1.Repaint;
CoolBar1.Repaint;
Width := Width + 1;
Width := Width - 1;
end;
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.