SetWindowLong and #WS_EX_LAYOUTRTL problem

Just starting out? Need help? Post your questions and find answers here.
User avatar
silvercover
User
User
Posts: 86
Joined: Sat Aug 04, 2007 6:57 pm

SetWindowLong and #WS_EX_LAYOUTRTL problem

Post by silvercover »

Hi,

I need to make my Editor gadget right to left. but when I use below code I see a weird gray window with non refreshing blinking cursor. what's wrong?

Code: Select all

 If OpenWindow(0, 0, 0, 322, 150, "EditorGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
   EditorGadget(0, 8, 8, 306, 133)
   SetWindowLong_(GadgetID(ID.l),#GWL_EXSTYLE, #WS_EX_CLIENTEDGE | #WS_EX_LAYOUTRTL)
    For a = 0 To 5
      AddGadgetItem(0, a, "Line "+Str(a))
    Next
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf
Image
IdeasVacuum
Always Here
Always Here
Posts: 6425
Joined: Fri Oct 23, 2009 2:33 am
Location: Wales, UK
Contact:

Re: SetWindowLong and #WS_EX_LAYOUTRTL problem

Post by IdeasVacuum »

The following should work on XP and above:

Code: Select all

#EdGadg = 2

If OpenWindow(0, 0, 0, 322, 150, "EditorGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
   EditorGadget(#EdGadg, 8, 8, 306, 133)
   SetWindowLong_(GadgetID(#EdGadg),#GWL_EXSTYLE, #WS_EX_CLIENTEDGE | #WS_EX_RIGHT | #WS_EX_RTLREADING)
   
    For a = 0 To 5
         AddGadgetItem(#EdGadg, a, "Line "+ Str(a))
    Next
    
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
There is a caveat, the system language has to be a right-to-left language such as Arabic, otherwise the flags are simply ignored.
Edit: Load a suitable RTL font too.
IdeasVacuum
If it sounds simple, you have not grasped the complexity.
User avatar
silvercover
User
User
Posts: 86
Joined: Sat Aug 04, 2007 6:57 pm

Re: SetWindowLong and #WS_EX_LAYOUTRTL problem

Post by silvercover »

Thank you IdeasVacuum for your reply, but I was told that I have to use #WS_EX_LAYOUTRTL for making my gadgets right to left and your solution seems to not work. I also used #WS_EX_LAYOUTRTL on TreeGadget and it works perfect, but I wonder why this does not work as expected!.
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4636
Joined: Sun Apr 12, 2009 6:27 am

Re: SetWindowLong and #WS_EX_LAYOUTRTL problem

Post by RASHAD »

Hi
I hope the next code will be helpful for you

Code: Select all

  hWnd = OpenWindow(0,0,0,800,600,"EditorGadget - Bilingual",#PB_Window_MaximizeGadget|#PB_Window_MinimizeGadget|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)
  EditorGadget(1,10,10,780,500)
  ButtonGadget(2, 10,560, 120, 25, "Switch Language")
  fmt.PARAFORMAT
  fmt\cbSize = SizeOf(PARAFORMAT)
  fmt\dwMask = #PFM_ALIGNMENT;       
  fmt\wAlignment = #PFA_RIGHT
  SendMessage_(GadgetID(1), #EM_SETPARAFORMAT, 0, @fmt)
  keybd_event_(#VK_MENU,0,0,0)
  keybd_event_(#VK_RSHIFT,0,0,0)
  keybd_event_(#VK_RSHIFT,0,#KEYEVENTF_KEYUP,0)
  keybd_event_(#VK_MENU,0,#KEYEVENTF_KEYUP,0)
  SetActiveGadget(1)

Repeat

   EventID = WaitWindowEvent()
   
   Select EventID

    Case #PB_Event_Gadget
    
     Select EventGadget()         
    
      Case 2
      LangFlag = LangFlag !1          
      If LangFlag = 0
          keybd_event_(#VK_RCONTROL,0,#KEYEVENTF_EXTENDEDKEY,0)
          keybd_event_(#VK_RSHIFT,0,#KEYEVENTF_EXTENDEDKEY,0)
          keybd_event_(#VK_RSHIFT,0,#KEYEVENTF_KEYUP|#KEYEVENTF_EXTENDEDKEY,0)
          keybd_event_(#VK_RCONTROL,0,#KEYEVENTF_KEYUP|#KEYEVENTF_EXTENDEDKEY,0)
      Else
          keybd_event_(#VK_LCONTROL,0,0,0)
          keybd_event_(#VK_LSHIFT,0,#KEYEVENTF_EXTENDEDKEY,0)
          keybd_event_(#VK_LSHIFT,0,#KEYEVENTF_KEYUP,0)
          keybd_event_(#VK_LCONTROL,0,#KEYEVENTF_KEYUP,0)
      EndIf
      SetActiveGadget(1)  
         
                 
       EndSelect
       
     Case #PB_Event_CloseWindow 
          Quit = 1
                                  
    EndSelect
   
Until Quit = 1


End

Egypt my love
Post Reply