How To Resize to Fullscreen Window9 GUI Window?

New to FreeBASIC? Post your questions here.
Post Reply
ron77
Posts: 212
Joined: Feb 21, 2019 19:24

How To Resize to Fullscreen Window9 GUI Window?

Post by ron77 »

Hello everyone...

I have a code here for a GUI window9 window with two textboxes and a bunch of Buttons. It's for my chatbot program, and it works well; however, I'm wondering if it would be possible to add to that code to option for "Maximize window" and still have the components (the textboxes and buttons) resized as well?...

If anyone can help me, I would appreciate it very much...

here is the code:

Code: Select all

'#define fbc -s console -gen gcc -Wc -Ofast -Wc -Wno-maybe-uninitialized -exx -w all
#INCLUDE "window9.bi"
#include "fb_chatbot_danny_v10.bas"
#include "windows.bi"

ShowWindow(GetConsoleWindow(), SW_HIDE)

LoadArrays("database/database-encrypted.txt") ' eliza_script.txt
'loadarrays("database/eliza-encrypted.txt")


Dim shared as double start
start = timer

'linux compat
#ifndef BS_DEFPUSHBUTTON
	#define BS_DEFPUSHBUTTON 0
#endif

enum GadgetID
	giFirst = 100
	giOutputEdit
	giInputEdit
	giTalkButton
	giReplayButton
	giDeleteButton
	giLearnButton
	giAnnButton
	giRandomButton
	giElizaButton
	'giScrollBarGadget
end enum
enum ShortCutID
	siFirst = 1000
	siDefKey
end enum

Dim As HWND hMainForm
Dim As Integer event

hMainForm = OpenWindow( "Chatbot Danny v1.1.6.2", 100, 10, 800, 600)

EditorGadget(giOutputEdit, 10, 10, 700, 340, "Danny: Hello my friend!", 0) '"hello dear one i'm here to talk with you on what ever you want", 0 )
writefile2("Danny: Hello my friend!")
SetGadgetFont(giOutputEdit, CINT(LoadFont( "MS Dialog", 11)))
Readonlyeditor(giOutputEdit, 1)
SetTransferTextLineEditorGadget(giOutputEdit, 1)

EditorGadget(giInputEdit, 10, 350, 700, 190, "", 0)
SetGadgetFont(giInputEdit, CINT(LoadFont( "MS Dialog", 11)))
SetTransferTextLineEditorGadget(giInputEdit, 1)

ButtonGadget(giTalkButton, 720, 520, 60, 30, "Talk", BS_DEFPUSHBUTTON)
ButtonGadget(giReplayButton, 720, 490, 60, 30, "LOG", BS_DEFPUSHBUTTON)
ButtonGadget(giDeleteButton, 720, 460, 60, 30, "Delete", BS_DEFPUSHBUTTON)
ButtonGadget(giLearnButton, 720, 430, 60, 30, "Learn", BS_DEFPUSHBUTTON)
ButtonGadget(giAnnButton, 720, 400, 60, 30, "ML Algo", BS_DEFPUSHBUTTON)
ButtonGadget(giRandomButton, 720, 370, 60, 30, "Random", BS_DEFPUSHBUTTON)
ButtonGadget(giElizaButton, 720, 340, 60, 30, "ELIZA", BS_DEFPUSHBUTTON)
SetFocus(Gadgetid(giInputEdit))                  ' focus on the editor 2
UpdateInfoXserver()                              ' for linux , so that xserver has time to update the information

AddKeyboardShortcut(hMainForm, FVIRTKEY, VK_RETURN, siDefKey)

dim shared isEliza as boolean = false

Sub speak(text as string ptr)
	#Ifdef __FB_LINUX__
		Shell( "espeak-ng -v us-mbrola-2 -s 120 " & chr(34) & *text & chr(34))
	#Else
		'    shell( "voice -r -1 -n " & Chr(34) & TTSvoice & Chr(34) & " " & Chr(34) & *text & Chr(34))
		'TTS.Voice("Microsoft Sam")
		TTS.VoiceByID(0)
		TTS.Speak( *text, True )
	#endif
End Sub

