[リストへもどる]
一括表示

投稿時間:2003/01/23(Thu) 13:53
投稿者名:kazu
Eメール:
URL :
タイトル:
TextBox 内の文字列の印刷…改行したら……
Excelと連動したTextBox (1行15文字×6行=90文字数)ですが、
各行を変数に取り込み、指定する任意の位置に印刷を試みています。
例えば……、
  L1=Left(Text1.Text,15)
    L2=Mid(Text1.Text,16,15)
    ・
  ・
  ・
  L6=Mid(Text1.Text,76,15)
と変数に取り込み、印字位置を指定していますが……。

問題は、ある行で「改行」を行うと次の行から指定位置
に印刷ができなくなります。
改行が行われても、任意の位置に印刷できるようにするには
どのようにしたらよいのでしょうか?
宜しく御願いいたします。

投稿時間:2003/01/23(Thu) 16:38
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: TextBox 内の文字列の印刷…改行したら……
> 問題は、ある行で「改行」を行うと次の行から指定位置
> に印刷ができなくなります。

指定位置はどのように指定されているのですか?
どの辺に印刷されるのですか?
指定位置がちゃんと設定されていればその位置に印刷できるはずですが?
その辺が解らないとどなたも回答できないのでは
(プログラムは問題ないのですがうまく動きませんと同じかと)

投稿時間:2003/01/23(Thu) 17:41
投稿者名:kazu
Eメール:
URL :
タイトル:
Re^2: TextBox 内の文字列の印刷…改行したら……
早速、有り難うございます。おっしゃるとおりですね。

> 指定位置はどのように指定されているのですか?
> どの辺に印刷されるのですか?

外部ファイル(仮に"File.txt"とします)に次のように印字位置を指定しています。
単位はmmです。(文章の部分だけです)

#Locate  30,69,   "!L1"      '1行目
#Locate  30,73,   "!L2"      '2行目
#Locate  30,77,   "!L3"      '3行目
#Locate  30,81,   "!L4"      '4行目
#Locate  30,85,   "!L5"      '5行目
#Locate  30,89,   "!L6"      '6行目

これを次のように行っています。(かなり省略していますが……)

Private Sub Command1()Click
  L1=Left(Text1.Text,15)
    L2=Mid(Text1.Text,16,15)
    ・
  ・
  ・
  L6=Mid(Text1.Text,76,15)

F1=FreeFile
Open "C:\My Documents\File.txt" For Input As #F1

Do
               Line Input #F1, tmp
                   If InStr(tmp, "#Locate") Then
                            set_Print
                   End If

  Loop Until EOF(F1)
        
Close F1

Set myObj = Printer

On Error GoTo err:
CDprt.CancelError = True
CDprt.ShowPrinter
GoTo prt:
err:    Exit Sub
prt:


Printer.EndDoc

End Sub

Private Sub set_Print()
    
          dat = Split(tmp, ",")                                                            
          xx = CLng(Replace(dat(0), "#Locate ", ""))                                
          yy = CLng(dat(1))                                                                
          tmp1 = Trim(dat(2))                                                        
          fp1 = InStr(tmp1, Chr(34))                                                        
          fp2 = InStrRev(tmp1, Chr(34))                                                  
          tmp2 = Replace(Mid(tmp1, fp1 + 1, fp2 - fp1 - 1), Chr(34), "")              
        
        
        If InStr(tmp2, "!") = 0 Then
          pStr = tmp2
          
        Else
              Select Case tmp2
                     Case "!L1"
                       pStr = L1
                    Case "!L2"
                       pStr = L2
                    Case "!L3"
                       pStr = L3
                    Case "!L4"
                       pStr = L4
                    Case "!L5"
                       pStr = L5
                    Case "!L6"
                       pStr = L6
                End Select
        End If
    
End Sub

他の項目は印刷できますが、文章のところが、改行をせずに15文字まで詰めると
指示通りに印字位置に印刷しますが、それ以下で改行すると次の行が用紙の左端に
印字位置が跳んでしまいます。取得文字数に満たないからだと思うのですが……。

投稿時間:2003/01/23(Thu) 17:58
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: TextBox 内の文字列の印刷…改行したら……
改行すると とは文字列中に改行コードがあり自動的に改行されると言う事ですね!

最初改行すると 書かれていたのでプログラム上から印刷位置を改行されたと判断していたものですから

それなら印刷する文字列の 改行コードの位置を調べておけばいいのでは
それと印刷する文字列の印刷時の文字の長さ(mm)を調べればできるかと思います。
 

投稿時間:2003/01/23(Thu) 16:54
投稿者名:nobu
Eメール:
URL :
タイトル:
Re: TextBox 内の文字列の印刷…改行したら……
> 問題は、ある行で「改行」を行うと次の行から指定位置
> に印刷ができなくなります。
> 改行が行われても、任意の位置に印刷できるようにするには
> どのようにしたらよいのでしょうか?

想像するに...
ある行で「改行」を行うと...とは、その行が改行コードのみと言う意味ではありませんか?
すなわち、そう言う時には全体で90文字は無いのでは?
そうだとすれば2行目が改行コードのみとしたら
L2=Mid(Text1.Text,16,15)  ...した時には3行目が入りますし
その語も1行ずつずれて行きます。
これを避けるにはL1からL6までの取得の仕方を工夫して下さい。

