C Builder相談室 Part3
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG過去スレ・関連サイトは>>2-5あたり。
007873
NGNGDelphiだと 単に exit するだけだから、 こういう処理スタイルでいいんだけど
C++とcライブラリの組み合わせで __finally って案外と使い難いですね。
・・・だから最初からfinallyが導入されなかったのかな
007975
NGNGたしかにC++だと__finallyよりauto_ptr等のように
スタックの巻き戻しでやるのが一般的かな。
とりあえず>>73のコードは return mem; を __finally の外に
書けば Warning は消えそうな気がする。
コンパイラの警告が __finally に完全対応していないのかな?
008073
NGNG__finally の下に return 0; 書いたら 警告はきえたし、ちゃんと動いた。
ありがとう。
cのライブラリだけだから例外が起きる可能性は無いと思うんだけど、そこまでは
コンパイラは判らないんだろうね
008173
NGNGたしかにコッチの方が __finally よりスッキリするみたい
long *getBin(char *fname)
{long *mem=0;
struct DFILE{
FILE *fp;
DFILE(char *n) {fp=fopen(n,"rb");};
~DFILE(){ if(fp){fclose(fp); };}
}f(fname);
if( 0!=fseek(f.fp, 0, SEEK_END ) ) return 0;
long size=ftell(f.fp);
size=(size+3) &(-4);
if( 0!=fseek(f.fp, 0, SEEK_SET ) ) return 0;
mem =(long *) malloc( size );
fread(mem,size/4,4,f.fp);
return mem;
}
0082デフォルトの名無しさん
NGNGで、2次元配列をソートする方法ってありませんか?
0083デフォルトの名無しさん
NGNG0084デフォルトの名無しさん
NGNGどのようなソートを望むのだ。
008582
NGNGn番目のiをソートキーとして、行単位にソートしたいです。
0086Delフサギコ ◆zE1iiRdQ
NGNG〜′,,,,,,,ミ,,゚Д゚彡< できると思いまフ>>83
UU""" U U \_______________
とりあえず
TCuteMemoを利用するなり
0087デフォルトの名無しさん
NGNGfseekの前にfpのNULLチェックしないの?
それと余計なセミコロンは癖ですか?
0088デフォルトの名無しさん
NGNG0089通り掛かり
NGNGこんなのでいかがですか。
void __fastcall TForm1::FormPaint(TObject *Sender)
{
char bmih[sizeof(BITMAPINFOHEADER)+4*256];
unsigned char Pixels[256][(256+3)/4*4];
BITMAPINFOHEADER *lpbi=(BITMAPINFOHEADER *)bmih;
lpbi->biSize=sizeof(BITMAPINFOHEADER);
lpbi->biWidth=256;
lpbi->biHeight=256;
lpbi->biPlanes=1;
lpbi->biBitCount=8;
lpbi->biCompression=0;
lpbi->biSizeImage=256*256;
lpbi->biXPelsPerMeter=0;
lpbi->biYPelsPerMeter=0;
lpbi->biClrUsed=0;
lpbi->biClrImportant=0;
RGBQUAD *lpQuad=((LPBITMAPINFO)bmih)->bmiColors;
for (int i=0;i<256;i++)
{
lpQuad[i].rgbRed =(unsigned char) i;
lpQuad[i].rgbGreen =(unsigned char) i;
lpQuad[i].rgbBlue =(unsigned char) i;
lpQuad[i].rgbReserved =0;
}
for(int i=0;i<256;i++)
{
for(int j=0;j<256;j++)
{
Pixels[i][j]=(unsigned char)j;
}
}
SetDIBitsToDevice(Canvas->Handle,0,0,256,256,0,0,0,256,Pixels,(LPBITMAPINFO)lpbi,DIB_RGB_COLORS);
}
0090デフォルトの名無しさん
NGNG{
AnsiString test = "abc";
return test;
}
main()
{
AnsiString str;
str = testfunc();;
}
というようにやった時strは元のtestがスコープ外に出てしまっているので
中身が不定になる可能性があるのでしょうか?
それともかならずstrの中身はabcになるのでしょうか?
0091デフォルトの名無しさん
NGNG大丈夫。だと思う。
VCLのソースをみた訳じゃないからなんとも言えないけど、
常識的な文字列クラスなら普通大丈夫。
0092デフォルトの名無しさん
NGNGどうやればいいの?
0093デフォルトの名無しさん
NGNG常識的な文字列クラスなので、大丈夫。
0094デフォルトの名無しさん
NGNG行と列が逆なら簡単なんだけど、それじゃだめ?
0097デフォルトの名無しさん
NGNG0098デフォルトの名無しさん
NGNGできますか?
009994
NGNGコンパイラ通してなから間違いがあるかも知れないけど…。
typedef std::vector<AnsiString> StrVec;
class compare_by_nth : public std::binary_function<const StrVec&, const StrVec&, bool>
{
int i_;
public:
compare_by_nth(int i) : i_(i) {}
bool operator<(const StrVec& a, const StrVec& b) const {return a[i_] < b[i_];}
};
std::vector<StrVec> mat;
// mat...
std::sort(mat/begin(), mat.end(), compare_by_nth(1));
詳しいことはSTLスレで聞いて。
0100デフォルトの名無しさん
NGNGこれでは一次元のvectorのソートじゃない?質問は二次元のvectorだった
ような気がするけど。
0101デフォルトの名無しさん
NGNGマウスクリックを感知できませんか?
0103デフォルトの名無しさん
NGNGなるほど。std::vector<StrVec>という所で既に二次元になっているわけか。
ファンクタ作る所なんか、C言語のqsortを彷彿とさせますね。
0104デフォルトの名無しさん
NGNG<で比較すると、単純なバイトレベルでの比較となるそうだからOKじゃない?
ロケールまで入れるとAnsiCompareを使用。ほとんど意味無し。
0105デフォルトの名無しさん
NGNG0106デフォルトの名無しさん
NGNG交互に表示するには、どうすれば良いでしょうか?
0107デフォルトの名無しさん
NGNGCppWebBrowserにNavigateメソッドでアニメーションGIFを読み込ませるw
色々方法があるから何とも言えん。
0108デフォルトの名無しさん
NGNG0111デフォルトの名無しさん
NGNGアクションマネージャーの使い方がよくわかりません。
アクションマネージャーで作成したアクションの
プロパティを変更したい場合、どうやって指定したらいいのだろう・・・。
その方法か、参考になるページがあれば教えてください。
よろしくお願いします。
0112デフォルトの名無しさん
NGNG出力される exe のファイル名を設定するには
どうすればいいですか?
.bpr をメモ帳で開いて
<PROJECT value="ここ.exe"/>
を書き換える以外の方法で、おながいします。
0113デフォルトの名無しさん
NGNGプロジェクト名を変える。
0114106
NGNGすでに指摘された欠点もありますし、
ファイル内にうまく組み込めなかったので、
何か他の方法を教えて頂けないでしょうか?
どうにかして、1秒おきに2枚の画像を
切り替えて表示する動作を実現したいのですが、
そのような方法をどなたかご教授ください。
0115デフォルトの名無しさん
NGNG2個のImageを重ねて置いて、1秒おきにVisibleをtrueにしたりfalseにしたりする。
0117デフォルトの名無しさん
NGNG0118デフォルトの名無しさん
NGNG★BCB★
(σ´ー`)σ
0119デフォルトの名無しさん
NGNGcharのフィールドにNULLを登録するのはどうするの?
以下のやり方だと0が入るのですが
TQuery *sql;
(省略)
sql->SQL->Text = "INSERT INTO TBL ( FLD) VALUES ( :DAT)"
sql->Params->ParamByName( "DAT")->AsString = NULL;
sql->ExecSQL();
0121デフォルトの名無しさん
NGNG0122デフォルトの名無しさん
NGNG「VALUES ( :DAT)」って、これでいいのかなぁ?
0123無責任だが
NGNGなにせ問合せでパラメータは使うけど挿入でそんな事した事ないや。
BDE なら sql->Insert();して sql->Fields を使うのがなんと言っても簡単だし
0124119
NGNGおぉ、行けました。
Clear();だけなら型がわからんから指定しとけってことだったのかぁ
さんきゅです
0125デフォルトの名無しさん
NGNG言いえて妙。
"INSERT INTO TBL ( FLD) VALUES ( :DAT)" なんて
文字列で SQL文を書いてしまうと、
せっかくのコンパイラのチェック機能がスルーされてしまうし。
…ってことかな?
ヽ(;´Д`)ノ アレ ?
( ____ )
@== > = >==
0126デフォルトの名無しさん
NGNGMS-DOSプロンプトで結果が表示された後すぐにウィンドウが閉じてしまうのですが、
閉じないようにするにはどうしたらいいのでしょうか?
MS-DOSのプロパティで「プログラム終了時にウィンドウを閉じる」のチェックは
はずしてみましたが駄目でした。
0127デフォルトの名無しさん
NGNG#include <conio.h>
int main()
{
...
...
getch();
return 0;
}
0128デフォルトの名無しさん
NGNG#include <cstdlib>
using namespace std;
int main()
{
..
..
system("pause");
}
0129デフォルトの名無しさん
NGNGint main()
{
...
...
while(1)
;
}
0130デフォルトの名無しさん
NGNG(?∀?)ドレ?
0131デフォルトの名無しさん
NGNG0132デフォルトの名無しさん
NGNGどれ、おいちゃんがageといてやろう。
0133デフォルトの名無しさん
NGNG何も書かなくても450kbか。
0135デフォルトの名無しさん
NGNG>>126-130
漏れは、DOS窓を起動してから
ProjectHoge.exe [Enter] していますが、何か?
標準出力に何かを出力するアプリケーションなら、
リダイレクトしてファイルに採っておけばよいし。
0136デフォルトの名無しさん
NGNG出来ました。
ありがとうございます。
0137Ð ë á t h ¹³
NGNGstruct TValue
{
int Value1;
int Value2;
};
asm
{
MOV [ESI+.Value1],EAX //○
MOV [(TValue PTR ESI).Value1],EAX //×
}
STRUC〜ENDSで構造体を定義すると×の行もエラーは出ないのですが、
そうするとC++のほうで、その構造体が使えなくなります。
○の方法だとオペランドサイズのチェックをしてくれないので
どうしても×のようにチェックしてくれる方法を使いたいんですが、
何か方法(×の行のエラーの出ない書き方とか)はないでしょうか。
0138無責任だが
NGNGそういうふうにしたい場合は、H2ASH (使い方はTSM_UTIL.TXTに )で構造体を変換して
それをインクルートするのが普通じゃないかな
MOV [ESI+.Value1],EAX のような使い方だと、それはBCC32でコンパイルされると
MOV [ESI+0],EAX になってしまう
0139Ð ë á t h ¹³
NGNGありがとうございます。そんなのがあったんですね。
なぜかうちのBCBにはH2ASHが無い・・・CDにも入ってない・・・。
バージョン古いからかな。
> MOV [ESI+0],EAX になってしまう
そう、これで困ってました。即値になるだけで修飾はされないんですよね。
WEBでTSM_UTIL.TXT見るとH2ASHを使えば解決できそうですが、
無いものは仕方無いので、夜になったら(テレホなので(*´д`) )
フリーのBC++ダウンロードして入ってないか調べてみます。
0140デフォルトの名無しさん
NGNGBCCはTASM自体が入ってないよ。
0142Ð ë á t h ¹³
NGNGH2ASHと同じ事を手作業でやるという最終手段を使うしかないかな。
>>140 テレホタイムを浪費するところでした。ありがとうございます。
>>141 TASM単体に付いてくるということなんですね。
BCBのTASMと一緒に付けて欲しかったスBorlandサン。
0143無責任だが
NGNG構造体メンバがバイトなのか16bitなのかとかが反映されないから嫌なんでしょ?
でもそれをインラインアセンブラで書こうというのが無理やりのように思う
あとで間違えないようにという事なら assert で サイズチェックを入れておいたら?
0144デフォルトの名無しさん
NGNGフリーで落とせるペーヅ教えてくださレ」。
0145Ð ë á t h ¹³
NGNG例えば
FLD DWord ptr [ESI+.Value] を、
FLD [(TValue PTR ESI).Value],
とできると、Valueがfloatからdoubleに変更になってもコードは変更しなくて済みますよね。
修飾してる場合は、全て修正しなくてはなりませんし、修正忘れが1つでもあるとバグになります。
こういう変更が時々あって、構造体もアセンブリコードもマグナムサイズなものですから、
楽でバグを出しにくい書き方のほうを使いたかったのです。
結局自前でstructと同じ構造のSTRUC〜ENDSを作ることになりそうですが。(*´д`)
0146デフォルトの名無しさん
NGNG過去ログ読んでて、気になって仕方がないんですが、
なんでOKなん?
char *型 "ABC"
AnsiString型 ローカル変数 testが動的確保した"ABC"
AnsiString型 戻り値が動的確保した"ABC"(testのコピー)
の3種類作られるけど、関数抜けた時点では最初の2つしか開放されないから?
そんなの実装次第じゃん、厨房な俺に教えてくれ〜
BCCとあまり関係なくてスマソ
0147無責任だが
NGNGうーん x86に限ってはBCCもそれほど目立って効率の悪いコードを
出す訳じゃないのと、特に浮動小数点コードを使うとその演算に隠
れてしまうので、その手の構造体の絡んだコードをアセンブラで書
こうとした事はありません
まあ自前で struct 変換ルーチンを作るのが簡単かも
0148無責任だが
NGNG実装次第だから、その実装をそれでOKなように作っているという事では?
int testfunc()
{
int test = 0xabcd;
return test;
}
なら 大丈夫なので、それと同じように使えるように AnsiStringクラスを作ったという事でしょう
それから、文字列クラスはもう一つ作られている筈です。
それは>>90のtestfuncの返値の隠れた文字列クラスです。
このコンストラクタは関数の呼び出し直前に呼ばれて、関数が帰って代入動作をすると消えます。
0149デフォルトの名無しさん
NGNG実行中、同時に音楽や動画を再生しても途切れなく再生できます。
自作のプログラムが固有するCPUの割合は調整できないのでしょうか?
0150デフォルトの名無しさん
NGNG動作が遅いといっても、他に何も同時実行させてなければ、CPUをフルに使えるはずだが。
他のプロセスやスレッドと同時実行させてて、そっちよりも優先的にCPUを使いたいってことなら、
SetThreadPriority や SetPriorityClass を使えばよろし。
0151デフォルトの名無しさん
NGNG解説サンキュー
必ず基本型と同じ感覚で使えるように作ってるってわけですか
(自分で作るとき、そこまで考慮してないけどなぁ)
C++の文法は大体わかったつもりだけど、このへんの暗黙のルールとか
ライブラリとかは、まだまだ理解不足だねぇ
頭の中はC言語とアセンブラのまんま〜
>それから、文字列クラスはもう一つ作られている筈です。
>それは>>90のtestfuncの返値の隠れた文字列クラスです。
>>146の3つ目がそのつもりだったんだけど書き方が悪かったね
0152デフォルトの名無しさん
NGNG0153デフォルトの名無しさん
NGNGEDITコンポを2つ配置し"A"を名前"B"を読み仮名とします。
ユーザーが"A"に名前を漢字で入力すると"B"に読みが半角カナで仮表示
(ユーザーが修正可能)されるというものを作りたいのですが、どのよう
にしたら良いかわかりません。
"B"に何か別なコンポーネントを使えばよいのでしょうか?
アドバイスやここを見れと言うのでもかまわないのでご教示
お願いいたします。
0154デフォルトの名無しさん
NGNGDelの例ですが
ttp://www2.big.or.jp/~osamu/Delphi/Tips/key.cgi?key=25#0201.txt
に、そのままがありまっせ。
0155デフォルトの名無しさん
NGNG図1)のように、画面を分割したいのですが、縦分割は簡単にできたのですが、B領域とC領域の横分割がうまくできません。
TSplitterにて、AとBCの分割は、Align=alLeft、Left=分割位置、にて簡単にOKだったのですが、
BとCの分割を行おうとして、Align=alTop、Top=分割位置とすると図2のようになってしまいます。
Align=alTopを指定すると、Topの値は無視されるようです。
図1)
AAAAAAAA|BBBBBBBBB
AAAAAAAA|BBBBBBBBB
AAAAAAAA|BBBBBBBBB
AAAAAAAA|------------
AAAAAAAA|CCCCCCCCC
AAAAAAAA|CCCCCCCCC
AAAAAAAA|CCCCCCCCC
図2)
BBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBB
-----------------------
AAAAAAAA|CCCCCCCCC
AAAAAAAA|CCCCCCCCC
AAAAAAAA|CCCCCCCCC
AAAAAAAA|CCCCCCCCC
画面を縦に分割して、その分割した右側を横に分割する方法をアドバイスお願いします。
0156デフォルトの名無しさん
NGNG0157155
NGNGありがとうございます。できました。
TPanelにTSplitterを入れることができるのですね。
VCの考え方と全然違うのでとてもとまどってしまいました。
MFCの、CSplitterWndに相当するものを必死で探してしまいました(汗)。
0158デフォルトの名無しさん
NGNGこないだの漏れと同じだ(笑)
・AをAlign=alLeftで作る
・Aの右にスピリッタ入れる
・BC領域にあたる部分にパネルを張る
・Bをalign=alTopでパネル上に作る
・Bの下、パネル上にスピリッタを入れる
・Cをalign=alClientで作る
パネルはBevelOuter=bvNoneにすると吉
0159.
NGNGTEditを並べてVK_RETURNで次のEDITへ
SetFocusしてます。
そのとき、ポーンとBEEP音がなりうるさいのですが
なんとかならないでしょうか?
一行テキストですから本来入力できない リターンがくると
警告音がなるには当然ですが・・・
0160デフォルトの名無しさん
NGNGいちいち読み込んでいて、埒があきません
0161デフォルトの名無しさん
NGNG0162デフォルトの名無しさん
NGNGを有効にして生ソケットを扱ってみたのですが、
sendto で WSAError の 10049 が発生します。
VC6 では問題なく実行できました。
何か原因考えられないですか?
0163デフォルトの名無しさん
NGNG試してないけどOnKeyDownで
if(Key == VK_RETURN)
Key = NULL;
0164.
NGNG試してみましたがダメでした。
0165無責任だが
NGNGDelphiの場合、そういう場合はAbort例外を投げるんだけど
if Key=#13 then begin
Edit2.SetFocus;
Abort;
end;
Builderでも同じじゃないかな?
0166デフォルトの名無しさん
NGNGOnKeyPressでは駄目かな。とりあえずどちらかで出来たよ。
0167デフォルトの名無しさん
NGNGKey = NULL;
0168.
NGNGOnKeyPressでAbortで出来ました
0169デフォルトの名無しさん
NGNG0170デフォルトの名無しさん
NGNGと言われるのですが、どうしたらいいのでしょうか?
windows.h はインクルードしていますが、VCL関連のヘッダは
インクルードしていません。
0171デフォルトの名無しさん
NGNG0172170
NGNGあります。
\CBuilder\Lib\Objフォルダにあります。
プロジェクトオプションのライブラリパスでも通っています。
ファイル名は Sysutils.res と小文字ですが、関係無いですよね・・・。
0173デフォルトの名無しさん
NGNG0174170
NGNG*.makファイルをいじったのがいけなかったようです。
0175デフォルトの名無しさん
NGNG0176デフォルトの名無しさん
NGNG0177デフォルトの名無しさん
NGNGつまんねーよ、カス
■ このスレッドは過去ログ倉庫に格納されています