⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pascal编程技巧.htm

📁 对于学习很有帮助
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<html><head><style type="text/css"><!--.p9 {  font-family: "宋体"; font-size: 9pt}a        {text-transform: none; text-decoration: none;}a:hover {text-decoration: underline; color: #FF0000;}--></style><title></title></head><body background="di2001.jpg"><h3 align="center"><font COLOR="#AOAO99">Pascal编程技巧</font></h3><table width="100%">  <tr>    <td><font color="0000FF"><a name="1">DELPHI4.0动态数组</a></font></td>  </tr>  <tr>    <td>&nbsp;&nbsp;方法:<br>    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var<br>    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A:array of Integer;<br>    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ShowMessage(IntToStr(High(A)));     //<- 值为1<Br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetLenght(A,3);<br>    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ShowMessage(IntToStr(High(A)));     //<- 值为3<Br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>    &nbsp;&nbsp;注:这是DELPHI4.0新添的功能.<br>    </td>  </tr>  <tr>    <td><font color="0000FF"><a name="2">6.DELPHI中怎样建立一个动态数组? 如何Resize     一个数组? </a></font></td>  </tr>  <tr>    <td>问 How Do I Create A Dynamic Arrays In Delphi? And How Can I Resize A Array?<br>    答 You cannot resize a non-dynamic array in Pascal. You can<br>    create and resize a dynamically created array. To do this, you<br>    must create the dynamic array, turn range checking off,<br>    and access the array members via a variable only, or you<br>    will receive runtime and compile time errors. Since you will<br>    access the array through a pointer variable, you can dynamically<br>    resize the array by creating a new array in memory, then copy all the<br>    valid elements of the original array to the new array, then free the<br>    memory<br>    for the original array, and assign the new array's pointer back to the<br>    original array pointer.<br>    Example:<br>    type<br>    &nbsp;&nbsp;TSomeArrayElement = integer;<br>    &nbsp;&nbsp;PSomeArray = ^TSomeArray;<br>    &nbsp;&nbsp;TSomeArray = array[0..0] of TSomeArrayElement;<br>    procedure CreateArray(var TheArray : PSomeArray;<br>    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NumElements     : longint);<br>    begin<br>    &nbsp;&nbsp;GetMem(TheArray, sizeof(TSomeArrayElement) * NumElements);<br>    end;<br>    procedure FreeArray(var TheArray : PSomeArray;<br>    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NumElements     : longint);<br>    begin<br>    &nbsp;&nbsp;FreeMem(TheArray, sizeof(TSomeArrayElement) * NumElements);<br>    end;<br>    procedure ReSizeArray(var TheArray : PSomeArray;<br>    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OldNumElements     : longint;<br>    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NewNumElements     : longint);<br>    var<br>    &nbsp;&nbsp;TheNewArray : PSomeArray;<br>    begin<br>    &nbsp;&nbsp;GetMem(TheNewArray, sizeof(TSomeArrayElement) * NewNumElements);<br>    &nbsp;&nbsp;if NewNumElements &gt; OldNumElements then<br>    &nbsp;&nbsp;&nbsp;&nbsp;Move(TheArray^,<br>    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TheNewArray^,<br>    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OldNumElements *     sizeof(TSomeArrayElement)) else<br>    &nbsp;&nbsp;&nbsp;&nbsp;Move(TheArray^,<br>    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TheNewArray^,<br>    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NewNumElements *     sizeof(TSomeArrayElement));<br>    &nbsp;&nbsp;FreeMem(TheArray, sizeof(TSomeArrayElement) * OldNumElements);<br>    &nbsp;&nbsp;TheArray := TheNewArray;<br>    end;<br>    procedure TForm1.Button1Click(Sender: TObject);<br>    var<br>    &nbsp;&nbsp;p : PSomeArray;<br>    &nbsp;&nbsp;i : integer;<br>    begin<br>    {$IFOPT R+}<br>    &nbsp;&nbsp;{$DEFINE CKRANGE}<br>    &nbsp;&nbsp;{$R-}<br>    {$ENDIF}<br>    &nbsp;&nbsp;CreateArray(p, 200);<br>    &nbsp;&nbsp;for i := 0 to 199 do<br>    &nbsp;&nbsp;&nbsp;&nbsp;p^[i] := i;<br>    &nbsp;&nbsp;ResizeArray(p, 200, 400);<br>    &nbsp;&nbsp;for i := 0 to 399 do<br>    &nbsp;&nbsp;&nbsp;&nbsp;p^[i] := i;<br>    &nbsp;&nbsp;ResizeArray(p, 400, 50);<br>    &nbsp;&nbsp;for i := 0 to 49 do<br>    &nbsp;&nbsp;&nbsp;&nbsp;p^[i] := i;<br>    &nbsp;&nbsp;FreeArray(p, 50);<br>    {$IFDEF CKRANGE}<br>    &nbsp;&nbsp;{$UNDEF CKRANGE}<br>    &nbsp;&nbsp;{$R+}<br>    {$ENDIF}<br>    end;<br>    -----------------<br>    另外,在使用动态实数数组的时候,数组元素类型最好声明为 single     或 double<br>    因为 single 和 double 类型使用的是 FPU 运算,而 real 不是<br>    ---------------------<br>    回答2<br>    It seems that the &quot;best&quot; way to deal with this is not necessarily by<br>    declaring a pointer type and doing dynamic memory allocation etc.(as most of<br>    you approached this problem) but (as one of you pointed out) to use Delphi's<br>    &quot;Variant support routines&quot; (see Help) where you can create dynamic arrays of<br>    Variants and manipulate them using the SYSTEM unit. Some of the function<br>    names are:<br>    &nbsp;&nbsp;VarArrayCreate -- Creates a variant array of given bounds and type.<br>    &nbsp;&nbsp;VarArrayDimCount -- Returns the number of dimensions of a given variant.<br>    &nbsp;&nbsp;VarArrayHighBound -- Returns the high bound of a given dimension of a given     variant array.<br>    &nbsp;&nbsp;VarArrayLock -- Locks a given variant array.<br>    &nbsp;&nbsp;VarArrayLowBound -- Returns the low bound of a given dimension of a given     variant array.<br>    &nbsp;&nbsp;VarArrayOf -- Returns a given variant array with specified elements.<br>    &nbsp;&nbsp;VarArrayRedim -- Resizes a given variant array by changing the high bound.<br>    &nbsp;&nbsp;VarArrayUnLock -- Unlocks a given variant array.<br>    </td>  </tr>  <tr>    <td><font color="0000FF"><a name="3">怎样启动16位的应用程序? </a></font></td>  </tr>  <tr>    <td>In a D3/Win95/Word 6.0 environment:<br>    I need to bring up winword for the user if it's not already up, in a way<br>    that will leave it running after my app is down. Can't use WinExec (etc.) as it's<br>    a 16bit version of winword. There has to be some more-or-less direct way<br>    of doing this... but all the documented methods assume 32bit. Any<br>    suggestions?<br>    回复:<br>    &nbsp;&nbsp;Try the following. It uses the ExecuteFile() function that can be found in the     FMXUtils.pas file that came in the Demos\Doc\Filemanex directory with Delphi 1.0 and 2.0.     (As far as I know it should also be in D3) ExecuteFile() is basically just a wrapper for     the ShellExecute() function so this shows how to convert the params from pascal for<br>    use with it. I used WinSight32 to find WinWord's ClassName which is used in the     FindWindow() function. I have<br>    no idea why it's OpusApp?? This will open it if it's not already running and will bring it     to the front if it is<br>    running.<br>    uses<br>    &nbsp;&nbsp;ShellAPI;<br>    function ExecuteFile(const FileName, Params, DefaultDir: string;<br>    &nbsp;&nbsp;ShowCmd: Integer): THandle;<br>    var<br>    &nbsp;&nbsp;zFileName, zParams, zDir: array[0..79] of Char;<br>    begin<br>    &nbsp;&nbsp;Result := ShellExecute(Application.MainForm.Handle, nil,<br>    &nbsp;&nbsp;&nbsp;&nbsp;StrPCopy(zFileName, FileName), StrPCopy(zParams, Params),<br>    &nbsp;&nbsp;&nbsp;&nbsp;StrPCopy(zDir, DefaultDir), ShowCmd);<br>    end;<br>    procedure TForm1.Button1Click(Sender: TObject);<br>    begin<br>    &nbsp;&nbsp;if FindWindow('OpusApp',Nil) = 0 then<br>    &nbsp;&nbsp;&nbsp;&nbsp;ExecuteFile('E:\MSOFFICE\WINWORD\WINWORD.EXE','','',SW_SHOW)<br>    &nbsp;&nbsp;else<br>    &nbsp;&nbsp;&nbsp;&nbsp;if IsIconic(FindWindow('OpusApp',Nil)) then<br>    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ShowWindow(FindWindow('OpusApp',Nil),SW_MAXIMIZE)<br>    &nbsp;&nbsp;&nbsp;&nbsp;else<br>    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BringWindowToTop(FindWindow('OpusApp',Nil));<br>    end;<br>    -------------------<br>    另一回复:<br>    In addition to Rodney's reply, you really should try the WinExec function which you say     you cannot use. In D2 you can just do:<br>    &nbsp;&nbsp;&nbsp;&nbsp;if WinExec(pchar(16exenamestring),SW_NORMAL) <32 then<Br> &nbsp;&nbsp;&nbsp;ShowMessage('program     did not start'); {otherwise the program started}<br>    </td>  </tr>  <tr>    <td><font color="0000FF"><a name="4">怎样发现是否有 SOFTICE在运行?</a></font></td>  </tr>  <tr>    <td>&nbsp;----------一个有意思的话题<br>    I am trying to figure out how can I check if NuMega SoftIce is running? Any API calls?<br>    function SoftIce95Running : Boolean;<br>    var<br>    &nbsp;&nbsp;hFile : THandle;<br>    begin<br>    &nbsp;&nbsp;Result := False;<br>    &nbsp;&nbsp;hFile := CreateFile ('\\.\SICE',<br>    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GENERIC_READ     or GENERIC_WRITE,<br>    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FILE_SHARE_READ     or FILE_SHARE_WRITE,<br>    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nil,<br>    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OPEN_EXISTING,<br>    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FILE_ATTRIBUTE_NORMAL,<br>    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0);<br>    &nbsp;&nbsp;if hFile <> INVALID_HANDLE_VALUE then begin<br>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -