MAPINFO GRID ENGINE. MapBasic scripts. MIGRID.DLL functions. using. Jacques Paris



Similar documents
PROGRAMA DE GRAFICACIÓN DE VELOCIDADES EN VENTANAS DE MAPINFO

Visual Basic Programming. An Introduction

MS Excel. Handout: Level 2. elearning Department. Copyright 2016 CMS e-learning Department. All Rights Reserved. Page 1 of 11

Note: With v3.2, the DocuSign Fetch application was renamed DocuSign Retrieve.

Changing the Display Frequency During Scanning Within an ImageControls 3 Application

Microsoft Access 2010 Part 1: Introduction to Access

A Comparison of SAS versus Microsoft Excel and Access s Inbuilt VBA Functionality Jozef Tarrant, Amadeus Software Ltd., Oxford, UK

How to incorporate custom toolbar buttons and cursors into your MapBasic application?

Creating a Gradebook in Excel

Microsoft Office Access 2007 Basics

Abstract. For notes detailing the changes in each release, see the MySQL for Excel Release Notes. For legal information, see the Legal Notices.

EXCEL PIVOT TABLE David Geffen School of Medicine, UCLA Dean s Office Oct 2002

Petrel TIPS&TRICKS from SCM

Ohio University Computer Services Center August, 2002 Crystal Reports Introduction Quick Reference Guide

Access Queries (Office 2003)

Creating and Using Links and Bookmarks in PDF Documents

Using SQL Server Management Studio

Printing to the Poster Printer

Hands-On Lab. Building a Data-Driven Master/Detail Business Form using Visual Studio Lab version: Last updated: 12/10/2010.

Microsoft Access 3: Understanding and Creating Queries

Working with SQL Server Integration Services

USER GUIDE Appointment Manager

Sage Timesheet Web Access How To Use Timesheet

Microsoft Access 2010 Overview of Basics

MyOra 3.0. User Guide. SQL Tool for Oracle. Jayam Systems, LLC

Objectives. Understand databases Create a database Create a table in Datasheet view Create a table in Design view

Beas Inventory location management. Version

MS Access Customer Database Template Documentation

OpenInsight 9.3 Quick Start Guide

The following is an overview of lessons included in the tutorial.

Introduction to the Graphing Calculator

KaleidaGraph Quick Start Guide

Lab 3. GIS Data Entry and Editing.

28 Simply Confirming Onsite

Manual Software SPECTRO3-MONITORING V5.0

Creating Personal Web Sites Using SharePoint Designer 2007

Visual Basic 2010 Essentials

BRIO QUERY FUNCTIONALITY IN COMPARISION TO CRYSTAL REPORTS

MAS 500 Intelligence Tips and Tricks Booklet Vol. 1

Simply Accounting Intelligence Tips and Tricks Booklet Vol. 1

Tutorial case study D (GIS import)

Personal Geodatabase 101

Introduction to Microsoft Word 2008

2. Building Cross-Tabs in Your Reports Create a Cross-Tab Create a Specified Group Order Filter Cross-Tab by Group Keep Groups Together

When a variable is assigned as a Process Initialization variable its value is provided at the beginning of the process.

MS Project Tutorial for Senior Design Using Microsoft Project to manage projects

Basic Pivot Tables. To begin your pivot table, choose Data, Pivot Table and Pivot Chart Report. 1 of 18

SQL Server An Overview

8 CREATING FORM WITH FORM WIZARD AND FORM DESIGNER

Aras Corporation Aras Corporation. All rights reserved. Notice of Rights. Notice of Liability

Advanced Microsoft Excel 2010

Decision Support AITS University Administration. Web Intelligence Rich Client 4.1 User Guide

CONFIGURING VIRTUAL TERMINAL: This is the screen you will see when you first open Virtual Terminal

How to Download Census Data from American Factfinder and Display it in ArcMap

Customizing Confirmation Text and s for Donation Forms

Sample Table. Columns. Column 1 Column 2 Column 3 Row 1 Cell 1 Cell 2 Cell 3 Row 2 Cell 4 Cell 5 Cell 6 Row 3 Cell 7 Cell 8 Cell 9.

Ofgem Carbon Savings Community Obligation (CSCO) Eligibility System

MapInfo Universal Translator User Guide

Working With Animation: Introduction to Flash

FRONTPAGE FORMS

