VBのFor Each 文の処理

解決


アスカ  2002-11-07 06:39:48  No: 1973

いつも楽しくHPを拝見しております。
早速質問させてください。

現在、DelphiにてSolidWorks(3DCAD)のカスタマイズを
SolidWorksのAPI関数を利用して作成しているのですが、
API関数の使用例がVB形式で記述されています。
その、使用例の中にFor Each 文を使用してオブジェクトを
処理する方法が記載されていました。
Delphiには、For Each文はありませんので、下記VBと同様の
処理をする方法を探しております。

Dim swApp As Object
Dim Part As Object
Dim SketchObj As Object
Dim SketchSegObj As Variant
Dim Count As Integer

Sub main()

Set swApp = CreateObject("SldWorks.Application")
Set Part = swApp.ActiveDoc

Set SketchObj = Part.GetActiveSketch2
For Each SketchSegObj In SketchObj.GetSketchSegments()
//↑この部分
    If SketchSegObj.gettype = swSketchLINE Then
        If Not SketchSegObj.ConstructionGeometry Then
            SketchSegObj.select2 True, 0
            Count = Count + 1
            If Count = 2 Then
                MsgBox "Fillet"
                SketchSegObj.select2 False, 0
                Count = 1
            End If
        End If
    End If
Next
End Sub

上記した部分にFor Each文を用いて、SketchObj内(キャンパス
のようなものです。)の各オブジェクト(線、円、点等の描画
要素)を取得し、その取得した各オブジェクトに対し処理を実施
しています。Delphiにて上記したFor Each文と同様の処理をし、
各オブジェクトを取得したいのです。どうか、よろしくお願い
いたします。

尚、いろいろ調べてみて IEnumVariantを使用すればできるのでは
ないかと思うのですが、使用方法がよくかからないので試して
いません。すみませんが、よろしくお願いいたします。
説明不足の点がありましたら、追加説明いたしますので、お願い
いたします。

アスカ
環境
Athlon 1.54GHz
Memory 512Mbyte
OS WindowsXp pro,2000pro
Language Delphi 6 Enterprise
SolidWorks 2001Plus SP3


にしの  2002-11-07 18:15:45  No: 1974

そのオブジェクトにCountやItemといったプロパティはありませんか?
ExcelのSheetsでは、
For Each Sheet In objExcel.Sheets
が、
for i := 1 to objExcel.Sheets.Count do
begin
  objSheet := objExcel.Sheets.Item[i];
と書けます。


アスカ  2002-11-07 22:55:12  No: 1975

こんにちわ、アスカです。
にしのさん、返事ありがとうございます。
いろいろ試していて自己完結しました。
そこで、新たな疑問がわいたのですが、
上記したFor Each文の部分を下記のようにDelphiで
記述したら解決いたしました。

For Each SketchSegObj In SketchObj.GetSketchSegments()

SketchSegObj: Variant;
で定義し、
SketchSegObj := SketchObj.GetSketchSegments;
と記載したら解決しました。
SketchSegObjは、Variantの配列になり、SketchSegObj[i]として
各要素を抽出できました。
ここで、新たな疑問なのですが、
SketchSegObj := SketchObj.GetSketchSegments();
としたらエラーが発生するのですが、なぜかわかりません。
もし、おわかりでしたらご教授ください。

アスカ
環境
Athlon 1.54GHz
Memory 512Mbyte
OS WindowsXp pro,2000pro
Language Delphi 6 Enterprise
SolidWorks 2001Plus SP3


にしの  2002-11-07 23:15:43  No: 1976

GetSketchSegmentsの定義が、内部で
function GetSketchSegments: Variant;
だからだと思います。
function GetSketchSegments(): Variant;
とは別物です。


アスカ  2002-11-08 03:43:29  No: 1977

こんにちわ、アスカです。
にしのさん、丁寧にどうもありがとうございました。

アスカ
環境
Athlon 1.54GHz
Memory 512Mbyte
OS WindowsXp pro,2000pro
Language Delphi 6 Enterprise


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








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