初めてのDelphi6!コンソールアプリの実行時にDOS窓が消えてしまう問題に困っています

このQ&Aのポイント
  • Delphi6の無料版を使って初めてコンソールアプリを作成しています。
  • 実行するとDOS窓が一瞬表示されてすぐに消えてしまう問題が発生しています。
  • 他のサイトでの調査ではReadln;を使用して解決すると書かれていましたが、試してみた結果、うまく動作しませんでした。どなたか解決策を教えてください。
回答を見る
  • ベストアンサー

delphi6の無料版のコンソールアプリケーション

初めてdelphiを触ります。 いろんなサイトで初心者講座みたいなものを見ているのですが、 コンソールの編集になると、実行を押すとちらっとDOS窓が出た後に消えてしまいます。 消えないように入れるというReadln;も書いてあるのですが、なぜか消えてしまいます。 何かやり方がおかしいんでしょうか?? project1.dprにはこれしか書いていません。 --------------------------------------- program Project1; {$APPTYPE CONSOLE} uses SysUtils; begin { TODO -oUser -cConsole Main : Readln; } end. ---------------------------------------------- あちこち見てまわったのですが、ウチだけで起きているようなので・・ 普通のフォームを使う方はちゃんと動いています。 どなたかお助けください

質問者が選んだベストアンサー

  • ベストアンサー
  • selenity
  • ベストアンサー率41% (324/772)
回答No.1

これじゃぁ、無理でしょう。 delphiで{...}内はコメント扱いなので、このままではReadln;自体もコメントとなっており、Readlnの命令自体が無効になっているのではないでしょうか?

ein_99
質問者

お礼

回答ありがとうございました。 この質問を出した後に、同じ事をして悩んでいる人の書き込みを見つけました(^^;) コメントからはずすことで、ちゃんと動きました。 このgooのシステムは質問の取り消しとかできないんですね。 お恥ずかしいです(^^;)

