痔になりやすい生活習慣とは?

初めまして。プログラミングを始めて1ヶ月程度の超初心者です。
開発環境はBorland C++ Builder 6 です。
ボタンやエディットボックスを含むフォームアプリケーション(フォーム:Form1)、
Button1をクリックするとファイルオープンダイアログを開き、選択されたファイル名をEdit1に表示
Button2をクリックするとファイルセーブダイアログを開き、選択されたファイル名をEdit2に表示
Button3をクリックするとEdit1で指定されたファイルを開き、演算した結果をEdit2で指定したファイルに書き込み、保存する
といったプログラムを作成しました。
これらを全て、「入力ファイル名」と「出力ファイル名」を引数とするmain関数に組み込もうとしているところで、Button1Click(Sender)などを使えばそのまま流用できるところまではわかったのですが、フォームを含め、これらのクラスのmain関数内での使い方がよくわかりません。
クラスの定義などはヘッダーファイル内でされているだけではmain関数内では使用できないのでしょうか?
定義や宣言の仕方について具体的にお教え願います。
よろしくお願いします。

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

A 回答 (2件)

最初に確認。



Windowsアプリケーションと、フォームは別のものです。
BCBでWindowsアプリケーションを作成すると、デフォルトでは、
 Project1:Windowsアプリケーション名 そのソースはProject1.cpp
 TForm1:フォーム名 そのソースはUnit1.cpp
となります。
今、コンソールアプリケーションから呼出したいのはフォームで良いのですね?
回答する方としては、呼出したいのがWindowsアプリケーションなのかフォームなのか最初からハッキリさせて欲しいわけです。

また、

>コンソールから実行したときに「ボタンを押す」、「エディットボックスに
>テキストを入れる」といった処理をさせたい

これは『コンソールアプリケーションからフォームを表示し、エンドユーザにフォーム上のボタンやエディットボックスを操作させる』という意味でしょうか?
それとも『コンソールアプリケーションがフォーム上のボタンやエディットボックスを操作する』という意味でしょうか?
回答者としては質問者の意図がどちらなのか補足の文章を読んだだけでは判断がつきません。こういうところも誤解が生じないよう明確にして欲しいわけです。

あと、質問にある引数云々はどうするのでしょうか?


このように質問の意図は未だによく分からないのですが、とりあえずコンソールアプリケーションからフォームを表示する手順。

1.コンソールアプリケーションのプロジェクトにフォームのソースを追加する。
2.コンソールアプリケーションのソースに使用するフォームのヘッダをインクルードする。
3.TForm1を呼出すとするとそのコードは、
 TForm1* form = new TForm1(0);
 form->ShowModal();
 delete form;

不明の点は補足から問い合わせてください。
その際は、できるだけ具体的かつ明確にお願いします。
    • good
    • 0

質問の意味がわかりません。


何がしたいのか具体的かつ明確に説明してください。

別に専門的な用語を使う必要はありません。自分のやりたいことを日常の言葉で、ただし自分以外の第三者でも明確に意味がわかるような表現で説明してください。

なお、
単に、「引数で指定された入力ファイルを開き演算した結果を同じく引数で指定された出力ファイルに書き込み保存する」
だけなら、そもそもフォームを作成する必要はありません。
main()関数内で引数を調べてファイルを開いて処理するだけです。
ただし、このプログラムはコンソールで実行することになりますが…。

それともコンソールアプリケーションからフォームを使いたいということなのでしょうか?

補足を願います。

この回答への補足

その通りです。フォームをせっかく完成させたので、これをそのままコンソールアプリケーションで使用するというのが目的です。コンソールから実行したときに「ボタンを押す」、「エディットボックスにテキストを入れる」といった処理をさせたいのですが、main()に書いてもクラスの定義?宣言?がうまくいかず困っています。

補足日時:2006/10/29 23:08
    • good
    • 0

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

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

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

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

QVC++のコーディングについて

VC++初心者です。
VC++のWindowsフォームアプリケーションを使用してテストプログラムを作ってみようと思っています。

初歩的な質問ですみません。
VC++でWindowsフォームアプリケーションを作成する場合、
フォームのヘッダーファイル(Form.h)にコーディングしていくものなのでしょうか?
ボタンクリック処理など、ヘッダーファイルに作成されてしまいます。

私の先入観で、cppファイルにコーディングするものだと思っていたのですが、
VC++のWindowsフォームアプリケーションとは、こういうものでしょうか?
ヘッダーファイルにコーディングするという感覚が何だか気持ち悪いです。


