表題の件、どなたか教えてください。
「可能」か「不可能」かの情報や代替案でもありがたいです。

※delphi6 enterprise版を使用しています。

質問
コンポーネント名の指定に変数は使えるのでしょうか?
例えば、labelコンポーネントを複数設置しそのlabel名の末尾を数字にする(label1,2,3・・・)。何かの処理の際に、for文で変数を送り(i=1,2,3・・・)、label名+変数.captionなどという形で指定することはできるでしょうか?


ラベル名 label1 label2 label3 を設置

ボタンクリック時などに、
var
i : integer;

for i := 1 to 3 do
begin
  label(i).caption := inttostr(i) ;
end;

よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

そのような目的にはFindComponentが使えます。



for i := 1 to 3 do
begin
TLabel(FindComponent('Label'+InttoStr(i))).Caption:=InttoStr(i);
end;
    • good
    • 1
この回答へのお礼

素早いご回答まことにありがとうございます。
これで煩雑なコーディングを回避出来そうです。

お礼日時:2009/05/15 00:37

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qコンポーネント図の意味について

UMLのコンポーネント図でコンポーネントを表す記号の意味が気になっています。長方形の左辺に小さい長方形が2つ刺さっているような図なんですが、その小さな長方形の意味は何なのでしょうか?普通の長方形ではなぜだめなのでしょう。。

Aベストアンサー

UMLの表記法の多くは、それ以前にある表記法を取り入れて使っています。
たとえばクラス図はランボー(Rumbaugh)の表記法を使っていますし、
状態遷移図はハレル(Harel)の表記法です。

コンポーネント図は、UMLを作った三人(ブーチ・ランボー・ヤコブソン)の一人、
グラディ・ブーチの「モジュール図」の表記を単純にしたものです。
(もともとは、小さい長方形2つの上にさらに○を横にのばしたものがついています)
それはブーチの著書
『Booch法:オブジェクト指向分析と設計(第2版)』で見ることができます。
(現在は品切れのようです)

しかし、Boochがなぜそういう記法にしたか、
それがよくわかりません。
ひとついえるのは、単なる長方形だと、
クラス図とまぎらわしいという問題があります。
ですが小さな長方形の意味は不明です。
うちにある古いソフトウェア工学の本も何冊か見てみましたが、
Boochのモジュール図のもとになるようなものは見つかりませんでした。

想像ですが、モジュールがオブジェクトやクラスの実体化であることを
表したかったか…。あるいはインターフェイスを表したかったか…。
もしかすると、クラスやオブジェクトの表記法を考えたあと、
アイディアに詰まって適当に決めたのかもしれません。
Boochの手法でもUMLでも、コンポーネント図(モジュール図)は
いささかマイナーな存在ですから。
(本当のところはよくわかりません。失礼しました)

参考URL:http://www.amazon.co.jp/exec/obidos/ASIN/4795296545/

UMLの表記法の多くは、それ以前にある表記法を取り入れて使っています。
たとえばクラス図はランボー(Rumbaugh)の表記法を使っていますし、
状態遷移図はハレル(Harel)の表記法です。

コンポーネント図は、UMLを作った三人(ブーチ・ランボー・ヤコブソン)の一人、
グラディ・ブーチの「モジュール図」の表記を単純にしたものです。
(もともとは、小さい長方形2つの上にさらに○を横にのばしたものがついています)
それはブーチの著書
『Booch法:オブジェクト指向分析と設計(第2版)』で見ることができます...続きを読む

QAppleScript、変数名の中に変数

AppleScriptを少しかじっただけで他の言語にうとい素人です。

repeat with i from 1 to 2
set aData(i) to...
end repeat

これでaData1とaData2という変数が作れたり呼び出せたりしたら便利だと思うのですが、
試してみたところできませんでした。

AppleScriptでも、特別な宣言などをすれば可能なのでしょうか?

また、できたらで結構ですが、他の言語ならできる、という情報もあれば教えて下さい。


手抜きせず、リストに格納してやるのが王道ってことでしょうか? ^-^;

Aベストアンサー

AppleScriptのリストが配列と同じと考えられます。
set item 1 of aData to ....
で使えます。

