トップページ⇒tech
990コメント312KB

C++Builder相談室 Part19

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2008/08/01(金) 16:30:32
C++Builderに関する質問・回答や議論等を行う相談室スレッド。
※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
>>695
ソートじゃきっとまずいだろ
ちゃんと逆順になめなきゃ

「表示する」ってんだから
保存は不要だろうけど

ファイル読みの排他処理も気になるが
まあ、ときどきチェックして
変化分だけ先頭に追加表示かな
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
0698デフォルトの名無しさん2009/07/09(木) 16:35:20
>>695
ぶひっ

>>696
>>697
ありがとう
本当に助かりました。
0699デフォルトの名無しさん2009/07/09(木) 16:36:26
っと思いましたが、もう一点いいですか?
0700デフォルトの名無しさん2009/07/09(木) 16:40:13
テキストファイル
      ---------------
      |       |
常に    |       |   常に
書き込み-> |       |  <-読み込み
      |       |
      |       |
      ---------------

を行うわけですが、問題ないですか?
問題がある場合は、みなさんはどのように対応していますか?
0701デフォルトの名無しさん2009/07/09(木) 16:42:09
↑
おうっ!壊れた。
初心者ですので勘弁してください。

ひとつのログファイルに常に書き込むプログラムと常に読み込むプログラムが
いるけど大丈夫ですか?
0702デフォルトの名無しさん2009/07/09(木) 17:54:29
そういう場合はRDBを使います。
無料のものならFirebird。
0703デフォルトの名無しさん2009/07/09(木) 18:00:28
テキストファイルで読み書きする仕様なんだ・・・
どうすれば良い○| ̄|_
0704デフォルトの名無しさん2009/07/09(木) 18:14:53
CreateFileでググる
07056962009/07/09(木) 18:19:17
>>702
ただのログファイルの表示に
それはないだろ

>>701
書き込み側のプログラムは
既存のものなのか?
書き直しはできるのか?

あーあ、現実逃避中
0706デフォルトの名無しさん2009/07/09(木) 18:23:30
>>704
グググってみる

>>705
書き込み側のプログラムも新規作成します。
何か良い案がありますか。
0707デフォルトの名無しさん2009/07/09(木) 22:09:30
内部的にStringListを持ってログの生成閲覧はそいつを起点にする
テキストファイルはログの保存だけに使う
0708デフォルトの名無しさん2009/07/09(木) 22:22:01
そのテキストって新しい行を追加し続けるだけ?
一定数行を越えると古いものを削除したりするの?

二つのプロセスが一つのファイルいじるならミューテクスとかで排他制御するといいよ。
0709デフォルトの名無しさん2009/07/10(金) 02:11:20
ファイル入出力は、オープン時にちゃんと排他制御の機能がある訳だが。
07106962009/07/10(金) 09:19:48
>>706
どうしてふたつのプログラムにするのかわからんが
要はプログラム間通信ということだな。

簡単には、書き込みファイルの存在をフラグとして
読み込み側で読んだら消すというハンドシェイクをする。
必要なら読み込み側で別ファイルに保存する。
もちろん、書き込み側はログを遅延書き込みできなきゃダメだが。

>>709
それももちろん必要だが、それだけで解決できないよね。
0711デフォルトの名無しさん2009/07/10(金) 12:27:28
>>710
簡単に解決できるだろ。
0712デフォルトの名無しさん2009/07/10(金) 13:53:26
>>711
リトライするってこと?
0713デフォルトの名無しさん2009/07/10(金) 18:05:17
書き込み側は、FILE_SHARE_READ指定
読み込み側は、FILE_SHARE_WRITE指定
で問題なく読み書きできるだろ。
0714デフォルトの名無しさん2009/07/10(金) 22:46:12
>>713
その設定でオープンしたまま処理するの?
タイミングによっては、どこまでが読めてくるのか
心配なのだが・・・

691さん、実験してみて
0715デフォルトの名無しさん2009/07/12(日) 20:23:17
BCB5の『開発者ガイド』やヘルプファイルを1日や2日読んだだけでは
何の成果も得られません。
それでも、何ヶ月も毎日読み続けてたら、Windowsプログラムを作れるように
なりますか。
それとも、ニートになって毎日起きてる時間の全部を、その学習に費やして
10年という歳月を掛けても、無理ですか。
0716デフォルトの名無しさん2009/07/12(日) 21:06:48
知識というのは使ってこそ覚えられるもの
読み続ける、学習を続けるだけでは一生無理