sub DefaultButtonPressed()
	Dim As String respond(5) = {"why don't you talk to me?", "am i boring you?", "a penny for your thoughts", "what's on your mind?", "how are you my friend?"}
	Var text = GetGadgetText(giInputEdit)
	writefile2 ("You: " + text)
	dim ans as string
	if isEliza = false then
		ans = commands(text)
	else
		ans = GetReply(text)
	endif
	if (timer - start) > 600 then
		ans = respond(int(rnd*(ubound(respond)+1)))
	EndIf
	writefile2 ("Danny: " + ans)
	SetGadgetText(giInputEdit, "")
	Var reply1 = GetGadgetText(giOutputEdit)
	SetGadgetText(giOutputEdit, reply1 + Chr(10) + "You: " + text + Chr(10) + "Danny: " + ans)
	'threadcreate for TTS speak function (sub) shell command
	static as any ptr a :if a then ThreadWait(a)
	Static as string sTemp :sTemp = ans
	a = ThreadCreate(cast(any ptr, @Speak), @sTemp)
	LineScrollEditor(giInputEdit, 10)
	LineScrollEditor(giOutputEdit, 10)
	start = timer
end sub

sub ReplayButtonClick()
	if (fileexists(file) = true) then
		'dim as string replay(any)
		'ReadLogFile( file, replay() )
		'Var reply1 = GetGadgetText(giOutputEdit)
		'SetGadgetText(giOutputEdit, reply1 + Chr(10) + "-------- CONVERSTATION REPLAY -------" + chr(10))
		'for N as long = 0 to ubound(replay)
		'var line1 = getgadgettext(giOutputEdit)
		'setgadgettext(giOutputEdit, line1 + chr(10) + replay( N ) + chr(10))
		'linescrolleditor(giOutputEdit, 15)
		'Next
		'var replay2 = getgadgettext(giOutputEdit)
		'setgadgettext(giOutputEdit, replay2 + chr(10) + "--------- END OF REPLAY -----------" + chr(10))
		'linescrolleditor(giOutputEdit, 15)
		#ifdef __fb_linux__
			shell("xdg-open "+ file ) 'https://youtu.be/MUTz3LQEq1Q")
		#else
			shell("start " + file ) 'https://youtu.be/MUTz3LQEq1Q")
			'				shell("start /unix /usr/bin/firefox https://youtu.be/MUTz3LQEq1Q")
		#endif
	else
		var replay3 = getgadgettext(giOutputEdit)
		setgadgettext(giOutputEdit, replay3 + chr(10) + "NO LOG FILE EXISTS!" + chr(10))
		linescrolleditor(giOutputEdit, 5)
	END IF
	SetFocus(Gadgetid(giInputEdit))
End Sub

sub deleteButtonClick()
	Dim result As Integer = Kill( file )
	kill(questions)
	kill(answers)
	if result = 0 then var replay5 = getgadgettext(giOutputEdit) : setgadgettext(giOutputEdit, replay5+ chr(10) + "CONVERSATION LOG FILE BEEN DELETED!" + chr(10))
	linescrolleditor(giOutputEdit, 5)
	SetFocus(Gadgetid(giInputEdit))
End Sub

dim shared as long switch

sub buttonLeranClick()
	if switch = 0 then
		islearnMode = true
		var past1 = getgadgettext(giOutputEdit) : setgadgettext(giOutputEdit, past1+chr(10)+ "LEARN MODE NOW ENABLED!" +chr(10))
		linescrolleditor(giOutputEdit, 5)
		switch = 1
	elseif switch = 1 then
		isLearnMode = false
		var past2 = getgadgettext(giOutputEdit) : setgadgettext(giOutputEdit, past2+chr(10)+ "LEARN MODE NOW DISABLED!" +chr(10))
		linescrolleditor(giOutputEdit, 5)
		switch = 0
	end if
	SetFocus(Gadgetid(giInputEdit))
End Sub

sub AnnButtonClick()
	if isnna = false then
		isnna = true
		var past3 = getgadgettext(giOutputEdit) : setgadgettext(giOutputEdit, past3+chr(10)+"WEAK ANN MODE NOW ENABLED!"+chr(10))
		linescrolleditor(giOutputEdit, 5)
	else
		isnna = false
		var past4 = getgadgettext(giOutputEdit) : setgadgettext(giOutputEdit, past4+chr(10)+"WEAK ANN MODE NOW DISABLED!"+chr(10))
		linescrolleditor(giOutputEdit, 5)
	EndIf
	SetFocus(Gadgetid(giInputEdit))
End Sub

sub randomButtonClick()
	if israndom = false then
		israndom = true
		var past5 = getgadgettext(giOutputEdit) : setgadgettext(giOutputEdit, past5+chr(10)+"RANDOM NOW ENABLED!"+chr(10))
		linescrolleditor(giOutputEdit, 5)
	else
		israndom = false
		var past6 = getgadgettext(giOutputEdit) : setgadgettext(giOutputEdit, past6+chr(10)+"RANDOM MODE NOW DISABLED!"+chr(10))
		linescrolleditor(giOutputEdit, 5)
	EndIf
	SetFocus(Gadgetid(giInputEdit))
