Canvasに描画する線の幅を太くした時、実線にならない方法は? Part2

解決


のり  2004-01-12 22:17:58  No: 6666

前回の幅の太さを変えても実線にならない方法は解決したのですが。

今回は、DrawPathの引数にTPenを渡し、そのスタイルによって線種を変えようと内部のプログラムを変更しようとしたのですが。

procedure DrawPath(Path      : TPath;
                    ACanvas  : TCanvas;
                    Color    : TColor;
                    Width    : Integer;
                    PStyle   : TPen;
                    Cap      : TCapStyle = csFlat);
var
 PenStyle : array of Double;
begin
  // 描画する線種を引数から判断しセットする。
  Case PStyle.Style of
    psSolid :
    begin
      SetLength(PenStyle,2);
      PenStyle := [1e6, 1];
    end;
    psDot :
    begin
      SetLength(PenStyle,2);
      PenStyle := [1, 1];
    end;
    psDashDot :
    begin
      SetLength(PenStyle,4);
      PenStyle := [2, 1, 1, 1];
    end;
    psDashDotDot :
    begin
      SetLength(PenStyle,6);
      PenStyle := [2,1,1,1,1,1];
    end;
  end;
のようにしているのですが、
[エラー] PathUtils.pas(221): 順序型が必要です
[エラー] PathUtils.pas(225): '集合型' と 'dynamic array' には互換性がありません
[エラー] PathUtils.pas(229): '集合型' と 'dynamic array' には互換性がありません
[エラー] PathUtils.pas(233): '集合型' と 'dynamic array' には互換性がありません
とでて、コンパイルが通りません。

どなたかご教授お願いいたします。


つっか  2004-01-12 22:30:12  No: 6667

順序型が必要です   -->  Case PStyle.Style of

'集合型' と 'dynamic array' には互換性がありません  --> PenStyle := [1e6, 1];

んで

PenStyle : array of Double;

こんな宣言だからね。

配列とか、case 文、順序型、集合型 など文法の基礎を全く理解してない。

ちゃんと、基礎を勉強した方が上達が速いよ。


のり  2004-01-12 22:49:21  No: 6668

できましたw
  
すいません^^;


にしの  2004-01-12 22:57:35  No: 6669

> [エラー] PathUtils.pas(221): 順序型が必要です
集合型は順序型ではないので、何らかの方法で順序型に変換する必要があります。

> [エラー] PathUtils.pas(225): '集合型' と 'dynamic array' には互換性がありません
> [エラー] PathUtils.pas(229): '集合型' と 'dynamic array' には互換性がありません
> [エラー] PathUtils.pas(233): '集合型' と 'dynamic array' には互換性がありません

配列に代入するとき、いきなり代入は無理です。
ヘルプの「動的配列」にかかれています。まずは、ヘルプで調べてみてください。

つっかさんの
> 配列とか、case 文、順序型、集合型 など文法の基礎を全く理解してない。
> ちゃんと、基礎を勉強した方が上達が速いよ。
と言われるように、基礎は必須ですね。
ヘルプだけでわからないようであれば、初心者向けの書籍を買うことをお薦めします。


のり  2004-01-12 23:52:28  No: 6670

Helpを見ながらやったら出来ました^^;

Case PStyle.Style of
    psSolid :   // 実線
    begin
      SetLength(PenStyle,2);
      PenStyle[0] := 1e6;
      PenStyle[1] := 1;
    end;
    psDot :     // 点線
    begin
      SetLength(PenStyle,2);
      PenStyle[0] := 1;
      PenStyle[1] := 1;
    end;
    psDash:     // 破線
    begin
      SetLength(PenStyle,2);
      PenStyle[0] := 2;
      PenStyle[1] := 1;
    end;
    psDashDot : // 一点鎖線
    begin
      SetLength(PenStyle,4);
      PenStyle[0] := 2;
      PenStyle[1] := 1;
      PenStyle[2] := 1;
      PenStyle[3] := 1;
    end;
    psDashDotDot :  // 二点鎖線
    begin
      SetLength(PenStyle,6);
      PenStyle[0] := 2;
      PenStyle[1] := 1;
      PenStyle[2] := 1;
      PenStyle[3] := 1;
      PenStyle[4] := 1;
      PenStyle[5] := 1;
    end;
  end;
で出来ましたのでw


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加