ورود

View Full Version : مشکل نمایش ایتمهای ComboBox در حالت راست به چپ



hamed1308
پنج شنبه 09 تیر 1401, 12:59 عصر
با سلام و ادب
دوستان وقتی از ComboBox دلفی استفاده میکنم در زمان راست به چپ کردن وقتی Style را csOwnerDrawFixed انتخاب میکنم ComboBox در نمایش اطلاعات از راست به چپ دچار مشکل میشه لطفا راهنمایی کنید ممنون
153879

mbshareat
پنج شنبه 09 تیر 1401, 17:28 عصر
سلام و احترام
ببینید این کد به درد میخوره؟
procedure SetWinControlBiDi(Control: TWinControl);
var
ExStyle: Longint;
const
WS_EX_NOINHERITLAYOUT = $00100000; // Disable inheritence of mirroring by children
WS_EX_LAYOUTRTL = $00400000; // Right to left mirroring
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;

hamed1308
پنج شنبه 09 تیر 1401, 23:09 عصر
ممنون از توجه شما دوست عزیز
نه این کد هم همچنان همون مشکل را دارد فقط کاری که انجام میشه دکمه باز کننده ComboBox را به سمت راست منتقل میکنه
153880

mbshareat
پنج شنبه 09 تیر 1401, 23:18 عصر
csOwnerDrawFixed برای این هست که خودتون متن داخلش رو بنویسید. من خودم هم در برنامه ام از یه لیست باکس برای نمایش متن فارسی استفاده میکنم. باید طول متن رو با Canvas.TextWidth به دست بیارید و از Rect.Right کم کنید و با TextOut بنویسید.. البته اگر متن شما حاوی فاصله در راست یا چپ، باشه در مواردی مشکلاتی پیش میاد. در برنامه خودم، کلمات رو یکی یکی می نویسم.(در برنامه من، همه متن فارسی یا ترکیب فارسی و انگلیسی نیست و حتی شکل هم هست(قلم داس!))
اما نمی دونم چرا نیاز دارید خودتون متن رو بنویسید؟