3

Visual Basic の「スペース」関数は、指定された数のスペースで構成される文字列を返します。

Visual Basic の例:

Property Get Sections() As String
Dim sBuf As String
Dim iSize As String
Dim iRetCode As Integer
    sBuf = Space$(8192)
    iSize = Len(sBuf)
    iRetCode = GetPrivateProfileString(0&, 0&, m_sDefault, sBuf, iSize, m_sPath)
    If (iSize > 0) Then
        Sections = Left$(sBuf, iRetCode)
    Else
        Sections = ""
    End If
End Property

「スペース」に相当するDelphiは何ですか? ありがとう。

4

3 に答える 3

6

直接の質問に答えるために、最も近いものはStringOfChar次のとおりです。

sBuf := StringOfChar(' ', 8192);

質問のコードを Delphi に翻訳している場合は、文字列をスペースで埋めません。VB コードは、文字列を割り当てるときに実際には文字列に含まれる内容には関心がなくSpace$、特定の長さの文字列を割り当てる簡単な方法として使用します。スペースは、API 呼び出しから返された文字列によって上書きされます。

Delphi では、次のように記述して、長さ 8192 の文字列を割り当てます。

SetLength(sBuf, 8192);

実際、Delphi ではTIniFile、INI ファイルから読み取るために使用します。したがって、質問のコードを実際に翻訳しようとしている場合は、そうせず、代わりに Delphi の組み込みライブラリを使用することをお勧めします。

于 2013-03-26T14:17:45.853 に答える
3

使用できますStringOfChar

// set txt to 80 spaces
txt := StringOfChar(' ', 80);
于 2013-03-26T14:18:36.730 に答える
-1

または、この関数を使用できます..

 function FastDupeCharA(Chr:Char;n:integer):string;assembler;
asm
 PUSH EBX
 PUSH ESI
 PUSH EDI
 XOR EBX,EBX

 MOV BL,AL
 MOV EDI,ECX
 MOV EAX,ECX
 MOV ESI,EDX
 XOR ECX,ECX
 CALL SYSTEM.@LSTRSETLENGTH
 MOV EDI,[EDI]

 MOV BH,BL  {Fill EBX  with BL (Char)}
 PUSH BX
 SHL EBX,16
 POP BX

 CMP ESI,8
 JLE @DupCarefully
 MOVD MM0,EBX
 PUNPCKLWD MM0, MM0

 @NextFill:
 MOVQ [EDI], MM0  {Fill 8 Char}
 ADD EDI,8
 SUB ESI,8
 CMP ESI,8
 JGE @NextFill
 EMMS
 TEST ESI,ESI
 JNE @DupCarefully
 JMP @FIN

 @DupCarefully:
 {If n or esi is smal than 8 }
 MOV [EDI],BL
 DEC ESI
 JE @FIN
 MOV [EDI+1],BL
 DEC ESI
 JE @FIN
 MOV [EDI+2],BL
 DEC ESI
 JE @FIN
 MOV [EDI+3],BL
 DEC ESI
 JE @FIN
 MOV [EDI+4],BL
 DEC ESI
 JE @FIN
 MOV [EDI+5],BL
 DEC ESI
 JE @FIN
 MOV [EDI+6],BL
 DEC ESI
 JE @FIN
 MOV [EDI+7],BL
 DEC ESI
 JE @FIN
 MOV [EDI+8],BL
 DEC ESI
 JE @FIN

 @FIN:
 MOV EAX,[EDI]
 POP EDI
 POP ESI
 POP EBX
 end;
于 2013-03-26T20:09:48.370 に答える