• ベストアンサー

Delphi for文

sgwjnの回答

  • ベストアンサー
  • sgwjn
  • ベストアンサー率70% (47/67)
回答No.2

Delphi 7 で試してみましたが、確かになりますね。 詳しいことは分かりませんが、おそらくループカウンタをループ内の処理で使用していないことが原因だと思います。 カウンタをインクリメントしてもデクリメントしても処理結果が変わらないため、コンパイル時の最適化でデクリメントが優先されているのではないでしょうか。 もし、上記の推測が正しいとしたら、対処方法としては以下が考えられます。 (1)ループ内でカウンタを無意味でも使用する (2)whileを使用する (3)コンパイル時の最適化を切れるなら切る ですが、これって別にどちらでも結果に影響はないのでは?

situmonnsya
質問者

お礼

>ループ内でカウンタを無意味でも使用する で目的とする結果が得られました。 ありがとうございます。

関連するQ&A

  • delphi paintbox.invalidate

    ターボdeliphiのPaintBoxです procedure TForm1.Button1Click(Sender: TObject); begin PaintBox1.Invalidate; PaintBox1.Canvas.MoveTo(0,0); PaintBox1.Canvas.lineTo(100,100); end; procedure TForm1.Button2Click(Sender: TObject); begin PaintBox1.Canvas.MoveTo(0,0); PaintBox1.Canvas.lineTo(100,100); end; procedure TForm1.PaintBox1Paint(~~~~~ ボタン1でlineTo(100,100)は描画されず、ボタン2では描画されます。 つまりPaintBox1.Invalidateで再描画させている微妙なタイミングのせいでしょうか? 再描画が終了してからlineTo(100,100)を描画したいのですが、それを知るコマンド?関数?はありますか?

  • Delphiプログラミングについて

    この内容ではいけないのでしょか? また、代わりの方法なども教えていただけると嬉しいです ボタン ラベル がフォーム1の上に1つずつあるだけです お願いいたします unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Label1: TLabel; Button1: TButton; procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure Button1Click(Sender: TObject); private { Private 宣言 } public { Public 宣言 } end; var Form1: TForm1; i:integer; implementation {$R *.dfm} procedure hyouji; begin repeat form1.label1.caption:= 'strike'; until i = 10; end; procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (KEY = VK_RIGHT) then i:=i+1; end; procedure TForm1.Button1Click(Sender: TObject); begin hyouji end; end.

  • delphi try文の使い方

    下記コードのようにエラーを回避したいのですが、try文が機能せずエラーになります。 procedure TForm1.Button1Click(Sender: TObject); var p:integer; begin edit1.text:='abc'; try p:=strtoint(edit1.Text); except p:=-1; end; label1.Caption:=inttostr(p); end; try文の使い方がわかりません。

  • DelphiのTreeViewでの+ボタンの出し方

    WindowsXP、Delphi2009で開発しています。 TTreeViewのAdvancedCustomDrawItemで下記の様に動的にノードの描画を行っていますが、ノードを展開・折りたたみする際に使う+ボタンが表示できなくて困っています。 +ボタンを表示させる方法が分かる方、ご教示願います。 ------------------------------------------------------------ procedure TForm3.TreeView1AdvancedCustomDrawItem(Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage; var PaintImages, DefaultDraw: Boolean); var Rect :TRect; begin defaultdraw := false; Rect := Node.DisplayRect(True); if Node.Selected = true then begin Sender.Canvas.Font.Color := clWhite; end else begin if Copy(Node.Text,pos('\',Node.Text) + 1, length(Node.Text)) = 'False' then begin Sender.Canvas.Font.Color := clWindowText; end else begin Sender.Canvas.Font.Color := clRed; end; end; Sender.Canvas.TextOut(Rect.Left,Rect.Top,Copy(Node.Text,1,pos(',',Node.Text) - 1)); end; ------------------------------------------------------------

  • Delphi のフォーム操作について

    Delphi のフォーム操作について 初めて質問させてもらいます。 Delphiで、ファイルをコピーしレジストリに登録したりするソフトウェアのインストーラーのようなもの、たとえばInstallShieldのようなものを作りたいと思ったのですが、 ”次へ”ボタンを押したときにウィンドウは消えず位置も変えないで 線の上側のインストール先を選択させる画面から”現在コピーしています...”のような画面に移り変わるようにするにはどうすればいいのでしょうか。 Button1を ”次へ”ボタン としたとき procedure TForm1.Button1Click(Sender: TObject); begin form1.Destroy; begin Form2.Show; end; end; という書き方をすれば似たようなことができますが、いわゆるInstallShieldのようにはなりません。 どのように表示させればこの場合はベストなのでしょうか。 2ヶ月ほど前から少しVB.NETをいじり、最近Delphiをはじめ、 いろいろ検索してみて http://www2.big.or.jp/~osamu/Delphi/Tips/key.cgi?key=14#0295.txt こちらの記事を見つけ、参考にしましたが使いこなせませんでした。 VB.NETでも同じようなことを試みましたが、参考記事が見つからず 上で書いたような表示方法をしない形で書きました。 環境は Turbo Delphiを使用しています。 どうかご教示ください。

  • Delphi XEの警告文を消したい

    [DCC 警告] Unit5.pas(216): W1050 set 式で WideChar がバイト char に縮小されました。'SysUtils' ユニットの 'CharInSet' 関数で使用することを検討してください。 との警告文が出ます。 ソースは procedure TForm5.Edit2KeyPress(Sender: TObject; var Key: Char); begin if not(key in['0'..'9','.',Char(VK_RETURN),Char(VK_BACK)]) then Key:=Char(0); end; です。何処をどうしたら良いのかさっぱりわかりません。 分かる人具体的に解決方法を教えてください、お願いいたします。

  • Delphiに関して  「このプログラム解読できません!」

    こんにちは。このプログラムが解読不可です。StringGridの1列目と2列目の各セルの内容を右寄せにする ということで、実行させると確かにそうなるのですが、どういう構造かいまいち分かりません。特に 'Rect.Top:=Rect.Top+2;' のところなんて"なんで+2なの~?"ってホントに謎です。gdFixedとかFillRectとかヘルプに書いてあることとなんか違う気がして....DT_RIGHTもわかりません。 このプログラムの解説お願いします! procedure TForm1.StringGrid1DrawCell(Sender:TObject;ACol,ARow:Integer;Rect: TRect; State: TGridDrawState); begin If Not (gdFixed In State) And (ACol In [1,2]) Then Begin StringGrid1.Canvas.FillRect(Rect); Rect.Top := Rect.Top + 2; If (ACol = 1)or(ACol = 2) Then DrawText(StringGrid1.Canvas.Handle, PChar(StringGrid1.Cells                 [ACol,ARow]),Lengthend(StringGrid1.Cells                [ACol,ARow]),Rect,DT_RIGHT) end; end;

  • Delphiのフォーカスのデータの取得。

     嬉しくって、質問を締めちゃいました。 ごめんなさい、書き込んでくれる予定だった、ご主人様ぁ~♪。 数字のフォーマットは、 procedure TForm1.TextFormat(Sender: TObject); var i : Integer; begin  i := StrToInt( TEdit(Sender).text );  TEdit(Sender).Text := Format('%.2d',[i]); end; こんな感じにできました。 数行でこんなすごい事ができるなんて、信じられません! まだまだ、例外処理がありますが、がんばります!! ここまでは私の成長の報告で、次が本題です。^w^えへへぇ。 細かい用法や単語の説明ではなく、全体的なソフトの作り方を説明しているHPや、ソースが見られる簡単なソフトはないでしょうか? Delphiのソース付きのソフトもいくつか見ましたが、やはり初心者には敷居が高くって、もっとシンプルなものでいいのですが。 これからもがんばれるために、ご主人様よろしくおねがいますぅ。

  • delphiで検索機能を作成したいのですが・・・

    Edit1に数字を打ち込むとMemo1に表示されている同じ数字にカーソルが向かうようにしたいのですが procedure TForm1.Button1Click(Sender: TObject); begin FindAndSel(Edit1.Text,Memo1); end; としてしまうと、同じ数字があった場合でも下の行に移らずに同じ行を参照し続けてしまいます。 検索で表示されたそこから先を更に検索するにはどのようにすれば良いのでしょうか? また、001と打ってしまうと001 0012の両方が検索に引っ掛かってしまいますが完全に一致した場合のみ表示されるようにするにはどうすれば宜しいのでしょうか? ご存じの方がいらっしゃればご教授お願いします。また、このHPが分かりやすいなどありましたらお教えください。

  • Delphiのマルチスレッドの割り込み処理について

    Delphiのマルチスレッドの割り込み処理について教えて欲しいのですが、ファイルをスレッドオブジェクトで作成して クラス名.Execute関数内でSynchronizeメソッドを使用しています。 本にはSynchronizeメソッドは「渡したメソッドが実行され終了するまで待ちます」と書いてあり、テストプログラムを作成してもそうでした。ということはSynchronizeメソッドは普通の関数と一緒のような気がしてしまうのですが、違うのでしょうか? Procedure MyThread.Execute begin Synchronize(AAA); AAAの処理が終了するまで待機している end; Procedure TmyThread.AAA; begin 'したい処理' end;