また、VC++を使用してWindowsアプリケーションを作る勉強がしたいのですが、
「初心者でも分かる+オススメの参考書籍」がありましたら、教えていただけると幸いです。


基本的な質問で意味不明かもしれませんが、ご回答いただけると助かります。

よろしくお願いします。

Aベストアンサー

> 私の先入観で、cppファイルにコーディングするものだと思っていたのですが、
> VC++のWindowsフォームアプリケーションとは、こういうものでしょうか?

VC++が自動的に吐くコードがC++の標準(つか規範)である「宣言はヘッダ/実装はcpp」に反しているだけです。
ヘッダ内に書かなければいけないなんてルールはどこにもありません。

> ヘッダーファイルにコーディングするという感覚が何だか気持ち悪いです。

僕も嫌いです。反吐が出ます。
なのでVC++が吐いたコードの宣言部だけ残し、実装はcppに移しています。

QcharからLPTSTRへの変換方法

リストコントロールにchar型の変数の値を数値として表示させたいのですが、charからLPTSTRへの洗練された変換方法がよくわからないです。

char tempChar;
CString tempString;
tempString.Format("%s", tempChar);
LPTSTR lpsz = new TCHAR[tempString.GetLength()+1];
_tcscpy(lpsz, tempString);

こんなプログラムを考えてみたのですが、汚いような気がします。もっと簡単で洗練された変換方法はないのでしょうか?

Aベストアンサー

wsprintfを使ってはどうでしょうか?

char tmpChar = 100;//表示する数値
TCHAR buf[5];
wsprintf(buf, "%d", tempChar);

QLPCWSTRとchar

質問なのです・・・

現在、私は[Visual Stdio.Net 2005]を使って、C++のプログラミングをしようと思いまして、今日参考書を見てやってみたのですが、

charの配列を使って、文字列を格納しそれを使おうとしたら、LPCWSTRのキャストが必要というエラーがでました。
参考書だと普通に通るらしいのですが・・・Visual Stdio.Net 2003と2005の違いなのでしょか?わかる方教えていただけませんでしょうか??

Aベストアンサー

補足です。
2005デフォルトのUNICODEを変更する方法は
プロジェクト->プロパティ->構成プロパティ->全般 の中にある
文字セットを[Unicode 文字セットを使用する]から[マルチバイト文字セットを使用する]
に変更することで可能です。

Qfatal error LNK1120: 外部参照 1 が未解決です

またわからないことが・・・
教えて下さい。
以下をVC++2005でコンパイルすると、

MSVCRTD.lib(crtexew.obj) : error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。
C:\Documents and Settings\tomato\My Documents\Visual Studio 2005\Projects\a\Debug\a.exe : fatal error LNK1120: 外部参照 1 が未解決です。

と警告がでて通りません。
何のことでしょうか。

#include<stdio.h>
#include<process.h>

struct meibo{
  char name[20];
  char tel[20];
  char address[20];
};

void message( void );
void input( FILE *fp, int cnt , struct meibo *a, int *end );

void main( void )
{
  struct meibo a[20];
  FILE *fp;
  int cnt, end;

  if( (fp=fopen( "meibo.dat", "w" ) ) == NULL ){
    printf( "Can not open the meibo.dat.\n" );
    exit( 1 );
  }

  message();

  fprintf( fp, "番号, 名前, TEL, 住所\n" );
  fflush( fp );

  cnt = 0;
  end = 0;
  while( end == 0 ){
    input( fp, cnt, &a[cnt], &end );
    cnt++;
    fflush( fp );
    if( cnt == 20 ){
      printf( "人数が一杯です.終了します.\n" );
      end = 1;
    }
  }
  fclose( fp );
}

void message( void )
{
  printf( "名前, TEL, 住所, endを入力してください.\n" );
  printf( "継続の時はend=0," );
  printf( "中止の時は,end=1と入力してください.\n" );
}

void input( FILE *fp, int cnt, struct meibo *a, int *end )
{
  printf( "名前-->" );
  scanf( "%s", a->name );
  printf( "TEL -->" );
  scanf( "%s", a->tel );
  printf( "住所-->" );
  scanf( "%s", a->address );
  printf( "Exit? Continue:0 Exit:1 -->" );
  scanf( "%d", end );
  printf( "\n" );
  fprintf( fp, "%2d, %s, %s, %s\n",
    cnt+1, a->name, a->tel, a->address );
}