何が言いたいかというととにかくまずプログラムを書け
動くものを作れ
簡単なものから徐々にレベルアップしていけばいい
実践のなかで知識の本質を理解しろ
0717デフォルトの名無しさん2009/07/12(日) 21:58:18
何もわからん奴に
とにかく作れと云っても無理ぽ
何もわからんのだから。
一番の近道は、ソースを読むこと。
評判のいいソース、あるいは自分が作りたいプログラムに近いものの
ソースを読み、実際にコンパイルして動かして動作を確認する。
そして、ちょっとだけプログラムを変更してみて
自分の思った通りに動くかどうかを確認する。
まあ、こんなところからやってみるのが現実的であろう。

0718デフォルトの名無しさん2009/07/13(月) 19:25:54
>>707 - 717
みんなアドバイスありがとう
ログもDBで管理するようになりました。
いいのかな???まぁいいや。

BCB5でのDBアクセスの方法等を調査しなくては...。
0719デフォルトの名無しさん2009/07/13(月) 20:51:06
>>718
BCBは基本的に殆どのライブラリをVCLに頼っているから
Delphiの参考書があればほとんどそのまま移植できる
0720デフォルトの名無しさん2009/07/14(火) 09:32:38
まあ C++ の皮をかぶせた Delphi だからな。
できないのは class of に相当する定義だけじゃない?
0721デフォルトの名無しさん2009/07/14(火) 09:53:42
>BCB5

.pasファイルをそのままプロジェクトに組み込めるw

Delphiで作成したクラスは、実体宣言できなくて、”ポインタ宣言&new”というのが最大の制限。
0722デフォルトの名無しさん2009/07/14(火) 10:30:21
しかしなぜか AnsiString だけは実体宣言するという。
0723デフォルトの名無しさん2009/07/14(火) 10:33:54
Delphiではクラスじゃないから
0724デフォルトの名無しさん2009/07/14(火) 11:21:28
そう、だるふぃのソースを移植する必要さえない。
pasソースをBuilderのプロジェクトにぶちこめばいい。
0725デフォルトの名無しさん2009/07/14(火) 17:31:18
OpenJaneのソースをBCB5でコンパイルできないんだが・・・
0726デフォルトの名無しさん2009/07/14(火) 21:10:08
はぁーー。
先週から常連になってきたペーペーです。
新たな問題が発生しました・・・。助けてください。

2台のPCが存在します。
各PCには共有フォルダと作業用フォルダを持っています。

PC1からPC2へ何か要求を行う場合、PC2の共有フォルダに要求が入力された
ファイルが置かれます。

各PCは自分の共有フォルダをポーリングしていて、ファイルを発見した場合
そのファイルを作業フォルダに移動させます。(要求の処理は他の人の担当です)
(コピー後削除? 切り取りはできますか?)

上記の動作をexeを起動したら自動的にスレッドを起こして、その中で行う
みたいです。

まず、スレッドって何?から話が始まって、とりあえずそこはなんとなく理解
できました。
しかし、スレッドの起こす方法や、起動時に自動ってどうやって??
で詰まっています。

要は、何もわからない状況です。助けてください。
周りにC++できる人が一人もいないのです・・・。
DBアクセスもできていなのに・・・。泣きたい。
0727デフォルトの名無しさん2009/07/14(火) 21:13:58
なんかIndyのHTTPサーバコンポとかでやった方が手っ取り早いような
0728デフォルトの名無しさん2009/07/14(火) 22:22:20
>726
その腐った仕様は誰がどうやって決めたんだ?排他処理は?スレッドの必要性は?
とそんなことをそいつにちゃんと考えさせろ。

スレッドはTThreadを派生させて作る。
0729デフォルトの名無しさん2009/07/14(火) 23:22:25
>>726
お前にはまだ早い
0730デフォルトの名無しさん2009/07/14(火) 23:35:35
スレッドの意味が間違っている様な悪寒
0731デフォルトの名無しさん2009/07/14(火) 23:42:46
プログラミングの勉強課題じゃねえの?w
実用的とは考えにくいなー
0732デフォルトの名無しさん2009/07/15(水) 05:04:17
スレッドの初歩として
セマフォー or CriticalSectionの概念を理解させるために
問題を単純化して、ファイルで制御させる目的で
どっかの田舎の専門学校が学生に出した課題
って感じだな。
0733デフォルトの名無しさん2009/07/15(水) 09:58:57
いやいや>>726の文句を言ってる連中は無知としか言いようがないなあ
たしかに>>726はプログラムの知識は文句言ってる貴様らと大差はないが
実際に運用するときはこんな使い方をするところもある
0734デフォルトの名無しさん2009/07/15(水) 10:09:32
>>731-732
説明が悪いので勘違いされたかもしれませんが
勉強課題ではないんです。

自分の担当分以外は全く理解できていませんが、
これが一番良い方法らしいです。

>>733
ありがとう
少し落ちこんでいました。