Hands-On Lab. Client Workflow. Lab version: Last updated: 2/23/2011

Getting Started with Excel Table of Contents

Legal Notes. Regarding Trademarks KYOCERA Document Solutions Inc.

TS2Mascot. Introduction. System Requirements. Installation. Interactive Use

Getting to know your TI-83

Jump Start: Aspen Simulation Workbook in Aspen HYSYS V8

Evaluator s Guide. PC-Duo Enterprise HelpDesk v5.0. Copyright 2006 Vector Networks Ltd and MetaQuest Software Inc. All rights reserved.

Gestation Period as a function of Lifespan

My EA Builder 1.1 User Guide

Hermes.Net IVR Designer Page 2 36

Mac Outlook Calendar/Scheduler and Tasks

ImageJ Macro Language Quick-notes.

Lab 9 Access PreLab Copy the prelab folder, Lab09 PreLab9_Access_intro

Database Applications Microsoft Access

Online Digitizing and Editing of GIS Layers (On-Screen or Head s Up Digitizing)

Chapter 7 Event Log. Click the [Alarm (Event Log)] icon, and [Event Log] dialog appears as below:

Excel 2003 Tutorial I

This training module reviews the CRM home page called the Dashboard including: - Dashboard My Activities tab. - Dashboard Pipeline tab

Microsoft Access 2010: Basics & Database Fundamentals

WebSphere Business Monitor V6.2 KPI history and prediction lab

Advanced Outlook Tutorials

TakeMySelfie ios App Documentation

Petrel TIPS&TRICKS from SCM

MICROSOFT ACCESS 2003 TUTORIAL

Smart Web. User Guide. Amcom Software, Inc.

ecommerce User Guide LS Nav 2013 (7.1) Copyright 2014, LS Retail ehf. All rights reserved. All trademarks belong to their respective holders

v4.8 Getting Started Guide: Using SpatialWare with MapInfo Professional for Microsoft SQL Server

A Basic introduction to Microsoft Access

NETWORK PRINT MONITOR User Guide

not at all a manual simply a quick how-to-do guide

Product: DQ Order Manager Release Notes

LAFAYETTE REPORT BUILDER

Configuration Manager

SAP BusinessObjects Business Intelligence (BI) platform Document Version: 4.1, Support Package Report Conversion Tool Guide

Excel basics. Before you begin. What you'll learn. Requirements. Estimated time to complete:

Program to solve first and second degree equations

Microsoft Excel 2010 Part 3: Advanced Excel

User Management Resource Administrator. UMRA Example Projects. Service Management

Transcription:

MAPINFO GRID ENGINE MapBasic scripts using MIGRID.DLL functions Jacques Paris September 2001

This document contains 4 MapBasic code listings showing how to use calls to the MiGrid library. These examples have been in the largest part extracted from the GridTools.mb listing offered by Andrew Dressel (MI Corp). I have trimmed the code and made each part an autonomous program, which explains some redundancies. I have also added comments where I judged it necessary if it was not yet included in the original listing. The main reason for exploding GridTools into several parts is essentially pedagogical; the examples show more clearly than in a long listing the way to handle the functions; they also have increasing degrees of complexity and they build in part on each other. The first two examples demonstrate that a file does not have to be open as a MI table for the handle and the file info to be retrieved (a difference with MI that recognizes a table only if it is open) Ex01: the simplest example shows how to get the handle of a grid file. Ex02: once a grid file is open, the geographical information is retrieved. That info goes beyond the simple image coordsys and the extents of the map ; it covers also the number of cells and the max and min Z values. The actual size of a cell can be calculated from those variables. Ex03: with the geo information of the file known, it is simple to retrieve the actual Z value of any cell. Ex03 gives the Z value at the position where the user clicked. Ex04: a grid is first created from some info collected from the user (number of cells in X and Y, mini and maxi of z values) and some fixed (but a priori) data (projection, geographical range). A formula (also a priori) transforms the z range in equal increments based on the number of cells and assigns a value to each cell; color is applied ranging from (the last a priori) blue to red. For comments: jacques@paris-pc-gis.com