またわからないことが・・・
教えて下さい。
以下をVC++2005でコンパイルすると、

MSVCRTD.lib(crtexew.obj) : error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。
C:\Documents and Settings\tomato\My Documents\Visual Studio 2005\Projects\a\Debug\a.exe : fatal error LNK1120: 外部参照 1 が未解決です。

と警告がでて通りません。
何のことでしょうか。

#include<stdio.h>
#include<process.h>

struct meibo{
  char name[20];
...続きを読む

Aベストアンサー

http://www.a.math.ryukoku.ac.jp/~hig/course/compsci2_2005/man/faq.html
にある現象と同じではないでしょうか、一度お試しください。

Q別のフォームで記述している関数を実行するには?C#

お世話になります。ド素人な質問ですみません。
C#なのですが例えばForm1で記述した関数(関数って呼ぶのかわかりませんが)をForm2で実行するにはどのようにしたらよいのでしょうか?
ネットで検索してみてもなかなかヒットしないのでこちらでお聞きします。

public partial class Form1 : Form
{
 public Form_OzzCalc()
 {
 InitializeComponent();
 }
 
 private void hoge()
 {
 ~
 }
}

このhoge()という関数を別のフォーム(例えばForm2)で呼び出して使うにはどのようにしたらよいのでしょうか?
privateをpublicに変更してもForm2ではこの関数を記述すると「'hoge'は現在のコンテキスト内に存在しません」と出ます。
何か参考になるサイトでも構いません。よろしくお願いいたします。

Aベストアンサー

この記述方法ですとForm1のインスタンス経由で関数を実行します

Form2側からですと

((Form1)Application.OpenForms["Form1"]).hoge();
といった具合です


下のように Form1クラスにスタティック(静的)関数を作成すれば
public static void foo()
{
}

Form2側からは
Form1.foo();
といった具合で実行できます

MessageBoxのShowがこの静的実装がされています

Qラジオボタンのグループ化

VC6.0の
ラジオボタンのグループ化についてですが
例えばIDC_RADIO1~IDC_RADIO6まで作ったとして
IDC_RADIO1と
IDC_RADIO4のグループにチェックをいれると
IDC_RADIO1~3と4~6が
それぞれグループになったのですが
1、2、6と3、4、5をグループにしたいときは
どうすればよいのでしょうか?

あるサイトによるとグループボックスでラジオボタンで囲むと
囲んだ部分がグループになると記述されてたのですが
それについてもうまくいかなかったのですが、教えて頂けないでしょうか?

Aベストアンサー

[レイアウト]-[タブオーダー]でタブ順を
IDC_RADIO1,2,6,3,4,5 の順で設定します。
ラジオボタンのプロパティで IDC_RADIO1 と IDC_RADIO3
の[グループ]をチェックします。またIDC_RADIO5 の後の
コントロール(何でも良い)の[グループ]もチェック
します。

>グループボックスでラジオボタン
マジっすか。

Qコンソールアプリでファイル選択ダイアログを出したい

C++Builder6 で作っているコンソールアプリがあります。
これに、ファイル選択ダイアログを出す機能を追加したいのですが
可能でしょうか?
試しに
TOpenDialog *OpenDialog1;
OpenDialog1 = new TOpenDialog; //※
deleteOpenDialog1;
というコードを書いてみましたが、※の行で
「'TOpenDialog::TOpenDialog()' に一致するものが見つからない」
というコンパイルエラーになりました。

Aベストアンサー

vcl.hをインクルードした上で、

