くだすれC++Builder( ..
481:デフォルトの名無しさん
08/04/15 22:42:20
型のチェックが厳密になってるから
曖昧な表現はすべて確定的表現にしないとダメよ
482:デフォルトの名無しさん
08/04/16 02:50:01
475です。
>>479>>480>>481
質問の仕方が悪くてごめんなさい。
このエラーで困ってたのは
私(とnewsgroupで質問してた人)の関係者なのですが、解決したとのことです。
詳しい事は聞いてないのですが
エラーが出る直前にコンパイル中のCPPに#include <string>を追加したら通ったそうです。
どうもありがとうございました。
483:デフォルトの名無しさん
08/04/17 15:48:42
>482
関係者なんですね?わかります。
ともあれnewsgroupにもなんか書いておいたほうがいいと思いますよ。
484:デフォルトの名無しさん
08/04/18 18:28:24
批判されたら他人のせいにするのは、ゆとりの常套手段。
485:デフォルトの名無しさん
08/04/28 15:47:08
初心者ですが質問させてください。
特殊フォルダを取得したいためSHGetSpecialFolderPath()を使いたいのですが、
定義されていないというエラーが出ます。
#include <shlobj.h>を先頭に挿入すると、さらに大量のエラーが出ます。
どうすれば、よいのでしょうか。
この系統の方法以外で特殊フォルダのパス名を取得する方法はありますか?
486:デフォルトの名無しさん
08/04/28 16:46:18
とりあえず、質問するときにはBuilderのバージョンを書いてね。
それが礼儀っちゅうもん。
#include "shlobj.h"するには、
NO_WIN32_LEAN_AND_MEAN を追加しなければ、二重定義エラーがでる。
設定方法は、Builderのバージョンによりちょいと異なる。
487:デフォルトの名無しさん
08/04/28 23:09:59
>>486 様
すみません、これから気をつけます。
バージョンに関してですが、Turbo C++です。
無料に引きつけられて勉強を始めましたが、国民機時代のTurbo君とは
名前だけが同じだけで後は全く別物でした。(汗)
Turbo C++をもう少し使ってみて、ものになりそうでしたら製品版の
Builderを買おうと思っています。
本題につきまして、
NO_WIN32_LEAN_AND_MEAN を#defineしましたら、問題なく動きました。
本当にありがとうございました。
今後も調べても分からないことを質問させて頂きますのでよろしく
お願いいたします。
488:デフォルトの名無しさん
08/04/28 23:19:36
>>487
こっちのTurbo君などはいかが?
URLリンク(dn.codegear.com)
ちなみに新TurboのExplorerエディションはコンポーネントの追加が出来ない以外はほぼProfessionalと同等の機能持ってた気がする。
ちなみに自作や他作コンポーネントはRAD環境で使えないだけでソース上でnewすればExplorerでも使える。
489:デフォルトの名無しさん
08/05/01 22:57:30
C++Builder6.0で、VBのMidBみたいに指定した場所の文字を抜き出すにはどうやったらいいのでしょうか?
ググったらBuilder3で、専用の関数を作ったりしてましたが・・・6.0でも簡単にはできないのでしょうか?
490:489
08/05/01 23:21:32
あ、文字は半角のみで全角は扱いません
491:デフォルトの名無しさん
08/05/02 00:20:10
文字を?c_str/dataで。文字列を?Copyで。
492:489
08/05/02 00:36:04
ああっ、AnsiStringのSubStringとかで出来たんですね
すいませんでした&ありがとうございました
493:デフォルトの名無しさん
08/05/02 00:44:32
別にAnsiString使わなくても::strncpy(dest, src + 先頭オフセット, 抜き出す長さ);でいいじゃない。
494:デフォルトの名無しさん
08/05/02 02:59:51
AnsiStringがずっと便利じゃん。
バッファとか考えなくてイイ。
495:デフォルトの名無しさん
08/05/02 08:06:11
速度を取るか簡便性を取るかは自由
496:デフォルトの名無しさん
08/05/07 13:17:55
TStringGrid を継承したクラスを作ろうとしたら、「型名が必要」というエラーがでてしまいました。
新規作成→アプリケーション から、ヘッダファイルでとりあえず、classの宣言をしただけなんですが
「Unit1.h」
:
#include <Forms.hpp>
//---------------------------------------------------------------------------
typedef class TMyStringGrid : public TStringGrid
{ // ← ここんとこで 「[C++ エラー] Unit1.h(12): E2303 型名が必要」 と怒られます
private:
public:
__fastcall TMyStringGrid(TComponent* Owner);
}TMyStringGrid;
//---------------------------------------------------------------------------
class TForm1 : public TForm
:
「TStringGrid」 を「TForm」や「TCheckBox」に変更すれば、問題なくコンパイルされるので
「タイプミスか?」と何度もチェックしてみたのですが、、、
環境は
BCB6pro、cb6_upd4_pro修正パッチ適用済、WinXP pro SP2
です。ご指導の程、よろしくお願いいたします <(_ _)>
497:デフォルトの名無しさん
08/05/07 13:28:29
>>496
まずはVCLリファレンスの読み方でも勉強しようか
TStringGrid
ユニット Grids
結論から言うと宣言されてない型から継承したクラスをどうやって作るのかと。
498:496
08/05/07 13:33:21
すんません、自己解決しました。
#include <Grids.hpp>
これが必要だったみたいです (^^;;;;
ども、お騒がせでした
499:496
08/05/07 13:36:14
>>497
あ、すいません、前後してしまいました
いや、なんかそこらへんのクラスに必要なヘッダってのは最初っから
インクルードされてるもんだと思ってました (^^;;;;
ありがとうございました <(_ _)>
500:デフォルトの名無しさん
08/05/07 13:38:16
>>499
パレットからフォームにコンポーネント置けば勝手にヘッダファイルが追加されるけど、ソース上でのみ宣言だと手動でヘッダincludeしないとダメだお
ついでにtypedefはいらん気もするけど。
501:496
08/05/07 14:09:51
>>500
なるほど、そういう仕組みでしたか。
typedef しとかないと、宣言のときに一々 class xxxx って
頭にclassをつけなきゃいけなくなると思っていたのですが、
あれ?typedef しなくても、「 class 」って記述抜きで通っちゃいました
なんでだろう????
色々とありがとうございました <(_ _)>
502:デフォルトの名無しさん
08/05/08 10:21:49
そして、ドナドナ
503:デフォルトの名無しさん
08/05/09 06:35:46
unixのソースをPC上に移植したいと考えています。
・別階層に同名のファイルやフォルダって作れますか?(
・一気にサブフォルダを含めてプロジェクトに作成する事はできますか?
(一つずつ、フォルダを掘って作成しないといけませんか?ドロップできなくて..)
504:デフォルトの名無しさん
08/05/09 17:04:01
コンポーネントのアンインストール方法
コンポーネントを試作中なのですが
コンポーネントをインストールした状態でのテストをしてみたいと考えています。
(オブジェクトインスペクタがどんな感じになるかとか。。。)
ということで
1.テストコンポーネントのインストール
2.コンポーネントのテスト
3.テストコンポーネントのアンインストール
4.コンポーネントの手直し
という手順を繰り返したいのですが
3.をどうやってやったらよいのかがわかりません
bcb6proです。
ご指導の程よろしくお願いします <(_ _)>
505:デフォルトの名無しさん
08/05/09 17:12:20
パッケージのインストールのダイアログで該当パッケージのチェックボックスを外すでいいんじゃないの?
てかアンインストールしなくてもテスト>手直し>コンポのビルド>インストールで問題ない。
506:504
08/05/09 17:55:26
>>505
なるほど!それでやってみます
ありがとうございました <(_ _)>
507:デフォルトの名無しさん
08/05/09 18:08:30
複数のフォームで同一の関数を使うにはどうしたらよいのでしょうか?
ヘッダファイルのpublicに入れるだけではダメですよね?
ソフトはBCB6.0Proです。
よろしくお願いします。
508:デフォルトの名無しさん
08/05/09 18:35:37
入門書嫁としか
509:507
08/05/10 00:51:44
調べたところ、以下の本が良い、とのことで注文してみましたが・・・載っていますでしょうか?
田舎なので本屋に置いてないので、見てから買うことが出来ないため、来るまでわからないんです。
URLリンク(www.amazon.co.jp)
%E5%AE%9F%E8%B7%B5%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%80%88Vol-2%E3%80%89%E5%AE%9F%E8%B7%B5%E3%83%86%E3%82%AF%E3%8
3%8B%E3%83%83%E3%82%AF%E7%B7%A8-%E7%94%B0%E4%B8%AD-%E5%92%8C%E6%98%8E/dp/4877830626/ref=sr_1_22?ie=UTF8&s=books&qid=1210348178&sr=1-22
510:デフォルトの名無しさん
08/05/10 13:26:42
とりあえず関数の宣言が書いてあるヘッダファイルを
全部のフォームのソースにインクルードしときゃいいんじゃね?
511:デフォルトの名無しさん
08/05/10 13:59:05
派生コンポーネントでのプロパティのオーバーライド
アクセッサの再利用について。
bcb6.0pro / WinXP SP2 pro
例えば、TEdit を継承して TMyEdit というコンポーネントを作成し、
そこで、BorderStyle プロパティをオーバーライドして
BorderStyle を変更するときに、サイズも一緒に変化させるようにしたい場合、
新規の writeアクセッサ の中で従来のアクセッサを再利用することは出来ないもんでしょうか?
つまり
// QMyEdit.h
//---------------------------------------------------------------------------
class PACKAGE TMyEdit : public TEdit
{
private:
void __fastcall SetMyBorderStyle(TBorderStyle BorderStyle);
// Myアクセッサ宣言
TBorderStyle FBorderStyle; // ここで再宣言?しないと
// 「'FBorderStyle' は 'TMyEdit' のメンバーではない」 と怒られる
protected:
public:
__fastcall TMyEdit(TComponent* Owner);
__published:
__property TBorderStyle BorderStyle = // プロパティオーバーライド
{read=FBorderStyle,
write=SetMyBorderStyle, // ←ここのwriteを拡張したい
default=bsSingle};
};
//---------------------------------------------------------------------------
512:デフォルトの名無しさん
08/05/10 14:01:05
// QMyEdit.cpp
//---------------------------------------------------------------------------
void __fastcall TMyEdit::SetMyBorderStyle(TBorderStyle BorderStyle) // Myアクセッサ実装
{
if(BorderStyle != FBorderStyle)
if(BorderStyle == bsSingle) this->Width += 10; // なんだかんだで
else this->Width -= 10; // ぐちゃぐちゃやってから
TCustomEdit::SetBorderStyle(BorderStyle); // 基底のアクセッサを呼び出す
}
//---------------------------------------------------------------------------
と、こんな感じのソースなのですが
[C++ エラー] QMyEdit.cpp(39): E2247 '_fastcall TCustomEdit::SetBorderStyle(const TBorderStyle)' はアクセスできない
と怒られてしまいます。
っていうかよく考えたら、元々こいつらはprivateで宣言されてるはずなので
当たり前っつっちゃ、当たり前なんですが、なんとかして SetBorderStyle ってのを
再利用できないものでしょうか?
それともやっぱり、ゴリゴリと一から実装し直さないと駄目なのものなのでしょうか?
よろしくお願い致します <(_ _)>
513:507
08/05/10 15:49:09
>>510
それはやっているんですけど、動かないので・・・。
メインのフォームに書かれている関数なので、そのヘッダファイルは他のフォームでもインクルードしているのですが、
未定義の関数として見られてしまうんです。
514:デフォルトの名無しさん
08/05/10 16:40:20
TEdit から継承されたBorderStyleに値を突っ込めばええだけだろ。
515:デフォルトの名無しさん
08/05/10 16:51:18
>>513
メインフォームのメンバ関数として定義してりゃそりゃ見つからんだろ。
普通の関数にしないと。
516:デフォルトの名無しさん
08/05/10 18:26:48
>>514
なるほどっ!!
// this->BorderStyle = FBorderStyle; // ←これじゃBorderStyleが変わるわけがない
TEdit::BorderStyle = FBorderStyle; // ←こっちでバッチリ!!
オーバーライドされる前のやつってのも、こうすれば使えるんっすね!!
ありがとうございましたぁーーーーっ!!!
517:507
08/05/10 18:55:18
>>515
あー、そゆことですか
ありがとうございました
518:デフォルトの名無しさん
08/05/10 19:38:35
>>517
C++Builderの入門書じゃなくてC/C++そのものの入門書読むことをすすめとく。
STLもvectorくらいは最低覚えとけ。
519:デフォルトの名無しさん
08/05/13 15:48:44
プロパティエディターを登録しようとしても「'__classid' には VCL 形式のクラス型が必要」となってしまう。
enum TMyEnum {meA = 3, meB = 6, …… };
という型のプロパティを、オブジェクトインスペクタでプルダウンリストから選択して設定できるようにしたい。
ということで、プロパティエディターに TEnumProperty を使って登録しようと思ったのですが、ヘルプを参考に
#include <DesignEditors.hpp>
namespace Tenumproperty
{
void __fastcall PACKAGE Register()
{
RegisterPropertyEditor(__typeinfo(TMyEnum), 0L, "", __classid(TEnumProperty));
}
}
とやっても、
[C++ エラー] BinEdit.cpp(52): E2242 '__classid' には VCL 形式のクラス型が必要
というエラーが出て通りません。
インクルードするヘッダを <VCLEditors.hpp> と取り替えたり、両方記述してみたり、
あるいは、「Designeditors::TEnumProperty」としてみたりとか色々と試行錯誤してみましたが駄目でした。
class DELPHICLASS TEnumProperty;
class PASCALIMPLEMENTATION TEnumProperty : public TOrdinalProperty
というのは「VCL 形式のクラス型」ではないのでしょうか?
ご指導の程、よろしくお願いいたします。
<(_ _)>
520:デフォルトの名無しさん
08/05/13 16:46:19
すみません。RegisterPropertyEditor のヘルプをよく読んでいませんでした。
エラーが出ていたのは、__classid(TEnumProperty) ではなく、__typeinfo(TMyEnum) の方でした。
TMyEnum はクラスではないので、
PTypeInfo TypeInfo;
PPropInfo PropInfo = GetPropInfo(__typeinfo(TForm), "BorderStyle");
if (PropInfo)
TypeInfo = *(PropInfo->PropType);
という具合にしないといけないようですが、GetPropInfo がよくわかりません。
ヘルプを見ても引数が void のものしかありませんし、
Win32API の方で GetProp というのが該当する様ですが、こちらに変えてもうまくゆきませんでした。
enum型の型情報ポインタってのは、いったいどうやったら取得できるのでしょうか (´;ω;`)
521:デフォルトの名無しさん
08/05/13 19:02:40
ヘルプに記載はありませんでしたが、
extern PACKAGE PPropInfo __fastcall GetPropInfo(PTypeInfo TypeInfo, const AnsiString PropName)/* overload */;
こんな関数がオーバーライドされているようでした。
コンポーネント本体のヘッダ、ソースと同じパッケージに突っ込むことで
なんとかこれで「TMyEnum型の型情報ポインタ」とやらを取得できているっぽいです。
これで、プロパティエディタを登録できたはず!
と思いきや、全然反映されていません(´;ω;`)
素のTEnumPropertyじゃ駄目なのかと、継承クラスを作ってもみましたが、やっぱりだめ
Designintf::TPropertyAttributes __fastcall TAlignmentProperty::GetAttributes(void){
return TPropertyAttributes() << paValueList << paRevertable;
}
AnsiString __fastcall TAlignmentProperty::GetValue() {
int iValue = GetOrdValue();
switch(iValue) { 〜中略〜
default : return AnsiString("dtUnknown");
}
}
void __fastcall TAlignmentProperty::SetValue(const AnsiString asValue) {
if(asValue == AnsiString("dtLeftTop") ) SetOrdValue(DT_LEFT + DT_TOP + DT_SINGLELINE + DT_NOCLIP);
else SetOrdValue(NULL);
}
TEnumPropertyを継承したときのオーバーライドってこれで合ってますでしょうか よろしくお願いします <(_ _)>
522:デフォルトの名無しさん
08/05/17 22:06:01
動的にフォームを出したいのですが、
TfmOption *fmOption = new TfmOption(this);
fmOption->ShowModal();
delete fmOption;
どうもうごきません。
それとモーダルもしたくないのですが、
普通にメインウィンドウと同等のウィンドウとしたいのです。
オプションで初期にはロードしたくありません
523:デフォルトの名無しさん
08/05/18 07:43:32
>>522
TForm::Visibleをチェック。
新規作成したフォームはデフォルト値がfalseになってる。
524:デフォルトの名無しさん
08/05/18 10:04:48
ShowModal();すると、自動的にVisible=trueに設定されるから
Visible=trueは必要ないハズ。
>>522は基本的にOKだと思う。
動かないとは、表示されないという意味なのだろうか。
モーダルにしたくないなら、
fmOption->Show();
525:デフォルトの名無しさん
08/05/18 14:42:51
//---------------------------------------------------------------------------
void __fastcall Tform1::Button1Click(TObject *Sender)
{
*fmOption = new TfmOption(this);
fmOption->Show();
}
//---------------------------------------------------------------------------
void __fastcall Tform1::Button2Click(TObject *Sender)
{
delete fmOption;
}
//---------------------------------------------------------------------------
//ヘッダ
private: // ユーザー宣言
TfmOption *fmOption ;
まず、*fmOptionの*すらわからずやってます。
やりたいことは、オプションのコンポーネントがおおすきるので、
fmOptionの起動に時間がかかります。
それで、exe起動時に起動画面をだし、その間にオプションを出すよていです。
自動生成フォームとして提供したら起動画面がオプションがロードされた後
出てきて意味がないのです。
で、メインフォームのprivate変数にオプション保持用の変数をもって、
ロードしたいのですが、簡単そうでむずかしくて・・・。
526:デフォルトの名無しさん
08/05/18 14:43:57
ネット見てもShowModalしか出てこなくて。
527:デフォルトの名無しさん
08/05/18 19:21:12
で?
528:デフォルトの名無しさん
08/05/19 01:06:04
つかC/C++の基本だけでも勉強しないとにっちもさっちもいかなんじゃないかな。
その気がないならDelphiのほうがまだましだと思う。
529:デフォルトの名無しさん
08/05/19 17:06:13
>>525も低脳だが、
>>528の方がもっと低脳
の件について
530:デフォルトの名無しさん
08/05/19 19:49:26
なんでー?
531:デフォルトの名無しさん
08/05/19 19:58:38
>525
ヒント:ヘルプ
532:デフォルトの名無しさん
08/05/20 17:59:51
>>529
× の件
○ な件
533:デフォルトの名無しさん
08/05/20 18:07:55
ものすごく素朴な質問なんですがエディットボックスがあるとして
buf[0]の値が255であるとき
Edit->Text.printf("%02X",buf[0]);
ヘキサの[FF]と表示されるようにしたいのですが、やはり
AnsiString ss.printf("%02X",buf[0]);
Edit->Text = ss;
のように代入するしか方法はないのでしょうか?先人の方教えて
頂けませんか?
534:デフォルトの名無しさん
08/05/20 18:25:01
Edit->Text = AnsiString().sprintf("%02X", buf[0]);
535:533
08/05/20 18:45:00
>>534
教えて頂きありがとうございます。長い間のモヤモヤがとれて
すっきりしました。
536:デフォルトの名無しさん
08/05/20 19:39:56
char[100]とかで配列持ってて、
AnsiStringで受け取った入力を、char[80]から入れたいんだけど、どすればいいんすか?
537:536
08/05/20 19:41:10
連投すんません
入力されるブツは、日本語ダス
538:デフォルトの名無しさん
08/05/20 19:58:30
>>536
strcpy
539:デフォルトの名無しさん
08/05/20 20:22:05
エディトボックス入力(日本語を想定)のAnsiStringの文字列長ってどうやって調べるの?
540:デフォルトの名無しさん
08/05/22 21:03:52
すいませんが教えてください。
BDS2006にて
VCLフォームアプリケーションを新規作成する。
TExcelApplicationをフォームに貼り付ける。
コンパイルすると
[リンカ エラー] Error: 未解決の外部参照 '__fastcall System::Variant::operator =(wchar_t *)' が
C:\PROGRAM FILES\BORLAND\BDS\4.0\LIB\BCBOFFICEXP.LIB|Excel_XP_srvr.cpp から参照されました
というエラーが出ます。
このエラーの解決方法がわかりません。
なにかをincludeしなければならないのでしょうか。
541:デフォルトの名無しさん
08/05/22 21:09:34
ちなみに、BCB5で同じことをすると、
Excel_XP・・・となっている部分が
Excel_2K・・・となり
問題なくコンパイルは通ります。
542:デフォルトの名無しさん
08/05/22 21:12:15
>>540
ヘッダじゃなくてライブラリファイルが抜けてるっぽいね。リンカエラーだから。
543:デフォルトの名無しさん
08/05/26 22:29:09
imageコンポーネントでTColor型で絵を描いていきたいんだが、
BMP形式で保存すると32bitになりますよね?
そこで、PixcelFormat で pf24bitを指定すると、なぜか書けないんです。
そこで、あえて32bitを指定してもなぜか書けずに特に指定せずに
image->picture->〜 = (TColor)0xffffff
だと書ける。
ただ、保存するのは24bitのBMPにしたいんだが、ググると
ColorToRGBという関数があるみたいなんですが、
これの使い方教えて貰えませんか?ヘルプ見ても、いまいちわからなくて。
また、この関数使うのより簡単に24bitBMPへ保存できる良い方法が有れば伝授してください
544:543
08/05/26 23:01:57
すいません。
環境は、Builder 2006です。
545:543
08/05/27 19:08:00
自己レス
Canvasに書いてから、pf24bitを指定する事で書けました。
どうやら順番があったようです
546:デフォルトの名無しさん
08/06/08 14:40:21
bcb2007を使っています。
dll内にフォームを用意したいのですが
うまくいきません
Form1=new TForm1(this);Form1->ShowModal();delete Form1;
うまく呼び出す方法はあるのでしょうか?
547:デフォルトの名無しさん
08/06/09 23:17:59
C++Builder6.0でマルチスレッドのプログラムを作っています。
フォームにボタンとラベルを各1個配置し、ボタンをクリックする度に
ラベルに表示される数字が+1されるようにしてあります。
以下のコードで普通に実行するぶんには動くのですが、(※)の箇所で
ブレークを掛けてステップ実行を2回くらいやって再実行すると
フリーズ(と思うほど長時間固まる)してしまいます。
なぜなのか教えて頂けないでしょうか。
void __fastcall TAppThread::Execute(void)
{
int cnt;
cnt = 0;
count = 0;
while ( 1 ) {
cnt++; //(※)
cnt--;
cnt++;
Synchronize( Update );
Suspend();
}
}
void __fastcall TAppThread::Update()
{
Form1->Label1->Caption = IntToStr( ++count );
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if ( appThread )
appThread->Resume();
}
548:デフォルトの名無しさん
08/06/17 03:43:57
builder6.0を使っている初心者です。
恐縮ですが質問させてください。
プログラム上で動的にコンポーネント(TPanel)を配置しています。
そのコンポーネントにOnDragDropとOnDragOverイベントを取得させて
動作させたいのですがやり方がよく分からずうまくいきません。
初歩的な質問で申し訳ありませんが教えて頂けないでしょうか。
よろしくお願いします。
549:デフォルトの名無しさん
08/06/17 08:15:26
抽象的すぎて意味わからんがな(´・ω・`)
550:デフォルトの名無しさん
08/06/17 10:23:37
C++Builder6 をつかっています。
だんだんプロジェクトが大きくなってくると、デバッガのインスペクトとかで表示される値が
むちゃくちゃになってきます。回避方法ってないものでしょうか?
551:デフォルトの名無しさん
08/06/17 10:26:58
>デバッガのインスペクトとかで表示される値が むちゃくちゃになってきます。
それは無い。
552:デフォルトの名無しさん
08/06/17 11:24:59
そんな変数無ぇって言われる事はあるな
553:デフォルトの名無しさん
08/06/17 11:26:56
それはプロジェクトの大小じゃなくて、
コンパイラの最適化の結果。
554:デフォルトの名無しさん
08/06/17 11:32:53
そこは置いといて、変になることがあるってことよ
555:デフォルトの名無しさん
08/06/17 11:52:05
BCB6では変にならないお。
プロジェクトにファイルを追加した直後は、ブレークポイントで止まらなくなるけど。
ブレークポイントで止まった後は変数が変になることはない。
556:デフォルトの名無しさん
08/06/17 12:13:29
全然関係ないけど、うちのBCB6は
struct Hoge : vector<int> {};
Hoge hoge;
try
{
string a;
if (a.empty())
throw exception();
Test test;
}
catch (...)
{
}
これのTest(何のクラスでもいい)のデストラクタがなぜか呼ばれるんだけど、
再現する人いるかな。
557:550
08/06/17 12:37:45
ごめん、うちのバージョンは5だった・・・。
コンパイラの最適化OFFで、
if(Instance != NULL)
{
Instance->Data = 3;
}
とかやって、Instance->Data にブレークポイントを設定したとする。
それで、Instance の値を見ると NULL になってることがある。
プログラム自体はちゃんと動くんだけど、デバッガが、グダグダになることがある。
ダイレクトXアプリってのもあるのかなぁ?
あと、これは仕様だと思うんだけど、いつのまにか、TOpenDialog で
マイコンピュータを開くと、なにも表示されなくなった。
558:デフォルトの名無しさん
08/06/17 12:39:14
>>557
多分、6にうpするとそんなことない。
559:デフォルトの名無しさん
08/06/17 12:49:03
>>558
6ってもう買えないよね?
560:デフォルトの名無しさん
08/06/17 12:53:02
あー、新規なら買えるのか。スレ汚しスマヌ。
561:デフォルトの名無しさん
08/06/17 16:40:40
コードガードにバグがある6を今更買うの?
562:デフォルトの名無しさん
08/06/17 16:42:46
5ならコードガード無いんじゃね?
ま、5と6使った自分なら、間違いなく6を選ぶ。
563:デフォルトの名無しさん
08/06/17 17:07:53
5にもコードガードついてるよ。5のコードガードのバグは気づかなかった。
BDS2006 はもってるんだけど、なんかこれもバギーらしいな。
思い切って、2008 がでるまで待とうかとも思ってるんだけどね。
9月ぐらい?
printf デバッグとかもう嫌だよ・・・。
564:デフォルトの名無しさん
08/06/17 18:40:32
デバッガで変数が正しく表示されなくなったら
パソコンを再起動
これ常識。
これで回復する。
自分のプログラムで、どっかぶち壊しまくってるんだよ。
565:デフォルトの名無しさん
08/06/17 18:45:00
9xじゃあるまいし
566:デフォルトの名無しさん
08/06/17 18:52:20
9xなら暴走して落ちるんだよ。
自分で自分のDSをぶちこわしているから変数がヘンになる。
567:デフォルトの名無しさん
08/06/17 19:11:35
今時アプリがどんだけメモリ空間壊したって、PCの再起動なんて必要ないだろw
DSとか言ってるから古い人ぽいけど。
568:デフォルトの名無しさん
08/06/17 19:47:06
じゃあFSとか言えば納得するのか
569:デフォルトの名無しさん
08/06/17 22:13:34
メモリ空間を壊すって事は、Builder の場合、
デバッガ、コードガード、OS、の3つをすり抜けないと無理なんだけど、
そう言う事って出来るの?セキュリティホールみたいな物か?
570:548
08/06/18 02:27:24
すみません。説明不足でした。
void __fastcall TForm1::N1Click(TObject *Sender)
{
TTabSheet* tb;
TScrollBox* sbox;
TPanel* panel;
TButton* bt;
tb = new TTabSheet(PageControl1);
tb->PageControl = PageControl1;
sbox = new TScrollBox(tb);
sbox->Parent = tb;
...
panel = new TPanel(sbox);
panel->Parent = sbox;
...
bt = new TButton(panel);
bt->Parent = panel;
...
bt->DragMode = dmAutomatic;
}
こんな感じでPageControlに新しいタブを作成し、その中にTScrollBox、
更にその中にTPanel、更にその中にTButtonを配置させています。
やりたいことは、この新しく配置したTPanel上のTButtonをマウスドラッグで
移動できるようにしたいのですがその方法がよく分からないということです。
回りくどい説明で申し訳ありません。
571:デフォルトの名無しさん
08/06/18 07:39:03
ボタンをドラッグってどんな操作を想定してるの?ボタンはクリックするものなのに。
572:548
08/06/18 12:05:40
>>571
マウスの操作でボタンの座標位置を変更できるようにしたいです。
「自分で追加したボタンを自分の配置したい位置につまんで移動できる」
と言った方がわかりやすいかもです・・・。
OnDragDropイベントではなくOnMouseMoveイベントを使えばもっときれいにできるのかもしれないんですが、
ここではとりあえず「ドラッグで移動して配置する」という操作だけを目的としていたので
イベントとして使いやすいと感じたDragDropを使用しています。
573:デフォルトの名無しさん
08/06/18 22:48:51
いや、だから、ボタンをつまもうとしたらクリックになっちゃうでしょ。
でクリックしようとしたときにちょっとした操作ミスでドラッグで移動になる、と。
そんな自己満足なUIは考え直せって。
574:デフォルトの名無しさん
08/06/18 23:07:01
そんなのレイアウトモード←→通常モードみたいな感じで切り替えれば済む問題でないの
575:デフォルトの名無しさん
08/06/18 23:39:38
もちろんそれでもOKだと思うが。
で所望の動作はWM_NCHITTESTでHT_CAPTIONってのがお手軽。
576:548
08/06/20 02:47:20
>>573-575
ボタンクリックとドラッグ混同の操作ミス等、言われてみたらその通りだと感じました。
アドバイス含め、対処できるように組み直したいと思います。
移動についてはさせることができました。
アドバイス、ご指摘ありがとうございました。
577:デフォルトの名無しさん
08/06/20 15:57:40
>>576
うちも VCL 以外で近いことを以前やったことあるけど、
そのときの実装は何ピクセル以上ドラッグするとドラッグ開始、
っていうふうにしてた。
578:デフォルトの名無しさん
08/06/24 04:30:23
古いプロジェクトをコンパイルすると
-Hr スイッチにより vcl4.h を vcl.h の代わりにインクルードします
っていうメッセージが出るんだけど、このスイッチって何処に記載されてるの?
古いプロジェクトの移行って面倒だね・・・。
579:デフォルトの名無しさん
08/06/30 16:46:20
Vi$taにBCB6をインスコできますか?
580:デフォルトの名無しさん
08/07/01 04:50:20
V$sta捨てれ
581:デフォルトの名無しさん
08/07/01 09:39:37
正直、そうしたいんですが、出来上がったexeのVi$ta検証に必要。
ところで、Vi$taってなぜかXPとマルチブートできませんよね?
582:デフォルトの名無しさん
08/07/01 09:50:06
っリムーバブルフレーム
583:デフォルトの名無しさん
08/07/01 19:26:51
>>579
Vistaの動作検証だけなら開発は2000かXPで。
視覚スタイルは.manifest同梱で対応可。
Vistaアイコン(PNG圧縮256px)はIcoFxで可能。
res作成はVista対応SDKのrc.exeで可能。
584:デフォルトの名無しさん
08/07/01 19:49:26
2000だとVistaなSDKがインスコできない罠が(;゙゚'ω゚'):
585:デフォルトの名無しさん
08/07/01 22:49:40
>>583
そうなのか・・・XPに入れてexeとdllだけ2000にコピーしたから気付かなかったわ。
586:デフォルトの名無しさん
08/07/02 08:57:02
>>583
ビジュアルスタイル対応は、Theme Manager 使った方がいいのでは。
587:デフォルトの名無しさん
08/07/04 22:52:10
Windows XPでTurbo C++を使っているのですが、
TButtonのCaptionの色を変えるのに、次のようなコードでは変わりませんでした。
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (Button1->Caption == "blue") {
Button1->Caption = "red";
Button1->Font->Color = clRed;
} else {
Button1->Caption = "blue";
Button1->Font->Color = clBlue;
}
}
どうしたらいいんでしょうか? アドバイスよろしくお願いします。
588:デフォルトの名無しさん
08/07/04 22:56:41
TButtonのキャプションの文字色は変更できません。これはWindowsの仕様です。
もし文字色をシステムに従わないようにしたいのであれば、オーナドローでどうぞ。
589:587
08/07/04 23:06:41
>>588 迅速な回答ありがとうございます
590:デフォルトの名無しさん
08/07/06 01:08:29
void __fastcall TfrmMain::Button1Click(TObject *Sender)
{
char *aaa;
aaa = "jpg";
if(aaa == "jpg")Button1->Caption = "jpg";
}
C言語の基本的なことだとはわかっているのですが・・・
これがtrueにならない理由って何でしょう?
基本的すぎるのか、文字列でググっても出てこないのはなぜー
591:デフォルトの名無しさん
08/07/06 01:18:27
>>590
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char* aaa;
char* bbb;
aaa = "jpg";
bbb = "jpg";
ShowMessage(AnsiString().sprintf("aaa=%08X bbb=%08X", aaa, bbb));
}
592:デフォルトの名無しさん
08/07/06 03:08:06
メモリ壊しまくりんぐ
593:デフォルトの名無しさん
08/07/06 04:34:54
リリースビルドならtrueになりそう
594:デフォルトの名無しさん
08/07/06 05:21:36
char* の大きさは4byteだから、 3文字突っ込むとちょうど4byte使用するから
メモリは壊れないのではないのか。
595:デフォルトの名無しさん
08/07/06 05:24:50
operator ==(const char*, const char*) {}
ができないのを今初めて知った(´・ω・`)
596:デフォルトの名無しさん
08/07/08 13:57:48
>>590
if ( strcmp( aaa,"jpg" )==0 ) とすればええんでないの?
"jpg"ってすると、メモリのどっかに確保された4バイト('j','p','g',0)のアドレスを示す。
aaaに格納された"jpg"のアドレスと、ifで比較している"jpg"のアドレスが違うからfalseになる。
597:デフォルトの名無しさん
08/07/08 18:27:30
>>590
char* でやらないで AnsiString でやれば動く。
598:デフォルトの名無しさん
08/07/09 23:36:09
イベントハンドラを呼び出すとき、
Button1Click(Button1); Button1Click(Button2); Button1Click(Form1);
のどれでも動くみたいですが、Senderには普通何を与えるのが正しいの?
Senderの役割を教えてください。
//Form1上にButton1とButton2
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Button1Click(Button2);
}
599:デフォルトの名無しさん
08/07/09 23:54:20
Senderはイベント呼び出し元のTagやデータ読むのに使うから、そのイベントに関連づけたいオブジェクトを指定。
たとえば拡大ボタンと縮小ボタンがあって、それぞれにイベントハンドラ書くのはアホ臭いから
void __fastcall TForm1::Button2Click(TObject *Sender)
{
int zoom;
TButton* button = dynamic_cast<TButton*>(Sender);
zoom = button->Tag;
if (zoon == 1) 拡大();
else 縮小();
}
こんな感じで使ったりする。
ハンドラ内でSender使わないならthisで十分。
600:デフォルトの名無しさん
08/07/10 00:14:17
>>599 ありがとうございます。
601:デフォルトの名無しさん
08/07/22 14:35:51
WindowsXPでBCB6.0を使っています。
URLリンク(homepage2.nifty.com)
上記のサンプルプログラムを自分の環境で実行してみたのですが、以下のエラーが出てしまいます。
[リンカ エラー] 外部シンボル 'GetIfTable' が未解決(D:\ADDRESGET\UNIT1.OBJ が参照)
ソースファイルをダウンロードして実行してみたところ、正常に動作したことから環境は間違って無いと思うのですが・・・。
インクルードファイルも同じにして、オプションのリンカやディレクトリ/条件も揃えてみましたがダメでした。
この場合、何を見たらよろしいのでしょうか?
よろしくお願いします。
602:デフォルトの名無しさん
08/07/22 14:54:57
iphlpapi.libリンクしてないだろ。
bcb/lib/psdkにあるのプロジェクトに追加しる
603:デフォルトの名無しさん
08/07/22 15:01:37
>>602
・・・その通りでした。
インクルードで指定して、エラーも出ていないから必要無いと思い込んでました。
本当にありがとうございました。
604:D
08/07/22 15:12:34
☆ チン ハラヘッタ〜
ハラヘッタ〜
☆ チン 〃 ∧_∧
ヽ___\(\・∀・)
\_/ ⊂ ⊂_)
/ ̄ ̄ ̄ ̄ ̄ /|
| ̄ ̄ ̄ ̄ ̄ ̄| |
|淡路たまねぎ|/
 ̄ ̄ ̄ ̄ ̄ ̄
605:デフォルトの名無しさん
08/07/22 15:38:51
>>603
コンパイルとリンクに違いについてもうちょっと勉強した方がいい
606:デフォルトの名無しさん
08/07/25 03:16:38
文字列の加工方法について質問です。
char chrBuf[1024];
AnsiString asBuf;
strcpy(chrBuf,"123456");
strcpy(asBuf.c_str(),chrBuf);
asBuf.Delete(3,3);
Label1->Caption = asBuf.c_str();
これで、「126」と表示させたいのですが、実際には「123456」となってしまうのは何故でしょうか・・・?
よろしくお願いします。
607:デフォルトの名無しさん
08/07/25 04:39:22
char chrBuf[1024];
AnsiString asBuf;
strcpy(chrBuf,"123456");
asBuf = chrBuf;
asBuf.Delete(3,3);
Label1->Caption = asBuf;
とやりたいの?
Caption は AnsiString だから、AnsiString → char * → AnsiString っていう
キャストが行われると思うんだけど、これはわざと?
c_str() で確保されたメモリ空間の寿命は未確定。
コピー先として使うべきではない。
608:デフォルトの名無しさん
08/07/25 10:30:26
>>607
AnsiStringを加工に使いたいのですが、挙動を理解しきれてないので・・・。
「URLリンク(homepage1.nifty.com)」で、
>char* c_str( )
>文字列をC言語の char* 文字列で返す。返すのはあくまでも char* 型のポインタであり、
>文字列のコピーが作られるわけではない。従って、受け取った char* 文字列を安全に操作したい場合は strcpy( ) などでコピーすると良い。
と、あるのでコピーしたのですが・・・解釈が違ったのかな?
ポインタとして渡せば動作するのですね。
ありがとうございます。
609:デフォルトの名無しさん
08/07/25 10:35:12
>c_str( )
は、無理して使う必要は無い。
どうしても使わないといけないときは、AnsiStringとstd::stringの渡しくらい。
例えば、
AnsiString SBuf;
string sBuf;
のとき、
sBuf = SBuf.c_str();
SBuf = sBuf.c_str();
と書く。
それ以外は、「.c_str()」を書かなくても、多分演算子がオーバーロードされてて、簡単に代入できる。
610:デフォルトの名無しさん
08/07/25 13:51:01
>>608
解釈が違うと思う。
c_str() で得られたポインタから strcpy 等で
「自分で確保したメモリにコピーする」っていう意味。
そうすれば、自分で確保したメモリの寿命は自分で決められるから。
URLリンク(www.ne.jp)
↑も参照してみて。
611:デフォルトの名無しさん
08/07/25 15:16:04
>>609-610
詳しい解説ありがとうございます。
入門書を見ると、「初心者はAnsiStringを使えば簡単」って書いてあるけど、実は取り扱いには注意しないといけないんですね。
暑くて頭があまり回っていませんが、がんばってみます。
612:デフォルトの名無しさん
08/07/25 15:20:45
>>611
基本的には常に AnsiString を使って、
API とのやりとりや、標準ライブラリの呼び出しだけに c_str() を使う、
って考え方が良いと思う。
613:デフォルトの名無しさん
08/07/25 15:48:01
>実は取り扱いには注意しないといけないんですね。
なことない。簡単。
614:デフォルトの名無しさん
08/07/25 18:05:18
今年買ったPCでTurboC++ Builder, WinXPでOpenGLに挑戦中なんですが,
テクスチャについて質問があります。
今, 「C++ Builder 6 コンポーネント活用ガイド&実践プログラミング Vol.8
OopenGL プログラミング編」
の「53-2 Bitmap形式のファイルを利用する」のソースコードex19を試しています。
このex19で1枚のテクスチャにbmpファイルを貼り付けているんですが, サイズが
64*64, 128*128, 256*256ならうまくいくんですが, 512*512や1024*1024のbmpを利用しようとすると
スタックオーバフローを検出して止まります。
これは, 256が4枚で512を表現したりするしかないのでしょうか?
512*512やそれ以上のサイズが使える解決方法をお願いします。
615:デフォルトの名無しさん
08/07/25 18:15:00
>>614
よくわからないけど、ファイル自体をスタックに積んでるのかねぇ?
そんなコード見たことがないが。
その辺り調べてみた?
616:デフォルトの名無しさん
08/07/25 18:37:34
一様乱数を生成する関数のソースについて質問があります。y=1/sqrt(2)*exp(-1/2*x*x)の計算で
In function `GaussRandom':: undefined reference to 'sqrt’と In function `GaussRandom':: undefined reference to `exp'というエラーがでて実行できません。もちろん<math.h>は定義しました。
レポート課題なのでマジで困ってます。是非教えてください。ソースを下に載せておきます。ちなみにxが一様乱数で、yが正規乱数です。
double GaussRandom()
{
double x;
double y;
x=UniformRandom();
y=1/sqrt(2)*exp(-1/2*x*x);
return y;
}
double UniformRandom()
{
double x;
int r=1;
r=1229*r+351750;
x=r/1664501;
return x;
}
}
617:デフォルトの名無しさん
08/07/25 18:48:29
GaussRandom()の前にUniformRandom()が定義されてないからじゃないの
618:デフォルトの名無しさん
08/07/25 18:54:34
>>617 今入れ換えて実行してみたのですが駄目でした。
619:デフォルトの名無しさん
08/07/25 20:02:44
おかしいね、うちはそれコピペしただけの通るよ
math.hのincludeがうまくできてないのかね
620:デフォルトの名無しさん
08/07/25 21:11:48
マルチポストしまくりで解決済みなんでスルーでいいよ
621:デフォルトの名無しさん
08/07/26 21:04:15
>>615 スタックのサイズを大きくしたらいけました。ありがとうございます。
622:デフォルトの名無しさん
08/07/26 21:09:55
>>621
とりあえず載ってるコードがダメダメな気がするから自分で書き直すことをお奨めする
623:デフォルトの名無しさん
08/07/26 22:36:46
コンパイルするとError: 外部シンボル 'WinMain' が未解決(C:\BORLAND\BCC55\LIB\C0W32.OBJ が参照
とでるのですが、理由がわかりません・・・。
どなたかわかる方お願いします。
624:デフォルトの名無しさん
08/07/27 14:51:31
フォームに配置したTButtonのOnClickイベントを、
実際にボタンを押してではなく、あるメソッド内から呼び出したいのですが
そういうことは可能ですか?
625:デフォルトの名無しさん
08/07/27 15:12:14
TButton::Click()があるじゃない
626:デフォルトの名無しさん
08/07/27 15:43:56
>>625
おかげさまで解決しました。
ありがとうございました。
627:デフォルトの名無しさん
08/07/27 22:16:52
おすすめのエディタ教えてください!
今までC言語を始めよう!というフリーソフトを使ってきました
628:デフォルトの名無しさん
08/07/27 22:17:48
>>627
スレ違い
629:デフォルトの名無しさん
08/07/27 23:24:30
>>627
エディタ部分だけなら2006以降のエディタの方がいいかな
ウィンドウ構成とかは6までのIDEのほうが好きだけど
630:デフォルトの名無しさん
08/08/05 15:25:09
C++Builder6からmecabを使いたいのですが、一週間以上格闘しても光が見えません(涙)
mecabの初期化すら出来ない状態なので何かアドバイス頂ければ嬉しいです。
よろしくお願いします。
631:デフォルトの名無しさん
08/08/08 15:12:29
OpenProcessで使うPROCESS_ALLACCESSマクロだが、定義間違ってね?
VCその他では
#define PROCESS_ALL_ACCESS 0x001f0fff
BCCでは
#define PROCESS_ALL_ACCESS 0x001fffff
になってる。
たぶん>>427の問題もそのせい
こういうバグってどこに報告すればいいん?
632:デフォルトの名無しさん
08/08/08 15:31:13
普通に0x1F0FFFになってるが。
検証コードはprintf("%08X", PROCESS_ALL_ACCESS);
環境は6pro update4
633:デフォルトの名無しさん
08/08/08 15:37:38
winnt.h
#define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | \
0xFFF)
#define STANDARD_RIGHTS_REQUIRED (0x000F0000L)
#define SYNCHRONIZE (0x00100000L)
どう見ても 001f0fff だわな
634:デフォルトの名無しさん
08/08/08 15:38:59
おっと、手元のが古いだけか
駄レスすまそ
635:デフォルトの名無しさん
08/08/09 11:28:57
そういうところまで疑わなきゃいけないんだな、面倒な
636:デフォルトの名無しさん
08/08/09 21:33:14
TEditにある数値を入力して、OnExitイベントで入力された数値を
チェックしてますが、入力値が異常でも、フォーカスが次のTEdit
にうつってしまいます。
よく考えれば当然といえば当然の結果なのですが、どうしても正常値
を入力するまでフォーカスを保持させたいのですが、行き詰ってしまい
ました。
よい解決方法がないでしょうか。よろしくお願いします。
637:デフォルトの名無しさん
08/08/09 22:19:30
できるじゃん
void __fastcall TForm1::Edit1Exit(TObject *Sender)
{
TEdit* edit = dynamic_cast<TEdit*>(Sender);
if (edit->Text != AnsiString("aaa")) {
edit->SetFocus();
}
}
638:デフォルトの名無しさん
08/08/11 15:43:16
ScanLineとRGBTRIPLEについて質問です。
ネットで調べると、ScanLineで取り込んだ配列はBGRの順番に入っているのでRGBTRIPLEに入れればよいとなっていたのですが、
実際に使ってみるとずれており、4番目の数値(中身は0)があるような感じでした。
BYTEが4つある配列に入れることで動作させましたが、以下の書き方は間違っているのでしょうか?
int i,j;
int RoopMax=100; // ループ回数
DynamicArray<RGBTRIPLE*> slbuf;
slbuf.Length=RoopMax;
for (i=0 ; i<RoopMax ; i++){
slbuf[i] = (RGBTRIPLE*)ColPos[Num]->Picture->Bitmap->ScanLine[i];
}
for(i=0;i<RoopMax;i++){
for(j=0;j<RoopMax;j++){
Ra[i][j] = slbuf[i][j].rgbtRed;
Ga[i][j] = slbuf[i][j].rgbtGreen;
Ba[i][j] = slbuf[i][j].rgbtBlue;
}
}
639:デフォルトの名無しさん
08/08/11 15:56:51
>>638
ビットマップが24bitならBGRの3bytes、32bitならBGRAの4bytes。
640:デフォルトの名無しさん
08/08/11 15:58:52
あと、今のPCだと32bitのほうが一般に処理速度早くなるから注意。
24bitだとワード+バイト転送なのに対し、32bitはダブルワード1回ですむ
641:デフォルトの名無しさん
08/08/11 16:07:26
>>639-640
なるほど、ビットマップの形式によって変わるので処理としては間違ってはいないんですね。
BGRAがあることに気づきませんでした。
ありがとうございます。
642:デフォルトの名無しさん
08/08/13 17:02:27
サブのスレッド(TThread)でTNotifyEventを発生させて、そのイベントによりメイン側の関数が実行されたとき
メイン側のメンバ変数の内容が見えないのですが、どうすればいいのでしょうか。
エラーが出るのではなく、関係ない数値が入っているので、別の部分を参照しているみたいです
具体的には
メイン側クラス(MainClass)、サブのスレッド(SubThread)
MainClass内で
AnsiString a;
SubThread->hogeEvent = (TNotifyEvent)&hogeFunc;
さらに
void hogeFunc(TObject* Sender)
{
MessageBox(Handle , a.c_str() , "",MB_OK);
}
として、hogeEventを発生させたとき、メイン側で既に代入したaの内容が読み取れていない
といった感じです。
よろしくお願いします。
643:デフォルトの名無しさん
08/08/13 23:46:54
実行コンテキストを無視しちゃだめ。メインスレッドに属するコード部分はメインスレッドのコンテキストで
実行する。PostMessageとかSynchronizeとかを使う。
644:デフォルトの名無しさん
08/08/14 03:13:49
>>643
ありがとうございます。
TNotifyEvent fOnHoge;
__property TNotifyEvent hogeEvent = {read=fOnHoge,write=fOnHoge};
void __fastcall TSubThread::evHoge(TObject* Sender)
{
if(hogeEvent){
hogeEvent(this);
}
として、サブスレッド内で
Synchronize((TThreadMethod)&evHoge);
を呼び出しても、解決しません。
このような書き方ではメインスレッドのコンテキストで実行されないのでしょうか。
2度も申し訳ありませんが、よろしくお願いします。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4368日前に更新/254 KB
担当:undef