C++Builder相談室 Part19
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2008/08/01(金) 16:30:32※2008/07よりCodeGear(Borland IDE/DB部門)はBorlandからEmbarcaderoに移動しました
【前スレ】
C++Builder相談室 Part18
http://pc11.2ch.net/test/read.cgi/tech/1188607282/
過去スレ・関連サイトは>>2-7あたり。
※Borland C++ Compiler 5.5.1についての質問は以下のスレへ
タダで使えるBorland C++ Part5
http://pc11.2ch.net/test/read.cgi/tech/1135127048/
※BDS(Borland Developer Studio)の総合スレはこちら
Borland Developer Studio 2006 No.13
http://pc11.2ch.net/test/read.cgi/tech/1175861395/
※CodeGear(Borland/Embarcadero)関連はこちら
【CodeGear】Embarcaderoオッチャ その10
http://pc11.2ch.net/test/read.cgi/tech/1216250111/
<関連スレ>
くだすれC++Builder(超初心者用)その3
http://pc11.2ch.net/test/read.cgi/tech/1171219191/
[Tips]Borland C++Builder ちょいテク No.01
http://pc11.2ch.net/test/read.cgi/tech/1154580209/
【Delphi】 Indyコンポーネント 【C++Builder】
http://pc8.2ch.net/test/read.cgi/tech/1093654251/
0696デフォルトの名無しさん
2009/07/09(木) 16:12:53ソートじゃきっとまずいだろ
ちゃんと逆順になめなきゃ
「表示する」ってんだから
保存は不要だろうけど
ファイル読みの排他処理も気になるが
まあ、ときどきチェックして
変化分だけ先頭に追加表示かな
0697デフォルトの名無しさん
2009/07/09(木) 16:32:52>>696
TStringListのソートじゃアレだとおもったからソースはかかなかった。
自分で逆からぐるぐるやればアレ。
表示だけなら
TStringList *sl = new TStringList( );
sl->LoadFromFile( "元ファイル" );
for( int i = sl->Count - 1; i>= 0; i -- ){
Memo1->Lines->Add( sl->Strings[i] );
}
delete sl;
これでいいんじゃね?
これはTMemoに書いてるがそこを変えればおk
0699デフォルトの名無しさん
2009/07/09(木) 16:36:260700デフォルトの名無しさん
2009/07/09(木) 16:40:13---------------
| |
常に | | 常に
書き込み-> | | <-読み込み
| |
| |
---------------
を行うわけですが、問題ないですか?
問題がある場合は、みなさんはどのように対応していますか?
0701デフォルトの名無しさん
2009/07/09(木) 16:42:09おうっ!壊れた。
初心者ですので勘弁してください。
ひとつのログファイルに常に書き込むプログラムと常に読み込むプログラムが
いるけど大丈夫ですか?
0702デフォルトの名無しさん
2009/07/09(木) 17:54:29無料のものならFirebird。
0703デフォルトの名無しさん
2009/07/09(木) 18:00:28どうすれば良い○| ̄|_
0704デフォルトの名無しさん
2009/07/09(木) 18:14:530705696
2009/07/09(木) 18:19:17ただのログファイルの表示に
それはないだろ
>>701
書き込み側のプログラムは
既存のものなのか?
書き直しはできるのか?
あーあ、現実逃避中
0707デフォルトの名無しさん
2009/07/09(木) 22:09:30テキストファイルはログの保存だけに使う
0708デフォルトの名無しさん
2009/07/09(木) 22:22:01一定数行を越えると古いものを削除したりするの?
二つのプロセスが一つのファイルいじるならミューテクスとかで排他制御するといいよ。
0709デフォルトの名無しさん
2009/07/10(金) 02:11:200710696
2009/07/10(金) 09:19:48どうしてふたつのプログラムにするのかわからんが
要はプログラム間通信ということだな。
簡単には、書き込みファイルの存在をフラグとして
読み込み側で読んだら消すというハンドシェイクをする。
必要なら読み込み側で別ファイルに保存する。
もちろん、書き込み側はログを遅延書き込みできなきゃダメだが。
>>709
それももちろん必要だが、それだけで解決できないよね。
0711デフォルトの名無しさん
2009/07/10(金) 12:27:28簡単に解決できるだろ。
0712デフォルトの名無しさん
2009/07/10(金) 13:53:26リトライするってこと?
0713デフォルトの名無しさん
2009/07/10(金) 18:05:17読み込み側は、FILE_SHARE_WRITE指定
で問題なく読み書きできるだろ。
0714デフォルトの名無しさん
2009/07/10(金) 22:46:12その設定でオープンしたまま処理するの?
タイミングによっては、どこまでが読めてくるのか
心配なのだが・・・
691さん、実験してみて
0715デフォルトの名無しさん
2009/07/12(日) 20:23:17何の成果も得られません。
それでも、何ヶ月も毎日読み続けてたら、Windowsプログラムを作れるように
なりますか。
それとも、ニートになって毎日起きてる時間の全部を、その学習に費やして
10年という歳月を掛けても、無理ですか。
0716デフォルトの名無しさん
2009/07/12(日) 21:06:48読み続ける、学習を続けるだけでは一生無理
何が言いたいかというととにかくまずプログラムを書け
動くものを作れ
簡単なものから徐々にレベルアップしていけばいい
実践のなかで知識の本質を理解しろ
0717デフォルトの名無しさん
2009/07/12(日) 21:58:18とにかく作れと云っても無理ぽ
何もわからんのだから。
一番の近道は、ソースを読むこと。
評判のいいソース、あるいは自分が作りたいプログラムに近いものの
ソースを読み、実際にコンパイルして動かして動作を確認する。
そして、ちょっとだけプログラムを変更してみて
自分の思った通りに動くかどうかを確認する。
まあ、こんなところからやってみるのが現実的であろう。
0718デフォルトの名無しさん
2009/07/13(月) 19:25:54みんなアドバイスありがとう
ログもDBで管理するようになりました。
いいのかな???まぁいいや。
BCB5でのDBアクセスの方法等を調査しなくては...。
0719デフォルトの名無しさん
2009/07/13(月) 20:51:06BCBは基本的に殆どのライブラリをVCLに頼っているから
Delphiの参考書があればほとんどそのまま移植できる
0720デフォルトの名無しさん
2009/07/14(火) 09:32:38できないのは class of に相当する定義だけじゃない?
0721デフォルトの名無しさん
2009/07/14(火) 09:53:42.pasファイルをそのままプロジェクトに組み込めるw
Delphiで作成したクラスは、実体宣言できなくて、”ポインタ宣言&new”というのが最大の制限。
0722デフォルトの名無しさん
2009/07/14(火) 10:30:210723デフォルトの名無しさん
2009/07/14(火) 10:33:540724デフォルトの名無しさん
2009/07/14(火) 11:21:28pasソースをBuilderのプロジェクトにぶちこめばいい。
0725デフォルトの名無しさん
2009/07/14(火) 17:31:180726デフォルトの名無しさん
2009/07/14(火) 21:10:08先週から常連になってきたペーペーです。
新たな問題が発生しました・・・。助けてください。
2台のPCが存在します。
各PCには共有フォルダと作業用フォルダを持っています。
PC1からPC2へ何か要求を行う場合、PC2の共有フォルダに要求が入力された
ファイルが置かれます。
各PCは自分の共有フォルダをポーリングしていて、ファイルを発見した場合
そのファイルを作業フォルダに移動させます。(要求の処理は他の人の担当です)
(コピー後削除? 切り取りはできますか?)
上記の動作をexeを起動したら自動的にスレッドを起こして、その中で行う
みたいです。
まず、スレッドって何?から話が始まって、とりあえずそこはなんとなく理解
できました。
しかし、スレッドの起こす方法や、起動時に自動ってどうやって??
で詰まっています。
要は、何もわからない状況です。助けてください。
周りにC++できる人が一人もいないのです・・・。
DBアクセスもできていなのに・・・。泣きたい。
0727デフォルトの名無しさん
2009/07/14(火) 21:13:580728デフォルトの名無しさん
2009/07/14(火) 22:22:20その腐った仕様は誰がどうやって決めたんだ?排他処理は?スレッドの必要性は?
とそんなことをそいつにちゃんと考えさせろ。
スレッドはTThreadを派生させて作る。
0729デフォルトの名無しさん
2009/07/14(火) 23:22:25お前にはまだ早い
0730デフォルトの名無しさん
2009/07/14(火) 23:35:350731デフォルトの名無しさん
2009/07/14(火) 23:42:46実用的とは考えにくいなー
0732デフォルトの名無しさん
2009/07/15(水) 05:04:17セマフォー or CriticalSectionの概念を理解させるために
問題を単純化して、ファイルで制御させる目的で
どっかの田舎の専門学校が学生に出した課題
って感じだな。
0733デフォルトの名無しさん
2009/07/15(水) 09:58:57たしかに>>726はプログラムの知識は文句言ってる貴様らと大差はないが
実際に運用するときはこんな使い方をするところもある
0734デフォルトの名無しさん
2009/07/15(水) 10:09:32説明が悪いので勘違いされたかもしれませんが
勉強課題ではないんです。
自分の担当分以外は全く理解できていませんが、
これが一番良い方法らしいです。
>>733
ありがとう
少し落ちこんでいました。
>>729
の言うと通り、技術的にまだ未熟ですので皆さんに助けを
お願いしたいのです。
0735デフォルトの名無しさん
2009/07/15(水) 10:22:57発言力はあるが、知識のない奴が
たくさんいるからな
0736デフォルトの名無しさん
2009/07/15(水) 10:31:23タイマーでやるよりはスッドレの方が好みだな。
同期に関して、Windows のセマフォは実装に問題があるから、
使うときは良く考えた方がいい。大抵はミューテックスか
クリティカルセクションで事足りるけど。
とりあえず思いついたことだけ。
要点もまとめられないほどわかってないやつをこのような場所で
サポートするのは至難だと思うな。
0737デフォルトの名無しさん
2009/07/15(水) 10:33:000738デフォルトの名無しさん
2009/07/15(水) 16:32:17その「ここ」には「地球」すら違和感なく入る。
0739デフォルトの名無しさん
2009/07/16(木) 15:54:51誰かBCB5でのSetTimer,KillTimerの使い方おしえて
0740デフォルトの名無しさん
2009/07/16(木) 16:38:400741デフォルトの名無しさん
2009/07/16(木) 16:41:00コラ
偽者め
お前が教えろ
0742デフォルトの名無しさん
2009/07/16(木) 16:42:280743デフォルトの名無しさん
2009/07/16(木) 16:43:31知らんなら黙ってろカス
知ってる人早く教えてください
詳しく
0744デフォルトの名無しさん
2009/07/16(木) 17:12:42KillTimer(なんちゃら)
知らんけど。
0745デフォルトの名無しさん
2009/07/16(木) 17:22:18早く調べて教えろボケ
0746デフォルトの名無しさん
2009/07/16(木) 17:24:560747デフォルトの名無しさん
2009/07/16(木) 17:55:55長すぎて読む気がしないからまとめろ無能
0748デフォルトの名無しさん
2009/07/16(木) 18:24:52いつまで待たせる気だ
無能め
0749デフォルトの名無しさん
2009/07/16(木) 18:31:53ttp://oshiete1.goo.ne.jp/qa3499000.html?ans_count_asc=20
0750デフォルトの名無しさん
2009/07/18(土) 09:04:36********* unit1.h のTFormのpublicに追加
public: // ユーザー宣言
UINT_PTR myEvent;
static int CALLBACK MyTimerProc(HWND hWnd, UINT uMsg, UINT_PTR nIDEvent, DWORD dwTime);
********* unit1.cpp
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
myEvent = NULL;
SetTimer(this->Handle, myEvent, 1000, (TIMERPROC)MyTimerProc);
}
//---------------------------------------------------------------------------
int CALLBACK TForm1::MyTimerProc(HWND hWnd, UINT uMsg, UINT_PTR nIDEvent, DWORD dwTime)
{
Form1->Caption = AnsiString(rand() % 100); //適当にキャプション変えてみる
return 0;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
KillTimer(this->Handle, myEvent);
}
//---------------------------------------------------------------------------
0751デフォルトの名無しさん
2009/07/18(土) 09:08:32SetPropとか使ってthisを渡すとかすんのかな・・・めんどくさ
0752デフォルトの名無しさん
2009/07/28(火) 16:39:00それをそのまま>PixelFormat = pf8bitにして
Image->Canvas->Pixelsで1ピクセルずつ読んで白黒変換して
ScanLineにぶち込んだら表示がカラーのままで変になるのですが
読み込んだビットマップを0〜255階調の白黒にする方法を教えてください
0753デフォルトの名無しさん
2009/07/28(火) 18:20:37パレットを自分でつくって割り当てろ
0754デフォルトの名無しさん
2009/07/28(火) 18:38:52他にやりかたあんだろ?
0755デフォルトの名無しさん
2009/07/28(火) 18:41:590756デフォルトの名無しさん
2009/07/28(火) 18:44:440757デフォルトの名無しさん
2009/07/28(火) 18:44:55void __fastcall TForm1::Button1Click(TObject *Sender)
{
Graphics::TBitmap *bmp = new Graphics::TBitmap(); //同じサイズの8bitTBitmapを作成
bmp->PixelFormat= pf8bit;
bmp->Width = Image1->Picture->Bitmap->Width;
bmp->Height = Image1->Picture->Bitmap->Height;
//グレイスケールパレット作成
struct {
WORD palVersion;
WORD palNumEntries;
PALETTEENTRY palent[256];
} LOGPAL;
LOGPAL.palVersion = 0x300;
LOGPAL.palNumEntries = 256;
for (int i=0; i<256; i++) {
LOGPAL.palent[i].peRed = (BYTE)i;
LOGPAL.palent[i].peGreen = (BYTE)i;
LOGPAL.palent[i].peBlue = (BYTE)i;
LOGPAL.palent[i].peFlags = 0;
}
bmp->Palette = CreatePalette((LOGPALETTE*)&LOGPAL); //グレイスケールのパレットにする
// 元の画像から1ピクセルずつ読んで近似パレットで1ピクセルずつ描画
for(int y=0;y<Image1->Picture->Bitmap->Height;y++) for(int x=0;x<Image1->Picture->Bitmap->Width;x++){
((BYTE*)bmp->ScanLine[y])[x] = GetNearestPaletteIndex(bmp->Palette, (COLORREF)Image1->Canvas->Pixels[x][y]);
}
Image2->Picture->Assign(bmp);
delete bmp;
}
0758デフォルトの名無しさん
2009/07/29(水) 10:24:5524ビットカラーを白黒化する計算は知っているのでパレットを使わずにやりたかったんだが
普通にPixelsから読んだ色をそのまま白黒化してまたPixelsに入れればできました。
ソースありがとう
0759デフォルトの名無しさん
2009/07/29(水) 16:22:24気になるけどたぶん、単純にR、G、Bを足して3で割って平均値をTColor(RGB(R,B,G))とかしていれてるんでしょ?
0760デフォルトの名無しさん
2009/07/29(水) 16:27:07めんどくせー奴だなしかし
白黒化計算でぐぐれ馬鹿
二度とくだらねーレスすんじゃねーぞゴミが
0761デフォルトの名無しさん
2009/07/31(金) 10:30:470762デフォルトの名無しさん
2009/07/31(金) 11:03:54WM_MDIACTIVATE
0763デフォルトの名無しさん
2009/07/31(金) 11:38:30フォームのメソッドとかはないですか?
0764デフォルトの名無しさん
2009/07/31(金) 21:27:21ビープ音が鳴るが、これを止める方法は無いのかな?
エクセルでセル内で改行を入れるとき、
Alt+Enterで行うが、これに似た処理を作成したいので。
0765デフォルトの名無しさん
2009/07/31(金) 23:57:06単にその子フォーム.Show;じゃだめ?
0766デフォルトの名無しさん
2009/08/01(土) 01:53:57> Previous メソッドは,フォームシーケンス内の前の MDI の子フォームをアクティブフォームにします。
> void __fastcall Previous(void);
0767デフォルトの名無しさん
2009/08/01(土) 07:41:190768デフォルトの名無しさん
2009/08/01(土) 10:15:300769デフォルトの名無しさん
2009/08/01(土) 10:45:58ShellExecuteEx
0770デフォルトの名無しさん
2009/08/01(土) 12:40:360771デフォルトの名無しさん
2009/08/01(土) 14:00:53MS?
俺Ex
0772デフォルトの名無しさん
2009/08/01(土) 14:02:20linuxのようにソースを公開してないOSなのにこんな製品を作れるとは。
0773デフォルトの名無しさん
2009/08/01(土) 20:45:260774デフォルトの名無しさん
2009/08/02(日) 01:59:450775デフォルトの名無しさん
2009/08/02(日) 20:45:05ヘルプに書いてないからわかんないよ
どうもありがとうございました
0776デフォルトの名無しさん
2009/08/03(月) 10:26:58うはwwwwwww
灯台アレだったwww
Showでサックリおkだった
>>766
それやNextは知ってたんですが、アクティブにするだけだから
メソッド一発でできそうな気がしてたんですねよ
0777デフォルトの名無しさん
2009/08/03(月) 13:45:56どの関数がどれくらい呼び出されているかを知りたいのですが。
0778デフォルトの名無しさん
2009/08/03(月) 19:54:36ttp://www.lw-tech.com/
0779デフォルトの名無しさん
2009/08/04(火) 13:09:03画像の取り扱い方がよくわからず、ヒントを教えていただけないでしょうか?
環境 ビスタ bcb2007
jpgファイルを読み込み、一部暗号化しファイル生成。
暗号化ファイルを読み込み、jpgファイルを生成。
解読jpgファイルをTimageに表示させることができました。
目標は、
暗号化ファイルをjpgファイルを書き込みせず、
デコードしたcharをjpgファイルを生成せずに、
Timageに表示させたいと考えています。
(解読ファイルの生成を抑える。高速化)
参考
tp://www.c3.club.kyutech.ac.jp/gamewiki/index.php?%B0%C5%B9%E6%B2%BD%A4%B7%A4%E8%A4%A6
簡単かもしれませんが、教えてください。
0780デフォルトの名無しさん
2009/08/04(火) 13:11:24//===================================
//ファイルから暗号化画像ファイルを読み込む
//===================================
if (FileOpenDialog1->Execute() == true) {
char *pcInFileName = FileOpenDialog1->FileName.c_str();
FILE *fp = fopen(pcInFileName,"rb");
fseek(fp,0,SEEK_END);
int iSize = ftell(fp);
char *pcInBuffer = new char[iSize];
fseek(fp,0,SEEK_SET);
fread(pcInBuffer,sizeof(char),iSize,fp);
fclose(fp);
//====================================
//解読
//====================================
char *pcOutBuffer = new char[iSize];
// fp = fopen(acOutFileName,"wb");
Decode(pcInBuffer,pcOutBuffer,iSize); //解読
// fwrite(pcOutBuffer,sizeof(char),iSize,fp);
// fclose(fp);
//====================================
//解読のcharをImageに書き込み
//====================================
imgMain->
}
0782デフォルトの名無しさん
2009/08/04(火) 23:23:34復号時にメモリストリームに書き込んで、そのメモリストリームから
JPEG読み込めばいいんじゃない?
0783デフォルトの名無しさん
2009/08/05(水) 20:16:42お手上げです。
???の部分がよくわかりません。
//ファイルからRead
if (OpenDialog1->Execute() == true) {
char *pcInFileName = OpenDialog1->FileName.c_str();
FILE *fp = fopen(pcInFileName,"rb");
fseek(fp,0,SEEK_END);
int iSize = ftell(fp);
char *pcInBuffer = new char[iSize];
fseek(fp,0,SEEK_SET);
fread(pcInBuffer,sizeof(char),iSize,fp);
fclose(fp);
char *pcOutBuffer = new char[iSize];
Decode(pcInBuffer,pcOutBuffer,iSize); //解読
TMemoryStream *ms = new TMemoryStream;
//ストリームのポジションを移動
ms->Position = 0;
//ストリームの中身を書き換え
ms->Write(pcOutBuffer, iSize);
//解除ファイルを表示する。
imgMain->Picture->LoadFromStream(ms); //???
delete ms;
}
0784デフォルトの名無しさん
2009/08/05(水) 22:18:21bmp->Assign(jpeg); //ビットマップに変換。
この部分で、JPEGエラー #42がでます。
画像は編集しなくてもいいので、jpegを直接imageに焼きつけられたらいいんですが。
imgMain->Canvas->Draw(0, 0,jpeg);
char *pcOutBuffer = new char[iSize];
Decode(pcInBuffer,pcOutBuffer,iSize); //解読
TMemoryStream *ms = new TMemoryStream;
//ストリームのポジションを移動
ms->Position = 0;
//ストリームに書き込み
ms->Write(pcOutBuffer, iSize);
/*
Graphics::TBitmap *bm =new Graphics::TBitmap;
bm->LoadFromStream (ms);
*/
TJPEGImage* jpeg= new TJPEGImage;
jpeg->LoadFromStream(ms);
Graphics::TBitmap* bmp= new Graphics::TBitmap;
bmp->Assign(jpeg); //ビットマップに変換。
imgMain->Canvas->Draw(0, 0, bmp);
delete ms;
delete jpeg;
delete bmp;
0785デフォルトの名無しさん
2009/08/06(木) 00:32:17メモリストリームに書き込んだ後、Positionを先頭に戻さないとダメなんじゃない?
0786デフォルトの名無しさん
2009/08/06(木) 06:45:55基礎的なことを教えていただき、
ありがとうございました。
0787デフォルトの名無しさん
2009/08/06(木) 18:23:40C++Builder2009なのですが、UnicodeStringとかBytesOf()を
使ってもなぜかうまく行きません
何が悪いのでしょうか
(全部&#2;とか&#3;とかになります)
UnicodeString ustr = Edit1->Text, s;
Edit3->Text = ustr.Length();
for (int i = 1; i <= ustr.Length(); i++) {
s = ustr.SubString(i, 2);
Edit2->Text = Edit2->Text + AnsiString("")
+ AnsiString().printf("%u", static_cast<unsigned>(((char*)s.data())[2])) + " "
+ AnsiString().printf("%u", static_cast<unsigned>(((char*)s.data())[1])) + " "
+ AnsiString(";");
}
0788デフォルトの名無しさん
2009/08/06(木) 18:42:280789デフォルトの名無しさん
2009/08/06(木) 18:48:50他の国の文字を&#xxxxx;という形に一括変換するソフトを
作っているのですが・・・
0790デフォルトの名無しさん
2009/08/08(土) 12:33:512バイトキャラなのでchar形に変換するのまずい。
あと oparator [] が使えると思うのでシンプルにこれでどうだろう?
s = ustr.SubString(i, 2);
Edit2->Text += AnsiString().sprintf("\%I16u%I16u;", s[0], s[1]);
0791デフォルトの名無しさん
2009/08/08(土) 17:32:54レスありがとうございます
C++Builder2009なのでUnicodeStringを持っているので
それで何とかならないかと思っていたのですが・・・
おっしゃる通りAnsiString一本でやろうとしたらERangeError
が出ます
0792デフォルトの名無しさん
2009/08/08(土) 18:04:29>+ AnsiString().printf("%u", static_cast<unsigned>(((char*)s.data())[2])) + " "
>+ AnsiString().printf("%u", static_cast<unsigned>(((char*)s.data())[1])) + " "
ここのインデックス 0、1 じゃねーの?
0793デフォルトの名無しさん
2009/08/08(土) 18:47:40UnicodeString s = …
UnicodeString u;
for (int i = 1; i <= s.Length(); ++i)
{
u += "" + IntToStr(static_cast<int>(s[i])) + ";";
}
Edit1->Text = u;
0794デフォルトの名無しさん
2009/08/09(日) 11:31:54うまく行きました。ありがとうございました。
>>792
そうですね。でも0、1にしてもだめなんです。
0795デフォルトの名無しさん
2009/08/09(日) 20:41:33双方をIDEデバッグ実行を両立できないな。
他人はその辺どうしてんだ。
■ このスレッドは過去ログ倉庫に格納されています