Ex01 Demo program showing how to get the handle of a MIG grid file Declare Function GE_OpenGrid lib "migrid.dll" (lpzfilename As string, byval cache as integer, hgrid as integer ) As logical dim filein as string dim hgrid as integer dim lreturn as logical filein=fileopendlg("","","mig","select MI Grid file") if filein="" then exit sub end if lreturn = GE_OpenGrid(filein, 1024, hgrid) If Not lreturn Then Note "Open " + filein + " failed" Exit Sub If hgrid = 0 Then Note "Open " + filein + " failed: grid handle = 0" Exit Sub Print " Opened " + filein + chr$(10) + " with handle " + hgrid

Ex02 Demo program showing how to retrieve all the available "geographic information" contained in a MIG file Declare Function GE_OpenGrid lib "migrid.dll" (lpzfilename As string, byval cache as integer, hgrid as integer ) As logical Declare Function GE_GetCoordSysInfo Lib "Migrid.dll" (ByVal hgrid As Integer, acoordsys As String, MinXVal As Float, MinYVal As Float, MaxXVal As Float, MaxYVal As Float ) As Logical Declare Function GE_GetContinuousMinMax Lib "Migrid.dll" (ByVal hgrid As Integer, MinZVal As Float,MaxZVal As Float ) As Logical Declare Function GE_GetDimensions Lib "Migrid.dll" (ByVal hgrid As Integer, Width As Integer, Height As Integer ) As Logical dim filein, acoordsys as string dim hgrid as integer dim lreturn as logical dim MinXVal, MaxXVal, MinYVal, MaxYVal, MinZVal, MaxZVal as float dim Width, Height as integer filein=fileopendlg("","","mig","select MI Grid file") if filein="" then exit sub end if ' open grid with GE_OpenGrid lreturn = GE_OpenGrid(filein, 1024, hgrid) If Not lreturn Then Note "Open " + filein + " failed" Exit Sub If hgrid = 0 Then Note "Open " + filein + " failed: grid handle = 0" Exit Sub print "FILE "+filein ' geographical parameters with GE_GetCoordSysInfo ' initialize the string variable to allocate actually memory acoordsys = Space$(255) lreturn = GE_GetCoordSysInfo(hGrid, acoordsys, MinXVal, MinYVal, MaxXVal, MaxYVal) Print " " + acoordsys Print " MinXVal = " + MinXVal + ", MinYVal = " + MinYVal + chr$(10)+ " MaxXVal = " + MaxXVal + ", MaxYVal = " + MaxYVal

' Get minimum and maximum grid values with GE_GetContinuousMinMax lreturn = GE_GetContinuousMinMax(hGrid, MinZVal, MaxZVal) Print " MinZVal = " + MinZVal + ", MaxZVal = " + MaxZVal ' Get grid dimensions (n of rows and columns) with GE_GetDimensions lreturn = GE_GetDimensions(hGrid, Width, Height) Print " Width (in cells) = " + Width + ", Height = " + Height

Ex03 Demo program showing how to retrieve data from a MIG grid file include "mapbasic.def" include "icons.def" Declare Function GE_OpenGrid lib "migrid.dll" (filein As string, byval cache as integer, hgrid as integer ) As logical Declare Function GE_GetCoordSysInfo lib "migrid.dll" (ByVal hgrid as integer, clau as string, mix as float, miy as float, max as float, may as float ) as logical Declare Function GE_GetContinuousMinMax lib "migrid.dll" (ByVal hgrid as integer, zmin as float, zmax as float ) as logical Declare Function GE_GetDimensions lib "migrid.dll" (ByVal hgrid as integer, wid as integer, hei as integer ) as logical Declare Function GE_GetContinuousValue lib "migrid.dll" (ByVal hgrid as integer,byval icol as integer,byval jrow as integer, zval as float, ax as smallint ) as logical Declare Function GE_GetGridType lib "migrid.dll" (ByVal hgrid as integer, gtyp as smallint) as logical Declare Function GE_StartRead lib "migrid.dll" (ByVal hgrid as integer) as logical Declare Function GE_EndRead lib "migrid.dll" (ByVal hgrid as integer) as logical Declare Function GE_CloseGrid lib "migrid.dll" (hgrid as integer) as logical declare sub main declare sub GridInfoToolHandler declare function findlayer as string declare sub about declare sub goodbye dim filein, claus as string dim typg, puchisnull as smallint dim hgrid, widt, heig,icol,jrow as integer dim xmin,ymin,xmax,ymax,zmin,zmax, zval as float dim iret as logical

