◀マクロトップへ
  • 87 変数の内容をクリップボードに設定したい。。
    • 88 Re:変数の内容をクリップボードに設定したい。。
      • 90 Re2:変数の内容をクリップボードに設定したい。。
      • 101 Re2:変数の内容をクリップボードに設定したい。。
        • 102 Re3:変数の内容をクリップボードに設定したい。。
        • 104 Re3:変数の内容をクリップボードに設定したい。。
  • [87] 変数の内容をクリップボードに設定したい。。 すす 2004年08月25日 15:36

    PPAのマクロで箱型罫線を引こうとMacroを書いていたの
    ですがうまくいかないです

    1.箱型罫線を変数に代入
    2.文字入力
    を

    1.箱型罫線を変数に代入
    2.変数の内容をクリップボードに設定
    3.矩形ペースト
    に変えればとりあえず引けそうなのですが

    変数の内容をクリップボードに設定することができません
    誰か教えてください。

    ちなみに途中まで書いたやつ
    (文字数カウントのマクロをベースとしております)
    http://jp.y42.briefcase.yahoo.co.jp/bc/szk_sin/lst?&.dir=/%b7%d3%c0%fe%a5%de%a5%af%a5%ed&.src=bc&.view=l&.last=1
    • [88] Re:変数の内容をクリップボードに設定したい。。 すす 2004年08月25日 17:54

      自レスですが
      考え方を変えて

      1行分の文字数カウント後に1文字ずつ罫線挿入で
      何とか箱型罫線を引けたのですが
      「範囲選択する際、右下から左上に向かって選択」
      しないとカーソルの場所から挿入になってしまう。。。

      範囲選択されてる左上の位置にカーソル移動
      できれば解決するのに。。。
      • [90] Re2:変数の内容をクリップボードに設定したい。。 すす 2004年08月26日 10:24

        // ☆☆☆動作条件☆☆☆
        // PPA.DLL が必須
        // 拡張子は .PPA
        // ☆範囲選択する際、右下から左上に向かって選択
        // ☆行選択する際下から上に向かって選択
        var
        CRLF,CR,LF:String;
        str:String;
        byte:Integer;
        mess:String;
        han,zen:Integer;
        n_crlf,n_cr,n_lf:Integer;
        pt:Integer;
        tmp1,tmp2:String;
        isknj:Integer;
        i,j:Integer;
        max_size:Integer;

        begin
        CRLF := '
        ';
        CR := Copy(CRLF,1,1);
        LF := Copy(CRLF,2,1);
        str := S_GetSelectedString(0);
        byte := Length(str);
        zen := 0;
        han := 0;
        n_crlf := 0;
        n_cr := 0;
        n_lf := 0;
        pt := 1;
        max_size := 0;
        while (pt <= byte) do
        begin
        tmp1 := Copy(str,pt,1);
        tmp2 := Copy(str,pt,2);
        isknj := 0;
        if ((' ' <= tmp2) and (tmp2 <= '滌')) then isknj := 1;
        if (('漾' <= tmp2) and (tmp2 <= '黑')) then isknj := 1;
        if (isknj <> 0) then
        begin
        zen := zen + 1;
        pt := pt + 1;
        end
        else
        begin
        if (tmp2 = CRLF) then
        begin
        n_crlf := n_crlf + 1;
        pt := pt + 1;
        if (max_size < ((han div 2) + (han mod 2) + zen)) then
        begin
        max_size := (han div 2) + (han mod 2) + zen;
        end
        ;
        zen := 0;
        han := 0;
        end
        else if (tmp1 = CR) then n_cr := n_cr + 1
        else if (tmp1 = LF) then n_lf := n_lf + 1
        else han := han + 1
        ;
        end
        ;
        pt := pt + 1;
        end;
        S_CancelMode(0);
        if (n_crlf = 0) then
        begin
        i := 0;
        j := (han div 2) + (han mod 2) + zen;
        while i < j do
        begin
        i := i + 1;
        S_InsText('━');
        end;
        end
        else
        begin
        i := 0;
        while i < n_crlf do
        begin
        j := 0;
        while j < max_size do
        begin
        if (i = 0) then
        begin
        if (j = 0) then S_InsText('┏')
        else if (j = (max_size - 1)) then S_InsText('┓')
        else S_InsText('━')
        ;
        end
        else if (i = (n_crlf - 1)) then
        begin
        if (j = 0) then S_InsText('┗')
        else if (j = (max_size - 1)) then S_InsText('┛')
        else S_InsText('━')
        ;
        end
        else
        begin
        if (j = 0) then S_InsText('┃')
        else if (j = (max_size - 1)) then S_InsText('┃')
        else S_InsText(' ')
        ;
        end
        ;
        j := j + 1;
        end;
        i := i + 1;
        j := 0;
        while j < max_size do
        begin
        S_Left();
        j := j + 1;
        end;
        S_Down();
        end;
        end
        ;
        end;
      • [101] Re2:変数の内容をクリップボードに設定したい。。 すい 2004年09月03日 04:10

        一体、何をやりたいんでしょ。
        文字列を矩形選択してからその >>90 のマクロを実行してみると、

        その選択範囲と同じサイズの罫線の箱を挿入される。
        その矩形選択されていた文字列を後ろに押しのけるような形で...

        という事が目的の処理なのでしょうか?
        # 何に使うんだろ。 (;^^;)


        >範囲選択されてる左上の位置にカーソル移動
        >できれば解決するのに。。。

        削除と Undo を組み合わせれば。

        矩形選択状態で削除を実行すればカーソルは矩形選択の左上の位置に行きますよね。
        この状態で S_ExpandParameter() で $x と $y を調べれば
        その桁&行位置が分かるのでこれらを変数に格納しておく。
        その後、 S_Undo() すれば削除された文字列は元通り復帰。
        ただし、前から後ろ方向に矩形選択していた場合には S_Undo() すると
        矩形選択範囲の右下位置へ戻ってしまうので、先ほど S_ExpandParameter() で
        変数にメモった桁・行位置まで、えッちらおッちら移動...
        # 行位置だけは S_Jump() 一発で飛べますが。

        なんかバタバタしてて美しくないですね。

        あ、待てよ、移動履歴を使えばもっとスムーズだ。
        1.削除
        2.[編集(E)]→[移動(O)]→[現在位置を移動履歴に登録(S)]
        3.元に戻す
        4.[編集(E)]→[移動(O)]→[移動履歴 前へ(P)]
        で良し。

        S_Delete(0) ; // 削除
        S_MoveHistSet(0); // 現在位置を移動履歴に登録
        S_Undo(0); // 元に戻す
        S_MoveHistPrev(0); // 移動履歴: 前へ
        な感じで。
        • [102] Re3:変数の内容をクリップボードに設定したい。。 すい 2004年09月03日 05:20

          var
          str,lbuff:String;
          CRLF,CR,LF:String;
          ptcr,ptlf,line:Integer;
          MaxCol,MaxRow:Integer;
          cx,cy:Integer;

          begin
          CRLF := '
          ';
          CR := Copy(CRLF,1,1);
          LF := Copy(CRLF,2,1);
          // 選択範囲のサイズを調べる
          // MaxCol:横幅(バイト数)
          // MaxRow:縦幅(行数)
          str := S_GetSelectedString(0);
          MaxCol := 0;
          MaxRow := 0;
          while (str <> '') do // strが空で無ければループ
          begin // {
          MaxRow:=MaxRow+1; // 行数+1
          // str中の先頭行の長さ調査
          line:=Length(str); // 文字列全体の長さ
          ptcr:=Pos(CR,str); // CRの位置
          ptlf:=Pos(LF,str); // LFの位置
          if(ptcr <> 0) and (ptcr < line) then line:=ptcr-1; // CRあり&&lineより前→line:=CRの前までの長さ
          if(ptlf <> 0) and (ptlf < line) then line:=ptlf-1; // LFあり&&lineより前→line:=LFの前までの長さ
          // ここまででlineに先頭の行の長さが格納されている
          if(MaxCol < line) then MaxCol:=line; // MaxCol:=最大の長さの行
          // str から先頭行を削除
          str:=Delete(str,1,line); // strから先頭行長さ分 削除
          if(Copy(str,1,1) = CR) then str:=Delete(str,1,1); // 先頭1バイトがCRなら削除
          if(Copy(str,1,1) = LF) then str:=Delete(str,1,1); // 先頭1バイトがLFなら削除
          end; // }
          // サイズ調査完了
          // 選択領域の左上へ
          S_Delete(0); // 削除
          S_MoveHistSet(0); // 現在位置を移動履歴に登録
          S_Undo(0); // 元に戻す
          S_MoveHistPrev(0); // 移動履歴: 前へ
          // 横MaxCol×縦MaxRowの箱出力
          MaxCol := MaxCol div 2; // MaxCol / 2
          for cy:=1 to MaxRow do
          begin
          // 行出力バッファlbuff初期化
          if(cy = 1) then lbuff:='┏'
          else if(cy=MaxRow) then lbuff:='┗'
          else lbuff:='┃'
          ;
          // 横サイズ分lbuffに文字追加
          for cx:=2 to MaxCol-1 do
          begin
          if(cy = 1) then lbuff:=lbuff+'━'
          else if(cy=MaxRow) then lbuff:=lbuff+'━'
          else lbuff:=lbuff+' '
          ;
          end;
          // lbuff行末尾文字追加
          if(cy = 1) then lbuff:=lbuff+'┓'
          else if(cy=MaxRow) then lbuff:=lbuff+'┛'
          else lbuff:=lbuff+'┃'
          ;
          S_MoveHistSet(0); // 現在位置を移動履歴に登録
          S_InsText(lbuff); // 1行出力
          S_MoveHistPrev(0); // 移動履歴: 前へ
          S_Right(0); // カーソル右移動
          S_Left(0); // カーソル左移動
          S_Down(0); // カーソル下移動
          end;

          end;
        • [104] Re3:変数の内容をクリップボードに設定したい。。 すす 2004年09月03日 10:04

          ▼ すいさん
          レスありがとうございます。

          > 一体、何をやりたいんでしょ。
          > 文字列を矩形選択してからその >>90 のマクロを実行してみると、
          >
          > その選択範囲と同じサイズの罫線の箱を挿入される。
          > その矩形選択されていた文字列を後ろに押しのけるような形で...
          最終的には押しのけずに矩形の形に罫線挿入したいのですが
          とりあえずちょっとづつ書いてみようと思いまして
          今の目的は上記のとおりです

          > という事が目的の処理なのでしょうか?
          > # 何に使うんだろ。 (;^^;)
          私も知らない。秀○に負けたくないだけ?


          > >範囲選択されてる左上の位置にカーソル移動
          > >できれば解決するのに。。。
          >
          > 削除と Undo を組み合わせれば。
          >
          > 矩形選択状態で削除を実行すれば
          なるほど「削除ですか」


          > あ、待てよ、移動履歴を使えばもっとスムーズだ。
          > 1.削除
          > 2.[編集(E)]→[移動(O)]→[現在位置を移動履歴に登録(S)]
          > 3.元に戻す
          > 4.[編集(E)]→[移動(O)]→[移動履歴 前へ(P)]
          > で良し。
          移動履歴とはこういうものだったのか・・・