cancel
Showing results for 
Search instead for 
Did you mean: 

Spelling checking in powerbuilder

Former Member
0 Kudos

Hi Everyone,

I am using PB11.1 build 8123. I want to add a functionality to checking the spelling. I write below code but I have a problem that MS WORD open as minimized state.  I want this at front of user. Please suggest.

Global external function

------------------------------------------

PUBLIC FUNCTION unsignedlong FindWindow (long  &

   classname, string windowname) LIBRARY "user32.dll" &

   ALIAS FOR FindWindowW

PUBLIC FUNCTION int SetForegroundWindow (unsignedlong &

   hwnd) LIBRARY "user32.dll" ALIAS FOR  SetForegroundWindowW

code

------------

string ls_current_text

ls_current_text=mle_1.text

If ls_current_text = "" then Return

If Clipboard(ls_current_text) = ""  Then RETURN

OleObject myOleObject

myOleObject = CREATE OLEObject

If myOleObject.ConnectToNewObject("word.application") <> 0 Then Return

unsignedlong hwnd

hwnd = FindWindow ( 0, "Document1")

myoleobject.Application.Visible = True

myoleobject.Application.WindowState = 1

myoleobject.Application.Documents.Add.Content.Paste

if hwnd = 0 then

  //

else

  SetForegroundWindow ( hwnd)

end if

myoleobject.Application.ActiveDocument.CheckSpelling

myoleobject.Application.ActiveDocument.Content.Copy

myoleobject.ActiveDocument.Close(0)

myoleobject.Application.Quit

myOleObject.disconnectobject()

Destroy myOleObject

messagebox("Information", "The spelling and grammer check is complete.")

mle_1.text=Clipboard(ls_current_text)

Accepted Solutions (0)

Answers (2)

Answers (2)

Former Member
0 Kudos

I think I found the problem:

The code "hwnd = FindWindow ( 0, "Documento1 - Word")" is before "myoleobject.Application.Visible = True", so it always return 0. Just put it after.

Former Member
0 Kudos

hi,

As you suggest, I change below code, but it still not shown on top.

string ls_current_text

unsignedlong hwnd

ls_current_text=mle_1.text

If ls_current_text = "" then Return

If Clipboard(ls_current_text) = ""  Then RETURN

OleObject myOleObject

myOleObject = CREATE OLEObject

If myOleObject.ConnectToNewObject("word.application") <> 0 Then Return

myoleobject.Application.Visible = false

myoleobject.Application.WindowState = 2

hwnd = FindWindow ( 0, "Documento1 - Word")

myoleobject.Application.Documents.Add.Content.Paste

if hwnd = 0 then

  //

else

  SetForegroundWindow ( hwnd)

end if

myoleobject.Application.Visible = true

myoleobject.Application.WindowState = 1

myoleobject.Application.ActiveDocument.CheckSpelling

myoleobject.Application.ActiveDocument.Content.Copy

myoleobject.ActiveDocument.Close(0)

myoleobject.Application.Quit

myOleObject.disconnectobject()

Destroy myOleObject

messagebox("Information", "The spelling and grammer check is complete.")

mle_1.text=Clipboard(ls_current_text)

If you have any better solution, please share.

Former Member
0 Kudos

Following code that works for me:

Just make sure to put in FindWindow the name of your Word document.

Mine is "Documento1 - Word" because I use Word 2013 in Portuguese.

--------------------------------------

string ls_current_text

unsignedlong hwnd

ls_current_text=mle_1.text

If ls_current_text = "" then Return

If Clipboard(ls_current_text) = ""  Then RETURN

OleObject myOleObject

myOleObject = CREATE OLEObject

If myOleObject.ConnectToNewObject("word.application") <> 0 Then Return

myoleobject.Application.Visible = True

myoleobject.Application.WindowState = 1

myoleobject.Application.Documents.Add.Content.Paste

hwnd = FindWindow ( 0, "Documento1 - Word")

if hwnd <> 0 then

  SetForegroundWindow ( hwnd)

end if

 

myoleobject.Application.ActiveDocument.CheckSpelling

myoleobject.Application.ActiveDocument.Content.Copy

myoleobject.ActiveDocument.Close(0)

myoleobject.Application.Quit

myOleObject.disconnectobject()

Destroy myOleObject

messagebox("Information", "The spelling and grammer check is complete.")

mle_1.text=Clipboard(ls_current_text)

Former Member
0 Kudos

Don't know if this workaround is too ugly, but...

You can set "w_yourWindow.visible = false" before setting Word visibility, and back again to true after spell check.