>>729
の言うと通り、技術的にまだ未熟ですので皆さんに助けを
お願いしたいのです。
0735デフォルトの名無しさん2009/07/15(水) 10:22:57
>>733
発言力はあるが、知識のない奴が
たくさんいるからな
0736デフォルトの名無しさん2009/07/15(水) 10:31:23
>>726
タイマーでやるよりはスッドレの方が好みだな。
同期に関して、Windows のセマフォは実装に問題があるから、
使うときは良く考えた方がいい。大抵はミューテックスか
クリティカルセクションで事足りるけど。

とりあえず思いついたことだけ。
要点もまとめられないほどわかってないやつをこのような場所で
サポートするのは至難だと思うな。
0737デフォルトの名無しさん2009/07/15(水) 10:33:00
とりあえずここは口だけのクズが多い
0738デフォルトの名無しさん2009/07/15(水) 16:32:17
同意だが、普遍的過ぎるぞ。
その「ここ」には「地球」すら違和感なく入る。
0739デフォルトの名無しさん2009/07/16(木) 15:54:51
【緊急】
誰かBCB5でのSetTimer,KillTimerの使い方おしえて
0740デフォルトの名無しさん2009/07/16(木) 16:38:40
急いでいるので早く教えて
0741デフォルトの名無しさん2009/07/16(木) 16:41:00
>>740
コラ
偽者め
お前が教えろ
0742デフォルトの名無しさん2009/07/16(木) 16:42:28
TTimerではダメなのか?
0743デフォルトの名無しさん2009/07/16(木) 16:43:31
>>>742
知らんなら黙ってろカス

知ってる人早く教えてください
詳しく
0744デフォルトの名無しさん2009/07/16(木) 17:12:42
SetTimer(うんちゃら)
KillTimer(なんちゃら)
知らんけど。
0745デフォルトの名無しさん2009/07/16(木) 17:22:18
>>744
早く調べて教えろボケ
0746デフォルトの名無しさん2009/07/16(木) 17:24:56
ttp://wisdom.sakura.ne.jp/system/winapi/win32/win47.html
0747デフォルトの名無しさん2009/07/16(木) 17:55:55
>>746
長すぎて読む気がしないからまとめろ無能
0748デフォルトの名無しさん2009/07/16(木) 18:24:52
>>746
いつまで待たせる気だ
無能め
0749デフォルトの名無しさん2009/07/16(木) 18:31:53
まとめ:
ttp://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:32
ただしこれだとstaticだから、Timer1より使いにくいこと請け合い。
SetPropとか使ってthisを渡すとかすんのかな・・・めんどくさ
0752デフォルトの名無しさん2009/07/28(火) 16:39:00
TImageに24ビットカラーのビットマップを読み込んで
それをそのまま>PixelFormat = pf8bitにして
Image->Canvas->Pixelsで1ピクセルずつ読んで白黒変換して
ScanLineにぶち込んだら表示がカラーのままで変になるのですが
読み込んだビットマップを0〜255階調の白黒にする方法を教えてください
0753デフォルトの名無しさん2009/07/28(火) 18:20:37
>>752
パレットを自分でつくって割り当てろ
0754デフォルトの名無しさん2009/07/28(火) 18:38:52
マジかよめんどくせーよ
他にやりかたあんだろ?
0755デフォルトの名無しさん2009/07/28(火) 18:41:59
知っているけどお前の態度が気に入らない
0756デフォルトの名無しさん2009/07/28(火) 18:44:44
RGB 白黒 変換でググる
0757デフォルトの名無しさん2009/07/28(火) 18:44:55
>>752
void __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:55
>>757
24ビットカラーを白黒化する計算は知っているのでパレットを使わずにやりたかったんだが
普通にPixelsから読んだ色をそのまま白黒化してまたPixelsに入れればできました。
ソースありがとう
0759デフォルトの名無しさん2009/07/29(水) 16:22:24
>24ビットカラーを白黒化する計算
気になるけどたぶん、単純にR、G、Bを足して3で割って平均値をTColor(RGB(R,B,G))とかしていれてるんでしょ?
0760デフォルトの名無しさん2009/07/29(水) 16:27:07
>>759
めんどくせー奴だなしかし
白黒化計算でぐぐれ馬鹿
二度とくだらねーレスすんじゃねーぞゴミが
0761デフォルトの名無しさん2009/07/31(金) 10:30:47
指定したMDI子フォームをアクティブにする方法を教えてください
0762デフォルトの名無しさん2009/07/31(金) 11:03:54
>>761
WM_MDIACTIVATE
0763デフォルトの名無しさん2009/07/31(金) 11:38:30
>>762
フォームのメソッドとかはないですか?
0764デフォルトの名無しさん2009/07/31(金) 21:27:21
Altキーを押しながらエンターキーを押すと、
ビープ音が鳴るが、これを止める方法は無いのかな?
エクセルでセル内で改行を入れるとき、
Alt+Enterで行うが、これに似た処理を作成したいので。
0765デフォルトの名無しさん2009/07/31(金) 23:57:06
>763
単にその子フォーム.Show;じゃだめ?
0766デフォルトの名無しさん2009/08/01(土) 01:53:57
若干使い方が変わるかもしれないけどこういうのがあった。

