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