投稿時間:2003/01/23(Thu) 17:33
投稿者名:kazu
Eメール:
URL :
タイトル:
Re^2: TextBox 内の文字列の印刷…改行したら……
早速、有り難うございます。

> 想像するに...
> ある行で「改行」を行うと...とは、その行が改行コードのみと言う意味ではありませんか?
> すなわち、そう言う時には全体で90文字は無いのでは?

確かに90文字は無くなります。ある行の途中から改行しても同じです。

> そうだとすれば2行目が改行コードのみとしたら
> L2=Mid(Text1.Text,16,15)  ...した時には3行目が入りますし
> その語も1行ずつずれて行きます。
> これを避けるにはL1からL6までの取得の仕方を工夫して下さい。

それが分かれば……(--)

投稿時間:2003/01/23(Thu) 21:13
投稿者名:nobu
Eメール:
URL :
タイトル:
Re^3: TextBox 内の文字列の印刷…改行したら……
> それが分かれば……(--)

どうすれば良いかは考えて見たのでしょうか?

試しにForm1に  Text1 は MultiLine プロパティを  True にして、
Command1 , Command2 の各ボタン
Label1(0) から Label1(5) 迄をコントロール配列で作成してから試して下さい。


Dim strText As String
Dim dat As Variant
Dim i As Integer

Private Sub Command1_Click()

Text1.Text = "111111111111111" & vbCrLf & _
           "222222222222222" & vbCrLf & _
           "333333333333333" & vbCrLf & _
           "444444444444444" & vbCrLf & _
           "555555555555555" & vbCrLf & _
           "666666666666666"

        Disp_Label
        
End Sub

Private Sub Command2_Click()

Text1.Text = "111111111111111" & vbCrLf & _
           "222222222222" & vbCrLf & _
           "3333333" & vbCrLf & _
           "" & vbCrLf & _
           "5555555555555" & vbCrLf & _
           "6666"
    Disp_Label

End Sub

Private Sub Disp_Label()

strText = Text1.Text            '入力文字列を取得

dat = Split(strText, vbCrLf)  '改行コードで各行に分割
    
    For i = 0 To UBound(dat)    '最大行数まで表示
        Label1(i).Caption = dat(i)
    Next i

End Sub

Command1 と Command2 のどちらを押しても各行の先頭は1,2,3..とかになります。

  L1=Left(Text1.Text,15)
    L2=Mid(Text1.Text,16,15)
...とかの様に取得位置固定ではTextに入力
された状況により取得されるものが期待値にはなりません。

投稿時間:2003/01/23(Thu) 23:23
投稿者名:kazu
URL :
タイトル:
Re^4: TextBox 内の文字列の印刷…改行したら……
いろいろとありがとうございます。

> どうすれば良いかは考えて見たのでしょうか?

いろいろと考えた見たのですが……、今の私の力が現実を
物語っています。

もう少し勉強してみます。

No.2369 のようなことを行っています。

外部ファイルから印字位置をユーザーが変更できるようにしたいのです。
今は、このように文章で悩んでいます。一行だけの数字や文字列はできるのですが…
とにかく頑張ってみます。

ありがとうございます。









> 試しにForm1に  Text1 は MultiLine プロパティを  True にして、
> Command1 , Command2 の各ボタン
> Label1(0) から Label1(5) 迄をコントロール配列で作成してから試して下さい。
>
>
> Dim strText As String
> Dim dat As Variant
> Dim i As Integer
>
> Private Sub Command1_Click()
>
> Text1.Text = "111111111111111" & vbCrLf & _
>            "222222222222222" & vbCrLf & _
>            "333333333333333" & vbCrLf & _
>            "444444444444444" & vbCrLf & _
>            "555555555555555" & vbCrLf & _
>            "666666666666666"
>
>         Disp_Label
>        
> End Sub
>
> Private Sub Command2_Click()
>
> Text1.Text = "111111111111111" & vbCrLf & _
>            "222222222222" & vbCrLf & _
>            "3333333" & vbCrLf & _
>            "" & vbCrLf & _
>            "5555555555555" & vbCrLf & _
>            "6666"
>     Disp_Label
>
> End Sub
>
> Private Sub Disp_Label()
>
> strText = Text1.Text            '入力文字列を取得
>
> dat = Split(strText, vbCrLf)  '改行コードで各行に分割
>    
>     For i = 0 To UBound(dat)    '最大行数まで表示
>         Label1(i).Caption = dat(i)
>     Next i
>
> End Sub
>
> Command1 と Command2 のどちらを押しても各行の先頭は1,2,3..とかになります。
>
>   L1=Left(Text1.Text,15)
>     L2=Mid(Text1.Text,16,15)
> ...とかの様に取得位置固定ではTextに入力
> された状況により取得されるものが期待値にはなりません。

投稿時間:2003/01/24(Fri) 11:00
投稿者名:kazu
Eメール:
URL :
タイトル:
Re^5: TextBox 内の文字列の印刷…改行したら……
> いろいろとありがとうございます。
>
> > どうすれば良いかは考えて見たのでしょうか?
>
> いろいろと考えた見たのですが……、今の私の力が現実を
> 物語っています。
>
> もう少し勉強してみます。
>
> No.2369 のようなことを行っています。
>
> 外部ファイルから印字位置をユーザーが変更できるようにしたいのです。
> 今は、このように文章で悩んでいます。一行だけの数字や文字列はできるのですが…
> とにかく頑張ってみます。
>
> ありがとうございます。