> Previous メソッドは,フォームシーケンス内の前の MDI の子フォームをアクティブフォームにします。

> void __fastcall Previous(void);
0767デフォルトの名無しさん2009/08/01(土) 07:41:19
C++Builder4を使ってますが、外部プログラム(例えばメモ帳)を起動させるにはどうすればいいですか?
0768デフォルトの名無しさん2009/08/01(土) 10:15:30
ShellExecute
0769デフォルトの名無しさん2009/08/01(土) 10:45:58
>>767
ShellExecuteEx
0770デフォルトの名無しさん2009/08/01(土) 12:40:36
System
0771デフォルトの名無しさん2009/08/01(土) 14:00:53
後ろにExつけて改良バージョンを示すのはどこの風習?
MS?

俺Ex
0772デフォルトの名無しさん2009/08/01(土) 14:02:20
OSを作った会社とは別の会社がプログラム開発のソフト作れるってすごいな。
linuxのようにソースを公開してないOSなのにこんな製品を作れるとは。
0773デフォルトの名無しさん2009/08/01(土) 20:45:26
未公開APIをM$に金払って教えてもらってるんかね
0774デフォルトの名無しさん2009/08/02(日) 01:59:45
なにを言ってるんだろうこの人たちは・・・
0775デフォルトの名無しさん2009/08/02(日) 20:45:05
ShellExecuteはコンパイルエラー出ると思ったら、shellapi.hが必要なのね
ヘルプに書いてないからわかんないよ

どうもありがとうございました
0776デフォルトの名無しさん2009/08/03(月) 10:26:58
>>765
うはwwwwwww
灯台アレだったwww
Showでサックリおkだった
>>766
それやNextは知ってたんですが、アクティブにするだけだから
メソッド一発でできそうな気がしてたんですねよ
0777デフォルトの名無しさん2009/08/03(月) 13:45:56
BCB5でいいリファクタリングツール?みたいな物ありますか?
どの関数がどれくらい呼び出されているかを知りたいのですが。
0778デフォルトの名無しさん2009/08/03(月) 19:54:36
こんなの?
ttp://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
779です。

//===================================
//ファイルから暗号化画像ファイルを読み込む
//===================================
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->

}
07817772009/08/04(火) 19:53:53
>>778
やっぱり有料か英語のものしかなさそうなんですね。
ありがとう。
0782デフォルトの名無しさん2009/08/04(火) 23:23:34
>>779
復号時にメモリストリームに書き込んで、そのメモリストリームから
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:21
追加努力。やはりわかりません。
bmp->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
>>784
メモリストリームに書き込んだ後、Positionを先頭に戻さないとダメなんじゃない?
0786デフォルトの名無しさん2009/08/06(木) 06:45:55
うまくいきました。
基礎的なことを教えていただき、
ありがとうございました。
0787デフォルトの名無しさん2009/08/06(木) 18:23:40
2chにUnicodeを投稿するプログラムを作っています

C++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:28
スレ乱立ソフト?
0789デフォルトの名無しさん2009/08/06(木) 18:48:50
いえ違います
他の国の文字を&#xxxxx;という形に一括変換するソフトを
作っているのですが・・・
0790デフォルトの名無しさん2009/08/08(土) 12:33:51
BCB6しか持ってないからUnicodeString≒WideStringとして考えるけど
2バイトキャラなのでchar形に変換するのまずい。
あと oparator [] が使えると思うのでシンプルにこれでどうだろう?

s = ustr.SubString(i, 2);
Edit2->Text += AnsiString().sprintf("\&#%I16u%I16u;", s[0], s[1]);
0791デフォルトの名無しさん2009/08/08(土) 17:32:54
>>790
レスありがとうございます
C++Builder2009なのでUnicodeStringを持っているので
それで何とかならないかと思っていたのですが・・・

おっしゃる通りAnsiString一本でやろうとしたらERangeError
が出ます
0792デフォルトの名無しさん2009/08/08(土) 18:04:29
>>787
>+ 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:40
>>787
UnicodeString 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
>>793
うまく行きました。ありがとうございました。

>>792
そうですね。でも0、1にしてもだめなんです。
0795デフォルトの名無しさん2009/08/09(日) 20:41:33
Visual Studio .NET 2003とC++Builder 5の双方を、同じ電子計算機上入れると、
双方をIDEデバッグ実行を両立できないな。
他人はその辺どうしてんだ。
■ このスレッドは過去ログ倉庫に格納されています