Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Messages - kamakazieturtle

#1
Refer to first message in this post for all future updates!
#2
Outdated
#3
Outdated
#4
Outdated
#5
Outdated
#6
      This code enables the maximize button, as well as scaling, to a "Windowed Mode" window on the "Windows OS." It will add an ".ini" file to your programs directory to store all necessary data, such as restoring the window to the last known size, and maximizing the window on program start. The code is not perfect, there are a few workarounds I'd like to eliminate. Anyone who would like to help test this out on different versions of Windows, it would be much appreciated. The best way to test is to make an image the size of your desktop and draw it in the main loop. Okay, the only thing I would like to update in the future is the buffer being refreshed during scaling, but I'm happy with it for now.

                                                                                                                                                                   WARNING!
                                                                                                                               Your program must support changes to window resolution!

Main File:
Code (glbasic) Select

// ---------------------------------------------- //
// Project: Window Maximize Button\Window Scaling //
// File: Main.gbas                                //
// Start: Sunday, September 28, 2014              //
// IDE Version: 10.283                            //
// ---------------------------------------------- //

StartUp()

Main:
CLEARSCREEN

Update()

SHOWSCREEN
GOTO Main

SUB GLB_ON_QUIT:
INIPUT "Window","X","("+Window.X+")"
INIPUT "Window","Y","("+Window.Y+")"
INIPUT "Window","Width",Window.Width
INIPUT "Window","Height",Window.Height
INIPUT "Window","Mode",Window.Mode
INIPUT "Window","Style$",Window.Style$
INIPUT "Gui","Width",Gui.Width
INIPUT "Gui","Height",Gui.Height
INIPUT "Gui","Mode",ISFULLSCREEN()
ENDSUB


Source File: Add to program in the files tab, on the right-hand side of the IDE.
Code (glbasic) Select

// ---------------------------------------------- //
// Project: Window Maximize Button\Window Scaling //
// File: Inine.gbas                               //
// Start: Sunday, September 28, 2014              //
// IDE Version: 10.283                            //
// ---------------------------------------------- //

GLOBAL DesktopWidth,DesktopHeight

TYPE WindowType
X
Y
Width
Height
Mode
Style$
ENDTYPE

GLOBAL Window AS WindowType

TYPE GuiType
X
Y
Width
Height
PrevX
PrevY
PrevWidth
PrevHeight
Mode
ENDTYPE

GLOBAL Gui AS GuiType

INLINE
}
struct RECT{int Left,Top,Right,Bottom;};

extern "C"
{
int __stdcall GetWindowLongA(void*, int);
int __stdcall SetWindowLongA(void*, int, int);
int __stdcall SetWindowPos(void*, int, int, int, int, int, int);
int __stdcall GetWindowRect(void*, void*);
const int Style=0;
}

#define WS_SIZEBOX       0x00040000L
#define WS_MAXIMIZEBOX   0x00010000L
#define WS_MAXIMIZE         0x01000000L
#define SWP_FRAMECHANGED    0x0020
#define SWP_SHOWWINDOW      0x0040
#define SWP_NOMOVE          0x0002
#define GWL_STYLE           (-16)