AppleScriptは結構癖があるので、Rubyなどのスクリプト言語を基本に使い、アプリケーションなどを操作するときにはスクリプト言語からShellを呼び出し、osascript などのコマンドでAppleScriptを使うのが楽なように思います。

Qコンポーネントの意味をお教えください。

プログラムのアンインストールを行いましたら「アンインストールするコンポーネントを選択してください」というメッセージがでてきました。
コンポーネントとはどのような意味でしょうか?
ネットで「コンポーネントとは」で調べてみましたが、よくわかりません。
パソコンの知識の乏しい私にでも理解できるようにご説明いただけましたら助かります。
申し訳ございませんが、よろしくお願いいたします。

Aベストアンサー

> アンインストールするコンポーネント
アンインストールする項目を…に置き換えて読んで下さい。

Qバッチファイルへの変数のキー入力、変数名を含むファイルへの出力

とあるヘッダーの作成のため、キー入力した値で、変数名を含む名前のテキストに変数の入ったファイルを書き出そうと思うのですが、どなたかアドバイスいただけますでしょうか。

いまのところ次のような感じで、%num%という変数に数字を入れるようにしたいのですが。
SET/P %num% = 数字を入力してください: 
echo right: %num% >> header%num%.txt
echo leftt: %num% >> header%num%.txt

また、バッチファイルのサンプルが多く載っている書籍等の紹介でもかまいませんどうぞよろしくお願いします。

Aベストアンサー

アドバイスというか・・・

> SET/P %num% = 数字を入力してください: 
これ変では?

> SET/P num= 数字を入力してください: 
なのでは?
#代入時に「%~%」は不要。変数名の後の=との間に空白不要。

Qコンポーネントでbinaryとsourceに分かれている意味

http://people.ee.ethz.ch/~naegelic/download/

上のようなあるコンポーネントをダウンロードしたいんです。
binaryとsourceにわかれているのはどうしてですか?
また、2つともダウンロードしてダブルクリックしてみても、もどっちかひとつしか開いていないようなんです。どっちが開いているんですか?また開いていないほうは何の意味があるんですか?
このためコンポーネントのダウンロードがよくわかりません。
OSX環境です。よろしくお願いします。

Aベストアンサー

Sourceはプログラムのソース分だけで、自分でコンパイラを用意して自分で実行ファイルを
作成する人やプログラムを解析する人用。
バイナリはその逆で実行ファイルのみということでは無いでしょうか?

わからないならバイナリーの方をダウンロードしてXviDコンポーネントを添付ファイルか
サイトを見ながら設定すれば良いと思います。

QVBAで変数の数/変数名を動的に変化させる

こんにちは。プログラミング初心者です。

VBAで質問です。
以下のようなシートがあるとします。

 A | B | C | D | E | F
1 シート選択 | (プルダウンリストで選択します)
2 果物シート | りんご | みかん | ばなな
3 教科シート | 国語 | 算数 | 理科 | 社会 | 図工 | 体育
4 乗物シート | 車 | 電車 | 船 | 飛行機

そして、以下のようにB1セルのプルダウンで選択されたシート名をA列で検索してヒットした行の文字列を配列に格納します。

selectedSheet = cells(1, 2).Value

for i = 2 To 4
if cells(i , 1).Value = selectedSheet Then
rightRow = Cells(i, Columns.Count).End(xlToLeft).Column
Redim rowArray(rightRow - 1)
for j = 1 To rightRow
rowArray(j - 1) = cells(i, j).Value
Next j
Exit For
End if
next i

次に、配列に格納された文字列をB1のプルダウンで選択されたシートの1行目で、配列の各要素を検索して、それぞれが何列目にあるかを調べます。