 TOpenDialog *OpenDialog1;
 OpenDialog1 = new TOpenDialog(0);
 OpenDialog1->Execute();
 delete OpenDialog1;

でいけます。つまりTOpenDialogのコンストラクタは必ずOwner引数をとるのです。この場合はそれをNULLに設定しています。
ただ、コンソールアプリでGUIのダイアログを表示するのが妥当かどうかは考慮の余地がありそうです。
常駐アプリケーションのようにメインフォームを持たないプログラムが環境設定時などにダイアログを出すと言うなら納得できますが。

Qクラスがメンバーとしてクラスを持つ時の宣言について

自作クラスMainClassがMyClassというクラスをメンバー変数として持つ場合、宣言時に引数をいくつか持つコンストラクタを呼び出そうとすると構文エラーとなります。

class MyClass
{
public:
MyClass(int, int);
}

class MainClass
{
private:
MyClass myclass(10,10);
}


このような宣言はできないのでしょうか。
引数なしのコンストラクタは呼び出せているようです。

Aベストアンサー

クラス定義内でメンバの初期化は出来ません。
例外として static constの整数型メンバのみ初期化が認められていますが。

>引数なしのコンストラクタは呼び出せているようです。
勘違いです。
MyClassのコンストラクタが呼び出されるのはMainClassのコンストラクタ内です。

//MainClassのクラス定義
class MainClass
{
private:
 MyClass myclass;
//…
};

//MainClassのコンストラクタ定義
MainClass::MainClass() : myclass(10,10)
{
//…
}

初期設定リスト「:myclass(10,10)」を指定しなければMyClassのデフォルトコンストラクタが暗黙に呼び出されます。

なお、MyClassのコンストラクタで引数に初期値を指定しておく手もあります。

MyClass {
public:
 MyClass(int=10, int=10);
//…
};

この場合、MainClassのコンストラクタでmyclassの初期設定リストを省略しても所期の結果が得られます。
しかし、初期値を設定した場合でも初期設定を明示することをお勧めしますが。

クラス定義内でメンバの初期化は出来ません。
例外として static constの整数型メンバのみ初期化が認められていますが。

>引数なしのコンストラクタは呼び出せているようです。
勘違いです。
MyClassのコンストラクタが呼び出されるのはMainClassのコンストラクタ内です。

//MainClassのクラス定義
class MainClass
{
private:
 MyClass myclass;
//…
};

//MainClassのコンストラクタ定義
MainClass::MainClass() : myclass(10,10)
{
//…
}

初期設定リスト「:myclass(10,10)」を指定し...続きを読む

Q複数ファイルで使うグローバル変数の位置

メイン関数の処理で、関数A→関数B→関数Cという順序で関数が呼び出される場合(1関数1ファイルとします)、関数A,B,Cすべてで使用するグローバル変数の宣言を関数Bのファイルでおこなって、他のファイルではそれをexternするというのでも問題ないでしょうか?

Aベストアンサー

問題ありません。
が、しかし、そのような方法は、実務レベルの場合は、行いません。
以下のような方法をとります。

ファイル名:xxx_ext.c
変数のみを宣言したファイル。

ファイル名:xxx_ext.h
上記の変数のみを宣言したしものをexternで参照するファイル。

ファイル名:func_a.c
関数Aのファイル。
このファイルで、#include xxx_ext.h する

ファイル名:func_b.c
関数Bのファイル。
このファイルで、#include xxx_ext.h する

ファイル名:func_c.c
関数Cのファイル。
このファイルで、#include xxx_ext.h する

上記のようにすることで、externで参照する変数が1つのファイル内に閉じこめられるのでメンテナンス性がよくなります。たとえば、ある理由があって、変数Xの型をintからdoubleに変えることを想定してください。
xxx_ext.c とxxx_ext.hの2つのファイルのみが変更対象
となります。
上記のようにしない場合は、3つのファイル(あるいはそれ以上)を変えることになります。

問題ありません。
が、しかし、そのような方法は、実務レベルの場合は、行いません。
以下のような方法をとります。

ファイル名:xxx_ext.c
変数のみを宣言したファイル。

ファイル名:xxx_ext.h
上記の変数のみを宣言したしものをexternで参照するファイル。

ファイル名:func_a.c
関数Aのファイル。
このファイルで、#include xxx_ext.h する

ファイル名:func_b.c
関数Bのファイル。
このファイルで、#include xxx_ext.h する

ファイル名:func_c.c
関数Cのファイル。
このファイル...続きを読む

QWordで、1ページを丸ごと削除するには?

1ページしか必要ないのに、真っ白な2ページ目がその下に表示されてしまった場合、この余分な2ページ目を一括削除(消去)する為に、何かいい方法があるでしょうか?

Aベストアンサー

<表示されてしまった場合>
これはそれなりに理由があるわけで、改ページや改行によって、次のページにまで入力が及んでいる時にそうなります。
特に罫線で表を作成し、ページの下一杯まで罫線を引いたときなどには、よくなる現象です。

さて、メニューの「表示」で段落記号にチェックが入っていないと、改行や改ページなどの入力情報が見えず、白紙のページを全て選択→削除してもそのままということが良くあります。
1 改行マークが白紙のページの先頭に入っていれば、それをBackSpaceで消してやる。
2 罫線を使っている場合は、それでも効果がない場合がありますが、その時は行数を増やしてやる。
などの方法があります。


人気Q&Aランキング