RECT Rect;
namespace __GLBASIC__ {
ENDINLINE

FUNCTION StartUp:
GETDESKTOPSIZE DesktopWidth,DesktopHeight
LOCAL A=DOESFILEEXIST("Settings.ini")
IF A=0
INIOPEN "Settings.ini"
Window.Width=648
Window.Height=514
Window.X=((DesktopWidth-Window.Width)/2)
Window.Y=((DesktopHeight-Window.Height)/2)
Gui.Width=640
Gui.Height=480
Gui.Mode=0
Gui.PrevWidth=Gui.Width
Gui.PrevHeight=Gui.Height

SETSCREEN Gui.Width,Gui.Height,Gui.Mode

INLINE
Window.Style_Str=::GetWindowLongA(GLBASIC_HWND(),GWL_STYLE);
::SetWindowLongA(GLBASIC_HWND(),GWL_STYLE,Window.Style_Str|WS_SIZEBOX|WS_MAXIMIZEBOX);
::SetWindowPos(GLBASIC_HWND(),0,Window.X,Window.Y,Window.Width,Window.Height,SWP_FRAMECHANGED);
ENDINLINE
ELSEIF A=1
INIOPEN "Settings.ini"
Window.X=INIGET$("Window","X")
Window.Y=INIGET$("Window","Y")
Window.Width=INIGET$("Window","Width")
Window.Height=INIGET$("Window","Height")
Window.Mode=INIGET$("Window","Mode")
Window.Style$=INIGET$("Window","Style$")
Gui.Width=INIGET$("Gui","Width")
Gui.Height=INIGET$("Gui","Height")
Gui.PrevWidth=Gui.Width
Gui.PrevHeight=Gui.Height
Gui.Mode=INIGET$("Gui","Mode")

SETSCREEN Gui.PrevWidth,Gui.PrevHeight,Gui.Mode

INLINE
::SetWindowLongA(GLBASIC_HWND(),GWL_STYLE,Window.Style_Str);
::SetWindowPos(GLBASIC_HWND(),0,Window.X,Window.Y,Window.Width,Window.Height,SWP_FRAMECHANGED);
ENDINLINE
ENDIF
ENDFUNCTION

FUNCTION Update:
LOCAL Flag

IF Window.X=0 AND Window.Y=0 AND Window.Mode=0
Window.X=((DesktopWidth-Window.Width)/2)
Window.Y=((DesktopHeight-Window.Height)/2)
INLINE
::SetWindowPos(GLBASIC_HWND(),0,Window.X,Window.Y,Window.Width,Window.Height,SWP_SHOWWINDOW);
ENDINLINE
ENDIF

INLINE
::GetWindowRect(GLBASIC_HWND(),&Rect);

Window.Width=(Rect.Right-Rect.Left);
Window.Height=(Rect.Bottom-Rect.Top);
Window.X=Rect.Left;
Window.Y=Rect.Top;

Window.Style_Str=::GetWindowLongA(GLBASIC_HWND(),GWL_STYLE);

if(Window.Style_Str&WS_MAXIMIZE){
Window.Mode=1;}
else{
Window.Mode=0;}
ENDINLINE

Gui.Width=(Window.Width-8)
Gui.Height=(Window.Height-34)
IF Gui.Width>Gui.PrevWidth OR Gui.Width<Gui.PrevWidth THEN Flag=1
IF Gui.Height>Gui.PrevHeight OR Gui.Height<Gui.PrevHeight THEN Flag=1

IF Flag=1
VIEWPORT 0,(Gui.PrevHeight-Gui.Height),Gui.Width,Gui.Height
Flag=0
ENDIF
ENDFUNCTION