sub main ' In this program, a menu is useful mainly to terminate the application ' and remove the tool from the ToolPad. Also an opportunity to say ' something about the program create menu "Read Grid" as "About Read Grid" calling about, "Remove grid Grid" calling goodbye alter menu id 4 add "Read Grid" as "Read Grid" Alter ButtonPad ID 3 Add Separator ToolButton ID 9944 Calling GridInfoToolHandler Icon 46 Cursor MI_CURSOR_CROSSHAIR DrawMode DM_CUSTOM_POINT HelpMsg "Retrieve value from grid cell.\nretrieve grid value" Show end sub Sub GridInfoToolHandler OnError Goto HandleError Dim scmd, val As String Dim MapWindowID, lcol, lrow As Integer Dim x, y, xx, yy, pdvalue As Float Dim i, puchisnull As SmallInt ' check where click was located and identify the table (=layer) If WindowInfo( frontwindow(), WIN_INFO_TYPE) <> WIN_MAPPER Then Note "Click in a mapper with a MIG layer." Exit Sub filein=findlayer() ' retrieve geographic info for the grid claus=space$(255) iret=ge_getcoordsysinfo(hgrid,claus,xmin,ymin,xmax,ymax) iret=ge_getdimensions(hgrid,widt,heig) iret=ge_getgridtype(hgrid,typg) iret=ge_getcontinuousminmax(hgrid,zmin,zmax) ' retrieve cursor position and open grid file scmd = "Set " + claus Run Command scmd

x = CommandInfo(CMD_INFO_X) y = CommandInfo(CMD_INFO_Y) iret = GE_StartRead(hGrid) if not iret then note filein+" with handle "+hgrid+chr$(10)+chr$(10)+"cannot be open for reading" exit sub end if ' convert cursor position in geo coordinates ' and extract corresponding z value If iret Then lcol = (Widt * (x - XMin) / (XMax - XMin)) +.5 lrow = (Heig - Heig * (y - YMin) / (ymax - YMin)) +.5 xx=xmin+(xmax-xmin)/widt*(lcol-.5) yy=ymax-(ymax-ymin)/heig*(lrow-.5) iret = GE_GetContinuousValue(hGrid, lcol, lrow, pdvalue, puchisnull) If lcol < 0 Or lrow < 0 Or lcol >= Widt Or lrow >= Heig Then ' the user clicked in a map but outside the bounds of a mig file If pdvalue = 0 Then val=" is undefined" Else val=str$(pdvalue)+ " but should be undefined" Else If puchisnull Then ' distinguish between zero values and NULL val="null." Else val=str$(pdvalue) dialog title "Information on a cell in a MIG file" control statictext title "File : " position 10,10 control statictext title filein position 10,20 control statictext title "Detected cell position" position 10,35 control statictext title "Row : "+lrow position 20,45 control statictext title "Column : "+lcol position 80,45 control statictext title "Estimated cell centroid coordinates" position 10,60 control statictext title "X : "+xx position 20,70 control statictext title "Y : "+yy position 80,70 control statictext title "Value : "+val position 45,90 control okbutton position 50,110 ' terminate read of grid iret = GE_EndRead(hGrid) Else Note " StartRead(" + hgrid + ") failed"

' close grid iret = GE_CloseGrid(hGrid) Exit Sub HandleError: Note "GridInfoToolHandler: " + Error$() Resume Next end sub function findlayer as string dim spath as string dim i as smallint dim MapWindowID as integer MapWindowID=frontwindow() ' find the first layer in the pile that is a GRID file For i = 1 To MapperInfo(MapWindowID, MAPPER_INFO_LAYERS) If LayerInfo(MapWindowID, i, LAYER_INFO_TYPE) = LAYER_INFO_TYPE_GRID Then spath = LayerInfo(MapWindowID, i, LAYER_INFO_PATH) Exit For Next ' find if the corresponding file exists spath = Left$(sPath, Len(sPath)-3) + "mig" If Not FileExists(sPath) Then Note "Cannot find grid file " + spath Exit function ' get the file handle iret = GE_OpenGrid(sPath, 1024, hgrid) ' prepare function result if not iret then note "Open failed on file "+spath goto faux end if if hgrid =0 then note "Handle of ZERO on file "+spath goto faux end if