sheetName = rowArray(0)
sheetObject = Worksheets(sheetName)
lastColumn = sheetObject.Cells(1, Columns.Count).End(xlToLeft).Column
Set searchRange = sheetObject.Range((cells(1, 1), cells(1, lastColumn))

col_01 = Find(rowArray(1), searchRange)  'りんごを検索してます
col_02 = Find(rowArray(2), searchRange)  'みかんを検索してます
col_03 = Find(rowArray(3), searchRange)  'バナナを検索してます

その後、これで得られた列情報をもとにいろいろと処理をするのですが、上記のように「col_01 = ***」のような書き方ができるのは、あらかじめ「果物シート」がセラばれることが分かっている場合のみです。

「教科シート」が選択された場合は、「col_**」の「**」の部分が「6」まである必要がありますし、「乗物シート」の場合は変数が4つになります。

このように必要となる変数の数が動的に変化する場合に変化する場合、どのように処理したらよいでしょうか。

最初の「for i = 2 To 4」のループとのころで、ヒットしたシート名によって、それぞれ別のSubやFunctionを呼ぶというのは避けたいです。

というのも、VBAをまったく知らないユーザでも上記テーブルの「果物シート」行に「メロン」を足したり、「乗物シート」の「飛行機」を削除することで、処理対象列を自由にカスタマイズできるようにしてあげたいのです。

(あるいは、乗物シートの下に「肩書シート | 社長 | 部長| 係長」のような行を挿入して、処理対象のシートそのものを増やしたり)

どなたか、よい方法をご存知でしたら、教えていただけないでしょうか。
よろしくお願いいたします。

こんにちは。プログラミング初心者です。

VBAで質問です。
以下のようなシートがあるとします。

 A | B | C | D | E | F
1 シート選択 | (プルダウンリストで選択します)
2 果物シート | りんご | みかん | ばなな
3 教科シート | 国語 | 算数 | 理科 | 社会 | 図工 | 体育
4 乗物シート | 車 | 電車 | 船 | 飛行機

そして、以下のようにB1セルのプルダウンで選択されたシート名をA列で検索してヒットした行の文字列を配列に格納します。

selectedSheet = cells(1, 2).Value

for i = 2 To 4
if cells(i...続きを読む

Aベストアンサー

途中から失礼します。
結局、
Sub try()
  Dim s As String
  Dim r As Range
  Dim n As Long
  Dim i As Long
  Dim x, y, z

  With ActiveSheet
    s = .Cells(1, 2).Value
    x = Application.Match(s, .Columns(1), 0)
    n = .Cells(x, .Columns.Count).End(xlToLeft).Column - 1
    If n = 0 Then MsgBox "no data": Exit Sub
    y = Application.Transpose(.Cells(x, 2).Resize(, n))
    y = Application.Transpose(y)
  End With

  With Sheets(s)
    z = Application.Match(y, .Rows(1), 0)
    If n = 1 Then
      If IsNumeric(z) Then
        Set r = .Columns(z)
      End If
    Else
      For i = 1 To UBound(z)
        If IsNumeric(z(i)) Then
          If r Is Nothing Then
            Set r = .Columns(z(i))
          Else
            Set r = Union(r, .Columns(z(i)))
          End If
        End If
      Next
    End If
  End With

  If Not r Is Nothing Then
    r.Copy Worksheets.Add.Range("A1")
    Set r = Nothing
  End If
End Sub

こういう事なんでしょうか。
列位置を変数にとって、必要な列だけを別シートに抜き出すという処理。
行方向のLoopに条件分岐処理がないなら列ごとコピーで良さそうですが。
上記例みたく。

でもそういう処理の場合で、抜き出す項目名が必ず元データにある、
という事が保証されているならAdvancedFilterメソッドが簡単です。

Sub try_2()
  Dim s As String
  Dim n As Long
  Dim x

  With ActiveSheet
    s = .Cells(1, 2).Value
    x = Application.Match(s, .Columns(1), 0)
    n = .Cells(x, .Columns.Count).End(xlToLeft).Column - 1
    If n = 0 Then MsgBox "no data": Exit Sub
    .Cells(x, 2).Resize(, n).Copy Worksheets.Add.Range("A1")
  End With

  Sheets(s).Range("A1").CurrentRegion.AdvancedFilter Action:=xlFilterCopy, _
      CopyToRange:=Range("A1").Resize(, n), Unique:=False
End Sub

もしLoop処理が必要な場合でも、1セルずつ書き出しているから遅いんであって、
一旦、配列に入れて、書き出しはまとめて1回で済ますようにすれば速度的にも改善します。

途中から失礼します。
結局、
Sub try()
  Dim s As String
  Dim r As Range
  Dim n As Long
  Dim i As Long
  Dim x, y, z

  With ActiveSheet
    s = .Cells(1, 2).Value
    x = Application.Match(s, .Columns(1), 0)
    n = .Cells(x, .Columns.Count).End(xlToLeft).Column - 1
    If n = 0 Then MsgBox "no data": Exit Sub
    y = Application.Transpose(.Cells(x, 2).Resize(, n))
    y = Application.Transpose(y)
  End With

  With Sheets(s)
  ...続きを読む

Qコンポーネント・レジストリ・ディレクトリの意味を!

●コンポーネント
●レジストリ
●ディレクトリ
この三つの用語の意味を分かりやすく教えて下さい。

私はパソコン初心者です。
お願いしますm(__)m

あと分かりやすいパソコン関係用語辞典のサイトがありましたらお教え下さい!!
お願いします

Aベストアンサー

下記URLは非常に分かりやすいです。
Microsoft誰でも分かるパソコン用語
http://support.microsoft.com/gp/glossary_ja
↓この中のご質問の用語です
コンポーネント
http://support.microsoft.com/default.aspx?scid=kb;ja;878936
レジストリ
http://support.microsoft.com/default.aspx?scid=kb;ja;878975
ディレクトリ
http://support.microsoft.com/default.aspx?scid=kb;ja;878589

QExcel VBA ワークシートに貼られたボタン名(Caption)をセルの値から取得するには

ご教授お願いいたします。
Excel2002のワークシート上にボタンを配置しています。
セル(例えばA6)の値を取得して,配置しているボタン名にすることはできますでしょうか。
初歩的な質問だと思うのですが,よろしくお願いいたします。

Aベストアンサー

値が変わったら自動的に変更したいのならチェンジイベントですね。

Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Address = "$A$6" Then
  Me.CommandButton1.Caption = Target.Text
 End If
End Sub

Qthe system uses components than make adjustment simple and easy の意味

以下の文でthan以下の構造がわからないので、意味がとれません。
それともthanではなくthatでしょうか。

The removale jig system uses components than make adjustment simple and easy.

Aベストアンサー

こんにちは。

おっしゃる通り、ここはthanではなくthatの間違いだと思います。

先行詞はcomponentsと複数になるので、that節の動詞makeが主語となる先行詞に一致して、複数扱いになっている理由が納得できます。

意味は、
「取り外し可能な可動システムは、調節を簡単手軽にする接続部品を使っています」

この医療関連の英文は、ネイティブが作成したものでしょうか。少しお粗末な英訳が目立ちます。

以上ご参考までに。

Q絶対パス名からファイル名を取り出して、変数に格納するバッチ

DOSコマンドバッチで定義した変数"fullpath"に絶対フルパス名が格納されているとします。
この変数からファイル名だけを抽出して別の変数"filenae"に格納したいのですが方法がわかりません。

1. set fullpath = "C:\test\test.c"
2. ----ここの部分をどのように処理すれば?------
3. set filename = fullpathから抽出したファイル名

私がやってみた方法として、for文とdir /bを組み合わせてみたのですが
for %a in ( dir /b c:\test\test.c ) do set filename =%a

本来dir /bを実行するとファイル名のみが表示されるのに、For文をかますと絶対フルパスでfilenameに値が格納されてしまいます。

dir /b c:\test\test.cの結果を直接filename変数に格納できれば解決するのですが、コマンド結果を変数に格納するにはFor文を使わないとだめなんですよね?
なにかよい方法はないでしょうか?

DOSコマンドバッチで定義した変数"fullpath"に絶対フルパス名が格納されているとします。
この変数からファイル名だけを抽出して別の変数"filenae"に格納したいのですが方法がわかりません。

1. set fullpath = "C:\test\test.c"
2. ----ここの部分をどのように処理すれば?------
3. set filename = fullpathから抽出したファイル名

私がやってみた方法として、for文とdir /bを組み合わせてみたのですが
for %a in ( dir /b c:\test\test.c ) do set filename =%a

本来dir /bを実行するとファイル名...続きを読む

Aベストアンサー

@echo OFF
setlocal
set fullpath="C:\test\test2.c"
Call :BASENAME %fullpath%
echo %fname%
Goto :EOF
:BASENAME
set fname=%~nx1

詳しくは、call /? または for /?


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報