Window9 Library Documentation Introduction: This library is designed to facilitate programming in the FreeBasic language for Windows and Linux systems, providing an alternative to writing directly against pure APIs. Note that not all features are cross-platform; please refer to the descriptions for each feature regarding platform compatibility. Format Notes: - Examples using '?' or 'Print' should be compiled as console applications (or run in a terminal on Linux). - Function parameters are listed with required ones first, followed by optional ones which have default values assigned. - Some content may be adapted or supplemented from the official FreeBasic documentation for completeness. - The USTRING type is an alias for STRING in the ASCII library version and for extWstring (dynamic UNICODE string) in the UNICODE version. Examples use STRING; replace with USTRING for UNICODE builds. Developer Information: Main Developers: - Stanislav Budinov (Russia): Author of over 500 functions and this reference guide. - D.J. Peters (Germany): Introduced professional function design, code quality improvements, bug fixes, and added necessary functions. Contributors: - Chris Brown (Zamaster): Added AesDecoder, AesEncoder functions. - MOD (Germany): Added SHA1create, SHA1CreateFile, SHA512create, SHA512CreateFile, MD5createHash, MD5createFileHash functions. - Antarman (Russia): Provided the initial foundation and idea with simple functions and an event handler. - I3I2UI / I0 (Germany): Added SetXProgressBarColor function, testing, tips. - DEPOzit (Russia): Testing, tips. - ShadEx (Russia): Optimization of some functions, testing, tips. - RNBW (United Kingdom): Translation of the current help file version to English. - FXG861 (Canada), Steini63: Translation of the old help file version to English. Thanks to all library users. MODULES OVERVIEW: 2D_DRAW - Functions for drawing 2D primitives (circles, squares, text, images, etc.) 2D_DrawA - Advanced 2D drawing functions with transparency support. 3D (OpenGL) - Functions for creating OpenGL contexts within gadgets. ClipBoard - Functions for working with the clipboard (text, images, files). Color - Functions for working with window and gadget colors. Cipher - Functions for encryption and hashing (AES, Base64, CRC32, MD5, SHA1, SHA512). Config - Functions for managing configuration data in an INI-like format. Data Containers - Hashtable, List, Map, Queue, Stack implementations. Desktop - Functions for working with the desktop (size, color depth, etc.). Dialog - Dialog boxes (Font, Color, File Save/Open, InputBox, MessageBox, Folder Selection). Event - Event handling constants and functions (mouse, keyboard, window, gadget, menu events). File - Functions for basic file operations (create, open, read, write, close). FileSystem - Functions for managing files and directories (copy, delete, move, examine, etc.). Font - Functions for loading and managing fonts. Gadget - UI controls (Buttons, TextFields, Lists, Trees, etc.) and related functions. Help File - Functions for interacting with CHM help files. Image - Functions for loading, saving, resizing, and manipulating images (HBITMAP). ImageA - Functions for loading, saving, resizing, and manipulating GDI+/PixBuf images (supporting transparency). Internet - Functions for basic Internet operations (HTTP GET, FTP). Macro - Utility macros (IncludeBinary, SleepW9, UBoundIncBin). Memory - Functions for memory manipulation (FastCopy, PeekS). Menu - Functions for creating and managing standard and pop-up menus. Mouse - Functions for getting mouse cursor position and state. Movie - Functions for working with video and audio playback (DirectShow based). Packer - Functions for compressing and decompressing files and memory (ZLIB based). Preference - Older functions for managing settings files (alternative to Config). Printer - Functions for printing text, images, and window contents. Process - Functions related to running programs, managing processes, and command line arguments. String - Utility functions for string manipulation (ClearString, InsertString, ReplaceString). Sys Tray - Functions for managing system tray icons. Toolbar - Functions for creating and managing toolbars. UTF_ASCII_ENCODING - Functions for converting between ASCII, UTF-8, and Unicode (UTF-16/UTF-32). Window - Functions for creating, managing, and manipulating windows. --- SECTION: 2D_DRAW --- Examples of drawing with transparency: Example 1: #Include "window9.bi" Dim As Integer event Dim as HWND hwnd hwnd=OpenWindow("Hello",10,10,320,250) : CenterWindow(hwnd) Updateinfoxserver() // need for Linux WindowStartDraw(hwnd,0,0,320,250) // Start drawing CircleDraw(100,101,100,,255) CircleDraw(200,101,100,,&hff0000,,,100) BoxDraw(100,15,100,170,&hffffff,&hffffff,,,100) FillRectDraw(260,30,&hff0000) FillRectDraw(5,5,&h00ff00) StopDraw // finish drawing Do event=WindowEvent() If Event=EventClose Then End Loop Example 2: #Include "window9.bi" Dim As Integer event Dim As HWND hwnd Dim As HBITMAP bmp hwnd=OpenWindow("Hello",10,10,370,200) : CenterWindow(hwnd) Var font=LoadFont("Isabella-Decor",72) bmp=Create_Image(500,200) ImageStartDraw(bmp) // Start drawing FillRectDraw(10,10,&hf0f0f0) FontDraw(font) TextDraw(22,10,"Hello",-1,&hff00ff) TextDraw(17,10,"Hello",-1,&hff0000,100) StopDraw // finish drawing ImageGadget(1,0,0,500,200,bmp) Do event=WindowEvent() If Event=EventClose Then End Loop *** FUNCTION: BoxDraw Syntax: Function BoxDraw(ByVal x As Long,ByVal y As Long,ByVal w As Long,ByVal h As Long,ByVal ColorPen As Long=0,ByVal ColorBk As Long=0,ByVal widthPen As Long=0,ByVal StylePen As Long=PS_SOLID, ByVal AlPHAPARAM As Long=255) As Integer Description: Used to draw rectangles. Options: x - X-axis location y - Y-axis location w - Width of the rectangle h - Height of the rectangle ColorPen - Color of the rectangle border ColorBk - Fill color of the rectangle (if -1, then transparent) widthPen - Width of the border pen StylePen - Border style: PS_SOLID, PS_DASH, PS_DOT, PS_DASHDOT, PS_DASHDOTDOT, PS_NULL, PS_INSIDEFRAME (Windows only) AlPHAPARAM - Degree of transparency (0 to 255) Platform: Windows, Linux Example: #Include "window9.bi" Var hwnd=OpenWindow("",100,100,300,300) UpdateInfoXserver() WindowStartDraw(hwnd) BoxDraw(40,40,200,200,255,255) BoxDraw(65,65,150,150,50000,50000) StopDraw Do : Loop until WaitEvent= EventClose Result: Visual output of two rectangles. *** FUNCTION: CircleDraw Syntax: Function CircleDraw(ByVal x As Long,ByVal y As Long,ByVal radius As Long,ByVal ColorPen As Long=0,ByVal ColorBk As Long=0,ByVal widthPen As Long=0,ByVal StylePen As Long=PS_SOLID, ByVal AlPHAPARAM As Long=255) As Integer Description: Used to draw a circle. Options: x - X-axis location of the center y - Y-axis location of the center radius - Radius of the circle ColorPen - Color of the circle border ColorBk - Fill color of the circle (if -1, then transparent) widthPen - Width of the circle border pen StylePen - Border style: PS_SOLID, PS_DASH, PS_DOT, PS_DASHDOT, PS_DASHDOTDOT, PS_NULL, PS_INSIDEFRAME (Windows only) AlPHAPARAM - Degree of transparency (0 to 255) Platform: Windows, Linux Example: #Include "window9.bi" Var hwnd=OpenWindow("",100,100,250,250) UpdateInfoXserver() WindowStartDraw(hwnd) BoxDraw(0,0,250,250,&hffffff,&hffffff) CircleDraw(80,140,50,&hFF0000 , &hFF0000 , , , 100) CircleDraw(160,140,50,&hFF00 , &hFF00 , , , 100) CircleDraw(120,80,50,&hFF , &hFF , , , 100) StopDraw Do : Loop until WaitEvent= EventClose Result: Visual output of three overlapping transparent circles. *** SUB: FillRectDraw Syntax: sub FillRectDraw(ByVal x As Long, ByVal y As Long, ByVal Color As Long) Description: Fills enclosed areas with the selected color starting from point (x,y). Extends to shape bounds. May be slow on Linux. Use BoxDraw for rectangular areas. Options: x - X-coordinate for fill starting point y - Y-coordinate for fill starting point Color - Fill Color Platform: Windows, Linux Example: #Include "window9.bi" Var hwnd=OpenWindow("",100,100,300,300) UpdateinfoXserver() WindowStartDraw(hwnd) FillRectDraw(0,1,&hf0f0f0) // Background LineDraw(60,180,140,50,10,&hff0000,&hff0000) LineDraw(140,50,220,180,10,&hff0000,&hff0000) LineDraw(220,180,60,180,10,&hff0000,&hff0000) FillRectDraw(150,150,50000) // Fill the triangle StopDraw Do : Loop until WaitEvent= EventClose Result: Visual output of a filled triangle. *** SUB: FocusDraw Syntax: sub FocusDraw(ByVal x As Long, ByVal y As Long, ByVal w As Long, ByVal h As Long ,ByVal iColor as Long = 0) Description: Used to draw a focus rectangle. Options: x - X-Axis Location y - Y-Axis Location w - Focus width h - Focus Height iColor - Focus color (Linux only) Platform: Windows, Linux Example: #Include "window9.bi" Var hwnd=OpenWindow("",100,100,300,300) UpdateInfoXserver() WindowStartDraw(hwnd) fillrectdraw(40,40,&hffffff) // Draw background for text TextDraw(100,100,"Hello",&hffffff) FocusDraw(95,95,45,25) // Draw focus around "Hello" StopDraw Do : Loop until WaitEvent= EventClose Result: Visual output showing text with a focus rectangle around it. *** SUB: FontDraw Syntax: Sub FontDraw(ByVal FontID As HFONT) Description: Sets the font for subsequent text drawing operations. Options: FontID - Handle of the font (obtained from LoadFont, FontRequester, etc.) Platform: Windows, Linux Example: #Include "window9.bi" Var hwnd=OpenWindow("",100,100,300,300) UpdateInfoXserver() WindowStartDraw(hwnd,100,100,100,30) #Ifdef __FB_WIN32__ // On Windows, set the background color of the canvas to be the same // as that of the window. You don't need to do this on linux. BoxDraw(0,0,100,30,&hf0f0f0,&hf0f0f0) #EndIf FontDraw(LoadFont("arial",22)) TextDraw(0,0,"Hello",-1,255) StopDraw Do : Loop until WaitEvent= EventClose Result: Visual output showing text drawn with the specified font. *** FUNCTION: GetPix Syntax: Function GetPix(ByVal x As Long,ByVal y As Long) As Long Description: Gets the color of a pixel at the specified coordinates in the current drawing area. Options: X - X-Axis Location Y - Y-Axis Location Platform: Windows, Linux Example: #Include "window9.bi" Var hwnd=OpenWindow("",100,100,300,300) UpdateInfoXserver() WindowStartDraw(hwnd) fillrectdraw(10,10,&h0) // Background RoundDraw(65,65,150,100,255,50000,20) // Draw an ellipse TextDraw(120,100,Str(GetPix(120,100)),-1) // Display color at (120,100) StopDraw Do : Loop until WaitEvent= EventClose Result: Visual output showing an ellipse and the color value of a pixel within it. *** FUNCTION: GradientFillDraw Syntax: Function GradientFillDraw(ByVal x As Long, ByVal y As Long,ByVal w As Long, ByVal h As Long,ByVal Rbegin As Long,ByVal Gbegin As Long,ByVal Bbegin As Long,ByVal REnd As Long,ByVal GEnd As Long,ByVal BEnd As Long, ByVal GOR_VERT As bool=0)As Integer Description: Draws a rectangle filled with a gradient. Color values range from 0 to 65535. Options: x, y, w, h - Initial coordinates and dimensions of the gradient rectangle Rbegin, Gbegin, Bbegin - Start color components (Red, Green, Blue) (0-65535) REnd, GEnd, BEnd - End color components (Red, Green, Blue) (0-65535) GOR_VERT - Gradient direction: 0 = Horizontal (default), 1 = Vertical Platform: Windows, Linux Example: #Include "window9.bi" Var hwnd=OpenWindow("",100,100,440,160):CenterWindow(hwnd) UpdateInfoXserver() WindowStartDraw(hwnd,,,,,1) GradientFillDraw(10,10,200,100,&hE7CA,&h4A16,&h63C2,&h489E,&h4727,&hB183,0) // Horizontal GradientFillDraw(215,10,200,100,&h0,&hC02E,&hE074,&h0,&hFADD,&h3703,1) // Vertical StopDraw Do : Loop until WaitEvent= EventClose Result: Visual output showing two rectangles filled with gradients. *** SUB: IconDraw Syntax: Sub IconDraw(ByVal x As Long, ByVal y As Long, ByVal Hicon As HICON) Description: Draws a loaded icon. Use ImageDraw on Linux. Options: x - X-Axis Location y - Y-Axis Location Hicon - Icon handle (from Load_Icon, ExtractIcon, LoadImage API, etc.) Platform: Windows Example: #Include "window9.bi" #Include "win/shellapi.bi" Var hwnd=OpenWindow("",100,100,300,300) Dim As HICON icon1,icon2 icon1=ExtractIcon(0,GetSystemDir & "\SetupAPI.dll",22) icon2=LoadIcon(0,IDI_WINLOGO) WindowStartDraw(hwnd) fillrectdraw(40,40,&hffffff) // Background IconDraw(50,100,icon1) IconDraw(100,100,icon2) StopDraw Do : Loop until WaitEvent= EventClose Result: Visual output showing two icons drawn on the window. *** SUB: ImageDraw Syntax: Sub ImageDraw(ByVal hBmp As HBITMAP,ByVal x As Long, ByVal y As Long, ByVal alphaparam As Long=255) Description: Draws (overlays) an image (bitmap). Options: hBmp - Handle of the bitmap to draw x, y - Top-left coordinates for drawing the image alphaparam - Degree of transparency (0 to 255) Platform: Windows, Linux Example: #Include "window9.bi" Var hwnd=OpenWindow("",100,100,300,300) UpdateInfoXServer() WindowStartDraw(hwnd,100,100,100,100,1) // Limit drawing area ImageDraw(Load_image("E:\WINDOWS\system32\oobe\images\merlin.gif"),0,0) // Assuming path exists StopDraw Do : Loop until WaitEvent = EventClose Result: Visual output showing the loaded image drawn on the window. *** FUNCTION: ImageStartDraw Syntax: Function ImageStartDraw(ByVal hBmp As HBITMAP) As HDC Description: Starts drawing operations on a specific image (bitmap). Must be paired with StopDraw. Returns the device context (HDC) for the image. Options: hBmp - Handle of the bitmap (from Load_image, Create_Image, etc.) Platform: Windows, Linux Example: #Include "window9.bi" Var hbitmap=Create_Image(320,240) // Create an image ImageStartDraw(hbitmap) // Start drawing on the image CircleDraw(150,100,50,255,255) // draw a circle StopDraw // Stop drawing on the image CenterWindow(OpenWindow("Draw",100,100,320,240)) // create a window ImageGadget(1,0,0,320,240,hbitmap) // display the image in a gadget Do : Loop until WaitEvent=EventClose Result: Visual output showing a window with an image gadget displaying a circle. *** FUNCTION: LineDraw Syntax: Function LineDraw(ByVal x As Long,ByVal y As Long,ByVal x1 As Long,ByVal y1 As Long,ByVal width As Long=0,ByVal color As Long=0,ByVal style As Long=PS_SOLID) As Integer Description: Used to draw a line. Options: x - Start X-coordinate y - Start Y-coordinate x1 - End X-coordinate y1 - End Y-coordinate width - Line width color - Line color style - Line style: PS_SOLID, PS_DASH, PS_DOT, PS_DASHDOT, PS_DASHDOTDOT, PS_NULL, PS_INSIDEFRAME (Windows only) Platform: Windows, Linux Example: #Include "window9.bi" Var hwnd=OpenWindow("",100,100,300,300) UpdateInfoXserver() WindowStartDraw(hwnd) // Start drawing boxdraw(0,0,300,300,0,0) // Background LineDraw(65,65,200,200,10,&hff0000) // Draw a line StopDraw // Stop drawing Do : Loop until WaitEvent= EventClose Result: Visual output showing a red diagonal line. *** FUNCTION: PieDraw Syntax: Function PieDraw(ByVal x As Long,ByVal y As Long,ByVal w As Long,ByVal h As Long,ByVal x1 As Long,ByVal y1 As Long,ByVal x2 As Long,ByVal y2 As Long,ByVal ColorPen As Long=0,ByVal ColorBk As Long=0,ByVal widthPen As Long=0,ByVal StylePen As Long=PS_SOLID) As Integer Description: Draws a pie-shaped wedge bounded by an ellipse and two radial lines. On Linux, w and h are forced to be equal (using the larger value). Options: x, y - Top-left corner of the bounding rectangle w, h - Width and height of the bounding rectangle x1, y1 - Endpoint of the first radial line x2, y2 - Endpoint of the second radial line ColorPen - Border color ColorBk - Fill color (if -1, transparent) widthPen - Border pen width StylePen - Border style: PS_SOLID, PS_DASH, PS_DOT, PS_DASHDOT, PS_DASHDOTDOT, PS_NULL, PS_INSIDEFRAME (Windows only) Platform: Windows, Linux Example: (Animated Pie) #Include "window9.bi" Dim Shared As integer event,M,f Dim Shared As HWND hwnd function draw_anim() As Integer WindowStartDraw(hwnd,0,0,200,200) FillRectDraw(10,10,&hf0f0f0) PieDraw(10,10,120,120,150,20+M,160,130-M,255,&hff0000,2) CircleDraw(95,35+M\20,10,&h00ffFF,&h00ff,4) StopDraw If f=0 Then M+=3 Else M-=3 EndIf If M=54 Then f=1 EndIf If M=0 Then f=0 EndIf Return TRUE End Function hwnd=OpenWindow("",100,100,160,180) SetTimer(hwnd,1,10,Cast(Any Ptr,@draw_anim)) Do : Loop Until WaitEvent= EventClose Result: Visual output showing an animated pie wedge. *** SUB: PixDraw Syntax: Sub PixDraw(ByVal x As Long,ByVal y As Long,ByVal Color As Long) Description: Used to draw a single pixel (point). Options: x - X-coordinate of the point y - Y-coordinate of the point Color - Color of the point Platform: Windows, Linux Example: #Include "window9.bi" Var hwnd=OpenWindow("",100,100,300,300) UpdateinfoXserver() Dim a As Integer WindowStartDraw(hwnd,0,100,300,1) // Start drawing in a limited area BoxDraw(0,0,300,1,&hf0f0f0) // Background For a=1 To 300 Step 3 PixDraw(a,0,255) // draw a dotted line Next StopDraw // Stop drawing Do : Loop until WaitEvent= EventClose Result: Visual output showing a dotted horizontal line. *** FUNCTION: PolygonDraw Syntax: Function PolygonDraw(ByVal pPoint As POINT ptr,ByVal nCount As Long, byval FillColor as Long, ByVal BorderColor As Long=0,ByVal BorderWidth As Long=0,ByVal BorderStyle As Long=PS_SOLID) As Integer Description: Draws a polygon, automatically connecting the start and end vertices. Options: pPoint - Pointer to an array of POINT (or GDKPoint on Linux) structures defining vertices. nCount - Number of vertices in the array. FillColor - Polygon fill color. BorderColor - Polygon border color. BorderWidth - Border pen width. BorderStyle - Border style: PS_SOLID, PS_DASH, PS_DOT, PS_DASHDOT, PS_DASHDOTDOT, PS_NULL, PS_INSIDEFRAME (Windows only). Platform: Windows, Linux Example: #Include "window9.bi" #Ifdef __FB_WIN32__ Type FBPOINT As Point #Else Type FBPOINT As GDKPoint #EndIf Var hwnd=OpenWindow("",100,100,190,300) Dim pPoint(4) As FBPOINT = _ {( 85, 50), (150,100), (150,150), ( 20,150), ( 20,100)} UpdateInfoXserver() WindowStartDraw(hwnd) FillRectDraw(0,1,&hf0f0f0) // Background PolygonDraw(@pPoint(0),5,&hD24EF3) FillRectDraw(90,130,&hD24EF3) // Fill part of the polygon (example specific) StopDraw Do : Loop until WaitEvent= EventClose Result: Visual output showing a filled polygon. *** FUNCTION: PolylineDraw Syntax: Function PolylineDraw(ByVal pPoint As POINT Ptr,ByVal nCount As Long, ByVal ColorPen As Long=0, ByVal widthPen As Long=0, ByVal StylePen As Long=PS_SOLID) As Integer Description: Draws a series of connected line segments (polyline). Does not automatically close the shape. Options: pPoint - Pointer to an array of POINT (or GDKPoint on Linux) structures defining vertices. nCount - Number of vertices in the array. ColorPen - Line color. widthPen - Line width. StylePen - Line style: PS_SOLID, PS_DASH, PS_DOT, PS_DASHDOT, PS_DASHDOTDOT, PS_NULL, PS_INSIDEFRAME (Windows only). Platform: Windows, Linux Example: #Include "window9.bi" #Ifdef __FB_WIN32__ Type FBPOINT As Point #Else Type FBPOINT As GDKPoint #EndIf Var hwnd=OpenWindow("",100,100,190,300) Dim pPoint(5) As FBPOINT pPoint(0).x=85 : pPoint(0).y=100 pPoint(1).x=150 : pPoint(1).y=150 pPoint(2).x=150 : pPoint(2).y=200 pPoint(3).x=20 : pPoint(3).y=200 pPoint(4).x=20 : pPoint(4).y=150 pPoint(5).x=85 : pPoint(5).y=100 // Explicitly closing the shape UpdateInfoXServer() WindowStartDraw(hwnd) // Start drawing FillRectDraw(0,1,&hf0f0f0) // Background PolylineDraw(@pPoint(0),6,&hD24EF3) FillRectDraw(90,130,&hD24EF3) // Fill part (example specific) StopDraw // Stop drawing Do : Loop until WaitEvent= EventClose Result: Visual output showing a polyline shape. *** FUNCTION: RoundBoxDraw Syntax: Function RoundBoxDraw(ByVal x As Long,ByVal y As Long,ByVal w As Long,ByVal h As Long,ByVal ColorPen As Long=0,ByVal ColorBk As Long=0,ByVal widthPen As Long=0,ByVal StylePen As Long=PS_SOLID,ByVal ellipsewidth As Long=0,ByVal ellipseheight As Long=0, ByVal alphaparam As Long=255) As Integer Description: Draws rectangles with rounded corners. Options: x, y - Top-left corner location w, h - Width and height of the rectangle ColorPen - Border color ColorBk - Fill color (if -1, transparent) widthPen - Border pen width StylePen - Border style: PS_SOLID, PS_DASH, PS_DOT, PS_DASHDOT, PS_DASHDOTDOT, PS_NULL, PS_INSIDEFRAME (Windows only) ellipsewidth - Width of the ellipse used for rounding corners ellipseheight - Height of the ellipse used for rounding corners alphaparam - Degree of transparency (0 to 255) Platform: Windows Example: #Include "window9.bi" Var hwnd=OpenWindow("",100,100,300,300) WindowStartDraw(hwnd) // Start drawing RoundBoxDraw(65,65,150,150,50000,50000,,,1000,50) // Draw rounded rectangle StopDraw // Stop drawing Do : Loop until WaitEvent= EventClose Result: Visual output showing a rectangle with rounded corners. *** FUNCTION: RoundDraw Syntax: Function RoundDraw(ByVal X As Long,ByVal Y As Long,ByVal W As Long,ByVal H As Long,ByVal ColorPen As Long=0,ByVal ColorBk As Long=0,ByVal WidthPen As Long=0,ByVal StylePen As Long=PS_SOLID, ByVal Alphaparam As Long=255) As Integer Description: Used to draw ellipses and circles. Options: X, Y - Top-left corner of the bounding box W, H - Width and height of the bounding box ColorPen - Border color ColorBk - Fill color (if -1, transparent) WidthPen - Border pen width StylePen - Border style: PS_SOLID, PS_DASH, PS_DOT, PS_DASHDOT, PS_DASHDOTDOT, PS_NULL, PS_INSIDEFRAME (Windows only) Alphaparam - Degree of transparency (0 to 255) Platform: Windows, Linux Example: #Include "window9.bi" Var hwnd=OpenWindow("",100,100,300,300) UpdateInfoXServer() WindowStartDraw(hwnd) // Start drawing BoxDraw(0,0,300,300) // background color RoundDraw(65,65,150,100,255,&hff0000,20) // draw an ellipse StopDraw // Stop drawing Do : Loop until WaitEvent= EventClose Result: Visual output showing an ellipse. *** FUNCTION: StopDraw Syntax: Function StopDraw() As Integer Description: Finishes drawing operations started with WindowStartDraw or ImageStartDraw and frees related resources. Options: None Platform: Windows, Linux Example: (See ImageStartDraw example) *** FUNCTION: TextDraw Syntax: Function TextDraw(ByVal x As Long, ByVal y As Long, ByRef text As string, ByVal ColorBK As Long=0, ByVal ColorText As Long=0, ByVal AlPHAPARAM As Long=255) As Integer Description: Used to draw text. Text positioning might differ slightly between Windows and Linux. Options: x, y - Top-left coordinates for the text text - The string to draw ColorBK - Background color (if -1, transparent) ColorText - Text color AlPHAPARAM - Text transparency level (0 to 255) Platform: Windows, Linux Example: #Include "window9.bi" Var hwnd=OpenWindow("",100,100,300,300) UpdateInfoXserver() WindowStartDraw(hwnd) fillrectdraw(40,40,&hffffff) // Background for text TextDraw(10,10,"Hello",&hffffff) // Draw text with white background StopDraw Do : Loop until WaitEvent= EventClose Result: Visual output showing text drawn on the window. *** FUNCTION: WindowStartDraw Syntax: Function WindowStartDraw(ByVal hWin As HWND,ByVal x As Long=0,ByVal y As Long=0,ByVal w As Long=0, ByVal h As Long=0,ByVal Alpha_FLAG As Long=0, ByVal Alpha_VALUE As ULong=0) As HDC Description: Starts drawing operations on a specific window. Must be paired with StopDraw. Returns the device context (HDC) for the window. Options: hWin - Handle of the window to draw on x, y, w, h - Optional coordinates and dimensions to constrain the drawing area (default is the entire window) Alpha_FLAG - (Windows only) If 1, enables drawing with a transparent background using Alpha_VALUE as the transparent color. Default is 0 (not transparent). Alpha_VALUE - (Windows only) The color to be treated as transparent if Alpha_FLAG is 1. Default is 0 (black). Platform: Windows, Linux Example: (See BoxDraw example) --- SECTION: 2D_DrawA --- Description: 2D_DrawA functions allow drawing higher quality, anti-aliased images with transparency support. These images can be saved in formats like PNG, TIFF, ICO while preserving transparency. Uses GDI+ on Windows and Cairo on Linux. *** SUB: ArcDrawA Syntax: Sub ArcDrawA(ByVal x As single,ByVal y As single,ByVal width_ As single,ByVal height_ As single,ByVal startAngle As Single,ByVal sweepAngle As Single,ByVal ColorPen As integer=&hff000000,ByVal brushPen as Any Ptr=0,ByVal widthPen As Single=1) Description: Draws an arc (a segment of an ellipse). Options: x, y, width_, height_ - Location and size of the bounding ellipse. startAngle - Starting angle in degrees (0 is at 3 o'clock, counter-clockwise). sweepAngle - Angle extent in degrees (counter-clockwise from startAngle). ColorPen - Color of the arc line (ARGB format, e.g., &hFFAARRGGBB). brushPen - Brush for drawing the arc line (from CreateBrushA). Overrides ColorPen if not 0. widthPen - Width of the arc line. Platform: Windows, Linux Example: #Include "window9.bi" Dim As Any Ptr Gpbitmap=Create_ImageA(250,270) Dim As Hbitmap bmp Dim As HWND hw ImageStartDrawA(Gpbitmap) ModeDrawA(ANTIALIAS_GOOD) ArcDrawA(75,50,100,100,40,280,&hFFA000AA,,20) // Draw a thick purple arc StopDrawA hw=OpenWindow("GDI+",100,100,250,270) CenterWindow(hw) bmp=CreateHBitmapFromGpBitmap(GpBitmap,&hf0f0F0) imagegadget(1, 0,0,300,300, bmp) Do:Loop Until WaitEvent()= eventclose Free_ImageA(Gpbitmap):Free_Image(bmp) Result: Visual output of an arc. *** SUB: BezierDrawA Syntax: Sub BezierDrawA(ByVal x0 As single,ByVal y0 As single,ByVal x1 As single,ByVal y1 As single,ByVal x2 As single,ByVal y2 As single,ByVal x3 As single,ByVal y3 As single,ByVal ColorPen As integer=&hff000000,ByVal brushPen as Any Ptr=0,ByVal widthPen As Single=1) Description: Draws a Bezier curve using four control points. Options: x0, y0 - Start point coordinates. x1, y1 - First control point coordinates. x2, y2 - Second control point coordinates. x3, y3 - End point coordinates. ColorPen - Color of the Bezier curve line (ARGB). brushPen - Brush for drawing the Bezier curve (from CreateBrushA). Overrides ColorPen if not 0. widthPen - Width of the Bezier curve line. Platform: Windows, Linux Example 1: #Include "window9.bi" Dim As Any Ptr Gpbitmap=Create_ImageA(260,270) Dim As Hbitmap bmp Dim As HWND hw Dim As Any ptr brush brush=CreateBrushA(1,1,120,90,&h80000000,&hF0FFF0f0) // Gradient brush ImageStartDrawA(Gpbitmap,1,&hffff0000) // Red background fill ModeDrawA(ANTIALIAS_GOOD) BezierDrawA(127,60,-56,60,254,210,74,200,&hFF0FFFF0,,10) // Yellow Bezier BezierDrawA(127,60,300,60,0,210,180,200,,brush,10) // Bezier with gradient brush StopDrawA hw=OpenWindow("GDI+",100,100,260,270) CenterWindow(hw) bmp=CreateHBitmapFromGpBitmap(GpBitmap,&hf0f0F0) imagegadget(1, 0,0,300,300, bmp) Do:Loop Until WaitEvent()= eventclose FreeBrushA(brush):Free_ImageA(Gpbitmap):Free_Image(bmp) Result: Visual output of two Bezier curves. *** SUB: BoxDrawA Syntax: Sub BoxDrawA(ByVal x As single,ByVal y As single,ByVal width As single,ByVal height As single,ByVal ColorPen As integer=&hff000000,ByVal flagcolorBK As Integer=1,ByVal ColorBk As integer=&hff000000,byval brushPen as Any Ptr=0,byval brushBk as Any Ptr=0,ByVal widthPen As Single=1) Description: Draws rectangles with enhanced options (brushes, anti-aliasing). Options: x, y, width, height - Location and dimensions. ColorPen - Color of the rectangle border (ARGB). flagcolorBK - Fill mode: 0=No Fill, 1=Fill with ColorBk, 2=Fill with brushBk. ColorBk - Fill color of the rectangle (ARGB). Used if flagcolorBK is 1. brushPen - Brush for the border (from CreateBrushA). Overrides ColorPen if not 0. brushBk - Brush for the fill (from CreateBrushA). Used if flagcolorBK is 2. widthPen - Width of the rectangle border. Platform: Windows, Linux Example: #Include "window9.bi" Dim As Any Ptr Gpbitmap=Create_ImageA(250,270) Dim As Hbitmap bmp Dim As HWND hw Dim As Any ptr brush,brush1 brush=CreateBrushA(1,1,120,90,&hFF000ff0,&hFFFFF0f0) // Gradient brush 1 brush1=CreateBrushA(1,1,120,120,&hFFF000F0,&hFF00f0F0) // Gradient brush 2 ImageStartDrawA(Gpbitmap) BoxDrawA(10,10,100,100,&hFF0000FF,0) // Blue border, no fill BoxDrawA(125,10,100,100,&hFFFF0000,,&HFF0000FF,,,5) // Red border (5px), blue fill BoxDrawA(10,125,100,100,&hFF00FF00,0,,brush,,10) // No fill, border uses brush1 (10px) BoxDrawA(125,125,100,100,,2,,brush,brush1,10) // Border uses brush1, fill uses brush2 (10px border) StopDrawA hw=OpenWindow("GDI+",100,100,250,270) CenterWindow(hw) bmp=CreateHBitmapFromGpBitmap(GpBitmap,&hf0f0F0) ImageGadget(1, 0,0,300,300, bmp) Do:Loop Until WaitEvent()= eventclose FreeBrushA(brush):FreeBrushA(brush1) Free_ImageA(Gpbitmap):Free_Image(bmp) Result: Visual output of four rectangles with different styles. *** SUB: CircleDrawA Syntax: Sub CircleDrawA(ByVal x As single,ByVal y As single,ByVal Radius As single,ByVal ColorPen As integer=&hff000000,ByVal flagcolorBK As Integer=1,ByVal ColorBk As integer=&hff000000,ByVal brushPen as Any Ptr=0,byval brushBk as Any Ptr=0,ByVal widthPen As Single=1) Description: Draws circles with enhanced options. Options: x, y - Location of the center of the circle. Radius - Radius of the circle. ColorPen - Color of the circle border (ARGB). flagcolorBK - Fill mode: 0=No Fill, 1=Fill with ColorBk, 2=Fill with brushBk. ColorBk - Circle fill color (ARGB). Used if flagcolorBK is 1. brushPen - Brush for the border (from CreateBrushA). Overrides ColorPen if not 0. brushBk - Brush for the fill (from CreateBrushA). Used if flagcolorBK is 2. widthPen - Width of the circle border. Platform: Windows, Linux Example: #Include "window9.bi" Dim As Any Ptr Gpbitmap=Create_ImageA(250,270) Dim As Hbitmap bmp Dim As HWND hw ImageStartDrawA(Gpbitmap) ModeDrawA(ANTIALIAS_GOOD) CircleDrawA(80,140,50,0,,&h800000FF) // Transparent blue circle (alpha = 80) CircleDrawA(160,140,50,0,,&H80FF0000) // Transparent red circle CircleDrawA(120,80,50,0,,&H8000FF00) // Transparent green circle StopDrawA hw=OpenWindow("GDI+",100,100,250,270) CenterWindow(hw) bmp=CreateHBitmapFromGpBitmap(GpBitmap,&hf0f0F0) ImageGadget(1, 0,0,300,300, bmp) Do:Loop Until WaitEvent()= eventclose Free_ImageA(Gpbitmap):Free_Image(bmp) Result: Visual output of three overlapping transparent circles. *** FUNCTION: CreateBrushA Syntax: Function CreateBrushA(ByVal x0 As Single=0,ByVal y0 As Single=0,ByVal x1 As Single=0,ByVal y1 As Single=0, ByVal color1 As Integer=&hFF00FF00, ByVal color2 As Integer=&hFF0000FF,ByVal GpImage As Any ptr=0,ByVal WrapMode As Integer=3 ) As Any Ptr Description: Creates a brush for GDI+/Cairo drawing. Can be a gradient brush or a texture brush (from an image). Returns a brush handle. Options: x0, y0 - Start coordinates for gradient (used if GpImage = 0). x1, y1 - End coordinates for gradient (used if GpImage = 0). color1, color2 - Start and end colors for gradient (ARGB, used if GpImage = 0). GpImage - Bitmap handle (GDI+/PixBuf) for texture brush. If non-zero, gradient parameters are ignored. WrapMode - Tiling mode for texture brush: WrapModeTile (0), WrapModeTileFlipX (1), WrapModeTileFlipY (2), WrapModeTileFlipXY (3, default), WrapModeClamp (4). Platform: Windows, Linux Example: #Include "window9.bi" Dim As Any Ptr Gpbitmap=Create_ImageA(300,170),GpCopy Dim As Hbitmap bmp Dim As HWND hw Dim As Any ptr brush,brush1 brush=CreateBrushA(1,1,120,90,&hFF0F0ff0,&hFF00Ff0F) // Gradient brush ImageStartDrawA(Gpbitmap) ModeDrawA(ANTIALIAS_GOOD) RoundDrawA(125,50,50,50,&hFF00FF00,0,,brush,,10) // Ellipse border with gradient GpCopy=grab_ImageA(Gpbitmap,125,50,50,50) // Grab part of the image brush1=CreateBrushA(,,,,,,GpCopy) // Texture brush from grabbed part (default WrapModeTileFlipXY) RoundDrawA(25,25,100,100,&h00000000,2,,,brush1) // Fill ellipse with texture brush 1 FreeBrushA(brush1) brush1=CreateBrushA(,,,,,,GpCopy,2) // Texture brush with WrapModeTileFlipY RoundDrawA(175,25,100,100,&h00000000,2,,,brush1) // Fill ellipse with texture brush 2 StopDrawA hw=OpenWindow("GDI+",100,100,310,170) CenterWindow(hw) bmp=CreateHBitmapFromGpBitmap(GpBitmap,&hf0f0F0) ImageGadget(1, 0,0,300,300, bmp) Do:Loop Until WaitEvent()= eventclose FreeBrushA(brush):FreeBrushA(brush1) Free_ImageA(Gpbitmap):Free_ImageA(GpCopy) Result: Visual output demonstrating gradient and texture brushes. *** FUNCTION: CreateFontDrawA Syntax: Function CreateFontDrawA(ByVal name As String="Arial",ByVal size As Integer=10,ByVal style As Integer=0,ByVal unit As Integer=6) As Any Ptr Description: Creates a font handle for use with TextDrawA. Options: name - Font name (e.g., "Arial", "Times New Roman"). size - Font size. style - Font style: FontStyleRegular (0), FontStyleBold (1), FontStyleItalic (2), FontStyleBoldItalic (3), FontStyleUnderline (4, Win only), FontStyleStrikeout (8, Win only). Combine with OR. unit - Unit for the size parameter: UnitWorld (0, Win only), UnitDisplay (1, avoid), UnitPixel (2), UnitPoint (3), UnitInch (4), UnitDocument (5), UnitMillimeter (6, default). Platform: Windows, Linux Example: #Include "window9.bi" Dim As Any Ptr Gpbitmap=Create_ImageA(300,270) Dim As Hbitmap bmp Dim As HWND hw Dim As Any ptr font=CreateFontDrawA("Courier",36,3) // Bold Italic ImageStartDrawA(Gpbitmap) TextDrawA("ABC",0,10,font,&h80FF0000,,ANTIALIAS_GOOD) // Draw transparent red text StopDrawA hw=OpenWindow("GDI+",100,100,320,270) CenterWindow(hw) bmp=CreateHBitmapFromGpBitmap(GpBitmap,&hf0f0F0) ImageGadget(1, 0,0,300,300, bmp) Do:Loop Until WaitEvent()= eventclose Free_ImageA(Gpbitmap):Free_Image(bmp) FreeFontDrawA(font) Result: Visual output showing text drawn with the created font. *** SUB: CurveDrawA Syntax: Sub CurveDrawA(ByVal Points As Any ptr,ByVal countPoints As Integer,ByVal RoundPoints As Single=0.5,ByVal ColorPen As integer=&hff000000,ByVal flagcolorBK As Integer=1,ByVal ColorBk As integer=&hff000000,ByVal brushPen as Any Ptr=0,byval brushBk as Any Ptr=0,ByVal widthPen As Single=1,ByVal Closed As Integer=0,ByVal fillmode As Integer=0) Description: Draws a cardinal spline through a series of points. Options: Points - Pointer to an array of PointF structures. countPoints - Number of points in the array. RoundPoints - Tension factor for the curve (0.0 to 1.0). Default 0.5. ColorPen - Color of the curve line (ARGB). flagcolorBK - Fill mode: 0=No Fill, 1=Fill with ColorBk, 2=Fill with brushBk. ColorBk - Fill color (ARGB). Used if flagcolorBK is 1. brushPen - Brush for the curve line (from CreateBrushA). Overrides ColorPen if not 0. brushBk - Brush for the fill (from CreateBrushA). Used if flagcolorBK is 2. widthPen - Width of the curve line. Closed - 0 = Open curve, 1 = Closed curve (connects last and first points). fillmode - Fill mode for closed curves (Windows only): FillModeAlternate (0), FillModeWinding (1). Platform: Windows (Linux support might be limited, especially fillmode) Example: #Include "window9.bi" Dim As Any Ptr Gpbitmap=Create_ImageA(750,270) Dim As Hbitmap bmp Dim As HWND hw Dim As PointF Points(4) Dim As Single dAngle For u As single=0.5 To 1.5 Step 1.0 // Draw two curves: one closed, one open for i As Integer=0 to 4 dAngle = (i * 0.8 - 0.5) * 3.1415926535 points(i).x=(200 *(u + 0.48 * Cos(dAngle))) points(i).y=(200 *(0.50 + 0.48 * Sin(dAngle))) Next ImageStartDrawA(Gpbitmap) ModeDrawA(4) // AntiAlias Best CurveDrawA(@Points(0),5,0.5,&hff0000ff,1,&hFF0000FF,,,,Int(u),0) // Draw curve StopDrawA Next hw=OpenWindow("GDI+",100,100,420,230) CenterWindow(hw) bmp=CreateHBitmapFromGpBitmap(GpBitmap,&hf0f0F0) WindowBackgroundImage(hw,Bmp) // Set as window background Do:Loop Until WaitEvent()= eventclose Free_ImageA(Gpbitmap):Free_Image(bmp) Result: Visual output showing cardinal splines. *** SUB: FillRectDrawA Syntax: Sub FillRectDrawA(byval x As Integer, byval y As Integer, byval color As integer) Description: Fills enclosed areas with the selected color starting from point (x,y). Extends to shape borders. Function is slow; consider custom algorithms for performance-critical fill operations. Color is ARGB. Options: x - X coordinate for fill starting point. y - Y coordinate for fill starting point. color - Fill color (ARGB). Platform: Windows, Linux Example: #Include "window9.bi" Dim As Any Ptr Gpbitmap=Create_ImageA(190,170) Dim As Hbitmap bmp Dim As HWND hw ImageStartDrawA(Gpbitmap) LineDrawA(50,50,100,100,,&HFFFF0000) // Draw triangle border LineDrawA(100,100,150,50,,&HFFFF0000) LineDrawA(50,50,150,50,,&HFFFF0000) FillRectDrawA(80,60,&hff0000ff) // Fill inside triangle (blue) FillRectDrawA(10,10,&hFF00FF00) // Fill outside (green) StopDrawA hw=OpenWindow("GDI+",100,100,200,180) CenterWindow(hw) bmp=CreateHBitmapFromGpBitmap(GpBitmap,&hf0f0F0) ImageGadget(1, 0,0,300,300, bmp) Do:Loop Until WaitEvent()= eventclose Free_ImageA(Gpbitmap):Free_Image(bmp) Result: Visual output showing a filled triangle. *** SUB: FreeBrushA Syntax: Sub FreeBrushA(ByVal Brush As Any Ptr) Description: Releases resources used by a brush created with CreateBrushA. Options: Brush - Handle of the brush to free. Platform: Windows, Linux Example: (See CreateBrushA or BoxDrawA examples) *** SUB: FreeFontDrawA Syntax: Sub FreeFontDrawA(ByVal GpFont As Any Ptr) Description: Releases resources used by a font created with CreateFontDrawA. Options: GpFont - Handle of the font to free. Platform: Windows, Linux Example: (See CreateFontDrawA example) *** FUNCTION: GetPixA Syntax: Function GetPixA(ByVal X As single,ByVal Y As Single) As Integer Description: Gets the ARGB color value of a pixel from a GDI+/PixBuf bitmap at the specified coordinates. Options: X, Y - Pixel coordinates. Platform: Windows, Linux Example: (See SetPixA example) *** SUB: ImageDrawA Syntax: Sub ImageDrawA(ByVal GpImage As Any Ptr,ByVal x As single, ByVal y As single,ByVal w As Single=0, ByVal h As Single=0) Description: Draws an image (GDI+/PixBuf bitmap) onto the current drawing surface, optionally resizing it. Preserves transparency. Options: GpImage - Handle of the image to draw. x, y - Top-left coordinates for drawing the image. w, h - Desired width and height. If 0, the original image dimensions are used. Platform: Windows, Linux Example: #Include "window9.bi" Dim As Any Ptr Gpbitmap=Create_ImageA(250,270) Dim As Hbitmap bmp Dim As HWND hw ImageStartDrawA(Gpbitmap) ModedrawA(ANTIALIAS_GOOD) LineDrawA(185,30,100,100,7,&Hf807f000) // Draw some lines first LineDrawA(105,30,200,100,7,&Hf807f000) ImageDrawA(Gpbitmap,10,10,100,100) // Draw the image itself, resized ImageDrawA(Gpbitmap,100,100,100,100) // Draw it again, resized, offset StopDrawA hw=OpenWindow("GDI+",100,100,250,270) CenterWindow(hw) bmp=CreateHBitmapFromGpBitmap(GpBitmap,&hf0f0F0) imagegadget(1, 0,0,300,300, bmp) Do:Loop Until WaitEvent()= eventclose Free_ImageA(Gpbitmap):Free_Image(bmp) Result: Visual output showing lines and resized copies of the image drawn onto itself. *** FUNCTION: ImageStartDrawA Syntax: Function ImageStartDrawA(ByRef bitmapGP As Any Ptr,ByVal ColorFlag As Integer=0,ByVal Color As Integer=&hFFFFFFFF) As Any Ptr Description: Starts drawing operations on a specific GDI+/PixBuf bitmap. Must be paired with StopDrawA. Returns a pointer to the graphics context (GDI+ Graphics on Windows, Cairo context on Linux). Options: bitmapGP - Handle of the GDI+/PixBuf bitmap to draw on (from Create_ImageA, Load_ImageA, etc.). ColorFlag - If 1, the bitmap surface will be filled with the specified Color before drawing starts. Color - The ARGB fill color to use if ColorFlag is 1. Platform: Windows, Linux Example: #Include "window9.bi" Dim As Any Ptr Gpbitmap=Create_ImageA(200,200) Dim As Hbitmap bmp Dim As HWND hw #define Rndcolor BGR(Int(Rnd*255),Int(Rnd*255),Int(Rnd*255))Or &hA0000000 // Random semi-transparent color ImageStartDrawA(Gpbitmap) ModeDrawA(ANTIALIAS_GOOD) For a As Integer=1 To 40 CircleDrawA(Rnd*200,Rnd*200,30,Rndcolor,,Rndcolor,,,3) // Draw random circles Next StopDrawA hw=OpenWindow("GDI+",100,100,200,200) CenterWindow(hw) bmp=CreateHBitmapFromGpBitmap(GpBitmap,&hf0f0f0) ImageGadget(1, 0,0,300,300, bmp) Do:Loop Until WaitEvent()= eventclose Free_ImageA(Gpbitmap):Free_Image(bmp) Result: Visual output showing a collection of randomly placed transparent circles. *** SUB: LineDrawA Syntax: Sub LineDrawA(ByVal x As single,ByVal y As single,ByVal x1 As single,ByVal y1 As single,ByVal width As Single=1,ByVal color As Integer=&hff000000,byval brushPen as Any Ptr=0) Description: Draws an anti-aliased line. Options: x, y - Start coordinates. x1, y1 - End coordinates. width - Line width. color - Line color (ARGB). Ignored if brushPen is used. brushPen - Brush for drawing the line (from CreateBrushA). Platform: Windows, Linux Example: #Include "window9.bi" Dim As Any Ptr Gpbitmap=Create_ImageA(160,160) Dim As Hbitmap bmp Dim As HWND hw Dim As Any ptr brush brush=CreateBrushA(1,1,140,10,&h8000f0f0,&h80FF00f0) // Semi-transparent gradient brush ImageStartDrawA(Gpbitmap) ModeDrawA(ANTIALIAS_GOOD) LineDrawA(10,10,150,150,10,&HFF0000FF) // Solid blue line LineDrawA(10,150,150,10,10,,brush) // Line drawn with gradient brush StopDrawA hw=OpenWindow("GDI+",100,100,180,200) CenterWindow(hw) bmp=CreateHBitmapFromGpBitmap(GpBitmap,&hf0F0fF) // Note: Background color typo? Should be &hf0f0f0? ImageGadget(1, 0,0,200,200, bmp) Do:Loop Until WaitEvent()= eventclose FreeBrushA(brush) Free_ImageA(Gpbitmap):Free_Image(bmp) Result: Visual output of two diagonal lines, one solid, one gradient. *** SUB: ModeDrawA Syntax: Sub ModeDrawA(ByVal mode As Integer) Description: Sets the anti-aliasing mode for subsequent drawing operations. Options: mode - Anti-aliasing mode: ANTIALIAS_NONE, ANTIALIAS_FAST, ANTIALIAS_GOOD, ANTIALIAS_BEST. Platform: Windows, Linux Example: #Include "window9.bi" Dim As Any Ptr Gpbitmap=Create_ImageA(250,270) Dim As Hbitmap bmp Dim As HWND hw ImageStartDrawA(Gpbitmap) ModeDrawA(ANTIALIAS_BEST) lineDrawA(15,30,100,100,7) // Line with best anti-aliasing ModeDrawA(ANTIALIAS_NONE) LineDrawA(185,30,100,100,7) // Line with no anti-aliasing StopDrawA hw=OpenWindow("GDI+",100,100,250,270) CenterWindow(hw) bmp=CreateHBitmapFromGpBitmap(GpBitmap,&hf0f0F0) ImageGadget(1, 0,0,300,300, bmp) Do:Loop Until WaitEvent()= eventclose Free_ImageA(Gpbitmap):Free_Image(bmp) Result: Visual output comparing an anti-aliased line with a non-anti-aliased line. *** SUB: PieDrawA Syntax: Sub PieDrawA(ByVal x As single,ByVal y As single,ByVal width As single,ByVal height As single,ByVal startAngle As Single,ByVal sweepAngle As Single,ByVal ColorPen As integer=&hff000000,ByVal flagcolorBK As Integer=1,ByVal ColorBk As integer=&hff000000,ByVal brushPen as Any Ptr=0,byval brushBk as Any Ptr=0,ByVal widthPen As Single=1) Description: Draws a filled pie-shaped wedge. Options: x, y, width, height - Location and size of the bounding ellipse. startAngle - Starting angle in degrees (0 is at 3 o'clock, counter-clockwise). sweepAngle - Angle extent in degrees (counter-clockwise from startAngle). ColorPen - Color of the pie border (ARGB). flagcolorBK - Fill mode: 0=No Fill, 1=Fill with ColorBk, 2=Fill with brushBk. ColorBk - Fill color (ARGB). Used if flagcolorBK is 1. brushPen - Brush for the border (from CreateBrushA). Overrides ColorPen if not 0. brushBk - Brush for the fill (from CreateBrushA). Used if flagcolorBK is 2. widthPen - Width of the pie border. Platform: Windows, Linux Example: #Include "window9.bi" Dim As Any Ptr Gpbitmap=Create_ImageA(250,270) Dim As Hbitmap bmp Dim As HWND hw ImageStartDrawA(Gpbitmap) ModeDrawA(ANTIALIAS_GOOD) PieDrawA(75,50,100,100,40,280,&hFFA000AA,1,&hFFA000AA) // Draw a solid purple pie wedge StopDrawA hw=OpenWindow("GDI+",100,100,250,270) CenterWindow(hw) bmp=CreateHBitmapFromGpBitmap(GpBitmap,&hf0f0F0) ImageGadget(1, 0,0,300,300, bmp) Do:Loop Until WaitEvent()= eventclose Free_ImageA(Gpbitmap):Free_Image(bmp) Result: Visual output of a pie wedge. *** SUB: PolygonDrawA Syntax: Sub PolygonDrawA(ByVal Points As Any ptr,ByVal countPoints As Integer,ByVal ColorPen As integer=&hff000000,ByVal flagcolorBK As Integer=1,ByVal ColorBk As integer=&hff000000,ByVal brushPen as Any Ptr=0,byval brushBk as Any Ptr=0,ByVal widthPen As Single=1,ByVal fillmode As Integer=0) Description: Draws a filled polygon, automatically connecting the start and end vertices. Options: Points - Pointer to an array of PointF structures defining vertices. countPoints - Number of vertices in the array. ColorPen - Polygon border color (ARGB). flagcolorBK - Fill mode: 0=No Fill, 1=Fill with ColorBk, 2=Fill with brushBk. ColorBk - Polygon fill color (ARGB). Used if flagcolorBK is 1. brushPen - Brush for the border (from CreateBrushA). Overrides ColorPen if not 0. brushBk - Brush for the fill (from CreateBrushA). Used if flagcolorBK is 2. widthPen - Width of the polygon border. fillmode - Fill mode for complex polygons (Windows only, ignored on Linux): FillModeAlternate (0), FillModeWinding (1). Platform: Windows, Linux Example: (Demonstrates fill modes) #Include "window9.bi" Dim As Any Ptr Gpbitmap=Create_ImageA(500,270) Dim As Hbitmap bmp Dim As HWND hw #ifdef __FB_WIN32__ Dim As PointF Points(4) #else Dim As GDKPoint Points(4) // Use GDKPoint for Linux compatibility if needed #endif Dim As Single dAngle For u As single=0.5 To 1.5 Step 1.0 // Draw two overlapping star shapes for i As Integer=0 to 4 dAngle = (i * 0.8 - 0.5) * 3.1415926535 points(i).x=(200 *(u + 0.48 * Cos(dAngle))) points(i).y=(200 *(0.50 + 0.48 * Sin(dAngle))) Next ImageStartDrawA(Gpbitmap) PolygonDrawA(@Points(0),5,0,1,&hFF00FF00,,,20,Int(u)) // Draw polygon with fillMode Alternate/Winding StopDrawA Next hw=OpenWindow("GDI+",100,100,420,230) CenterWindow(hw) bmp=CreateHBitmapFromGpBitmap(GpBitmap,&hf0f0F0) ImageGadget(1, 0,0,420,230, bmp) Do:Loop Until WaitEvent()= eventclose Free_ImageA(Gpbitmap):Free_Image(bmp) Result: Visual output showing complex polygons filled using different modes. *** SUB: RoundDrawA Syntax: Sub RoundDrawA(ByVal X As single,ByVal Y As single,ByVal W As single,ByVal H As single,ByVal ColorPen As integer=&hff000000,ByVal flagcolorBK As Integer=1,ByVal ColorBk As integer=&hff000000,ByVal brushPen as Any Ptr=0,byval brushBk as Any Ptr=0,ByVal widthPen As Single=1) Description: Draws ellipses with enhanced options. Options: X, Y, W, H - Location and dimensions of the bounding box. ColorPen - Ellipse border color (ARGB). flagcolorBK - Fill mode: 0=No Fill, 1=Fill with ColorBk, 2=Fill with brushBk. ColorBk - Ellipse fill color (ARGB). Used if flagcolorBK is 1. brushPen - Brush for the border (from CreateBrushA). Overrides ColorPen if not 0. brushBk - Brush for the fill (from CreateBrushA). Used if flagcolorBK is 2. widthPen - Width of the ellipse border. Platform: Windows, Linux Example: #Include "window9.bi" Dim As Any Ptr Gpbitmap=Create_ImageA(250,270) Dim As Hbitmap bmp Dim As HWND hw Dim As Any ptr brush,brush1 brush=CreateBrushA(1,1,120,90,&hFF000ff0,&hFFFFF0f0) // Gradient brush 1 brush1=CreateBrushA(1,1,120,120,&hFFF000F0,&hFF00f0F0) // Gradient brush 2 ImageStartDrawA(Gpbitmap) ModeDrawA(ANTIALIAS_GOOD) RoundDrawA(10,10,100,80,&hFF0000FF,0) // Blue border, no fill RoundDrawA(125,10,80,100,&hFFFF0000,,&HFF0000FF,,,5) // Red border (5px), blue fill RoundDrawA(10,105,100,120,&hFF00FF00,0,,brush,,10) // No fill, border uses brush1 (10px) RoundDrawA(125,125,100,100,,2,,brush,brush1,10) // Border uses brush1, fill uses brush2 (10px border) StopDrawA hw=OpenWindow("GDI+",100,100,250,270) CenterWindow(hw) bmp=CreateHBitmapFromGpBitmap(GpBitmap,&hf0f0F0) ImageGadget(1, 0,0,300,300, bmp) Do:Loop Until WaitEvent()= eventclose FreeBrushA(brush):FreeBrushA(brush1) Free_ImageA(Gpbitmap):Free_Image(bmp) Result: Visual output of four ellipses with different styles. *** SUB: SetPixA Syntax: Sub SetPixA(ByVal X As single,ByVal Y As Single,ByVal Color As integer=&hff000000) Description: Sets the ARGB color of a single pixel in a GDI+/PixBuf bitmap. Options: X, Y - Pixel coordinates. Color - ARGB color value. Platform: Windows, Linux Example: (Create transparent bitmap from opaque one) #Include "window9.bi" Var HBitmap=Create_Image(300,300) // create a regular bitmap ImageStartDraw(HBitmap) // start drawing TextDraw(30,50,"FreeBasic The Best",,&hff) // Draw opaque text StopDraw // stop drawing Var MainGpBitmap=Create_ImageA(300,300) // create a transparent bitmap Var GpBitmap=CreateGpBitmapFromHBitmap(HBitmap) // create GDI+ bitmap from Hbitmap ImageStartDrawA(MainGpBitmap) // start drawing with GDI+ ImageDrawA(GpBitmap,0,0) // draw our opaque bitmap onto the transparent one For y As Integer=0 To 299 // Iterate through pixels (adjust loop bounds) For x As Integer=0 To 299 If GetPixA(x,y)=&hff000000 Then // If pixel is opaque black SetPixA(x,y,&h00000000) // Make it fully transparent EndIf Next Next StopDrawA // stop drawing Save_image(HBitmap,"1.png") // save the original opaque bitmap Save_imageA(MainGpBitmap,"2.png") // save the new transparent bitmap Free_ImageA(GpBitmap):Free_Image(hbitmap):Free_ImageA(MainGpBitmap) Result: Creates two PNG files, one opaque, one with transparency where black pixels were. *** SUB: StopDrawA Syntax: Sub StopDrawA() Description: Finishes drawing operations started with ImageStartDrawA or WindowStartDrawA and frees related GDI+/Cairo resources. Options: None Platform: Windows, Linux Example: (See ImageStartDrawA example) *** SUB: TextDrawA Syntax: Sub TextDrawA(ByRef text As String,ByVal x As Integer, ByVal y As Integer, ByVal GpFont As Any Ptr=0, ByVal color As Integer=&hFFFFFFFF,ByVal brush As Any Ptr=0,ByVal mode As Integer=0) Description: Draws anti-aliased text. Positioning might differ slightly between Windows (GDI+) and Linux (Pango Cairo). Options: text - The string to draw. x, y - Top-left coordinates for the text. GpFont - Font handle (from CreateFontDrawA). Default is Arial 12 (Win) / Sans 12 (Lin). color - Text color (ARGB). Ignored if brush is used. brush - Brush for filling the text (from CreateBrushA). mode - Text rendering hint (Windows only): TextRenderingHintSystemDefault (0), TextRenderingHintSingleBitPerPixelGridFit (1), TextRenderingHintSingleBitPerPixel (2), TextRenderingHintAntiAliasGridFit (3), TextRenderingHintAntiAlias (4), TextRenderingHintClearTypeGridFit (5). Ignored on Linux (always anti-aliased). Platform: Windows, Linux Example: #Include "window9.bi" Dim As Any Ptr Gpbitmap=Create_ImageA(250,270) Dim As Hbitmap bmp Dim As HWND hw ImageStartDrawA(Gpbitmap) ModeDrawA(ANTIALIAS_GOOD) TextDrawA("FreeBasic",10,100,,&h8000FF00,,4) // Draw semi-transparent green text CircleDrawA(125,125,50,&h700000FF,,&h700000FF) // Draw overlapping circle StopDrawA hw=OpenWindow("GDI+",100,100,250,270) CenterWindow(hw) bmp=CreateHBitmapFromGpBitmap(GpBitmap,&hf0f0F0) ImageGadget(1, 0,0,300,300, bmp) Do:Loop Until WaitEvent()= eventclose Free_ImageA(Gpbitmap):Free_Image(bmp) Result: Visual output showing anti-aliased text potentially overlapping a circle. *** FUNCTION: WindowStartDrawA Syntax: Function WindowStartDrawA(ByVal hWin As HWND,ByVal x As Integer=0,ByVal y As Integer=0,ByVal w As Integer=0, ByVal h As Integer=0,ByVal ColorFlag As Integer=0,ByVal Color As Integer=&hFFFFFFFF) As Any Ptr Description: Starts GDI+/Cairo drawing operations directly on a window. Must be paired with StopDrawA. Returns a pointer to the graphics context. Options: hWin - Handle of the window to draw on. x, y, w, h - Optional coordinates and dimensions to constrain the drawing area (default is the entire window). ColorFlag - If 1, the drawing area will be filled with the specified Color before drawing starts. Color - The ARGB fill color to use if ColorFlag is 1. Platform: Windows, Linux Example: #Include "window9.bi" Dim As HWND hwnd hwnd = OpenWindow("",100,100,200,200) Do WindowStartDrawA(hwnd) // Start drawing on window For i As Integer = 0 To 1000 SetPixA(Rnd*200,Rnd*200,&hFF000000) // Draw random black pixels Next BoxDrawA(20,20,140,120,&h8fFFFF00,,&h8fFFFF00) // Draw a semi-transparent yellow box StopDrawA // Stop drawing Sleep(1) // Prevent high CPU usage Loop Until WindowEvent = eventclose Result: Visual output showing random pixels and a box drawn directly on the window. --- SECTION: 3D (OpenGL) --- *** FUNCTION: OpenGLGadget Syntax: function OpenGLGadget(ByVal gadget As Long, ByVal x As Long, ByVal y As Long, ByVal w As Long, ByVal h As Long, ByVal cBits As Long = 32, byval dBits as Long = 24, byval sBits as Long = 0, byval aBits as Long = 0) As HWND Description: Creates a gadget area for OpenGL rendering. Options: gadget - Gadget ID number. x, y, w, h - Location and size of the gadget. cBits - Number of bitplanes in the color buffer (default 32). dBits - Size of the depth buffer (default 24). sBits - Size of the stencil buffer (default 0). aBits - Size of the accumulation buffer (default 0). Platform: Windows, Linux Example 1: (Simple Triangle) #Include "window9.bi" #include "GL/gl.bi" // Need to include OpenGL headers Sub SceneDraw() glClearColor(0.7,0.7,0.6,1) glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT) glTranslatef( 50,50,0 ) // Note: This likely requires glMatrixMode/glLoadIdentity setup first glBegin( GL_TRIANGLES ) glColor3ub( 255,0,0 ) : glVertex2i( 0, 50 ) glColor3ub( 0,255,0 ) : glVertex2i( 100, 50 ) glColor3ub( 0,0,255 ) : glVertex2i( 50, 0 ) glEnd() glLoadIdentity() // Reset transformations OpenGLGadgetSwapBuffers(1) End Sub var win = OpenWindow("OpenGL Gadget",100,100,230,250) OpenGLGadget(1,5,5,200,200,,0) // Create gadget with color buffer only Do var event = WindowEvent() If event = eventclose Then Exit Do SceneDraw() sleep(1) Loop Result: Visual output of a colored triangle in an OpenGL gadget. Example 2: (Rotating Shapes) #Include "window9.bi" #include "GL/gl.bi" function SceneDraw() As Integer Static rtri as single, rquad as Single glClear (GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT) glLoadIdentity() glTranslatef (-1.5, 0.0, -6.0) glRotatef (rtri, 0, 1, 0) glBegin (GL_TRIANGLES) glColor3f (1.0, 0.0, 0.0) : glVertex3f ( 0.0, 1.0, 0.0) glColor3f (0.0, 1.0, 0.0) : glVertex3f (-1.0,-1.0, 0.0) glColor3f (0.0, 0.0, 1.0) : glVertex3f ( 1.0,-1.0, 0.0) glEnd() glLoadIdentity() glTranslatef(1.5, 0.0, -6.0) glColor3f (0.5, 0.5, 1.0) glRotatef (rquad, 1, 0, 0) glBegin (GL_QUADS) glVertex3f (-1.0, 1.0, 0.0) glVertex3f ( 1.0, 1.0, 0.0) glVertex3f ( 1.0,-1.0, 0.0) glVertex3f (-1.0,-1.0, 0.0) glEnd() glFlush() // Typically not needed with SwapBuffers rtri += 1 rquad += 1 OpenGLGadgetSwapBuffers(1) Return TRUE End Function var win = OpenWindow("OpenGL Gadget",100,100,230,250) OpenGLGadget(1,5,5,200,200,,32) // Gadget with depth buffer SetTimer(win , 1, 20, Cast(Any Ptr,@SceneDraw)) // Use address of function Do var event = WaitEvent() If event = eventclose Then Exit Do Loop Result: Visual output of a rotating triangle and square. *** SUB: OpenGLGadgetMakeCurrent Syntax: Sub OpenGLGadgetMakeCurrent(ByVal gadget As Long) Description: Makes the specified OpenGL gadget the current rendering target for OpenGL commands. Options: gadget - Gadget ID number. Platform: Windows, Linux Example: (Switching between two OpenGL gadgets) #Include "window9.bi" #include "GL/gl.bi" Enum gadgets opengl = 1 opengl2 Butchange End enum Dim Shared change As Integer sub SceneDraw() var w = GadgetWidth(change) var h = GadGetHeight(change) glClearColor(0,0,0,0) glClear(GL_COLOR_BUFFER_BIT) glBegin(GL_POINTS) for i as integer = 1 to 5000 glColor3f(rnd,rnd,rnd) glVertex2i(rnd*w,rnd*h) next glEnd() OpenGLGadgetSwapBuffers(Change) end sub var win = OpenWindow("OpenGL Gadget",100,100,510,250) #Ifdef __FB_WIN32__ ButtonGadget(Butchange,420,80,70,70,"Change Gadget" , BS_MULTILINE) #Else ButtonGadget(Butchange,420,80,70,70,!"Change\nGadget") #EndIf OpenGLGadget(opengl,5,5,200,200,,0) // 0 = no depth buffer OpenGLGadget(opengl2,210,5,200,200,,0) // 0 = no depth buffer change=opengl OpenGLGadgetMakeCurrent(change) // Set initial target Do var event = WindowEvent() Select Case event Case eventclose Exit Do Case eventgadget If EventNumber = Butchange Then // Use enum value Change = ((change-1) Xor 1)+1 // Toggle between 1 and 2 OpenGLGadgetMakeCurrent(change) // Switch target EndIf End Select SceneDraw() sleep(1) Loop Result: Visual output showing two OpenGL gadgets, with drawing alternating between them on button click. *** SUB: OpenGLGadgetSwapBuffers Syntax: Sub OpenGLGadgetSwapBuffers(ByVal gadget As Long) Description: Swaps the front and back buffers of the specified OpenGL gadget, making the rendered image visible (for double-buffered contexts). Options: gadget - Gadget ID number. Platform: Windows, Linux Example: (See OpenGLGadget and OpenGLGadgetMakeCurrent examples) --- SECTION: ClipBoard --- Description: Functions for interacting with the system clipboard. *** FUNCTION: ClearClipBoard Syntax: Function ClearClipBoard() As Integer Description: Clears the contents of the clipboard. Returns non-zero on success. Options: None Platform: Windows, Linux Example: #Include "window9.bi" SetClipBoardText("Hello") Print GetClipBoardText() // Console output sleep(1000) ClearClipBoard() Print GetClipBoardText() // Console output (should be empty) Sleep(1000) Result: Hello (empty line) *** FUNCTION: GetClipboardFile Syntax: Function GetClipBoardFile() As String Description: Returns file path(s) copied to the clipboard (e.g., from Windows Explorer). ASCII Version: Multiple files separated by Chr(0), string ends with Chr(0) & Chr(0). UNICODE Version: Multiple files separated by "|", string ends with "||". Options: None Platform: Windows Example: (User needs to copy a file to clipboard manually first) #Include "window9.bi" // Manually copy a file (e.g., D:\1.bas) to the clipboard before running Print GetClipBoardFile() // Console output Sleep(2000) Result: (Depends on copied file) e.g., D:\1.bas *** FUNCTION: GetClipBoardImage Syntax: Function GetClipBoardImage() As HBITMAP Description: Gets an image (bitmap) from the clipboard. Returns the HBITMAP handle or 0 if no image is present or on error. Options: None Platform: Windows, Linux Example: #Include "window9.bi" Dim As Integer event Dim As Hwnd hwnd hwnd=OpenWindow("",10,10,100,100) : CenterWindow(hwnd) ImageGadget(1,0,0,100,100) Var hbmp=Load_image("1.png") // Assuming 1.png exists SetClipboardImage(hbmp) Var clipboardBmp = GetClipboardImage() If clipboardBmp Then SetImageGadget(1, clipboardBmp) Free_Image(hbmp) // Free original Do event=WaitEvent() If Event=EventClose Then Exit Do Loop // Note: Bitmap retrieved from clipboard might need separate freeing if not used by gadget directly. Result: Shows the image from 1.png in an image gadget after copying/pasting via clipboard functions. *** FUNCTION: GetClipBoardText Syntax: Function GetClipBoardText() As String Description: Gets text content from the clipboard. Options: None Platform: Windows, Linux Example: #Include "window9.bi" SetClipBoardText("Hello") #ifdef UNICODE Print Trim(GetClipBoardText(),WChr(0)) // Trim potential null terminator #else Print Trim(GetClipBoardText(),Chr(0)) #EndIf Sleep(1000) Result: Hello *** FUNCTION: SetClipboardFile Syntax: Function SetClipboardFile(byRef sFile As String) As Integer Description: Sends file path(s) to the clipboard, formatted for file operations (e.g., paste in Explorer). ASCII Version: Separate multiple files with Chr(0), end string with Chr(0) & Chr(0). UNICODE Version: Separate multiple files with "|", end string with "||". Returns non-zero on success. Options: sFile - The file path string, formatted as described above. Platform: Windows Example: #Include "window9.bi" #ifdef UNICODE SetClipBoardFile("D:\1.bas||") // Example for Unicode #else SetClipBoardFile("D:\1.bas" & Chr(0) & Chr(0)) // Example for ASCII #EndIf Print GetClipBoardFile() // Verify by getting it back (optional) Sleep(2000) Result: D:\1.bas (Console output if GetClipBoardFile is called) *** SUB: SetClipBoardImage Syntax: Sub SetClipBoardImage(ByVal hbmp As HBITMAP) Description: Sends an image (bitmap) to the clipboard. Options: hbmp - Handle of the bitmap to copy. Platform: Windows, Linux Example: (See GetClipBoardImage example) *** SUB: SetClipBoardText Syntax: Sub SetClipBoardText(ByRef Text As String) Description: Sends text to the clipboard. Options: Text - The string to place on the clipboard. Platform: Windows, Linux Example: (See GetClipBoardText example) --- SECTION: Color --- Description: Functions for working with colors. *** FUNCTION: BGR (Built-in FreeBasic Function) Syntax: function BGR(r as UByte , g as Ubyte , b as Ubyte) as Long Description: Creates a 32-bit color value from Red, Green, and Blue components (0-255). Standard FreeBasic function, included for completeness. Options: r, g, b - Red, Green, Blue color components (0-255). Platform: Windows, Linux Example: #Include "window9.bi" Dim As Hwnd hwnd Dim As Long event hwnd=OpenWindow("1",30,30,500,500) Do event=WaitEvent() If event=EventClose Then End If event=eventlbDOWN Then WindowColor(hwnd,BGR(255,0,0)) // Set window to Red If event=eventrbDOWN Then WindowColor(hwnd,BGR(0,255,0)) // Set window to Green Loop Result: Window changes color on mouse clicks. *** FUNCTION: ColorRequester Syntax: Function ColorRequester(ByVal rgbCurrentUSER As Integer=0, ByVal flag As Integer=2, ByVal hwnd As HWND=0) As COLORREF Description: Opens a standard system dialog box for selecting a color. Returns the selected color value (COLORREF). Options: rgbCurrentUSER - Initial color selected in the dialog (used if flag includes CC_RGBINIT). flag - Dialog box initialization flags (Windows only, except CC_RGBINIT): CC_ANYCOLOR, CC_ENABLEHOOK, CC_ENABLETEMPLATE, CC_ENABLETEMPLATEHANDLE, CC_FULLOPEN, CC_PREVENTFULLOPEN, CC_RGBINIT, CC_SHOWHELP, CC_SOLIDCOLOR. hwnd - Parent window handle for the dialog. Platform: Windows, Linux (Linux supports only basic functionality) Example: #Include "window9.bi" Dim As long event Dim As hwnd hwnd=OpenWindow("1",30,30,500,500) WindowColor(hwnd, ColorRequester() ) // Set window color using requester Do event=WaitEvent() If event=EventClose Then End Loop Result: Opens a color selection dialog; the window background changes to the selected color. *** FUNCTION: GetGadgetColor Syntax: Function GetGadgetColor(byval gadget as Long ,ByVal flag as Long ) As Integer Description: Gets the background or text color of a supported gadget. Support varies by gadget type and platform/GTK version. Supported Gadgets: ButtonGadget (Linux text only), TextGadget, StringGadget, EditorGadget, CheckBoxGadget (Linux text only), ComboBoxGadget (Win only), ListBoxGadget, ListViewGadget, GadgetToolTip (Win only), OptionGadget (Linux text only), TrackBarGadget (Win/Linux GTK3), SpinGadget (Win/Linux GTK3), GroupGadget (Linux text only), ScrollBarGadget (Win only), ProgressBarGadget (Win/Linux GTK2), ExplorerListGadget (Win only). Options: gadget - Gadget ID number. flag - Specifies which color to get: 1 = Background Color, 2 = Text Color. Platform: Windows, Linux (support varies) Example: #Include "window9.bi" OpenWindow("",10,10,240,150) EditorGadget(1,20,20,100,40,"Editor") SetGadgetColor(1,50000,0,1) // Set background color ButtonGadget(2,10,70,150,30,"Get Color Editor") TextGadget(3,150,20,45,17,"",SS_CENTER) SetGadgetColor(3,255,16777215,3) // Set background/text for display gadget Do var event=WaitEvent() If event=EventGadget Then Select case EventNumber Case 2 SetGadgetText(3,Str(GetGadgetColor(1,1))) // Get background color of editor End Select ElseIf event=Eventclose Then End EndIf Loop Result: Displays the background color value of the editor gadget when the button is clicked. *** FUNCTION: SelectedFontColor Syntax: Function SelectedFontColor() As Integer Description: Gets the color selected in the most recent call to FontRequester. Options: None Platform: Windows Example: (See FontRequester example) *** SUB: SetGadgetColor Syntax: Sub SetGadgetColor(byval gadget As Long, ByVal colorBG as Long, ByVal colorText as Long, ByVal flag as Long) Description: Sets the background or text color of a supported gadget. Support varies by gadget type and platform/GTK version. See GetGadgetColor for supported list and notes. Options: gadget - Gadget ID number. colorBG - Background color value. colorText - Text color value. flag - Specifies which color(s) to set: 1 = Background Color, 2 = Text Color, 3 = Both Background and Text Color. Platform: Windows, Linux (support varies) Example 1: (Trackbar and Text Gadget) #Include "window9.bi" OpenWindow("",10,10,300,150) ButtonGadget(1,20,20,60,25,"End") TrackBarGadget(2,20,70,100,30,0,10) SetGadgetColor(2,50000,0,1) // Set trackbar background TextGadget(3,200,20,50,50) SetGadgetFont(3,LoadFont("Arial",34)) SetGadgetColor(3,0,16777215,3) // Set text gadget background (black) and text (white) Do var event=WaitEvent() If event=EventGadget Then Select case EventNumber Case 2 SetGadgetText(3,Str(GetTrackBarPos(2))) Case 1 end End Select EndIf Loop Result: Shows a trackbar with a custom background and a text gadget with custom colors. Example 2: (ComboBox - Windows only for color) #Include "window9.bi" CenterWindow(OpenWindow("",10,10,260,100)) ComboBoxGadget(1,10,10,100,80) AddComboBoxItem(1,"Hello0",-1) AddComboBoxItem(1,"Hello1",-1) AddComboBoxItem(1,"Hello2",-1) ComboBoxGadget(2,120,10,100,80) AddComboBoxItem(2,"Hello0",-1) AddComboBoxItem(2,"Hello1",-1) AddComboBoxItem(2,"Hello2",-1) SetGadgetColor(1,255,16777215,3) // Combo 1: Blue BG, White Text SetGadgetColor(2,50000,0,1) // Combo 2: Custom BG Do var event=WaitEvent() If event=eventclose Then End Loop Result: Shows two ComboBox gadgets with custom colors (Windows only). *** SUB: WindowColor Syntax: Sub WindowColor(ByVal hWin As HWND, ByVal iColor As ulong) Description: Sets the background color of the specified window. Options: hWin - Handle of the window. iColor - Color value (use BGR or ColorRequester). Platform: Windows, Linux Example: (See BGR example) --- SECTION: Cipher --- Description: Functions for encryption and hashing. Based on code by D.J.Peters and MOD. *** FUNCTION: AESDecoder Syntax: function AESDecoder(byref Text as string, byref Key as string) as String Description: Decrypts a string previously encrypted with AESEncoder using the provided key (AES algorithm). Options: Text - The encrypted string. Key - The decryption key (password). Platform: Windows, Linux Example: #Include "window9.bi" Dim As String st="Hello" st=AESEncoder(st,"dvbjhrvh") Print st // Encrypted output st = AESDecoder(st,"dvbjhrvh") Print st // Original text Sleep(2000) Result: (Console output shows encrypted and then decrypted string) *** FUNCTION: AESEncoder Syntax: function AESEncoder(byref Text as string, byref Key as string) as String Description: Encrypts a string using the AES algorithm with the provided key. Options: Text - The plain text string to encrypt. Key - The encryption key (password). Platform: Windows, Linux Example: (See AESDecoder example) *** FUNCTION: Decode64 Syntax: Function Decode64(ByRef strb64 as const String) As String Description: Decodes a Base64 encoded string back to its original form. Options: strb64 - The Base64 encoded string. Platform: Windows, Linux Example: #Include "window9.bi" Dim As String st="Hello" st=Encode64(st) Print st // Base64 output st=Decode64(st) Print st // Original text Sleep(2000) Result: SGVsbG8= Hello *** FUNCTION: Encode64 Syntax: Function Encode64(ByRef text As String) As String Description: Encodes a string using the Base64 algorithm. Options: text - The string to encode. Platform: Windows, Linux Example: (See Decode64 example) *** FUNCTION: FastCRC32 Syntax: Function FastCRC32(Byval pBuffer As any Ptr, Byval BufferSize As uInteger) As ulong Description: Calculates the CRC32 checksum of a memory buffer. Options: pBuffer - Pointer to the memory buffer. BufferSize - Size of the buffer in bytes. Platform: Windows, Linux Example: #Include "window9.bi" Dim As String st="Hello" Print st, " CRC=";Hex(FastCRC32(StrPtr(st),Len(st))) st=Encode64(st) // Modify string Print st st=Decode64(st) // Restore string Print st," CRC=";Hex(FastCRC32(StrPtr(st),Len(st))) // CRC should match original Sleep(2000) Result: Hello CRC=F7D18982 SGVsbG8= Hello CRC=F7D18982 *** FUNCTION: MD5createFileHash Syntax: Function MD5createFileHash(ByRef file As String) As String Description: Creates an MD5 hash (128-bit) string representation for the contents of a file. Options: file - Full path to the file. Platform: Windows, Linux Example: #Include "window9.bi" Print MD5createFileHash("C:\Windows\notepad.exe") // Example path Sleep(2000) Result: (MD5 hash of notepad.exe, will vary) e.g., A4F6DF0E33E644E802C8798ED94D80EA *** FUNCTION: MD5createHash Syntax: Function MD5createHash(ByRef text As String) As String Description: Creates an MD5 hash (128-bit) string representation for a given text string. Options: text - The string to hash. Platform: Windows, Linux Example: #Include "window9.bi" Print MD5createHash("Hello") Sleep(2000) Result: 8B1A9953C4611296A827ABF8C47804D7 *** FUNCTION: SHA1create Syntax: Function SHA1create(ByRef text As String) As String Description: Creates an SHA-1 hash string representation for a given text string. Options: text - The string to hash. Platform: Windows, Linux Example: #Include "window9.bi" Print SHA1create ("Hello") Sleep(2000) Result: F7FF9E8B7BB2E09B70935A5D785E0CC5D9D0ABF0 *** FUNCTION: SHA1createFile Syntax: Function SHA1createFile(ByRef file As String) As String Description: Creates an SHA-1 hash string representation for the contents of a file. Options: file - Full path to the file. Platform: Windows, Linux Example: #Include "window9.bi" Print SHA1createFile ("1.png") // Assuming 1.png exists Sleep(2000) Result: (SHA-1 hash of 1.png) *** FUNCTION: SHA512create Syntax: Function SHA512create(ByRef text As String) As String Description: Creates an SHA-512 hash string representation for a given text string. Options: text - The string to hash. Platform: Windows, Linux Example: #Include "window9.bi" Print SHA512create ("Hello") Sleep(2000) Result: 3615F80C9D293ED7402687F94B22D58E529B8CC7916F8FAC7FDDF7FBD5AF4CF777D3D795A7A00A16BF7E7F3FB9561EE9BAAE480DA9FE7A18769E71886B03F315 *** FUNCTION: SHA512createFile Syntax: Function SHA512createFile(ByRef file As String) As String Description: Creates an SHA-512 hash string representation for the contents of a file. Options: file - Full path to the file. Platform: Windows, Linux Example: #Include "window9.bi" Print SHA512createFile ("1.png") // Assuming 1.png exists Sleep(2000) Result: (SHA-512 hash of 1.png) --- SECTION: Config --- Description: Provides a way to store and retrieve data similar to INI files. Data is stored in memory and can be loaded from/saved to a file (UTF-8 encoded without BOM). Uses Group/Key pairs. Avoid using internal strings "~!+!~" and "~! !~". *** SUB: ConfigClear Syntax: Sub ConfigClear(p As Any Ptr) Description: Clears all data from the specified configuration store. Options: p - Handle to the configuration store (from ConfigCreate). Platform: Windows, Linux Example: #include "window9.bi" Dim As Any Ptr p = ConfigCreate() SetConfigValue(p , "Group1" , "Key1" , "data1") SetConfigValue(p , "Group1" , "Key2" , "data2") ConfigClear(p) Print GetConfigValue(p , "Group1" , "Key1") // Should be empty Print GetConfigValue(p , "Group1" , "Key2") // Should be empty ConfigDelete(p) Result: (Two empty lines) *** FUNCTION: ConfigCreate Syntax: Function ConfigCreate() As Any Ptr Description: Creates a new, empty configuration store in memory and returns its handle. Options: None Platform: Windows, Linux Example: #include "window9.bi" Dim As Any Ptr p = ConfigCreate() SetConfigValue(p , "Group1" , "Key1" , "data1") SetConfigValue(p , "Group1" , "Key2" , "data2") SetConfigValue(p , "Group2" , "Key1" , "data3") SetConfigValue(p , "Group2" , "Key2" , "data4") Print GetConfigValue(p , "Group1" , "Key1") Print GetConfigValue(p , "Group1" , "Key2") Print GetConfigValue(p , "Group2" , "Key1") Print GetConfigValue(p , "Group2" , "Key2") ConfigSave(p , "test.ini") // Save to file ConfigDelete(p) // Free memory Result: data1 data2 data3 data4 *** SUB: ConfigDelete Syntax: Sub ConfigDelete(p As Any Ptr) Description: Deletes the specified configuration store and frees associated memory. Options: p - Handle to the configuration store (from ConfigCreate). Platform: Windows, Linux Example: #include "window9.bi" Dim As Any Ptr p = ConfigCreate() SetConfigValue(p , "Group1" , "Key1" , "data1") Print GetConfigValue(p , "Group1" , "Key1") ConfigDelete(p) // Accessing 'p' after this point leads to errors. Result: data1 *** SUB: ConfigDeleteValue Syntax: Sub ConfigDeleteValue(p As Any Ptr , sGroup As USTRING , sKey As USTRING) Description: Removes a specific key-value pair from the configuration store. Options: p - Handle to the configuration store. sGroup - The group name containing the key. sKey - The key of the value to remove. Platform: Windows, Linux Example: #include "window9.bi" Dim As Any Ptr p = ConfigCreate() SetConfigValue(p , "Group1" , "Key1" , "data1") SetConfigValue(p , "Group1" , "Key2" , "data2") Print GetConfigValue(p , "Group1" , "Key1") Print GetConfigValue(p , "Group1" , "Key2") ConfigDeleteValue(p , "Group1" , "Key1") Print "After delete value" Print GetConfigValue(p , "Group1" , "Key1") // Should be empty Print GetConfigValue(p , "Group1" , "Key2") ConfigDelete(p) Result: data1 data2 After delete value data2 *** SUB: ConfigLoad Syntax: Sub ConfigLoad(p As Any Ptr , sPath As USTRING) Description: Loads configuration data from a file (UTF-8 without BOM, INI-like format) into the specified configuration store. Clears existing data in the store before loading. Options: p - Handle to the configuration store. sPath - Path to the configuration file to load. Platform: Windows, Linux Example: (Assumes test.ini was created by the ConfigCreate example) #include "window9.bi" Dim As Any Ptr p = ConfigCreate() // Create an empty store ConfigLoad(p , "test.ini") // Load from file Print GetConfigValue(p , "Group1" , "Key1") Print GetConfigValue(p , "Group1" , "Key2") Print GetConfigValue(p , "Group2" , "Key1") Print GetConfigValue(p , "Group2" , "Key2") ConfigDelete(p) Result: data1 data2 data3 data4 *** SUB: ConfigSave Syntax: Sub ConfigSave(p As Any Ptr , sPath As USTRING) Description: Saves the current contents of the configuration store to a file in INI-like format (UTF-8 without BOM). Options: p - Handle to the configuration store. sPath - Path to the file where the configuration should be saved. Platform: Windows, Linux Example: (See ConfigCreate example) *** FUNCTION: GetConfigValue Syntax: Function GetConfigValue(p As Any Ptr , sGroup As USTRING , sKey As USTRING) As USTRING Description: Retrieves the string value associated with a specific group and key from the configuration store. Returns an empty string if the group or key is not found. Options: p - Handle to the configuration store. sGroup - The group name. sKey - The key name. Platform: Windows, Linux Example: (See ConfigCreate example) *** SUB: SetConfigValue Syntax: Sub SetConfigValue(p As Any Ptr , sGroup As USTRING , sKey As USTRING , sValue As USTRING) Description: Adds a new key-value pair or modifies an existing one within the specified group in the configuration store. Options: p - Handle to the configuration store. sGroup - The group name. sKey - The key name. sValue - The string value to store (USTRING type). Platform: Windows, Linux Example: (See ConfigCreate example) --- SECTION: Data Containers - Hash Table --- Description: An associative container (hash table) storing key-value pairs. Keys are strings (case-sensitive), values can be pointers or strings. Data is not ordered. Generally faster than Map but unsorted. *** FUNCTION: CreateHashTable Syntax: Function CreateHashTable() As Any Ptr Description: Creates a new hash table and returns its handle. Use SetValueStr/GetValueStr functions for string data, SetValue/GetValue for pointer/integer data. Remember to use the correct flag (1 for strings, 0 for non-strings) in FreeHashTable, FreeKeyHashTable, DeleteHashTable to manage memory correctly. Avoid mixing string and non-string data types in the same table. Options: None Platform: Windows, Linux Example: (Using strings) #include "window9.bi" dim p as any ptr = CreateHashTable() For i As Long = 0 To 10 dim as string skey = "Key" & i dim as USTRING us = str(rnd) SetValueStrHashTable(p , skey , us) Next For i As Long = 0 To 10 dim as string skey = "Key" & i Print GetValueStrHashTable(p , skey ) Next DeleteHashTable(p , 1) // Use flag 1 for string data Result: (Prints 11 random float strings) *** SUB: DeleteHashTable Syntax: Sub DeleteHashTable(p As Any Ptr , bFlagFreeMemoryStrings As Long = 0) Description: Deletes the hash table and frees associated memory. Options: p - Hash table handle. bFlagFreeMemoryStrings - Set to 1 if the table stored string data (using SetValueStrHashTable) to free the string memory; otherwise, set to 0 (default). Platform: Windows, Linux Example: (See CreateHashTable example) *** SUB: FreeHashTable Syntax: Sub FreeHashTable(p As Any Ptr , bFlagFreeMemoryStrings As Long = 0) Description: Clears all entries from the hash table, freeing associated memory based on the flag. Options: p - Hash table handle. bFlagFreeMemoryStrings - Set to 1 for string data, 0 otherwise. Platform: Windows, Linux Example: #include "window9.bi" dim p as any ptr = CreateHashTable() For i As Long = 0 To 10 SetValueStrHashTable(p , "string" & i , str(i)) Next Print GetSizeHashTable(p) FreeHashTable(p , 1) // Free string data Print GetSizeHashTable(p) DeleteHashTable(p , 1) // Still need to delete the table itself Result: 11 0 *** SUB: FreeKeyHashTable Syntax: Sub FreeKeyHashTable(p As Any Ptr , sKey As String , bFlagFreeMemoryStrings As Long = 0) Description: Removes a single key-value pair from the hash table. Options: p - Hash table handle. sKey - The key of the entry to remove. bFlagFreeMemoryStrings - Set to 1 for string data, 0 otherwise. Platform: Windows, Linux Example: #include "window9.bi" dim p as any ptr = CreateHashTable() For i As Long = 0 To 2 SetValueStrHashTable(p , "string" & i , str(i)) Next For i As Long = 0 To 2 Print GetValueStrHashTable(p , "string" & i) Next FreeKeyHashTable(p , "string1" , 1) // Remove key "string1" Print "Values after deleting" For i As Long = 0 To 2 Print GetValueStrHashTable(p , "string" & i) // "string1" should be missing Next DeleteHashTable(p , 1) Result: 0 1 2 Values after deleting 0 2 *** FUNCTION: GetValueHashTable Syntax: Function GetValueHashTable(p As Any Ptr , sKey As String) As Any Ptr Description: Retrieves the data pointer associated with the given key. Returns NULL if the key is not found. Use for non-string data. Options: p - Hash table handle. sKey - The key to look up. Platform: Windows, Linux Example: (Storing integers as pointers) #include "window9.bi" dim p as any ptr = CreateHashTable() For i As Long = 1 To 3 SetValueHashTable(p , "string" & i , cast(any ptr , cint(i))) Next For i As Long = 1 To 3 Print cint(GetValueHashTable(p , "string" & i)) Next DeleteHashTable(p) // Flag 0 for non-string data Result: 1 2 3 *** FUNCTION: GetValueStrHashTable Syntax: Function GetValueStrHashTable(p As Any Ptr , sKey As String) As USTRING Description: Retrieves the string value associated with the given key. Returns an empty string if the key is not found. Use for string data. Options: p - Hash table handle. sKey - The key to look up. Platform: Windows, Linux Example: (See CreateHashTable example) *** FUNCTION: GetSizeHashTable Syntax: Function GetSizeHashTable(p As Any Ptr) As Long Description: Returns the number of key-value pairs currently stored in the hash table. Options: p - Hash table handle. Platform: Windows, Linux Example: (See FreeHashTable example) *** SUB: SetValueHashTable Syntax: Sub SetValueHashTable(p As Any Ptr , sKey As String , anyValue As Any Ptr) Description: Adds or modifies a key-value pair where the value is a pointer. Does not manage the memory pointed to by anyValue. Integers can be stored using CAST. Avoid using with SetValueStrHashTable in the same table. Options: p - Hash table handle. sKey - The key (case-sensitive string). anyValue - Pointer to the data to associate with the key. Platform: Windows, Linux Example: #include "window9.bi" dim p as any ptr = CreateHashTable() For i As Long = 1 To 3 SetValueHashTable(p , "string" & i , cast(any ptr , cint(i))) Next For i As Long = 1 To 3 Print cint(GetValueHashTable(p , "string" & i)) Next SetValueHashTable(p , "string2" , cast(any ptr , cint(100))) // Modify existing key Print "Output after changes" For i As Long = 1 To 3 Print cint(GetValueHashTable(p , "string" & i)) Next DeleteHashTable(p) Result: 1 2 3 Output after changes 1 100 3 *** SUB: SetValueStrHashTable Syntax: Sub SetValueStrHashTable(p As Any Ptr , sKey As String , anyValue As USTRING) Description: Adds or modifies a key-value pair where the value is a string. The library manages the memory for the stored string. Avoid using with SetValueHashTable in the same table. Options: p - Hash table handle. sKey - The key (case-sensitive string). anyValue - The USTRING value to associate with the key. Platform: Windows, Linux Example: #include "window9.bi" dim p as any ptr = CreateHashTable() For i As Long = 1 To 3 SetValueStrHashTable(p , "string" & i , str(i)) Next For i As Long = 1 To 3 Print GetValueStrHashTable(p , "string" & i) Next SetValueStrHashTable(p , "string2" , str(100)) // Modify existing key Print "Output after changes" For i As Long = 1 To 3 Print GetValueStrHashTable(p , "string" & i) Next DeleteHashTable(p , 1) // Use flag 1 for strings Result: 1 2 3 Output after changes 1 100 3 --- SECTION: Data Containers - Linked List --- Description: A doubly linked list implementation for storing elements (pointers or strings) in an indexed sequence. *** SUB: AddList Syntax: Sub AddList(p As Any Ptr , anyValue As Any Ptr) Description: Adds a new element (storing a pointer) to the end of the list. Does not manage the memory pointed to by anyValue. Integers can be stored using CAST. Avoid using with AddStrList in the same list. Options: p - List handle (from CreateList). anyValue - Pointer to the data to add. Platform: Windows, Linux Example 1: (Storing pointers to array elements) #include "window9.bi" dim shared as Long iDim(1) = {1,2} Dim As Any Ptr p = CreateList() AddList(p , @iDim(0)) AddList(p , @iDim(1)) Print *cast(long Ptr , getValueList(p , 0)) Print *cast(long Ptr , getValueList(p , 1)) DeleteList(p) // Flag 0 for non-string data Result: 1 2 Example 2: (Storing integers directly) #include "window9.bi" Dim As Any Ptr p = CreateList() AddList(p , cast(any ptr , cast(integer , 1))) AddList(p , cast(any ptr , cast(integer , 2))) Print cast(integer , getValueList(p , 0)) Print cast(integer , getValueList(p , 1)) DeleteList(p) // Flag 0 for non-string data Result: 1 2 *** SUB: AddStrList Syntax: Sub AddStrList(p As Any Ptr , anyValue As USTRING) Description: Adds a new element (storing a string) to the end of the list. The library manages the string memory. Avoid using with AddList in the same list. Options: p - List handle (from CreateList). anyValue - The USTRING value to add. Platform: Windows, Linux Example: #include "window9.bi" Dim As Any Ptr p = CreateList() AddStrList(p , "String 1") AddStrList(p , "String 2") Print getValueStrList(p , 0) Print getValueStrList(p , 1) DeleteList(p , 1) // Use flag 1 for strings Result: String 1 String 2 *** FUNCTION: CreateList Syntax: Function CreateList() As Any Ptr Description: Creates a new, empty linked list and returns its handle. Use AddStr/GetValueStr/InsertItemStr/SetValueStr for string data and Add/GetValue/InsertItem/SetValue for non-string data. Remember to use the correct flag (1 for strings, 0 for non-strings) in DeleteItemList, FreeList, DeleteList. Avoid mixing data types. Options: None Platform: Windows, Linux Example: (See AddList and AddStrList examples) *** SUB: DeleteItemList Syntax: Sub DeleteItemList(p As Any Ptr , iIndex As Long , bFlagFreeMemoryStrings As Long = 0) Description: Removes the element at the specified zero-based index from the list. Options: p - List handle. iIndex - Index of the element to remove. bFlagFreeMemoryStrings - Set to 1 if the list stores string data, 0 otherwise. Platform: Windows, Linux Example: #include "window9.bi" Dim As Any Ptr p = CreateList() AddStrList(p , "String 1") AddStrList(p , "String 2") Print getValueStrList(p , 0) Print getValueStrList(p , 1) Print "----After delete 0 item" DeleteItemList(p , 0 , 1) // Delete first item (index 0), flag 1 for strings Print getValueStrList(p , 0) // Now holds "String 2" ' Print getValueStrList(p , 1) ' This would now be out of bounds DeleteList(p , 1) Result: String 1 String 2 ----After delete 0 item String 2 *** SUB: DeleteList Syntax: Sub DeleteList(p As Any Ptr, bFlagFreeMemoryStrings As Long = 0) Description: Deletes the entire list and frees associated memory. Options: p - List handle. bFlagFreeMemoryStrings - Set to 1 for string data, 0 otherwise. Platform: Windows, Linux Example: (See AddStrList example) *** SUB: FreeList Syntax: Sub FreeList(p As Any Ptr , bFlagFreeMemoryStrings As Long = 0) Description: Removes all elements from the list, freeing associated memory based on the flag. The list itself still exists but is empty. Options: p - List handle. bFlagFreeMemoryStrings - Set to 1 for string data, 0 otherwise. Platform: Windows, Linux Example: #include "window9.bi" Dim As Any Ptr p = CreateList() AddStrList(p , "String 1") AddStrList(p , "String 2") Print GetSizeList(p) FreeList(p , 1) // Free string data Print GetSizeList(p) DeleteList(p , 1) // Still need to delete the list structure Result: 2 0 *** FUNCTION: GetSizeList Syntax: Function GetSizeList(p As Any Ptr) As Long Description: Returns the number of elements currently in the list. Options: p - List handle. Platform: Windows, Linux Example: (See FreeList example) *** FUNCTION: GetValueList Syntax: Function GetValueList(p As Any Ptr , iIndex As Long) As Any Ptr Description: Retrieves the data pointer stored at the specified zero-based index in the list. Returns NULL if the index is invalid. Use for non-string data. Options: p - List handle. iIndex - Index of the element to retrieve. Platform: Windows, Linux Example: (See AddList example 1) *** FUNCTION: GetValueStrList Syntax: Function GetValueStrList(p As Any Ptr , iIndex As Long) As USTRING Description: Retrieves the string value stored at the specified zero-based index in the list. Returns an empty string if the index is invalid. Use for string data. Options: p - List handle. iIndex - Index of the element to retrieve. Platform: Windows, Linux Example: (See AddStrList example) *** SUB: InsertItemList Syntax: Sub InsertItemList(p As Any Ptr , iIndex As Long , anyValue As Any Ptr) Description: Inserts a new element (storing a pointer) into the list at the specified zero-based index. Existing elements at or after the index are shifted. Does not manage the memory pointed to by anyValue. Integers can be stored using CAST. Avoid using with InsertItemStrList in the same list. Options: p - List handle. iIndex - Index at which to insert the new element. anyValue - Pointer to the data for the new element. Platform: Windows, Linux Example 1: (Inserting pointer) #include "window9.bi" dim as Integer iDim(2) = {1 , 2 , 3} Dim As Any Ptr p = CreateList() AddList(p , @iDim(0)) // List: {&1} AddList(p , @iDim(2)) // List: {&1, &3} InsertItemList(p , 1 , @iDim(1)) // Insert &2 at index 1. List: {&1, &2, &3} for i as Long = 0 to GetSizeList(p)-1 Print *cast(integer ptr , GetValueList(p , i)) Next DeleteList(p) Result: 1 2 3 Example 2: (Inserting integer) #include "window9.bi" Dim As Any Ptr p = CreateList() AddList(p , cast(any ptr , cint(1))) // List: {1} AddList(p , cast(any ptr , cint(3))) // List: {1, 3} InsertItemList(p , 1 , cast(any ptr , cint(2))) // Insert 2 at index 1. List: {1, 2, 3} for i as Long = 0 to GetSizeList(p)-1 Print cint(GetValueList(p , i)) Next DeleteList(p) Result: 1 2 3 *** SUB: InsertItemStrList Syntax: Sub InsertItemStrList(p As Any Ptr , iIndex As Long , anyValue As USTRING) Description: Inserts a new element (storing a string) into the list at the specified zero-based index. The library manages the string memory. Avoid using with InsertItemList in the same list. Options: p - List handle. iIndex - Index at which to insert the new element. anyValue - The USTRING value for the new element. Platform: Windows, Linux Example: #include "window9.bi" Dim As Any Ptr p = CreateList() AddStrList(p , "String 1") // List: {"String 1"} AddStrList(p , "String 2") // List: {"String 1", "String 2"} InsertItemStrList(p , 1 , "String 1.5") // Insert at index 1. List: {"String 1", "String 1.5", "String 2"} for i as Long = 0 to GetSizeList(p)-1 Print GetValueStrList(p , i) Next DeleteList(p , 1) // Flag 1 for strings Result: String 1 String 1.5 String 2 *** SUB: MoveItemList Syntax: Sub MoveItemList(p As Any Ptr , iIndexFrom As Long , iIndexTo As Long) Description: Moves an element from one index position to another within the list. Options: p - List handle. iIndexFrom - The zero-based index of the element to move. iIndexTo - The zero-based index where the element should be moved to. Platform: Windows, Linux Example: #include "window9.bi" Dim As Any Ptr p = CreateList() AddStrList(p , "String 1") // Index 0 AddStrList(p , "String 2") // Index 1 AddStrList(p , "String 3") // Index 2 MoveItemList(p , 2 , 0) // Move item from index 2 ("String 3") to index 0 for i as Long = 0 to GetSizeList(p)-1 Print GetValueStrList(p , i) Next DeleteList(p , 1) Result: String 3 String 1 String 2 *** SUB: SetValueList Syntax: Sub SetValueList(p As Any Ptr , iIndex As Long , anyValue As Any Ptr) Description: Replaces the data pointer of an existing element at the specified index. Does not free the old pointer's data. Use for non-string data. Options: p - List handle. iIndex - Index of the element to modify. anyValue - The new pointer value for the element. Platform: Windows, Linux Example: #include "window9.bi" Dim As Any Ptr p = CreateList() AddList(p , cast(any Ptr , cint(1))) AddList(p , cast(any Ptr , cint(2))) for i as Long = 0 to GetSizeList(p)-1 Print cint(GetValueList(p , i)) Next Print "Changed 1 element" SetValueList(p , 1 , cast(any Ptr , cint(100))) // Change value at index 1 for i as Long = 0 to GetSizeList(p)-1 Print cint(GetValueList(p , i)) Next DeleteList(p) Result: 1 2 Changed 1 element 1 100 *** SUB: SetValueStrList Syntax: Sub SetValueStrList(p As Any Ptr , iIndex As Long , anyValue As USTRING) Description: Replaces the string value of an existing element at the specified index. Frees the old string memory and manages the new string's memory. Use for string data. Options: p - List handle. iIndex - Index of the element to modify. anyValue - The new USTRING value for the element. Platform: Windows, Linux Example: #include "window9.bi" Dim As Any Ptr p = CreateList() AddStrList(p , "String 1") AddStrList(p , "String 2") for i as Long = 0 to GetSizeList(p)-1 Print GetValueStrList(p , i) Next Print "-----Changed 1 element-----" SetValueStrList(p , 1 , "Changes String") // Change value at index 1 for i as Long = 0 to GetSizeList(p)-1 Print GetValueStrList(p , i) Next DeleteList(p , 1) // Flag 1 for strings Result: String 1 String 2 -----Changed 1 element----- String 1 Changes String --- SECTION: Data Containers - Map (Dictionary) --- Description: An associative container (dictionary) storing key-value pairs, similar to HashTable but keeps keys sorted (implemented using an AVL tree). Keys are strings (case-sensitive), values can be pointers or strings. Interface is similar to HashTable. *** FUNCTION: CreateMap Syntax: Function CreateMap() As Any Ptr Description: Creates a new, empty map (dictionary) and returns its handle. Use SetValueStr/GetValueStr functions for string data, SetValue/GetValue for pointer/integer data. Remember to use the correct flag (1 for strings, 0 for non-strings) in FreeMap, FreeKeyMap, DeleteMap. Avoid mixing data types. Options: None Platform: Windows, Linux Example: (See HashTable CreateHashTable example, just replace HashTable with Map) *** SUB: DeleteMap Syntax: Sub DeleteMap(p As Any Ptr , bFlagFreeMemoryStrings As Long = 0) Description: Deletes the map and frees associated memory. Options: p - Map handle. bFlagFreeMemoryStrings - Set to 1 for string data, 0 otherwise. Platform: Windows, Linux Example: (See HashTable DeleteHashTable example, just replace HashTable with Map) *** SUB: FreeKeyMap Syntax: Sub FreeKeyMap(p As Any Ptr , sKey As String , bFlagFreeMemoryStrings As Long = 0) Description: Removes a single key-value pair from the map. Options: p - Map handle. sKey - The key of the entry to remove. bFlagFreeMemoryStrings - Set to 1 for string data, 0 otherwise. Platform: Windows, Linux Example: (See HashTable FreeKeyHashTable example, just replace HashTable with Map) *** SUB: FreeMap Syntax: Sub FreeMap(p As Any Ptr , bFlagFreeMemoryStrings As Long = 0) Description: Clears all entries from the map, freeing associated memory based on the flag. Options: p - Map handle. bFlagFreeMemoryStrings - Set to 1 for string data, 0 otherwise. Platform: Windows, Linux Example: (See HashTable FreeHashTable example, just replace HashTable with Map) *** FUNCTION: GetSizeMap Syntax: Function GetSizeMap(p As Any Ptr) As Long Description: Returns the number of key-value pairs currently stored in the map. Options: p - Map handle. Platform: Windows, Linux Example: (See HashTable GetSizeHashTable example, just replace HashTable with Map) *** FUNCTION: GetValueMap Syntax: Function GetValueMap(p As Any Ptr , sKey As String) As Any Ptr Description: Retrieves the data pointer associated with the given key. Returns NULL if the key is not found. Use for non-string data. Options: p - Map handle. sKey - The key to look up. Platform: Windows, Linux Example: (See HashTable GetValueHashTable example, just replace HashTable with Map) *** FUNCTION: GetValueStrMap Syntax: Function GetValueStrMap(p As Any Ptr , sKey As String) As USTRING Description: Retrieves the string value associated with the given key. Returns an empty string if the key is not found. Use for string data. Options: p - Map handle. sKey - The key to look up. Platform: Windows, Linux Example: (See HashTable GetValueStrHashTable example, just replace HashTable with Map) *** SUB: SetValueMap Syntax: Sub SetValueMap(p As Any Ptr , sKey As String , anyValue As Any Ptr) Description: Adds or modifies a key-value pair where the value is a pointer. Does not manage the memory pointed to by anyValue. Integers can be stored using CAST. Avoid using with SetValueStrMap in the same map. Options: p - Map handle. sKey - The key (case-sensitive string). anyValue - Pointer to the data to associate with the key. Platform: Windows, Linux Example: (See HashTable SetValueHashTable example, just replace HashTable with Map) *** SUB: SetValueStrMap Syntax: Sub SetValueStrMap(p As Any Ptr , sKey As String , anyValue As USTRING) Description: Adds or modifies a key-value pair where the value is a string. The library manages the memory for the stored string. Avoid using with SetValueMap in the same map. Options: p - Map handle. sKey - The key (case-sensitive string). anyValue - The USTRING value to associate with the key. Platform: Windows, Linux Example: (See HashTable SetValueStrHashTable example, just replace HashTable with Map) --- SECTION: Data Containers - Queue --- Description: A First-In, First-Out (FIFO) data structure. *** FUNCTION: BackQueue Syntax: Function BackQueue(p As Any Ptr) As Any Ptr Description: Returns the pointer value from the back (most recently added) of the queue without removing it. Returns NULL if empty. Use for non-string data. Options: p - Queue handle (from CreateQueue). Platform: Windows, Linux Example: (Using integers) #include "window9.bi" Dim as Any Ptr p = CreateQueue() PushQueue(p , cast(Any Ptr , cint(1))) // Queue: {1} PushQueue(p , cast(Any Ptr , cint(2))) // Queue: {1, 2} PushQueue(p , cast(Any Ptr , cint(3))) // Queue: {1, 2, 3} Print cint(FrontQueue(p)) // Should print 1 Print cint(BackQueue(p)) // Should print 3 DeleteQueue(p) Result: 1 3 *** FUNCTION: BackStrQueue Syntax: Function BackStrQueue(p As Any Ptr) As USTRING Description: Returns the string value from the back (most recently added) of the queue without removing it. Returns an empty string if empty. Use for string data. Options: p - Queue handle (from CreateQueue). Platform: Windows, Linux Example: #include "window9.bi" Dim as Any Ptr p = CreateQueue() PushStrQueue(p , "s1") // Queue: {"s1"} PushStrQueue(p , "s2") // Queue: {"s1", "s2"} PushStrQueue(p , "s3") // Queue: {"s1", "s2", "s3"} Print FrontStrQueue(p) // Should print s1 Print BackStrQueue(p) // Should print s3 DeleteQueue(p , 1) // Flag 1 for strings Result: s1 s3 *** FUNCTION: CreateQueue Syntax: Function CreateQueue() As Any Ptr Description: Creates a new, empty queue and returns its handle. Use PushStr/FrontStr/BackStr for string data, Push/Front/Back for non-string data. Remember to use the correct flag (1 for strings, 0 for non-strings) in PopQueue, FreeQueue, DeleteQueue. Avoid mixing data types. Options: None Platform: Windows, Linux Example: #include "window9.bi" Dim as Any Ptr p = CreateQueue() PushStrQueue(p , "s1") PushStrQueue(p , "s2") PushStrQueue(p , "s3") dim as long qSize = GetSizeQueue(p) ' Get size before loop for i as Long = 0 to qSize - 1 Print FrontStrQueue(p) // Print front PopQueue(p,1) // Remove front (use flag 1 for strings) Next DeleteQueue(p , 1) Result: s1 s2 s3 *** SUB: DeleteQueue Syntax: Sub DeleteQueue(p As Any Ptr , bFlagFreeMemoryStrings As Long = 0) Description: Deletes the queue and frees associated memory. Options: p - Queue handle. bFlagFreeMemoryStrings - Set to 1 for string data, 0 otherwise. Platform: Windows, Linux Example: (See CreateQueue example) *** SUB: FreeQueue Syntax: Sub FreeQueue(p As Any Ptr , bFlagFreeMemoryStrings As Long = 0) Description: Removes all elements from the queue, freeing associated memory based on the flag. The queue itself still exists but is empty. Options: p - Queue handle. bFlagFreeMemoryStrings - Set to 1 for string data, 0 otherwise. Platform: Windows, Linux Example: #include "window9.bi" Dim as Any Ptr p = CreateQueue() PushStrQueue(p , "s1") PushStrQueue(p , "s2") PushStrQueue(p , "s3") Print GetSizeQueue(p) FreeQueue(p,1) // Free string data Print GetSizeQueue(p) DeleteQueue(p , 1) // Still need to delete queue structure Result: 3 0 *** FUNCTION: FrontQueue Syntax: Function FrontQueue(p As Any Ptr) As Any Ptr Description: Returns the pointer value from the front (least recently added) of the queue without removing it. Returns NULL if empty. Use for non-string data. Options: p - Queue handle. Platform: Windows, Linux Example: (See BackQueue example) *** FUNCTION: FrontStrQueue Syntax: Function FrontStrQueue(p As Any Ptr) As USTRING Description: Returns the string value from the front (least recently added) of the queue without removing it. Returns an empty string if empty. Use for string data. Options: p - Queue handle. Platform: Windows, Linux Example: (See BackStrQueue example) *** FUNCTION: GetSizeQueue Syntax: Function GetSizeQueue(p As Any Ptr) As Long Description: Returns the number of elements currently in the queue. Options: p - Queue handle. Platform: Windows, Linux Example: (See FreeQueue example) *** FUNCTION: PopQueue Syntax: Function PopQueue(p As Any Ptr , bFlagFreeMemoryStrings As Long = 0) As Any Ptr Description: Removes and returns the element from the front of the queue. If storing strings (bFlagFreeMemoryStrings=1), it frees the string memory and always returns NULL. If storing non-string pointers (bFlagFreeMemoryStrings=0), it returns the pointer value that was removed. Options: p - Queue handle. bFlagFreeMemoryStrings - Set to 1 for string data, 0 otherwise. Platform: Windows, Linux Example: (See CreateQueue example for string usage, PushQueue example 2 for non-string usage) *** SUB: PushQueue Syntax: Sub PushQueue(p As Any Ptr , anyValue As Any Ptr) Description: Adds a new element (storing a pointer) to the back of the queue. Does not manage the memory pointed to by anyValue. Integers can be stored using CAST. Avoid using with PushStrQueue in the same queue. Options: p - Queue handle. anyValue - Pointer to the data to add. Platform: Windows, Linux Example 1: (Storing pointers) #include "window9.bi" dim as Integer iDim(2) = {1,2,3} Dim as Any Ptr p = CreateQueue() PushQueue(p , @iDim(0)) PushQueue(p , @iDim(1)) PushQueue(p , @iDim(2)) dim as long qSize = GetSizeQueue(p) for i as Long = 0 to qSize - 1 Print *cast(integer ptr ,PopQueue(p)) // Flag 0 is default for non-strings Next DeleteQueue(p) Result: 1 2 3 Example 2: (Storing integers) #include "window9.bi" Dim as Any Ptr p = CreateQueue() PushQueue(p , cast(any ptr , cint(1))) PushQueue(p , cast(any ptr , cint(2))) PushQueue(p , cast(any ptr , cint(3))) dim as long qSize = GetSizeQueue(p) for i as Long = 0 to qSize-1 Print cint(PopQueue(p)) // Flag 0 is default Next DeleteQueue(p) Result: 1 2 3 *** SUB: PushStrQueue Syntax: Sub PushStrQueue(p As Any Ptr , anyValue As USTRING) Description: Adds a new element (storing a string) to the back of the queue. The library manages the string memory. Avoid using with PushQueue in the same queue. Options: p - Queue handle. anyValue - The USTRING value to add. Platform: Windows, Linux Example: (See CreateQueue example) --- SECTION: Data Containers - Stack --- Description: A Last-In, First-Out (LIFO) data structure. *** FUNCTION: CreateStack Syntax: Function CreateStack() As Any Ptr Description: Creates a new, empty stack and returns its handle. Use PushStr/FrontStr for string data, Push/Front for non-string data. Remember to use the correct flag (1 for strings, 0 for non-strings) in PopStack, FreeStack, DeleteStack. Avoid mixing data types. Options: None Platform: Windows, Linux Example: #include "window9.bi" Dim as Any Ptr p = CreateStack() PushStrStack(p , "s1") PushStrStack(p , "s2") PushStrStack(p , "s3") dim as long sSize = GetSizeStack(p) for i as Long = 0 to sSize-1 Print FrontStrStack(p) // Print top PopStack(p,1) // Remove top (use flag 1 for strings) Next DeleteStack(p , 1) Result: s3 s2 s1 *** SUB: DeleteStack Syntax: Sub DeleteStack(p As Any Ptr , bFlagFreeMemoryStrings As Long = 0) Description: Deletes the stack and frees associated memory. Options: p - Stack handle. bFlagFreeMemoryStrings - Set to 1 for string data, 0 otherwise. Platform: Windows, Linux Example: (See CreateStack example) *** SUB: FreeStack Syntax: Sub FreeStack(p As Any Ptr , bFlagFreeMemoryStrings As Long = 0) Description: Removes all elements from the stack, freeing associated memory based on the flag. The stack itself still exists but is empty. Options: p - Stack handle. bFlagFreeMemoryStrings - Set to 1 for string data, 0 otherwise. Platform: Windows, Linux Example: #include "window9.bi" Dim as Any Ptr p = CreateStack() PushStrStack(p , "s1") PushStrStack(p , "s2") PushStrStack(p , "s3") Print GetSizeStack(p) FreeStack(p,1) // Free string data Print GetSizeStack(p) DeleteStack(p , 1) // Still need to delete stack structure Result: 3 0 *** FUNCTION: FrontStack Syntax: Function FrontStack(p As Any Ptr) As Any Ptr Description: Returns the pointer value from the top of the stack without removing it. Returns NULL if empty. Use for non-string data. Options: p - Stack handle (from CreateStack). Platform: Windows, Linux Example: (Using integers) #include "window9.bi" Dim as Any Ptr p = CreateStack() PushStack(p , cast(Any Ptr , cint(1))) // Stack: {1} PushStack(p , cast(Any Ptr , cint(2))) // Stack: {1, 2} PushStack(p , cast(Any Ptr , cint(3))) // Stack: {1, 2, 3} <- top Print cint(FrontStack(p)) // Should print 3 DeleteStack(p) Result: 3 *** FUNCTION: FrontStrStack Syntax: Function FrontStrStack(p As Any Ptr) As USTRING Description: Returns the string value from the top of the stack without removing it. Returns an empty string if empty. Use for string data. Options: p - Stack handle (from CreateStack). Platform: Windows, Linux Example: #include "window9.bi" Dim as Any Ptr p = CreateStack() PushStrStack(p , "s1") // Stack: {"s1"} PushStrStack(p , "s2") // Stack: {"s1", "s2"} PushStrStack(p , "s3") // Stack: {"s1", "s2", "s3"} <- top Print FrontStrStack(p) // Should print s3 DeleteStack(p , 1) // Flag 1 for strings Result: s3 *** FUNCTION: GetSizeStack Syntax: Function GetSizeStack(p As Any Ptr) As Long Description: Returns the number of elements currently on the stack. Options: p - Stack handle. Platform: Windows, Linux Example: (See FreeStack example) *** FUNCTION: PopStack Syntax: Function PopStack(p As Any Ptr , bFlagFreeMemoryStrings As Long = 0) As Any Ptr Description: Removes and returns the element from the top of the stack. If storing strings (bFlagFreeMemoryStrings=1), it frees the string memory and always returns NULL. If storing non-string pointers (bFlagFreeMemoryStrings=0), it returns the pointer value that was removed. Options: p - Stack handle. bFlagFreeMemoryStrings - Set to 1 for string data, 0 otherwise. Platform: Windows, Linux Example: (See CreateStack example for string usage, PushStack example 2 for non-string usage) *** SUB: PushStack Syntax: Sub PushStack(p As Any Ptr , anyValue As Any Ptr) Description: Adds a new element (storing a pointer) to the top of the stack. Does not manage the memory pointed to by anyValue. Integers can be stored using CAST. Avoid using with PushStrStack in the same stack. Options: p - Stack handle. anyValue - Pointer to the data to add. Platform: Windows, Linux Example 1: (Storing pointers) #include "window9.bi" dim as Integer iDim(2) = {1,2,3} Dim as Any Ptr p = CreateStack() PushStack(p , @iDim(0)) // Stack: {&1} PushStack(p , @iDim(1)) // Stack: {&1, &2} PushStack(p , @iDim(2)) // Stack: {&1, &2, &3} <- top dim as long sSize = GetSizeStack(p) for i as Long = 0 to sSize-1 Print *cast(integer ptr ,PopStack(p)) // Flag 0 default Next DeleteStack(p) Result: 3 2 1 Example 2: (Storing integers) #include "window9.bi" Dim as Any Ptr p = CreateStack() PushStack(p , cast(any ptr , cint(1))) // Stack: {1} PushStack(p , cast(any ptr , cint(2))) // Stack: {1, 2} PushStack(p , cast(any ptr , cint(3))) // Stack: {1, 2, 3} <- top dim as long sSize = GetSizeStack(p) for i as Long = 0 to sSize-1 Print cint(PopStack(p)) // Flag 0 default Next DeleteStack(p) Result: 3 2 1 *** SUB: PushStrStack Syntax: Sub PushStrStack(p As Any Ptr , anyValue As USTRING) Description: Adds a new element (storing a string) to the top of the stack. The library manages the string memory. Avoid using with PushStack in the same stack. Options: p - Stack handle. anyValue - The USTRING value to add. Platform: Windows, Linux Example: (See CreateStack example) --- SECTION: Desktop --- Description: Functions related to display and desktop properties. *** FUNCTION: EnumSettingsDisplay Syntax: Function EnumSettingsDisplay() As String Description: Enumerates supported display settings (resolution, color depth, refresh rate). Returns settings as a string like "640x480x32x75". Call ResetEnum before starting a new enumeration. Returns an empty string when no more settings are available. Options: None Platform: Windows Example: #Include "window9.bi" Dim As String Setting Do Setting=EnumSettingsDisplay() If Setting <> "" Then Print Setting Else Exit Do EndIf Loop Sleep(2000) Result: (Lists supported display modes) *** FUNCTION: GetBitsDesktop Syntax: Function GetBitsDesktop(Byref setting As String) As Integer Description: Extracts the color depth (bits per pixel) from a display settings string obtained via EnumSettingsDisplay or GetCurrentSettingsDisplay. Options: setting - The display settings string (e.g., "1920x1080x32x60"). Platform: Windows, Linux Example: #Include "window9.bi" Dim As String Setting=GetCurrentSettingsDisplay() If Setting<>"" Then Print "Width: "; GetWidthDesktop(Setting) Print "Height: "; GetHeightDesktop(Setting) Print "Bits: "; GetBitsDesktop(Setting) Print "Frequency: "; GetFrequencyDesktop(Setting) EndIf Sleep(2000) Result: (Prints current display settings components) *** FUNCTION: GetCurrentSettingsDisplay Syntax: Function GetCurrentSettingsDisplay() As string Description: Returns the current display settings as a string (e.g., "1920x1080x32x60"). Options: None Platform: Windows, Linux Example: (See GetBitsDesktop example) *** FUNCTION: GetDesktopWindow Syntax: function GetDesktopWindow() As Any ptr Description: Returns a handle to the desktop window. (Standard WinAPI function on Windows, provides GDK root window on Linux). Options: None Platform: Windows, Linux Example: #include "window9.bi" Dim As HWND hwnd=GetDesktopWindow() // Example: Print the desktop window content (might require permissions) // HWNDPrinter(hwnd,,,,,600,600) Print "Desktop Handle: "; hwnd ' Just print the handle Sleep(2000) Result: (Prints the handle value) *** FUNCTION: GetFrequencyDesktop Syntax: Function GetFrequencyDesktop(Byref setting As String) As Integer Description: Extracts the refresh rate (Hz) from a display settings string. Options: setting - The display settings string. Platform: Windows, Linux Example: (See GetBitsDesktop example) *** FUNCTION: GetHeightDesktop Syntax: Function GetHeightDesktop(Byref setting As String) As Integer Description: Extracts the height (pixels) from a display settings string. Options: setting - The display settings string. Platform: Windows, Linux Example: (See GetBitsDesktop example) *** FUNCTION: GetWidthDesktop Syntax: Function GetWidthDesktop(Byref setting As String) As Integer Description: Extracts the width (pixels) from a display settings string. Options: setting - The display settings string. Platform: Windows, Linux Example: (See GetBitsDesktop example) *** FUNCTION: ResetEnum Syntax: Function ResetEnum() As Integer Description: Resets the internal counter for the EnumSettingsDisplay function, allowing enumeration from the beginning again. Options: None Platform: Windows Example: #Include "window9.bi" Dim As String Setting Print "First Pass:" Do Setting = EnumSettingsDisplay() If Setting <> "" Then Print Setting Else Exit Do EndIf Loop ResetEnum() Sleep(1000) Print : Print "Second Pass:" Do Setting = EnumSettingsDisplay() If Setting <> "" Then Print Setting Else Exit Do EndIf Loop Sleep(2000) Result: (Lists supported display modes twice) *** FUNCTION: SetCurrentSettingsDisplay Syntax: Function SetCurrentSettingsDisplay(ByVal w As Integer, ByVal h As Integer,ByVal Bits As Integer,ByVal Frequency As Integer) As Integer Description: Attempts to change the current display settings. Requires valid settings obtained from EnumSettingsDisplay. Returns non-zero on success. Use with caution! Options: w - New display width. h - New display height. Bits - New color depth. Frequency - New refresh rate. Platform: Windows Example: (Interactive - Use carefully!) #Include "window9.bi" Dim As String Setting,currentSetting Dim As Integer inputnumber,number=1 currentSetting = GetCurrentSettingsDisplay() Print "Current Settings: " & currentSetting Print "Available Settings:" Do Setting = EnumSettingsDisplay() If Setting <> "" Then Print "Number " & number & Chr(9) & Setting Else Exit Do EndIf number+=1 Loop ResetEnum() number=1 Input "Enter number of desired setting to apply (0 to cancel): "; inputnumber If inputnumber > 0 Then Do Setting = EnumSettingsDisplay() If Setting <> "" Then If inputnumber = number Then Print "Applying: " & Setting SetCurrentSettingsDisplay(GetWidthDesktop(Setting),_ GetHeightDesktop(Setting),GetBitsDesktop(Setting),GetFrequencyDesktop(Setting)) Exit Do EndIf Else Print "Invalid setting number." Exit Do EndIf number+=1 Loop Sleep(5000) // Wait 5 seconds Print "Restoring original settings: " & currentSetting SetCurrentSettingsDisplay(GetWidthDesktop(currentSetting),_ GetHeightDesktop(currentSetting),GetBitsDesktop(currentSetting),GetFrequencyDesktop(currentSetting)) Else Print "Change cancelled." EndIf Sleep(2000) Result: (Interactive console output, attempts to change and restore display settings) --- SECTION: Event --- Description: Constants and functions related to the library's event handling system. *** CONSTANT: EventActivate Syntax: #define EventActivate &H6 Description: Event constant indicating that a window has been activated. Check EventHwnd() to see which window. Options: None Platform: Windows, Linux Example: #Include "window9.bi" Dim As hwnd hwnd,hwnd2 hwnd=OpenWindow("Window 1",10,10,200,200) hwnd2=OpenWindow("Window 2",100,100,200,200) Do Var event=WaitEvent() Select Case event Case EventClose If EventHwnd()=hwnd Then End // Close main loop if hwnd closes If EventHwnd()=hwnd2 Then Close_Window(hwnd2) // Close only hwnd2 Case EventActivate Print "Window Activated: "; eventhwnd() End Select Loop Result: Prints the handle of the window each time it becomes active. *** CONSTANT: EventClose Syntax: #define EventClose &H10 Description: Event constant indicating that a window's close button was clicked or it received a close request. Check EventHwnd() to identify the window. Options: None Platform: Windows, Linux Example: #Include "window9.bi" OpenWindow("Test Close",10,10,200,200) ButtonGadget(1,10,10,100,20, "Button") TextGadget(2,10,50,100,20,"Text") Do Var event=WaitEvent() Select Case event Case EventClose MessBox("Event","EventClose occurred. Exiting."): End Case EventGadget Select Case EventNumber() Case 1: MessBox("Gadget","Button Clicked") Case 2: MessBox("Gadget","Text Gadget Clicked (if SS_NOTIFY style used)") End Select End Select Loop Result: Program exits when the window close button is clicked. *** CONSTANT: EventGadget Syntax: #define EventGadget &h401 Description: Event constant indicating an event occurred related to a gadget (e.g., button click, text change). Use EventNumber() to get the gadget ID and EventHwnd() for the parent window. Options: None Platform: Windows, Linux Example: (See EventClose example) *** FUNCTION: EventHardwareKey Syntax: function EventHardwareKey() as Long Description: Returns the hardware scan code for the key involved in a keyboard event (EventKeyDown, EventKeyUp). This value is independent of keyboard layout or modifier keys (Shift, Ctrl, Alt). Options: None Platform: Linux Example: #Include "window9.bi" Dim As Integer ev OpenWindow("Key Test",10,10,300,300) Print "Press keys..." Do ev=WaitEvent() If ev=EventClose Then end If ev=EventKeyUp Then Print "EventKey (Virtual): "; EventKEY() Print "EventHardwareKey (ScanCode): "; EventHardwareKey() EndIf Loop Result: Prints virtual key code and hardware scan code on key release (Linux only for EventHardwareKey). *** FUNCTION: EventHwnd Syntax: Function EventHwnd() As HWND Description: Returns the handle of the window associated with the current event. Options: None Platform: Windows, Linux Example: (See EventActivate example) *** FUNCTION: EventKey Syntax: Function EventKEY() As Integer Description: Returns the virtual key code associated with the current keyboard or mouse event. For keyboard events (EventKeyDown, EventKeyUp), it's the virtual key code (e.g., VK_A, VK_RETURN). For mouse events (EventLBDown, etc.), it can indicate modifier keys being held (MK_CONTROL, MK_SHIFT). Note: On Linux, key codes can differ based on case and layout. Options: None Platform: Windows, Linux Example: (Keyboard) #Include "window9.bi" Dim As Integer ev Dim As HWND hWnd hwnd=OpenWindow("Key Test",10,10,300,300) Print "Press T or U..." Do ev=WaitEvent() If ev=EventClose Then end If ev=EventKeyUp Then If EventKEY() = VK_T Then // Check for 'T' key windowcolor(hwnd,BGR(255,0,0)) ElseIf EventKEY() = VK_U Then // Check for 'U' key windowcolor(hwnd,BGR(0,255,0)) EndIf EndIf Loop Result: Window changes color when T or U is released. *** CONSTANT: EventKeyDown Syntax: #define EventKeyDown &h100 Description: Event constant indicating a key has been pressed down. Use EventKey() to identify the key. Options: None Platform: Windows, Linux Example: #Include "window9.bi" Dim As Integer ev Dim As HWND hWnd hwnd=OpenWindow("Key Test",10,10,300,300) Print "Hold T or U..." Do ev=WaitEvent() If ev=EventClose Then end If ev=EventKeyDOWN Then If EventKEY()=VK_T Then // 'T' key is pressed down windowcolor(hwnd,BGR(255,0,0)) ElseIf EventKEY()=VK_U Then // 'U' key is pressed down windowcolor(hwnd,BGR(0,255,0)) EndIf EndIf Loop Result: Window changes color while T or U key is held down. *** CONSTANT: EventKeyUp Syntax: #define EventKeyUp &h101 Description: Event constant indicating a key has been released. Use EventKey() to identify the key. Options: None Platform: Windows, Linux Example: (See EventKey example) *** CONSTANT: EventLBDown Syntax: #define EventLBDown &H201 Description: Event constant indicating the left mouse button has been pressed down. EventKey() may contain modifier flags (MK_CONTROL, MK_SHIFT). MouseX() and MouseY() give coordinates. Options: None Platform: Windows, Linux Example: #Include "window9.bi" Dim As hwnd hwnd hwnd=OpenWindow("Mouse Events",10,10,200,200) Do Var event=WaitEvent() Select Case event Case EventClose : Exit Do Case EventLBDown : Print "EventLBDown" Case EventRBDown : Print "EventRBDown" Case EventMBDown : Print "EventMBDown" Case EventLBUp : Print "EventLBUp" Case EventRBUp : Print "EventRBUp" Case EventMBUp : Print "EventMBUp" End Select Loop Result: Prints mouse button events to the console. *** CONSTANT: EventLBUp Syntax: #define EventLBUp &H202 Description: Event constant indicating the left mouse button has been released. EventKey() may contain modifier flags. Options: None Platform: Windows, Linux Example: (See EventLBDown example) *** FUNCTION: EventLParam Syntax: Function EventLParam() As LPARAM Description: Returns the LPARAM value associated with the current window message (relevant when using low-level message handling or certain specific events). For mouse events, LOWORD(EventLParam) often contains the X coordinate, and HIWORD(EventLParam) contains the Y coordinate. Options: None Platform: Windows Example: #Include "window9.bi" Dim As Integer event Dim As HWND hwnd hwnd=OpenWindow("LParam Test",10,10,500,500) : CenterWindow(hwnd) Do event=WindowEvent() If event=EventLBDOWN Then Print "LBUTTONDOWN - X:"; LOWORD(EventLParam()) ; " Y:"; HIWORD(EventLParam()) EndIf If Event=EventClose Then End Loop Result: Prints mouse coordinates from LPARAM on left button down. *** CONSTANT: EventMBDown Syntax: #define EventMBDown &H207 Description: Event constant indicating the middle mouse button has been pressed down. EventKey() may contain modifier flags. Options: None Platform: Windows, Linux Example: (See EventLBDown example) *** CONSTANT: EventMBUp Syntax: #define EventMBUp &H208 Description: Event constant indicating the middle mouse button has been released. EventKey() may contain modifier flags. Options: None Platform: Windows, Linux Example: (See EventLBDown example) *** CONSTANT: EventMenu Syntax: #define EventMenu &h402 Description: Event constant indicating a menu item has been selected. Use EventNumber() to get the menu item ID. Options: None Platform: Windows, Linux Example: #Include "window9.bi" Dim As HMENU menu,MenName,MenName1 Dim As Long event OpenWindow("Menu Test",10,10,400,400) menu=Create_Menu() MenName=MenuTitle(menu,"File") MenName1=MenuTitle(menu,"Help") MenuItem(1001,MenName,"1 Menu") MenuItem(1002,MenName,"2 Menu") Do event=WaitEvent() If event=EventMenu then Select case EventNumber() Case 1001 : MessBox("Menu","1 Menu Clicked") Case 1002 : MessBox("Menu","2 Menu Clicked") End Select EndIf If event=EventClose Then End Loop Result: Shows message boxes when menu items are clicked. *** CONSTANT: EventMouseMove Syntax: #define EventMouseMove &H200 Description: Event constant indicating the mouse cursor has moved within the window's client area. MouseX() and MouseY() give coordinates. EventKey() contains flags for buttons being held down (MK_LBUTTON, MK_MBUTTON, MK_RBUTTON) and modifier keys (MK_CONTROL, MK_SHIFT). Options: None Platform: Windows, Linux Example: #Include "window9.bi" OpenWindow("Mouse Move",10,10,200,200) Do Var event=WaitEvent() Select Case event Case EventClose : Exit Do Case EventMouseMove Print "MOUSE: " & MouseX() & "," & MouseY() If EventKEY() And MK_LBUTTON Then Print " - Left Button Down" If EventKEY() And MK_SHIFT Then Print " - Shift Down" End Select Loop Result: Prints mouse coordinates and button/key state during mouse movement. *** CONSTANT: EventMouseWheel Syntax: #define EventMouseWheel &H20A Description: Event constant indicating the mouse wheel has been scrolled. EventKey() contains modifier flags (MK_CONTROL, MK_SHIFT, MK_LBUTTON, etc.) and the high word indicates the scroll direction/amount (positive for forward/up, negative for backward/down). Options: None Platform: Windows, Linux Example: #Include "window9.bi" Dim As hwnd hwnd dim as Long aa hwnd=OpenWindow("Mouse Wheel",10,10,200,200) TextGadget(1,10,50,100,20,"Scroll Value: 0") Do Var event=WaitEvent() Select Case event Case EventClose : Exit Do Case EventMouseWheel Dim As Integer iEK = EventKEY() Dim wheelDelta as Short = HiWord(iEK) // Get scroll amount/direction Print "Wheel Event. Modifiers: "; LoWord(iEK) ; " Delta: "; wheelDelta If wheelDelta > 0 Then aa+=1 ElseIf wheelDelta < 0 Then aa-=1 EndIf SetGadgetText(1,"Scroll Value: " & Str(aa)) End Select Loop Result: Updates a text gadget with a value that increments/decrements on mouse wheel scroll. *** FUNCTION: EventNumber Syntax: Function EventNumber() As Integer Description: Returns the ID number of the gadget, menu item, or SysTray icon associated with the current event (EventGadget, EventMenu, or SysTray events). Options: None Platform: Windows, Linux Example 1: (Gadgets - See EventClose example) Example 2: (Menu - See EventMenu example) *** FUNCTION: EventNumberListView Syntax: Function EventNumberListView() As Integer Description: Specifically used within mouse events (EventLBDown, EventRBDown, etc.) to get the ID of the ListViewGadget under the cursor when the event occurred. Use this instead of EventNumber() for ListView mouse events. Options: None Platform: Windows, Linux Example: #Include "window9.bi" Var hwnd=OpenWindow("ListView Event",10,10,230,180) ListViewGadget(1,10,10,150,100) // Gadget ID 1 AddListViewColumn(1, "Column",0,0,150) AddListViewItem(1,"item 1", 0 ,0,0) AddListViewItem(1,"item 2", 0 ,1,0) TextGadget(2,170,20,40,30) SetGadgetColor(2,255,&hff0000,3) SetGadgetfont(2,LoadFont("",22)) Do Var event=WaitEvent() If Event=EventClose Then End If event=EventLBDown Then If EventNumberListView()=1 Then // Check if click was on ListView ID 1 SetGadgetText(2,Str( GetItemListView())) // Get clicked item index EndIf EndIf Loop Result: Displays the clicked item index in the text gadget when the ListView is clicked. *** FUNCTION: EventNumberToolBar Syntax: Function EventNumberToolBar() As Integer Description: Returns the button ID associated with a toolbar event (usually within EventGadget). Options: None Platform: Windows, Linux Example: #Include "window9.bi" Dim As Integer hwToolBar dim as HWND hwnd #Ifdef __FB_WIN32__ Var iStyle = TBSTYLE_FLAT Or TBSTYLE_TOOLTIPS // Use defined constant #Else Var iStyle = TBSTYLE_TOOLTIPS #EndIf hwnd=OpenWindow("Toolbar Event",10,10,185,100) CenterWindow(hwnd) hwToolBar=CreateToolBar(,iStyle) Dim As String sStr(2) = {"Open" , "Cut" , "Copy"} ToolBarStandardButton(hwToolBar,1,STD_FILEOPEN,sStr(0)) // Button ID 1 ToolBarStandardButton(hwToolBar,2,STD_CUT, sStr(1)) // Button ID 2 ToolBarStandardButton(hwToolBar,3,STD_COPY, sStr(2)) // Button ID 3 ToolBarToolTip(hwnd,1,sStr(0)) ToolBarToolTip(hwnd,2,sStr(1)) ToolBarToolTip(hwnd,3,sStr(2)) Do Var ev=WaitEvent() If ev=EventClose Then End ElseIf ev=EventGadget Then // Toolbar events come as Gadget events Select Case EventNumberToolBar() // Get the specific toolbar button ID Case 1 To 3 : MessBox("Toolbar","Button Number " & EventNumberToolBar()) End Select EndIf Loop Result: Shows a message box indicating which toolbar button was clicked. *** FUNCTION: EventNumberTreeView Syntax: Function EventNumberTreeView() As Integer Description: Specifically used within mouse events (EventLBDown, EventRBDown, etc.) to get the ID of the TreeViewGadget under the cursor when the event occurred. Use this instead of EventNumber() for TreeView mouse events. Options: None Platform: Windows, Linux Example: #Include "window9.bi" Dim As Integer event Dim As HWND hwnd,tree #Ifdef __FB_WIN32__ Var iStyle = TVS_HASLINES or TVS_HASBUTTONS or TVS_LINESATROOT #Else Var iStyle = 0 #EndIf hwnd=OpenWindow("TreeView Event",10,10,180,200) : CenterWindow(hwnd) Dim As HBITMAP hbmp = Load_image("1.png") Dim As HBITMAP hbmp1 = Load_image("2.png") tree=TreeViewGadget(1,10,10,140,140,iStyle , 0 ,32) // Gadget ID 1 Var Pos_=AddTreeViewItem(1,"1",hbmp,hbmp1,TVI_FIRST) AddTreeViewItem(1,"1-1",hbmp,hbmp1,TVI_FIRST,Pos_) Pos_=AddTreeViewItem(1,"2",hbmp,hbmp1,Pos_) AddTreeViewItem(1,"2-1",hbmp,hbmp1,TVI_FIRST,Pos_) Do event=waitevent() If event=EventClose Then End If event=eventLBDOWN Then If EventNumberTreeView()=1 Then // Check if click was on TreeView ID 1 Print GetItemTreeView(1) // Get clicked item handle (TVI_...) EndIf EndIf Loop Result: Prints the handle of the clicked TreeView item to the console. *** CONSTANT: EventRBDown Syntax: #define EventRBDown &H204 Description: Event constant indicating the right mouse button has been pressed down. EventKey() may contain modifier flags. Options: None Platform: Windows, Linux Example: (See EventLBDown example) *** CONSTANT: EventRBUp Syntax: #define EventRBUp &H205 // Note: Original help had typo (&H205 matches standard WM_RBUTTONUP) Description: Event constant indicating the right mouse button has been released. EventKey() may contain modifier flags. Options: None Platform: Windows, Linux Example: (See EventLBDown example) *** CONSTANT: EventSize Syntax: #Define EventSize &h5 Description: Event constant indicating that a window has been resized. Use w9SizeWidth() and w9SizeHeight() to get the new client area dimensions. Options: None Platform: Windows, Linux Example: #Include "window9.bi" Dim As hwnd hwnd hwnd=OpenWindow("Resize Test",10,10,200,200) TextGadget(1,10,10,150,30,"Resize the window.") Do Var event=WaitEvent() Select Case event Case EventClose : Exit Do Case EventSize Print "New Size: "; w9SizeWidth() & " x " & w9SizeHeight() End Select Loop Result: Prints the new client area dimensions to the console whenever the window is resized. *** FUNCTION: w9SizeHeight Syntax: Function w9SizeHeight() As Integer Description: Returns the new height of the window's client area after an EventSize event has occurred. Options: None Platform: Windows, Linux Example: (See EventSize example, or example using timer) #Include "window9.bi" Dim As hwnd hwnd hwnd=OpenWindow("Resize Test",10,10,200,200) TextGadget(1,10,10,150,30,"Resize the window. ") function rr() As Integer Static As Integer aa,bb If aa <> w9SizeWidth() Or bb<>w9SizeHeight() then // Check if size changed Print "Timer Check: "; w9SizeWidth() & " " & w9SizeHeight() aa=w9SizeWidth() : bb=w9SizeHeight() EndIf Return TRUE End Function SetTimer(hwnd,1,15,Cast(Any Ptr,@rr)) // Check periodically Do Var event=WaitEvent() Select Case event Case EventClose : Exit Do End Select Loop Result: Prints new dimensions periodically if the window is resized. *** FUNCTION: w9SizeWidth Syntax: Function w9SizeWidth() As Integer Description: Returns the new width of the window's client area after an EventSize event has occurred. Options: None Platform: Windows, Linux Example: (See EventSize and w9SizeHeight examples) *** FUNCTION: SetTimer Syntax: function SetTimer(hwnd as HWND, idEvent as Uinteger, uElapse as Uinteger, lpTimerFunc as any ptr) as Uinteger Description: Creates a timer associated with a specific window. Returns a timer ID if successful, 0 otherwise. Use KillTimer to destroy the timer. Options: hwnd - Handle of the window to receive timer messages or associate the callback with. idEvent - A non-zero timer identifier. uElapse - Timeout interval in milliseconds. Minimum advisable value on Linux is ~5ms. lpTimerFunc - Pointer to a callback function (TimerProc) to be called when the timer elapses. If 0, WM_TIMER messages (EventTimer) are sent to the window's event loop (WaitEvent/WindowEvent). Using a callback function is generally recommended. Callback prototype: Function MyTimerProc() As Integer (return TRUE to continue timer, FALSE might affect behavior depending on OS/implementation details - usually ignored, use KillTimer to stop). Platform: Windows, Linux Example: (Using callback) #Include "window9.bi" Dim As Integer event Dim Shared As HWND hwnd Function setText() As Integer Dim As String sz = "CAPTION" Static As Long i , j If i = Len(sz) Then j = 1 ElseIf i = 0 Then j = 0 EndIf // Cycle index If j = 0 Then i+=1 Else i-=1 EndIf SetWindowText(hwnd,Left(sz,i)) // Update window title Return TRUE // Keep timer running End Function hwnd = OpenWindow("",300,10,250,100) ButtonGadget(1,10,10,150,30,"Disable timer") SetTimer(hwnd,1,100,Cast(Any Ptr,@setText)) // Timer ID 1, 100ms interval Do event=WaitEvent() If event=EventClose Then Exit Do ElseIf event = eventgadget Then If EventNumber() = 1 Then KillTimer(hwnd,1) // Stop timer on button click EndIf Loop Result: Window title animates "C", "CA", "CAP", ..., "CAPTION", ..., "CAP", "CA", "C", ... until button is clicked. *** FUNCTION: KillTimer Syntax: function KillTimer(hwnd as HWND, IDEvent as Uinteger) as Bool Description: Destroys the specified timer associated with the window. Returns non-zero on success. Options: hwnd - Handle of the window the timer is associated with. IDEvent - The identifier of the timer to destroy (same as used in SetTimer). Platform: Windows, Linux Example: (See SetTimer example) *** CONSTANT: EventTimer Syntax: #Define EventTimer &H113 Description: Event constant indicating a timer set with lpTimerFunc=0 has elapsed. EventNumber() contains the timer ID (idEvent from SetTimer). Options: None Platform: Windows, Linux Example: (Using event loop) #Include "window9.bi" Dim As hwnd hwnd,hwnd2 hwnd=OpenWindow("Timer 1",10,10,200,200) hwnd2=OpenWindow("Timer 2",220,10,200,200) SetTimer(hwnd,1,1200,0) // Timer ID 1 for window hwnd SetTimer(hwnd2,2,1700,0) // Timer ID 2 for window hwnd2 Do Var event=WindowEvent() // Use WindowEvent or WaitEvent Select Case event Case EventClose : Exit Do Case EventTimer Select Case EventNumber() // Check which timer fired Case 1 WindowColor(hwnd,BGR(0,255,0)) : WindowColor(hwnd2,BGR(0,0,255)) Case 2 WindowColor(hwnd,BGR(0,0,255)) : WindowColor(hwnd2,BGR(255,0,0)) End Select End Select sleep(1) Loop Result: The two windows periodically change color based on their respective timers. *** FUNCTION: EventWParam Syntax: Function EventWParam() As WPARAM Description: Returns the WPARAM value associated with the current window message. For mouse events, often contains flags indicating which keys/buttons were held down (MK_CONTROL, MK_SHIFT, MK_LBUTTON, etc.). Options: None Platform: Windows Example: #Include "window9.bi" Dim As Integer event CenterWindow(OpenWindow("WParam Test",10,10,500,500)) Do event=WindowEvent() If event=EventLBDOWN Then Print "LBUTTONDOWN - WParam (Key Flags):"; EventWParam() ' Key flags: MK_CONTROL, MK_LBUTTON, MK_MBUTTON, MK_RBUTTON, MK_SHIFT EndIf If Event=EventClose Then End Loop Result: Prints the WPARAM value (key/button state flags) when the left mouse button is pressed. *** FUNCTION: WaitEvent Syntax: Function WaitEvent() As Long Description: Waits for the next event to occur in the application and returns the event code. The program loop pauses until an event happens, reducing CPU usage compared to WindowEvent. Options: None Platform: Windows, Linux Example: (See EventClose example) *** FUNCTION: WindowEvent Syntax: Function WindowEvent() As Long Description: Checks for pending events and returns the event code if one occurred, otherwise returns 0. The program loop continues to run even if no event occurs. Can lead to high CPU usage if not paired with Sleep or similar delay mechanism. Options: None Platform: Windows, Linux Example: #Include "window9.bi" OpenWindow("WindowEvent Test",10,10,200,200) ButtonGadget(1,10,10,100,20, "Button") TextGadget(2,10,50,100,20,"Text") Do Var event=WindowEvent() // Poll for events Sleep(15) // IMPORTANT: Add sleep to prevent 100% CPU usage Select Case event Case EventClose : End // Exit loop on close Case EventGadget Select Case EventNumber() Case 1 : MessBox("Event","Button Clicked") Case 2 : MessBox("Event","Text Gadget Clicked") End Select End Select Loop Result: Standard window behavior, responds to events without consuming excessive CPU. --- SECTION: Dialog --- Description: Pre-built dialog boxes for common tasks. *** FUNCTION: FontRequester Syntax: function FontRequester(byval hwnd As HWND = 0, byval nColor As Integer = 0) As Integer ' Returns HFONT handle Description: Opens a standard system dialog for selecting a font. Returns the HFONT handle of the selected font. After calling, use SelectedFontName(), SelectedFontColor() (Win only), SelectedFontSize(), SelectedFontStyle() to get specific properties. Options: hwnd - Parent window handle for the dialog. nColor - (Windows only) Initial color selected in the dialog. Platform: Windows, Linux Example: #Include "window9.bi" OpenWindow("Font Requester",10,10,200,200) Var font = FontRequester() If font Then Print "Selected Font Name: "; SelectedFontName() Print "Selected Font Size: "; SelectedFontSize() ' Print "Selected Font Color (Win): "; SelectedFontColor() ' Windows only Print "Is Italic?: "; SelectedFontStyle(2) SetGadgetFont(,font) // Set as default for subsequent gadgets ButtonGadget(1,10,10,100,20,"Button") ' FreeFont(font) ' Free font when no longer needed Else Print "Font selection cancelled." EndIf Do Var event=WaitEvent() Select Case event Case EventClose : Exit Do End Select Loop Result: Opens a font dialog. Prints selected font info to console. Button uses selected font. *** FUNCTION: InputBox Syntax: Function InputBox(ByRef Caption As String="", ByRef Message As String="Enter text:", ByRef DefaultString As String="", ByVal flag As Integer=0, ByVal flag2 As Integer=0, hParentWin as Hwnd = 0) As String Description: Displays a simple dialog box to get text input from the user. Returns the entered string or an empty string if cancelled. Options: Caption - Text for the dialog window title bar. Message - Prompt message displayed above the input field. DefaultString - Initial text displayed in the input field. flag - (Windows only) Style flags for the input field (e.g., ES_PASSWORD, ES_NUMBER, ES_MULTILINE, ES_CENTER - see original doc for full list). flag2 - If non-zero, the DefaultString is automatically selected/cleared when the user starts typing. hParentWin - Parent window handle for the dialog. Platform: Windows, Linux Example: #Include "window9.bi" Dim As String userInput userInput = InputBox("Input Needed", "Please enter your name:", "Default Name", 0, 1) If userInput <> "" Then MessBox("Input Received", "You entered: " & userInput) Else MessBox("Input Cancelled", "No input was provided.") EndIf Sleep(1000) Result: Displays an input dialog and then a message box with the result. *** FUNCTION: MessBox / MsgBox Syntax (Cross-Platform): Function MessBox(ByRef Caption As String, ByRef Message As String, ByVal flag As Integer=0,ByVal ParentWin as Hwnd = 0) As Integer Syntax (Windows Only): Function MsgBox(ByRef Caption As String, ByRef Message As String, ByVal flag As Integer=0,ByVal ParentWin as Hwnd = 0) As Integer Description: Displays a standard message box with text, optional icons, and buttons. Returns a value indicating which button was pressed (e.g., IDYES, IDNO, IDCANCEL, IDOK). Use MessBox for cross-platform compatibility. Options: Caption - Text for the message box title bar. Message - The main text message to display. flag - Combination of flags to control buttons, icons, default button, and modality. - Buttons (Combine one): MB_OK (default), MB_OKCANCEL, MB_YESNO, MB_YESNOCANCEL, MB_RETRYCANCEL (Win), MB_ABORTRETRYIGNORE (Win). - Icons (Combine one, optional): MB_ICONINFORMATION, MB_ICONQUESTION, MB_ICONEXCLAMATION, MB_ICONSTOP. - Default Button (Combine one, optional, Win only): MB_DEFBUTTON1, MB_DEFBUTTON2, MB_DEFBUTTON3, MB_DEFBUTTON4. - Modality (Combine one, optional, Win only): MB_APPLMODAL, MB_SYSTEMMODAL, MB_TASKMODAL. - Other (Combine as needed, Win only): MB_HELP, MB_RIGHT, MB_RTLREADING, MB_SETFOREGROUND, MB_TOPMOST, etc. ParentWin - Parent window handle. Recommended on Linux/GTK3 to avoid warnings. Platform: Windows, Linux (Linux supports basic button/icon combinations) Example: #Include "window9.bi" Dim As Integer result result = MessBox("Question?", "Do you want to proceed?", MB_YESNO Or MB_ICONQUESTION) If result = IDYES Then MessBox("Result", "You clicked Yes.") ElseIf result = IDNO Then MessBox("Result", "You clicked No.") End If Result: Displays a question message box with Yes/No buttons, then a result box. *** FUNCTION: NextSelectedFilename Syntax: Function NextSelectedFilename() As String Description: Used after calling OpenFileRequester with the OFN_ALLOWMULTISELECT flag to retrieve subsequent selected filenames when multiple files are chosen. Returns an empty string when no more files are available in the selection. Options: None Platform: Windows, Linux Example: #Include "window9.bi" #ifdef UNICODE // For Unicode, use "|" as separator in pattern if needed, but not required for OFN flags. Var Pattern = "Text files (*.txt, *.ini, *.doc)|*.txt;*.ini;*.doc|" #else Var Pattern = "Text files (*.txt, *.ini, *.doc)"+Chr(0)+"*.txt;*.ini;*.doc"+Chr(0)+Chr(0) #EndIf Var firstFile = OpenFileRequester("Select Files","C:\", Pattern ,OFN_ALLOWMULTISELECT) If firstFile <> "" Then Print "Selected:" Print firstFile // Print the first file path (might be directory if multiple selected) Dim As String nextFile = firstFile While nextFile <> "" nextFile = NextSelectedFilename() // Get subsequent files If nextFile <> "" Then Print nextFile Wend EndIf Sleep(2000) Result: Opens a file dialog allowing multiple selections. Prints the selected file paths to the console. *** FUNCTION: OpenFileRequester Syntax: Function OpenFileRequester(ByRef Title As String, ByRef curentdir As String, ByRef Pattern As String = "All files(*.*)|*.*|", ByVal flag As Integer=0, ByRef templateName As String = "", ByVal hParentWin as HWND = 0) As String Description: Opens a standard system dialog box for selecting one or more files to open. Returns the full path of the selected file(s). Options: Title - Text for the dialog window title bar. curentdir - Initial directory displayed in the dialog. Pattern - File filter pattern string. Format: "Description1|*.ext1;*.ext2|Description2|*.ext3|" (UNICODE) or "Description1"+Chr(0)+"*.ext1;*.ext2"+Chr(0)+"Description2"+Chr(0)+"*.ext3"+Chr(0)+Chr(0) (ASCII). flag - Dialog flags: - Common: OFN_ALLOWMULTISELECT (allow multiple file selection). - Linux Only: OFN_DIRECTORY (select folders instead of files). - Windows Only: OFN_CREATEPROMPT, OFN_ENABLEHOOK, OFN_ENABLETEMPLATE*, OFN_EXTENSIONDIFFERENT, OFN_FILEMUSTEXIST, OFN_HIDEREADONLY, OFN_LONGNAMES, OFN_NOCHANGEDIR, OFN_NODEREFERENCELINKS, OFN_NOLONGNAMES, OFN_NONETWORKBUTTON, OFN_NOREADONLYRETURN, OFN_NOTESTFILECREATE, OFN_NOVALIDATE, OFN_OVERWRITEPROMPT, OFN_PATHMUSTEXIST, OFN_READONLY, OFN_SHAREAWARE, OFN_SHOWHELP. templateName - (Windows only) Default filename to display initially. hParentWin - Parent window handle. Platform: Windows, Linux Example 1: (Multiple Selection - See NextSelectedFilename example) Example 2: (Single Selection) #Include "window9.bi" #ifdef UNICODE Var Pattern = "Text files (*.txt, *.ini, *.doc)|*.txt;*.ini;*.doc|" #else Var Pattern = "Text files (*.txt, *.ini, *.doc)"+Chr(0)+"*.txt;*.ini;*.doc"+Chr(0)+Chr(0) #EndIf Dim As String selectedFile selectedFile = OpenFileRequester("Open File","C:\", Pattern) If selectedFile <> "" Then MessBox("File Selected", selectedFile) Else MessBox("Cancelled", "No file selected.") EndIf Sleep(1000) Result: Opens a file dialog; displays the selected file path in a message box. *** FUNCTION: SaveFileRequester Syntax: Function SaveFileRequester(ByRef Title As String, ByRef Curentdir As String, ByRef Pattern As String = "All files(*.*)|*.*|", ByVal Defaultsetpattern As bool=0, ByRef TemplateName As String = "", ByVal hParentWin as HWND = 0) As String Description: Opens a standard system dialog box for selecting a filename and path to save a file. Returns the full path entered/selected by the user. Options: Title - Text for the dialog window title bar. Curentdir - Initial directory displayed in the dialog. Pattern - File filter pattern string (see OpenFileRequester for format). Defaultsetpattern - (Windows only) If 1, automatically appends the default extension from the selected filter if the user doesn't provide one. TemplateName - Default filename to display initially. hParentWin - Parent window handle. Platform: Windows, Linux Example: #Include "window9.bi" #ifdef UNICODE Var Pattern = "Text files (*.txt)|*.txt|All Files (*.*)|*.*|" #else Var Pattern = "Text files (*.txt)"+Chr(0)+"*.txt"+Chr(0)+"All Files (*.*)"+Chr(0)+"*.*"+Chr(0)+Chr(0) #EndIf Dim As String savePath savePath = SaveFileRequester("Save As","C:\", Pattern, 1, "default.txt") If savePath <> "" Then MessBox("Save Path", savePath) Else MessBox("Cancelled", "Save operation cancelled.") EndIf Sleep(1000) Result: Opens a save file dialog; displays the chosen path in a message box. *** FUNCTION: ShellFolder Syntax: Function ShellFolder(byRef NameDialog as string, ByRef DefaultFolder as String, ByVal FlagOption As Integer=BIF_RETURNONLYFSDIRS Or BIF_USENEWUI, ByVal hParentWin as HWND = 0) as String Description: Opens a Windows Shell dialog box specifically for selecting folders. Returns the selected folder path. Options: NameDialog - Title/prompt displayed in the dialog. DefaultFolder - Initial folder selected when the dialog opens. FlagOption - Flags controlling the dialog's behavior (e.g., BIF_RETURNONLYFSDIRS, BIF_USENEWUI, BIF_BROWSEFORCOMPUTER - see original doc for more). hParentWin - Parent window handle. Platform: Windows Example: #Include "Window9.bi" Dim As String selectedFolder selectedFolder = ShellFolder( "Select Installation Folder", "C:\Program Files") If selectedFolder <> "" Then MessBox("Folder Selected", selectedFolder) Else MessBox("Cancelled", "No folder selected.") EndIf sleep(1000) Result: Opens a folder selection dialog; displays the result. --- SECTION: File --- Description: Basic functions for creating, opening, reading from, and writing to files using handles. *** SUB: Close_File Syntax: Sub Close_File(Byref H As HANDLE) Description: Closes a file previously opened with Create_File, Open_File, or Read_File, releasing the file handle. Options: H - File handle to close. Platform: Windows, Linux Example: #Include "window9.bi" Var handle=Create_File("Example.txt") If handle <> Cast(Any Ptr,-1) Then Write_Byte(handle,56) Write_Byte(handle,47) Close_file(handle) // Close the file Else Print "Error creating file." EndIf // Example reopening (optional): handle=Read_file("Example.txt") If handle <> Cast(Any Ptr,-1) Then Print "Read after reopen: "; Read_Byte(handle) Close_file(handle) Else Print "Error reopening file." EndIf Sleep(1000) Result: (Creates Example.txt with bytes 56, 47. Console output shows 56 if reopen succeeds). *** FUNCTION: Create_File Syntax: Function Create_File(ByRef FileName As String,ByVal flag As Integer=FILE_ATTRIBUTE_NORMAL) As HANDLE Description: Creates a new file for reading and writing. If the file exists, it is overwritten. Returns a file handle or -1 (casted to Any Ptr) on failure. Options: FileName - Full path and name of the file to create. flag - (Windows only) File attributes and flags (e.g., FILE_ATTRIBUTE_HIDDEN, FILE_FLAG_DELETE_ON_CLOSE - see original doc for extensive list). Default is FILE_ATTRIBUTE_NORMAL. Platform: Windows, Linux Example: (See Close_File example) *** FUNCTION: E_O_F (End Of File) Syntax: Function E_O_F(ByVal fileHandle As HANDLE) As Long Description: Checks if the end of the file has been reached during read operations. Returns 1 if EOF is reached, 0 otherwise. Options: fileHandle - Handle of the file being read. Platform: Windows, Linux Example: #Include "window9.bi" Var handle=Create_File("Example.txt") If handle <> Cast(Any Ptr,-1) Then Write_String(handle,"FB") : Close_file(handle) handle=Read_file("Example.txt") If handle <> Cast(Any Ptr,-1) Then While E_O_F(handle)=0 // Loop until end of file Print Read_Character(handle) wend Close_file(handle) EndIf Sleep(1000) Result: F B *** FUNCTION: Get_File_Pointer Syntax: Function Get_File_Pointer(ByVal fileHandle As HANDLE) As Integer ' Should likely be Long or LongInt for large files Description: Returns the current position (offset in bytes from the beginning) of the file pointer. Options: fileHandle - Handle of the open file. Platform: Windows, Linux Example: #Include "window9.bi" Var handle=Create_File("Example.txt") If handle <> Cast(Any Ptr, -1) Then Write_StringN(handle,"Line1") Write_StringN(handle,"Line2") Close_file(handle) EndIf handle=Read_file("Example.txt") If handle <> Cast(Any Ptr, -1) Then Print Read_string(handle) // Read "Line1" + newline Print "Pointer after reading Line1: "; Get_File_Pointer(Handle) Set_File_Pointer(Handle, 0, FILE_BEGIN) // Seek back to beginning (using constant) Print "Pointer after seeking to start: "; Get_File_Pointer(Handle) Print Read_string(handle); // Read "Line1" again Print Read_string(handle) // Read "Line2" Close_file(handle) EndIf sleep(1000) Result: (Shows pointer positions after reads/seeks) *** FUNCTION: Open_File Syntax: Function Open_File(ByRef FileName As String,ByVal flag As Integer=FILE_ATTRIBUTE_NORMAL) As HANDLE Description: Opens an existing file for reading and writing. If the file doesn't exist, it creates it. Returns a file handle or -1 (casted to Any Ptr) on failure. Options: FileName - Full path and name of the file to open/create. flag - (Windows only) File attributes and flags (see Create_File for list). Platform: Windows, Linux Example: (Similar to Create_File, but doesn't explicitly overwrite) #Include "window9.bi" Var handle=Open_File("Example.txt") // Open or create If handle <> Cast(Any Ptr,-1) Then Write_Byte(handle,56) Set_File_Pointer(handle, 0, FILE_BEGIN) // Go to start to read back Print "Read byte: "; Read_Byte(handle) Close_file(handle) EndIf Sleep(1000) Result: (Creates/opens Example.txt, writes 56, reads it back. Console shows 56). *** FUNCTION: Read_Byte Syntax: Function Read_Byte(ByVal fileHandle As HANDLE) As Byte Description: Reads a single byte from the current file pointer position and advances the pointer. Options: fileHandle - Handle of the open file. Platform: Windows, Linux Example: (See Close_File example) *** FUNCTION: Read_Character Syntax: Function Read_Character(ByVal fileHandle As HANDLE) As String Description: Reads a single character (1 byte) from the current file pointer position and returns it as a string. Advances the pointer. Assumes single-byte encoding. Options: fileHandle - Handle of the open file. Platform: Windows, Linux Example: (See E_O_F example) *** SUB: Read_Data Syntax: sub Read_Data(ByVal fileHandle As HANDLE,ByRef pMemory As Byte ptr ,ByVal Lenght As Integer) Description: Reads a specified number of bytes from the file into a pre-allocated memory buffer. Options: fileHandle - Handle of the open file. pMemory - Pointer to the destination memory buffer. Must be large enough to hold 'Lenght' bytes. Lenght - Number of bytes to read. Platform: Windows, Linux Example: #Include "window9.bi" Dim As Byte Ptr data_buffer Var handle=Create_File("Example.txt") If handle <> Cast(Any Ptr, -1) Then Write_String(handle,"FreeBasic") : Close_File(handle) handle=Read_file("Example.txt") If handle <> Cast(Any Ptr, -1) Then Dim dataSize As Long = Size_File(handle) If dataSize > 0 Then data_buffer=Allocate(dataSize) // Allocate buffer Read_Data(handle, data_buffer, dataSize) // Read into buffer For a As Integer=0 To dataSize-1 Print Chr(data_buffer[a]) // Print characters Next DeAllocate(data_buffer) // Free buffer EndIf Close_File(handle) EndIf Sleep(1000) Result: (Prints characters F r e e B a s i c) *** FUNCTION: Read_DataA Syntax: Function Read_DataA(ByVal fileHandle As HANDLE, ByVal Lenght As Integer) As Byte Ptr Description: Reads a specified number of bytes from the file, allocates memory for it, and returns a pointer to the allocated buffer. The caller must free this memory using DeAllocate. Options: fileHandle - Handle of the open file. Lenght - Number of bytes to read and allocate. Platform: Windows, Linux Example: #Include "window9.bi" Dim As Byte Ptr data_ptr Var handle=Create_File("Example.txt") If handle <> Cast(Any Ptr, -1) Then Write_String(handle,"FreeBasic") : Close_File(handle) handle=Read_file("Example.txt") If handle <> Cast(Any Ptr, -1) Then Dim dataSize As Long = Size_File(handle) If dataSize > 0 Then data_ptr=Read_DataA(handle, dataSize) // Read and allocate If data_ptr Then For a As Integer=0 To dataSize-1 Print data_ptr[a] // Print byte values Next DeAllocate(data_ptr) // Free allocated memory EndIf EndIf Close_File(handle) EndIf Sleep(1000) Result: (Prints ASCII values for F, r, e, e, B, a, s, i, c) *** FUNCTION: Read_DataS Syntax: Function Read_DataS(ByVal fileHandle As HANDLE, ByVal Lenght As Integer) As Byte Ptr Description: Reads a specified number of bytes, allocates memory (Length + 1 byte), adds a null terminator, and returns a pointer suitable for use with string functions like PeekS. Caller must free memory using DeAllocate. Options: fileHandle - Handle of the open file. Lenght - Number of bytes to read (excluding null terminator). Platform: Windows, Linux Example: #Include "window9.bi" Dim As Byte Ptr data_ptr Var handle=Create_File("Example.txt") If handle <> Cast(Any Ptr, -1) Then Write_String(handle,"FreeBasic") : Close_file(handle) handle=Read_file("Example.txt") If handle <> Cast(Any Ptr, -1) Then Dim dataSize As Long = Size_File(handle) If dataSize > 0 Then data_ptr=Read_DataS(handle, dataSize) // Read and allocate (+null) If data_ptr Then Print PeekS(data_ptr) // Print as string DeAllocate(data_ptr) // Free allocated memory EndIf EndIf Close_file(handle) EndIf Sleep(1000) Result: FreeBasic *** FUNCTION: Read_Double Syntax: Function Read_Double(ByVal fileHandle As HANDLE) As Double Description: Reads an 8-byte double-precision floating-point number from the current file pointer position. Options: fileHandle - Handle of the open file. Platform: Windows, Linux Example: #Include "window9.bi" Var handle=Create_File("Example.txt") If handle <> Cast(Any Ptr, -1) Then Write_Double(handle, 123.456789) : Close_file(handle) handle=Read_file("Example.txt") If handle <> Cast(Any Ptr, -1) Then Print Read_Double(handle) : Close_file(handle) Sleep(1000) Result: 123.456789 *** FUNCTION: Read_File Syntax: Function Read_File(ByRef FileName As String,ByVal flag As Integer=FILE_ATTRIBUTE_NORMAL) As HANDLE Description: Opens an existing file for reading only. Returns a file handle or -1 (casted to Any Ptr) if the file doesn't exist or cannot be opened. Options: FileName - Full path and name of the file to open. flag - (Windows only) File attributes and flags (see Create_File for list - primarily relevant attributes like FILE_FLAG_SEQUENTIAL_SCAN might be useful here). Platform: Windows, Linux Example: (See Close_File example's reopening part) *** FUNCTION: Read_Integer Syntax: Function Read_Integer(ByVal fileHandle As HANDLE) As Long ' Assuming Long is 32-bit Integer Description: Reads a 4-byte signed integer from the current file pointer position. Options: fileHandle - Handle of the open file. Platform: Windows, Linux Example: #Include "window9.bi" Var handle=Create_File("Example.txt") If handle <> Cast(Any Ptr, -1) Then Write_Integer(handle, 123456) : Close_file(handle) handle=Read_file("Example.txt") If handle <> Cast(Any Ptr, -1) Then Print Read_Integer(handle) : Close_file(handle) Sleep(1000) Result: 123456 *** FUNCTION: Read_LONGINT Syntax: Function Read_LongInt(ByVal fileHandle As HANDLE) As LongInt ' Assuming LongInt is 64-bit Integer Description: Reads an 8-byte signed integer (LongInt) from the current file pointer position. Options: fileHandle - Handle of the open file. Platform: Windows, Linux Example: #Include "window9.bi" Var handle=Create_File("Example.txt") If handle <> Cast(Any Ptr, -1) Then Write_LONGINT(handle, 9876543210) : Close_file(handle) handle=Read_file("Example.txt") If handle <> Cast(Any Ptr, -1) Then Print Read_LONGINT(handle) : Close_file(handle) Sleep(1000) Result: 9876543210 *** FUNCTION: Read_Single Syntax: Function Read_Single(ByVal fileHandle As HANDLE) As Single Description: Reads a 4-byte single-precision floating-point number from the current file pointer position. Options: fileHandle - Handle of the open file. Platform: Windows, Linux Example: #Include "window9.bi" Var handle=Create_File("Example.txt") If handle <> Cast(Any Ptr, -1) Then Write_Single(handle, 123.456) : Close_file(handle) handle=Read_file("Example.txt") If handle <> Cast(Any Ptr, -1) Then Print Read_Single(handle) : Close_file(handle) Sleep(1000) Result: 123.456 *** FUNCTION: Read_String Syntax: Function Read_String(ByVal fileHandle As HANDLE) As String Description: Reads a line of text from the file, up to a newline character (CR/LF or LF). Newline characters are not included in the returned string. Advances the file pointer past the newline. Options: fileHandle - Handle of the open file. Platform: Windows, Linux Example: (See Write_StringN example) *** FUNCTION: Read_WORD Syntax: Function Read_Word(ByVal fileHandle As HANDLE) As Short ' Assuming Short is 16-bit WORD Description: Reads a 2-byte signed integer (Short/Word) from the current file pointer position. Options: fileHandle - Handle of the open file. Platform: Windows, Linux Example: #Include "window9.bi" Var handle=Create_File("Example.txt") If handle <> Cast(Any Ptr, -1) Then Write_Word(handle, 12345) : Close_File(handle) handle=Read_file("Example.txt") If handle <> Cast(Any Ptr, -1) Then Print Read_Word(handle) : Close_file(handle) sleep(1000) Result: 12345 *** SUB: Set_File_Pointer Syntax: sub Set_File_Pointer(ByVal fileHandle As HANDLE,ByVal Pos As LongInt, ByVal flag As Integer=FILE_CURRENT) ' Use LongInt for Pos Description: Sets the file pointer to a new position within the file. Options: fileHandle - Handle of the open file. Pos - The offset (in bytes) to move the pointer. Can be positive (forward) or negative (backward). flag - Starting point for the offset: FILE_BEGIN (0, from start), FILE_CURRENT (1, from current position), FILE_END (2, from end of file). Platform: Windows, Linux Example: (See Get_File_Pointer example) *** FUNCTION: Size_File Syntax: Function Size_File(ByVal fileHandle As HANDLE) As LongInt ' Should be LongInt for large files Description: Returns the total size of the open file in bytes. Options: fileHandle - Handle of the open file. Platform: Windows, Linux Example: (See Read_DataS example) *** SUB: Write_Byte Syntax: sub Write_Byte(ByVal fileHandle As HANDLE, ByVal value As Byte) Description: Writes a single byte to the file at the current file pointer position. Options: fileHandle - Handle of the open file. value - The byte value to write. Platform: Windows, Linux Example: (See Close_File example) *** SUB: Write_Character Syntax: sub Write_Character(ByVal fileHandle As HANDLE, ByVal value As String) Description: Writes the first byte of a string (treated as a single character) to the file. Assumes single-byte encoding. Options: fileHandle - Handle of the open file. value - The string containing the character to write (only the first byte is used). Platform: Windows, Linux Example: #Include "window9.bi" Var handle=Create_File("Example.txt") If handle <> Cast(Any Ptr, -1) Then Write_Character(handle,"R") Close_file(handle) EndIf handle=Read_file("Example.txt") If handle <> Cast(Any Ptr, -1) Then Print Read_Character(handle) Close_file(handle) EndIf Sleep(1000) Result: R *** SUB: Write_Data Syntax: Sub Write_Data(ByVal Handle As HANDLE, ByVal pAddress As Any Ptr, ByVal Lenght As Long) Description: Writes a specified number of bytes from a memory buffer to the file. Options: Handle - Handle of the open file. pAddress - Pointer to the source memory buffer. Lenght - Number of bytes to write from the buffer. Platform: Windows, Linux Example: #Include "window9.bi" Dim adf(0 to 100) As Long ' Array of Longs (4 bytes each on 32-bit) For a As Long=0 To 100 : adf(a)=a : Next Var handle=Create_File("Example.txt") If handle <> Cast(Any Ptr, -1) Then Write_Data(handle,@adf(0),SizeOf(adf)) // Write the whole array Close_file(handle) EndIf // Verification (optional) handle=Read_file("Example.txt") If handle <> Cast(Any Ptr, -1) Then Dim check_adf(0 to 100) As Long Read_Data(handle, @check_adf(0), SizeOf(check_adf)) Print "Read back first value: "; check_adf(0) Print "Read back last value: "; check_adf(100) Close_file(handle) EndIf Sleep(1000) Result: (Console output shows 0 and 100 if verification added) *** SUB: Write_Double Syntax: sub Write_Double(ByVal fileHandle As HANDLE, ByVal value As Double) Description: Writes an 8-byte double-precision floating-point number to the file. Options: fileHandle - Handle of the open file. value - The double value to write. Platform: Windows, Linux Example: (See Read_Double example) *** SUB: Write_Integer Syntax: sub Write_Integer(ByVal fileHandle As HANDLE, ByVal value As Long) ' Assuming Long is 32-bit Integer Description: Writes a 4-byte signed integer to the file. Options: fileHandle - Handle of the open file. value - The integer value to write. Platform: Windows, Linux Example: (See Read_Integer example) *** SUB: Write_Longint Syntax: sub Write_Longint(ByVal fileHandle As HANDLE, ByVal value As Longint) ' Assuming LongInt is 64-bit Integer Description: Writes an 8-byte signed integer (LongInt) to the file. Options: fileHandle - Handle of the open file. value - The LongInt value to write. Platform: Windows, Linux Example: (See Read_LONGINT example) *** SUB: Write_Single Syntax: sub Write_Single(ByVal fileHandle As HANDLE, ByVal value As Single) Description: Writes a 4-byte single-precision floating-point number to the file. Options: fileHandle - Handle of the open file. value - The single value to write. Platform: Windows, Linux Example: (See Read_Single example) *** SUB: Write_String Syntax: sub Write_String(ByVal fileHandle As HANDLE, ByVal value As string) Description: Writes the contents of a string (excluding any null terminator) to the file. Options: fileHandle - Handle of the open file. value - The string value to write. Platform: Windows, Linux Example: (See E_O_F example) *** SUB: Write_StringN Syntax: sub Write_StringN(ByVal fileHandle As HANDLE, ByVal value As string) Description: Writes the contents of a string to the file, followed by a platform-specific newline sequence (CR+LF on Windows, LF on Linux). Options: fileHandle - Handle of the open file. value - The string value to write. Platform: Windows, Linux Example: #Include "window9.bi" Var handle=Create_File("Example.txt") If handle <> Cast(Any Ptr, -1) Then Write_StringN(handle,"STRING_1") Write_StringN(handle,"STRING_2") Close_File(handle) EndIf handle=Read_File("Example.txt") If handle <> Cast(Any Ptr, -1) Then Print Read_String(handle) // Reads "STRING_1" Print Read_String(handle) // Reads "STRING_2" Close_File(handle) EndIf Sleep(1000) Result: STRING_1 STRING_2 *** SUB: Write_Word Syntax: sub Write_Word(ByVal fileHandle As HANDLE, ByVal value As Short) ' Assuming Short is 16-bit WORD Description: Writes a 2-byte signed integer (Short/Word) to the file. Options: fileHandle - Handle of the open file. value - The Short value to write. Platform: Windows, Linux Example: (See Read_WORD example) --- SECTION: FileSystem --- Description: Functions for managing files and directories (copying, moving, deleting, renaming, examining). *** SUB: CopyDir Syntax: Sub CopyDir(ByRef SourseDir As String, ByRef NewDir As String, ByVal flag As long=0) Description: Copies files or directories. Can use wildcards. Options: SourseDir - Source directory or file pattern (e.g., "C:\Source", "C:\Source\*.txt"). NewDir - Destination directory. flag - (Windows only) Flags controlling the copy operation (e.g., FOF_ALLOWUNDO, FOF_NOCONFIRMATION, FOF_SILENT - see original doc). Platform: Windows, Linux Example 1: (Copy only txt files) #include "window9.bi" ' Ensure C:\33 and C:\66 exist, C:\33 has some .txt files ' CopyDir("C:\33\*.txt","C:\66") Print "CopyDir executed (txt files)." Example 2: (Copy entire directory) #include "window9.bi" ' Ensure C:\33 and C:\66 exist ' CopyDir("C:\33","C:\66") Print "CopyDir executed (full directory)." *** SUB: CreateDir Syntax: Sub CreateDir(ByRef sDir As String) Description: Creates a new directory (folder). Options: sDir - Name of the directory to create (can include path). Platform: Windows, Linux Example: #Include "window9.bi" CreateDir("NEW_TEST_FOLDER") Print "Directory NEW_TEST_FOLDER created (if permissions allow)." Sleep(1000) ' Optional: Clean up RemoveDir("NEW_TEST_FOLDER") // Or use DeleteDir *** SUB: DeleteDir Syntax: Sub DeleteDir(ByRef DeleteDirName As String,ByVal flag As Integer=0) Description: Deletes files or directories. Can use wildcards. Use FOF_ALLOWUNDO flag (Windows) to move to Recycle Bin. Options: DeleteDirName - Name of the directory or file pattern to delete (e.g., "C:\Temp\MyDir", "C:\Temp\*.tmp"). flag - (Windows only) Flags controlling the delete operation (e.g., FOF_ALLOWUNDO, FOF_NOCONFIRMATION, FOF_SILENT - see original doc). Platform: Windows, Linux Example 1: (Delete only files matching pattern) #include "window9.bi" ' Create dummy files in C:\33 first ' DeleteDir("C:\33\*.*") Print "DeleteDir executed (files only)." Example 2: (Delete directory to Recycle Bin - Windows only) #include "window9.bi" Const FOF_ALLOWUNDO=64 ' Create dummy directory C:\33 first ' DeleteDir("C:\33",FOF_ALLOWUNDO) Print "DeleteDir executed (to recycle bin)." *** SUB: Delete_File Syntax: Sub Delete_File (ByRef sFile As String) Description: Deletes a single specified file. Options: sFile - Full path and name of the file to delete. Platform: Windows, Linux Example: #include "window9.bi" ' Create a dummy file 1.txt first ' Delete_File("1.txt") Print "Delete_File executed for 1.txt." *** FUNCTION: DirectoryEntryAttributes Syntax: Function DirectoryEntryAttributes(ByVal HandleDirectory As integer) As UInteger Description: Returns the attributes of the current file/directory during an enumeration started by ExamineDirectory. Use bitwise AND to check specific attributes. Return Values (Combine with AND): FILE_ATTRIBUTE_ARCHIVE, FILE_ATTRIBUTE_COMPRESSED (Win), FILE_ATTRIBUTE_DIRECTORY, FILE_ATTRIBUTE_ENCRYPTED (Win), FILE_ATTRIBUTE_HIDDEN, FILE_ATTRIBUTE_NORMAL (Win), FILE_ATTRIBUTE_OFFLINE (Win), FILE_ATTRIBUTE_READONLY, FILE_ATTRIBUTE_REPARSE_POINT (Win), FILE_ATTRIBUTE_SPARSE_FILE (Win), FILE_ATTRIBUTE_SYSTEM, FILE_ATTRIBUTE_TEMPORARY (Win). Options: HandleDirectory - Search handle from ExamineDirectory. Platform: Windows, Linux Example: (List only directories) #Include "window9.bi" #Ifdef __FB_WIN32__ Dim As String searchDir = "C:\" #Else Dim As String searchDir = "/" #EndIf Var DirHandle=ExamineDirectory(searchDir, "*.*") If DirHandle Then Var dirCount=0 Do If DirectoryEntryAttributes(DirHandle) And FILE_ATTRIBUTE_DIRECTORY Then Print "[DIR] "; DirectoryEntryName(DirHandle) dirCount+=1 Endif Loop While NextDirectoryEntry(DirHandle) Print : Print "Total Directories ="; dirCount FinishDirectory(DirHandle) Else Print "Could not examine directory: "; searchDir EndIf Sleep(2000) Result: (Lists directories in the specified path) *** FUNCTION: DirectoryEntryDate Syntax: Function DirectoryEntryDate(ByVal HandleDirectory As Integer, ByVal flag As Long) As String Description: Returns the creation, last access, or last modification timestamp of the current file/directory during an enumeration. Options: HandleDirectory - Search handle from ExamineDirectory. flag - Specifies which date to return: 1 = Creation Time (unreliable on Linux), 2 = Last Access Time, 3 = Last Modification Time. Platform: Windows, Linux Example: #Include "window9.bi" #Ifdef __FB_WIN32__ Dim As String searchDir = "C:\" #Else Dim As String searchDir = "/" #EndIf Var DirHandle=ExamineDirectory(searchDir, "*.*") If DirHandle Then Do Print DirectoryEntryName(DirHandle) & " (Modified: "& DirectoryEntryDate(DirHandle,3) & ")" Loop While NextDirectoryEntry(DirHandle) FinishDirectory(DirHandle) Else Print "Could not examine directory: "; searchDir EndIf Sleep(2000) Result: (Lists files/dirs with their modification dates) *** FUNCTION: DirectoryEntryName Syntax: Function DirectoryEntryName(ByVal HandleDirectory As integer) As string Description: Returns the name of the current file or directory during an enumeration. Options: HandleDirectory - Search handle from ExamineDirectory. Platform: Windows, Linux Example: (See DirectoryEntryDate example) *** FUNCTION: DirectoryEntrySize Syntax: Function DirectoryEntrySize(ByVal HandleDirectory As integer) As ULongInt Description: Returns the size (in bytes) of the current file during an enumeration. Returns 0 for directories. Options: HandleDirectory - Search handle from ExamineDirectory. Platform: Windows, Linux Example: #Include "window9.bi" #Ifdef __FB_WIN32__ Dim As String searchDir = "C:\" #Else Dim As String searchDir = "/" #EndIf Var DirHandle=ExamineDirectory(searchDir, "*.*") If DirHandle Then Do Print DirectoryEntryName(DirHandle) & " (Size: "& DirectoryEntrySize(DirHandle) & ")" Loop While NextDirectoryEntry(DirHandle) FinishDirectory(DirHandle) Else Print "Could not examine directory: "; searchDir EndIf Sleep(2000) Result: (Lists files/dirs with their sizes) *** FUNCTION: ExamineDirectory Syntax: Function ExamineDirectory(ByRef DirectoryName As string, ByRef Pattern As string) As Integer ' Returns Handle Description: Starts an enumeration of files and directories matching a pattern within a specified directory. Returns a search handle used by other DirectoryEntry* functions, or 0 on failure. Remember to call FinishDirectory when done. Options: DirectoryName - The path of the directory to search. Pattern - File matching pattern (e.g., "*.*", "*.txt", "myfile.*"). Platform: Windows, Linux Example: (See DirectoryEntryAttributes example) *** SUB: FinishDirectory Syntax: Sub FinishDirectory(ByVal HandleDirectory As integer) Description: Releases the resources associated with a directory search handle obtained from ExamineDirectory. Options: HandleDirectory - The search handle to finish. Platform: Windows, Linux Example: (See DirectoryEntryAttributes example) *** FUNCTION: GetCurentDir Syntax: Function GetCurentDir() As String Description: Returns the current working directory of the application. Options: None Platform: Windows, Linux Example: #Include "window9.bi" Print "Current Directory: "; GetCurentDir() sleep(2000) Result: (Prints the application's current working directory) *** FUNCTION: GetCurrentFileName Syntax: Function GetCurrentFileName() As String Description: Returns the filename including extension of the currently running executable module. Use GetCurrentFileNameA to get only the name without extension. Options: None Platform: Windows Example: #Include "window9.bi" Print "Full Filename: "; GetCurrentFileName() Print "Base Filename: "; GetCurrentFileNameA() Sleep(2000) Result: (Prints filename with and without extension, e.g., FbTemp.exe and FbTemp) *** FUNCTION: GetCurrentFileNameA Syntax: Function GetCurrentFileNameA() As String Description: Returns the filename (without extension) of the currently running executable module. Options: None Platform: Windows Example: (See GetCurrentFileName example) *** FUNCTION: GetExtensionPart Syntax: Function GetExtensionPart(ByRef sPath As String) As String Description: Extracts the file extension (part after the last dot) from a path string. Returns empty string if no extension. Options: sPath - The full path or filename string. Platform: Windows, Linux Example: #Include "window9.bi" Dim As String ss= "D:\freebasic\MyProgram.bas" Print "Extension: "; GetExtensionPart(ss) Sleep(2000) Result: bas *** FUNCTION: GetFilePart Syntax: Function GetFilePart(ByRef sPath As String) As String Description: Extracts the filename including extension from a full path string. Handles both Windows (\) and Linux (/) path separators. Options: sPath - The full path string. Platform: Windows, Linux Example: #Include "window9.bi" #Ifdef __FB_WIN32__ Dim As String ss= "D:\freebasic\MyProgram.bas" #Else Dim As String ss= "/home/user/MyProgram.bas" #EndIf Print "File Part: "; GetFilePart(ss) sleep(2000) Result: MyProgram.bas *** FUNCTION: GetPathPart Syntax: Function GetPathPart(ByRef sPath As String) As String Description: Extracts the directory path part (excluding the filename) from a full path string. Handles both Windows (\) and Linux (/) path separators. Options: sPath - The full path string. Platform: Windows, Linux Example: #Include "window9.bi" #Ifdef __FB_WIN32__ Dim As String ss= "D:\freebasic\MyProgram.bas" #Else Dim As String ss= "/home/user/MyProgram.bas" #EndIf Print "Path Part: "; GetPathPart(ss) Sleep(2000) Result: D:\freebasic (or /home/user) *** FUNCTION: GetSpecialFolder Syntax: function GetSpecialFolder(ByVal folderFlag As integer) As String Description: Returns the path to various Windows special folders (e.g., Desktop, My Documents, AppData, Program Files). Options: folderFlag - A CSIDL constant specifying the desired folder (e.g., CSIDL_DESKTOPDIRECTORY, CSIDL_APPDATA, CSIDL_PROGRAM_FILES - see original doc for full list). Platform: Windows Example: #Include "window9.bi" Print "Desktop Path: "; GetSpecialFolder(CSIDL_DESKTOPDIRECTORY) Print "AppData Path: "; GetSpecialFolder(CSIDL_APPDATA) Print "Program Files: "; GetSpecialFolder(CSIDL_PROGRAM_FILES) Sleep(2000) Result: (Prints paths to Desktop, AppData, Program Files folders) *** FUNCTION: GetSystemDir Syntax: Function GetSystemDir() As String Description: Returns the path to the Windows System32 directory. Options: None Platform: Windows Example: #Include "window9.bi" Print "System Directory: "; GetSystemDir() sleep(2000) Result: (Prints path like C:\Windows\System32) *** FUNCTION: GetTempDir Syntax: Function GetTempDir() As String Description: Returns the path to the user's temporary files directory. Options: None Platform: Windows Example: #Include "window9.bi" Print "Temp Directory: "; GetTempDir() sleep(2000) Result: (Prints path to the temp folder) *** FUNCTION: GetWindowsDir Syntax: Function GetWindowsDir() As String Description: Returns the path to the main Windows directory. Options: None Platform: Windows Example: #Include "window9.bi" Print "Windows Directory: "; GetWindowsDir() sleep(2000) Result: (Prints path like C:\Windows) *** FUNCTION: CopyFile (WinAPI) Syntax: function CopyFile alias "CopyFileA"(byval lpExistingFileName as LPCSTR, byval lpNewFileName as LPCSTR, byval bFailIfExists as WINBOOL) as WINBOOL Description: Standard WinAPI function to copy a file. Included for reference. Returns non-zero on success. Options: lpExistingFileName - Path to the existing file. lpNewFileName - Path for the new copy. bFailIfExists - If TRUE, the function fails if lpNewFileName already exists. If FALSE, it overwrites. Platform: Windows Example: #include "window9.bi" ' Ensure C:\1.exe exists ' CopyFile(@"C:\1.exe",@"C:\2.exe" ,0) // Overwrite if exists Print "CopyFile executed." *** SUB: MoveDir Syntax: Sub MoveDir(ByRef SourseDir As String, ByRef NewDir As String, ByVal flag As Long=0) Description: Moves files or directories. Can use wildcards. Options: SourseDir - Source directory or file pattern. NewDir - Destination path (can be a directory or a new filename if moving a single file). flag - (Windows only) Flags controlling the move operation (e.g., FOF_ALLOWUNDO, FOF_NOCONFIRMATION - see CopyDir flags). Platform: Windows, Linux Example 1: (Move only files matching pattern) #include "window9.bi" ' Ensure C:\33 and C:\66 exist, C:\33 has files ' MoveDir("C:\33\*.*","C:\66") Print "MoveDir executed (files only)." Example 2: (Move entire directory) #include "window9.bi" ' Ensure C:\33 exists, C:\66 does not exist or is empty ' MoveDir("C:\33","C:\66") // Moves C:\33 *into* C:\66 if C:\66 exists, otherwise renames C:\33 to C:\66 Print "MoveDir executed (full directory)." *** FUNCTION: MoveFile / MoveFileEx (WinAPI) Syntax (MoveFile): function MoveFile alias "MoveFileA"(byval lpExistingFileName as LPCSTR, byval lpNewFileName as LPCSTR) as WINBOOL Syntax (MoveFileEx): function MoveFileEx alias "MoveFileExA"(byval lpExistingFileName as LPCSTR, byval lpNewFileName as LPCSTR, byval dwFlags as DWORD) as WINBOOL Description: Standard WinAPI functions to move or rename a file or directory. MoveFileEx provides more options. May not work correctly with non-ASCII paths; MoveDir might be more reliable. Returns non-zero on success. Options (MoveFileEx): lpExistingFileName - Current path/name. lpNewFileName - New path/name. dwFlags - Flags like MOVEFILE_REPLACE_EXISTING, MOVEFILE_COPY_ALLOWED, MOVEFILE_DELAY_UNTIL_REBOOT. Platform: Windows Example: #include "window9.bi" ' Ensure C:\1.exe exists ' MoveFile(@"C:\1.exe",@"D:\2.exe") // Move file across drives (requires MOVEFILE_COPY_ALLOWED in MoveFileEx for reliability) Print "MoveFile executed." *** FUNCTION: NextDirectoryEntry Syntax: Function NextDirectoryEntry(ByVal HandleDirectory As integer) As Integer Description: Advances the directory enumeration to the next file or directory. Returns non-zero if successful, 0 if no more entries are found. Options: HandleDirectory - Search handle from ExamineDirectory. Platform: Windows, Linux Example: (See DirectoryEntryAttributes example) *** FUNCTION: RemoveDir Syntax: Function RemoveDir(ByRef sDir As String) As Integer Description: Removes an empty directory. Primarily for older Windows versions; DeleteDir is generally preferred. Returns non-zero on success. Options: sDir - Path of the empty directory to remove. Platform: Windows Example: #Include "window9.bi" CreateDir("TEMP_EMPTY_FOLDER") // Create it first Sleep(500) If RemoveDir("TEMP_EMPTY_FOLDER") <> 0 Then Print "Removed TEMP_EMPTY_FOLDER successfully." Else Print "Failed to remove TEMP_EMPTY_FOLDER (might not be empty or permissions issue)." EndIf Sleep(1000) *** SUB: RenameDir Syntax: sub RenameDir(ByRef SourseDirName As String,ByRef NewDirName As String, ByVal flag As Integer=0) Description: Renames a file or directory. Uses the same underlying mechanism as MoveDir/DeleteDir on Windows. Options: SourseDirName - Current name/path of the file or directory. NewDirName - New name/path. flag - (Windows only) Flags controlling the operation (see CopyDir/DeleteDir flags). Platform: Windows, Linux Example: #Include "window9.bi" ' Ensure directory C:\33 exists ' RenameDir("C:\33","C:\66_Renamed") Print "RenameDir executed." *** SUB: SetCurentDir Syntax: Sub SetCurentDir(ByRef sDir As String) Description: Sets the application's current working directory. Options: sDir - The directory path to set as current. Platform: Windows, Linux Example: #Include "window9.bi" #Ifdef __FB_WIN32__ Var sDir = "C:\" #Else Var sDir = "/" #EndIf Print "Current dir before: "; GetCurentDir() SetcurentDir(sDir) Print "Current dir after: "; GetCurentDir() Sleep(2000) Result: (Prints current directory before and after changing it) *** FUNCTION: w9isDirExists Syntax: Function w9isDirExists(sFileName As UString) As Long Description: Checks if a given path exists and refers to a directory. Returns 1 if it exists and is a directory, 0 otherwise. Options: sFileName - The path to check. Platform: Windows, Linux Example: #include "window9.bi" if w9isDirExists("C:\Windows") then // Use a known directory Print "C:\Windows exists and is a directory." EndIf if w9isDirExists("C:\Windows\notepad.exe") then // Use a known file Print "C:\Windows\notepad.exe is a directory." else Print "C:\Windows\notepad.exe is NOT a directory." EndIf Sleep(2000) Result: C:\Windows exists and is a directory. C:\Windows\notepad.exe is NOT a directory. *** FUNCTION: w9isFile Syntax: Function w9isFile(sFileName As UString) As Long Description: Checks if a given path exists and refers to a regular file (not a directory). Returns 1 if it exists and is a file, 0 otherwise. Options: sFileName - The path to check. Platform: Windows, Linux Example: #include "window9.bi" if w9isFile("C:\Windows\notepad.exe") then // Use a known file Print "C:\Windows\notepad.exe is a file." else Print "C:\Windows\notepad.exe is NOT a file." EndIf if w9isFile("C:\Windows") then // Use a known directory Print "C:\Windows is a file." else Print "C:\Windows is NOT a file." EndIf Sleep(2000) Result: C:\Windows\notepad.exe is a file. C:\Windows is NOT a file. *** FUNCTION: w9isFileExists Syntax: Function w9isFileExists(sFileName As UString) As Long Description: Checks if a given path exists (can be a file or a directory). Returns 1 if it exists, 0 otherwise. Options: sFileName - The path to check. Platform: Windows, Linux Example: #include "window9.bi" if w9isFileExists("C:\Windows\notepad.exe") then Print "C:\Windows\notepad.exe exists." EndIf if w9isFileExists("C:\NonExistentFile.xyz") then Print "C:\NonExistentFile.xyz exists." else Print "C:\NonExistentFile.xyz does NOT exist." EndIf Sleep(2000) Result: C:\Windows\notepad.exe exists. C:\NonExistentFile.xyz does NOT exist. --- SECTION: Font --- Description: Functions for loading, using, and querying font properties. *** SUB: FontDraw Syntax: Sub FontDraw(ByVal FontID As HFONT) Description: Sets the font to be used by subsequent 2D_Draw text functions (like TextDraw). Options: FontID - Handle of the font (from LoadFont, FontRequester, etc.) Platform: Windows, Linux Example: (See 2D_Draw / FontDraw example) *** FUNCTION: FontRequester Syntax: function FontRequester(byval hwnd As HWND = 0, byval nColor As Integer = 0) As Integer ' Returns HFONT Description: Opens the system font selection dialog. See Dialog / FontRequester for details. Options: (See Dialog / FontRequester) Platform: Windows, Linux Example: (See Dialog / FontRequester example) *** SUB: FreeFont Syntax: sub FreeFont(iFont as integer) ' iFont is HFONT Description: Releases the resources associated with a font handle created by LoadFont or FontRequester. Options: iFont - The HFONT handle to free. Platform: Windows, Linux Example: #Include "window9.bi" OpenWindow("Font Test",10,10,200,100) StringGadget(1,10,10,150,50,"String") Var font = LoadFont("Courier New",30) SetGadgetFont(1,CINT(font)) Do Var event = WaitEvent() Select Case event Case EventClose FreeFont(CINT(font)) // Free the font before ending End End Select Loop Result: Shows a string gadget with a custom font. *** FUNCTION: GetCurentDefaultFont Syntax: Function GetCurentDefaultFont() As Integer ' Returns HFONT Description: Gets the handle of the font currently set as the default for subsequently created gadgets (via SetGadgetFont(, fontHandle)). Options: none Platform: Windows, Linux Example: #include "window9.bi" Var hwnd=Openwindow("Default Font Test",10,10,200,200) dim as Integer font = Loadfont("Arial" , 36 , , 1 , 1) // Bold, Italic SetGadgetFont(,font) // Set as default for new gadgets dim as Integer defaultFont = GetCurentDefaultFont() Print "Default Font Name: "; GetNameFromFont(defaultFont) Print "Default Font Size: "; GetSizeFromFont(defaultFont) Print "Default Font Bold?: "; GetStyleFromFont(defaultFont,1) Print "Default Font Italic?: "; GetStyleFromFont(defaultFont,2) ButtonGadget(1, 10, 10, 150, 50, "Uses Default") // This button uses Arial 36 Bold Italic Do var Event=Waitevent() If Event=Eventclose Then End Loop FreeFont(font) Result: (Prints font details and shows a button with that font) *** FUNCTION: GetNameFromFont Syntax: Function GetNameFromFont(font As Integer) As UString ' font is HFONT Description: Gets the name of the font associated with the given handle. Note: For the system default font (from GetSystemDefaultFont), this returns "System" on Windows. Options: font - The HFONT handle. Platform: Windows, Linux Example: #include "window9.bi" dim as Integer font = Loadfont("Times New Roman" , 24 , , 1 , 0) // Bold Print "Font Name: "; GetNameFromFont(font) FreeFont(font) sleep (2000) Result: Times New Roman *** FUNCTION: GetSizeFromFont Syntax: Function GetSizeFromFont(font As Integer) As Long ' font is HFONT Description: Gets the size (height) of the font associated with the given handle. May not work for the system default font on Windows. Options: font - The HFONT handle. Platform: Windows, Linux Example: (See GetNameFromFont example, add Print GetSizeFromFont(font)) *** SUB: GetSizeStringFromFont Syntax: Sub GetSizeStringFromFont(sText As UString , font As Integer , Byref iW As Long , Byref iH As Long) ' font is HFONT Description: Calculates the width (iW) and height (iH) required to display the given text string using the specified font. Results are returned in the iW and iH variables. Options: sText - The text string to measure. font - The HFONT handle of the font to use for measurement. iW - Variable to receive the calculated width. iH - Variable to receive the calculated height. Platform: Windows, Linux Example: (Auto-sizing button) #include "window9.bi" Var hwnd=Openwindow("Auto-Size Button",10,10,400,150) Var Event=0 dim as Integer font = Loadfont("Arial" , 18) Setgadgetfont( , font) // Set default font for button Dim As Long iW , iH dim as Ustring s = "This is a Button With Auto Size" GetSizeStringFromFont(s , GetCurentDefaultFont() , iW , iH) // Measure text iW+=20 // Add padding iH+=10 // Add padding Buttongadget(1, 10 , 10 , iW, iH , s) // Create button with calculated size Do Event=Waitevent() If Event=Eventclose Then End Loop freefont(font) Result: Shows a button sized appropriately for its text content. *** FUNCTION: GetStyleFromFont Syntax: Function GetStyleFromFont(font As Integer, iStyle As Long) As Long ' font is HFONT Description: Checks if a specific style attribute (Bold, Italic, etc.) is set for the given font handle. Returns non-zero if the style is set, 0 otherwise. Options: font - The HFONT handle. iStyle - The style flag to check: 1=Bold, 2=Italic, 3=Underline (Win only), 4=Strikeout (Win only). Platform: Windows, Linux Example: (See GetNameFromFont example) *** FUNCTION: GetSystemDefaultFont Syntax: Function GetSystemDefaultFont() As Integer ' Returns HFONT Description: Gets the handle of the default system font used by the OS for UI elements. Options: none Platform: Windows, Linux Example: #include "window9.bi" dim as Integer sysFont = GetSystemDefaultFont() Print "System Default Font Name: "; GetNameFromFont(sysFont) // Returns "System" on Windows // FreeFont(sysFont) // Do not free system fonts sleep(2000) Result: System (on Windows) *** FUNCTION: LoadFont Syntax: Function LoadFont(ByRef sFileName As String , ByVal Size As Long, ByVal Corner As Long=0, ByVal Bold As Long=0, ByVal Italic As Long=0, ByVal Underline As Long=0, ByVal StrikeOut As long=0) As integer ' Returns HFONT Description: Loads a font installed on the system and returns its handle (HFONT). Options: sFileName - Name of the font (e.g., "Arial", "Courier New"). Size - Font size (usually in points, but interpretation might depend on OS context). Corner - (Windows only) Angle of rotation/tilt in degrees (0-360). Often not used. Bold - Set to 1 for bold, 0 otherwise. Italic - Set to 1 for italic, 0 otherwise. Underline - (Windows only) Set to 1 for underline, 0 otherwise. StrikeOut - (Windows only) Set to 1 for strikeout, 0 otherwise. Platform: Windows, Linux Example: (See FreeFont example) *** FUNCTION: SelectedFontName Syntax: Function SelectedFontName() As String Description: Gets the name of the font selected in the most recent call to FontRequester. Options: None Platform: Windows, Linux Example: (See FontRequester example) *** FUNCTION: SelectedFontColor Syntax: Function SelectedFontColor() As Integer Description: Gets the color selected in the most recent call to FontRequester. Options: None Platform: Windows Example: (See FontRequester example - Windows only) *** FUNCTION: SelectedFontSize Syntax: Function SelectedFontSize() As Integer Description: Gets the size of the font selected in the most recent call to FontRequester. Options: None Platform: Windows, Linux Example: (See FontRequester example) *** FUNCTION: SelectedFontStyle Syntax: Function SelectedFontStyle(ByVal flagstyle As Byte) As Byte Description: Checks the style attributes of the font selected in the most recent call to FontRequester. Returns non-zero if the specified style is set. Options: flagstyle - Style to check: 1=Bold, 2=Italic, 3=Underline (Win only), 4=Strikeout (Win only). Platform: Windows, Linux Example: (See FontRequester example) *** FUNCTION: SetGadgetFont Syntax: Function SetGadgetFont(ByVal gadget As Long = -1 ,ByVal Font As integer=-1) As Integer ' Font is HFONT Description: Sets the font for a specific gadget, or sets the default font for subsequently created gadgets. Supported Gadgets: ButtonGadget, EditorGadget, TextGadget, StringGadget, SpinGadget, CalendarGadget, CheckBoxGadget, OptionGadget, HyperLinkGadget, ListBoxGadget, GroupGadget, ListViewGadget (Linux GTK2 row font only), TreeViewGadget, PanelGadget, ComboBoxGadget (Win only), ComboBoxImageGadget (Win only), ExplorerListGadget (Win only), GadgetToolTip (Win only), StatusBarGadget. Options: gadget - Gadget ID number. If -1 (default), sets the default font for future gadgets. Font - HFONT handle of the font to set. If -1 (default when gadget is also -1), resets the default font to the system default. Platform: Windows, Linux (Support varies by gadget) Example: #Include "window9.bi" OpenWindow("Set Font Test",10,10,250,500) StringGadget(1,10,10,150,40,"Default Font") // Uses initial default Var fontArial36 = LoadFont("arial",36) SetGadgetFont(,CINT(fontArial36)) // Set default font to Arial 36 OptionGadget(2,10,70,200,40,"Arial 36") // Uses new default Var fontArial22 = LoadFont("arial",22) TextGadget(3,10,140,100,30,"Arial 22") SetGadgetFont(3,CINT(fontArial22)) // Set font for gadget 3 only SetGadgetFont() // Reset default font to system default EditorGadget(4,10,200,150,100,"System Font") // Uses system default Do Var event=WaitEvent() Select Case event Case EventClose FreeFont(CINT(fontArial36)) FreeFont(CINT(fontArial22)) End End Select Loop Result: Shows various gadgets using different explicitly set or default fonts. --- SECTION: Gadget --- Description: UI controls (widgets) and related functions. --- Gadget: ButtonImageGadget --- FUNCTION: ButtonImageGadget Syntax: Function ButtonImageGadget(ByVal gadget As Long, ByVal x As Long, ByVal y As Long, ByVal w As Long, ByVal h As Long, ByVal imageId As Any ptr = 0, ByVal Style As Long=BS_BITMAP) As HWND Description: Creates a button that displays an image (HBITMAP) or an icon (HICON). Options: gadget - Gadget ID. x, y, w, h - Location and dimensions. imageId - Handle to the HBITMAP or HICON to display. Can be set later using SetImageGadget/SetIconGadget. Style - Button style. Common: BS_BITMAP (default), BS_ICON. Use FB_BS_PUSHLIKE for a toggle button effect. Platform: Windows, Linux Example: #Include "window9.bi" Dim As integer event OpenWindow("Image Button",300,10,100,120) Var HIMAGE=Load_image("1.png") // Assuming 1.png exists ButtonImageGadget(1,10,10,80,80,HIMAGE, FB_BS_PUSHLIKE or BS_BITMAP) // Toggle image button Do event=WaitEvent() If event=EventClose Then End Loop Free_Image(HIMAGE) // Free image when done Result: Shows a window with a button displaying an image, acting as a toggle. --- Gadget: ButtonGadget --- FUNCTION: ButtonGadget Syntax: Function ButtonGadget(ByVal gadget As Long, ByVal x As Long, ByVal y As Long, ByVal w As Long, ByVal h As Long, ByRef s As String="", ByVal Style As Long=0) As HWND Description: Creates a standard push button with text. Options: gadget - Gadget ID. x, y, w, h - Location and dimensions. s - Text displayed on the button. Style - Button style. Use FB_BS_PUSHLIKE for toggle behavior. See original docs for extensive Windows-only styles (BS_...). Platform: Windows, Linux Example: #Include "window9.bi" Dim As Integer event OpenWindow("Button Test",300,10,150,100) ButtonGadget(1,10,10,100,30,"Click Me") Do event=WaitEvent() If event=EventClose Then End If event=eventgadget Then If EventNumber() = 1 Then MessBox("Button","Button Clicked!") EndIf Loop Result: Shows a window with a clickable button. --- Gadget: CalendarGadget --- FUNCTION: CalendarGadget Syntax: Function CalendarGadget(ByVal gadget As long, ByVal x As long, ByVal y As long, ByVal w As long, ByVal h As long,ByVal Style As long=0) As HWND Description: Creates a monthly calendar control for selecting dates. Options: gadget - Gadget ID. x, y, w, h - Location and dimensions. Style - (Windows Only) Extended window style flags (WS_EX_...). Platform: Windows, Linux Example: #Include "window9.bi" OpenWindow("Calendar",10,10,400,300) CalendarGadget(1,10,10,220,220) ButtonGadget(2,250,100,130,25,"Get Date") TextGadget(3,250,140,130,20,"") Do var event=WaitEvent() If event=eventclose Then End If event=eventgadget Then If eventnumber()=2 Then Dim selectedDate as Long = GetStateCalendar(1) // Get YYYYMMDD SetGadgetText(3,Str(selectedDate)) EndIf EndIf Loop Result: Shows a calendar; button click displays the selected date (YYYYMMDD format). --- Gadget: CheckBoxGadget --- FUNCTION: CheckBoxGadget Syntax: Function CheckBoxGadget(ByVal gadget As Long, ByVal x As Long, ByVal y As Long, ByVal w As Long, ByVal h As Long, ByRef s As String="", ByVal Style As Long=3) As HWND ' Default BS_AUTOCHECKBOX Description: Creates a check box control with associated text. Options: gadget - Gadget ID. x, y, w, h - Location and dimensions. s - Text label displayed next to the check box. Style - (Windows Only) Button style. Use 6 (BS_AUTO3STATE) for a three-state check box. Default is 3 (BS_AUTOCHECKBOX). Platform: Windows, Linux Example: #Include "window9.bi" Dim As Integer event OpenWindow("Checkbox",300,10,200,150) CheckBoxGadget(1,10,10,150,30,"Enable Feature") ButtonGadget(2,10,50,150,30, "Check Status") Do event=WaitEvent() If event=EventClose Then End If event=eventgadget Then If EventNumber()=2 Then If GetGadgetState(1)=1 Then // 1 = Checked, 0 = Unchecked MessBox("Status","Feature Enabled") Else MessBox("Status","Feature Disabled") EndIf EndIf EndIf Loop Result: Shows a check box and a button to report its state. --- Gadget: ComboBoxGadget --- FUNCTION: ComboBoxGadget Syntax: Function ComboBoxGadget(ByVal gadget As Long, ByVal x As Long, ByVal y As Long, ByVal w As Long, ByVal h As Long, ByVal Style As Long=CBS_DROPDOWNLIST Or WS_VSCROLL) As HWND Description: Creates a combo box control (drop-down list). Color/font changes only supported on Windows. Options: gadget - Gadget ID. x, y, w - Location and width. h - Height. On Windows, this is the height of the *drop-down list*. On Linux, it's the height of the *gadget itself*. Style - (Windows Only) Combo box style flags (e.g., CBS_DROPDOWN, CBS_SIMPLE, CBS_SORT - see original doc for full list). Default is a non-editable drop-down list. Platform: Windows, Linux (Styling limitations on Linux) Example: #Include "window9.bi" #Ifdef __FB_WIN32__ Dim h As Long = 80 // Dropdown height for Win #Else Dim h As Long = 30 // Gadget height for Lin #EndIf OpenWindow("ComboBox",10,10,300,150) // Increased height for dropdown ComboBoxGadget(1,10,10,100,h) AddComboBoxItem(1,"Option 1",-1) AddComboBoxItem(1,"Option 2",-1) AddComboBoxItem(1,"Option 3",-1) TextGadget(2,150,10,130,20, "Selection:") Do var event=WaitEvent() If event=eventclose Then End If event=eventgadget Then If eventnumber()=1 Then dim selectedIndex as Long = GetItemComboBox(1) if selectedIndex >= 0 then setgadgettext(2,"Selected: " & GetComboBoxText(1, selectedIndex)) else setgadgettext(2,"Selection:") end if EndIf EndIf Loop Result: Shows a combo box; selected item text is displayed in a text gadget. --- Gadget: ComboBoxImageGadget --- FUNCTION: ComboBoxImageGadget Syntax: Function ComboBoxImageGadget(ByVal gadget As Long, ByVal x As Long, ByVal y As Long, ByVal w As Long, ByVal h As Long, ByVal SizeIcon As Long=16, ByVal Style As Long=CBS_DROPDOWNLIST Or WS_VSCROLL) As HWND Description: Creates a combo box control that can display images next to items. Options: gadget - Gadget ID. x, y, w - Location and width. h - Height (see ComboBoxGadget notes regarding Win/Lin differences). SizeIcon - (Windows only) Size of the icon area (default 16x16). Linux size depends on image. Style - (Windows Only) Combo box style flags (see ComboBoxGadget). Platform: Windows, Linux Example: #Include "window9.bi" #Ifdef __FB_WIN32__ Dim h As Long = 80 #Else Dim h As Long = 30 #EndIf If OpenWindow("Image Combo",10,10,300,150) Then ComboBoxImageGadget(1,10,10,150,h) AddComboBoxImageItem(1,"No Image",0,-1) // Item with no image (pass 0) AddComboBoxImageItem(1,"Image 1",Load_image("1.png"),-1) // Assuming 1.png exists AddComboBoxImageItem(1,"Image 2",Load_image("2.png"),-1) // Assuming 2.png exists EndIf Var event=0 Do event=WaitEvent() If Event=EventClose Then End Loop // Remember to Free_Image loaded images Result: Shows a combo box with items potentially having images next to them. --- Gadget: ContainerGadget --- FUNCTION: ContainerGadget Syntax: Function ContainerGadget(ByVal gadget As Long, ByVal x As Long,ByVal y As Long,ByVal w As Long, ByVal h As Long, ByVal parameter As Long=0) As HWND Description: Creates an invisible container gadget used to group other gadgets. Moving or hiding the container affects all gadgets placed within it (using UseGadgetList). Options: gadget - Gadget ID for the container. x, y, w, h - Location and dimensions of the container. parameter - (Windows Only) Extended window style flags (WS_EX_...) for the container itself. Platform: Windows, Linux Example: (Container moves randomly) #Include "window9.bi" Dim Shared As HWND ph ph=OpenWindow("Container",10,10,500,500) ContainerGadget(4,100,0,300,300) // Container ID 4 UseGadgetList(GadgetID(4)) // Tell subsequent gadgets to use container 4 ButtonGadget(1,10,10,100,20, "Button A") ButtonGadget(2,10,40,100,30, "Button B") UseGadgetList(ph) // Switch back to main window if needed for other gadgets function tt() As Integer Static As Integer rx,ry rx=Rnd*200 ry=Rnd*200 ResizeGadget(4,rx,ry) // Move the container (and its contents) SetGadgetColor(GadgetID(4),BGR(rnd*255,rnd*255,rnd*255),0,1) // Set container background (Win only?) Return 1 End Function SetTimer(ph,1,500,Cast(Any Ptr,@tt)) Do Var ev=WindowEvent() If ev=EventClose Then End Loop Result: Shows a window where two buttons inside an invisible container move randomly together. --- Gadget: DateCalendarGadget --- FUNCTION: DateCalendarGadget Syntax: Function DateCalendarGadget(ByVal gadget As long,ByVal x As long, ByVal y As long, ByVal w As long, ByVal h As long) As HWND Description: Creates a Date and Time Picker control (Windows specific appearance). Options: gadget - Gadget ID. x, y, w, h - Location and dimensions. Platform: Windows Example: #Include "window9.bi" OpenWindow("Date Picker",10,10,300,100) DateCalendarGadget(1,10,10,200,25) // Create the gadget ButtonGadget(2,10,50,130,25,"Set Date to Oct 26, 2000") Do var event=WaitEvent() If event=eventclose Then End If event=eventgadget Then If eventnumber()=2 Then SetStateCalendar(1,2000,10,26) // Set the date in the gadget EndIf EndIf Loop Result: Shows a Windows date picker control; button sets the displayed date. --- Gadget: EditorGadget --- FUNCTION: EditorGadget Syntax: Function EditorGadget(ByVal gadget As Long, ByVal x As Long, ByVal y As Long, ByVal w As Long,ByVal h As Long, ByRef text As String="", ByVal style As Long=0 ,ByVal tag as long = 0) As HWND Description: Creates a multi-line text editing control. Options: gadget - Gadget ID. x, y, w, h - Location and dimensions. text - Initial text content. style - Style flags: - Common: ES_CENTER, ES_LEFT, ES_RIGHT. - Windows Only: ES_MULTILINE (implied usually), ES_AUTOHSCROLL, ES_AUTOVSCROLL, ES_LOWERCASE, ES_NOHIDESEL, ES_NUMBER, ES_OEMCONVERT, ES_PASSWORD, ES_READONLY, ES_UPPERCASE, ES_WANTRETURN. (See original doc for details). Add WS_VSCROLL / WS_HSCROLL for scrollbars. tag - (Linux Only) Controls selection highlighting behavior. 0 = Default internal tag, 1 = Requires manual tag creation named "gui_tag_bg_fg" after gadget creation. Platform: Windows, Linux Example: #Include "window9.bi" Dim As integer event OpenWindow("Editor",300,10,400,400) EditorGadget(1,10,10,300,300, "This is an Editor Gadget." & Chr(10) & "With multiple lines.", ES_MULTILINE Or WS_VSCROLL) Do event=WaitEvent() If event=EventClose Then End Loop Result: Shows a window with a multi-line text editor. --- Gadget: ExplorerListGadget --- FUNCTION: ExplorerListGadget Syntax: Function ExplorerListGadget(byval gadget As long, byval x As long, byval y As long, byval w As long=400, byval h As long=300, byref szPath As String = "C:\", byval LGELocal As OptionsExplorerGadget ptr= 0) As HWND Description: Creates a gadget that mimics Windows Explorer's file/folder list view, allowing navigation. Options: gadget - Gadget ID. x, y, w, h - Location and dimensions. szPath - Initial directory path to display. LGELocal - Pointer to an OptionsExplorerGadget structure to customize column names, error messages, initial column widths, and style. Structure Definition: Type OptionsExplorerGadget szName As String*15 = "Name" szSize As String*15 = "Size" szType As String*15 = "Type" szModified As String*15 = "Modified" szCaptionError As String*15 = "Error" szTextError As String*50 = "Access Denied" iStyle As Integer = 0 ' Extended Window Style (WS_EX_...) iOneWidth As Integer = FB_IGNORE iTwoWidth As Integer = FB_IGNORE iThreeWidth As Integer = FB_IGNORE iFourWidth As Integer = FB_IGNORE End Type Platform: Windows Example: #Include "window9.bi" CenterWindow(OpenWindow("Explorer List",10,10,440,400)) Dim OP As OptionsExplorerGadget OP.iStyle = WS_EX_CLIENTEDGE // Add a sunken border OP.szName = "Filename" // Custom column name ExplorerListGadget(1,10,10,,,,@OP) // Create gadget using options Do:Loop Until EventClose=WaitEvent() Result: Shows an Explorer-like list view gadget. --- Gadget: GadgetToolTip --- FUNCTION: GadgetToolTip Syntax: Function GadgetToolTip(ByVal parentGadget as long, ByRef text As String, ByVal gadget As long=0) As Integer Description: Assigns a tooltip popup to another gadget. Options: parentGadget - ID of the gadget the tooltip should appear for. text - The text to display in the tooltip. gadget - Optional Gadget ID for the tooltip itself. Needed if you want to modify the tooltip later (e.g., change text, color, font) using its ID. Platform: Windows, Linux (Color/Font changes Win only) Example: #Include "window9.bi" OpenWindow("Tooltips",10,10,300,100) StringGadget(1,10,10,100,20, "Hover Me") ButtonGadget(2,120,10,130,20, "Hover Me Too") GadgetToolTip(1,"This is a String Gadget's tooltip.") // Tooltip for gadget 1 GadgetToolTip(2,"This is the Button's tooltip.", 10) // Tooltip for gadget 2, with ID 10 Do var event = WaitEvent() If event = eventclose Then End Loop Result: Shows tooltips when hovering over the string gadget or button. --- Gadget: GroupGadget --- FUNCTION: GroupGadget Syntax: Function GroupGadget(ByVal gadget As long, ByVal x As long, ByVal y As long, ByVal w As long, ByVal h As long, ByRef text As String="") As HWND Description: Creates a frame with a text label, visually grouping controls placed within its bounds. Options: gadget - Gadget ID. x, y, w, h - Location and dimensions of the frame. text - Text label displayed in the top-left corner of the frame. Platform: Windows, Linux Example: #Include "window9.bi" Dim As integer event OpenWindow("Group Box",300,10,300,200) GroupGadget(1,10,10,260,150,"Options Group") // Place other gadgets visually inside the group box area CheckBoxGadget(2, 20, 40, 100, 20, "Option A") CheckBoxGadget(3, 20, 70, 100, 20, "Option B") Do event=WaitEvent() If event=EventClose Then End Loop Result: Shows a framed group box labeled "Options Group" containing two check boxes. --- Gadget: HyperlinkGadget --- FUNCTION: HyperLinkGadget Syntax: Function HyperLinkGadget(ByVal gadget As long, ByVal x As long, ByVal y As long, ByVal w As long, ByVal h As long, ByRef textlink As String="") As HWND Description: Creates a text label that looks and behaves like a web hyperlink. Clicking it generates an EventGadget event. Options: gadget - Gadget ID. x, y, w, h - Location and dimensions. textlink - The text to display (usually the URL). Platform: Windows, Linux Example: #Include "window9.bi" Dim As Integer event Dim As HWND hwnd hwnd=OpenWindow("Hyperlink",10,10,300,100) : CenterWindow(hwnd) Dim url as String = "https://www.freebasic.net/" HyperLinkGadget(1,10,10,250,20, url) Do event=WaitEvent() If Event=EventClose Then End If event=eventgadget Then If EventNumber()=1 Then RunProgram(url) // Open the URL in default browser EndIf EndIf Loop Result: Shows clickable text; clicking opens the URL. --- Gadget: ImageGadget --- FUNCTION: ImageGadget Syntax: Function ImageGadget(ByVal gadget As Long, ByVal x As Long, ByVal y As Long, ByVal w As Long, ByVal h As Long, ByVal imageId As any ptr =0, byval ExSyle As Long =0, byval Style As Long = SS_BITMAP) As HWND Description: Creates a gadget to display a static image (bitmap or icon). Options: gadget - Gadget ID. x, y, w, h - Location and dimensions. imageId - Handle of the HBITMAP or HICON to display. Can be 0 initially and set later. ExStyle - (Windows only) If non-zero (e.g., WS_EX_CLIENTEDGE), adds a frame/border. Style - (Windows only) Specifies content type: SS_BITMAP (default) for bitmaps, SS_ICON for icons. Platform: Windows, Linux Example: #Include "window9.bi" Dim As integer event OpenWindow("Image Gadget",300,10,200,150) ImageGadget(1,10,10,32,32,Load_icon("1.ico"),,SS_ICON) // Display icon (Win) ImageGadget(2,50,10,100,100,Load_image("1.png")) // Display bitmap Do event=WaitEvent() If event=EventClose Then End Loop // Remember to free loaded images/icons Result: Shows a window displaying an icon and a bitmap in separate gadgets. --- Gadget: IpAddressGadget --- FUNCTION: IpAddressGadget Syntax: Function IpAddressGadget(ByVal gadget As Integer, ByVal x As Integer, ByVal y As Integer, ByVal w As Integer, ByVal h As Integer) As HWND Description: Creates a specialized control for entering IP addresses. Options: gadget - Gadget ID. x, y, w, h - Location and dimensions. Platform: Windows Example: #Include "window9.bi" Dim As integer event dim as HWND hwnd hwnd=OpenWindow("IP Address",300,10,230,150) ButtonGadget(1,10,10,200,30,"Get IP Address from Gadget") IpAddressGadget(2,10,50,150,25) // Create the control SetIpAddress(2,"192.168.1.1") // Set an initial value Do event=WaitEvent() If event=EventClose Then End If event=eventgadget Then If eventnumber()=1 then MessBox("IP Entered",GetIpAddress(2)) // Get the current value EndIf EndIf Loop Result: Shows an IP address entry control; button retrieves and displays its value. --- Gadget: ListBoxGadget --- FUNCTION: ListBoxGadget Syntax (Windows): Function ListBoxGadget(ByVal gadget As long, ByVal x As Long, ByVal y As Long, ByVal w As Long, ByVal h As Long, ByVal iStyle As Long=LBS_SORT Or WS_VSCROLL Or WS_HSCROLL Or LBS_NOTIFY, ByVal iStyle2 As Long=0) As HWND Syntax (Linux): Function ListBoxGadget( iGadget as Long , x as Long, y as long, w as Long, h as long , iStyle as Long = 0 , iStyle2 as long = 0 ) as Hwnd Description: Creates a list box control to display a selectable list of text items. Options: gadget - Gadget ID. x, y, w, h - Location and dimensions. iStyle - List box style flags.