関連するQ&A

  • 助けて助けて下さいっ!!

    Delphi6を使ってのプログラミングの課題が出たんですけど、コンピュータ言語とか詳しくなくて困ってます!! 「秒単位で与えられた時間を、時間、分、秒の単位を用いて表すプログラムを作成せよ」 なんです。。。二つの整数の和を求めるプログラムとかはこの通りに入力して下さいっていう、記入例があったのでできたのですが、今回はそれがないのでさっぱりです。。。手の付けようが無いと言うか。。。。得意な方よろしくお願いします!!!こんな感じのやつです↓ program sum; {$APPTYPE CONSOLE} uses SysUtils; var a, b, c : integer; begin { TODO -oUser -cConsole Main : この下にコードを記述してください } write('Enter two integers : '); readln(a, b); c := a + b; writeln('sum =', c); readln end.

  • Delphiでデバッグ時の識別はできますか?

     現在、2重起動防止のため下記のようなコードにしています。 Delphiではデバッグ実行時のフォームも2重起動の対象となるため、開発環境があるときは、2重起動のチェックをしないようにしてあります。  これでうまく行くのですが、何だか野暮ったい気がします。 こう少しスマートな解決策はないでしょうか? program Sample; uses  Forms,  Windows, Dialogs,  uFrmSample in 'uFrmSample.pas' {frmSample}; {$R *.res} var  MainWnd: THandle; begin  {Delphi開発環境の存在をチェックする}  MainWnd := FindWindow(nil, 'delphi 6');  if MainWnd = 0 then begin   {間発環境が実行中でなければ2重起動をチェックする}   MainWnd := FindWindow('TFrmSample', nil);   if MainWnd <> 0 then begin    ShowMessage('既に起動しています');    SetForegroundWindow(MainWnd);    Exit;   end;  end;  Application.Initialize;  Application.CreateForm(TfrmSample, frmSample);  Application.Run; end. 以上、よろしくおねがいします。

  • VisualStudio でのコンソール・アプリケーションのデバッグ

    いつもお世話になります。  VisualStudio でコンソールプログラム(Win32 Console Application)を開発しています。  VisualStudio は、.Net ではなく、バージョン6 を使っています。  DOS窓からアプリケーションを実行させるような形式での起動方法です。  VisualStudio プログラムをデバッグ起動するとブレークポイントで止めることはできるのですが、  実際のプログラムは、argc, argv でコマンドライン入力しているので、これを受け取ることができません。どうすれば良いのでしょうか?  ご教授お願いします。

  • Delphi6で、実行後、一時停止をしたい。

    Delphi6を使ってPascalを勉強しています。 Delphi6でプログラムを記述し実行すると、MS-DOSが出てきて実行します。 しかし、実行した後すぐに終了してしまうので困っています。 合っているのか確認できません。 そのために一時停止用に型宣言のときに、 x:string;  end.の前に  readln(x)  を付けて止めるようにしているのですが、 プログラムによって止まるのと止まらないのがあります。 どうしてなのでしょうか。 ↓は止まりません。どうしたら止まってくれますか? 配列にデータを追加するプログラムです。 program ng; {$AppType Console} uses SysUtils; var  i, j, n, dat : integer;  a : array[1..100] of integer;  {一時停止のため変数名}  x:string; begin {配列にデータを入力する}  n := 6;  a[1] := 20; a[2] := 30; a[3] := 60;  a[4] := 70; a[5] := 80; a[6] := 90;  writeln('(1)現在の配列の内容');  for i := 1 to n do write(a[i]:3);  writeln;  writeln('(2)挿入するデータ?');  read(dat);  repeat    writeln('(3)挿入する位置?');    read(i);  until(i < n) and (i > 0); {配列への挿入}  for j := n downto i do a[j+1] := a[j];  a[i] := dat;  n := n+1; {挿入後の配列を表示}  writeln('(4)挿入後の配列の内容');  for i := 1 to n do write(a[i]:3);  {一時停止のためのread文}  readln(x) 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プログラミングについて

    この内容ではいけないのでしょか? また、代わりの方法なども教えていただけると嬉しいです ボタン ラベル がフォーム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】クラスの継承、互換性について

    //Base.pas TSituation = class(TObject) public  procedure Update;virtual;abstract;  procedure Reflect;virtual;abstract; end; //Title.pas TSceneTitle = class(TSituation) private  ・  ・  ・ public  constructor Create;  destructor Destroy;override;  procedure Update;override;  procedure Reflect;override; end; //main.pas(メインフォーム) unit main; interface uses  ・・・, Base, Title;    ・    ・    ・ var  fm_main: Tfm_main;  Situation: TSituation; --------------------------------------------------- こう、きちんとクラスの宣言も継承もしているのに、(しているはず Situation := TSceneTitle.Create; とすると互換性がないといってコンパイルエラーになります。 なにかおかしいところがあるのでしょうか。

  • visual studio 2005 VB のコンソールアプリに関して

    やりたいこと: exeファイルを作成する。 そのexeファイルをダブルクリックすると、 コンソールが表示され、1,2,3,4,・・・・と表示を続ける。 キーボードの"q"が入力されると表示が停止する。 下記のソースコードで、コンソールが表示、1,2,3,4,・・・と表示、まではできたようです。 //////////////////// Module Module1 Sub Main() Dim number As Integer number = 1 Do Console.WriteLine(number) number = number + 1 Loop End Sub End Module //////////////////// できたというのは、VisualStudio上でF5キーを押してうまくいった、 ということです。 あとは、  ・キーボードの"q"の入力受付&停止処理  ・exeファイルを作成する ですが、コンソールアプリの情報がなかなかWEBから手に入りません。 有識者の方、ご教授いただけませんでしょうか。 プログラミング経験は、 PHPを半年ほどやっているだけです。 よろしくお願いします。 以上

  • Visual StudioでDOS窓以外に出力する方法は?

    Visual Studio 2008 を使って、プログラミングの勉強をしてます。 まだコンソールアプリだけで、フォームアプリの勉強には入って いません。 ですので、出力は Console.WriteLine を使ってますけど、これで プログラムを実行すると、DOS窓に出力されます。結果を見るだけなら それでもいいんですけど、DOS窓からはクリップボードにコピーが 出来ないので、たとえば出力結果をこの掲示板に載せて質問したい 時とかは、自分でそれを見ながら打ち込まなければなりません。 DOS窓を開いて exe ファイルを叩いて実行すれば、ファイルに リダイレクト出来るのは分るんですけど、ディレクトリを移動する だけでも面倒ですし、プロジェクトごとにディレクトリが変わるので PATH を切っておく方法も使えません。Visual Studio から実行した 出力結果を、ファイルに出す方法ってありますでしょうか? 今はプロジェクトを作る時に「空のプロジェクト」を選んで、 「コードファイル」を追加してソースコードを打ち込んでます。

  • Delphi6でVB.NETで作成のDLL呼出

    VisualSutudio2005で作成され提供されているDLLをDelphi6から呼びだしたいと思っています。 提供ファイルとしてあるのは以下のものです。 ・DLLファイル本体 ・XMLファイル 直接は呼びだせない(?)と思ったので、 VB.NETでDLLを作って間に入れて、 下のように呼び出せばいいのかなと考えています。 Delphi6で作成のEXE → VB.NETで作成のDLL(COM登録?) → 対象のDLL まずはDelphi6のEXE→VB.NETのDLLの部分を作って試してみたですが Delphi6のEXEの起動時にエラーとなってしまいます。 「アプリケーションの初期化に失敗しました」 ネットなどで調べてみて作り方は下記のようにしました。 <呼ばれる側:VB.NETのDLL> 1.COMクラスを作る。   ・COM参照可能の設定にした。 (タイプライブラリが作成され、レジストリへのCOM登録は自動でされる?) 2.作成したDLLはCドライブ直下に置いた。 ※下の*****は自動作成された固定値が入っています。  また見やすくするためここでは半角空白を全角空白に変えています。 -------------------------------------------------------------------- Imports System.Windows.Forms <ComClass(Middle_Dll.ClassId, Middle_Dll.InterfaceId, Middle_Dll.EventsId)> _ Public Class Middle_Dll #Region "COM GUID"   ' これらの GUID は、このクラスおよびその COM インターフェイスの COM ID を   ' 指定します。この値を変更すると、   ' 既存のクライアントはクラスにアクセスできなくなります。   Public Const ClassId As String   = "**************************"   Public Const InterfaceId As String = "**************************"   Public Const EventsId As String  = "**************************" #End Region   ' 作成可能な COM クラスにはパラメータなしの Public Sub New() を指定しなければ   ' なりません。これを行わないと、クラスは COM レジストリに登録されず、   ' CreateObject 経由で   ' 作成できません。   Public Sub New()     MyBase.New()   End Sub   Public Sub DispMsg()     Dim MsgRet As MsgBoxResult     MsgRet = MessageBox.Show("VB.NET DLLより表示!", "確認メッセージ", MessageBoxButtons.YesNo, MessageBoxIcon.Information)   End Sub End Class --------------------------------------------------------------------- <呼び出し側:Delphi6のEXE> 1.タイプライブラリの取り込み設定で登録したDLLを選択し、   「コンポーネントラッパーの作成」にチェックを入れてインストールを実行。 --------------------------------------------------------------------- unit Unit1; interface uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls,OleCtnrs,ComObj, OleServer; type  TForm1 = class(TForm)   Button1: TButton;   Edit1: TEdit;   procedure Button1Click(Sender: TObject);  private   { Private 宣言 }  public   { Public 宣言 }  end; var  Form1: TForm1;  //----------  //静的呼出  //----------  procedure DispMsg();Stdcall; external 'c:\Middle_Dll.dll' name 'DispMsg'; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin  //----------  //静的呼出  //----------  DispMsg(); end; end. ----------------------------------------------------------------- Delphi6のEXEはすでにあるものなので、 呼び出し元はDelphi6から変えられませんが、 呼び出し先はC#やC++でも構いません。 (1)Delphi6のEXE→VB.NETのDLLの呼び出しは可能でしょうか? (2)可能でしたら不具合と思われる箇所はどこでしょうか? (3)この方法より良いと思われる方法はありますでしょうか? DLLを作った事がないので見よう見まねで作っています。 気になる点やアドバイス程度でも構いませんので、 どうかよろしくお願いいたします。 == 開発環境 == WindowsXP SP3 Delphi6 Enterprise SP2 VisualSutudio2005 ProffesionalEdition 評価版 .NET Framework 1.1~3.5