findlayer=spath exit function faux: findlayer="" end function sub about note "Read Grid reads the z value of the cell in whcih the user clicked. "+ "Click on 'arrow+?' icon added in the tool bar then the CrossHair cursor"+chr$(10)+chr$(10)+ "Demo program part of 'GridEngine calls in MapBasic', J.Paris, Sept 01" end sub sub goodbye end program end sub

Ex04 Demo program showing how to create a MIG grid file and write data to it include "mapbasic.def" Define ID_EDIT_TEXT_FILENAME 601 Define ID_EDIT_TEXT_ROWS 602 Define ID_EDIT_TEXT_COLS 603 Define ID_EDIT_TEXT_MIN 604 Define ID_EDIT_TEXT_MAX 605 Define GE_GRIDINFO_MAGIC_NUMBER 13124 Define GE_GRIDINFO_INVALID 43690 Define GE_GRIDTYPE_CONTINUOUS 1 Define GE_GRIDTYPE_CLASSIFIED 2 Define GE_MAX_INFLECTIONS 255 Define _MAX_PATH 260 pathname Define GE_COLOR Integer Define GE_HGRID Integer ' max. length of full Type GE_COLORINFLECTIONS snuminflections As SmallInt alignmentfiller(3) As SmallInt advalue(ge_max_inflections) As FLoat acolor(ge_max_inflections) As GE_COLOR End Type Type GE_GRID_INFO lmagic As Integer lwidth As Integer llength As Integer ptchcoordsys As String dminxval As Float dmaxxval As Float dminyval As Float dmaxyval As Float End Type Declare Function GE_GetDefaultWriteHandler Lib "Migrid.dll" (ByVal sgridtype As SmallInt, ptchhandlername As String ) As Logical Declare Function GE_CreateContinuousGrid Lib "Migrid.dll" (ptchhandlername As String, ptchfilename As String, pinflections As GE_COLORINFLECTIONS, ByVal uchisnulltransparent As SmallInt, clrnull As GE_COLOR, pgridinfo As GE_GRID_INFO, ByVal dminval As Float, ByVal dmaxval As FLoat, phgrid As GE_HGRID ) As Logical Declare Function GE_WriteContinuousValue Lib "Migrid.dll" (ByVal hgrid As GE_HGRID, ByVal lcol As Integer, ByVal lrow As Integer, ByVal dvalue As Float ) As Logical

Declare Function GE_CloseContinuousGrid Lib "Migrid.dll" (phgrid As GE_HGRID) As Logical declare sub main Declare Function CreateGridDialog() As Logical Declare Sub BrowseButtonHandler Declare Sub OKButtonHandler Global szgridfilename As String Global irows, icols As Integer Global fmin, fmax As Float sub main Dim ret As Logical Dim atchhandlername As String Dim hgrid As GE_HGRID Dim Inflections As GE_COLORINFLECTIONS Dim GridInfo As GE_GRID_INFO Dim clrnull As GE_COLOR Dim uchisnulltransparent As SmallInt Dim r, c, i As Integer Dim dvalue As Float ' get the default grid handler name. ' initialize first the string variable holding the name atchhandlername = Space$(_MAX_PATH) ret = GE_GetDefaultWriteHandler(GE_GRIDTYPE_CONTINUOUS, atchhandlername) print chr$(12) print "GetDefaultWriteHandler returned with " + atchhandlername ' call the dialog to input grid parameters If Not CreateGridDialog() Then Exit Sub ' set the various parameters for the "coloring" ' there will be continuous coloring from BLUE to RED ' the "end points" are counted as inflections. ' to add another intermediate point at green we could have ' inflections.snuminflections =3 ' the first point with no change, the previous (2) renamed (3) and ' Inflections.adValue(2) = (fmax - fmin)/2 ' Inflections.aColor(2) = RGB(0,255,0) Inflections.sNumInflections = 2 Inflections.adValue(1) = fmin Inflections.aColor(1) = RGB(0,0,255) Inflections.adValue(2) = fmax Inflections.aColor(2) = RGB(255,0,0) ' a simple lon/lat "map will be produced with a one degree span in both

