Delphiは既にVB.NETによって取って代わられています。 このスレは過去に入手した利用者や、学校での実習に関する質問を目的としたスレです。 新規にプログラミングを始める人はVB.NETの入手をお願いします。
というのはガセ
VB.NETってただですか?
VB.NETって95で動くソフト作れますか?
しばらく厨房ホイホイとなります。ご了承ください。
フォーム以外をParentに設定する方法はありますか? TImageを、TImageやTLabelの親にしようとしているのですが、どうにも方法が分かりません。 親としたTImageを移動させる際、その中にあるイメージやラベルも一緒に動かせたら、ということです。
>>9 その親にしたいTImageを他のTImageやTLabelと一緒にTPanelに乗せたら?
休日にtelnet使ったソフト作ろうと思ってindy弄ってたが なんつーか挙動がへんだな、これ。 9と10でSendCmdで例外が飛んだり、飛ばなかったり、 SebdChで長いコマンドを流し込むと途中で接続がタイムアウトしたり(Σ(゚д゚)オイオイ) Disconnectedのメッセージが2度飛んでくると終了時に100%ハングしたり・・・ なんなんだ、これは?w あまりにも使えないんでICS使ってみたらあっさり悩み解消。 indyでまともにtelnet使えてる香具師いるのか?
で、質問は何ですか?
>>11 Indyはたしかにアレだよな。
俺もJaneの時も苦労したもんだ。
まともなの作るならIndyは避けたほうが苦労しなくてすむかもね。
Indyでメーラーを作ろうとして途中で投げたのは自分だけでいいorz
>>10 その親にしたいTImageというのが作ったり破棄したりで、2つ以上になるときがあるのです。
そうなるとTImageを作る際にTPanelも作って、それに乗せておく、ぐらいしか方法が無いのでしょうか。
とりあえず他の方法を思いつくまではこの方法でやってみたいと思います。
レスありがとうございました。
>>15 毎回配置するのが手間なら、TLabeledEditのようにあらかじめコンポーネントとして作っておいて、
実行時にそれを生成すればいいよ
プレステ3のソフトをデルフェンで作れますか?
TToolbarについて質問です。 エクスプローラのツールバーのように特定のTToolButtonだけCaptionを表示するにはどうすればいいでしょうか? ToolButton.Caption := ''としても画像の横にスペースが入ってボタンが広くなってしまいます。
>>17 子供を作らないようにする事なら可能かもしれないな
>>19 可能なんですね!
さっそくやってみます
とりあえずデルフェンの起動時に開かれるこの右から左に流れるアニメーションだけでも
早く作れるようになりたいです!
わかんない事があったらまたきます
ありがとさんでしたー
分からない事があってもデルフェンのことはデルフェンのスレで聞いてください。
ToolbarのToolbuttonを動的に作成すると非常に時間がかかるのですが改善策はないでしょうか? 20個ほどのボタンを作成するのに200ms程かかるので起動が遅くなってこまってます。
表示をとめてみたら?LockWindowUpdateとかで。
|☆TToolButtonの実行時作成&削除 |あまり使うことはないと思うのですが、ファイルにキャプション一覧を登録しておき、それを読み込んでToolButtonに設定する処理です。 |ポイントは、ToolBarのAutoSizeとShowCaptionを一時的に無効にすることです。この処理により、キャプションの入れ替え時に一瞬ちら |つきますが、この処理を入れないと、ボタンが設定されていく様子が見えるぐらい遅くなります。 どっかのDelphiサイトから
Indy は大げさすぎるとういうかごちゃごちゃ感は否めないな。 telnetの送受信だけきっちりやってくれてあとは文字コード 変換系のサブルーチンそろえてくれればそれで十分なような。
RFC知らなくてもつくれるようにしようぜ的な考えがそもそも間違いのような希ガス
RFC 知らないけど、Indy のおかげで FTPができた!プロキシがいまいち不安ですが。
VCL の Windows 知らなくてもつくれるようにしようぜ的な考えがそもそも間違いのような希ガス
ライブラリの存在理由も分からない馬鹿はアセンブリでもやってろ
アセンブラとアセンブリの違いが分からない厨房がDelphiをつかうんだよね。
なぜDELPHIスレにアンチが来るんだろう・・・
VBスレで叩かれて泣きべそかいてたんだよ
>>31 のようなこと言うやつって大抵その「違い」の話しか知らなくて、
肝心のアセンブリ言語については全く分からないにわかだらけだよなw
>>9 ,15
遅いレスですがフレームにイメージコンポやラベルを載せるのがよいと思います。
イメージコンポ(TImage)は親になれないので代わりに親になるコンポを用意するわけですが
フレームがパネルと違うのはイメージコンポとラベルの配置を設計時にでき、
実行時にはこのフレームを生成(して親を決めて配置)するだけで良い点です。
>>29 時として巨大になりがちなウィンドウプロシージャを隠しているのは賢い選択ではなかったかと思います。
>>35 皮肉もわからずにマジレスしちゃうやつは半年ROMってろ
Delphi を DELPHI と書くやつって、あほっぽいな・・・
ふたことめには RFC とかいうヤツをからかってるのに、ほんとわかんないヤツ大杉w
Delphi(デルファイ)について、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だか分からない質問を 勇気を持って書き込むスレッドです。 Delphi使いが優しくコメントを返しますが お礼はDelphiの布教と初心者の救済をお願いします。
参照項目についての質問です。 KeyFieldsに2つのフィールドを指定した参照項目を作ったのですが DBGridでKey1,Key2を入力すると表示されるのですが、参照項目フィールドを クリックすると「Query1項目Key1;Key2が見つかりません」というようなエラーメッセージが 延々と出て強制終了するしか無くなります。 複数キーの参照項目はドロップダウンで表示できないのでしょうか。 環境はD7+FB1.5です。
Del7を使っています。 秀丸のアウトラインモードとか、Delの新しいやつの エディタ画面みたいなコンポーネントってありますか? Delの新しいやつ買えば付いてますか?
TurboDelphi使ってるんですが、数十分使うとbdsのメモリ使用量が500M超えとかになってしまいます。 これは何とかならないんでしょうか?
メモリを増やせばいいです
Del買っても付いてこないな。 >秀丸のアウトラインモードとか、Delの新しいやつの >エディタ画面みたいなコンポーネントってありますか? 海外製でシェアだけど、秀丸のアウトラインのようなツリーコンポとDel2007みたいに、折り畳みや 同期編集までもできちゃうエディタがセットになったやつがあるな。ほぼ秀丸でできることはできる。選択範囲のみ編集可能にしたり。 強調表示やアウトラインの解析などのルールは正規表現や、BNF?もどきでカスタマイズできる。コード補完やコードテンプレートの コンポもついてるから、プロパティの設定だけでほぼカスタマイズできる。 Ansi版とUnicode版ついてて、海外製だけど、IMEなどの日本語絡みの問題はほぼなさそうだった。
ナッキーのDelphiはじめて奮戦記 ってどんな内容なんでしょうか? 講座本?エッセイみたいなもんでしょうか? 講座系なら購入したいです。 amazonで残り3冊になってるぐらいだから結構人気なんですね。
ぐぐれ
うーーーーん、全くの初心者なら C# からの入門をすすめる
C#は簡単だしオススメはできる
人が検索も分らないバカを騙して茨の道に誘い込もうとしてるのに邪魔するな。
Delphiは茨か?
Delphiと言う開発環境は素晴らしいと思うけど Delphiと言う言語はC#やJavaと比べると難しい。 本とか情報もJavaと比べると少ないし茨の道だと思うな。
サイズは同じで中身だけが違う レポートAとBを同時に印刷して A Page1 B Page1 A Page2 B Page2 A Page3 : このように出力させる方法教えてください Delphi6です
意味がわからん
なぜそのようなことが必要なのか判らん。 別々に印刷して並べ替えれば済むじゃん。 まあ千ページもあるってんなら大変だろうが。
>別々に印刷して並べ替えれば済むじゃん。 これを人力でやりたくないからです。 1000ページは無いけど500ページくらい有ります。
そういう順番で出力すればいいだけの話
だあそれだと印刷ジョブが細切れになる罠 Win95ならたぶん死ぬ
95なんて使ってる方がおかしい
Del厨は変わったやつが多いな
逆。
おすすめ本は Delphi4プログラミング技法 Delphiアルゴリズム 絶版なのが欠点だが・・・
>>55 C#やJavaはコボルの地位を継承するドカタ言語だからな。
ポインタとかよく分からない、っていう三流SE?に人気があるよ。
そんな馬鹿な
DelphiはVBの地位を継承するドカタ言語だよね。
TParam.AssignFieldValueで、項目がftFMTBCDの時に、TParamのPrecisionが設定されません。 誰かCodeGearに文句を言って下さい。TParamのNumericScaleで小数点以下の桁数は設定されていますが、 全桁数Precisionが常に0です。 if Field.DataType in [ftFMTBcd] then Precision := Field.Precision を追加しといて下さい。TClientDataSet経由でTSQLResolverで更新を適用する時に、 全桁数が分からなくてもごまかせますが、困っています。
どかたに言語なんてあるの?
OSI参照モデル第0層
Delユーザの大半は、中小零細なデジドカですが、なにか?
日本のプログラマなんて大半がIT土方じゃん 言語がどうこう言ってる奴は頭おかしいのか?
プロにとって言語、環境なんて所詮道具なんです。頭のおかしい人はそれが分からんとです。 彼らは、宗教のように特定の言語や環境を崇めとるのです。それ自体は否定しませんが、 彼らはそれ以外の言語や環境そしてユーザーを否定し蔑んどるんです。 特に、あるパワフルだが習得の難しい言語のユーザーと思われる人たちは酷いとです。 Java使いを低脳IT土方と蔑み、VBとDelphi徹底的に否定するとです。 彼らは、使いもしないのにDelphiスレに現れ暴言を吐きまくるとです。
所詮は道具、とかいってるわりにはかなりこだわってるじゃないかww
∧,,∧ やほーう
ミ,,゚Д゚∩
ミ つ旦 ミ
〜と,,,~),,~)
質問っす。
EmEditorのプラグインを作ってるので
VCLを使わずに、AppendMenuでメニューを作っています。
そんでもって、
自分でポップアップさせたメニューにマウスオーバーしたときに
ヒントウィンドウを表示させるという
Windowsのスタートメニューのような動作をさせたいのですが
Halbow氏のページみてて、APIでヒントを表示させようとしてますが
http://homepage2.nifty.com/Mr_XRAY/Halbow/Chap27.html#Chap27-5 動作はわかるのですが、自分で作成したメニューに対して
ヒントウィンドウを表示させる方法がわかりません。
ご存じでしたら教えてください。よろしくお願いします。
道具に愛着を持つのもまたプロさ
いやむしろ、EmEditorスレにコテハンで。
>77 function TToolTip.AddToolじゃねーの?よく見てないけど。
82 :
デフォルトの名無しさん :2007/10/16(火) 01:26:48
キーボードでプログラムを書き込めばできるよ
84 :
デフォルトの名無しさん :2007/10/16(火) 01:33:51
リンク先の数字部分はフラッシュアニメーションで作られているみたいだね。 まず、文字のアニメーションのデータを作成するところから始めればよいかと・・
>84 出来たのかよ!!w
しかし.NETはMSの壮大な釣りだったな・・・ IDEねぃてぶに戻してもらえないのだろうか・・・
88 :
デフォルトの名無しさん :2007/10/16(火) 08:57:43
>>85 人の温かさを知りました。 ありがとうございました。
89 :
デフォルトの名無しさん :2007/10/16(火) 14:54:23
TChartみたいにグラフを描けて、 かつ、横軸に日付を使えるコンポーネントありますか?
自作というコンポーネントがありますよ
>>70 俺は毎日のようにユンボに乗っている真性土方だが、8年くらい前に買った
Delphi 5 Professional で今もプログラミングを楽しんでいる。
92 :
デフォルトの名無しさん :2007/10/16(火) 22:38:28
>89 TChartじゃだめ?日付時刻型=Double型なので、X軸の値として日付をそのまま入れていけばOKだと思うけど。
TStringGridはXPのLUNAなどのスタイルに対応していないのですか?
全く対応していないというわけじゃないけど、事実上対応していない。TMSあたりの有償コンポーネントを 使用すれば幸せになれそう。
97 :
89 :2007/10/17(水) 08:46:38
>>93 じゃ、TChartしてみます。
やっぱ、それしか無いですか。
それしかないというかグラフぐらい自力でやるのがよくね? どこまでも他力がいいなら表計算に投げるとか。
99 :
89 :2007/10/17(水) 09:42:00
>表計算に投げるとか。 それはそれでエラー処理が大変だったり。 なんていうか、VCLワールドなんだから、ハイパーなコンポを入手したいじゃない。 (自分のコンポを人に提供したりもしますし)
だから、だれかがハイパーなコンポをつくらなきゃならん 今回のは君の番だということ
>>99 コンポにしようとすると結構大変なこと多い。
でも自家用専用と割り切れば以外にあっさりできちゃうもんだぜ?
実際コンポである必要ないんだろ?
TPicture とかに直に書いちゃえばいいやん。
102 :
89 :2007/10/17(水) 10:56:03
>>100 >>101 あ、そうだよね。
だから自分、他人のちょっとしたコンポを手に入れて、
自分用に書き直したり、拡張したりする作業が好き。
VCLだと本当にコードが短くて作れるし。
すいません。外部DLLの使用で質問です。 SAMPLE.DLL という、Visual C++で作成されたDLLがあります。 で、APIが下記のように公開されています。 BOOL APIENTRY MyCopyFile(long lType, LPCSTR szBefore, LPCSTR szAfter); この場合、Delphiで使うには、どのように宣言してやればいいんでしょうか? 一応下のようにしてみたんですが、うまくいかないみたいで… function MyCopyFile(lType:Integer; szBefore:PChar; szAfter:PChar):Bool; stdcall; external 'SAMPLE.DLL';
APIENTRY = stdcall ならそれで合ってるよ
Canvas.MoveTo()などをPanel内に書くことは可能ですか?
Panel.Canvas.MoveToってやりたいってことだとエスパーすると Canvasが公開されてないからできないよ。 Handle は公開されてるから工夫次第では描画できそうだけども それは有識者に任せるよ。
TPanelの上位クラスのTCustomControlに >protected >property Canvas: TCanvas read FCanvas; があるけど? だから、TPanelを派生したコードからは自由にアクセスできるし。 ま、派生が出来ないへタレだったらTPanelExとしてCanvasをpublicすれば良いんじゃね? (って良くないけど)
言いたい事は、コンポーネントの派生でやってねってこと。 protectedはクラスの派生コードからはアクセスできます。 で、画面に貼る時ですが、メンドウだったら、 TFormにPanel1を貼っといて、 TFormのCreateかOnCleateで、 MyPanel := TMyPanel.Creat(self); MyPanel.Align := alClient; MyPanel.Parent := Panel1; とかしとけば、実行時に派生パネルを貼れる。
おまえも中途半端なヘタレだな。別に派生パネル貼る必要は無い。 TMyPanel(Panel).Canvasと アクセスする時だけクラックすればよい。
PaintBox 貼るだけ
2Dで点をうっていくグラフィックを描く場合TBitmapのScanLineより速い方法ってありますか? DirectXのテクスチャに描くと速いんですかね。
113 :
101 :2007/10/18(木) 08:30:28
>110 見て気付いたけど TPicture でなく TPaintBox だわ。スマソ
115 :
デフォルトの名無しさん :2007/10/18(木) 17:29:53
どなたか教えて下さい。Delphi6です。 目的の項目があるStringGridをクリックして 4列目をファイル名とするJPGファイルを表示したいのです。 ファイルがある時はいいのですが、ファイルがないときに nophoto.jpgを表示したいのですが、表示されずエラーに なります。 irow:=stringGrid1.Row; strng:=Stringgrid1.cells[4,irow]; fname:=dirphoto+strng+'.jpg'; Jpeg :=TJpegImage.Create ; try Jpeg.LoadFromFile(fname) ; Image1.Picture.Assign(Jpeg); except fname:=dirphoto+'nophoto.jpg'; Image1.Picture.Assign(Jpeg); end; Jpeg.Free; 一回、Jpegを開放してみましたがやはりダメでした。 except Jpeg.Free; Jpeg :=TJpegImage.Create ; fname:=dirphoto+'nophoto.jpg'; Image1.Picture.Assign(Jpeg); end; Jpeg.Free; どうしたらいいのでしょうか???
>>115 exceptでJpeg.LoadFromFile(fname) してないように見えるが
117 :
デフォルトの名無しさん :2007/10/18(木) 17:52:34
> 116 ありがとうございました。おっしゃるとおりでした... 1時間、あれやこれやと試したのに、こんな原因とは.. ほんとうにありがとうございました。
でもこれってtry..exceptでやるよりもFileExistsで存在確認したほうがいいよね。
FileExistsが真だと判断した直後にファイルがなくなる可能性も考えられる、 と、この手の問題でよく言われるので、例外処理は必須。
うぉ、勉強になった^^
デコードエラーの可能性もあるしな
>>96 TabControlをXP風オーナードローするのもTheme使えばできますか?
XPタブで文字色を変えることができませんでした。
>>77 いまさらな遅レスだけど、ポップアップメニューは、EmEditor の UI と
統一性が無いんでどうかなーっと思わなくも無いような。
Editor_SetStatus を使ってステータスに表示するのがよろしいかと。
↑下の間違い ×ポップアップメニュー ○ヒントウィンドウ
>>125 どもです。
Del8以降は購入してないのでHelpは見れないです。
OpenThemeData(Handle, 'TAB');
でとりあえずはテーマハンドルを取得できたので色々試してみます。
サードパーティ製のコントロールを使ったほうがいいような気もしますが。
超ど素人の質問で申し訳無いが・・・ Delphi2007アカデミックパッケージ買った場合 何か問題ある?
購入しただけで問題になるようなパッケージは発売されておりません
赤福も比内鶏も、購入だけなら問題ないよね。
Del2007とDelphi7を併用しているんだけど、 Del7でDel2007の「リファレンスを検索」と同等の、IDEからクロスリファレンスを引く機能が 使える拡張ってないです? 一番あり得そうなCastaliaにも付いてないっぽい・・・
シェアウェア・フリーウェアを配布できるのかを聞いているのだと思う。
郵便番号と住所の相互変換をやろうと思っています。 日本郵政のサイトから郵便番号データをもらってきて、 チョット加工して、データベースに取り込みました。 それで、郵便番号を住所に変換するのは、うまく言ったんですが、 住所を郵便番号に変換するのにチョット躓きました。 住所の文字列を後方から、一文字づつ消去しながら、データベースに問い合わせ 見つかったらOKてのを考えましたが、いかんせん非効率です。 皆さんは、どうやって実装してるの?
ssVerticalはどのユニットで宣言されているんでしょうか?
当方プログラミング初心者ですが、 delphiでHTMLとPowerPointのスライドショーを切り替えるプログラムを 作成しようと取り組んでいます。 自分なりにネットで調べ、 ファイルを指定してPowerPointのスライドショーを開くところまでは なんとかできたのですが、下記の仕様を実現するのに、 手掛かりが無く、手も足も出ない状態です。 どなたかご助力頂けないでしょうか。 ・各スライドの自動再生時間を取得したい。 (HTMLとの切替を行うため、スライドショーを終了する時間を得たい。) これが取得できれば、全スライドの再生時間を積算し、 HTMLとの切替を行えると考えたのですがだめでしょうか。 ちなみに、下記のコードを走らせた場合、 PowerPointを起動していないと正しく実行できず、 PowerPointへのアクセス(?)ができていないのだと思いますが どうすればよろしいでしょうか? (ShellExecuteで起動するのも一つの手だと思いますが) VBAでやるほうが手っ取り早い気もしますが、 今頑張って取り組んでいるDelphiで実現できればと考えています。
136 :
135 :2007/10/22(月) 19:05:42
procedure TForm1.Button1Click(Sender:TObject); var PowerPointApp:OLEVariant; begin try PowerPointApp:=CreateOleObject('PowerPoint.Application'); PowerPointApp.Presentations.Open('Tmp.ppt',False,False,True); PowerPointApp.ActivePresentation.SlideShowSettings.Run; except Exit; end; end;
137 :
デフォルトの名無しさん :2007/10/22(月) 19:39:49
無料の Delphi をインストールしていろいろ実験中です。このような事を実現したいのですが 可能でしょうか。 ネットワーク上のあるファイルを監視してそのファイルを誰か他の人がアクセスしたことを知り たいのです。何かズバリ使える命令とかないでしょうか。 また初心者向けのコマンド集みたいな本とかホームページがあったら教えてください。
>>135 バージョンも書かずに質問とな?
TPowerPointApplication等が使えるなら使え
そうじゃないならタイプライブラリ取り込め
生ログを解析した方が早いだろ。 それかサーバーに監視モジュールを組み込むか。
ではその生ログをDelphiで解析できますか?
>>138 失礼いたしました。
使用しているのはDelphi6.0Proです。
TPowerPointApplicationは無いようです。
タイプライブラリについてヘルプを読んでいますが
難しそうですね・・・自分なりにちょっと読み込んでみます。
>>131 ピンホーン
赤福怖いのでバージョンアップ版にしますた(w
9月21日までなら37800円で買えたのを知りちょっとショック・・・
143 :
135 :2007/10/22(月) 21:35:17
>>138 PowerPointのタイプライブラリを
Delphiに取り込むところまで辿りつきました!
ソースを眺めてますが
どれが欲しいものか解りません・・・orz
こんにちは。 Delphi7以降の record について質問です。 recordのコンストラクタは、パラメータなしだと宣言できないのですが、 あれってどういうことなんでしょうか? つまり Hoge := THoge.Create; は、できず(宣言できない)、 Hoge := THoge.Create(1234); みたいにしか使えないのですが、後者だけしかできないと、 コンストラクタが classのように使える、という意味合いにおいては、意味なくありませんか? 結局、record の場合コンストラクタは使わずに、 Hoge.Initialize; Hoge.Initialize(1234); みたいに、してしまうのですが・・・
レコードのコンストラクタ????????????
>>140 問題は生ログの取得方法。 もちろん取得できれば解析可能。
>>145 ヘルプを読めば馬鹿でも分かるような理由が書いてあったと思うが、記憶違いかな?
本人乙 そんな書き込みしてる暇があるなら調べろよ
違うしw
ListBoxのスムーズスクロールをオフにするにはどうすればいいでしょうか? あれ重いんで切りたいんです
Windows
154と155の意味がわかりません
重いスムースって、おもしろいな
>145 これか。Delphi 2007のヘルプから引用。 | レコードにはデフォルトの引数なしコンストラクタがあるため、ユーザー定義の | レコード コンストラクタは必ず 1 つ以上のパラメータを持つ必要があります。 >153 XPだとコントロールパネルのシステムの詳細設定のパフォーマンスのリストボックスを 滑らかにスクロールするをチェックオフ。要はWindowsの設定に依存すると>154は いいたかったと思われ。 >157 確かに。
いままでコンソールアプリケーションでプログラミングをしていて、最近イベント駆動型のプログラミングを始めたのですが、 for文を使用しようとするとエラーが出るのですが、原因がわかりません… [エラー] Unit2.pas(56): 制御変数がくるべき所に構文エラーがあります。( := の代わりに = と書かれている可能性があります) このようなエラーが出てしまいます・・・・ for ii:=1 to 100 do begin tama[ii].y1:=tama[ii].y1+4; tama[ii].y2:=tama[ii].y2+4; Canvas.Ellipse(tama[ii].x1,tama[ii].y1,tama[ii].x2,tama[ii].y2); end; for文はこのような感じなのですが何か問題があるのでしょうか?ご指導お願いします。また、下記のようなfor文でも同様のエラーが出ました。 for ii:=1 to 100 do writeln;
>>159 問題があるとすればお前の質問の書き方
エラーを再現できる最小限のコードを晒す場合は一部じゃなく全部晒せ
他に問題があるかどうか分からないだろボケ
>>160 なんかおまえは趣味と暇つぶしで質問に答えてるというより、職業になってる。NEET?
半角の?を使う奴はどうして変な人が多いんだろう
雑魚は質問者の質問に答えられなくても誰も咎めたりしないから、
>>160 みたくがんばって質問に答えなくていい。
以上。
フサ〜CGスレに何年も常駐していたらそりゃ心も荒んでしまうってもんだ
どう見ても
>>159 の質問の仕方が悪いんだろ・・・
>>159 ループの中身をコメントアウトしてコンパイルGO!
>>160 の言ってることは正論だろ
中身さえあってれば充分だし、2chで優しく答えてもらえると思ってるやつは頭おかしいだろ
だとしたらこのスレはいらないな
敷居の低い言語のスレには高確率で池沼が沸くな。
>他に問題があるかどうか分からないだろボケ ワロタw
俺がいいたかったのは
>>160 は正論だけど、煽ってまで、そんなに
誰かの質問に答えたい
のかよってことだけ。
そこまでして心満たされたいならまぁ頑張ってくれ。
>>167 からどうやってそれを摘み取れとwwwwwww
摘み取るんじゃなくて汲み取るんじゃないの?
質問に答えられないなら黙っていればいいのさ♪
vista非対応の古いdelphiで作ったソフトが vista上で動いたんだけど・・・ これって、問題無いと思っていいの? やっぱ、2007で作らないとまずいのかな? バグ取りを考えるとvista上で2007を使って作った方が楽そうだけど・・・
>>172 Delphiの前に日本語を勉強なさった方がよろしいかと存じます
>>175 結論出てんじゃん
そういうのはチラ裏に書いとけ
>>1 で書いてあるとおり、本当に超低レベルな質問ですけど、
RTLって、何の略なんですか?
STLは分かるんですが・・
>>175 Delphi 1.0 以外ならなんの問題もない
181 :
135 :2007/10/26(金) 22:39:05
前述のアプリの作成についてアレコレ悩んだあげく、 PowerPointのスライドショー(0001.pps)をShellExcuteで開くことにしました。 そこで、一定時間経過したあと、0001.ppsのウインドウを閉じたいのですが、 ハンドルが上手く掴めません。 YPT HandleXというツールで調べた結果、以下の事は解りましたが、 ClassName : paneClassDC ParentText : PowerPoint スライド ショー - [0001.pps] ParentClass : screenClass FindWindowをあれこれ試してみましたがどうにもうまくいきません。 どうすればよいかご教授いただけませんでしょうか。 また、ネットで調べていると、 ファイルを開いた後で操作が必要な場合、 ShellExcuteExで開く方が良いという情報を得ましたが、 ShellExcuteExで開こうとするとアプリの関連づけができていないと言われ、 上手く開けませんでした。 当方はDelphi6Proで取り組んでおります。 ご助力のほど、よろしくお願いいたします。
同じImageを100個程度使ったゲームを作成したいのですが、自動生成方法がわかりません・・・・・・ わざわざ予めImageを100個Formに配置しておかなければいけないのでしょうか? 変数に画像ファイルなどが格納することが出来る型などがあるのでしょうか?
TImage は、画像を保持して表示するためのクラス。 画像を保持するだけなら、TBitmap とか TJpegImage とかのクラスをつかって それを配列でもつとよい。
(1)フォームのprivateにTImage型の配列(100要素)を作成。たとえば :(略) private GmImage:array[0.99] of TImage; public :(略) (2)FormCraeteにこう procedure TForm1.Form1Create(Sender:TObject) var I:Integer; begin for I:=Low(GmImage) to High(GmImage) do //←Low()とHigh()を使えば要素数を書き換えなくても済む begin GmImage[I] := TImage.Create(Self); //←これが肝心 GmImage[I].Parent := Self; GmImage[I].LoadFromFile(Format('Image%03d.bmp')); end; end; (3)FormDestroyにこう procedure TForm1.Form1Destroy(Sender:TObject) var I:Integer; begin for I:=Low(GmImage) to High(GmImage) do begin GmImage[I].Free; end; end; //ちゃんと動くかどうかは試してない
>Format('Image%03d.bmp') Format('Image%03d.bmp',[I]) かな?
>>181 閉じたいウィンドウは子ウィンドウなの?
子ウィンドウは FindWindow では検出されないよ。
FindWindowEx を使う。
>>183 同じものなら複製する必要無いと思うのですが。
>>180 >>182 サンクス。
これで安心出来ました。
2007届いたんだけど・・・
ユーザー登録出来ない・・・
日本語で書いてくれーーー(ww
2007だけど・・・ DSKファイルが無い・・・ 代わりに何を消せばいいの?
もうすぐユニコードに対応した2008が出るというのに…
ユニコード対応なんてイラネ
>188 CDNのアカウントを作成するところからスタート。
for i:=1 to 50 do begin x:=x+5; y:=y+5 Canvas.Rectangle(x,y,x+10,y-10); end; このようなプログラムで実行してみると、残像が残ってしまうのですが、残像を残らないようにする方法ってありますか?
背景色で塗りつぶしてから新しく描けばいい ↓ 画面がちらつくんですがどうしたらいいんですか?
>>191 ×イラネ
○俺には扱えね
でしょ?(笑)
>>190 VISTAで動かねーなんて今頃言われてビビッて注文してしまった・・・
キャンセル不可の注文した後で旧delphiのソフトでもちゃんと動くのも発見したけど、あとの祭り(ww
でもちゃんと動かないのもあるので、ま、よしとしよう・・・
>>192 登録が英語で何を書いていいかわからない(ww
Company:<会社名?
State/Province: ???
Zip/Postal Code: ???
Country: <これが国名か?
Language: <日本語か・・・
取り合えず、住所と名前だけでユーザー登録させて欲しいよな(ww
ziipも知らずにプログラムを書いてるのかwwwwwwwwwwwwwww
2007は、プロジェクトの上にプロジェクトグループが出来た。 プロジェクト開いていたら、みんな同一のプロジェクトグループに登録されていた。 プロジェクトグループ内のプロジェクトは、一括でコンパイルできてびっくりした。 でも同一のプロジェクトグループに登録する必要はないから分けたけど・・・ あ、ボタンを貼り付けたいんだけど、どこにあるか分からない(ww リストとか、どこにあるんだろ? まだ慣れるまで時間がかかりそう・・・
>>198 あ、ド素人だもん(ww
BASICの延長ぐらいの使い方しかしていない
不要な機能満載。
簡略版を安値で出してくれると嬉しいのだが・・・
赤福の後だけに、さすがにアカデミーパックは買えなかった(ww
>>200 圧縮形式のzipに掛けて釣ったつもりだった
今は反省している
203 :
202 :2007/10/28(日) 22:44:44
>>196 Vistaのサービスパックが出たら2008に買い替えないと、2007じゃプログラムが暴走するんだぜ?
で、最悪パソコンが壊れる。
>197 Company 会社 State/Province 州または郡、県(日本なら都道府県) Zip/Postal Code 郵便番号(USでは郵便番号をZIP codeという) Country 国 ってか中学生レベルだろ、このくらい。exciteとかalcとかで訳すという手もあるし。
>>201-206 大感謝。
これで、ユーザー登録できる。
訳して頂いたら、超ド級の素人質問だと分かった(ww
うーん、英語嫌い・・・
動かないソフトの原因が分かった。 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\ ここの書き込みに失敗していて エラーをフォローしていなかったので停止しちゃったらしい・・・ VISTAだと、ユーザー権限とかいるのかな? XPまでは問題無かったのに・・・
>>207 お蔭様で、2007のユーザー登録完了しました。
大感謝。
210 :
デフォルトの名無しさん :2007/10/29(月) 04:19:57
TStringListについて質問。 以下のソースを書いてコンパイルしたら 「[警告] Unit1.pas(1234): 変数 'st' は初期化されない場合があります」 と怒られてしまいました。 procedure TForm1.Button1Click(Sender: TObject); var st:TStrings; begin try st := TStringList.Create; st.Text := 'あいうえお'; finally st.Free; end; end; stを初期化すればいいのかと思って st.Clear; を Create の次の行に入れてみたりしたのですが 警告が消えてくれませぬ。 こういう場合どうしたらいいのでしょうか。
procedure TForm1.Button1Click(Sender: TObject); var st:TStrings; begin st := TStringList.Create; try st.Text := 'あいうえお'; finally st.Free; end; end;
var st:TStrings;
213 :
210 :2007/10/29(月) 04:50:16
>>211 ありがとうございます、本当にありがとうございます。
いろんなサイトを見ても原因が分からなかったのですが、tryと順序が逆だったことには
まったく気付きませんでした。orz おかげさまで 「初期化されない場合が〜」 地獄から脱出出来ました、多謝。m(_ _)m
>>213 try〜finallyはtry内部で例外が起こってもfinallyで確実に処理をするためのもの
TStringList.Create等のコンストラクタで例外が起こった場合自動的に内部でデストラクタが呼ばれるため、
try内に書いて例外が起きた場合にfinallyのstはすでに解放された後となってしまう
なので初期化されない場合が起こり得る
インスタンスの開放云々というより stへの代入前にfinallyに飛ぶ可能性があるってことやね。
>>214 の説明だと、
st := nil;
try
st := TStringList.Create;
でも二重に開放されることになる。
一つのImageをいろんな場所で使えるようにする方法ってありますか
220 :
219 :2007/10/29(月) 16:27:01
いろんな場所という表現はちょっとわかりづらいですね。 Form内で同じ画像を複数個使用したいということです。
複数のImageコンポーネントを使う ひとつのImageコンポーネントを大きくしてCopyRectする
>>219 TPaintBox を貼り付けて OnPaintで Draw すればいいと思うよ
Assign のことか?
224 :
223 :2007/10/29(月) 22:12:57
TImage と「画像」を混同してるのが原因。 画像は一つ。TImageは複数。なんの問題もない。
TBitmapに画像入れて、Form.Canvas.Draw(X, Y, Bitmap) で描画できるよ。
Delphiで作ったDLLからcdeclでPcharを返そうとすると4Kbyteを越えた辺りで 返ってくる文字列の末尾がおかしくなり始め、数十Kとかいくと、呼び出し側のアプリが落ちてしまうんですが何なんでしょう? 値を返した後に呼び出し側が受け取る前にメモリの寿命が尽きてるんでしょうか?
>Delphiで作ったDLLからcdeclでPcharを返そうとすると4Kbyteを越えた辺りで こんな仕様・制限はあるわけがない。 頑張ってデバッグするか最小の再現コード晒すかしろ。
library BW_StrLib; uses Windows,Forms,SysUtils; {$R *.RES} function Test(const strTextIn:Pchar):Pchar;cdecl var ls_result : AnsiString; li_len : integer; begin li_len := Length(strTextIn); SetLength(ls_result,li_len); ls_result := strTextIn; Result := Pchar(ls_result); end; exports Test name '?Test'; begin end. こんな感じです。 ホントは色々処理があったけどこれでも同じく落ちました。
スタックで宣言した文字列を返してないか? たとえば、 function DLLGetStr: PChar; var S: string; begin S := IntToStr('12345'); Result := PChar(S); end;
231 :
230 :2007/10/30(火) 00:37:15
あ、ビンゴでしたね。 Test の end で ls_resultは開放されるよ。 だから、呼び出し元ではすでに無効。 4KBというのはページングの単位だから。 代入は ls_result := strTextIn だけでいいよ。 で、解決方法は、代入用のバッファをアプリ側で用意してDLL側に渡し、 DLL側でコピーする。 WindowsAPIはそうやってやってます。
呼び出し側でバッファを用意するのが難しそうですがやってみます。 ありがとうございました。(^^)/
うむ・・・・Labelを100個(Label1〜Label100まで)作ってそれぞれtest[1]〜test[100]までの値を代入したいのですが、for文使ってできますか? Label1.Caption:=test[1]; … Label100.Caption:=test[100]; これをどうにかしてfor文でやりたいんですが・・・
FindComponent
リストの中に入れとく方が楽
フォームが不要なので、コンソールアプリケーションを作成しましたが、 コンソールウインドウが一瞬チラッと出てしまいます。 これが出ないようにするにはどうすればよろしいでしょうか? 開発環境はDelphi6.0Proです。
ディスプレーの電源を切る
{$APPTYPE CONSOLE}
>>231 ちょっと気になったのですがメモリが開放されると言っても
ページングサイズ以下の文字列や数値は229のソースでも戻り値を保障されるのでしょうか?
>>238 プログラムユニットから240を排除する。
プログラムユニットってなんですか?
プロジェクトファイル(*.dpr)のことである。
>>241 Word型やLongInt型の数値はレジスタで返されるのでメモリ開放とは関係ない。
文字列については保障されないでしょ。
var S: string;
S := Test(xxx);
のように、すぐにコピーする場合、
DLL側のメモリマネージャが開放されたメモリをOSに返すと問題になるけど、
保持したままだと、AVは出ないんじゃないかな。
ページングサイズは関係ないかも。 サイズが大きくなると、
それだけOSに返しやすくなるのかも。
でも、
P: PChar;
P := Test(xxx);
で受け取って、Pを使いまわしていると、DLLで何かメモリ操作すると
すぐにおかしくなりそう。
あと、4KB以下と決まってるなら配列で返す手がある。
コピーが二回発生するから遅くなるけど、最近のPCなら問題ないでしょう。
でも、そういうコードあまり見ません。
DLL側をグローバル変数の文字列にして、そのアドレスを返す手もありますね。
すぐにコピーしないと危険ですが。
ぐだぐだ考えるより、APIと同じように呼び出し側でバッファを用意すべき
Delphi 2006の無料版でADOでTADOQueryを使ってテーブルを新規作成しようとしているのですが 以下のようなエラーになってうまくいきません。 --------------------------- デバッガ例外通知 --------------------------- プロジェクト xxxxxxxx.exe は例外クラス EOleException (メッセージ 'ファイル '《中略。実行ファイルのあるディレクトリ》\temp_xxxxx.mdb' が見つかりませんでした。')を送出しました。 --------------------------- ブレーク(B) 継続(C) ヘルプ --------------------------- 主なプロパティの値はこんな感じです ・ConnectionString Provider=Microsoft.Jet.OLEDB.4.0;Data Source=temp_xxxxx.mdb;Persist Security Info=False です ・SQL CREATE TABLE temp_awkcp (ORIGINAL_NO INT, CODE VARCHAR(40), 《中略》 EXPRESSION VARCHAR(80)); ADOでのテーブル新規作成については根本的なところが全く分からないのですが 検索を掛けても情報が出てこないので質問した次第です。
248 :
デフォルトの名無しさん :2007/11/01(木) 04:19:37
バリアント型の多次元配列をやり取りしたいのですが、 動的配列とバリアント配列(Safe配列)どちらがお勧めでしょうか?
自分が扱いやすいと思った方
>>248 ありがとうございます。
どのデータベースを使うかを書いていなかったので大失敗だったのですが
おかげさまで問題を解く鍵になりました。
くだすれ41に出てきたCSVの人と似たような仕様のを作りたいんですが、 数値オンリーのCSV(1000〜2000行、2列)を 二次元配列x:double に放り込んでいくところで挫折しました。 マイナスの値もあるので、難しいです。 コード例等を示してもらえませんか?
253 :
252 :2007/11/02(金) 09:01:33
くだすれ41に出てきたコードを使ってみました 1,11 2,12 3,13 4,14 5,15 6,16 7,17 8,18 というcsvデータを入力すると
254 :
252 :2007/11/02(金) 09:02:19
1,2 11,12 2,3 12,13 3,4 13,14 4,5 14,15 5,6 15,16 のように解釈されていました。
255 :
252 :2007/11/02(金) 09:03:17
例のコードです。 procedure SkipBlank(var p: PChar); //空白ならスキップする begin while p^ in [#7, ' '] do inc(p); end; function GetDotNum(var ptr: PChar; var retVal: Extended): boolean; var s: string; DotCnt: Integer; Minus: boolean; p: PChar; begin Result := false; p := ptr; SkipBlank(p); if p^ = #0 then exit; DotCnt := 0; Minus := false; if p^ in ['+', '-'] then begin minus := p^ = '-'; inc(p); SkipBlank(p); end; while true do case p^ of '0'..'9': begin s := s + p^; inc(p); end; '.': begin inc(DotCnt); if DotCnt >= 2 then break; s := s + p^; inc(p); end; else break; end; if s <> '' then begin ptr := p; retVal := StrToFloat(s); Result := True; if minus then retVal := -retVal; end; end;
256 :
252 :2007/11/02(金) 09:04:12
procedure TForm1.Open1Click(Sender: TObject); var SL: TStringList; i, j, k: integer; nam: string; dt: Extended; p: PChar; begin if opendialog1.Execute then begin for k := 0 to High(x) do begin x[k][0] := 0 ; x[k][1] := 0 ; end; SL := TStringList.Create; try nam := OpenDialog1.FileName; SL.LoadFromFile(nam); for i := 0 to SL.count - 1 do begin p := PChar(SL.strings[i]); for j := 0 to 16 do begin if p^ = #0 then break; if not GetDotNum(p, dt) then break; SkipBlank(p); x[i][j] := dt; if p^ = ',' then inc(p) else if copy(p, 1, 2) = ',' then inc(p, 2) else break; end; end; finally SL.free end; end; end;
CommaText
CSVの入出力はもうFAQの部類だと思うけどな。 var I, J: Integer; Line, Lines: TStrings; begin -- ごにょごにょ -- Line.QuoteChar := '"'; // 引用文字 Line.Delimiter := ','; // 区切り文字 for J := 0 to Lines.Count - 1 do begin Line.DelimitedText := Lines[J]; for I := 0 to Line.Count - 1 do X[J,I] := StrToInt(Line[I]); end; end;
>>258 CommaText プロパティは,区切り文字が ',',引用符が '"' の DelimitedText プロパティと同じです。
260 :
252 :2007/11/02(金) 14:22:54
ありがとうございます。 QuoteCharとDelimiterというプロパティの表現が気味悪いというか、 理解に苦しんでいるんですが、 読み込み元のファイルにQuoteCharがあるとどういう動作をするのでしょう? Line.DelimitedTextにコンマで区切られた一行の文字列をぶち込むと Lineの内部に配列が生成されて、Line[0]と指定すれば配列の[0]番を取り出せるという解釈で 合ってますか?
実際にコードを書いてそういう動作をしたならそういうことでしょう
>>259 俺に言うなよ。んなこたぁ知ってる。
>>260 そんな感じ。まぁ、QuoteCharは例えば、カンマ区切りのCSVの場合、要素にカンマ自体
が含まれてると、区切りのカンマか、要素の単なる文字としてのカンマが区別つかない
ことがあるから、引用文字で引用?エスケープする。
まぁ、どんな動作かは、読み込みじゃなくて書き込みでQuoteCharとDelimiterを変えて、
どんな出力になるか見たほうが理解しやすいかも。
vb.NETの2003から TurboDelphiに移行して数日、色々やっている中、どうしてもわからないので教えてください。 集合型を宣言した変数の中に、特定の識別子が含まれているかどうかをif分を使って判別するコードについてです。 if 識別子 in 変数 then begin 含まれる場合 end; else begin 含まれない場合 end; というところまでは理解できたのですが、含まれていないことを判別する為にはどうすればよいでしょうか? inを否定する関係演算子を探したのですが見つからないです。 VBで言うところの if not 識別子 in 変数 then 含まれていない場合 end if ということをやりたいのですが。 かなり初歩的な質問で申し訳ないです。 if 識別子 in 変数 then else begin 含まれない場合 end; という形でやんないと、駄目ですかね? よろしくお願いします。
識別子 in 変数 の結果はBoolean型だから if not (識別子 in 変数) then
THX ここ2時間の苦労が物の数分で解けました。
Delphi(デルファイ)について、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だか分からない質問を 勇気を持って書き込むスレッドです。 Delphi使いが優しくコメントを返しますが お礼はDelphiの布教と初心者の救済をお願いします。
269 :
252 :2007/11/02(金) 21:10:47
>>262 やっとDelphiいじれる時間になったので
いろいろ変えてやってみます。
270 :
252 :2007/11/02(金) 21:51:13
疑問が解決したのでご報告します。
>>254 に書いたように配列の並びがおかしくなっていた原因は、
StringGridの行と列の表現が自分の使っていた二次元配列のものと反対になっていたからでした。
くだらねぇ・・・ って、スレどおりか
やっぱり再現可能な最小コードを出さないと。
TFormのPositionを最初からpoScreenCenterにしたくても アプリ起動時に設計時の位置に一瞬表示されてから画面中心に移動するんですが これはどうやれば回避できますか?
Indy は非同期じゃないから使えねーとかいってるやつって馬鹿? そもそもWinsockの非同期モードなんてマルチタスクのないWindows3.1用に設計されたものなのに・・・ しかもIndyにはTIdAntiFreezeなんていう便利なものまでついてるのに。 無知も大概にせーよ。
そもそもスレッド化すればいいだけの話なのにね。
同胞のDelphiファンが一人減ったか・・・残念。 天国からDelphiを見守ってください。
>>273 したくてもってどういうこと?
少なくてもOnShowより前にセットすればそんなことはないと思うけど。
>>278 書いた後に気付きましたが、初期化にちょこっと時間がかかるアプリなんで
起動完了するまでの内部的なゴタゴタのときに一瞬だけ設計時の位置に表示されてる気がします
どっかに設計時のウィンドウ位置が保存されてんですかね
>>279 疑わしいとこが分かってるなら
ブレークポイントしかけるなりしてデバッグしなよ。
情報を小出しにするのはイクナイ。
>>280 初期化に時間がかかってる云々はこの際関係ないのです
ただ、設計時にpoScreenCenterにしてるのに起動時に一瞬移動するのが見えるのはおかしいだろうと
そこが疑問だったわけです
delphiの仕様でそうなってしまうのかな、とか
ならんよ。初めて表示される前に移動は終わってる。(バージョンによって動作が変わってるなら知らないけど) なんかの処理の副作用とかで、通常表示されるタイミングより前に表示しちゃってるんでないの。
>>281 もしそんな仕様だったらお前の前に気付いてる人が何万もいるだろうとは考え付かなかったのか?
RadioGroupで選択を終えたあと、エンターキーを押すと、 次のタブ(ボタンやテキストボックス)へ移動させたい場合、どのようにしたらいいですか?。 テキストボックスだと、OnKeyPressのイベントで仮想キーを送ればいいのですが、 RadioGroupだと、それらしきイベントが無くてわかりません。
FormのKeyPreviewをTrueにしておいてFormのOnKeyPressで処理、だったかな?
>>284 ありがとうございます。
KeyPreviewとOnKeyPressをGoogleで調べてみます
delphi6で作ったprojectをturbod delphidで作りなおそうと思ったら、 エラーだらけで、編集は無理そうなんですが、 変換とか何か良い方法はないでしょうか? 教えてください。
>>288 ここはdelphiスレなのでturbod delphidスレでお聞きください
俺がdelphi6で作ったプロジェクトは何の問題もないみたいだ
コンポを登録してないんじゃないの
うんこもりもり
294 :
デフォルトの名無しさん :2007/11/04(日) 17:49:42
えー、瑠瓏さんって、亡くなっちゃったのか… まだ若いはずだろ?ショックだ。
295 :
288 :2007/11/04(日) 21:36:07
>>288 です
>>291 TShellTreeViewでエラーが出ます。
何か名前が変わったのか、変わりになるものがありますでしょうか?
ない
>>297 失礼しました、D2007ではなくTurboの話なのですね。
Turboは未確認ですm(_ _)m
>295 どういう局面でどういうエラーが出るの?
>>295 BDS2006だと
%ProgramFiles%\Borland\BDS\4.0\Demos\DelphiWin32\VCLWin32\ShellControls
にShell系コンポーネントがありますので
>>297 と同じ手順でインストール可能なのですが...。
# Turboはどうなのでしょう?
Turboも同じ 但し、無料版はコンポのインスコは出来ない(事になっている)というのがあるけど
302 :
288 :2007/11/05(月) 06:43:37
動的
305 :
デフォルトの名無しさん :2007/11/05(月) 20:58:24
こんばんわ。Delphi7なのですが、WideStringの文字列の中に半角の英数字が 含まれているか、というチェックと、全角の英数字が含まれているかという チェックしたいのですが、どのような方法があるでしょうか。
AnsiString に代入して長さ比べる
sscanfの代わり有りませんか?
>>302 > 無料版のためインスコできませんでした… orz
「無料厨は有料版を買え」と、暗に言いたいんでしょうなあ。
>>303 Updateかけると無効だから、それ。
>>308 みたいな書き込みする人って偉そうでムカつくよね♪
>>308 うちではUpdateかけてもできてるけど。
よくよむとよいよ。
>>311 Updateかけると無効だから、それ。
コマンドライン引数で指定されたCOMオブジェクトを
動的にインスタンス作成・操作するツールを作っています。
CreateOleObjectを使うことでプロパティの取得・設定とメソッドの呼出はできたのですが、
COMオブジェクトから発行されるイベントを捕まえる方法が分かりません。
VB6ではwitheventsを使うことで、
C++ではATLを使ったサンプルを↓で見つける事ができたのですが
ttp://www.s34.co.jp/cpptechdoc/misc/comevent/index.html Delphiではどのように実装すればいいのでしょうか?
分かる方がいたら教えてください。
環境はWinXP+Delphi2005です。
>>312 当局が必死で否定したい気持ちは分かるが、できてんだから仕方ない。
>>313 つまり、スクリプトのようなのを作っていて、
コンパイル時にはどんなプロパティがあるか判らない状態って事だよね?
GetTypeInfo・GetVarDescで舐めてゆくか EnumDispatchPropertiesでイベント型を調べてゆくしかないんじゃないの?
316 :
313 :2007/11/07(水) 11:33:49
>>315 すいません、説明が不十分でした。
呼び出される可能性のあるCOMオブジェクトは全て同じ名前のプロパティ・メソッド・イベントを持っています。
具体的に書くと
・プロパティ:DataType
・メソッド:DataConvert
・イベント:DataChenged
と実装されているCOMオブジェクトが複数あり、その中の1つを選んで使用しようと思っています。
var
object: Variant;
begin
CoInitialize(nil);
object := CreateOleObject(ParamStr(1));
object.DataType := 1;
object.DataConvert();
object := unassigned;
CoUninitialize();
end;
上記のコードで特定のCOMオブジェクトをインスタンス化し
DataTypeプロパティの設定とDataConvertメソッドの呼出はできたのですが、
DataChangedイベントを受け取る方法が分からなかったため質問させて貰いました。
改めてよろしくお願いします。
>>316 インターフェースが同じなら xxTLB.pas を作成させたらどう?
D7までならメニューのプロジェクトから[タイプライブラリの取り込み]
最近のはTLIBIMP(タイプライブラリインポート)ツールってのがついてるそうだ
318 :
デフォルトの名無しさん :2007/11/07(水) 12:31:18
よろしくお願いします。 WebBrowser内で、クリックやダブルクリックされたかどうかを知りたいのですが、 OnClickやOnDblClickに相当するイベントが無いようです。 何か方法はあるでしょうか?
319 :
313 :2007/11/07(水) 15:03:07
>>317 レスありがとうございます。
タイプライブラリの取り込みを試してみましたが
GUID等が固定になっているため、COMオブジェクトの数だけ取り込みを行う必要があり、
また、将来的に使用するCOMオブジェクトの数が増えたり、
内部プロパティやメソッドが増えてdispidが変わる可能性があるため
このままでは使えそうにありませんでした。
IUnkownへ参照とイベント名、用意したイベントハンドラ関数へのポインタを渡せば
イベント発生時にイベントハンドラ関数が呼び出されるような仕組みがあればいいのですが・・・
とりあえず取り込んでみたTLBファイルを眺めて調べてみます。ありがとうございました。
322 :
318 :2007/11/07(水) 16:53:09
>>320 ありがとうございます。
もう少し詳しく書いていただけると凄く助かります……。どうもすみません。
323 :
313 :2007/11/07(水) 17:58:41
>>321 教えていただいたサイトのサンプルと取り込んだTLBファイルを参考にすればなんとかなりそうです。
ありがとうございました。
初歩過ぎてすいません。 配列の宣言数の取得ってどうすればよいのでしょう?
宣言数って何?要素数ならLengthじゃないかね。
要素数の間違いでした。 配列.Length でいいんですかね?
いや、help見た?配列はJavaとちがってクラス型のオブジェクトではない。 Lengthは関数だ。Length(配列)
普通はHigh(配列)
>>328 何と勘違いしたのか分からないが、Delphiの場合それは要素数にならない
要素数にHighはないだろ・・・
普通はHigh(笑)
うわ。SetLengthの前に書いてある。 すいません、めちゃくちゃ見落としてました。
てすと
/ / / ┌────┐ └─┤ │ │ ┃ ┃ │ │ │ │ ┃ │ └────┘
Length(配列)
High(配列)-Low(配列) + 1
>>336 Highが返す値は必ずしも整数とは限りません
はい。
Ord(High(配列))-Ord(Low(配列)) + 1
>>298 ,300
お前知っててわざとやってるだろ?>Turboにコンポインスコ不可
>>334 バーヤバーヤ
普通のTurboにはコンポインストールできるよ。できないのは無償のやつだけ。
342 :
デフォルトの名無しさん :2007/11/08(木) 02:46:45
delphi4のdcc32.exeで実行時パッケージを使わないでビルドできないのですが、 どうしたらよいのでしょう? ヘルプにはIDEのオプションが適用されるようなことが書かれていましたが、 そうなりませんでした。
>>337 別にHighが-1返したって、要素数という意味では
High(配列) - Low(配列) + 1
が
0になるから問題ないじぇねぇかよ。
>>340 "Turbo"としか書いてないのに製品版と無償版が判断できる訳ないでしょうが。
だから
>>301 のヒトもあんな書き方してるんじゃないか。
# アナタの中では"Turbo"と言ったら"Explorer"しかない訳?
いや、というより、 A: array [-5..3] of Integer; High(A) - Low(A) + 1 3 - (-5) + 1 := 8 のことか。High(A) - Low(A) + 1 でなんか問題ある?
3 - (-5) + 1 := 9 ね。
>>344 > "Turbo"としか書いてないのに製品版と無償版が判断できる訳ないでしょうが。
じゃ、質問に答える前に、なんで相手の環境を聞かないんだ?
「あなたの使っている"Turbo"は、製品版ですか?それとも無償版ですか?」と。
まあどっちにしろ、DEKO が釣りやすいというのは本当のようだ。
-1 だって整数というんだよww
可読性に問題がある
普通にLength()使えばいいだけ。あほらし
>"Turbo"としか書いてないのに製品版と無償版が判断できる訳ないでしょうが。 無償でも製品ですが?
>>345 A: array [(-5,3)] of Integer;
とか
A:array[(hoge,hage)] of integer;
のような場合はどう?
>>352 上のは数値の列挙型というのは無いから文法エラーだろ
355 :
328 :2007/11/08(木) 08:19:08
Lengthなんて普通使う場面ないよといいたかったのですが言葉足らずでしたね。 エスパーしすぎた?
356 :
デフォルトの名無しさん :2007/11/08(木) 13:41:39
PRec=^TRec; TRec=record val:Integer; end; var ARec:TRec; としたときに、関数の引数で procedure AProc(R:PRec); とやったら、呼び出し側は AProc(@ARec); じゃダメなのでしょうか。
>>356 それで問題ないと思うけど、心配なら
procedure AProc(var R:TRec);
とすればいいんじゃないの。
358 :
356 :2007/11/08(木) 14:17:07
>>357 ああ、そうか。なんでわざわざアドレス型にしたんだろ...
イミナシorz
普通はHigh君が顔真っ赤にして自演しまくりですね
>>355 Q. 要素数の取得ってどうやるの?
A. Lengthなんて使う場面ない
ってエスパー以前に会話が全く噛みあってないだろ
日本語からやり直せ
361 :
デフォルトの名無しさん :2007/11/08(木) 16:37:16
設定ダイアログを作りきれないような細かい挙動を弄る為に INIファイルに Form1.Button1.Color=$12345 Form1.Label1.Captionr=hello Form1.PublishedIntVar=3 みたいに設定して初期化時に値をセットするようなサンプルコードがあったら教えてください。
>>343 Pascalでは配列の添え字としてあらゆる順序型の値が使えます。
(各種の整数型、文字型、論理型を含むあらゆる列挙型をまとめて列挙型といいます)
たとえばこんな宣言もできます。
var Counts: array ['A'..'C'] of integer;
この場合、High(Counts)は'C'を返します。
一方でPascalはCと違い、整数値と整数以外の順序型の値は厳格に区別されますので上の配列に対して
High(Counts) - Low(Counts) + 1
とすることができません。
そのため
>>339 のようにOrd関数を使って整数値に変換する必要がありますが
配列の要素数を得るならLength関数がありますのでこれを使うことになります。
そんなこともできたのね。
>>343 はそもそも-1が整数じゃないと思ってるところに問題がある
Highでうまくいきました。ありがとうございました、
368 :
デフォルトの名無しさん :2007/11/09(金) 14:25:51
delphi7のTMemoのOnMouseDownイベントで、SelStartとSelLengthを使って マウスポインタのある行全てを選択するようにしました。 マウスボタンを押してすぐに離すとうまく選択できているのですが、 ボタンを押し続けていると選択状態が無くなってしまいます。 これを回避する方法がありましたら教えてください。
370 :
デフォルトの名無しさん :2007/11/09(金) 18:00:17
ステルススイッチを押してビデオキャプチャをしようと思っています。 画面キャプチャは、DSPackのdemoのPlayVideoCapのSnapShot ボタンを押した時のProcedure(SnapShotClick)を使おうと思って います。 ステルススイッチは、汎用USBドライバuusb.sysを使おうと思って いるのですが、データがステルススイッチから送られたのを 検出してSnapShotclick precedureの中身が動くようにするのを どうやって検出したらいいのかが検討もつきません。 uusb.dllはUSBからの信号をあたかもファイルの読み書きのように してくれるとの事ですが、どのようにしたら信号をキャッチして procedureを動かせるようにできますか? 無限ループでずーと信号のありなしをチェックして、信号が あったらループをでてというのは考えましたが、それだと 他の処理ができないですし...
スレッドも使えないのかよカス
>>371 てめぇは黙ってろ童貞
何でその歳で女と付き合えないか、少しは真剣に考えろ!
373 :
デフォルトの名無しさん :2007/11/09(金) 20:35:29
> 371,372 TThreadを調べればいいんですね。分からなかったらまたお尋ねさせてください。 ありがとうございました。
普通にホットキーじゃだめなのか?
いいです
>>362 TINIFILE型
リストボックスでも代用できる。
>>362 気に入ったデザインに変えてから右クリック〜エディタで表示
Iniファイルの使い方をきいてるんだろ・・・
RTTIの使い方じゃね
ボタンを押すとreadmeをメモ帳で表示できるようにさせたいんですが、どうすれば出来ますか?
384 :
デフォルトの名無しさん :2007/11/11(日) 07:54:45
VCで造ってあるdllをDelphiで使用したいのですが、 ヘッダーファイル(*.h)をユニットファイル(*.pas)に変換する ソフトは見つけましたが、pasにしたあと、includeの代わりになる 命令が分かりません。それとも、つくった中身を FormCreate Procefureに書き込んでやるのですか?
Windows.pas みたいに unit にして uses 文で指定するのをすすめる。
386 :
デフォルトの名無しさん :2007/11/11(日) 10:40:33
> 385 なるほど。ありがとうございました。
ちょっとわけあって、TEdit コンポーネントに TStrings型のプロパティを追加したい。 TCostomEdit を継承した新しいコンポーネントで、 private に FItems: TStrings を追加し、 constructor/destructor で作成/廃棄し、 property Items... を published で宣言するだけじゃダメなの? オブジェクトインスペクタで、該当する Items を選択して 編集しようとすると、abstract エラーとかが出るんですけど・・・ ちなみにコンポーネントの開発経験はほぼ皆無です。
388 :
387 :2007/11/11(日) 16:51:33
TStringListじゃなくてTStringsのインスタンスをつくってた、とか?
そんな気がする。 TStringsはabstractメソッドを持つ抽象クラスだから インスタンスを生成しちゃダメ。 宣言はFItems: TStrings;のままで コンストラクタにはFItems := TStringList.Create;と書くとうまくいくはず。
教えてください。 delphiで作成したソフトに認証機能を追加したいのですが、 WindowsXPなどのアクティベーションで使用している ハードウェアハッシュを取得する方法がありましたら ご教授願えますでしょうか。
スレ違いだと思いますよ
TRect型の定数をつくりたい。 たとえば、 const RECTFOO = Rect(10,10,200,150); みたいにしたいのですが、'定数式が必要です'とエラーが出てしまいます。 RectはConstにできないんでしょうか?
つ 型付き定数
Helpみて試しました const RECTFOO: TRect = Rect(10,10,200,150); がダメ… RECTFOO: TRect = (Left:10, Top:10, Right:200, Bottom150);もダメ… いったいどうやるというの?
× , ○ ;
つーか本当にヘルプ見たならサンプル出てるはずなのに…
>× , >○ ; かいけつしました、どうもありがとう。 うっうっ…
エクスプローラのお気に入りメニューみたいに サブメニューをダブルクリックしたらフォルダを開けるようにしたいのですが TMenuItemでダブルクリックイベントを取得するにはどうすればいいでしょうか?
ちなみにクリックしたらどういう動作をするの?
Vista? XPではダブルクリックなんて出来ないけど。
XPだけど出来た。 Spyで見るとWM_LBUTTONDBLCLKは来てるから、それに反応すればよさそうだけど、 メニューループ中だから、ローカルフックしないと取れないかも?
403 :
デフォルトの名無しさん :2007/11/13(火) 16:21:24
TMenuにはシングル・ダブルクリックの検出とと動的な項目生成に対応して欲しいもんだな
Windows のメニューなんだよ。そんなもん対応してられるかよ。
でもサブメニュー開いた時にはOnClick発生とか、妙な事してるよ。
もっと妙にしろってかww
>動的な項目生成 できるじゃん ヘルプ読みなさいよ
サブメニューのOnClickは表示されたときに発生するでしょ。 ダブルクリックの前のクリックで発動するから、 ダブルクリックは検出できないんじゃないの?
→マーク付きの項目の事だろ?クリックしても普通は何も起きない項目。 「サブメニューを〜」ではなく、「サブメニューを持つ項目を〜」だろうな。
411 :
デフォルトの名無しさん :2007/11/14(水) 15:34:07
JVCLを使いたいのですが、どうも今、私が使用している Delphi6Personal(update#2すみ)にはinstallができないようです。 対応は、Delphi 6、Delphi 7、Delphi 2005 (Win32 only) Borland Developer Studio 2006 (Delphi Win 32 and C++ Builder) が対応らしいので、Delphi7が売っていればそれを購入したいので すがどこも販売終了なので困っています。 Delphi6とDelphi 2005はかなり文法から何から違うのですか? (.NET Frameworkが嫌でvisual BASIC.NETからDelphiにきたのに...)
412 :
デフォルトの名無しさん :2007/11/14(水) 16:05:04
まぁ、でも正直言うと、今更Delphi7買うのはもったいない。 そんな、JVCL対応してないからって、Delphi2007じゃなくてその前のバージョン 買うのももったいないような。
414 :
デフォルトの名無しさん :2007/11/14(水) 20:17:23
> 412 あれー ???本当ですね... まぁ、よかったです。嬉しい!!
スイーツのにおいがぷんぷんするぜ
>>411 D6perに入れてたよ
インストーラが入っててそれで入れた記憶がある
D6perのパッケージも入ってるし対応してないって事は無いと思うよ
今はインスコしないでソースだけ指定して使ってるけど
>>411 同じくD6perで入れています。
d6のインストーラはperだと止まるので、
インストーラ改造(数行コメントアウト)して入れた記憶が・・・。
418 :
デフォルトの名無しさん :2007/11/15(木) 10:58:51
> インストーラ改造(数行コメントアウト)して入れた記憶が・・・。 うっ、も、もう少し、詳細を教えてください.. install.bat を読んで流れを見ていますが、jvcll\archive\batichifile\ で、MakeD6.batとMakeD6Per.batでくらいしか違わないような気がしてい るのですが.. それとも.pasをいじったのですか??
領域からはみ出た文字列の末尾を省略文字(...)に 変換するにはどうすればいいでしょうか?
>>419 どうしたいのかは判ったが、「何を」が判らない。
エスパーの召還に挑戦中?
言葉足らずですいません。 TListBoxのテキストがはみ出たとき省略文字(...)に置き換えたいのですが どのようにすればいいでしょうか?
TListBoxにはオーナドローの機能があるので OnDrawItem でヘルプを参考にして その省略文字に置き換えたのを描画すればいい
>>422 のOnDrawItemイベントでDrawTextのdwFormatにDT_END_ELLIPSISを付けて実行すればおk
TWebBrowserで、一時ファイルを使わず OLEVariant(Browser1.Document as IHTMLDocument2).Write(hoge); で表示させるようにしたのですが、次に読み込ませると、先に読ませたhogeの情報に継ぎ足して(前に読ませた情報が消えない)表示されてしまうという症状に悩まされています。 読ませる前にNavigate('about:blank');をいれて見たのですが、これで読ませると先にクリアしたにもかかわらず真っ白になってしまいます。 エクスプローラーのバグ? 解決を見つけた方、ご教授ください。 ちなみにhogeの内容を表示させてみたけれど、こちらには余分な情報はついていませんでした。
>>424 NavigateComplete2イベントやNavigateErrorイベントを監視して
「完全に読み込まれた」のを確認してから次の処理を行うようにすればいいと思います。
>>425 レスありがとうございます。
>NavigateComplete2イベントやNavigateErrorイベントを監視して
これらを監視してもダメでした。OnDownloadCompleteでもダメなようです…
どんなに時間を置いて読み込むたびに「必ず」上記の症状になるので原因は他にあるかもしれません。
エクスプローラ6なのですが正常に終了しないことがあるので、おかしくなってるのかもしれません。困った。
>>422-423 ありがとうございます。
下記のコードでできました。
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
DrawText(ListBox1.Canvas.Handle, PChar(ListBox1.Items[Index]), -1, Rect, DT_END_ELLIPSIS);
end;
>>426 writeする前後にちゃんとopen/closeしてる?
429 :
426 :2007/11/15(木) 22:55:17
>writeする前後にちゃんとopen/closeしてる? どういうことですか? よかったら詳しく教えてください!
>>429 OLEVariant(Browser1.Document as IHTMLDocument2).open();
OLEVariant(Browser1.Document as IHTMLDocument2).write(hoge);
OLEVariant(Browser1.Document as IHTMLDocument2).write(piyo);
OLEVariant(Browser1.Document as IHTMLDocument2).close()
writeし始める前にopen。
一連のwriteが全て終わったらclose。
>>431 EOleExceptionクラスの例外を生成しました。'種類が一致しません'
と、OLEVariant(Browser1.Document as IHTMLDocument2).open();のところでエラーが出てしまいます。
この行をコメントアウトするとうまく通り、思ったと通りの結果が得られました。
削っちゃっても問題なかったでしょうか?
動画のエンコードでフロントエンドがエンコード状況をプログレスバーなどで 表示していますが、ああいうのはどうやって情報を受け取っているんでしょうか?
434 :
デフォルトの名無しさん :2007/11/16(金) 13:58:44
TWebBworser内でクリックイベントを拾いたいのですがどうすればよいでしょうか? OnClickのようなものは見当たらないです
436 :
デフォルトの名無しさん :2007/11/16(金) 15:26:31
パスワード入れて入るニコニコなどはどうやって認証したら良いですか
437 :
デフォルトの名無しさん :2007/11/16(金) 16:21:54
> 430 お返事ありがとうございました。 installerでのinstallは結局、できなかったのですが、よく見ると manualでのinstall法が載っていて、manualで8割くらいは 入れられました。 installerのチェックにはmsgfmt.exeがpathが通っている ところにある必要があり、msgfmt.exeなんて何??? って感じで敷居が高いと感じました。 jvclを使う皆さんは、msgfmt.exeなんてinstallしてて 当たり前なんでしょうか??ちょっと、ひいてしまいました..
438 :
デフォルトの名無しさん :2007/11/16(金) 18:49:31
Delphi6ですが、DLL内で画像(EMF形式)を作って、それを返すということは できるのでしょうか。そのDLLはDelphiだけではなくCなどでも使いたいのですが。
439 :
M氏 :2007/11/16(金) 20:08:34
皆さん、はじめまして。 Delphi7を使用しているのですが、TStaticTextで表示されている内容を マウスでドラッグしてコピーしたいのですが出来ません。 オブジェクトインスペクタのプロパティ等のどのような設定でドラッグ出来る様に なるのでしょうか? ご教授の程、宜しくお願いいたします。
>438 一応出来る。 DLL関数の呼び出し規約をstdcallで作っておけば殆どの言語から呼び出せる。 >439 どこにドラッグするんだ? 自分のアプリ内のコンポーネントなら、 StaticTextのDragMode=dmAutomaticに設定して、 受け入れ先コントロールのOnDragOver(ドロップを受け入れるか設定) OnDragDrop(ドロップされた時の動作)を書けば出来る。 他のアプリとかエクスプローラだとものすごく難しいよ。
>>437 dxgettext使わなければmsgfmtは必要無い気がする
442 :
M氏 :2007/11/16(金) 21:26:56
440> ご返答ありがとうございます。 ただ、単純に、StaticTextに表示されている内容をドラッグしてCtrl+Cで コピーして他のファイルに貼り付けたいのですが、出来ないんです。 説明足らずで申し訳ございません。
…すまんが俺はESP能力が足りない。
TMemo使えばできる
>>442 TEdit を ReadOnly := True で Color = cl何かにすれば出来る
>ドラッグしてCtrl+Cで ・・・
マウスカーソルで選択する動作のことをドラッグと言ってるらしい
違法ドラッグだな
プログラミング初心者で初投稿失礼します。 TButtonで色をつけたいと思っているんですが、colorのプロパティがないので、 変えることができなくて困っています。 プロパティーを追加する方法やその他の方法があれば、 ご指導の方宜しくお願いできないでしょうかm_ _m
インストールできないから動的に作成する。 Q&A でも回答されてたでしょ。
すみません。動的に作成するというのがようわからないので・・・
Delphi 動的 生成 でググレカス
超初心者だから、ググってもわからないです。
>>453 たとえばフォームForm1上のパネルPanel1の上に標準のボタンを貼り付ける場合…
◆『アクション』を1個作る(これは下準備)
・フォームForm1にアクションリストコンポを置け
・このアクションリストコンポをダブルクリック(アクション一覧のウィンドウが出るぜ)
・左上のアクション追加ボタンをクリックするか[Insert]キーを押せ(空っぽのアクションが追加されるぜ)
・『オブジェクト インスペクタ』でNameとCaptionを目的にあわせて適当に変えろ
(ここではメッセージボックスを出すテストということで,Nameを"ShowMessageAction",Captionを"テスト"にするぜ)
・『オブジェクト インスペクタ』を『イベント』ページに切り替えて"OnExecuteの右側をダブルクリックしろ
(ソースコードに空っぽのイベントハンドラ TForm1.ShowMessageActionExecute が出来るぜ.
もしNameを違う名前にしたら名前もそれにあわせて変わる)
・ここにコードを書き込め(ためしにこんなコードにしたぜ)
procedure TForm1.ShowMessageActionExecute(Sender: TObject);
begin
ShowMessage('ボタンが押されたぜ!'); // ←これが追加した行
end;
(つづく)
>>456 (つづき)
◆『ボタン』を追加するコードを書く(ここがボタンを動的に作成する部分)
・ソースコードの上の方にあるinterfaceのすぐ下のusesにそのボタンコンポを定義しているユニット名を追加しろ
(標準のボタンなら StdCtrls だ.もしすでにある場合は追加しなくて良い)
・TForm1の宣言のうち,private節にボタンの変数宣言を追加しろ
private
{ Private 宣言 }
FTestButton: TButton; // ←ここが追加した行.目的にあわせて変数名を決めてくれ!
・Form1(のコンポが載っかっていないところ)をダブルクリックしろ( TForm1.FormCreate という空っぽのイベントハンドラが追加されるぜ)
・ここにボタンを作るコードを書け
procedure TForm1.FormCreate(Sender: TObject);
begin
// ここから追加部分
FTestButton := TButton.Create(self); // ボタンを生成します.selfはこのフォーム自身のことです
FTestButton.Parent := Panel1; // このボタンがPanel1の上に載っかるように指定.フォームの上に直に置くならselfを指定
FTestButton.Action := ShowMessageAction; // ボタンを押したときに用意した『アクション』を実行する.見出しもこの『アクション』の見出しになる
// ここまで
end;
あとは実行してみてくれい!
ボタンの見出しが『アクション』のCaptionと同じになっていてボタンをクリックするとメッセージボックスが出てくるはず!
ここまで出来たら一段落です.
じゃあヤフれ
456-457読んでも分からんなら市ね
要素数可変なリストを保持するためTListを使ってますが、試しに動的配列で要素1個増えるたびに SetLengthで再割り当てを行うコードをFastMMと一緒に使うと以前のDelphiのメモリマネージャを使う場合に 比べて、20秒かかっていたのが、僅か0.2ミリ秒くらいになりました。 これからは、積極的に動的配列の要素数の再割り当てを行うプログラムを書こうと 思うのですが、そんな私はプログラマ失格でしょうか?
>>460 それを手続きなりクラスなりにするがよい
リストと配列は用途が違うだろ。並び替え、挿入、削除とか、配列よりリストクラスの 方が断然有利な場合もある。ただ保持だけが目的なら、配列の方がいいけど。
了解しました。今回は保持だけが目的なので、配列で行こうと思います。
きっとちょっとした工夫で0.20秒を0.15秒とかにはできるんだろうけれど、 確かにFastMMにするとその辺りに手間をかける甲斐が無くなるな。
で、メモリマネージャが進化したから、 「積極的に動的配列の要素数の再割り当てを行うプログラムを書こうと」 とするのは、「プログラマ失格でしょう」よ。 配列の要素数をきちんと管理して、再確保の効率を高める努力は怠らないほうがいいよ。
Capacityを設定すれば良かったんじゃないのか?
Delphi6 PersonalとTurbo Delphiは互換性ないんですかね? OpenJaneの改造で必要なんですが、Delphi6 Personalは配布終了しているようなので、 代わりにTurbo Delphiを使おうと思ってるんですが。
Turbo買うの? 無料の奴だと無理だと思うよ
やっぱりDelphi6でないとできませんか……。
>>465 その辺は古い人間の考え方だろ
そういう部分を隠蔽して生産効率を高めようというのが時代の流れなわけだから、
メモリの管理だとかを言語仕様やライブラリ等で補えるならそれで構わないと思うが
DelphiだってCみたいなのやってた人間からすればメモリ管理ほとんど不要に等しいし
D6Pのインストーラー残してある俺勝ち組
インストーラーもアップデートパッチも全て残してある俺勝ち組すぐるw
インストーラーもアップデートパッチも全て残してあるけど認証コード残ってなくて 定期的にレジストリ弄らされる俺負け組みw
×認証 ○許諾
TurboがあるからDelphi6はいりましぇーん
コンポインストールできないTurboExpユーザのおれは負け組
D6のIDEでTurboのコンパイラが使いたい
TurboExplorerだけどゲームしか作らないからコンポいらない俺、引き分け?
ゲームしか作らない負け組
勝ち組じゃね?
Delやってる時点で負け組。
勝ち負けに拘ってる奴は負け組。
そんなこというやつも負け組。
標準化もPascalとも無関係で、一社だけサポートで、いまにも消えそうだし、 負け組かもね。>Delユーザ
C++に比べれば大勝だがな
テキストベースのdfmファイルをresファイル化する時に dfmファイル内で外部ファイルを参照して resファイルにする方法がわかりません test.rc---- IFORM RCData "form.txt" ---- form.txt--- (前略) Picture.Data = { SaveType = 1 ResType = TJPEGImage File = 'Image5.jpg' } (後略) --- として brcc32 test.rc といった感じにしたいです
cpuがアイドルの時にコッソリ動く常駐アプリを作りたいのでヒントプリーズ
E6600(2コア)、XP SP2でTurbo Delphiを使用しています。 マルチスレッドアプリケーションをTDの統合環境でブレークポイントなどを使いデバッグしていると、 ブレークから抜けようとステップ実行やトレース実行やら、ともかくブレークから実行で抜けたあと、 急にハングしたかのごとき重さが頻繁にかかります。システム(OS)全体も半ハングアップ状態に。 一応処理は続いているようで、まっているとエディタのブレークポイントで実行一時中断しますが、 その状態でもハングのような重さで、プログラムを終了させるのもままならぬほどです。 とにかくすべての動作にsleep(500)がかかっているのではないかというトロイ動きになります。 こうなると、もうとにかく終了させるしかなく、Ctrl+2が効く時は30秒(適当)ほどラグがあったあと 終了してくれるときもあれば、1分近く待った挙句あきらめ、制御が戻るのを期待してCtrl+Del+Altを 押してから復帰、を何度も繰り返してTDのタイトルバーに(反応なし)が表示さるまでトライしてそれを 右クリックで終了するか、それでも駄目ならばハードウェアリセットをしています。 ブレークポイント使用時のハングと、ブレークポイント使用を躊躇するのとの相乗効果で、生産性が 非常に落ちています。なんとかしたいです。 CPU使用率やメモリ使用量の異常、HDDに対する過度なアクセスなどはありません。 マルチスレッドでやり取りしているデータは、プログラム内で完結しています。 どのスレッドでも、メッセージのフックなどはしていません。 どのような原因が考えられますでしょうか。 スレッド内部処理の問題でしょうか(CPU使用率からみると考えにくいですが)。 たまたまデバッガと当方環境の相性?でしょうか。 経験者の方などが居ればご助言を賜りたく存じます。よろしくお願いします。
489 :
488 :2007/11/18(日) 13:53:05
すいません、おそらくブレークを抜けるときでなく、入るときに遅くなっているようです。 いま、使用するプロセッサの制限したうえでテストしたところ、スレッドのループ一週目で 最初のブレークに入るときにすでに重くなってしまいました(再現率は不定です)。 もしうまくCtrl+F2などが効いた場合、デバッガが終了後はけろりと何の問題もなかった かのように、TDやシステムは動きます。 ブレークポイントを使わない限りはトラブルはありません。
IDEでフォーム上に配置したコンポーネントのプロパティを FormのOnCreateからいじくろうとするとEAccessViolationが出るんですが OnCreateの段階ではまだ生成されてないんでしょうか?
>>486 リソースファイルは {$R filename.RES filename.RC} の書式で 埋め込めばコンパイル時にリンクしてしまうので
リソースコンパイラは付属していない。
そのファイルの場合は
{$R test.RES test.RC}
リソースファイルで取り込んだ jpg ファイルなどは、
TResourceStream + TJPEGImage .LoadFromStream で扱う
>>492 OnCreate で、そのフォームに所属するコンポーネントは作成されている筈
別のフォームをアクセスしようとしていない?
495 :
M氏 :2007/11/19(月) 14:58:15
返答遅くなり申し訳ございません。 443さん、446さん、超初心者な者でして、分かりづらく知識不足で申し訳ないです。 447さん、フォローありがとうございます。 444さん、445さん、ご教授ありがとうございます。447さんが書かれていたとおり、 マウスカーソルで選択してコピーしたいのですが、選択することすら出来ません。 ご教授していただいた方法で、TStaticTextに表示されている内容を選択出来る様になるのでしょうか? もう少し詳しく教えていただけると、幸いです。 宜しくお願いいたします。
496 :
492 :2007/11/19(月) 15:27:45
>>494 たしかに新規にアプリケーション作って、フォーム上に配置したコンポーネントを
OnCreate中でいじってみたら、普通に動作しました。
おっしゃるとおり、ちゃんとOnCreateの段階では生成されているようです。
でも問題のプログラムではどのコンポーネントをいじろうとしてもEAccessViolationが。
何かほかの原因って考えられるでしょうか?
長文スマソ
>>496 そのコンポーネントの変数が、nil かどうか確認してみては?
念のために Self.をつけるとか。
皆様はじめまして & 教えてください。 複数行(#13#10を含む)の文字列のリストを処理したいのですが、 TStringListでできるのでしょうか? それともTListから派生したクラスを自分で作るしかないのでしょうか? よろしくご教授をお願い致します。
出来るって言うかまさにそのためのクラスだよ。 sl := TStringList.Create; sl.LoadFromFile('text.txt'); または sl.Text := 'hello'#13#10'world'#13#10; for i := 0 to sl.Count-1 do ShowMessage(sl[i]);
500 :
デフォルトの名無しさん :2007/11/20(火) 16:47:05
TMetaFileCanvas に描画して、SaveToFile でファイルに保存しています。 このとき、デバイスにプリンタを指定するとプリンタの解像度で、 スクリーンを指定すると画面の解像度で保存されます。これを、任意の 解像度で保存したいのですが、どうすればいいでしょうか。
501 :
デフォルトの名無しさん :2007/11/20(火) 22:41:37
Delphi 6 personal と Turb Delphi Explorer の違いを教えてください。
名前が違う
503 :
498 :2007/11/21(水) 08:16:17
499様 言葉が足りず誤解を与えてしまいました。 すみません。 文字列のリストを扱いたいのですが、リストの1つの 要素が#13#10を含む複数行なのです。 (TStringListでは無理ですよね・・・) こんな場合、TListから派生したクラスを自作するしか ないのでしょうか? 有用なコンポやサンプルコードなどあればご紹介いた だけないでしょうか? よろしくお願い致します。
>>503 改行を別の文字に置換して管理すればいい。
>>503 str:array of string;
別にTStringListに普通に突っ込めばいいじゃん。 S.Add('うんこ' + #13#10 + 'ちんこ'); T := S.DelimitedText; S.DelimitedText := T; 何がしたいのかようわからんぜ。
>>498 混乱の一つが用語。
Delphiのリストクラスは リスト構造じゃなくてアレイの一種。
TStringListもリスト構造ではなくアレイなんだ。
だから array of string とデータ構造的には同じもの。
Delphiはリスト構造を扱うライブラリは標準では持っていない。
もっとも古式ゆかしい言語だから扱うのに苦労するわけじゃないけどね。
というわけでアレイでいいのかリストが欲しいのか、どっちなの?
おいおい 普通にに突っ込むのなら、 S.Add('まんこ' + #13#10 + 'ちんこ'); だろ。 おまんは、うんこに、ちんこ突っ込むのかよ
>>506 ,507,508
当方、大きな誤解をしていました。
S.Add('うんこ' + #13#10 + 'ちんこ');
とすると、
S[0] は、'うんこ'
S[1] は、'ちんこ'
になってしまうと思っていました。
実際には、
S[0] は、'うんこ'#13#10'ちんこ'
なんですね!!!
自己レス気味になってしまいましたが、気づかせていただき、
ありがとうございました。
510 :
509 :2007/11/21(水) 14:29:42
ついでに、TStringList.Valuesについても誤解をしていました。 S.Values[’x'] := 'A=B'; というように、右辺には「=」を含めてはいけないと勝手に 解釈していましたが、OKなんですね! いやぁ〜しらなかった!
>>508 要するに相手が男か女かということだな
>>509 もしS.LoadFromFile(...)やS.Text := 'あなる'#13#10'ちんこ';みたい書き方で同じ処理したいなら、
TListを継承して一から作らなくても、TStringsを継承してSetTextStr辺りを自作すればおk
512 :
508 :2007/11/21(水) 18:45:04
>>511 SetTextStr ですね。了解です。
勉強になりました。
ありがと〜!
DBEditで日付型の値を入力する際、10/23と入力すると2007/10/23になりますが、 入力した月/日が本日より前の日付の場合に来年の日付にしたいのですが どのようにすればいいのでしょうか?具体的には以下のようにしたいのです。 12/10と入力した場合は2007/12/10 9/20と入力した場合は2008/09/20
DecodeDate だったかな? それと EncodeDate。
515 :
デフォルトの名無しさん :2007/11/22(木) 19:34:22
MainMenuオブジェクトの中の複数の項目のOnClickイベントで、 同じprocedureを呼び出すように設定しました。 そこで、そのprocedure側で 「MainMenuオブジェクトのどの項目がクリックされたのか」 を知りたいのですが、どうすればよいでしょうか? 具体的には、クリックされた項目の "caption"の内容を得たいと思っています。 現状では、MainMenuオブジェクトの"名前"すら取得できない状況です。 procedure TForm1.OnMenuClick(Sender: TObject); begin ShowMessage(TMainMenu(Sender).name); // 空で表示されてしまう end; よろしくお願いします。
TMenuItem(Sender).Caption かな。
>>516 の書いてるとおり「TMenuItem」でキャストするべきだが、実際にやってみると
>>515 > ShowMessage(TMainMenu(Sender).name);
これでもいける。なぜ515の環境では「 空で表示されてしまう」のか、
そこんとこ、ちょっち怪しい
また、出来れば「is」「as」使って欲しい
あとでメニュー以外から使ってしまってエラーが出たとかならないように
オレならTAction使うが
518 :
515 :2007/11/22(木) 21:14:07
>>516 できました!!これだけで5日くらい格闘してたので、
感動しました。ありがとうございます!
>>517 ありがとうございます!
「is」「as」そして「TAction」ですね…。
いい機会なので勉強しておきます。
>>513 日付型に変換して今日より小さかったら2008付ければいいんでない?
520 :
501 :2007/11/23(金) 03:49:29
言葉足らずでした。すみません。 今まで perl , ruby , vba をさわってきたのですが、 そろそろネイティブコードをはける言語を覚えたくなりました。 そこで、Delphiを今更ながら勉強しようと思っています。 しかし検索してみると Delphi 6 と Turbo Delphi がありました。 Turbo Delphi の方が新しいようですが、2ch的には Delphi 6 の話が多いみたいで、 どちらの方がいいのか迷っています。 名前とブランド名が違うだけなのか、機能的に違いがあるのか、 あるとしたら代表的にどう違うのかなど、 アドバイスをください。
522 :
デフォルトの名無しさん :2007/11/23(金) 04:13:12
Delphi 6
コード補完やリファクタリング等の機能、割と便利な言語拡張を考えるとTurboDelphiかな。
524 :
デフォルトの名無しさん :2007/11/23(金) 12:50:45
足ふみスイッチで画像をキャプチャーしたいのですが、足ふみスイッチが高いので 俗に言う親が来たスイッチ(ステルススイッチ)で代用したいと思っています。 正式には、quickbottunと言って、このようなUSB規格です。 VID=$1398 PID=$FF03 Input Report Size=40 Output Report Size=40 Feature Report Size=40 Value Input =========== 0) UsagePage: FF00 ($FF00) ReportID: 0 IsAlias: False BitField: 2 LinkCollection: 0 LinkUsage: 1 ($0001) Value Output ============ 0) UsagePage: FF00 ($FF00) ReportID: 0 IsAlias: False BitField: 2 LinkCollection: 0 LinkUsage: 1 ($0001) LinkUsagePage: FF00 ($FF00) IsRange: True
525 :
デフォルトの名無しさん :2007/11/23(金) 12:51:30
Value Feature ============= 0) UsagePage: FF00 ($FF00) ReportID: 0 IsAlias: False BitField: 2 LinkCollection: 0 LinkUsage: 1 ($0001) LinkUsagePage: FF00 ($FF00) BitSize: 8 ReportCount: 1 UnitsExp: 0 Units: 0 LogicalMin: 0 LogicalMax: 255 PhysicalMin: 0 PhysicalMax: 0 UsageMin: 1 UsageMax: 8 StringMin: 0 StringMax: 0 DesignatorMin: 0 DesignatorMax: 0 DataIndexMin: 0 DataIndexMax: 7 です。 uusb.sysで動かそうとしたのでうが、WindowsからHIDがこのdeviceには一番いいから 変えるのはダメと拒否されました。そこで、HIDで動かすためにいろいろ調べて いますが、そのままでは、いくらスイッチを押してもずーと以下の信号しかでていません。 インタラプト転送(UP) pipehandle 0x82bc4c4c(endpointaddress 0x81) 受信 0x0 byte(デバイスから)
526 :
デフォルトの名無しさん :2007/11/23(金) 12:52:55
が、ソフト(ゲーム画面から仕事をしている画面に切り返すソフト) を起動して、スイッチを押すと class request(Down) destination:Interface,Index 0 予約bit:34 request:0x9 値:0x300 送信:0x28 byte(デバイスへ) がPCからでて コントロール転送(UP) pipehandle:0x82bf8d10 00 00 00 00 00 00 00 00 .... A8 00 00 00 98 25 18 00 .. という信号が送られます。 一番、簡単にスイッチが押されているか調べる方法はどんなのがありますでしょうか?? 何かこの辺を調べたらどうかというのはありませんでしょうか?? そもそも、何でスイッチが押されたら、まずPC→deviceの信号が送られるのが不思議で しょうがないのですが...
>>524-526 逆に何故そんな質問をDelphi用の、しかもこんな超初心者用のスレで聞こうと思ったか伺おうか
不思議でしょうがないのですが...
529 :
デフォルトの名無しさん :2007/11/23(金) 14:15:46
> 527 あのー、もちろん、Delphiの初心者だからなのですが... HIDを扱うにはCのほうがいいのでしょうが、Cは知らないし DelphiのJvCLをみてJvHIDclasscontrollerを見ても このスイッチとどう対応させればいいのか分からないので.. なんか、こんな簡単な方法があるよと教えていただけたらと..
530 :
デフォルトの名無しさん :2007/11/23(金) 14:21:16
> 528 ありがとうございます。私のDelphi 6perと7だとこれを動かそうとすると PHIDPPreparsedDATAが定義してないと動いてくれません.. JvCLの中のJvHidControllerClassはなんとかファイル読み込みエラーが でつつもなんとか動くのですが..
悪いこと言わないからドライバはCで書いて、 それをDelphiから呼ぶようにした方が良い。 ていうかC位覚えれ。
>>529 質問の核はDelphiとなんら関係ないと思わなかったのか?w
さっさと該当スレ行った方がお前のためだ
533 :
デフォルトの名無しさん :2007/11/23(金) 18:58:30
質問です。 Delphi5Pro で簡易辞書ソフトを作っています。 バージョンアップで本文の表示部分を TMemo から TRichEdit に変更したところ韓国のユーザから文字化けすると指摘されました。 韓国のユーザも日本語が読める人で、辞書は日本語で記述してあります。 本来なら日本語が表示されるはずなのに意味不明のハングルに化けてしまうとのことです。 そこで、Charset の問題だろうと思い、わざと HANGEUL_CHARSET を指定してみました。 すると TEdit は日本語がハングルに化けたのに TRichEdit は日本語のままでした。 おそらく TRichEdit は Windows の標準の言語に自動的に従うのだと思います。 しかし敢えて TRichEdit の文字セットを任意に変更させたいのですが、何か方法がないかお教えください。
534 :
デフォルトの名無しさん :2007/11/23(金) 19:43:56
535 :
533 :2007/11/23(金) 20:56:23
>>534 すみません、TRichEdit の Attributes を変更することはわかるのですが……。
「TRichEdit の Charset を変えてワザと文字化けを起こす方法」はありませんか?
537 :
デフォルトの名無しさん :2007/11/24(土) 12:17:08
D7 だけど、最近いつの間にかコンパイルにやたら時間が掛かるように なったんですけど、何が考えられますか?数秒ほどでコンパイルできてた プロジェクトが今じゃ1分近く掛かるんです。 (その後更にマウスカーソル乗っけたときのヒント表示まで1分近く・・・) コンポーネントを追加とかもしてないんですが。
考えられる事 1、ウイルスにやられてる 2、アンチウイルスソフトが一生懸命頑張ってる 3、メモリが壊れていてパソコンのRAMサイズが異常に小さくなってる 4、導入してるコンポーネントが異常に重い 5、IDEに何か便利ツールを組み込んでいてそいつが重い 判定方法 タスクマネージャのプロセスタブでCPU順に並べてみて何が重いか、まず見る 他に重いプロセスがあればそいつが90%とか消費してるだろう 最近、ブルートースの tosなんとか入れてるとだんだん重くなる現象がでたぞ。 IDE自身が重いならメモリが足りてないかどうか見てみる。 さらに新規作成でコンポーネントを貼らない状態で重いかどうか見る
>>537 プロジェクトのコンパイラメッセージに余計な設定してないか?
安全でない云々は不要。
537です。回答ありがとうございます。
>>539 見てみました。「安全でない〜」のチェックは外れていました。
>>538 タスクマネージャで見ると、コンパイル中はSystem Idle Procが常に70%くらいで
delphi32.exe が10〜20%でした。新規作成したプロジェクトは初回こそ遅かった
ですが、2回目以降はほぼ一瞬でコンパイルが終わりました。
コンポーネントが重いのかなあ・・その辺、調べてみたいと思います。
メモリが足りないんだろ
コンパイル中に空き時間があってなおかつ 遅いという事はハードディスクの応答が異常に遅くなってるのでは?
空き容量が足りない予感
だからマルウェアをウイルスっていうのいい加減やめて欲しい。
自分に害をなすソフトウェア一般をウイルスと呼ぶのはありふれた事だよ
546 :
544 :2007/11/24(土) 15:06:48
そうなんだよね〜。このスレの住人だけに言ってる訳じゃないんです。
コンパイル速度の件、アドバイスありがとうございます。 結局 LMDFill と言うコンポーネントをTLabelに変更して LMD関連は Uses からも全部削除したら、元の速度に戻りました。 以前から入れてあるのに何で?な感じですが・・・ # 中身が無いので見ため勝負のソフトでしたが、見ためも普通に なってしまい残念です。
548 :
デフォルトの名無しさん :2007/11/25(日) 00:04:06
CreateProcessで実行したプログラムの標準出力を取得するにはどうすればよいでしょうか?
>>549 とても長いソースになるんですね
印刷してがんばって読んでみます
ありがとうございました
>548 CreateProcessののSTARTUPINFO構造体にGetStdHandleで取得した値をセットして実行すれば 以後親プロセスから標準入出力の読み書きが可能になる。
BDS2006のIdSMTPでPortを指定してQuickSendしても、ポート番号が反映されず、25で送信されてしまいます。 何か打つ手はないでしょうか。
1つのクラスに何種類かのコンストラクタを定義したいのですが、 例えばファイル名を指定して生成するコンストラクタと、規定のファイル名で 生成するコンストラクタを作りたい場合、次のような定義で良いのでしょうか? TMyClass = Class public constructor CreateFile(Filename:string); constructor CreateFileDefault; end; constructor CreateFile(Filename:string); begin .... end; constructor CreateFileDefault; begin CreateFile('Default.txt'); end; こうすると、CreateFileDefault内で新しいクラスが生成されるだけで、 このメソッドを呼び出した側にCreateFileの結果が戻りませんよね? こういう場合、CreateFile内の処理を別途関数として用意すべきなのでしょうか。
555 :
554 :2007/11/27(火) 07:03:00
ええと、すみません。 ↑ですが、CreateFileコンストラクタ内で、条件分岐により何通りかのinherited Createを選択するため、 この処理をprocedureで別途定義すると、inherited部分をどうしていいかわかりません。 constructor CreateFileDefault 定義は、function CreateFileDefault:TMyClass; と同義なのでしょうか。(生成したクラスを返すという意味で) function CreateFileDefault:TMyClass; begin end;
556 :
554 :2007/11/27(火) 07:13:41
間違って送信してしまいました、すみません・・。 constructor CreateFileDefault 定義は、function CreateFileDefault:TMyClass; と同義なのでしょうか。(生成したクラスを返すという意味で) function CreateFileDefault:TMyClass; begin result:=CreateFile('Default.txt'); end; みたいに定義して生成することも可能なのでしょうか。
>>554 コンストラクターというのは
クラス名+ドットで呼んだ場合だけメモリ確保とかしてくれる。
インスタンス+ドット で呼んだ場合とかメソッド内部で呼んだ場合は
単なるprocedure になる。
だからその書き方でいい筈。
ただ、C++から共用したかったりすると Create以外のコンストラクタ使うと面倒になるから
あんまり使われない。
558 :
554 :2007/11/27(火) 07:41:05
なるほど、ありがとうございます! すみません、もう一つ・・。 FormStyle=fsNormal と定義されているフォームTForm2をTForm1から動的に生成する時に、 TForm1.FormStyle=fsMDIFormとして、TForm2.FormStyle=fsMDIChildとして生成したいのですが上手くいきません。 procedure TForm1.FormCreate(Sender:TObject); begin Form2:=TForm2.Create(self); Form2.FormStyle:=fsMDIChild; //例外:フォームが作成できません。有効なMDIフォームがありません。 end; Form2は汎用のライブラリで、できればソースやプロパティをいじりたくないのですが、 何か方法はないものでしょうか。
559 :
558 :2007/11/27(火) 08:13:34
自己レスです、解決しました、すみません。 Createイベント内では駄目で、Showイベント内で実行できました。
560 :
デフォルトの名無しさん :2007/11/27(火) 08:53:14
タイトルバーの右側にある「最大化/元のサイズに戻す」ボタン と同じ機能のボタンを作りたいのですが、 どうすればいいでしょうか? タイトルバーを消した状態(Form1.BorderStyle := bsNone) で使用したいと思っています。 よろしくお願いします。
WindowState変えれ
562 :
561 :2007/11/27(火) 09:13:13
補足します。 「元のサイズに戻す」は実装できたのですが、 「最大化」が分かりません。 windowState := wsMaximized; とすると、ウィンドウが画面いっぱいに表示され、 タスクバーまで消えてしまいます。 「タスクバー以外の領域で最大化」をするには、 どうすればよいでしょうか?
タスクバーのプロパティーで、「タスクバーを自動的に隠す」のチェックを外す。 やさしいな俺。
Tメモに選択状態のテキストがあるかどうか知る方法は?
SelLength
>>513 亀なのでもうご覧になっていないと思いますが…今更シリーズ(汗)
このご質問のポイントはひとつは文字列から日付型への独自の変換という点ですが
もう一つ大事なのがDBEditコンポで編集した文字列を独自の方法で変換する処理をどこに組み込むかという点です。
後者が分からずレスできなかったのですがどうやらフィールドオブジェクトのOnSetDataイベントで対応できるようです。
このイベントはDBEditコンポなどで編集した文字列をフィールドの型に変換する処理を好きなようにできるものです。
つまり、このイベントハンドラで入力された文字列をチェックして、
もし月/日の形式で本日以前なら来年にするようにします。
◆まず文字列の判定と文字列から月日への変換関数を作ります。
(ここではくだすれではおなじみの正規表現ユニットを使いました。DLして使える状態にした上でusesにRegExprを追加)
{★文字列が"月/日"形式かどうかを調べる関数.そうならTrue、違うならFalseを返す}
function IsMonthAndDayStr(const s: string): boolean;
var
IsYMDFormat, IsMDFormat: boolean;
begin
IsYMDFormat := ExecRegExpr('[0-9]+/[0-9]+/[0-9]+', s );
IsMDFormat := ExecRegExpr('[0-9]+/[0-9]+', s );
Result := (not IsYMDFormat) and (IsMDFormat);
end;
(つづく)
(
>>567 のつづき)
{★文字列を日付型に変換する.文字列に年が含まれていない場合,
本日の前なら来年の同日に,本日以後なら今年の日付にする.}
function MyStrToDate(const s: string): TDate;
var
aDate: TDate;
begin
// 月/日だけ入力されている場合は
if IsMonthAndDayStr(s) then
begin
// StrToDateで変換してみる(今年の日付になる)
aDate := StrToDate(s);
// この日付が今日より前なら丸1年先にする(※今年の1年先なので来年になる)
if aDate < Date then
aDate := IncMonth(aDate, 12);
// 日付をフィールドオブジェクトに書き込む
Result := aDate;
end
// さもなくば普通に変換した値を返す
else
Result := StrToDate(s);
end;
◆次にイベントハンドラを作ります。
ここでは実行時、データセットを開いたときにイベントハンドラを割り当てるようにします。
データセットを開いたときに日付型フィールドを探してOnDataSetイベントにイベントハンドラを割り当てます。
以下のコードはデータセットがTable1でデータモジュールDataModule1に載っかっている場合の例です。
(つづく)
(
>>568 のつづき)
(宣言…TDataModule1のprivate節に)
procedure DateField_SetData(Sender: TField; const Text: String);
(実装)
{☆日付フィールドのOnDataSetイベントハンドラ:
入力された文字列を独自のルールで日付型の値に変換します。}
procedure TDataModule1.DateField_SetData(Sender: TField;
const Text: String);
begin
Sender.AsDateTime := MyStrToDate(Text);
end;
{☆Table1のAfterOpenイベントハンドラ(データセットが開かれたときに呼び出される):
すべての日付型フィールドのOnDataSetイベントにイベントハンドラを割り当てます}
procedure TDataModule1.Table1AfterOpen(DataSet: TDataSet);
var
i: integer;
begin
for i := 0 to pred(DataSet.FieldCount) do
if DataSet.Fields[i].DataType = ftDate then
DataSet.Fields[i].OnSetText := DateField_SetData;
end;
※DateField_SetDataは全部手書きで入れてください。
Table1AfterOpenのほうはオブジェクトインスペクタでAfterOpenをダブルクリックすると
カラのイベントハンドラができますのでここに書き込んでください。
補足: くだすれPart 6の586氏の書き込みがヒントになりました。感謝いたします。
いつもご苦労だが、もうちょっとタイミング良く出てきてやってくれよw
どうしてもいい方法が見つからなくてお蔵入りしていたのですが急に見つかったもので…w でも日付の変換処理だけは先にできていたので一度カキコすれば良かったかもしれません。
procedure, function の一覧を表示するObject Treeviewのようなものはないんでしょうか?
574 :
デフォルトの名無しさん :2007/11/28(水) 14:59:30
プログラム自身が実行されているPATHは どうすれば取得できますか?
ExtractFilePath(ParamStr(0))
ParamStr(0)は絶対パスを返すとは限らない。 Application.ExeNameがベター
TApplication.GetExeNameがParamStr(0)を帰しているという現実に立ち向かう コードファイター576先生の次回作にご期待ください。
579 :
575 :2007/11/28(水) 17:45:05
>>576 そういう事実は俺も初めて知った...
ApplicationはDLLで使うときに正しく返さないからこう覚えていたんだよね。
うははは、DLL で Application を参照する時点で(r
GetModuleFileName( HInstance, Path, SizeOf( Path ) );
>>576 先生はDelphi4のParamStr問題と未だに戦ってるんだよ
Delphi5以降を使ってるみんなはParamStr推奨でおk
>>575-576 ありがとうございます。
よくわからないのですがParamStr(0)を使う事にしました
ParamStr(0) じゃ意味わからんだろ?素人に限って妙な小技にこだわってわざわざプログラムをわかりにくく書こうとする。 Application.ExeName をつかうのがベター
function TApplication.GetExeName: string; begin Result := ParamStr(0); end;
クォート自体を文字として使いたいのですが \' が使えませんでした。 どうやって入力するもんなんですか?
S := #39'AAA'#39;
s:='''AAA'''
589 :
デフォルトの名無しさん :2007/11/29(木) 18:59:29
procedure UseCommaText(DataStr:string); begin stringlist1.commmaText := DataStr; … のように、CommaTextにString型の変数を与えて処理をする手続きをつくったのですが、 このDataStrに'123,99,99,200,150'のように''でくくった文字列を与えるとちゃんと所定の処理をしてくれるのですが、例えばstring1 :='123,99,99,200,150' のようにして、 string1を引数にすると処理をしてくれません… '123,99,99,200,150'とこれを入れたstring1ではどう違うというのでしょうか? また、この現象を回避するにはどうすればいいんでしょうか?お願いします。
function UseCommaText(s: String): String; var sl: TStringList; begin sl := TStringList.Create; sl.CommaText := s; Result := sl.Text; sl.Free; end; procedure TForm1.Button1Click(Sender: TObject); var s: String; begin ShowMessage(UseCommaText('123,99,99,200,150')); s := '123,99,99,200,150'; ShowMessage(UseCommaText(s)); end; 全く問題ないけど?
>>585 w
Forms.pasではそうなってるなw
わろた
Vistaの標準メニューにアイコンを表示させるにはどうすればいいでしょうか? TMenuにTImageListを設定してメニュー表示するとオーナードローになって 標準のメニューとは違って違和感があります
>>584-585 他の言語でもargv[0]が自分のパスだったりしますし、小技ではなく一般的な話です
玄人ぶってる人に限って内部の動作を全く知らないといういい例ですね
違った意味で勉強になりました
うーん、ParamStr(0) より Application.ExeName の方が可読性に優れてると思うんだけどな
>>590 異なるunitにこの関数を書いているのですが、なぜかうまくいきません。
空文字を入れたのと同じ結果になってしまうのです。
もうちょっと悩んでみますね。
まあ可読性はApplication.ExeNameの方が上だろうけど、
>>576 ときて
>>584 だから恥ずかしい奴なんだよね。
Forms.pas必須なのが痛い
可読性と汎用性のどっちを取るかという問題だと思うが、 この程度に可読性も糞もないと思うのでParamStr(0)でいいと思う コンソールやDLLで使うときなんかサイズ膨れるだけでいいことないし
>>598 ShowMessage(DataStr);
stringlist1.commmaText := DataStr;
普通はParamStr(0)
どっちでもいいよ。 結果同じなんだから。 好みの違い。
どーでもいいけど、ParamStr(0)を知っていればParamStr(1)も使えるね
576 :デフォルトの名無しさん:2007/11/28(水) 17:19:44 ParamStr(0)は絶対パスを返すとは限らない。 Application.ExeNameがベター 584 :デフォルトの名無しさん:2007/11/29(木) 16:17:12 ParamStr(0) じゃ意味わからんだろ?素人に限って妙な小技にこだわってわざわざプログラムをわかりにくく書こうとする。 Application.ExeName をつかうのがベター 604 :デフォルトの名無しさん:2007/11/30(金) 09:02:16 どっちでもいいよ。 結果同じなんだから。 好みの違い。 なんという変わり身
ParamStrなんて基本中の基本じゃねーか これで可読性下がるなんて言ってるやつはほとんどのソース読めないだろw
おまえらもしつこいね。
こだわってるのは約2名なんじゃないか?w
「Leeyes」のようなサムネイル表示するファイラをDrawGridを使って作ってるんですが、 ListViewをvsIcon表示にしたときのマウス・キーボード操作(例えばControlキーを押しながら アイテムをクリックすると複数選択ができるとか)をDrawGridで実現しようとすると OnMouseDownやOnKeyDownイベントなどで自前で実装するしかないですか? 今のところそれで一通り作ったんですが、もっと他に良い方法はありますか?
612 :
575 :2007/11/30(金) 17:52:39
おまいらいい加減に汁。
方法がいくつかあるって分かっただけでも
>>574 は幸せじゃないのか。
汁 じゃ意味わからんだろ?素人に限って妙な隠語にこだわってわざわざレスをわかりにくく書こうとする。 しろ と書くのがベター
614 :
575 :2007/11/30(金) 18:28:15
結局最後は俺ですかorz
もうどうにでもなぁ〜れ *``・*。 | `*。 ,。∩ * + (・ω・`)*+゚ `*。 ヽ つ*゚* `・+。*・`゚⊃ +゚ ☆ ∪~ 。*゚ `・+。*・ ゚
オレも
>>596 に1票
どうにもマジックナンバー臭くて嫌い>Zero
しろ と書くように汁 だったら面白かったのに
618 :
デフォルトの名無しさん :2007/11/30(金) 22:31:22
グローバルの定数ってどうやって宣言するんですか? var節じゃなくてconst節に書くって読んだんですが,,, var Form1: TForm1; の下に書いてみましたが動きませんでした.
>>618 書き方がおかしいんだろ。
書いた所見せてみろ。
さて、そこで本題にもどるが ParamStr(0)でいいとかいってるバカはたぶん いちいち定数をラベルや const にせず数値で打ち込んでるんだろうなw なにしろ結果が同じだからなww そもそも何の意味もない引数の 0 がコマンドライン引数の最初をあらわすインデクスである という事実自体、特定のコマンドラインインターフェイスの実装に結びついたものであり ポータビリティを損なう一因であるということがわからないようじゃ、プログラマ失格だな。
おっと、ベターを書き忘れた。 Application.ExeName をつかうのがベター
コンソールやDLLを作るときにわざわざFormsをusesする奴は間抜けって話だろ。 そもそもParamStrは引数の取得に必須だし。
>>622-623 そのApplication.ExeNameがParamStr(0)を返すだけという実装になっていることについてどうお考えですか?
ついでに言えばKylixが死亡確定しDelphi自体がもはやWindows専用となっていてポータビリティも糞もない件についてもお願いします。
もうどっちでもいいよ
ウインドウアプリでもコマンドライン引数は必要だろ
>>622 もう楽になれよ・・・・お前が馬鹿なのはみんな気付いてるんだからさ・・・・・
いまさらDelphiで移植性を語ってるアホは貴重だな みんな丁重に扱ってやれ。絶滅危惧種だぞ
その前にDelphiユーザー自体絶滅危惧種だぜ。
こだわってるのは2名なんだろうけど、たぶん片方が以前のグローバルフック君だと 思われる。他のスレと違って、Delphi板なんてユーザー少ないんだし、ほとんど同じ奴しか 見ていない。毎回面倒、起すのは決まって同じ奴。
632 :
553 :2007/12/01(土) 03:44:06
えっとー・・・、
>>553 なんですが、やっぱムズいっすかね。
>>610 グリッドを使う場合は全部自前でしょうね。
アイテムの複数選択も自前。
しかし標準のリストビューにないような表示をさせようとするとドツボにはまることも多いわけで
グリッドをよく使っています。
576 :デフォルトの名無しさん:2007/11/28(水) 17:19:44 ParamStr(0)は絶対パスを返すとは限らない。 Application.ExeNameがベター 584 :デフォルトの名無しさん:2007/11/29(木) 16:17:12 ParamStr(0) じゃ意味わからんだろ?素人に限って妙な小技にこだわってわざわざプログラムをわかりにくく書こうとする。 Application.ExeName をつかうのがベター 604 :デフォルトの名無しさん:2007/11/30(金) 09:02:16 どっちでもいいよ。 結果同じなんだから。 好みの違い。 608 名前:デフォルトの名無しさん[sage] 投稿日:2007/11/30(金) 16:25:09 おまえらもしつこいね。 しかし、ParamStr(0)の0がマジックナンバーだっていうやつは Cのmainでパラメータ使うときはどうすんのかな・・・わざわざ定義すんのかね。あほくさ。
俺の前作ったGUIアプリは、ファイル名の取得には、ExeName使って、コマンドライン引数の
取得ではParamStr(0)以外のParamStrとParamCount使ってるな。まぁ、意識はしてなかったが、
>>622 の言うつくりには自然となっていた。
//チラシの裏 #define APP_DIRECTORY ExtractFilePath(Application->ExeName)
637 :
610 :2007/12/01(土) 10:48:07
>>633 レスありがとうございます><
では今の方法で行くことにします。
>>634 > Cのmainでパラメータ使うときはどうすんのかな・・・わざわざ定義すんのかね。あほくさ。
Cはもともと美しくない
マジックナンバーってのは 他人が見たり将来の自分が見て意味が判らないと困るぞっていう事。 アプリに渡されるパラメータの0番目は実行ファイル名って常識があるなら別に 0 って数字は意味不明な数字じゃない。 奇数と偶数の判定をするのに ( x and 1) と書くようなもので、 この1をラベルにしたら余計に判らない。 と、落ち着いてきたので燃料を少し足してもる
>>637 >>633 を読み返してみたら我ながら意味不明でしたスイマセン。
> しかし標準のリストビューにないような表示をさせようとするとドツボにはまることも多いわけで
はリストビューを使う場合の話です。
>>639 PascalならOdd(x)の方が可読性が高いけど。
足してもる
何時何分になったら処理を実行のようにしたいのですが どのコンポーネントをつかったらいいかわかりません ご存知の方いらっしゃったら教えてください
TimerのIntervalを1000にしてOnTimerで時刻をチェックして時間になったら処理を行う。 あるいは指定時刻-現在時刻をミリ秒数で算出してIntervalに突っ込む。
俺は肉だぞ!
646 :
643 :2007/12/02(日) 01:06:47
>>644 ありがとうございます
なるほど
指定-現在は知りませんでしたし思いつきもしませんでした
後者でやってみます
時間指定で直近の一回だけ稼動するアラームを作ってみました 間違ってるところがあるかもしれませんが貼ってみます procedure armtime(time:string); var d :TDateTime; begin d:=StrToTime(time+':00')+Trunc(now)-now; if d<0 then d:=d+1; form1.Armtimer.Interval:=Trunc(d*24*60*60*1000); form1.Armtimer.Enabled:=true; end; procedure TForm1.N14Click(Sender: TObject); begin armtime('02:16'); end; procedure TForm1.ArmtimerTimer(Sender: TObject); begin form1.Armtimer.Enabled:=false; showmessage('armtimer'); end;
ExtractFilePath(Application.ExeName)//+FILE_NAME 3か4の時に教わったこれしか知らんから何年もこれだけ使ってるオレはド素人。
いつまでそんな話続けるつもりだよ低脳
ParamStr(0)の実装が関数経由でAPI叩いてるのに対して、 Application.ExeNameの実装がParamStr(0)呼ぶだけってとこで 某としてどっちがメインかはどんな池沼でも分かるだろ
651 :
デフォルトの名無しさん :2007/12/02(日) 03:40:43
↑WindowsAPI 直叩きこそが唯一正しいプログラムで、ラッパーは邪道という天才が現れました。 こういうキチガイはなぜわざわざ遠まわしに呼び出すだけの関数を用意してるのか、その意味すらわからんのだろうな。 さすが天才は頭の作りが違う。
652 :
デフォルトの名無しさん :2007/12/02(日) 03:41:46
Application.ExeName はなんであるんでしょうねー? いったい何のためにそんなムダな関数があるんでしょうねえー??ふしぎですねええーーー??
>こういうキチガイはなぜわざわざ遠まわしに呼び出すだけの関数を用意してるのか 君みたいな馬鹿のためでしょ?(笑) あ、もちろん馬鹿だからって自分を責めることはないですよ。 生まれつきですから仕方ないと思います^^
もういい加減やめようぜw
こんな事しか話す事がないのが今のDelphi
まぁ、でも柔軟な発想ができない奴がいるよな。考え方が古くて、知識だけの。
経験も重要だけど、知識なんて本読めば書いてあるんだから、それをいかにいかすかだろ。
こいつとか
>>653 こいつとか
>>653 こいつかとか
>>653
↑柔軟な発想ができない奴
今時、色々知ってる奴なんてごろごろいるし、流行らんのは確かだな。
>>650 って要するにApplication.ExeNameがメインって事じゃないの?
651が的外れに思えて仕方ないんだが。
結局、ParamStr(0)がExeNameと同じであることをしってながら知識を 活かしきれていない典型的な例ってことか。ナムナム。
>576 名前:デフォルトの名無しさん[sage] 投稿日:2007/11/28(水) 17:19:44 >ParamStr(0)は絶対パスを返すとは限らない。 >Application.ExeNameがベター これが明らかに間違ってたから、今更引っ込みが付かないんだろうよw
Application.ExeName厨って1人なのか? 何人もいるように見える
彼しつこいから、俺がExeName房に参戦してる。
>>576 を書いていた時点ではExeNameが絶対だと信じてたのに、
実はその内容が忌み嫌ってたParamStr(0)そのままという事実が受け入れられないわけだ
>まぁ、でも柔軟な発想ができない奴がいるよな。考え方が古くて、知識だけの。
>経験も重要だけど、知識なんて本読めば書いてあるんだから、それをいかにいかすかだろ。
これはきっと自分に言い聞かせてるんだろうな
がんばって欲しいものだ
プログラム内に大きなバイナリーデータを持ちたいのですが なにかいい、コンテナみたいな実装方法はないでしょうか?
>>665 >>事実が受け入れられないわけだ
事実だってよ。ワロス。事実を受け入れられないのおまえじゃねぇか。必死に、ExeName房が一人であると
>>スレ番号=>>スレ番号とか事ある事に必死に書いてるところが。ははは。哀れだな。
誰も">>スレ番号=>>スレ番号"なんて書いてないと思うんだが、
>>667 は頭がおかしくなりすぎて幻が見えてるんだろうか…?
ちょっとかわいそうを通り越して怖くなってきたからこれ以上触るのやめとく
お前らもリアルキチガイいじめるのはマジやめろ
>>666 コンテナって何だろ?
よく分からないけどリソースとかじゃだめなの?
>>669 ありがとうございます
コンテナといったのは、感覚的な表現です
リソースなんですが、どうやって組み入れたらよいか、よくわかっていません。
>>667 >>>>スレ番号=>>スレ番号とか
スレ番号だってよ。ワロス。スレ番号なんて言ってるのおまえだけじゃねぇか。必死に、レス番号ではなく
>>スレ番号=>>スレ番号とか事ある事に勘違いしたこと書いてるところが。ははは。哀れだな。
>>670 ヘルプや検索エンジンですぐに解決します。
>>670 >>リソースなんですが、どうやって組み入れたらよいか、よくわかっていません。
リソースだってよ。ワロス。リソースを読み取るクラスはTResourceStreamじゃねぇか。必死に、このクラスの名前を
グーグルで検索すれば事ある事に誰か解説書いてるところが。ははは。楽勝だな。
>>667 を改変するのは大変だなw
もう少しまともな日本語で書いてくれればよかったのに
お前ら暇だな
676 :
670 :2007/12/03(月) 05:43:30
>>673 解決しました。ありがとうございました。
677 :
670 :2007/12/03(月) 05:44:14
バイナリデータだったら TMemoryStream 使うかな
>>668 のこんな時間帯に書き込んで、やっぱニートの類だったか。
まぁ、ExeName房に対する彼のしつこさから何となくニートだろうなって
思ってたけど、環境が性格を形成する典型的な見本だね
>>668 の彼は。
彼がニートになったから性格悪くなったのか、それとも性格悪かったからニートに
なったのかは知らんけどさ。
しかもニート歴長いせいで世間一般の感覚忘れたのかしらんがこんな過疎スレ
でそんな時間帯に書き込む奴いねぇってのに
別人のフリしちゃって
>>671 ,
>>672 は。(オツカレサマです)
生活が昼と夜逆転して大変そうですね(頑張ってください)。
これはひどい
TMyClass = class public constructor Create(const Hoge: String); overload; constructor Create(const Foo: Integer; const Bar: String); overload; end; 上記のように2種類の引数付きコンストラクタをオーバーロードして宣言したのですが、 引数なしのコンストラクタも呼ぶことができてしまっています。 おそらく自動的に継承されるTObjectのコンストラクタが 呼び出せてしまっているのが原因だと思いますが、 引数無しのコンストラクタを呼び出せないようにするにはどうすればいいのでしょうか?
どうにもならない。 デフォルト引数を指定して破綻なく動くようにするか constructor TMyClass.Create(const Hoge: String); begin raise Exception.Create('呼ぶなゴルァ'); end; みたいなのを定義して実行時に検出するか 気にしないのいずれか。
683 :
681 :2007/12/03(月) 11:46:22
>>682 うーむ無理なのか・・・
素直に引数無しのコンストラクタを実装することにします。ありがとうございました。
679 名前:デフォルトの名無しさん[sage] 投稿日:2007/12/03(月) 10:03:41
>>668 のこんな時間帯に書き込んで、やっぱニートの類だったか。
まぁ、ExeName房に対する彼のしつこさから何となくニートだろうなって
思ってたけど、環境が性格を形成する典型的な見本だね
>>668 の彼は。
彼がニートになったから性格悪くなったのか、それとも性格悪かったからニートに
なったのかは知らんけどさ。
しかもニート歴長いせいで世間一般の感覚忘れたのかしらんがこんな過疎スレ
でそんな時間帯に書き込む奴いねぇってのに
別人のフリしちゃって
>>671 ,
>>672 は。(オツカレサマです)
生活が昼と夜逆転して大変そうですね(頑張ってください)。
フォーム内にある全コントロールのフォントサイズを デザイン時のx倍にする関数を作りたいのですが上手くできません。 最初はフォームのComponentsをTControlにキャストして Fontプロパティを操作すればいいと考えていましたが、 VCLのソースを見るとTEditなどの最下位のクラスでしか Fontプロパティが公開されていないためできませんでした。 何かスマートなやり方があれば教えてください。
TForm.ChangeScale
>>686 こんな関数があったとは・・・俺もまだまだ勉強が足りないなぁ
ChangeScaleで期待通りの動作をしてくれました。ありがとう!
>>679 もはやExeNameの優位性を説くことは諦めて、人格攻撃に出たか
本筋から外れて攻撃するということは負けを認めたってことですね
お疲れ様でした^^
>>687 みんな、同じように苦労してたまたま知って覚えてるだけw
>>>スレ番号=>>スレ番号とか事ある事に必死に書いてるところが。ははは。哀れだな。
>別人のフリしちゃって
>>671 ,
>>672 は。(オツカレサマです)
やっぱり自分に言い聞かせてたんだな(笑)
>>682 private の引数なしコンストラクタを宣言するのではだめか?
>>679 この板にいながらデスマ中の人間の存在を忘れる方がどうかしてるだろ
すぐにニートを思い浮かべたり、ニートの生態をよく知ってるところから推測すると、 きっと彼自身もニートなんだよ。だからあまり仕事の話は触れてやるな。かわいそうだろ?
694 :
デフォルトの名無しさん :2007/12/04(火) 00:38:49
すいません、Application.ExeName という関数をみつけたんですが これはどういうときに使うんでしょうか? まったく使わない関数が定義されてるとは思えないので。ぜひ教えてください。
695 :
デフォルトの名無しさん :2007/12/04(火) 00:50:38
delphiのハイブリット化ってどうすんの? 意味がさっぱりわかりません
それより、ParamCount = 1 で ParamStr(1) が使えるのって変じゃないか? 0,1 が使えるなら、ParamCount = 2 であるべき。
じゃあLength(string)=1でstring[0]が使えるのも変なの?(shortstringの場合で) ま、歴史的経緯ってだけでしょ そっちの方が分かりやすくても互換性のためにそのままにしなければならないし
じゃあLength(string)=1でstring[0]が使えるのも変なの?(性的な意味で)
間違えた、string[1]だった 文字列もshortstringという歴史があったせいで添字が1からだけど、 今のstringは構造上0からでも問題ないんだよな そういう思い切った互換性切捨てでもやってくれればいいんだけど、企業体力的に無理だろうなぁ…
デスマですか?会社から書き込んだんですかね?それとも家から? 最近情報漏洩にうるさいので、会社から2chなんて 間違っても私は見ないですよ。情報収集目的のために インターネット検索が許されている現場でも2chだけは 私は見ませんでしたよ。家からですか?デスマ中に1時間も 書けて2chで家から粘着するなんてすごい元気ですね。 君がデスマ中で大変な時に2chでそんな事しますか(私はとっとと寝ます)??? それとも、情報漏洩にあまりうるさくない10人くらいの小さな会社ですか?? そんな小さな規模のプロジェクトでデスマ起こすのですか??? そんな小さな規模の見積もりもできない会社を見つけるなんて大変そうだな。 本当にデスマなんですか?????
Delphi(デルファイ)について、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だか分からない質問を 勇気を持って書き込むスレッドです。 Delphi使いが優しくコメントを返しますが お礼はDelphiの布教と初心者の救済をお願いします。
>>696 Items の Count 何かと違って、ParamCount はパラメタの数だからでしょ。
ん?てことは ParamStr(0) が第一パラメタになるのが本当なのかな?
>>700 漏れは上で書き込んでるやつとは違うが・・・。
何カリカリしてるんだ、たがが2chだろw まあオチケツ。
そんな漏れも普通に就業中に2chで息抜き。 ほかの奴らはMIXIやったりもしているww
漏れは今は海外にいるのでデスマもないしでマターリだけど、本社でもやっぱ2chやってる人
間はいたなw
>>703 もう触るな
そうやって触るからまた来るんだろ
>>700 なあ、ひとつ聞きたいんだが、もし仮にお前の言うとおりニートが書き込んでたとしても、
それはお前がニートですら知ってるExeNameの実装方法を知らなかったってことになるんだぞ?
お前の知識はニート以下っていう烙印を自ら押すことになると思うんだが、それでいいのか?w
オレも聞きたいんだが、真剣に。 会社から2ch見たら情報漏洩すんのか?
会社が2chをアクセス禁止にしたら、激しく生産性が落ちたって話は聞いたことある。 ム板は便利ってことだわ。
他の企業奴隷はともかく、マは逆らう元気すらないからな
目の前の仕事を何とか片付けるのに必死すぎて
>>700 はいかにもネットで書かれてるようなネタを並べただけで現実が分かってない気が
>>705 そんなさ、たかが1つの事柄知ってないか、知ってないかで、それでその人のランクが決まっちゃうの??
すげぇーなぁ。俺、そんな考え方理解不能です。知識偏重って奴ですか?
今時のIT技術者はやるべきことたくさんあって、すべてを頭に詰め込むのははっきり言って無理だから、今回の例でいう、
ExeNameの細かな実装方法を覚えるより、調べ方の方が大事だと思うけどな。
クラサバしかやってないとか?クラサバ・ウェブアプリ・データベースなどいちいちすべての事の詳細を覚えてたら頭パンクします。
>>706 ごめん、情報漏洩じゃねぇな。私用でインターネット利用するなってやつだ。
俺の行くところでは大体見たサイトのログ取ってて、全くインターネット禁止の
ところもあれば、仕事で必要な情報検索ならOKのところが大半だが、インターネット利用
OKのところでも、先輩とかに聞くと2chはどういう目的で利用したか聞かれた時、説明する
が面倒だから、2chはやめろって言われるけどね。
>>707 俺も、生産性落ちると思うけど、大・中規模の企業みたいな組織はそうはいかないんだよね。
現実的にはね。
>>708 マは逆らうって??どういう意味?
710 :
デフォルトの名無しさん :2007/12/05(水) 01:18:39
ieのログイン方法教えて下さい
まぁ、俺がいいたかったのは、ただでさえプログラム人口少ないのに、さらに
その中でもすげぇー過疎ってるDelphiスレで偶然にもあの日の朝明け方近くに
偶然にもデスマ中かなんかのやつが
>>668 ,
>>671 ,
>>672 と3人もいた。
普通に考えてこう考える方が説得力ねぇよ。そんな偶然の偶然が重なりあった日に
俺が書き込んでいたとしたら、うれしさと興奮のあまり、
ちんこたっちゃいます。
_________________________ || || 2chの鉄則 【 荒らしは無視・放置 】 しましょう。 || || ★ 荒らしは放置されるのが一番苦手です。 || → ウザイと思ったらそのまま放置! || ▲ 放置された荒らしは煽りや自作自演であなたのレスを誘います。 || → 釣られてレスしたらその時点であなたの負け! || ■ 反撃は荒らしの滋養にして栄養であり最も喜ぶことです。 || → 荒らしにはエサを与えないで下さい! || ☆枯死するまで孤独に暴れさせておくのが一番です。 || ∧ ∧ 。 || ( ,,゚Д゚)/ ジュウヨウ!! E[]ヨ  ̄ ̄ ̄ ̄ ̄ ̄ ̄ノ つ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ /  ̄ ̄ ̄ ./| _____________ | ̄ ̄ ̄ ̄| | |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|____|/|  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ \ は〜〜〜〜い / ∧ ∧ ∧,,∧ ∧ ∧ (・,, ∧▲ ミ ∧ ∧ ( ∧ ∧ 〜(_( ∧ ∧_( ∧ ∧_ミ・д・∧ ∧ @(_(,,・∀・)@ ( *)〜ミ_ ( ,,) @(___ノ 〜(___ノ 〜(___ノ
713 :
デフォルトの名無しさん :2007/12/05(水) 03:53:35
IHTMLDocument2 とはどんな変数ですか エラーが出ます どうしたらいいですか
IHTMLDocument2は変数ではなくインターフェース どうしたらいいかは「エラーが出ます」だけじゃエスパーじゃないので分からない
>>712 俺が荒らしか、笑っちゃうね。自称デスマ中のやつは荒らしじゃないわけ??
その鉄則とやらでいえば釣られてレスした時点で負けなんだろ?
それとも君が自称デスマ君なのかな???
>>715 >>712 には誰が荒らしかっていうことは書いてないと思うんけど、
それに反応しちゃうってことは自分が荒らしという自覚はあったわけだ
それは俺が書いたレスじゃないよ。 勝手に誰かが俺を装ってるだけでしょ??迷惑な話だ。もちろん自分が荒らしと思っていません。 自演するのは勝手だと思うけど、こっちまで巻きこまないで欲しいね。
誰かって…ものすごく口調に見覚えあるんだけどw そもそもなんで今回に限ってわざわざ自分が書いてないって言い訳するの? ExeName房は複数いるって前に書いてたじゃん だから今回もその複数のうちの誰かが反応しただけでしょ? あれ?ひょっとして今までのも実は全部自演だったの?
ParamStr(0)は絶対パスを返すとは限らない。 Application.ExeNameがベター
そこまで変に拘るなら、DLLでも使えるように自作しろよ。 function MyExeName:string; var siz:DWORD; begin SetLength(Result,2000); siz := GetModuleFileName( 0 , Result , length( Result ) ); SetLength( Result,siz); end;
721 :
デフォルトの名無しさん :2007/12/05(水) 11:37:14
> ParamStr(0)は絶対パスを返すとは限らない はDOSのTurboPascalじゃないの? あの頃は、コマンドラインをそのまま 取得してたらから、カレントディレクトリだと、パスが無い(のかなぁ・・)
試したことないんだが、たとえば今のDelphiでコマンドラインアプリ、つーかコマンドラインアプリじゃなくてもいいけど 今のDelphiで作ったEXEをコマンドラインで実行した場合、ParamStr(0)ってパスはフルパスになるんだっけ?
ソースを読めば判るが ParamStr(0)は GetModuleFileNameってAPIを呼び出している つまり、このAPIの結果しだい。 もちろん今のWindowsならフルパスの長いファイル名を返す。
議論するにあたり、真っ当な意見と見せかけ、実は詭弁で論点をはぐらかす輩が多々おります。 皆様も以下の「詭弁の特徴15条」を覚え、そういう輩を排除しましょう。 1.事実に対して仮定を持ち出す 「ParamStr(0)は絶対パスを返すとは限らない」 2.ごくまれな反例をとりあげる 「ParamStr(0) じゃ意味わからんだろ?」 3.自分に有利な将来像を予想する 「素人に限って妙な小技にこだわってわざわざプログラムをわかりにくく書こうとする」 4.主観で決め付ける 「Application.ExeName をつかうのがベター」 5.資料を示さず自論が支持されていると思わせる 「今時のIT技術者はやるべきことたくさんあって」 6.一見関係ありそうで関係ない話を始める 「ParamStr(0)でいいとかいってるバカはたぶんいちいち定数をラベルや const にせず数値で打ち込んでるんだろうなw 」 7.陰謀であると力説する 「>>スレ番号=>>スレ番号とか事ある事に必死に書いてる」 8.知能障害を起こす 「Application.ExeName はなんであるんでしょうねー? いったい何のためにそんなムダな関数があるんでしょうねえー??ふしぎですねええーーー??」
9.自分の見解を述べずに人格批判をする
「何となくニートだろうなって思ってたけど、環境が性格を形成する典型的な見本だね
>>668 の彼は」
10.ありえない解決策を図る
「ExeNameの細かな実装方法を覚えるより、調べ方の方が大事だと思うけどな」
11.レッテル貼りをする
「こういうキチガイはなぜわざわざ遠まわしに呼び出すだけの関数を用意してるのか、その意味すらわからんのだろうな」
12.決着した話を経緯を無視して蒸し返す
「さて、そこで本題にもどるが」
13.勝利宣言をする
「うれしさと興奮のあまり、ちんこたっちゃいます」
14.細かい部分のミスを指摘し相手を無知と認識させる
「デスマ中に1時間も書けて2chで家から粘着するなんてすごい元気ですね」
15.新しい概念が全て正しいのだとミスリードする
「そもそも何の意味もない引数の 0 がコマンドライン引数の最初をあらわすインデクスである
という事実自体、特定のコマンドラインインターフェイスの実装に結びついたものであり
ポータビリティを損なう一因であるということがわからないようじゃ、プログラマ失格だな」
このコピペがここまで当てはまる人間も珍しい
あとは釣り宣言でもしてくれたら完璧だ
詭弁の見本市乙でしたw
なんという詭弁・・・ たった15の例を見ただけで人間性が分かってしまった この馬鹿は間違いなくまた食いつく / ̄\ | ^o^ | \_/
728 :
デフォルトの名無しさん :2007/12/05(水) 18:06:39
Del廚はキモイな
>>728 職業プログラマならまだしも、プログラム好きな奴って、
内向的な奴多いし、世間一般の印象通りキモイやつ多いだろ。性格も外見もさ。
他人と接することも得意じゃないの多いし、だから、自分が普通の人とズレてることなん
てきづかねぇんだよ。
>>724 みたいな感じにね。
だから、キモイの仕方ないと言えば仕方ない。それぐらい許してやろうぜ。
世間一般から見てもマは気持ち悪い人の代名詞ですがw 起業して作ったプログラムを当てて初めてモテるようになりますw
自分の意見が間違ってるのを棚に上げて人をキチガイやニート呼ばわりするくらいだ キモイ程度ならまだ許せるけど、あれは人間としてカスだろ
>>世間一般から見てもマは気持ち悪い人の代名詞ですが てか、マってなんだよ。 >>自分の意見が間違ってる 誰のどの意見が間違ってるの?
まあ普通は
>>577 を見た時点で自嘲して笑い話で済むところを、
>>584 を書いちゃう時点で空気読めない子なんだよw
>>733 俺も彼はExeNameはParamStr(0)と同じことを流れから知らなかったと思うけど、
いいじゃねぇかよ。事実だけ話ししてもつまらんし、他の人の考え方知ったほうが
俺的にはそっちの方がためになる。
彼が空気読めない子ならそれに対して粘着してる奴は器の狭い子だな。
734の続き。 このスレ的にはよくなかったかもな。結果として、それに対してきちがいみたいに粘着する奴がいたからな。 まぁ、いいやどうでも。
キチガイコードファイター576先生の次回作にご期待ください。
いや、どう考えてもアホが一人暴走してるだけだろ あのアホが突っかかって来るまではみんなスルーしてたんだし
彼は(笑) 都合が悪くなると自分は関係ないって、どこかの半島の人と同じ考えだな。 あ、もしかしたら本物かな。 ファビョるところとかそっくりだし。。
やっぱ、この話すると、ファビョる二人のうちの片割れ
>>736 が出てきたな。
確かに、突っかかる方と突っ返す方の二人必要だな。
ID出ないんだから一人でじゅうぶんだろ 全部576先生の自演でした
現在、任意のキー入力を指定したジョイパッドのボタンを割り当てるプログラムを製作しています。 そこで質問です。 ジョイパッドの入力の状態はJoyGetPosEx等やQuadruple Dで取得できるのですが ジョイパッドを出力(入力させる?)API又はコンポーネントはないものでしょうか? おわかりの方、どうぞ宜しくお願いします。
745 :
デフォルトの名無しさん :2007/12/06(木) 08:55:25
ジョイパッドボタンの信号をだしたい
ドライバ書くしかないんじゃね?
>>744 どうやらそのメソッドを使用すれば出来る気がします。
そこでサンプルは無いものかとあれこれ検索しているのですが全く出てこないですね…。
ジョイパッドのボタン1を押すにはこうするというサンプルさえあれば
あとはMSDNをみながら何とかできる気がするのですが…。
何にせよこういうメソッドがあるという事実だけでも大収穫でした。
本当にありがとうございます。
749 :
デフォルトの名無しさん :2007/12/06(木) 19:40:16
TStringGrid の Row を設定すると、その行にスクロールしますが、 これをやめる(スクロールしないようにする)方法はありますか。
おまえらプログラムばっかやってないで、もっと、他の事して遊べよ。他人と接しないから、自分の 異常さに気づかないんだよ。コードファイター??まぁ、これはまぁ、キャッチフレーズっぽくしたかったと思うから 許せる?けど、ひどいのはCodeGearスレの673の発言「逆神の殿堂入り」。なんで、そんな、使ってる奴見た事ない 用語でさらりと出てくるんだよ。どんな世界に住んでたら、そんな言葉飛び交うんだよ。 同じタイプの人間と接しててもダメだよ。鏡見てるようで、気づかんから。別のタイプの人間ともっと接しろよ。
751 :
番組の途中ですが名無しです :2007/12/07(金) 12:06:09
総合アーカイバコンポーネントでフォルダをzip形式で圧縮する方法を教えてください ファイルは圧縮できましたが、フォルダの方法がわかりません
CodeGear RAD Studio 2007に含まれるDelphiは Delphi 2007 for Win32と内容は全く一緒ですか?
Delphi2007 R2だっけか?R2でないたたのDelphi2007であれば、差はUpdatePackがあったってるかないか ぐらいしか違わんと思うが。推測だけど。R2なら同じだと思う。R2でもBlackfishのDBExpressドライバ はついてないかもしれんけど。
>>754 ありがとうございます。
アカデミックなので、値段も然程変わらないRADのほうを買ってきます。
実際使うのはDelphiだけですが。
756 :
番組の途中ですが名無しです :2007/12/07(金) 15:48:12
ARCHIVES.PAS 読んだら >ディレクトリ名の格納−廃止 ってなってるね
>>755 某のアカデミックはライセンスがとんでもない条件だった気がするが大丈夫か?
759 :
デフォルトの名無しさん :2007/12/07(金) 23:29:28
>>757 なるほど、じゃあ出来なくて当然なのかd
じゃあ、zipを作る別のコンポがあったら紹介してほしいです
760 :
デフォルトの名無しさん :2007/12/07(金) 23:35:30
直接DLLいじれ
761 :
デフォルトの名無しさん :2007/12/07(金) 23:39:06
>>760 面倒くさそうじゃんかよ
あるものは有効に使わないと損だろ
762 :
デフォルトの名無しさん :2007/12/08(土) 02:12:38
ComboBoxの動的配列をCreateしてから、OnChangeハンドラを設定したいんです。 具体的には別に指定したprocedureをその動的配列全てのComboBoxのOnChangeイベントに指定したいです どうすればいいでしょうか?
ComboBoxのOnChangeイベントにイベントハンドラを代入してください。
764 :
デフォルトの名無しさん :2007/12/08(土) 02:18:22
>>763 hogehoge[i].OnChage := TForm1.hoge;
という事でしょうか?
procedure TForm1.hogeを作成したのですが、「このメソッドの呼び方はクラスメソッドだけ」とダメ出しされました。
インスタンスのメソッドを代入してください。
hogeがTNotifyEventと同じ形じゃないと駄目だと思う。 ヘルプで「of Object」で検索。
767 :
766 :2007/12/08(土) 03:28:24
あ、本当だ。頭のTがいらなかったんだな。スマン俺のは無視してくれ。
>>758 とんでもない条件って?
2年ほど使う予定なんですけど、アカデミック辞めたほうが無難ってことです?
業務、シェアウェアの開発どころか フリーウェア作って公開もNGとかだったような。
771 :
デフォルトの名無しさん :2007/12/08(土) 10:18:21
インターネットの「お気に入り」の並び順を得たいのですが、 レジストリというかバイナリ構造に関する知識が必要で、 行き詰っています。 そこで、もしサンプルや参考になるソースがあれば 教えていただけないでしょうか。 よろしくお願いします。
474 名前:デフォルトの名無しさん :02/07/08 19:21 お気に入りの順番を保存してる HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MenuOrder\Favorites の構造って既に調べた方います? ちーともわからなかった。 475 名前:デフォルトの名無しさん :02/07/08 19:25 つか、donutのソース嫁よ…… mtlweb.hあたりにあるから。
>>770 いま一通り規約に目を通してみたんだが、何処にもそんなとんでもない内容の記述が見当たらないんですが…。
ただ私が見落としてるだけの可能性もあるので参考までに訊いてみますけど、何処で見ました?
774 :
771 :2007/12/08(土) 17:39:53
>>772 ありがとうございます。
やはりdonutですか……
C++はサッパリなのですが、挑戦することにします……
サブスレッドでexceptした例外をメインスレッドに転送って無理? 最悪 except on E: Except do begin LastExcept := e; OnSynchronize := OnError; Synchronize; end みたいにすれば出来るんだろうけど できればEのクローンを保持して後から通知できるといいんだけど
>>775 なんかきたない気がする
スレッド間、プロセス間の通信は、それなりの方法でするべきかと。
3層CS構造のDBアプリを作りたいです。 フロントエンドはDelphi、バックエンドはHTTP通信経由でApache としたいです。 ミドルウェアとして使えるコンポーネントがあれば、教えてください。 よろしくお願い致します。
>>775 例外の原理はスタックポインタを保存しておいて、そこに撒き戻すというものです。
一方スレッドの原理はスタックポインタを切り替えるというものです。
ですからスレッド間の通信は原理的に不可能です。
GUIアプリなら窓ハンドルを持ってるでしょうからメッセージを投げるのが簡単でしょう
ただし、そのコードで Eの寿命は end までですから SendMessage 系でなければいけません。
PostMessage で遅延通知したいなら
Eのコピーを作らなければいけません。
アカデミックは罠
>>777 学習目的にフリーでソフトウェアを配布して
使用者からフィードバックされた内容を基に
ソフトウェア開発の学習に精進するのは可と
解釈するがな、普通は。
たぶん君だけじゃないかな?
間違った解釈してんのは。
普通なんて曖昧な言葉でライセンスを解釈するのは禁止。 CGに問い合わせろが正解。
日本語が駄目なやつがいるなw
D2006 Oracle10gで DirectOracleAccess使ってDBアクセスしてるんだけど 前回のクエリーの結果が返ってきていない状態で次のクエリーを流すと エラって落ちちゃいます。(当然か。。) 前回の結果が返ってくるまで次のクエリー発行を待機させるとして どんな方法が良いでしょうか。稚拙な質問ですが宜しくお願いします。
問い合わせを同期にする
セッションを分ける
>>778 http通信はIndyかMSXMLをCOMで使う。
MSXMLはAJAXを解説したコードが参考になると思う。
788 :
762 :2007/12/09(日) 18:19:00
返事が遅くなってしまいましたが、書き忘れがありました。 procedure hogeではなく、procedure hoge(x,y : Integer)でした。 この場合、TComboBox.OnChangeとはイベントの形式が違うことになり、代入できないのでしょうか? 正直、自分も勉強している最中なのでいまいち理解できていません。
悪いけど何言ってんのかさっぱりわからない
>>788 代入できません。型は合わせてください。
そもそもOnChangeなのにxyって何?
>>782 すまんかったorz
確かに曖昧な解釈は良くないです。
ということでライセンスについて問い合わせてみたところ、
あくまでも商業的じゃなく無償で配布を行うぶんには
問題ないという回答でした。
792 :
デフォルトの名無しさん :2007/12/10(月) 00:24:00
exeファイルを実行して、そのアプリのウィンドウハンドルを取得したいのですが、 何か方法を教えてください...
Form1.Handle
795 :
792 :2007/12/10(月) 02:09:00
>>788 まあそういう時はアダプタパターン。代入可能なメソッドで呼び出すかたちじゃね?
文字列を二進数に、また二進数を文字列に変換したいのですがどうやればいいんですか?
DelWiki避難所のTRegExprの説明を読んで,色々実験してますが、 その中で、MBCSの対応のコードを追加してみましたが、これは一体どういう効果が あるのでしょうか?もちろん、追加しても例えば、"."は2バイト文字にマッチしないこと は想像つくのですが。見識の深い方よろしくお願いします。
学生版だとソフト配布しちゃあかんの? 金払わせといて妙な制限すんなよな そりゃ衰退するわ
802 :
799 :2007/12/11(火) 07:30:29
>>801 thanks
見逃してました
誰かWikiかテンプレに追加しておいたほうがいいんじゃないですかね
あっ!
805 :
797 :2007/12/11(火) 14:50:35
>>803 ありがとうございます。さらっと見てみました。
>>797 の質問とはあまり関係ないのですが
function NibbleToBinaryStr(value:Byte):string;
begin
SetLength(result,4);
if (value and 8) = 0 then result[1] := '0' else result[1] := '1';
if (value and 4) = 0 then result[2] := '0' else result[2] := '1';
if (value and 2) = 0 then result[3] := '0' else result[3] := '1';
if (value and 1) = 0 then result[4] := '0' else result[4] := '1';
end;
この条件部分(andの使い方)の考え方がよくわかりません。
10進数から2進数への変換は2で割り続ける方法しか知らないのですがなぜこれで正しい答えが出るのでしょうか?
演算子としてのANDだろ。 っていうか2進数が何なのか知らないで使おうとしてるの。
807 :
797 :2007/12/11(火) 14:59:57
ごめんなさいヘルプ見たらなんとなくわかりました。 こんな事ができるなら関数用意してくれててもいいようなもんだけど。
808 :
デフォルトの名無しさん :2007/12/11(火) 22:45:01
くだらない質問で申し訳ないんですが type TObject1 = class(TObject) Object2: TObject2; end; TObject2 = class(TObject) Object1: TObject1; end; と循環参照させたい場合にはどう宣言すればいいのでしょうか?
forward 宣言を行います。 type TObject1 = class;//これが TObject2 = class;//forward宣言 TObject1 = class(TObject) Object2: TObject2; end; TObject2 = class(TObject) Object1: TObject1; end; 詳しくはヘルプをご覧ください。
>>809 TObject1のforward宣言は不要じゃない? あっても問題はないけど。
811 :
デフォルトの名無しさん :2007/12/11(火) 23:12:42
>>809 解決しました!
実はforward宣言は何度も試みていたのですが、コピペの繰り返しで
type
TObject1 = class;
TObject2 = class;
end
type
TObject1 = class(TObject)
Object2: TObject2;
end;
TObject2 = class(TObject)
Object1: TObject1;
end;
とtype宣言が分かれていたのが原因でした
ありがとうございました
812 :
デフォルトの名無しさん :2007/12/12(水) 13:10:04
vistaがこけそうにありません turboやd6perでは対応できないので borland野郎はここを見ておりましたら さっさと無料版2007出しやがってください お願いします
あれ?2008のDM、まだ来てないの?
814 :
デフォルトの名無しさん :2007/12/12(水) 23:04:44
可変レコードの使い方教えてください 例えば↓のレコードを実際使う時はどうするんでしょうか? type TRect = record case Integer of 0: (Left, Top, Right, Bottom: Integer); 1: (TopLeft, BottomRight: TPoint); end;
var R: TRect; begin R.Left := 10; R.Top := 10; R.TopLeft := Point(10,10);
オープンゲットボタンを押す 三人同時にだ!
>>815 ありがとうございます
case文のInteger型と0,1は特に使う必要はないものなんですか?
818 :
814 :2007/12/13(木) 00:06:32
あれ・・質問がまずかったかな 例えば case Integer of 1: (Left, Top, Right, Bottom: Integer); 2: (TopLeft, BottomRight: TPoint); に変更しても何ら影響はないんでしょうか
爆発する
序数を指定しろってだけだから値に意味はない。
821 :
814 :2007/12/13(木) 00:55:13
>>820 ありがとうございます!
安心しましたです
822 :
デフォルトの名無しさん :2007/12/13(木) 11:11:19
Delphi7 professionalにDSpackを導入したいのですが、 エラーがでます。 コンポーネント ⇒ コンポーネントのインストール ⇒既存のパッケージへ追加のtabを選択 検索パスに;H:\DSpack\src\DSPack;H:\DSpack\src\DirectX9を追加 パッケージファイル名にH:\DSpack\packages\DirectX9_D7.dpkを選択 OKを押す..と、 "は適切な識別子ではありません というエラーがでます。 検索パスの中やDirectX9_D7.dpkの中に、ファイルの先頭が英数字 と _ 以外であるのはないのですが、他にどの辺に異常があるとこの エラーがでますでしょうか?
文字列リテラルちゃんと閉じられてる?Shift-JIS以外のほかのコードページのソース 読むとたまにリテラルが閉じられなくなって、そういうエラーを誘発したような記憶が。
Delphiで作成したDLLにダイアログを表示させる機能を付けようと思っているのですが、 DLLに組み込んだフォームをShowModalで表示させると 呼出側アプリケーションとDLLのダイアログの両方がタスクバーに表示されてしまいます。 その状態でタスクバーの呼び出し側アプリケーションをクリックすると 呼出側アプリケーションがアクティブになってしまいます。 (キーやマウスの入力は無視されます) DLLを使わず、ダイアログのユニットをusesしてShowModalすれば ダイアログがタスクバーに表示されないことは確認しています。 DLLからダイアログを表示させる場合に何か特別な記述等が必要なのでしょうか?
アプリ側にウィンドウハンドルを渡してもらって、自前でDisableWindowとか
826 :
825 :2007/12/13(木) 22:17:42
しまったDisableWindowって何だw EnableWindowsにFalse渡すんだ
はじめまして。 最近Delphi 2006を使い始めましたが質問があります。 AssignFileでファイルR/Wをコーディングしようと思い、AssignFileの関数を ヘルプで調べながら、次の事を感じました。 ・ひとつの関数から関連する関数を知ることができない。 (AssignFileをヘルプで引いたら、ファイル入出力関連の関数を一覧で 見たい) ・関数の使い方をサンプルコードで知りたい。 (AssignFileのヘルプだけでは使い方が理解できない。Rewrite関数やRead関数を 導いて欲しい) Delphiスペシャリストの方々、上記の疑問にお答えください。 よろしくお願い致します。 (ヘルプの使い方をよく知らないだけなのかな・・・)
最近のDelphiのヘルプは使い物にならない、っていうのは常識として知っておく良いよ。
830 :
824 :2007/12/14(金) 10:24:48
Google, Grep, GExpertを駆使してヘルプの代わりにするしかない
>>824 ダイアログの親窓ハンドルをどうしてるの?
DLLを呼び出す方も自作なら Application 変数をどうしてるの?
>>832 そんなこと聞き返して答えられるようなら自己解決できるだろ。
>>824 ということで、EXEのApplicaiton.HandleをDLLのそれに代入する。
835 :
デフォルトの名無しさん :2007/12/14(金) 13:15:38
日本語(2バイト文字)の扱い関して質問があります。 レジストリから文字列(ファイル名)を取得したいのですが、 日本語のファイル名が文字化けしてしまいます。 次のように記述しています。 var buffer : array[0..999] of char; fileName : array[0..99 ] of char; i, namePos: Integer; begin {bufferには「レジストリの値」、 namePosには「ファイル名の文字の開始位置」が入る} i := 0; while (buffer[i + namePos] != #0) do// ファイル名の終端は0のため begin fileName[i] := buffer[i + namePos]; i := i + 1; end; Label1.text := fileName;//日本語のファイル名の場合、文字化けする end; このようにすると、英語のファイル名なら上手くいくのですが、 日本語のファイル名の場合は、2バイト文字にはならず、 半角記号が並ぶ状態(いわゆる文字化け)となってしまいます。 どのようにすればよいでしょうか?
836 :
824 :2007/12/14(金) 14:11:45
>>832 ,834
DLLのApplication.Handleを設定することで期待通りの動作ができました。
ありがとうございました!
>>835 namePosを間違えてるとか。
あとwhile抜けたあとに
fileName[i]:=#0;
必要なんじゃない。
レジストリの文字コードがSJISじゃないと文字化けしそうだな。
839 :
デフォルトの名無しさん :2007/12/14(金) 19:42:19
> 823 ご教授ありがとうございます。今のところ、教えていただいたのでチェックしていますが 未だ成功していません。また、何か思い出されましたら、教えてください。
>>828 情報ありがとうございます。
ヘルプをダウンロードして学習します。
ところで、Delphiの言語仕様が体系的に書かれている書籍は
ないでしょうか?
超初心者から中級レベルまで使えるリファレンス的な本がある
と、うれしいのですが・・・
猫本ってまだ売ってるのかな?
このままDelphi2007の無料版も出さずに行くつもりなら 新規ユーザーが増えずに衰退してくだろうなぁ。 あのMSでさえ2005以降はずっと無料版出してきてるのに。 長年いい開発ツールだっただけに、現状の迷走っぷりには 落胆してしまってる人が多いんじゃないだろうか。
5行もいらないだろ。「無料版欲しいなぁ」の1行でいいだろ。
844 :
デフォルトの名無しさん :2007/12/15(土) 01:48:07
>>842 マイクロソフトは、無料版増やす意味がある
良い開発言語(他のアプリも)があればOSの数が出る
そして儲かる
しかしデルファイは微妙
試供品を配っても客がつくかは微妙
試供品によろこんで金出さない可能性あり
もう魅力がないんだよな。 .NET に比べると、VCL は貧弱すぎるし。
846 :
デフォルトの名無しさん :2007/12/15(土) 02:00:13
下のようにC言語で定義されている構造体をDelphi6Perで使いたいのですが、どのように書けばいいですか? typedef struct _TBBUTTON { int iBitmap; int idCommand; BYTE fsState; BYTE fsStyle; DWORD dwData; int iString; } TBBUTTON, NEAR* PTBBUTTON, FAR* LPTBBUTTON;
CommCtrl.pas には type PTBButton = ^TTBButton; {$EXTERNALSYM _TBBUTTON} _TBBUTTON = packed record iBitmap: Integer; idCommand: Integer; fsState: Byte; fsStyle: Byte; bReserved: array[1..2] of Byte; dwData: Longint; iString: Integer; end; TTBButton = _TBBUTTON; があるよ
848 :
846 :2007/12/15(土) 02:16:59
>847さん CommCtrlを知りませんでした。おかげさまでまた一歩進めましたありがとうございます。
Del6Personalにソースついてたっけ?
850 :
846 :2007/12/15(土) 02:20:56
>849さん usesに書いたらコンパイラ通ったんで目的が果たせました。
_________ ∧,,∧ / ミ,,゚Д゚彡< つかないよ。 ミ つ旦)~~ \ 〜ミ ミ.  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ∪''∪ Turboにはついてるけど。
宣言部はあるんじゃないの? *.int とかで。
*.pasが無くても*.dcuが有ればusesできるよ。
>>845 開発ツールを純粋に比較すれば、Delphiは VisualStudio.NET より
格段に優れたツールだと思う。
MSのVS.NET担当者だって本心はそう思っているんじゃないか?
ボランティア精神が旺盛なプログラマが、PDFかCHM形式で
初心者向けの情報を執筆するだけで、多くのユーザーを獲得
できると思う。
つ スレタイ
>>854 そう思う人がごく少数なんだな、これが。ま、よく周りを見てみることをすすめる。
最盛期のD6やD5の頃だって、入門本も含めて20冊くらい本はあったけど 一度として、DelphiがVSやVBユーザの半数を超えたことはない。 ましてや、いま時代遅れになったものが復活するはずないだろう。 ボランティア精神が旺盛なプログラマもいなくなったし。
ボランティア精神が旺盛なプログラマがいなくなったというより その取り巻きがいなくなったことのほうが問題じゃないかな 今じゃFAQ整理してTips公開しても不毛な(代案無き)叩きばかり
>>856 俺の職場はDelphiできるやつおおいぞ。
というか、多くのプログラマは、複数の言語を習得するのを嫌がるよね なんでかな?、楽しいのになぁ
リモートDB接続って何?
先行単体版はベータテスト用だし、R2版は余計なものくっつけて値上げするし、 無償版は出さないことにしたし、ほんとにユーザ増やしたいんだろうか? 初心者に優しくするにはヘルプがひど過ぎるし。なんやかやイベントやるより 総力を挙げてヘルプ直した方がいいんじゃないか。あとリベート払って本だすとか。
>>861 本質的にプログラマではなくてサラリーマンなんだろうな。
>>835 レジストリに書き込んでいるのは自作のプログラムではないようですが
自作ではない別のプログラムで正しく読み出せているのでしたら
内部での記録形式がShift-JISではなくてUTF-8で書き込まれているかもしれません。
(この場合はUTF8ToAnsi関数で変換してみたら上手くいくかも)
別な可能性としてはそもそもレジストリに日本語ファイル名が正しく書き込まれていないことも考えられます。
この場合は読み出し側からはどうしようもありません。
>>860 CodeGearもがんばってますね・・・
WEBでDelphiのTipsあるいは学習用サイト、言語リファレンスなどの
情報をまとめた良質サイトを一般から募集し、そのコンテンツを買い取り、
製本・販売をしたらどうでしょうか>CodeGear様
VSと比較し、圧倒的に情報量は少ないですが、VSより良質のサイトが多
いように思いますので、ユーザーとメーカーが一体となった商売ができそうな
気がします。
ボクの考えてボク以外の誰かが実行するCodeGear再建計画はもういいですから。 せめて隔離スレでやってね。
まったくだ。
でも、零細企業じゃないんだからユーザが実行する再建計画っていうのもお笑いだよな
だってユーザーが求めてるDelphi像とCodeGearが求めてるDelphi像が一致してないんだもん
ユーザの求めてるものを作らない企業は終わりってことでしょ。それだけ。
質問です MediaPlayer などのコンポーネントで、 ファイルではなくストリームで渡せるもの、あるいは方法がありますでしょうか? 教えてください
MediaPlayerはダメ。 midiStreamOut等のマルチメディアAPIを使う。
874 :
872 :2007/12/17(月) 03:11:18
>>873 ありがとうございます。
調べてみます。
なんでWindowProcプロパティがpublicメンバなのにWndProcメソッドがprotectedメンバなん?/ ,' 3 `ヽーっ
WindowProcプロパティはアプリケーションからプロシージャを簡単にオーバーライドする為のモノなので publicで無ければならない。 WndProcメソッドはクラス内のメッセージ処理機構から呼び出されるモノで、クラス外から触られる事は無いので protected にする。
ああそうか、WindowProcの元の値を取っておいてユーザー定義関数内で呼び出せば元のメッセージ処理部分も呼び出されるのか。 トンクス
DelphiにIndyなんかのヘルプをインストールする方法を教えて下さい。 Del6perです。
パーソナルってオープンヘルプツールは付いてないのかな ヘルプ→カスタマイズが無い? .OHC や .OHI をエディタで編集してみたら?
Personalはヘルプ統合ツールないね
881 :
デフォルトの名無しさん :2007/12/20(木) 13:22:54
MDIでアプリを作ってるのですが、 メニューバーの左端と右端に、子フォームの大きさなどを制御するための アイコンやボタンが表示されてしまいます。 これらを非表示にするには、どうすればよいでしょうか?
フォームの uses に Graphics やら Variants やらがありますが、 不要なものを見つけるにはどうすればいいでしょうか。 また複数のフォームを使っていて、あるフォームでは Grids が必要だけど 別のフォームでは必要ない場合、両方に uses するとメモリ使用量に 影響してくるでしょうか。
>>882 消してもコンパイルが通るユニットは不要
データベースで機種依存文字の入力を弾きたいのですが どうやって判定したらいいですか?
>>882 自動的に不要なユニットを探す機能はないので
>>883 のやり方しかない。
基本的に空フォームのユニットに宣言済みのものは消しても無意味。
Forms.pasとか内部で使ってるからメモリ使用量が減る事はない。
ただパレットからコンポーネントを貼り付けると自動的にそのコンポーネントのユニットがusesされ、
その後コンポーネントを削除してもusesには残ってしまって結果的にメモリの浪費になる可能性はある。
886 :
882 :2007/12/20(木) 18:22:41
ありがとうございます。消してコンパイルで試してみたいと思います。 ただやたら大きくてコンパイルが遅いプロジェクトがあったりして 面倒ですが… 2番目の質問は、考えてみるとユニットの定義だけでは影響しないかなと 思いました。
TWebBrowserで、フレームのDocumentオブジェクトを取得したいのですが、どうしたらいいかわかりませんか。 (WebBrowser1.Document as IHTMLDocument2).frame.item(0); これで今開いてるページ内の最初のフレームが取得できるようなのですが、その最初のフレームのDocumentオブジェクトを 取得する方法がわかりません。 VBだと WebBrowser1.Document.frame(0).Document でいけるようなのですが・・。
888 :
デフォルトの名無しさん :2007/12/20(木) 23:23:32
以下のプログラムにて、プレビューを表示させ、印刷しようとしているのですが、プレビューウィンドウは開くのですが、肝心のプレビューが表示されないのです。 procedure TMainForm.PreviewClick(Sender: TObject); begin Report:=QrForm.QuickRep; CopyDataToRep; CopyStdToRep; Report.Preview; end; //印刷初期化? procedure TMainForm.SetReport(Value : TQuickRep); //印刷 begin FReport:=Value; end; QuickRepコンポーネント上でマウスの右ボタンをクリックして、ポップアップメニューの「プレビュー」を左クリックしプレビューを表示させようとしても、プレビューが表示されません。 プリンタードライバー等の本プログラム以外が原因かと思い、ドライバーを入れ替えたり、違うPCにてプログラムを実行させたりしましたが、それでもダメでした。 試しにと思い、デルファイ5をインストールしなおしもしましたが、ダメでした。 以前は、問題なく動いていたのですが・・・ この場合、考えられる原因には何が挙がりますでしょうか?
以前の環境も書かない、現在の環境も書かない、バージョンも不明。 エスパーを召還するしかない。
∧,,∧ しつもんっす。 ミ,,゚Д゚∩ ミ つ旦 ミ 〜と,,,~),,~) Vistaに乗り換えてみまいた。 んで、Delphi2007UP3適応のMainMenu表示が ファイル(&F) 編集(&E) ... とかではなく アクセラレータキーが消えていて ファイル 編集 ... と、なります。 ちょっと見た目がかっこわるいので、 これは、どうしてこうなるのか、 そして回避策はあるのかどうか、 ご存じでしたら教えてくださいませ。ヨロ。
同じくMainMenuの質問なんですが Altキーを押したときMainMenuにフォーカス(みたいなもの)が移ると思うのですが この状態を調べるにはどうすればいいでしょうか? MainMenu.Focusedで調べてみたけどうまくいきませんでした。
それはdel7からの仕様です
894 :
892 :2007/12/21(金) 04:09:12
すいません、解決しました Mouse.Capture=MainMenu.Handle で調べることが出来ました
そもそもVCLはスレッドセーフじゃないので、複数のスレッドから相互に利用しまくるというような使い方は出来ません。 というか、そういう設計は普通の人間じゃ無理でしょ。
で、 function Clipboard: TClipboard; begin if FClipboard = nil then FClipboard := TClipboard.Create; Result := FClipboard; end; はマルチスレッドを考慮していない。 だからif の直後に他のスレッドが同じ関数を実行したら 両方のスレッドで Createが実行される事になる。 実際にマルチスレッド対応にするなら セマファを用意してセマファを立てると同時に読む命令を使うか INC命令を実行してから結果が1かどうか見るというような手法を使うか APIで排他処理をさせるかという事になる。
Delphi6PersonalでTShellTreeView使ってる人に聞きたいんですが AutoRefresh:=true;でShellTreeViewが表示してるアイテムを消したりすると落ちるんだけどこれはどうすればいいのでしょうか? つーかこのコンポーネント意味がわからない不具合が多すぎる気がする。 代替コンポがあれば合わせて教えてくださるとありがたいです。
実際のとこマルチスレッドでクリップボード扱う場面が思いつかない
Printer なら普通に思いつくけど。
ま、VCL はスレッドセーフじゃない、ってことをくどくど言ってるだけだな
>>897
901 :
デフォルトの名無しさん :2007/12/21(金) 20:14:57
Delphi 6 Personal で以下のエラーがでてしまいます "Incompatible types: 'TStringList' and 'TStrings'" TStringsをTStringListに変換するにはどうすれば良いのでしょうか?
TStrings は抽象クラスだからインスタンスはつくてはいけない。 TStringList は、TStrings は下位クラスの具体クラスだから、通常はこっちの インスタンスはつくる。 上位クラスに下位クラスは代入可。逆は不可。 だから、「TStringsをTStringListに変換する」ことはあり得ない。
>だから、「TStringsをTStringListに変換する」ことはあり得ない。 しかし、場面によってはあり得るか。その場合は単に型キャストするだけ。
もし失礼な聞き方をしていたらごめんなさい。 TRadioButtonをコード上から出したくて、 privateに FRB1: TRadioButton; Createに FRB1 := TRadioButton.Create(Panel1)//Panel1のうえに作りたい FRB1.Top:=20; FRB1.Left:=20 としたけど、画面上に出てくれません。 FRB1.VisibleをTrueにしたりPanel1をForm1にしても出てくれません。 どこが悪いのでしょうか?Delphi7 + WinXP Homeです。
>>904 FRB1.Parent := Panel1;
あっ、出た! ほんとだ。嬉しいです! どうもありがとうございます。 でもこのときCreateの引数でいれてるPanel1は何の意味もないものなんですか?
オブジェクトの所有関係とウィンドウの親子関係は別の物。 オーナーを指定すれば、オーナーが破棄されるときに自動的に破棄される。
>オブジェクトの所有関係とウィンドウの親子関係は別の物。 >オーナーを指定すれば、オーナーが破棄されるときに自動的に破棄される。 よくわかりました! どうもありがとうございます。 [解決]
プログラミングの質問じゃないんですが・・ 「Delphiオブジェクト指向プログラミング」 著者: 塚越 一雄 Delphiの本を探してると、この本が目に付いたんですが オクとか古本屋では5000円〜の値段が付いてるんですけど、 そんなに良い本なんですか?
需要と供給
えぇ?マジ? Delphiの塚越本は古いの含めて全部持ってるが、売れるかな? DelphiXの本とかもあるぞ。
>オーナーを指定すれば、オーナーが破棄されるときに自動的に破棄される。 じゃぁFreeしなくていいの?いままでしてたけど…
>>913 オーナーが破棄されるときに破棄されればよいのなら必要はない。
しても特に問題はないが。
>>914 ありがと、FreeはDestroyと違ってやっても大丈夫なんだよね。
安心した。
>>915 たぶんコンポーネントの動作についてもFreeの意味についても誤解してる。
TComponent継承クラスのオブジェクトは、破棄されるときに自動でOwnerに自分が破棄されたことを知らせて
OwnerのComponentsリストから自分を外させるので、次のようにしても問題は起こらない。
X := TComponent.Create(Form1);
Y := TComponent.Create(X);
Y.Free;
X.Free;
Freeの話はこれとは全く関係ない。
x.freeとx.destroyの関係は、freeはxがnilでないことを確認してからdestroyを呼び出すことの一点。
例えばこれは意味がないけど問題もないコード。
x := Thoge.create;
x.free;
x := nil;
x.free;
しかしオブジェクトが解放されてもxは自動でnilになることはなく、破棄したデータのポインタを保持したままになる。
だから、
x := Thoge.create;
x.free;
x.free;
これは二重解放になり、メモリ上のデータを壊す可能性がある。まったく同じ理由で、
X := TComponent.Create(Form1);
Y := TComponent.Create(X);
X.Free;
Y.Free;
これもやってはいけない。
917 :
デフォルトの名無しさん :2007/12/22(土) 11:49:52
定数パラメータについて質問です。 function TForm1.AAA(const S2: string):Boolean; という関数がありまして、Form1のprivate変数でS1をstringで定義して S1 := 'abc'; if AAA(S1) then とします。関数 AAA の中でそれぞれを表示してみますと、S1は空白が、 S2はabcとなります。なぜS1は空白なのでしょうか。
>>917 俺の想像では
1 var s1 : string; というローカル変数を定義している 可能性70%
2 const s1 ='abc';とやってる 可能性30%
>>917 パーソナルでないなら、S1 の上でマウスの右ボタン、一番上の「定義の検索」
でどこに飛ぶか見てごらん。
ううっ…回答くれたのにゴメンなさい。S1をクリアしているところが ありました。恥ずかしい…
922 :
デフォルトの名無しさん :2007/12/22(土) 14:02:42
可能性0%でくるとは
GJ
>>916 ありがとうございます。
よくわかりました。
>>902-903 ええと、一行目のTStringsはTStringListですよね?
あとは良くわかりました。解説ありがとうございます。
ファイルの読み書きでTStringListを使えば簡単にできると
TStringListのインスタンスを使って説明してるサイトがあったのでそこを参考にしてました。
これからはTStringsを使うことにします
え?なぜ??
正しい理解には至っていないように見える。 まあ思った通りにやってみて躓いたらコード晒した方がいいかもな。
>>925 TStringList を今のままつかえばいいです。
TStringsは、インスタンス化できないので、そのまま使っちゃダメ
ああ、もうごめんなさい。こんがらがってました。 TStrings "の"下位クラスがTStringListなんですね。
931 :
デフォルトの名無しさん :2007/12/23(日) 23:30:57
ど素人質問で失礼します。 例えば↓のような場合 private FChanged: Boolean; public property Changed: Boolean read FChanged write FChanged; この場合、クラスメソッド内でFChangedを使うのとChangedを使うのに違いはありますか? まずプロパティの意味もよく理解してなかったりで・・・
>>931 同じ。
ただしChangedの実装が変わる場合もあるから(書き込み時に特定の処理をしたくなってwriteをSetChange関数経由で処理するようにした等)
そのあたりは留意。
>>931 プロパティは、アクセサとも呼ばれていて、
変数を直接公開せず、カプセル化するために使われる。
クラスのメソッド(クラスメソッドだと、別の意味になるので注意)内では、
その場合、違いはない。
ただ、プロパティにしておくと、FChangedがなくなって関数化されたりした場合、
そのまま使える。
つまり、変更に強い。
また、Delphiの場合、プロパティに変数を使用した場合は、
最適化されるため、変数と比べ、速度的な問題はない。
どちらを使うかは自由だし、場合にもよりけり。
ただ、俺は、クラス内では、そのプロパティがどう振舞うか、当然わかっているため、
自クラスのプロパティが特殊なふるまいをする場合以外は、
直接変数を使ってしまう場合が多いな(この場合、FChanged)
他の人の意見も聞いてみたい。
副作用を回避したいならFProp直書き 副作用を利用したいならPropに代入(SetPropを呼ぶことはまずない) そんだけ 上記に当てはまらない大半のどっちでもいいケースなら経験的にいってどーでもいい。 もしwrite FPropをwrite SetPropに書き換えたら FPropにアクセスしている部分をついでにちゃんと動くようにすりゃいいだけの話。 アホみたいにでかいクラスでもなければバグ撒き散らす事もないだろう。 UnitTestをちゃんとしてればの話だが。
>>932-933 おお・・・まさに求めていた答え。お2方ありがとう
最適化されるのなら、一応どちらでもOKという感じですね
あとは変更した場合に気をつけると。
>>934 もありがとう
とにかくプロパティの実装を変更したときに気をつけます
あ、クラスメソッドは別物でしたね・・・
クラスのフィールドであることを明示的に示したいから、僕はFChangedを使う。
939 :
デフォルトの名無しさん :2007/12/24(月) 05:28:35
16進数の文字コードを、文字へ変換したいと思っています。 1バイト文字の場合は、Chr(StrToInt('$33'))のようにして変換できたのですが、 2バイト文字の時の方法が分かりません。 例えば16進数で"82 A0"は「あ」を指すらしいのですが、 どうすれば"82 A0"を「あ」に変換することができるのでしょうか? よろしくお願いいたします。
procedure TForm1.Button1Click(Sender: TObject); begin Label1.Caption:= Chr(StrToInt('$82'))+Chr(StrToInt('$A0')); end;
他のアプリを終了してもなおロックされたままのファイルを アンロックして削除する方法ってありますか?
>>940 便乗するんですが、このコードや、
Result := Result + '%' + IntToHex(Byte(src[i]), 2);
をベースに
D5でUniCodeファイル名をTStringListやTGraphic等に読み込ますことは出来ないでしょうか?
>>941 プログラミング関係ないが
どのプロセスがロックしてるかを表示するツールならあったような。
そいつを殺してやれば削除できるんじゃねーの。
944 :
941 :2007/12/24(月) 13:18:01
>>943 そういうソフトは実際にあるんですけど、もっと使いやすいのが欲しかったので
自作で出来ないかなと思ったんですw
Win32APIスレで聞いたほうが。
947 :
941 :2007/12/24(月) 18:13:04
>>945 >>946 なんか難しそうなんで、黙ってUnlocker使うことにします。
ありがとうございましたw
そろそろ次スレの季節ですがテンプレは現行スレの
>>1 準拠で大丈夫でしょうか?
>>942 おそらくURLの%xxの形式でエンコードされた文字列を通常の文字列に変換して、
さらにその名前のファイルを読み込もうということでしょうか。
前者に関してはHTTAppユニットのHTTPDecode関数というのがありますので使えるかも知れません。
(Lerning版だとHTTPAppユニットがないかも知れません)
ただし%xx形式の文字列をデコードするだけでShift-JISコードに変換するわけではありません。
UTF-8や日本語EUCの文字列がURLエンコードされている場合はさらに変換する必要があります。
(たとえばWikipediaのURLはUTF-8です)
D5にはそういう関数がないので自力で変換する必要があります。
(UTF-8ならWindows APIのMultiByteToWideCharでワイド文字列に変換できそうですが…)
後者に関しては
もし文字列にShift-JISコードで使えない文字が1文字も含まれていなければ
文字列リストやグラフィックオブジェクトのLoadFromFileメソッドが使えます。
1文字でも含まれていると文字列リストやグラフィックオブジェクトのLoadFromFileメソッドは使えません。
(AnsiStringに変換される時点で別な文字に変換されてしまうため)
この場合はワイド文字列版のAPIを使ってファイルをメモリストリームオブジェクトに読み込み
文字列リストやグラフィックオブジェクトのLoadFromStreamメソッドでこのストリームから読み込みます。
(これについてはTurbo Delphi Explorerの方ですが確認しました)
TurboDelphiでは、Delphi4等の古いバイナリ形式のDFMファイルは 使えないのでしょうか?
>>949 Delphi 5で日本語の見出しを付けたラベルを貼り付けただけのフォームを作って
(もちろんバイナリ形式に変更して)試したみたところ、
Turbo Delphiで読み込む分には大丈夫みたいでした。
D7+FB1.5で質問です。 TDBEditでTimeFieldまたはDateTimeFieldを編集するときに hh:mm形式で秒を抜かして時分だけ編集するにはどうしたらよいでしょうか。 フィールドにEditMaskに!99:99;1;_ DisplayFormatにhh:mmとしてみたところ 編集や表示は出来るのですが例えば'12:34'と入力して次のフィールドに移り また戻ってくると'12:00'と表示されてしまいます。 そのまま何もせずまた他のフィールドにフォーカスを移すと'12:34'に戻ります。
D7です。 動的配列を明示的に開放しなくてもいいらしいですが、本当ですか? また、構造体70項目*n個の動的配列を使っていたらエラーが頻出します。 原因は動的配列によるものですか?70項目*1ならエラーはでなくなりますか?
954 :
953 :2007/12/25(火) 22:56:03
なんとなく自己解決。 やっぱりバカデカイ動的配列を使うのはまずいみたいですね。 あと、SetLengthであらかじめ大きいサイズを確保した方がいいのかな。
setlengthは何度も何度も呼び出すんじゃなくて、最初に余分に割り当てておくほうがいいらしい。
>>948 まさに後者です。これが知りたかった。
> この場合はワイド文字列版のAPIを使ってファイルをメモリストリームオブジェクトに読み込み
> 文字列リストやグラフィックオブジェクトのLoadFromStreamメソッドでこのストリームから読み込みます。
> (これについてはTurbo Delphi Explorerの方ですが確認しました)
私の脳内質問にウルトラスーパーデラックスな回答をありがとうございました(-人-)合掌
957 :
949 :2007/12/26(水) 00:42:17
>>950 ありがとうございます。 ん〜、じゃ何が原因かなぁ・・・。
>>953 何のエラーが出たのか言ってくれないと。
巨大配列でエラーなら、メモリ不足?
>>953 動的配列は、自動で解放してくれると思っていい。
手動で解放するなら、nil 代入しても開放される。
また、参照カウンタ方式で、どこからも参照されなくなったら、勝手に開放が基本で、
ただの代入では、コピーされない。
注意点は、string と違って、CopyOnWriteがない。
stringは、代入は、ただ参照先を入れているだけで、コピーされず、
hoge[1] := 'h"などど、各要素にアクセスしたときに、初めてコピーされる。
動的配列、hoge[1] := moge; などと各要素に書き込んでも、複製されない性質がある。
動的配列は、ふつうは、SetLengthであらかじめ確保しておく。
というか、素の配列のように、SetLength なしで、つかってたらアフォ(それはないと思うけど)
要素の追加が頻繁なら、TListなりリスト系のクラスを使う
ttp://homepage1.nifty.com/MADIA/delphi/delphi_bbs/200309/200309_03090055.html ↑stdDialogsユニットのTopMost関数を使って ”他のアプリがアクティブになっても常にアプリを最前面表示したい” のですが、
うまくいかんニダ。
uses ・・・, stdDialogs;
procedure TForm1.FormDeactivate(Sender: TObject);
begin
TopMost(Form1.Handle);
end;
としても他のアプリ(ブラウザ等)をクリッコするとアプリが最小化してしまいます。
アプリはForm1があるだけでその他のフォームやダイアログなどは出ないシンプルなアプリです。
どこがいけないのか教えられてあげます。 よろしくお願いされたまえ馬鹿やろう。
>>957 もしかして標準以外のコンポを使っています?
Turbo Delphi Explorerでは標準以外のコンポは設計時に配置できません。
>>962 使ってません。
ソースとexeがここにありますけど。
gamdev.org/up/img/10666.lzh
Delphi7とFireBird1.5で質問です。 IntegerフィールドをDBGridでチェックボックスで表示してオフならば0オンならば1をセットしたいのですが 可能でしょうか。
>>955 そうなんだ、間違ってたんだな俺。
結局実務で使わなかったから不具合出たかは解かんないけど。
>>963 試してみたところ、読み込み時に下のようなエラーダイアログが出て
アプリケーションアイコンがTurbo Delphi Explorer標準のものになってしまいますが
読み込みは上手くいっているようですし実行も出来ました。
---------------------------
エラー
---------------------------
リソースファイル C:\Documents and Settings\ (略) \デスクトップ\10666\Project1.res が見つからないので再作成しました。
---------------------------
OK
---------------------------
967 :
デフォルトの名無しさん :2007/12/27(木) 16:26:22
Delphi7だけど アクセスで作ったリスト(文字列とか数値のデータ型設定済み)を インポートかなんかで読み込んだら そのまま即配列として使えますか? それとも各列のデータ型に合うように一個一個型宣言しないと使えませんか? 教えてください。 使い道は単なる配列の用途です。100列×1000行、というか100項目のクラスが1000個、というか まぁその辺まだ理解出来てないレベルです。
>>964 OnDrawColumnCellイベントに自分で描けばいい。
>967 その前に聞こうか。TField型について調べたか?
a, b, c: integer; c := a div b; aが負数でもcはマイナスにならないのはなじぇ
b が負数だから。
>>966 ありがとうございます。
操作ミスか何かと考えます。
なぞなぞだったのかよ
turboの複数言語インスコって turboマネージャー亡き今はもう無理なんだっけ?
975 :
967 :2007/12/27(木) 23:22:38
>>970 personalだからHelpもリンクされてない
だめか
ごめn おれがいいたいのは たとえば a = -1 かつ b > 1 のとき c = 0 になるんだよ これってコンピュータ内部事情?
-0 になってほしいのか?
整数除算か
>>977 いやこれにたよったコード書いていいのか思って
もちろん整数についてだけど
>>976 実数が欲しいなら、
a, b, c: Double;
として、
c := a / b;
ってやってくれ。
負数を正数で割ると問答無用で0になるの?
>>980 いや
>>979 が知りたかったが
どうやら整数除算というやつは環境依存だそうだから
頼ったコードは書けないんだね
>>981 いやいや、 小数点は切り捨てられるって事。
つまり、-0.5→0 になる。
Delphiのdivは常に切捨てじゃないの?
-0.5を-1にしたいのなら、
Trunc, Floor, Ceil のどれかを使うと思う。
>>984 >Delphiのdivは常に切捨てじゃないの?
おお、じゃあそれに頼ったコード書いていいんだね
それを教えて
ヘルプに載ってるでしょ。
浮動小数点型のデータをdivで割ろうとすると「型が違う」とコンパイルエラーになる。
>>986 すまん・・・・
>x div y の値は,x/y の値を 0 の方向に向かってもっとも近い整数に丸めた値
載ってた・・・・ありがとう
頭悪すぎ・・
性格が悪いよりいいさ
けだし名言
でも環境依存のコードってあまりな
コンパイラオプション依存のコードは結構あった。
>>967 アクセスでカンマ区切りテキストでエクスポートして文字列リストに読み込む。
1行ごとに別の文字列リストのCommaTextに代入すれば各行にフィールドの文字列が入ります。
カンマ区切りテキストにした時点で全部文字列になっているので
必要に応じて整数型や実数型に再変換。
#しかし列が100もあるテーブルってどんなテーブルなんだろう…
糞スレ埋め
1000げと
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。