End Sub

sub elizaButtonClick()
	if isEliza = false then
		isEliza = true
		var past7 = getgadgettext(giOutputEdit) : setgadgettext(giOutputEdit, past7+chr(10)+"NOW TALING TO ELIZA AS DANNY!"+chr(10))
		linescrolleditor(giOutputEdit, 5)
	else
		isEliza = false
		var past8 = getgadgettext(giOutputEdit) : setgadgettext(giOutputEdit, past8+chr(10)+"NOW TALKING TO DANNY NOT AS ELIZA!"+chr(10))
		linescrolleditor(giOutputEdit, 5)
	EndIf
	SetFocus(Gadgetid(giInputEdit))
End Sub

Do
	select case WaitEvent()
		case EventMenu
			if EventNumber = siDefKey then DefaultButtonPressed()
		case EventClose
			'if EventHwnd() = hSecondForm then
			'close_window(hSecondForm)
			'else
			freeMusic()                                     'if eventclose = hMainForm then
			End
			'end if
		case EventGadget
			select case EventNumber
				case giTalkButton
					DefaultButtonPressed()
				case giReplayButton
					ReplayButtonClick()
				case giDeleteButton
					deleteButtonClick()
				case giLearnButton
					buttonLeranClick()
				case giAnnButton
					AnnButtonClick()
				case giRandomButton
					randomButtonClick()
				CASE giElizaButton
					elizaButtonClick()
			end select
	end select
Loop
Kind Regards
Ron77
SARG
Posts: 1756
Joined: May 27, 2005 7:15
Location: FRANCE

Re: How To Resize to Fullscreen Window9 GUI Window?

Post by SARG »

You have to handle the event EventSize then using Resizegadget() to changes the location and size of each gadget. Every parameter is optionnal.

Code: Select all

if event=EventSize then
		if EventHwnd=hmain then
			size_changed()
		EndIf
		continue do
	EndIf

Code: Select all

sub size_changed()	
	Resizegadget(ID1,x,y,w,h)
        Resizegadget(ID2,x,y,w,h)
.....
end sub
ron77
Posts: 212
Joined: Feb 21, 2019 19:24

Re: How To Resize to Fullscreen Window9 GUI Window?

Post by ron77 »

Okay, I got it figured out:

First, we define the base width and height of the window and add two #defines:

Code: Select all

dim shared as long BaseWidth 
BaseWidth = 800
dim shared as long BaseHeight 
BaseHeight = 600

'#define ScaleX(_V) ((((_V)*WindowWidth)\BaseWidth))
'#define ScaleY(_V) ((((_V)*WindowHeight)\BaseHeight))

#define ScaleX(_V) ((((_V)*WinWid)\BaseWidth))
#define ScaleY(_V) ((((_V)*WinHei)\BaseHeight))
Then we make a size_change sub:

Code: Select all

sub size_change( WinWid as long , WinHei as long )
	SetGadgetFont(giOutputEdit, CINT(LoadFont( "MS Dialog", ScaleY(11))))
	SetGadgetFont(giInputEdit, CINT(LoadFont( "MS Dialog", ScaleY(11))))
	Resizegadget(giOutputEdit,ScaleX(10),ScaleY(10), ScaleX(700), ScaleY(340))
    Resizegadget(giInputEdit,ScaleX(10), ScaleY(350), ScaleX(700), ScaleY(190))
    Resizegadget(giTalkButton,ScaleX(720), ScaleY(520), ScaleX(60), ScaleY(30))
    Resizegadget(giReplayButton,ScaleX(720),ScaleY(490),ScaleX(60),ScaleY(30))
    Resizegadget(giDeleteButton,ScaleX(720),ScaleY(460),ScaleX(60),ScaleY(30))
    Resizegadget(giLearnButton,ScaleX(720),ScaleY(430),ScaleX(60),ScaleY(30))
    Resizegadget(giAnnButton,ScaleX(720),ScaleY(400),ScaleX(60),ScaleY(30))
    Resizegadget(giRandomButton,ScaleX(720),ScaleY(370),ScaleX(60),ScaleY(30))
    Resizegadget(giElizaButton,ScaleX(720),ScaleY(340),ScaleX(60),ScaleY(30))
end sub
And we call it like so:

Code: Select all

Do

	select case WaitEvent()
		case Eventsize
			if EventHwnd=hMainForm then
			size_change( WindowWidth(hMainForm) , WindowHeight(hMainForm) )
			endif
			continue do
			
		case EventMenu
	
And it works...

thank you for your help!!!
Post Reply