' directions GridInfo.lMagic = GE_GRIDINFO_MAGIC_NUMBER GridInfo.lWidth = icols GridInfo.lLength = irows GridInfo.ptchCoordSys = "CoordSys Earth Projection 1, 62" GridInfo.dMinXVal = 1 GridInfo.dMaxXVal = 2 GridInfo.dMinYVal = 1 GridInfo.dMaxYVal = 2 clrnull = RGB(0,0,0) uchisnulltransparent = 1 ' 0=opaque, 1=transparent ' if more than 2 inflections, Inflections.adValue(2) >...Value(number ' of inflections) the "frame" of the grid is created but the z values ' are not entered ret = GE_CreateContinuousGrid(atchHandlerName, szgridfilename, Inflections, uchisnulltransparent, clrnull, GridInfo, Inflections.adValue(1), Inflections.adValue(2), hgrid) print " Created Continuous Grid " + szgridfilename ' the z values are calculated as proportions of the defined Z range ' given the order of creation of the value from the upper left to the ' lower right corner. This formula is just a demo of value generation. For r=0 To GridInfo.lLength-1 For c=0 To GridInfo.lWidth-1 dvalue = Inflections.adValue(1) + (Inflections.adValue(2)- Inflections.adValue(1)) * ((r*gridinfo.lwidth+c) / (GridInfo.lLength * GridInfo.lWidth)) Print " Row:"+r+" Col:"+c+" Val="+dValue ret = GE_WriteContinuousValue(hGrid, c, r, dvalue) Next Next ' closing the grid ret = GE_CloseContinuousGrid(hGrid) print "Continuous Grid Closed" 'registering the grid as a MI table end sub Register Table TrueFileName$(szGridFileName) Type "GRID" Open Table Left$(szGridFileName, Len(szGridFileName)-4) Map From TableInfo(0, TAB_INFO_NAME) = Function CreateGridDialog() As Logical =

Dim srows, scols, smin, smax As String ' read in the four variables required from the user srows = Str$(iRows) scols = Str$(iCols) smin = Str$(fMin) smax = Str$(fMax) Dialog Title "Create a new grid file" Control StaticText Title "Grid File Name:" Position 10, 12 Control EditText Value szgridfilename Into szgridfilename ID ID_EDIT_TEXT_FILENAME Position 60, 10 Width 200 Control Button Title "&Browse..." Calling BrowseButtonHandler Position 270, 10 Control StaticText Title "Rows:" Position 10, 32 Control EditText Value srows Into srows ID ID_EDIT_TEXT_ROWS Position 40, 30 Control StaticText Title "Columns:" Position 10, 47 Control EditText Value scols Into scols ID ID_EDIT_TEXT_COLS Position 40, 45 Control StaticText Title "Minimum value:" Position 143, 32 Control EditText Value smin Into smin ID ID_EDIT_TEXT_MIN Position 195, 30 Control StaticText Title "Maximum value:" Position 143, 47 Control EditText Value smax Into smax ID ID_EDIT_TEXT_MAX Position 195, 45 Control OKButton Title "&OK" Position 100, 90 Calling OKButtonHandler Control CancelButton Title "&Cancel" Position 150, 90 If CommandInfo(CMD_INFO_DLG_OK) Then irows = Val(sRows) icols = Val(sCols) fmin = Val(sMin) fmax = Val(sMax) CreateGridDialog = TRUE Else CreateGridDialog = FALSE End Function Sub BrowseButtonHandler ' retrieve the path of the selected file szgridfilename = FileSaveAsDlg(PathToDirectory$(TempFileName$("")),"", "MIG", Specify grid file name") If szgridfilename <> "" Then Alter Control ID_EDIT_TEXT_FILENAME Value szgridfilename End Sub

Sub OKButtonHandler ' an added security. Verify that the grid file has been properly ' created Dim srows, scols As String Dim i As Integer szgridfilename = ReadControlValue(ID_EDIT_TEXT_FILENAME) If szgridfilename <> "" Then If Right$(UCase$(szGridFilename),4) <> ".MIG" Then i = InStr(1, szgridfilename, ".") If i > 0 Then szgridfilename = Left$(szGridFilename, i-1) szgridfilename = szgridfilename + ".MIG" Open File szgridfilename For Output As #1 Close File #1 Alter Control ID_EDIT_TEXT_FILENAME Value szgridfilename Else Note "Invalid blank grid file name" Dialog Preserve srows = ReadControlValue(ID_EDIT_TEXT_ROWS) scols = ReadControlValue(ID_EDIT_TEXT_COLS) irows = Val(sRows) icols = Val(sCols) If irows < 1 Or icols < 1 Then Note "Rows and Columns need to be greater than 0" Dialog Preserve End Sub