PDA

View Full Version : سوال: چطور ميتونم يه coolbar را راست چين کنم



joooje
دوشنبه 08 آذر 1389, 16:09 عصر
با سلام
چطور ميتونم يه coolbar را راست چين کنم
ميخوام وقتي toolbar توش اضافه ميکنم راست چين باشه
آخه منوهام راست چينه و خيلي ضدحال که coolbarش چپ چين باشه
ممنون ميشم از دوستان

vcldeveloper
سه شنبه 09 آذر 1389, 01:35 صبح
متاسفانه خودِ Coolbar یا Toolbar در دلفی امکانی برای راست-به-چپ کردن چینش دکمه ها ارائه نمی کنند. شاید بتونید از طریق کدنویسی و ارسال پیام هایی به این کنترل ها، راست-به-چپ شون کنید، چون بالاخره هر دو کنترل های استاندارد Win32 هستند، اما من خودم تست نکردم.

یک راهکار برای دور زدن این محدودیت این هست که یک Separator قبل از اولین دکمه اضاف کنید، و اندازه آن را آنقدر بزرگ کنید که دکمه های شما به گوشه سمت راست toolbar برسند. یک راه دیگه استفاده از کامپوننت هایی هست که با راست-به-چپ کمتر مشکل دارند، مثلا کامپوننت toolbar و page control موجود در مجموعه Raize Components به خوبی از راست-به-چپ پشتیبانی می کنند.

BORHAN TEC
سه شنبه 09 آذر 1389, 10:34 صبح
متاسفانه خودِ Coolbar یا Toolbar در دلفی امکانی برای راست-به-چپ کردن چینش دکمه ها ارائه نمی کنند. شاید بتونید از طریق کدنویسی و ارسال پیام هایی به این کنترل ها، راست-به-چپ شون کنید، چون بالاخره هر دو کنترل های استاندارد Win32 هستند، اما من خودم تست نکردم

آیا این مشکل در Delphi XE هم وجود داره؟

حمید محمودی
سه شنبه 09 آذر 1389, 19:28 عصر
آیا این مشکل در Delphi XE هم وجود داره؟
بله. الان نگاه کردم ظاهرا چیزی برای رفعش در نسخه XE اضافه نشده.

joooje
چهارشنبه 10 آذر 1389, 07: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
چهارشنبه 10 آذر 1389, 23:33 عصر
چرا وقتی با این کد زoolbar رو راست چین میکنم ، میشه ولی toolbare داخل اون سیاه میشه.
یعنی همه چیز مثل دکمه ها و ... میره راست.فقط مشکل اینه که رنگ toolbar سیاه میشه
برای اینکه راست-به-چپ کردن به همین راحتی هم نیست. وقتی شما کنترل را راست-به-چپ می کنید، باید در هنگام رسم اون کنترل هم نکاتی برای رسم صحیح در حالت راست-به-چپ لحاظ بشه. در هر حال، مشکل فعلی شما به خاطر Transparent بودن Toolbar شما و مشکل در رسم صحیح toolbar در حالت transparent هست. می تونید خصوصیت Transparent اون رو False کنید، تا این مشکل برطرف بشه.

BORHAN TEC
پنج شنبه 25 آذر 1389, 11: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;