                                                                                                         Please give credit if used. I've worked very hard on this for a long time now. Anyways, enjoy!
#7
Exactly the answer I needed, thank you, and yes I've seen ampos's keyboard, its very nice just wanted to give the option to use Android or custom. Unfortunately I use emulator and a friends device when hes free, so I have little knowledge of Android. He actually confirmed that there is an android virtual keyboard. But as you stated, getting access to it would be the next step. Here is hoping for it, if anyone finds any other info please post.
#8
Does Android have a built in virtual keyboard for touch screen only devices that is accessible?
#9
Its hard for me to do a sample, but its not that big of a program. This loads a map file created by another program i wrote and is a very basic (Drawing,Collision, and Movement) 2d rpg engine. I know its alot to look over but if you see anything please let me know, I'm going to continue trying to find the bug and may reinstall windows tonight.

Code (glbasic) Select

//Gui Startup
TYPE GuiType
Width
Height
Mode
FpsLimit
ENDTYPE

GLOBAL Gui AS GuiType
Gui.Width=320
Gui.Height=240
Gui.Mode=0
Gui.FpsLimit=60

SETSCREEN Gui.Width,Gui.Height,Gui.Mode
LIMITFPS Gui.FpsLimit
SYSTEMPOINTER TRUE


//Tilemap Startup
TYPE TilemapType
Image
ImageData[]
Name$
X
Y
XOffset
YOffset

Length
TileWidth
TileHeight
TileWidthMax
TileHeightMax
TilesetTileWidth
TilesetTileHeight
CurrentTile
FrameDelay
ExitFlag
DotFlag
ENDTYPE

GLOBAL Tilemap AS TilemapType

Tilemap.Image=1
Tilemap.Name$=""
Tilemap.X=0
Tilemap.Y=0
Tilemap.TileWidthMax=21
Tilemap.TileHeightMax=16


//Tile Startup
TYPE TileType
Frame
SelectionFlag
DotFlag
CollisionFlag
ExitFlagA
ExitFlagB
AnimatedFlag
AnimatedFrames
FrameOffset
FrameJump
FrameCounter
FrameCounterB
FrameXIncrement
FrameYIncrement
ENDTYPE

GLOBAL TilemapTile[] AS TileType


//Player Startup
TYPE PlayerType
Image
Frame
FrameMin
FrameMax
FrameDelay
FrameFlag
Guide
X
Y
Speed
UpFlagA
RightFlagA
DownFlagA
LeftFlagA
UpFlagB
RightFlagB
DownFlagB
LeftFlagB
ENDTYPE

GLOBAL Player AS PlayerType

Player.Image=20
LOADANIM "PlayerImage.bmp",Player.Image,32,32
Player.Guide=21
LOADANIM "PlayerGuide.bmp",Player.Guide,16,8
Player.X=152
Player.Y=116
Player.Speed=2


LoadMap("test",0,0)


Main:
CLEARSCREEN

Update()

SHOWSCREEN
GOTO Main


//Load Map
FUNCTION LoadMap:File$,X,Y
LOCAL A,B,C,D,E
Tilemap.Name$=File$
Tilemap.X=X
Tilemap.Y=Y
Tilemap.XOffset=0
Tilemap.YOffset=0
File$=File$+".tmd"
File$=REPLACE$(File$,".tmd.tmd",".tmd")

SETCURRENTDIR("Tilemap")
OPENFILE(1,File$,TRUE)
READSHORTIEEE 1,Tilemap.TileWidth
READSHORTIEEE 1,Tilemap.TileHeight
DIM TilemapTile[5][Tilemap.TileWidth][Tilemap.TileHeight]

FOR C=0 TO 4
FOR A=0 TO Tilemap.TileWidth-1
FOR B=0 TO Tilemap.TileHeight-1
READSHORTIEEE 1,TilemapTile[C][A][B].Frame
READSHORTIEEE 1,TilemapTile[C][A][B].DotFlag
READSHORTIEEE 1,TilemapTile[C][A][B].CollisionFlag
READSHORTIEEE 1,TilemapTile[C][A][B].ExitFlagA
READSHORTIEEE 1,TilemapTile[C][A][B].ExitFlagB
READSHORTIEEE 1,TilemapTile[C][A][B].AnimatedFlag
READSHORTIEEE 1,TilemapTile[C][A][B].AnimatedFrames
READSHORTIEEE 1,TilemapTile[C][A][B].FrameJump
READSHORTIEEE 1,TilemapTile[C][A][B].FrameXIncrement
READSHORTIEEE 1,TilemapTile[C][A][B].FrameYIncrement

NEXT
NEXT
NEXT

READSHORTIEEE 1,D
READSHORTIEEE 1,E
READSHORTIEEE 1,Tilemap.Length

REDIM Tilemap.ImageData[Tilemap.Length]
Tilemap.TilesetTileWidth=(D/16)
Tilemap.TilesetTileHeight=(E/16)

C=-1
FOR A=0 TO (D-1)
FOR B=0 TO (E-1)
C=C+1
READSHORTIEEE 1,Tilemap.ImageData[C]
NEXT
NEXT
CLOSEFILE 1

CLEARSCREEN
SETTRANSPARENCY RGB(0,255,0)
C=-1
FOR A=0 TO (D-1)
FOR B=0 TO (E-1)
C=C+1
SETPIXEL A,B,Tilemap.ImageData[C]
NEXT
NEXT

GRABSPRITE Tilemap.Image,0,0,D,E
SAVESPRITE "Temp.bmp",Tilemap.Image
SETTRANSPARENCY RGB(255,0,128)
CLEARSCREEN
LOADANIM "Temp.bmp",Tilemap.Image,16,16
KILLFILE "Temp.bmp"
File$=REPLACE$(File$,".tmd","")
SETCURRENTDIR("..")
ENDFUNCTION

//Exits
FUNCTION Exit:MapA$,MapB$,ExitFlag,PlayerFrame,X,Y
IF Tilemap.Name$=MapA$
IF Tilemap.ExitFlag=ExitFlag
LoadMap(MapB$,X,Y)
Player.Frame=PlayerFrame
Tilemap.ExitFlag=999
ENDIF
ENDIF
ENDFUNCTION

//Update
FUNCTION Update:
LOCAL A,B,C,D,E,F,G,H,TilemapYA,TilemapYB,TilemapXA,TilemapXB
Tilemap.FrameDelay=Tilemap.FrameDelay+1
Player.FrameDelay=Player.FrameDelay+1


//Player Frame Update
IF Player.FrameDelay>=10
Player.Frame=Player.Frame+1
ENDIF


//Player Movement
IF KEY(200)
IF Player.UpFlagA=1
Tilemap.Y=Tilemap.Y+Player.Speed
Player.UpFlagB=1
IF Player.FrameFlag=1
Player.FrameMin=0
Player.FrameMax=3
Player.FrameFlag=0
ENDIF
ENDIF
ELSE
Player.UpFlagB=0
ENDIF
IF KEY(208)
IF Player.DownFlagA=1
Tilemap.Y=Tilemap.Y-Player.Speed
Player.DownFlagB=1
IF Player.FrameFlag=1
Player.FrameMin=4
Player.FrameMax=7
Player.FrameFlag=0
ENDIF
ENDIF
ELSE
Player.DownFlagB=0
ENDIF
IF KEY(203)
IF Player.LeftFlagA=1
Tilemap.X=Tilemap.X+Player.Speed
Player.LeftFlagB=1
IF Player.FrameFlag=1
Player.FrameMin=8
Player.FrameMax=11
Player.FrameFlag=0
ENDIF
ENDIF
ELSE
Player.LeftFlagB=0
ENDIF
IF KEY(205)
IF Player.RightFlagA=1
Tilemap.X=Tilemap.X-Player.Speed
Player.RightFlagB=1
IF Player.FrameFlag=1
Player.FrameMin=12
Player.FrameMax=15
Player.FrameFlag=0
ENDIF
ENDIF
ELSE
Player.RightFlagB=0
ENDIF

IF Player.UpFlagB=0 AND Player.LeftFlagB=0 AND Player.RightFlagB=0 AND Player.DownFlagB=0
Player.Frame=Player.FrameMin
ENDIF

IF Player.FrameMin=0 AND Player.UpFlagB=0
Player.FrameFlag=1
ELSEIF Player.FrameMin=4 AND Player.DownFlagB=0
Player.FrameFlag=1
ELSEIF Player.FrameMin=8 AND Player.LeftFlagB=0
Player.FrameFlag=1
ELSEIF Player.FrameMin=12 AND Player.RightFlagB=0
Player.FrameFlag=1
ENDIF


//Player Frame Check
IF Player.Frame>Player.FrameMax
Player.Frame=Player.FrameMin
ELSEIF Player.Frame<Player.FrameMin
Player.Frame=Player.FrameMin
ENDIF


//Set Tiles To Be Drawn
IF Tilemap.X<=-32
IF Tilemap.XOffset<(Tilemap.TileWidth-Tilemap.TileWidthMax-1)
Tilemap.X=Tilemap.X+16
Tilemap.XOffset=Tilemap.XOffset+1
ENDIF
ENDIF
IF Tilemap.X>=0
IF Tilemap.XOffset>0
Tilemap.X=Tilemap.X-16
Tilemap.XOffset=Tilemap.XOffset-1
ENDIF
ENDIF
IF Tilemap.Y<=-32
IF Tilemap.YOffset<(Tilemap.TileHeight-Tilemap.TileHeightMax-1)
Tilemap.Y=Tilemap.Y+16
Tilemap.YOffset=Tilemap.YOffset+1
ENDIF
ENDIF
IF Tilemap.Y>=0
IF Tilemap.YOffset>0
Tilemap.Y=Tilemap.Y-16
Tilemap.YOffset=Tilemap.YOffset-1
ENDIF
ENDIF


//Fix Size
IF Tilemap.TileWidth<=Tilemap.TileWidthMax
D=(Tilemap.TileWidth-1)
ELSEIF Tilemap.TileWidth>Tilemap.TileWidthMax
D=Tilemap.TileWidthMax
ENDIF

IF Tilemap.TileHeight<=Tilemap.TileHeightMax
E=(Tilemap.TileHeight-1)
ELSEIF Tilemap.TileHeight>Tilemap.TileHeightMax
E=Tilemap.TileHeightMax
ENDIF


Tilemap.DotFlag=0
//Tilemap Collision/Draw/Frame Update
FOR A=0 TO 4
G=0
FOR B=Tilemap.XOffset TO (D+Tilemap.XOffset)
H=0
FOR C=Tilemap.YOffset TO (E+Tilemap.YOffset)


IF TilemapTile[A][B][C].CollisionFlag=1
FOR F=0 TO Player.Speed
IF ANIMCOLL(Player.Guide,0,Player.X,(Player.Y-F),Tilemap.Image,TilemapTile[A][B][C].Frame,(Tilemap.X+(G*16)),(Tilemap.Y+(H*16)))
TilemapYA=(F-Player.Speed)
Player.UpFlagA=0
BREAK
ELSE
Player.UpFlagA=1
ENDIF
NEXT

FOR F=0 TO Player.Speed
IF ANIMCOLL(Player.Guide,1,Player.X,(Player.Y+F),Tilemap.Image,TilemapTile[A][B][C].Frame,(Tilemap.X+(G*16)),(Tilemap.Y+(H*16)))
TilemapYB=(F-Player.Speed)
Player.DownFlagA=0
BREAK
ELSE
Player.DownFlagA=1
ENDIF
NEXT

FOR F=0 TO Player.Speed
IF ANIMCOLL(Player.Guide,2,(Player.X-F),Player.Y,Tilemap.Image,TilemapTile[A][B][C].Frame,(Tilemap.X+(G*16)),(Tilemap.Y+(H*16)))
TilemapXA=(F-Player.Speed)
Player.LeftFlagA=0
BREAK
ELSE
Player.LeftFlagA=1
ENDIF
NEXT

FOR F=0 TO Player.Speed
IF ANIMCOLL(Player.Guide,3,(Player.X+F),Player.Y,Tilemap.Image,TilemapTile[A][B][C].Frame,(Tilemap.X+(G*16)),(Tilemap.Y+(H*16)))
TilemapXB=(F-Player.Speed)
Player.RightFlagA=0
BREAK
ELSE
Player.RightFlagA=1
ENDIF
NEXT
ENDIF


IF TilemapTile[A][B][C].DotFlag=1
IF ANIMCOLL(Player.Guide,4,Player.X,Player.Y,Tilemap.Image,TilemapTile[A][B][C].Frame,(Tilemap.X+(G*16)),(Tilemap.Y+(H*16)))
Tilemap.DotFlag=1
ENDIF
ENDIF


IF TilemapTile[A][B][C].AnimatedFlag=1
DRAWANIM Tilemap.Image,(TilemapTile[A][B][C].Frame+TilemapTile[A][B][C].FrameCounter+TilemapTile[A][B][C].FrameOffset),(Tilemap.X+(G*16)),(Tilemap.Y+(H*16))
ELSEIF TilemapTile[A][B][C].AnimatedFlag=0
DRAWANIM Tilemap.Image,TilemapTile[A][B][C].Frame,(Tilemap.X+(G*16)),(Tilemap.Y+(H*16))
ENDIF


H=H+1
NEXT
G=G+1
NEXT
NEXT


DRAWANIM Player.Guide,0,Player.X,Player.Y
DRAWANIM Player.Guide,1,Player.X,Player.Y
DRAWANIM Player.Guide,2,Player.X,Player.Y
DRAWANIM Player.Guide,3,Player.X,Player.Y
DRAWANIM Player.Image,Player.Frame,(Player.X-8),(Player.Y-26)


FOR A=0 TO 4
G=0
FOR B=Tilemap.XOffset TO (D+Tilemap.XOffset)
H=0
FOR C=Tilemap.YOffset TO (E+Tilemap.YOffset)


IF Tilemap.DotFlag=1
IF TilemapTile[A][B][C].DotFlag=1
IF TilemapTile[A][B][C].AnimatedFlag=1
DRAWANIM Tilemap.Image,(TilemapTile[A][B][C].Frame+TilemapTile[A][B][C].FrameCounter+TilemapTile[A][B][C].FrameOffset),(Tilemap.X+(G*16)),(Tilemap.Y+(H*16))
ELSEIF TilemapTile[A][B][C].AnimatedFlag=0
DRAWANIM Tilemap.Image,TilemapTile[A][B][C].Frame,(Tilemap.X+(G*16)),(Tilemap.Y+(H*16))
ENDIF
ENDIF
ENDIF


IF Tilemap.FrameDelay>=10
TilemapTile[A][B][C].FrameCounter=TilemapTile[A][B][C].FrameCounter+TilemapTile[A][B][C].FrameXIncrement

IF TilemapTile[A][B][C].FrameCounter>(Tilemap.TilesetTileWidth-(TilemapTile[A][B][C].FrameJump+1))+((TilemapTile[A][B][C].FrameCounterB*Tilemap.TilesetTileWidth))
TilemapTile[A][B][C].FrameOffset=TilemapTile[A][B][C].FrameOffset+(Tilemap.TilesetTileWidth*(TilemapTile[A][B][C].FrameYIncrement-1))
TilemapTile[A][B][C].FrameCounterB=TilemapTile[A][B][C].FrameCounterB+1
ENDIF

IF TilemapTile[A][B][C].FrameCounter>=TilemapTile[A][B][C].AnimatedFrames*TilemapTile[A][B][C].FrameXIncrement
TilemapTile[A][B][C].FrameCounter=0
TilemapTile[A][B][C].FrameCounterB=0
TilemapTile[A][B][C].FrameOffset=0
ENDIF
ENDIF


H=H+1
NEXT
G=G+1
NEXT
NEXT


IF Player.FrameDelay>=10 THEN Player.FrameDelay=0
IF Tilemap.FrameDelay>=10 THEN Tilemap.FrameDelay=0
Tilemap.Y=(Tilemap.Y+TilemapYA)
Tilemap.Y=(Tilemap.Y-TilemapYB)
Tilemap.X=(Tilemap.X+TilemapXA)
Tilemap.X=(Tilemap.X-TilemapXB)
ENDFUNCTION
#10
Still no luck, I've been spending all morning going through a copy of the project file and trying to modify it to work, but I think I am going to rewrite it based off the old source to see if I don't see it then. Also a google search said it might be a problem with an array, so thats what inspired my work this morning. Further testing in debug just says access violation?
#11
Yes I am using 10.106, I tested the program on my vista laptop, and it seems to run fine. I can't reproduce it at all. And I also tried to google error code: 0xc0000005, it said I may have a faulty memory stick. So I swapped em' both twice each, and no success. I am pretty sure my code is fine if it is working on my laptop, any other ideas? Also I'm running XP Pro SP3 on my PC.
#12
I know this is a really old topic but I thought posting it here would be better than starting a new thread. So this error is now happening to me, was there ever a fix(es)? My code really isn't similar either. Any help would be appreciated.
#13
Exactly, I just tested it on my laptop and was going to post it.
#14
I'm pretty sure it is only changing the default transparent color. See I'm storing whole images as an array of hex values. When I draw the image, every color but the transparent show up right. I'll post more later I'm going to mess with changing the transparent color to see if that doesn't help my cause.
#15
If it is possible it would be greatly appreciated.