1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906 |
- %
- % $Id$
- % This file is part of the FPC documentation.
- % Copyright (C) 1997,1999 by the Free Pascal Development team
- %
- % The FPC documentation is free text; you can redistribute it and/or
- % modify it under the terms of the GNU Library General Public License as
- % published by the Free Software Foundation; either version 2 of the
- % License, or (at your option) any later version.
- %
- % The FPC Documentation is distributed in the hope that it will be useful,
- % but WITHOUT ANY WARRANTY; without even the implied warranty of
- % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- % Library General Public License for more details.
- %
- % You should have received a copy of the GNU Library General Public
- % License along with the FPC documentation; see the file COPYING.LIB. If not,
- % write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- % Boston, MA 02111-1307, USA.
- %
- % Documentation for the 'Graph' unit of Free Pascal.
- % Michael Van Canneyt, July 1997
- % Carl Eric Codere, April 1999
- \chapter{The GRAPH unit.}
- This document describes the \textbf{GRAPH} unit for Free Pascal. This unit includes
- more then 50 graphics routines, that range from low-level calls such as putpixel
- to high level calls like Circle and Bar3D. Different fill styles and line
- patterns are supported in most of the routines.
- \section{Overview}
- \label{se:Overview}
- \subsection{Compatibility}
- Since the graph unit included with \var{fpc} is a portable implementation of
- the Turbo Pascal unit, there are some slight differences between the video
- modes and features.
- \subsubsection{Initialization}
- Each graph unit implementation, will have a 320x200 resolution refered to
- \textit{LowResolution}. If the hardware for the specific platform does
- not support that resolution, then it will have to be emulated. Apart
- from that requirement, all other resolutions will be dependant on the
- target platform.
- The correct way and portable way to initialize to graphics subsystem, is
- to first query the hardware, and then from that, decide which mode you
- wish to support. The routine which does this is called \textit{QueryAdapterInfo}.
- This routine returns a linked list of modes availables, and their
- mode number as well as driver numbers. It is to note that this list is
- initialized only once during the lifetime of the application (that is,
- even if CloseGraph is called, the list will still be valid). The memory
- allocated for this list is automatically freed as part as the graph
- unit's exit procedure.
- You can always use Detect as a parameter to \textit{InitGraph}
- which will initialize the graphics to the highest resolution possible.
- The following constants are also defined for compatiblity with older
- applications written with Turbo Pascal, they should no longer be used:
- \begin{tabular}{|c|c|c|}
- \hline
- Driver Name & Constant Name & Column x Row & Colors \\ \hline
- HercMono & HercMonoHi & 720x348 & 1 \\
- VGA & VGAHi & 640x480 & 16 \\
- VGA & VGA256 & 320x200 & 256 \\
- \hline
- \end{tabular}
- \subsubsection{Other differences}
- Some notable differences with the Turbo Pascal graph unit are noted
- below:
- \begin{itemize}
- \item \textit{Rectangle} do not write
- the end points twice, which permits the XORPut write mode to be used
- effectively for erasing these forms on the screen.
- \item \textit{RegisterBGIDriver} and \textit{InstallUserDriver} always
- return errors, as they are not directly supported.
- \item \textit{DrawPoly} XORPut write mode does not have the same behaviour
- as the one in the Turbo Pascal graph unit.
- \item XORPut write mode is not supported by \textit{FillEllipse}.
- \item XORPut write mode is not supported by \textit{Bar3d}.
- \item Passing invalid parameters to \textit{SetTextStyle} will not
- result in the same visual appearance. Make sure your input is valid.
- \item All routines using sines/cosines (e.g: \textit{circle}), don't
- exactly have the same radii, because the aspect ratio correction is
- different.
- \item PutImage supports clipping.
- \item \textit{SetRGBPalette} use the LSB's of the RGB components to
- set the color values of the palette. This makes the unit more portable.
- \item \textit{PaletteType} is different then the Turbo Pascal version,
- it uses RGB Values for the palettes.
- \item \textit{SetAllPalette} is different then the Turbo Pascal version,
- it uses the PaletteType as a parameter.
- \item \textit{GetDefaultPalette} only returns only at most the 256 first
- default entries of a palette, even if the mode supports more then
- 256 colors.
- \end{itemize}
- \subsection{Coordinate system}
- The upper left of the graphics screen is located at position (0,0). The x
- value, which represents the column, increments to the right. The y values,
- or rows, increment downward. The maximum value which can be set for an x
- value, for the graphics screen is given by the \textit{GetMaxX} routine.
- The same is true for the y coordinate, except a call to \textit{GetMaxY}
- is required.
- \subsection{Current pointer}
- Some graphics routines support the concept of the current pointer (CP). The
- current pointer is similar in concept to a text cursor, except that it is
- invisible.
- When you write in text mode, the text cursor is automatically incremented
- by the number of characters written. The same is true with the graphics
- current pointer, which is instead incremented on a pixel basis.
- For example, the following:
- \begin{verbatim}
- MoveTo(0,0);
- LineTo(100,100);
- \end{verbatim}
- will leave the current pointer to the (100,100) coordinate pair. The
- pixels might not be drawn depending on your clipping settings, but the
- CP is never clipped to clipping boundaries.
- The following routines set the CP to the new position:
- \begin{itemize}
- \item \textit{ClearDevice}
- \item \textit{ClearViewPort}
- \item \textit{GraphDefaults}
- \item \textit{InitGraph}
- \item \textit{LineRel}
- \item \textit{LineTo}
- \item \textit{MoveRel}
- \item \textit{MoveTo}
- \item \textit{OutText}
- \item \textit{SetGraphMode}
- \item \textit{SetViewPort}
- \end{itemize}
- \subsection{Error handling}
- There is only basic error checking in the graph unit. To get the value of
- the last error returned by a graphics driver call, call the
- \textit{GraphResult} routine. The following routines can set error codes,
- others don't :
- \begin{itemize}
- \item \textit{Bar} --- ok
- \item \textit{Bar3D} --- ok
- \item \textit{ClearViewPort}
- \item \textit{CloseGraph}
- \item \textit{DetectGraph}
- \item \textit{DrawPoly} --- ok
- \item \textit{FillPoly} --- ok
- \item \textit{FloodFill} --- ok
- \item \textit{GetModeName} --- ok
- \item \textit{GetRGBPalette} --- ok
- \item \textit{InitGraph} --- ok
- \item \textit{InstallUserDriver} --- ok
- \item \textit{InstallUserFont} --- ok
- \item \textit{PieSlice}
- \item \textit{RegisterBGIDriver} --- ok
- \item \textit{RegisterBGIFont} --- ok
- \item \textit{SetAllPalette} --- ok
- \item \textit{SetFillPattern} --- ok
- \item \textit{SetFillStyle} --- ok
- \item \textit{SetGraphBufSize}
- \item \textit{SetGraphMode}
- \item \textit{SetLineStyle} --- ok
- \item \textit{SetPalette} --- ok
- \item \textit{SetRGBPalette} --- ok
- \item \textit{SetTextJustify} --- ok
- \item \textit{SetTextStyle} --- ok
- \item \textit{SetViewPort} --- ok
- \end{itemize}
- \textit{GraphResult} is reset to zero after it has been called. Therefore
- the user should store the value returned by this function into a temporary
- variable and then use it.
- \subsection{Write modes}
- Write modes permits combining colors with already existing on-screen colors,
- \textit{PutImage} supports several write modes, while most other routines
- support only CopyPut/NormalPut and XORPut modes.
- The following routines support XORPut write modes (all routines support
- CopyPut modes):
- \begin{itemize}
- \item \textit{FillPoly}
- \item \textit{Arc} with ThickWidth line styles only
- \item \textit{Circle} with ThickWidth line styles only
- \item \textit{Line}
- \item \textit{LineRel}
- \item \textit{LineTo}
- \item \textit{Rectangle}
- \item \textit{DrawPoly}
- \end{itemize}
- \subsection{Text}
- An internal bitmap font is included with this implementation of the graph
- unit. It also possible to load and use standard Borland CHR external
- vectorized font files. A bitmapped font is defined in this case by
- a matrix of 8x8 pixels. A vector font (also referred to as a stroked font)
- is defined by a series of vectors that tell the graphics system how to draw
- the font.
- \subsection{Clipping and Viewports}
- \textit{SetViewPort} makes all output commands operate in a rectangular
- region of the screen. Most output routines are viewport relative until
- the viewport is changed. If clipping is active, all graphics is output
- is clipped to the current region.
- There is always clipping to the screen boundaries, whatever the clipping
- setting is.
- \subsection{Internals}
- To make porting to a new platform easier, some of the graph unit routines
- have been designed using procedural variables. Some of the routines have
- default hooks, while others must absolutely be implemented for every new
- platform to make the graph unit work.
- The following routines must be created for every new platform supported:
- \begin{itemize}
- \item \textit{CloseGraph}
- \item \textit{DirectPutPixel}
- \item \textit{PutPixel}
- \item \textit{GetPixel}
- \item \textit{InitMode}
- \item \textit{SaveVideoState}
- \item \textit{RestoreVideoState}
- \item \textit{QueryAdapterInfo}
- \item \textit{SetRGBPalette}
- \item \textit{GetRGBPalette}
- \end{itemize}
- The following global variables must be setup for every new platform
- supported:
- InternalDriverName
- \var{InternalDriverName}
- This variable should be set to a string describing the platform driver
- name. It is returned by the user function GetDriverName. Some examples
- of driver names are 'DosGX', 'DirectX', 'QuickDrw','CyberGFX', 'Dive'.
- \var{CloseGraph}
- The CloseGraph routine is called directly by the user and must
- do the necessary cleanup by freeing up all platform specific
- memory allocations, and by calling RestoreVideoState.
- \var{DirectPutPixel}
- This routine is one of the most important callback routines with
- PutPixel, it is called by most of the routines in the graph unit. It
- is about the same as PutPixel except that the coordinates passed to
- it are already in global (screen) coordinates, and that clipping has
- already been performed.
- \var{InitMode}
- This callback routine is called by SetGraphMode to actualliy change to
- the correct video mode. (SetGraphMode is called by InitGraph).
- \var{SaveVideoState}
- This routine is called by InitGraph before changing to the graphics video
- mode, it should save the old video mode, save any internal video state
- such as the palette entries.
- \var{RestoreVideoState}
- This routine should be called by CloseGraph, it should restore the video
- mode to the one saved in SaveVideoState, and restore all appropriate video
- information, so that the video is in the same state as it was when
- SaveVideoState was called.
- \var{QueryAdapterInfo}
- This routine might be called by the user BEFORE we are in graphics
- mode. In all cases it is called by DetectGraph and InitGraph. It
- creates a linked list of video capabilities and procedural hooks for
- all supported video modes on the platform. Look at the DOS version,
- to see how it works. This linked list can be read by the user before a
- call to InitGraph to determine which mode to use.
- The linked list is composed of mode information, as well to pointers
- to the callback routines cited above. Some additional optional hooks
- are also possible for those who wish to optimize the speed of the unit.
- -------------------------------------------------------------
- \begin{function}{GetModeName}
- \Declaration
- Function GetModeName (ModeNumber : Integer) : String;
- \Description
- Returns a string with the name of the specified graphics mode. The
- return values are in the form, XRes x YRes NAME. This function is
- useful for building menus, display status, and so forth.
- \Errors
- If the specified \var{ModeNumber} is invalid, the function returns an
- empty string and sets GraphResult to grInvalidMode.
- \SeeAlso
- \seef{GetDriverName}, \seep{GetModeRange}, \seep{GetMaxMode}
- \end{function}
- ------------------------
- \begin{procedure}{SetAllPalette}
- \Declaration
- Procedure SetAllPalette(var Palette: PaletteType) ;
- \Description
- \var{Palette} is of type PaletteType. Thie first field in Palette
- contains the length of the palette. The next \textit{n} fields of
- type \var{RGBRec} contains the Red-Green-Blue components to replace
- that specific color with. A value of -1 will not change the previous
- entry's value.
- Note that valid colors depend on the current graphics mode.
- If the number of palette entries to replace is greater then the
- number of colors possible on the screen, \var{GraphResult} returns
- a value of \var{grError} and no changes to the palette settings will
- occur.
- Changes to the palette take effect immediately on the screen. Each time
- a palette color is changed, that color will be changed to the new color
- value.
- This routine returns \var{grError} if called in a direct color mode.
- \Errors
- None.
- \SeeAlso
- \seep{SetRGBPalette}, \seep{SetPalette}
- \end{procedure}
- ------------------------
- ------------------------
- \begin{procedure}{GetDefaultPalette}
- \Declaration
- Procedure GetDefaultPalette (Var Palette : PaletteType);
- \Description
- Returns a \var{PaletteType} record containing the default RGB color
- values when the graphics mode is initialized. These values are based
- on the IBM-PC VGA hardware adapter, but do not change from platform
- to platform.
- On other platforms the colors may not exactly match those
- on the IBM-PC, but the match should be close enough for most uses. This
- value is static and does never change.
- Even if the modes can support more then 256 color entries, only the
- 256 first colors can be considered as having default values. Therefore,
- at most this function will return 256 entries. To query all colors over
- 256 yourself, use \var{GetRGBPalette} for the entire palette range.
- \Errors
- None.
- \SeeAlso
- \seef{GetColor}, \seef{GetBkColor}, \seep{GetRGBPalette}
- \end{procedure}
- ------------------------
- \begin{procedure}{GetPalette}
- \Declaration
- Procedure GetPalette (Var Palette : PaletteType);
- \Description
- \var{GetPalette} returns in \var{Palette} the current palette. The palette
- is in LSB RGB format.
- This routine returns \var{grError} if called in a direct color mode.
- \Errors
- None.
- \SeeAlso
- \seef{GetPaletteSize}, \seep{SetPalette}
- \end{procedure}
- ---------------------------
- ---------------------------
- \begin{function}{GetBkColor}
- \Declaration
- Function GetBkColor : Word;
- \Description
- \var{GetBkColor} returns the current background color. If in non direct color
- mode, this returns the palette entry, otherwise it returns the direct
- RGB value of the current drawing color.
- \Errors
- None.
- \SeeAlso
- \seef{GetColor},\seep{SetBkColor}
- \end{function}
- ---------------------------
- \begin{function}{GetColor}
- \Declaration
- Function GetColor : Word;
- \Description
- \var{GetColor} returns the current drawing color. If in non direct color
- mode, this returns the palette entry, otherwise it returns the direct
- RGB value of the current drawing color.
- \Errors
- None.
- \SeeAlso
- \seef{GetColor},\seep{SetBkColor}
- \end{function}
- ---------------------------
- \begin{procedure}{GetRGBPalette}
- \Declaration
- Procedure GetRGBPalette (ColorNum: intege; var Red,Green,Blue : Integer);
- \Description
- \var{GetRGBPalette} gets the \var{ColorNum}-th entry in the palette.
- The Red , Green and Blue values returned arein LSB format.
- If the palette entry could not be read for a reason,
- the routine returns \var{grError}.
- This routine returns \var{grError} if called in a direct color mode.
- \Errors
- None.
- \SeeAlso
- \seep{SetAllPallette},
- \seep{SetPalette}
- \seep{SetRGBPalette}
- \end{procedure}
- ----------------------------
- ----------------------------
- \begin{procedure}{SetDirectVideo}
- \Declaration
- Procedure SetDirectVideo (DirectAccess : boolean);
- \Description
- Determines how the video access should be done, if DirectAccess
- is set to TRUE then access will be done directly to video memory, if
- it is supported, otherwise Operating systems calls will be done to
- access the video memory.
- The behaviour of this routine depends on the platform, and is required
- for example to use the graph unit under older multitaskers such as
- Desqview (DOS platform). Certain modes simply are simply not supported
- via Operating system calls, while others are only supported by the
- operating system. In those cases this routine is simply ignored.
- Using operating system calls to plot pixels is much slower then using
- the direct mode, but it provides more compatibility.
- \textbf{Platform specific}
- Windows NT, OS/2, Windows '9x, Windows 3.x, Linux DOSEMU support
- all \textit{standard} video DOS modes, even in DirectVideo mode.
- Others, like Desqview, Topview, DoubleDOS and MultiDOS might not.
- In that case, \vaR{SetDirectVideo} should be called and set to FALSE.
- VESA modes are not considered as standard DOS video modes,
- and should simply not be used under such multitaskers/emulators.
- Mode-X is not considered a standard DOS mode, but is supported in
- most modern operating systems, since it uses only standard VGA
- I/O ports and memory. (Exception: older multitaskers such as Desqview).
- NOT IMPLEMENTED YET.
- \Errors
- None.
- \SeeAlso
- \seef{GetDirectVideo}
- \end{procedure}
- ----------------------------
- \begin{function}{GetDirectVideo}
- \Declaration
- Function GetDirectVideo : boolean;
- \Description
- Returns the state of the of DirectAccess flag. If this value returns
- TRUE, then in the case where it is possible, the video memory is directly
- accessed to plot graphics points, otherwise operating system calls
- are used.
- \Errors
- None.
- \SeeAlso
- \seep{SetDirectVideo}
- \end{procedure}
- ----------------------------
- \section{Reference}
- \section{Constants, Types and Variables}
- \subsection{Types}
- \begin{verbatim}
- ArcCoordsType = record
- X,Y,Xstart,Ystart,Xend,Yend : Integer;
- end;
- FillPatternType = Array [1..8] of Byte;
- FillSettingsType = Record
- Pattern,Color : Word
- end;
- LineSettingsType = Record
- LineStyle,Pattern, Width : Word;
- end;
- PointType = Record
- X,Y : Integer;
- end;
- TextSettingsType = Record
- Font,Direction, CharSize, Horiz, Vert : Word
- end;
- ViewPortType = Record
- X1,Y1,X2,Y2 : Integer;
- Clip : Boolean
- end;
- \end{verbatim}
- \begin{verbatim}
- PaletteType = Record
- Size : longint;
- Colors : array[0..MaxColors] of RGBRec;
- end;
- \end{verbatim}
- This record is used by \textit{SetAllPalette} , \textit{GetPalette} and
- \textit{GetDefaultPalette}. \textit{Size} indicated the number of RGB
- entries in this record, followed by the RGB records for each color. It
- is to note, that contrary to Turbo Pascal, the RGB components are in
- the LSB's of the RGB component records. This makes easier compatibility
- across different hardware platforms.
- \section{Functions and procedures}
- \begin{procedure}{Arc}
- \Declaration
- Procedure Arc (X,Y : Integer; stAngle,Endangle, radius : Word);
- \Description
- \var{Arc} draws part of a circle with center at \var{(X,Y)}, radius
- \var{radius}, starting from angle \var{stAngle}, stopping at angle \var{EndAngle}.
- These angles are measured counterclockwise. Information about the last call
- to \var{Arc} can be retrieved by \var{GetArcCoords}.
- \Errors
- None.
- \SeeAlso
- \seep{Circle},\seep{Ellipse}
- \seep{GetArcCoords},\seep{PieSlice}, \seep{Sector}
- \end{procedure}
- \begin{procedure}{Bar}
- \Declaration
- Procedure Bar (X1,Y1,X2,Y2 : Integer);
- \Description
- Draws a rectangle with corners at \var{(X1,Y1)} and \var{(X2,Y2)}
- and fills it with the current color and fill-style.
- \Errors
- None.
- \SeeAlso
- \seep{Bar3D},
- \seep{Rectangle}
- \end{procedure}
- \begin{procedure}{Bar3D}
- \Declaration
- Procedure Bar3D (X1,Y1,X2,Y2 : Integer; depth : Word; Top : Boolean);
- \Description
- Draws a 3-dimensional Bar with corners at \var{(X1,Y1)} and \var{(X2,Y2)}
- and fills it with the current color and fill-style.
- \var{Depth} specifies the number of pixels used to show the depth of the
- bar.
- If \var{Top} is true; then a 3-dimensional top is drawn.
- \Errors
- None.
- \SeeAlso
- \seep{Bar}, \seep{Rectangle}
- \end{procedure}
- \begin{procedure}{Circle}
- \Declaration
- Procedure Circle (X,Y : Integer; Radius : Word);
- \Description
- \var{Circle} draws part of a circle with center at \var{(X,Y)}, radius
- \var{radius} in the current color. Each graphics driver contains an
- aspect ratio used by \var{Circle}, \var{Arc} and \var{PieSlice}.
- \Errors
- None.
- \SeeAlso
- \seep{Ellipse},\seep{Arc}
- \seep{GetArcCoords},\seep{PieSlice}, \seep{Sector}
- \end{procedure}
- \begin{procedure}{ClearDevice}
- \Declaration
- Procedure ClearDevice ;
- \Description
- Clears the graphical screen (with the current
- background color), and sets the pointer at \var{(0,0)}
- \Errors
- None.
- \SeeAlso
- \seep{ClearViewPort}, \seep{SetBkColor}
- \end{procedure}
- \begin{procedure}{ClearViewPort}
- \Declaration
- Procedure ClearViewPort ;
- \Description
- Clears the current viewport. The current background color is used as filling
- color. The pointer is set at \var{(0,0)}
- \Errors
- None.
- \SeeAlso
- \seep{ClearDevice},\seep{SetViewPort}, \seep{SetBkColor}
- \end{procedure}
- \begin{procedure}{CloseGraph}
- \Declaration
- Procedure CloseGraph ;
- \Description
- Closes the graphical system, restores the
- screen mode which was active before the graphical mode was
- activated and frees up any memory allocated in InitGraph.
- \Errors
- None.
- \SeeAlso
- \seep{InitGraph}
- \end{procedure}
- \begin{procedure}{DetectGraph}
- \Declaration
- Procedure DetectGraph (Var Driver, Modus : Integer);
- \Description
- Checks the hardware in the PC and determines the driver and screen-modus to
- be used. These are returned in \var{Driver} and \var{Modus}, and can be fed
- to \var{InitGraph}.
- See the \var{InitGraph} for a list of drivers and modi.
- \Errors
- None.
- \SeeAlso
- \seep{InitGraph}
- \end{procedure}
- \begin{procedure}{DrawPoly}
- \Declaration
- Procedure DrawPoly (NumPoints : Word; Var PolyPoints);
- \Description
- Draws a polygon with \var{NumPoints} corner points, using the
- current color and linestyle. PolyPoints is an array of type \var{PointType}.
- If there are less the two points in \var{PolyPoints}, this routine
- returns \var{grError}.
- \Errors
- None.
- \SeeAlso
- \seep{Bar}, seep{Bar3D}, \seep{Rectangle}
- \end{procedure}
- \begin{procedure}{Ellipse}
- \Declaration
- Procedure Ellipse (X,Y : Integer; StAngle,EndAngle,XRadius,YRadius : Word);
- \Description
- \var{Ellipse} draws part of an ellipse with center at \var{(X,Y)}.
- \var{XRadius} and \var{Yradius} are the horizontal and vertical radii of the
- ellipse. \var{StAngle} and \var{EndAngle} are the starting and stopping angles of
- the part of the ellipse. They are measured counterclockwise from the X-axis.
- Information about the last call to \var{Ellipse} can be retrieved by
- \var{GetArcCoords}.
- \Errors
- None.
- \SeeAlso
- \seep{Arc} \seep{Circle}, \seep{FillEllipse}
- \end{procedure}
- \begin{procedure}{FillEllipse}
- \Declaration
- Procedure FillEllipse (X,Y : Integer; Xradius,YRadius: Word);
- \Description
- \var{Ellipse} draws an ellipse with center at \var{(X,Y)}.
- \var{XRadius} and \var{Yradius} are the horizontal and vertical radii of the
- ellipse. The ellipse is filled with the current color and fill style.
- \Errors
- None.
- \SeeAlso
- \seep{Arc} \seep{Circle},
- \seep{GetArcCoords},\seep{PieSlice}, \seep{Sector}
- \end{procedure}
- \begin{procedure}{FillPoly}
- \Declaration
- Procedure FillPoly (NumberPoints : Word; Var PolyPoints);
- \Description
- Draws a polygon with \var{NumPoints} corner points and fills it
- using the current color and fill style. The outline of the polygon
- is drawn in the current line style and color as set by \var{SetLineStyle}.
- PolyPoints is an array of type \var{PointType}.
- \Errors
- None.
- \SeeAlso
- \seep{Bar}, seep{Bar3D}, \seep{Rectangle}
- \end{procedure}
- \begin{procedure}{FloodFill}
- \Declaration
- Procedure FloodFill (X,Y : Integer; BorderColor : Word);
- \Description
- Fills the area containing the point \var{(X,Y)}, bounded by the color
- \var{BorderColor}. The flooding is done using the current fill style
- and fill color, as set by \var{SetFillStyle} or \var{SetFillPattern}.
- This routine is here for compatibility only, \var{FillPoly} should be
- used instead, since it is much faster.
- \Errors
- None
- \SeeAlso
- \seep{FillPoly},
- \end{procedure}
- \begin{procedure}{GetArcCoords}
- \Declaration
- Procedure GetArcCoords (Var ArcCoords : ArcCoordsType);
- \Description
- \var{GetArcCoords} returns the coordinates of the last \var{Arc} or
- \var{Ellipse} call. The values are useful for connecting a line to
- the end of an ellipse.
- \Errors
- None.
- \SeeAlso
- \seep{Arc}, \seep{Ellipse}
- \end{procedure}
- \begin{procedure}{GetAspectRatio}
- \Declaration
- Procedure GetAspectRatio (Var Xasp,Yasp : Word);
- \Description
- \var{GetAspectRatio} determines the effective resolution of the screen. The aspect ration can
- the be calculated as \var{Xasp/Yasp}.
- Each graphics driver uses this aspect ratio to make circles and any circular
- shape look round on the screen.
- \Errors
- None.
- \SeeAlso
- \seep{InitGraph},\seep{SetAspectRatio}
- \end{procedure}
- \begin{function}{GetDriverName}
- \Declaration
- Function GetDriverName : String;
- \Description
- \var{GetDriverName} returns a string containing the name of the
- current driver. This name can be anything under FPC, but it is
- usually indicative of the API and/or platform used to perform the
- graphics call.
- \Errors
- None.
- \SeeAlso
- \seef{GetModeName}, \seep{InitGraph}
- \end{function}
- \begin{procedure}{GetFillPattern}
- \Declaration
- Procedure GetFillPattern (Var FillPattern : FillPatternType);
- \Description
- \var{GetFillPattern} returns an array with the current fill pattern in \var{FillPattern}.
- If no user call has been made to \var{SetFillPattern}, the pattern will be
- filled with \var{$FF}.
- It is to note that the user fill pattern is reset to \var{$FF} each time
- \var{GraphDefaults} is called.
- \Errors
- None
- \SeeAlso
- \seep{SetFillPattern}, \seep{GraphDefaults}
- \end{procedure}
- \begin{procedure}{GetFillSettings}
- \Declaration
- Procedure GetFillSettings (Var FillInfo : FillSettingsType);
- \Description
- \var{GetFillSettings} returns the current fill-settings in
- \var{FillInfo}
- \Errors
- None.
- \SeeAlso
- \seep{SetFillPattern}
- \end{procedure}
- \begin{function}{GetGraphMode}
- \Declaration
- Function GetGraphMode : Integer;
- \Description
- \var{GetGraphMode} returns the current graphical mode. This value is
- entirely dependant on the hardware platform. To look up what this
- mode number represents from a capabilities standpoint, you should
- call either \var{QueryAdapterInfo} or \var{GetModeName} with the
- value returned by this function.
- \Errors
- None.
- \SeeAlso
- \seep{InitGraph}, \seep{QueryAdapterInfo}, \seep{GetModeName}
- \end{function}
- \begin{procedure}{GetImage}
- \Declaration
- Procedure GetImage (X1,Y1,X2,Y2 : Integer, Var Bitmap);
- \Description
- \var{GetImage}
- Places a copy of the screen area \var{(X1,Y1)} to \var{X2,Y2} in \var{BitMap}.
- \var{Bitmap} is an untyped parameter that must be equal to 12 plus the size
- of the screen area to save. The first two longints of \var{Bitmap} store
- the width and height of the region. The third longint is reserved and should
- not be modified.
- To make access to the screen faster, it is recommended that the starting
- points and ending point coordinates be modulo 4 and that the width to
- save be also modulo 4.
- To get the size of the bitmap required to save the area, you should call
- \var{ImageSize}.
- \Errors
- Bitmap must have enough room to contain the image.
- \SeeAlso
- \seef{ImageSize},
- \seep{PutImage}
- \end{procedure}
- \begin{procedure}{GetLineSettings}
- \Declaration
- Procedure GetLineSettings (Var LineInfo : LineSettingsType);
- \Description
- \var{GetLineSettings} returns the current Line settings in
- \var{LineInfo}
- \Errors
- None.
- \SeeAlso
- \seep{SetLineStyle}
- \end{procedure}
- \begin{function}{GetMaxColor}
- \Declaration
- Function GetMaxColor : Word;
- \Description
- \var{GetMaxColor} returns the maximum color-number which can
- be set with \var{SetColor}. This value is zero based, so a screen
- which supports 16 colors, would return 15.
- \Errors
- None.
- \SeeAlso
- \seep{SetColor},
- \seef{GetPaletteSize}
- \end{function}
- \begin{function}{GetMaxMode}
- \Declaration
- Function GetMaxMode : Word;
- \Description
- \var{GetMaxMode} returns the highest mode for the current driver. Normally
- the higher the mode number, the resolution it will be, but this might not
- always be the case.
- \Errors
- None.
- \SeeAlso
- \seep{InitGraph}
- \end{function}
- \begin{function}{GetMaxX}
- \Declaration
- Function GetMaxX : Word;
- \Description
- \var{GetMaxX} returns the maximum horizontal screen
- length (zero based from 0..\var{MaxX}).
- \Errors
- None.
- \SeeAlso
- \seef{GetMaxY}
- \end{function}
- \begin{function}{GetMaxY}
- \Declaration
- Function GetMaxY : Word;
- \Description
- \var{GetMaxY} returns the maximum number of screen
- lines. (zero based from 0..\var{MaxY}).
- \Errors
- None.
- \SeeAlso
- \seef{GetMaxY}
- \end{function}
- \begin{procedure}{GetModeRange}
- \Declaration
- Procedure GetModeRange (GraphDriver : Integer; var LoMode, HiMode: Integer);
- \Description
- \var{GetModeRange} returns the Lowest and Highest mode of the currently
- installed driver. If the value of \var{GraphDriver} is invalid, \var{LoMode}
- and var{HiMode} are set to -1.
- \Errors
- None.
- \SeeAlso
- \seep{InitGraph}, \seep{GetModeName}
- \end{procedure}
- \begin{function}{GetPaletteSize}
- \Declaration
- Function GetPaletteSize : Word;
- \Description
- \var{GetPaletteSize} returns the maximum number of entries which
- can be set in the current palette. In direct color mode, this simply
- returns the maximum possible of colors on screen.
- Usually this has the value \var{GetMaxColor} + 1.
- \Errors
- None.
- \SeeAlso
- \seep{GetPalette},
- \seep{SetPalette}
- \seep{GetMaxColor}
- \end{function}
- \begin{function}{GetPixel}
- \Declaration
- Function GetPixel (X,Y : Integer) : Word;
- \Description
- \var{GetPixel} returns the color
- of the point at \var{(X,Y)} The coordinates, as all coordinates
- are viewport relative.
- In direct color mode, the value returned is the direct RGB components of
- the color. In palette based modes, this indicates the palette entry number.
- \Errors
- None.
- \SeeAlso
- \end{function}
- \begin{procedure}{GetTextSettings}
- \Declaration
- Procedure GetTextSettings (Var TextInfo : TextSettingsType);
- \Description
- \var{GetTextSettings} returns the current text style settings : The font,
- direction, size and placement as set with \var{SetTextStyle} and
- \var{SetTextJustify}.
- \Errors
- None.
- \SeeAlso
- \seep{SetTextStyle}, \seep{SetTextJustify}
- \end{procedure}
- \begin{procedure}{GetViewSettings}
- \Declaration
- Procedure GetViewSettings (Var ViewPort : ViewPortType);
- \Description
- \var{GetViewSettings} returns the current view-port and clipping settings in
- \var{ViewPort}.
- \Errors
- None.
- \SeeAlso
- \seep{SetViewPort}
- \end{procedure}
- \begin{function}{GetX}
- \Declaration
- Function GetX : Integer;
- \Description
- \var{GetX} returns the X-coordinate of the current pointer. This value is
- viewport relative.
- \Errors
- None.
- \SeeAlso
- \seef{GetY}
- \end{function}
- \begin{function}{GetY}
- \Declaration
- Function GetY : Integer;
- \Description
- \var{GetY} returns the Y-coordinate of the current pointer. This value is
- viewport relative.
- \Errors
- None.
- \SeeAlso
- \seef{GetX}
- \end{function}
- \begin{procedure}{GraphDefaults}
- \Declaration
- Procedure GraphDefaults ;
- \Description
- \var{GraphDefaults} homes the current pointer, and resets the graphics
- system to the default values for:
- \begin{itemize}
- \item Active Line style is reset to normal width and filled line.
- \item The current fill color is set to the maximum palette color.
- \item The current fill style is set to \var{solidfill}.
- \item The user fill pattern is reset to \var{$FF}.
- \item The current drawing color is set to white.
- \item The current background color is reset to black.
- \item The viewport is reset to (0,0,\var{GetMaxX},\var{GetMaxY}).
- \item Clipping is enabled.
- \item The active write mode is set to normalput.
- \item Text settings are reset to : default font, \var{HorizDir},
- \var{LeftText} and \var{TopText}.
- \end{itemize}
- This routine is called by \var{SetGraphMode}.
- \Errors
- None.
- \SeeAlso
- \seep{SetViewPort}, \seep{SetFillStyle}, \seep{SetColor},
- \seep{SetBkColor}, \seep{SetLineStyle}, \seep{SetGraphMode}
- \end{procedure}
- \begin{function}{GraphErrorMsg}
- \Declaration
- Function GraphErrorMsg (ErrorCode : Integer) : String;
- \Description
- \var{GraphErrorMsg}
- returns a string describing the error \var{Errorcode}. This string can be
- used to let the user know what went wrong.
- \Errors
- None.
- \SeeAlso
- \seef{GraphResult}
- \end{function}
- \begin{function}{GraphResult}
- \Declaration
- Function GraphResult : Integer;
- \Description
- \var{GraphResult} returns an error-code for
- the last graphical operation. If the returned value is zero, all went well.
- A value different from zero means an error has occurred.
- Note that \var{GraphResult} is reset to zero after it has been called.
- Therefore the value should be saved into a temporary location if you wish
- to use it later.
- To see which routine might return errors, see the introduction section at
- the start of this reference.
- \Errors
- None.
- \SeeAlso
- \seef{GraphErrorMsg}
- \end{function}
- \begin{function}{ImageSize}
- \Declaration
- Function ImageSize (X1,Y1,X2,Y2 : Integer) : longint;
- \Description
- \var{ImageSize} returns the number of bytes needed to store the image
- by \var{GetImage} in the rectangle defined by \var{(X1,Y1)} and \var{(X2,Y2)}.
- The image size includes space for several words. The first three longints
- are reserved for use by \var{GetImage}, the first longint containing the
- width of the region, the second containing the height, and the third being
- reserved,the following words contains the bitmap itself.
- \textit{Compatibility:}
- The value returned by this function is a 32-bit value,
- and not a 16-bit value.
- \Errors
- None.
- \SeeAlso
- \seep{GetImage}
- \end{function}
- \begin{procedure}{InitGraph}
- \Declaration
- Procedure InitGraph (var GraphDriver,GraphModus : integer;\\
- const PathToDriver : string);
- \Description
- \var{InitGraph} initializes the \var{graph} package.
- \var{GraphDriver} has two valid values: \var{GraphDriver=Detect} which
- performs an auto detect and initializes the highest possible mode with the most
- colors. This is dependant on the platform, and many of the non-standard
- modes amy not be detected automatically. \var{graphMode} is the mode you
- wish to use.
- \var{PathToDriver} is only needed, if you use the BGI fonts from
- Borland, which are fully supported under FPC.
- The exact rundown of \var{InitGraph} is as follows: First it calls
- \var{QueryAdapterInfo} to get the possible modes supported by the hardware.
- It then saves the video state, initalizes some global variables, then if
- auto-detection was requested, calls \var{GetModeRange} to get the highest
- possible mode available and supported, otherwise it searches if the requested
- mode is available in the database. Finally , in either case it calls
- \var{SetGraphMode}.
- If the requested driver or mode is invalid, this function returns either
- \var{grError} or \var{grInvalidMode}.
- Before calling this function, you should call QueryAdapterInfo, and
- go through the list of supported modes to determine which mode suites
- your needs. As stated in the introduction, each graph unit implementation
- should support a 320x200 color mode.
- \Errors
- None.
- \SeeAlso
- Introduction, (page \pageref{se:Introduction}),
- \seep{DetectGraph}, \seep{CloseGraph}, \seef{GraphResult},
- \seef{QueryAdapterInfo}
- \end{procedure}
- Example:
- \begin{verbatim}
- var
- gd,gm : integer;
- PathToDriver : string;
- begin
- gd:=detect; { highest possible resolution }
- gm:=0; { not needed, auto detection }
- PathToDriver:='C:\PP\BGI'; { path to BGI fonts,
- drivers aren't needed }
- InitGraph(gd,gm,PathToDriver);
- if GraphResult<>grok then
- halt; ..... { whatever you need }
- CloseGraph; { restores the old graphics mode }
- end.
- \end{verbatim}
- \begin{function}{InstallUserDriver}
- \Declaration
- Function InstallUserDriver (DriverPath : String; AutoDetectPtr: Pointer) : Integer;
- \Description
- This routine is not supported in FPC, it is here only for compatiblity and
- always returns \var{grError}.
- \Errors
- None.
- \SeeAlso
- \seep{InitGraph}, \seef{InstallUserFont}
- \end{function}
- \begin{function}{InstallUserFont}
- \Declaration
- Function InstallUserFont (FontPath : String) : Integer;
- \Description
- \var{InstallUserFont} adds the font in \var{FontPath} to the list of fonts
- available to the text system. If the maximum number of allocated fonts has
- been reached, this routine sets \var{GraphResult} to \var{grError}.
- \Errors
- None.
- \SeeAlso
- \seep{InitGraph}, \seef{InstallUserDriver}
- \end{function}
- \begin{procedure}{Line}
- \Declaration
- Procedure Line (X1,Y1,X2,Y2 : Integer);
- \Description
- \var{Line} draws a line starting from
- \var{(X1,Y1} to \var{(X2,Y2)}, in the current line style and color.
- The current pointer is not updated after this call.
- This is the base routine which is called by several other routines
- in this unit. This routine is somewhat faster then the other
- LineXXX routines contained herein.
- \Errors
- None.
- \SeeAlso
- \seep{LineRel},\seep{LineTo}
- \end{procedure}
- \begin{procedure}{LineRel}
- \Declaration
- Procedure LineRel (DX,DY : Integer);
- \Description
- \var{LineRel} draws a line starting from
- the current pointer position to the point\var{(DX,DY}, \textbf{relative} to the
- current position, in the current line style and color. The Current Position
- is set to the endpoint of the line.
- \Errors
- None.
- \SeeAlso
- \seep{Line}, \seep{LineTo}
- \end{procedure}
- \begin{procedure}{LineTo}
- \Declaration
- Procedure LineTo (DX,DY : Integer);
- \Description
- \var{LineTo} draws a line starting from
- the current pointer position to the point\var{(DX,DY}, \textbf{relative} to the
- current position, in the current line style and color. The Current position
- is set to the end of the line.
- \Errors
- None.
- \SeeAlso
- \seep{LineRel},\seep{Line}
- \end{procedure}
- \begin{procedure}{MoveRel}
- \Declaration
- Procedure MoveRel (DX,DY : Integer;
- \Description
- \var{MoveRel} moves the current pointer to the
- point \var{(DX,DY)}, relative to the current pointer
- position
- \Errors
- None.
- \SeeAlso
- \seep{MoveTo}
- \end{procedure}
- \begin{procedure}{MoveTo}
- \Declaration
- Procedure MoveTo (X,Y : Integer);
- \Description
- \var{MoveTo} moves the current pointer to the
- point \var{(X,Y)}.
- \Errors
- None.
- \SeeAlso
- \seep{MoveRel}
- \end{procedure}
- \begin{procedure}{OutText}
- \Declaration
- Procedure OutText (Const TextString : String);
- \Description
- \var{OutText} puts \var{TextString} on the screen, at the current pointer
- position, using the current font and text settings. The current pointer is
- updated only if the text justification is set to left and is horizontal.
- The text is truncated according to the current viewport settings if it
- cannot fit.
- In order to maintain compatibility when using several fonts, use \var{TextWidth}
- and \var{TextHeight} calls to determine the dimensions of the string.
- \Errors
- None.
- \SeeAlso
- \seep{OutTextXY}
- \end{procedure}
- \begin{procedure}{OutTextXY}
- \Declaration
- Procedure OutTextXY (X,Y : Integer; Const TextString : String);
- \Description
- \var{OutText} puts \var{TextString} on the screen, at position \var{(X,Y)},
- using the current font and text settings.
- Contrary to \var{OutText} , this routine does not update the current pointer.
- In order to maintain compatibility when using several fonts, use \var{TextWidth}
- and \var{TextHeight} calls to determine the dimensions of the string.
- \Errors
- None.
- \SeeAlso
- \seep{OutText}
- \end{procedure}
- \begin{procedure}{PieSlice}
- \Declaration
- Procedure PieSlice (X,Y,stangle,endAngle:integer;Radius: Word);
- \Description
- \var{PieSlice}
- draws and fills a sector of a circle with center \var{(X,Y)} and radius
- \var{Radius}, starting at angle \var{StAngle} and ending at angle \var{EndAngle}
- using the current fill style and fill pattern. The pie slice is outlined
- with the current line style and current active color.
- \Errors
- None.
- \SeeAlso
- \seep{Arc}, \seep{Circle}, \seep{Sector}
- \end{procedure}
- \begin{procedure}{PutImage}
- \Declaration
- Procedure PutImage (X,Y: Integer; var Bitmap; BitBlt: Word);
- \Description
- \var{PutImage}
- Places the bitmap in \var{Bitmap} on the screen at upper left
- corner \var{(X, Y)}. \var{BitBlt} determines how the bitmap
- will be placed on the screen. Possible values are :
- \begin{itemize}
- \item CopyPut
- \item XORPut
- \item ORPut
- \item AndPut
- \item NotPut
- \end{itemize}
- \textit{Compatibility}
- Contrary to the Borland graph unit, putimage \textit{is} clipped to the
- viewport boundaries.
- \Errors
- None
- \SeeAlso
- \seef{ImageSize},\seep{GetImage}
- \end{procedure}
- \begin{procedure}{PutPixel}
- \Declaration
- Procedure PutPixel (X,Y : Integer; Color : Word);
- \Description
- Puts a point at
- \var{(X,Y)} using color \var{Color}. This routine is viewport
- relative.
- \Errors
- None.
- \SeeAlso
- \seef{GetPixel}
- \end{procedure}
- \begin{procedure}{Rectangle}
- \Declaration
- Procedure Rectangle (X1,Y1,X2,Y2 : Integer);
- \Description
- Draws a rectangle with
- corners at \var{(X1,Y1)} and \var{(X2,Y2)}, using the current color and
- the current line style.
- \Errors
- None.
- \SeeAlso
- \seep{Bar}, \seep{Bar3D}
- \end{procedure}
- \begin{function}{RegisterBGIDriver}
- \Declaration
- Function RegisterBGIDriver (Driver : Pointer) : Integer;
- \Description
- This routine is not supported in FPC. It is here for compatibility and it
- always returns \var{grError}.
- \Errors
- None.
- \SeeAlso
- \seef{InstallUserDriver},
- \seef{RegisterBGIFont}
- \end{function}
- \begin{function}{RegisterBGIFont}
- \Declaration
- Function RegisterBGIFont (Font : Pointer) : Integer;
- \Description
- This routine permits the user to add a font to the list of known fonts
- by the graph unit. \var{Font} is a pointer to image of the loaded font.
- The value returned is either a negative error number (\var{grInvalidFont}),
- or the font number you need to use when accessing it via \var{SetTextStyle}.
- This routine may be called before \var{InitGraph}.
- \textit{Compatibility}
- Watch out for the byte endian when using this routine. This might work
- on little endian machines, and not on big endian machines and vice-versa.
- \Errors
- None.
- \SeeAlso
- \seef{InstallUserFont},
- \seef{RegisterBGIDriver}
- \end{function}
- \begin{procedure}{RestoreCRTMode}
- \Declaration
- Procedure RestoreCRTMode ;
- \Description
- Restores the screen mode which was active before
- the graphical mode was started. Can be used to switch back and forth
- between text and graphics mode.
- \Errors
- None.
- \SeeAlso
- \seep{InitGraph}
- \end{procedure}
- Example:
- \begin{verbatim}
- uses Graph;
- var
- Gd, Gm: Integer;
- Mode: Integer;
- begin
- Gd := Detect;
- InitGraph(Gd, Gm, ' ');
- if GraphResult <> grOk then
- Halt(1);
- OutText('<ENTER> to leave graphics:');
- Readln;
- RestoreCrtMode;
- Writeln('Now in text mode');
- Write('<ENTER> to enter graphics mode:');
- Readln;
- SetGraphMode(GetGraphMode);
- OutTextXY(0, 0, 'Back in graphics mode');
- OutTextXY(0, TextHeight('H'), '<ENTER> to quit:');
- Readln;
- CloseGraph;
- end.
- \end{verbatim}
- \begin{procedure}{Sector}
- \Declaration
- Procedure Sector (X,Y : Integer; StAngle,EndAngle,XRadius,YRadius : Word);
- \Description
- \var{Sector}
- draws and fills a sector of an ellipse with center \var{(X,Y)} and radii
- \var{XRadius} and \var{YRadius}, starting at angle \var{StAngle} and ending at angle
- \var{EndAngle}. The sector is outlined in the current color and filled with
- the pattern and color defined by \var{SetFillStyle} or \var{SetFillPattern}.
- \Errors
- None.
- \SeeAlso
- \seep{Arc}, \seep{Circle}, \seep{PieSlice}
- \end{procedure}
- \begin{procedure}{SetActivePage}
- \Declaration
- Procedure SetActivePage (Page : Word);
- \Description
- Sets \var{Page} as the active page
- for all graphical output. This means that all drawing will be done on this
- graphics, be it visible or not.
- The usual way to make fast animation, is to draw to a non visible active page
- and the simply call make that active page the visible page by calling
- \var{SetVisualPage}.
- \textit{Compatibility}:
- Not all systems and graphics mode support multiple graphics pages, to
- determine how many pages are available see \var{QueryAdapterInfo}.
- Multiple pages are currently not supported with DOS VESA modes.
- \Errors
- None.
- \SeeAlso
- \seep{SetVisualPage}, \seep{QueryAdapterInfo}
- \end{procedure}
- \begin{procedure}{SetAllPallette}
- \Declaration
- Procedure SetAllPallette (Var Palette);
- \Description
- Sets the current palette to
- \var{Palette}. \var{Palette} is an untyped variable, usually pointing to a
- record of type \var{PaletteType} which contains the Red, Green and Blue
- components of the RGB components to change for each color entry. If
- the Red, Green and Blue components are equal to -1 for a specific color
- entry, then that palette entry will not be changed. The size should
- contain the size of the palette to change (indexed at zero).
- \textit{Compatibility}:
- This call is not the same as in Turbo Pascal. RGB components should be
- set in LSB if each of the components has less then 16-bits resolution.
- This call is not supported in direct color modes.
- \Errors
- None.
- \SeeAlso
- \seep{GetPalette}
- \end{procedure}
- \begin{procedure}{SetAspectRatio}
- \Declaration
- Procedure SetAspectRatio (Xasp,Yasp : Word);
- \Description
- Sets the aspect ratio of the
- current screen to \var{Xasp/Yasp}. The value of the aspect ratio is used
- by certain routines herein to draw circles which will actually appear round
- depending on the screen mode.
- \Errors
- None
- \SeeAlso
- \seep{InitGraph}, \seep{GetAspectRatio}
- \end{procedure}
- \begin{procedure}{SetBkColor}
- \Declaration
- Procedure SetBkColor (Color : Word);
- \Description
- Sets the background color to
- \var{Color}.
- The behaviour of this routine depends if we are in a direct color
- mode or not. In direct color mode, this value represents the direct
- RGB values to plot to the screen. In non direct color mode, the value
- represents an index to the color palette entry on the hardware.
- \Errors
- None.
- \SeeAlso
- \seef{GetBkColor}, \seep{SetColor}
- \end{procedure}
- \begin{procedure}{SetColor}
- \Declaration
- Procedure SetColor (Color : Word);
- \Description
- Sets the foreground color to
- \var{Color}.
- The behaviour of this routine depends if we are in a direct color
- mode or not. In direct color mode, this value represents the direct
- RGB values to plot to the screen. In non direct color mode, the value
- represents an index to the color palette entry on the hardware.
- \Errors
- None.
- \SeeAlso
- \seef{GetColor}, \seep{SetBkColor}
- \end{procedure}
- \begin{procedure}{SetFillPattern}
- \Declaration
- Procedure SetFillPattern (Pattern : FillPatternType, Color : Word);
- \Description
- \var{SetFillPattern} sets the current fill-pattern to \var{Pattern}, and
- the filling color to \var{Color}. If invalid input is passed to
- \var{SetFillPattern}, \var{GraphResult} will return \var{grError}.
- The pattern is an 8x8 raster, corresponding to the 64 bits in
- \var{FillPattern}. Whenever a bit in a pattern byte is valued at 1,
- a pixel will be plotted. The pattern and color is used by \var{Bar},
- \var{FillPoly}, \var{FloodFill}, \var{bar3d}, \var{FillEllipse},
- \var{Sector}, and \var{PieSlice}.
- \Errors
- None
- \SeeAlso
- \seep{GetFillPattern}, \seep{SetFillStyle}
- \end{procedure}
- \begin{procedure}{SetFillStyle}
- \Declaration
- Procedure SetFillStyle (Pattern, Color : word);
- \Description
- \var{SetFillStyle} sets the filling pattern and color to one of the
- predefined filling patterns. \var{Pattern} can be one of the following predefined
- constants :
- \begin{itemize}
- \item \var{EmptyFill } Uses backgroundcolor.
- \item \var{SolidFill } Uses filling color
- \item \var{LineFill } Fills with horizontal lines.
- \item \var{ltSlashFill} Fills with lines from left-under to top-right.
- \item \var{SlashFill } Idem as previous, thick lines.
- \item \var{BkSlashFill} Fills with thick lines from left-Top to bottom-right.
- \item \var{LtBkSlashFill} Idem as previous, normal lines.
- \item \var{HatchFill} Fills with a hatch-like pattern.
- \item \var{XHatchFill} Fills with a hatch pattern, rotated 45 degrees.
- \item \var{InterLeaveFill}
- \item \var{WideDotFill} Fills with dots, wide spacing.
- \item \var{CloseDotFill} Fills with dots, narrow spacing.
- \item \var{UserFill} Fills with a user-defined pattern.
- \end{itemize}
- If invalid input is passed to \var{SetFillStyle},
- \var{GraphResult} will return \var{grError}.
- \Errors
- None.
- \SeeAlso
- \seep{SetFillPattern}
- \end{procedure}
- \begin{procedure}{SetGraphBufSize}
- \Declaration
- Procedure SetGraphBufSize (BufSize : Word);
- \Description
- This routine does nothing in FPC, and is here for compatibility.
- \Errors
- None.
- \SeeAlso
- \end{procedure}
- \begin{procedure}{SetGraphMode}
- \Declaration
- Procedure SetGraphMode (Mode : Integer);
- \Description
- \var{SetGraphMode} sets the
- graphical mode and clears the screen. \var{Mode} must be a valid mode,
- which can be queried by \var{QueryAdapterInfo}.
- If invalid input is passed to \var{SetGraphMode}, or if the mode cannot
- be set for a reason, \var{GraphResult} returns \var{grInvalidMode}.
- \var{SetGraphMode} resets all graphics variables to their default
- settings (such as if \var{GraphDefaults} was called, the active page
- is reset to page zero, the visual page is reset to page zero, and the viewport
- is set to the entire screen.
- \Errors
- None.
- \SeeAlso
- \seep{InitGraph}, \seep{QueryAdapterInfo}
- \end{procedure}
- \begin{procedure}{SetLineStyle}
- \Declaration
- Procedure SetLineStyle (LineStyle, Pattern, Thickness : Word);
- \Description
- \var{SetLineStyle}
- sets the drawing style for lines. You can specify a \var{LineStyle} which is
- one of the following pre-defined constants:
- \begin{itemize}
- \item \var{Solidln=0;} draws a solid line.
- \item \var{Dottedln=1;} Draws a dotted line.
- \item \var{Centerln=2;} draws a non-broken centered line.
- \item \var{Dashedln=3;} draws a dashed line.
- \item \var{UserBitln=4;} Draws a User-defined bit pattern.
- \end{itemize}
- If \var{UserBitln} is specified then \var{Pattern} contains the bit pattern to
- use for drawing the line. A bit of 1 specified a pixel which is on.
- In all another cases, \var{Pattern} is ignored. The parameter \var{Thickness}
- indicates how thick the line should be. You can specify one of the following
- pre-defined constants:
- \begin{itemize}
- \item \var{NormWidth=1}
- \item \var{ThickWidth=3}
- \end{itemize}
- If invalid input is passed to \var{SetLineStyle} , \var{GraphResult} will
- return \var{grError}.
- \Errors
- None.
- \SeeAlso
- \seep{GetLineSettings}
- \end{procedure}
- \begin{procedure}{SetPalette}
- \Declaration
- Procedure SetPalette (ColorNum : Word; Color : Shortint);
- \Description
- \var{SetPalette} changes the \var{ColorNum}-th entry in the palette to
- \var{Color}. For examples, \var{SetPalette(0, LightCyan)} makes the first
- color in the palette light cyan. \var{Color} only accepts certain default
- colors, as specified in the \var{Color constants} section. If invalid
- input is passed to \var{SetPalette}, \var{GraphResult} returns a value
- of \var{grError} and the palette remains intact.
- Changes made to the palette are immediately visible on the screen.
- This routine returns \var{grError} if called in a direct color mode.
- \Errors
- None.
- \SeeAlso
- \seep{SetAllPallette},\seep{SetRGBPalette}
- \end{procedure}
- \begin{procedure}{SetRGBPalette}
- \Declaration
- Procedure SetRGBPalette (ColorNum,Red,Green,Blue : Integer);
- \Description
- \var{SetRGBPalette} sets the \var{ColorNum}-th entry in the palette to the
- color with RGB values \var{Red, Green Blue}. The Red , Green and Blue values
- must be in LSB format. If the palette entry could not be changed for a
- reason, the routine returns \var{grError}.
- This routine returns \var{grError} if called in a direct color mode.
- \Errors
- None.
- \SeeAlso
- \seep{SetAllPallette},
- \seep{SetPalette}
- \seep{GetRGBPalette}
- \end{procedure}
- \begin{procedure}{SetTextJustify}
- \Declaration
- Procedure SetTextJustify (Horiz, Vert : Word);
- \Description
- \var{SetTextJustify} controls the placement of new text, relative to the
- (graphical) cursor position. \var{Horiz} controls horizontal placement, and can be
- one of the following pre-defined constants:
- \begin{itemize}
- \item \var{LeftText=0;} Text is set left of the current pointer.
- \item \var{CenterText=1;} Text is set centered horizontally on the current pointer.
- \item \var{RightText=2;} Text is set to the right of the current pointer.
- \end{itemize}
- \var{Vertical} controls the vertical placement of the text, relative to the
- (graphical) cursor position. Its value can be one of the following
- pre-defined constants :
- \begin{itemize}
- \item \var{BottomText=0;} Text is placed under the current pointer.
- \item \var{CenterText=1;} Text is placed centered vertically on the current pointer.
- \item \var{TopText=2;}Text is placed above the current pointer.
- \end{itemize}
- If invalid input is passed \var{SetTextJustify} , \var{GraphResult} returns
- \var{grError}.
- \Errors
- None.
- \SeeAlso
- \seep{OutText}, \seep{OutTextXY}
- \end{procedure}
- \begin{procedure}{SetTextStyle}
- \Declaration
- Procedure SetTextStyle (Font,Direction,Magnitude : Word);
- \Description
- \var{SetTextStyle} controls the style of text to be put on the screen.
- pre-defined constants for \var{Font} are:
- \begin{itemize}
- \item \var{DefaultFont=0;}
- \item \var{TriplexFont=2;}
- \item \var{SmallFont=2;}
- \item \var{SansSerifFont=3;}
- \item \var{GothicFont=4;}
- \end{itemize}
- Pre-defined constants for \var{Direction} are :
- \begin{itemize}
- \item \var{HorizDir=0;}
- \item \var{VertDir=1;}
- \end{itemize}
- Charsize indicated the magnification factor to use when drawing the fonts
- to the screen. When using the default internal font, this value can be
- any value equal or greater to one. In the case of stroked fonts, the
- value should always be equal or greater then 4.
- Stroked fonts are usually loaded from disk once onto the heap when a call
- is made to \var{SetTextStyle}.
- If there is an error when using this routine, \var{GraphResult} might return
- \var{grFontNotFound}, \var{grNoFontMem}, \var{grError}, \var{grIoError},
- \var{grInvalidFont}, or \var{grInvalidFontNum}.
- \Errors
- None.
- \SeeAlso
- \seep{GetTextSettings}
- \end{procedure}
- \begin{procedure}{SetUserCharSize}
- \Declaration
- Procedure SetUserCharSize (Xasp1,Xasp2,Yasp1,Yasp2 : Word);
- \Description
- Sets the width and height of vector-fonts. The horizontal size is given
- by \var{Xasp1/Xasp2}, and the vertical size by \var{Yasp1/Yasp2}.
- \Errors
- None.
- \SeeAlso
- \seep{SetTextStyle}
- \end{procedure}
- \begin{procedure}{SetViewPort}
- \Declaration
- Procedure SetViewPort (X1,Y1,X2,Y2 : Integer; Clip : Boolean);
- \Description
- Sets the current graphical view-port (window) to the rectangle defined by
- the top-left corner \var{(X1,Y1)} and the bottom-right corner \var{(X2,Y2)}.
- If \var{Clip} is true, anything drawn outside the view-port (window) will be
- clipped (i.e. not drawn). Coordinates specified after this call are relative
- to the top-left corner of the view-port.
- \Errors
- None.
- \SeeAlso
- \seep{GetViewSettings}
- \end{procedure}
- \begin{procedure}{SetVisualPage}
- \Declaration
- Procedure SetVisualPage (Page : Word);
- \Description
- \var{SetVisualPage} sets the video page to page number \var{Page}.
- \Errors
- None
- \SeeAlso
- \seep{SetActivePage}
- \end{procedure}
- \begin{procedure}{SetWriteMode}
- \Declaration
- Procedure SetWriteMode (Mode : Integer);
- \Description
- \var{SetWriteMode} controls the drawing of lines on the screen. It controls
- the binary operation used when drawing lines on the screen. \var{Mode} can
- be one of the following pre-defined constants:
- \begin{itemize}
- \item CopyPut=0;
- \item XORPut=1;
- \end{itemize}
- \Errors
- None.
- \SeeAlso
- \end{procedure}
- \begin{function}{TextHeight}
- \Declaration
- Function TextHeight (S : String) : Word;
- \Description
- \var{TextHeight} returns the height (in pixels) of the string \var{S} in
- the current font and text-size.
- \Errors
- None.
- \SeeAlso
- \seef{TextWidth}
- \end{function}
- \begin{function}{TextWidth}
- \Declaration
- Function TextWidth (S : String) : Word;
- \Description
- \var{TextHeight} returns the width (in pixels) of the string \var{S} in
- the current font and text-size.
- \Errors
- None.
- \SeeAlso
- \seef{TextHeight}
- \end{function}
-
|