くだすれDelphi Part7 (超初心者向け)
2 :
デフォルトの名無しさん :03/10/04 00:42
質問者はトリップつけやがれい
3 :
デフォルトの名無しさん :03/10/04 00:42
つれた
釣れた(藁
5 :
デフォルトの名無しさん :03/10/04 00:42
Doubleの変数に格納されている数から小数点以下を取り出す、 あるいは整数部分だけを取り出す方法を教えてください。
7 :
デフォルトの名無しさん :03/10/04 00:45
こんな時に新スレ立てるな馬鹿
あぼーん
あぼーん
あぼーん
あぼーん
.NETでもVBってところが厨っぽくて良いね
あぼーん
あぼーん
>>5 あっちに書いた回答をコピーしときましょ。
じきに嵐も消えるだろうし。
Frac(1.23) -> 0.23
Int(1.23) -> 1.0
Int の返り型は実数型だから必要であれば型変換を。
とあるソースをコンパイルしようとすると、 [致命的エラー] Main.pas(n): ファイル 'Hoge.dcu' が見つかりません と出て先に進めません。こんな初心者にどうかお助けを。
まず、hoge.dcu または Hoge.pas がおまえのハードディスクにあるのかないのか。そこからだ。
>>20 検索したらHoge.pasはありました。別フォルダに。
と書いてふと思って同じフォルダにいれてやったらコンパイルできました。
同じ作者の他のソフトのソースフォルダに入ってました。
なんということだ、、、ReadMeにも書いてなかったよ。
これからは、.dcuが見つからないといわれたらまず検索かけることにします。
ありがとうございました。
>>21 ほかのフォルダにあるファイルをコンパイルしたい場合は、
プロジェクト・オプション・ディレクトリ条件の検索パスに、そのフォルダを指定するといいよ。
>>22 コピーしなくてもパスが通っていればいいのですね。
精進します。
StringGridでマウスで反転表示している部分の座標を取得するのは どうするんですか? イベントじゃなくって外部から判断したいんです.
Delphiの機能別関数一覧が載ったサイトはありますか? よければ教えてください。
>>25 サイトは知らないけど、ヘルプにありますよ。
ヘルプの目次で、「VCLリファレンス」→「ルーチン一覧(カテゴリ別)」
28 :
パソナラー ◆Tp0RXFvi3E :03/10/05 01:07
>>24 StringGrid.Selectionは?
30 :
デフォルトの名無しさん :03/10/05 01:49
delphiの質問スレは、超初心者、中級、上級に別れていますが、 どこからどこまでが超初心者なのでしょうか? Delphiに関係するレスのテンプレを張らないのはなぜ?
31 :
デフォルトの名無しさん :03/10/05 02:12
>>30 聞きたいこと書いて「あっち逝け」って言われたら
そこは自分と違うレベル。
32 :
デフォルトの名無しさん :03/10/05 02:48
fpsについておしえて
33 :
デフォルトの名無しさん :03/10/05 03:05
すいません、自己解決しました。
そいつは安心した
またアホアンチが荒らしてる
解決しました
このスレ荒らししかいないから終了だな
>>38 レスが付いたものは削除対象から外れるというのは基本中の基本です。
荒しはスルーしないといけません。
MDIなHogeHogeEditというのを作成して、無事動きました。 メニューのあるメインフォームと、子ウィンドウ用のフォームの二つで出来ています。 後日、これを他のアプリNanasiListで再利用しようとして、二つのpasをプロジェクトに追加。 メニューからHogeHogeEditの親を呼び出すところまではすんなりいきました。 しかし、NanasiListからHogeHogeEditのMDI 子ウィンドウをCreateさせる段階で、 「フォームが作成できません。有効なMDIフォームがありません」 と出てしまいます。 HogeHogeEditの親から子ウィンドウを作るメニューでやってみても同じく、 「フォームが作成できません。有効なMDIフォームがありません」 と出てしまいます。 どうしたらいいのでしょうか?
くそ、自己解決できない
>>40 長くてよく読んでないからハズしているかもしれなけど、
MDI親フォームはメインフォームしか出来ないよ。
>>42 NanasiListからHogeHogeEditのMDIの親を表示させることは表示できたのですが、子をCreateできないのです。
>>44 nanasiからhogehogeにメッセージ飛ばして
メッセージを受信したら子をcreateというのはどう?
46 :
デフォルトの名無しさん :03/10/06 11:54
環境:Del7 WinXP TIdFTPについて質問です。 ProxySettingsの設定について詳しく解説してあるHPなどを紹介して下さい。 もしなければ、ProxyTypeの部分だけでもご教授願います。 (ProxyのHostのところに適当なアドレスを入れて、Portのとこにも適当な数字を入れて いるのに、なぜかデータが送信出来てしまいます。Proxy以外の設定はちゃんとしている ので、プロキシの設定をしなければ通信出来ます。もしかしてこの状態で合っているの でしょうか?) 宜しくお願いします。
>44 TFormのFormStyleプロパティが適切な値じゃないとかじゃない?
訂正です。 >(ProxyのHostのところに適当なアドレスを入れて、Portのとこにも適当な数字を入れて 上記「適当」というのは「むちゃくちゃな」もしくは「デタラメな」という意味です。 >プロキシの設定をしなければ通信出来ます。 「プロキシの設定をしない状態ではもちろん通信出来ます。」という意味です。 ようするに 「デタラメなプロキシの設定にしているのに、なぜか通信出来てしまうのは 他に何か設定すべき項目を忘れていて、プロキシの設定がスルーされている からではないでしょうか?」 という事です。 2回も書き込んでしまい申し訳ございませんが、宜しくお願いします。
"TIDFTP ProxyType"で検索するとよろし。
TImageのMouseDownからMouseUpの間だけ、 TImageのカーソルを変更しようとしたのですが、 Cursorプロパティの値としては変更されているのに、 画面上では変更されていません。 何とか画面上で反映させる方法はありませんか?
with Image1.Parent do Perform(WM_SETCURSOR, Handle, HTCLIENT);
>51 一応それでいきました。けど・・・ 本当は自作カーソルに変更しているんです。 で、押下前Cursor1、押下中Cursor2、押下後Cursor1としているんですが、 実際には押下前Cursor1、押下中デフォルトカーソル、押下後Cursor1 って、なっちゃいました…(もしかしたら一瞬だけ押下中の最初Cursor2が出ているのかも…) Perform止めて、SetCursor(Screen.Cursors[2]);ってしちゃいましたが、 問題ないでしょうか…(これなら一応見た目は期待通りなんですが)
変化するならSetCursorでも問題ない。マウスキャプチャ中はカーソルが自動で変更されないのがVCLの仕様だから。 自前ドラッグドロップを実装しようとする場合、この制限に苦労したりするんだよね。 余談だがOLEドラッグドロップはOLE側がカーソル変化させるから気にする必要はない。
WebBrowserを利用してちょっとしたブラウザ作っているんですが、 いくつか質問させて下さい ・ブラウザでページが表示され、その中のボタン(BBSの投稿ボタンとかのHTMLのFORMで作成されたボタン) をEnterキーで押すことが出来ないので、押せるようにする ・キャッシュをすぐに読みに行ってしまうのをやめて、毎回しっかりとHTMLをDLするようにする これらの方法が全くどうしていいものか解りません、どなたか教えて下さい
Enter 等、キー入力に関しては 2ch ブラウザのコードを参照すればよいかと。 キャッシュ管理に関しては WinINet の API リファレンスを見ればよいでしょう。 ドキュメントの読み込みまですべて IE コンポーネントに任せている場合でもコントロール できると思いました。
56 :
デフォルトの名無しさん :03/10/07 08:55
最近になって突然Delphiに触り、統合環境の起動速度 & コンパイル速度に感動したのだが Delphiってどれぐらいの規模のプロジェクトまで一瞬でコンパイルできるの? 体験談を知りたい。
TOpenDialogにコンポーネントを追加することは出来ますか? 幾つかのコンポーネントを貼り付けたいと思っているんですが。
>57 できません。TOpenDialog は VCL のフォームではないからです。 SDK 的に拡張するにはダイアログリソースを用意する必要があります。 VCL ソースコードを読めるのであれば、OpenPictureDialog のコードを見れば VCL だけで OpenDialog を拡張する方法がわかるでしょう。
標準のコンポーネントでは、コンポーネントの貼り付けをフォームデザイナから行うことはできません。 探せば、デザイナに対応した拡張コモンダイアログセットがあると思う。
>56 CPU 速度、ディスク性能、メモリの容量に影響されるので簡単には結論は出せませんが。 C/C++ と違って、ほとんどいつもプリコンパイルヘッダが利いているようなものだからね。 フルコンパイル/ビルドをかけるとそれなりに時間はかかる。 Unit1.pas 一万行の人は、フルコンパイルに何秒くらいかけてるのかな?
61 :
デフォルトの名無しさん :03/10/07 10:39
62 :
デフォルトの名無しさん :03/10/07 11:11
マイコンピューターの画面で表示>詳細ってやった画面みたいな 項目名が上の一列に並んでいてそのしたにファイルやフォルダが並ぶっていう ああいう画面はどのコンポーネントでしょうか?? additionalのStringGridが近いと思うのですが、枠の線があった若干違います。 どうかお願いします。
>>61 スゲ━━━━━━(゚∀゚)━━━━━━ !!!!!
>62 Win32タブのListView ViewStyleプロパティをvsReprot 項目名はColumnsプロパティ
C/C++コンパイラは コンパイルの後にリンクが必要で ・リソースコンパイル・リンク ・インラインアセンブラを使うとさらにアセンブラ時間も必要だけど Delphiは1パスで全部やっつけちゃうからね。 体感的にはめちゃくちゃ速い。
>>65 んじゃなくて、C/C++ は原理的にソースファイルごとにヘッダファイルを読まなきゃいけないから。
Source1.c が以下で始まっていて、
#define hoge 1
#include <windows.h>
Source2.c がこうなっていたとする。
#define hoge 2
#include <windows.h>
C/C++ は言語仕様にプリプロセッサを組み込んでいるため、windows.h の数万行を読んで処理しないと
ソースコードが手に入らない。hoge の値が windows.h に影響を与えるかどうかをコンパイラが事前に知ることは
無茶なので、結局、ソースコードごとに関連するヘッダファイルを読まなきゃいけない。
プリコンパイルヘッダやヘッダのキャッシュで対応しようとしても本質的に限界がある。
これに対して Delphi ではプリプロセッサが言語仕様に存在せず、コードとコンパイル後のユニットの
同一性が保証され、かつ再利用できる割合が高い。このコンパイル済みユニットに型情報なども織り込むことで
フルビルドした場合でも、あるソースコードを参照するのは一回限り。メモリをつんでいれば
コンパイル後のユニットはメモリに残るので、RAMDISK を使っているようなものとなり、さらに速い。
SysIPAddress32(IPアドレスのEDITコントロール)を コンポーネント化して公開しているところってありませんか? これがあれば、IPアドレス指定が簡単になるんですが…
>>68 んなもん誰もコンポーネント化しねーだろが
合計約5万行のプロジェクトをDelphi7で再構築で2秒くらいかな。恐らくファイルI/Oの時間が大半を占めている。 ちなみにSATA Raid0で1Gメモリ、P4 2.6GHzの環境です。 どういう条件で発生するかわからないけど、大きなプロジェクトだとコンパイラの内部エラーよく出るよね。 Delphi7だとそれに加えてコンパイル(リンクのほうかも)のほうもバイナリが不正に生成されることがたまにある。(Delphi6まではそんなことなかったのに) そんな時は再構築で回避できます。速度が速いってスバラシイ。
追加で質問させて下さい。 先ほどのListviewのクリックした地点の値を表示させようと OnClickに ShowMessage(ListView1.Items.Item[ListView1.itemindex].Caption); と入力しましたが、一番左の項目以外だと例外が出てしまいます。 どうしたらよいのでしょうか・・・ お願いします
自己解決しました。 RowSelectをtrueにしたところエラー起きなくなりました ありがとうございました。
実は根本的解決にはなっていないがな。
>69 あんたの言葉の根拠がわからん。 少なくともVB関連ではあるし、 Delphiではドイツ語圏(?)のページに コンポというか、まぁ、サンプルはあるぞ。
>>55 サン
サンクス なんとかWEBページをキー入力出来るようになりました。
なんだかよくわからないコードを貼り付けただけだけど
でもどうもキャッシュを読みに行くのが???です
flag:=4;
url := '
http://xxx.xxx/ ';
WebBrowser1.Navigate(url,flag,Temp,Temp,Temp);
としてやってみてるけども、キャッシュを読んでしまいます
少し変えて、Navigate2でやってみても同様の結果…
なんででしょ
Delphi Personal6を使用しています。 文字列をURLエンコードしたいのですが、どうすればよいでしょうか?
Delphi Personal6にはFastNetのコンポーネントのNMURLとかないのです。
>77 作るの?
>>81 function hoge(s: String);
var
i: Integer;
begin
Result := '';
for i := 1 to Length(s) do case s[i] of
' ': Result := Result + '+';
'A'..'Z','a'..'z': Result := Result + s[i];
else Result := Result + '%' + IntToHex(Ord(s[i]),2);
end;
end;
こうゆうこと?
TRadioGroupで、枠なし表示って出来ませんか?
>>85 TPanelの中に入れて、TopとLeftをマイナスにしてからパネルを小さくするとあら不思議
>86 !(゚Д゚)!
88 :
◆R4Q6BkIMsA :03/10/08 01:51
質問させてください。 Richeditで特定の文字だけに対して、色やフォントを変更するということはできるのでしょうか?
できます
90 :
デフォルトの名無しさん :03/10/08 02:02
>>1 テンプレに「出来ますか系の質問はやめれ」っての加えるべきだったかも?
「出来る/出来ない」ってレスもらってもしゃーないもんな。
>>88 SelAttributesを検索してください。
>90 そんなこと書いても守るはずないじゃない。 無視すればよいだけだ
93 :
デフォルトの名無しさん :03/10/08 02:25
右の乳首と左の乳首をint関数で暗号化したいのですけど pingがC++だと通りませんが、delphiだとどうですか?
可能かどうかという質問に対してできると答えただけなんだが。 あとは調べればいいだけだろ。不可能なことを一生懸命調べても意味がないし。 だいたいヘルプを見るだけでわかる程度のことは事故解決しなくてはならない。
95 :
デフォルトの名無しさん :03/10/08 02:51
>94 正論なんで、「くだすれ」にはこなくて結構です。ってことだ。 いやほんとに、時間とスレの無駄遣いはお互いしたくないでしょ。
*****をしたいと思い調べてみたのですが、解答が見つかりません。 そもそも*****は可能なのでしょうか。 これはどう?
メタ議論は別のところでやりませんか?
メタ議論ってなんだ?
99 :
デフォルトの名無しさん :03/10/08 03:10
右の乳首と左の乳首をint関数で暗号化したいのですけど pingがC++だと通りませんが、delphiでの参考プログラムお願いします
やはりDel厨はVBスレを荒らそうとしているのか。
>>84 ありがとうございます。
いろいろやってWebBrowserに検索バーつけられました。
Delphi歴二ヶ月で簡単なプログラムが作れるようになりました。 次はマルチスレッドアプリケーションの勉強をしたいと思ってます。 なにかお勧めのチュートリアルや教則本はありますでしょうか?
Delphiに本なんかない。
ボーランドのサイトのDelphi部分にあるTipsかFAQのどっちかに マルチスレッドアプリケーションの作成みたいなのがあるから あれが分かりやすい。
106 :
デフォルトの名無しさん :03/10/08 04:22
デルフィーとVCだと、同じ目的のプログラムでどっちの方が実行速度は速いですか?
>98 :デフォルトの名無しさん :03/10/08 02:56 >メタ議論ってなんだ? 存在する言葉なんだから自分で調べろよ。
>>105 Tipsのページにありました。
ありがとうございます
マルチスレッドにチュートリアルや教則本を期待されてもちょっと困るかな。 マルチタスク/マルチスレッドを作ることはとても簡単なことで、難しいのは複数の スレッド間の協調/通信だったりする。 全体の性能を落とさずにデッドロックしないプログラムを作成するソフトウェア技術に関しては 本質的にはまだ結論が出ていない。 つーことで、深く学びたければソフトウェア科学の専門書を。 ちょこっと使うのなら、Delphi のマニュアルと、105 で指示されたドキュメント。
111 :
デフォルトの名無しさん :03/10/08 10:15
複数人でプロジェクトを進行してますが、 変数名がバラバラで、管理していて頭が 痛くなってきました。みなさんの変数の 命名規則があったら教えてください。
変数名(ローカル変数でしょ?)くらい自由につけさせたらいいじゃない。 管理の必要もないでしょ? まさかグローバル変数使いまくり?
好きだった女の名前を順に使ってますが・・・
すいません質問させて下さい。 Richeditで RichEdit1.SelAttributes.Color := clRed; としたのちに if fontDialog1.Execute then RichEdit1.font := fontDialog1.font; とダイアログでの色変更を反映させても表示はまったくかわりません。 RichEdit1.SelAttributes.Color := clRed; をしなければダイアログで変更できたのですが、これはどうすればよいのでしょうか・・・?
>>116 自己解決?かな
if fontDialog1.Execute then RichEdit1.font := fontDialog1.font;
の下に
RichEdit2.SelAttributes.Color := RichEdit2.Font.Color;
を加えてどうにか動きました。
お騒がせしましたぁー
フォームにメニューを貼り付けて メニューにイメージを関連付すると メニュー選択時の色が黒色なのは変更できないのでしょうか? 他のがWindowsで設定した色なのにここだけ黒なのは変ですよね?
119 :
デフォルトの名無しさん :03/10/08 13:04
IEと全く同じ外観を持ったプログラムを作成中なのですが、 IEのステータスバーを見るとプログレスやらアイコンが 乗っています、Delphiでこれを実現する方法は?
自己解決しました。
121 :
デフォルトの名無しさん :03/10/08 13:31
>>118 環境の問題か、何かしら変なことをしている。普通はそのような現象は起きない。
>>119 FAQみたいなものだが、載せたいコントロールのParentをステータスバーに実行時に設定する。
Alt+F12押して.dfmちょっと弄れば設計時でも乗せられるんだけど。 機転が利かない上に文句ばかりたれる人は大変ですね。。
>>46 >>48 です。
あれから、色々英語のHPなども見たのですが、結局分かりませんでした。
それで、思ったのですが、Indyの情報ってかなり少ないですよね?
もしかして、おとなしくTNMFTPでも使った方が良いのでしょうか?
>>122 WinXPとD7proでは 必ず再現しているみたいです、
単に新規フォームを作成してメニューを1つ貼り付けて
ImageListと関連付すると再現しませんか?
>>125 パッチを落としてみました。
ソース眺めてみます。ありがとう。
メニューはバグだらけ。
>>128 試しに他のPCで実行してみたら? 環境に影響されているかそれでわかると思うよ。
clMenuHighlight clHighlightText これらの値が期待したものかもチェック。
たまにXPのバグでこれらの値が変になっていることもあり。
とりあえず俺の環境では発生しない。
125はアクションメニューだから関係ないような。
>>130 色々と調べてみるとXPのWindowsクラシックスタイルの場合に再現するようです。
>>131 確認できた。クラッシク時に背景色がアイコン部分とテキスト部分で異なってしまうのですね。
回避するには...。互換性のあるオナニードローを実装するか、VMT書き換え(上級者向け)で
全TMenuItemに実装を変えたものを適用してしまうかかな。
最初黒色と言ったのでてっきりDC周りの初期化問題かと疑ってしまったよ。
クラッシクってなんだよw 俺の作っているアプリでも再現する可能性があるのでなにか対応しないといかんなあ。
またM$の非互換政策か…
>>131-134 がーーーっ、こんなことになっていたとは・・・。
なんで一番上だけ黒なんだよ・・・。
見えないわけじゃないからいいけどちょっと不細工
XPスタイル使用時にはメニュー関連で2色システム色が追加されているんだよね。 クラシック時にはこの2色が未定義状態となる。黒色なのはきっと0が返っているからだろう。 VCLのメニューでアイコン使用時は内部的にオナニー、もといオーナードローなんだけど その描画メソッド内でXPという判定はしているけど、XPスタイルを使用しているかの判定は行われていない。 そのため今回のような問題が発生しているのだろう。
だいたい場所と問題と修正箇所もわかったのですが、 マジで超初心者なものでDelphi的に良い修正方法が解りません。 この場合、直接VCLを修正するのはマズイのでしょうか? 何か良い方法はあるのですか?
138 :
デフォルトの名無しさん :03/10/09 00:35
処理の途中でスレッドが逝っても、自動的に スレッドが立ち上がり、常に一定数のスレッド が処理を行っているということがやりたいのですが、 スレッドを配列で宣言して、MyThread[i].Create(False); とforで回しながら、一定個数のスレッドを生成して、 スレッドが死んだら、nilやTerminatedを判定して 死んだスレッドのインデックスを利用して、また Createしてやるということをやろうとしてます。 ただ、スレッドの内部動作のせいなのか、Terminated やnilがうまく判定できていないような気がします。 上記の実現方法でもっとよい方法があれば教えて いただけないでしょうか。
>処理の途中でスレッドが逝っても、自動的にスレッドが立ち上がり (((;゚Д゚)))ガクガクブルブル
ちょっとテストしたいのでガブリデュークが撃てる掲示板教えて下さい 自分でレンタルbbs借りてやってみたけど撃てないんですよね(汗
>>137 自己責任でどうぞ。
コンパイルするのはリリース版だけでもいいかもしれないけどさ、デバッグ版も別にやらないとなんとなく気持ち悪い自分。
くれぐれも環境を破壊して再インストールということにならないように。
>>138 MsgWaitForMultipleObjects
D7の購入を検討しているのですが、 なにやらアクティベーションがあるらしいのですが、 これは会社と自宅あるいはノートPCの2台にインスコすると撥ねられて しまうのでしょうか? 客先でデバッグする可能性もあるのですが2ライセンスの購入が必要なのでしょうか。
>>144 ライセンスの件は直接電話で聞いて下さい。
ライセンスは契約の一つです。契約は個人と個人のものですからね。
なお、実際にやった結果は何の警告も出ませんんでしたよ。
>>137 VCLを直接直すより、派生して処理を変更する方がよい。
そうすると、Delphiを再インストールしたり、VCLのバージョンがあがっても平気。
>>145 どうもありがとうございました。
ボーランド社に聞いてみます。
148 :
デフォルトの名無しさん :03/10/09 12:42
>>142 ,
>>143 ありがとうござします。もうひとつ教えてほしいのですが、
アイコンを16*16で作って、FormのIcon
プロパティに読み込ませたのですが、
実行時に上部のドラッグするバー(なんていうかわかりません)
に表示されません。また下部のタスクバーにゴワゴワしたアイコンが
表示されてしまうのですが、どうしたら直りますでしょうか。
アプリケーションのアイコンは[プロジェクト]-[オプション]で
32*32のアイコンをセットしています。
149 :
デフォルトの名無しさん :03/10/09 13:00
MessageDlgのボタンのキャプション変更はどうすればよいでしょうか?
>>149 ぶっちゃけ無理なので、それっぽいダイアログを1から作るよろし
Delphiのアップグレードの優待価格っていくらぐらいですか?
152 :
デフォルトの名無しさん :03/10/09 13:52
>>152 たぶん、よく使うだろうからコンポーネントで一つつくっておけば?
ついでに、プロパティでダイアログ画像かえられたりすれば完璧。
>>152 まあまあ、MessageDlgも中は自前でダイアログ作ってるんだからさ。
なお、MessageDlgは関数なんで、その作成途中に割り込めないからどうしょうもないんだよ
MessageBoxIndirect
156 :
デフォルトの名無しさん :03/10/09 15:19
Delphiの勉強にシューティングゲームを作っているのですが、 自機が弾をいくつか撃って、3番目ぐらいに撃った弾が、敵に当たるとその 弾だけが消えるという事をしたい場合、 普通の配列変数を使うのは間違っているような気がします。 このような処理をする場合は、自前で最初から、 「この変数の次にはこの変数があって・・・」という情報を持つ 構造体などを定義して、それを処理する関数を作らないといけないのでしょうか? 他に何か便利な方法があれば教えて下さい。 宜しくお願いします。
>>154 > なお、MessageDlgは関数なんで、その作成途中に割り込めないからどうしょうもないんだよ
割り込み使えば良いじゃん。お馬鹿さん。
>>157 えー 割り込みってできるのー?
すごーい おしえてもらえませんかー?
155はスルーなのか・・・。とりあえずOSが用意しているAPIくらいは調べような。
161 :
デフォルトの名無しさん :03/10/09 15:29
>>156 配列構造よりリスト構造が適当か? という疑問かな?
初心者なら、
レコード型の配列でデータを持っておいて、その配列番号で管理したらいいんじゃないの?
レコード型にLinkNext というメンバーを持たせてそこに、次のデータのある配列番号を入れておく。
消去した時には、それに消去された方のリストをリンクしておく
>>161 よく考えてごらん。
モーダルダイアログなんで、メインスレッドからはそこにフックしようがないんだよ。
>>161 じゃー サンプル書いてみてよーー
フック って今知った言葉じゃないよね? ^−^
ああ、そうか。勘違いしてた。Delphiのダイアログはダイアログじゃないから WH_CALLWNDPROC でフックすればいけそうだね。
お前ら、いい加減にMessageBoxIndirect使ってください。お願いします。 161じゃないけど、MessageBoxでも無理やりフックすることは可能だよ。 できない言ってるやつはSetWindowsHookExを使ったことないの?
あっと、 WH_CALLWNDPROC だとフックしてもメッセージを変更出来ないか・・・結構厄介だな。 となると、フックした最初のメッセージで、ボタンのを窓ハンドル取得して無理やり書き換えるしかないか
168 :
デフォルトの名無しさん :03/10/09 15:52
WH_CALLWNDPROC(w 頭かてーな。
>>158 スレ違いでした。申し訳ありません。
>>162 >配列構造よりリスト構造が適当か? という疑問かな?
そう、それです。一行で終わる話をダラダラと・・・(^^;
LinkNextの方法でやってみます。
どうもありがとうございました。
出来た・・・・けど、格好悪いな var First:Integer; function WProc(code: Integer; wparam: WPARAM; lparam: LPARAM): LRESULT stdcall; var Msg:TMsg; var cname:string; begin Msg:=PMsg(lparam)^; SetLength(cname,1000); GetClassName(msg.hwnd, PChar(cname),length(cname)); cname:=PChar(cname); if cname='TButton' then if First<1 then begin inc(First); SetWindowText( msg.hwnd ,'hoge'); end; end; procedure TForm1.Button1Click(Sender: TObject); var hhk:HHOOK; begin First:=0; hhk:=SetWindowsHookEx(WH_GETMESSAGE , WProc ,0, GetCurrentThreadId()); try MessageDlg('test', mtError ,[mbYes],0); finally UnhookWindowsHookEx(hhk) end; end;
>>166 なんかかわいそうになってきたw
そんなの初めて知った。
Webで調べたけどのってなかったし・・・
>>138 > 処理の途中でスレッドが逝っても、自動的に
> スレッドが立ち上がり、常に一定数のスレッド
ってゆーかスレッドが逝ったらおかしいだろ。
逝かないようにしろよ。
173 :
デフォルトの名無しさん :03/10/09 17:00
質問です。 Memo.text := IdHttp.Get('hoge'); と StringList.Text := IdHttp.Get('hoge'); Memo.Text := StringList.Text; ではどちらの方が表示まで時間がかかりませんか?
前者
>>172 スレッド中でHTTPアクセスしてるので、
タイムアウトになると死んでしまうのです。
MessageBoxIndirectの使い方わかんねーよ・・・ 調べたところICONが変えれるという事で利用されてるみたいだが 一般的な例が何処にも無い。
>>176 スレ違いだが、Delphiのlicense.txtにそのへんのことは書かれている。
VCLソースいじりなんぞ、単にコンパイルの設定を変えたに過ぎない。
生成物は自由に配布していいことになっている。
>>178 いっぱいあるのだが。
おや、こんな所にも!
var
Params: TMsgBoxParams;
begin
with Params do
begin
cbSize := SizeOf(TMsgBoxParams);
hwndOwner := Handle;
hInstance := SysInit.HInstance;
lpszText := 'オマエモナー';
lpszCaption := 'Captionですがなにか?';
dwStyle := MB_OK or MB_USERICON;
lpszIcon := MakeIntResource(1001); //リソース識別子は整数が必要
dwContextHelpId := 0;
lpfnMsgBoxCallback := nil;
dwLanguageId := 0;
end;
MessageBoxIndirect(Params);
end;
一時的にpopupmenuを抑止したいのですが、 どうしたらよいのでしょうか?
解決できました。AutopopupをFalseにすれば良いだけでした。 (FormのPopupが出てくるから気が付かなかったんです。汗)
>>180 のMessageBoxIndirectの例を元にボタンのキャプション変更は
どうすればいいでしょうか?
それと、リソースにICONを作りましたがMakeIntResourceの識別子の
指定方法がわかりません。
わかる方よろしくです。
そう言わずに・・・
結局、Delphi7Pro購入しちゃいますた 39000円だった。 .netに比べるとめちゃ安いなー
>>183 フォームもいっこ作ってって方法じゃだめなのー?
>>183 ボタンキャプションは指定することができない仕様なのでAPI一発は不可能。
まさかボタンの種類の指定方法がわからんと言うんじゃないだろうなあ。
HelpにもMSDNにもそこらへんのサイトにも説明は載っているぞ。
>>183 たぶん、それを言ってる人はダイアログのキャプションと勘違いしてるんだと思うよ。
ボタンのキャプションはムリっぽい。
>>149 これやってみぃ。ちと裏技っぽいが。
procedure Form1.Button1Click(Sender: TObject);
var
MessageForm: TForm;
begin
MessageForm := CreateMessageDialog('これはメッセージです', mtInformation, [mbYes, mbNo]);
with MessageForm do
begin
Caption := 'NullpointerException';
Top := 100; //表示位置(指定しないと、Screenの中心に表示される
Left := 100;
Color := clAqua;
TButton(FindComponent('Yes')).Caption := 'ぬるぽ';
TButton(FindComponent('No')).Caption := 'ガッ!';
try
if ShowModal = mrOK then
showmessage('「ぬるぽ」が押されますた。')
else
showmessage('「ガッ」されますた。');
finally
free;
end;
end;
俺は随分前に自前のダイアログボックスを作って以来ずっとそれを使っているよ。
自分で作ってコンポーネント化して、 プロパティでボタンの数とキャプション変更 できるようにして、戻り値も決めるようなの 作ればいいじゃん。 一度作れば何回も使えるし、仲間でも 使い回しできるだろ。
「ダイアログの人」が「構って君」に認定されるまで、 あと数レス。
196 :
デフォルトの名無しさん :03/10/11 03:48
Delphi7ProにGExperts1.12を入れるとフォーム移動時等に??(忘れた).bplが例外起こしてエラー。 さらにDel自体終了させるとエラーでまくりでぜんぜん使えないんだが、、他の方つかえてますか?
197 :
デフォルトの名無しさん :03/10/11 13:06
TBitmapを使って画像の変換の仕方について教えてください。
TBitmapのFirstBmpを
ttp://v.isp.2ch.net/up/6a16c2d9dcab.png のように変形してSecondBmpに入れようとしたいのです。
SecondBmpですべてのピクセルを走査して対応するFirstBmpの位置の色をコピーする
とやってみようかと考えたのですが、
どこにどう対応するのかの式がうまくつくれないのです…。
拡大、縮小ならできたのですが、台形にするのができません。
どうか教えていただけないでしょうか。
Delphiに興味あるプログラム未経験者です。 Delphi6Personalの動作環境なんですが、本屋で解説書を立ち読みしたら XPが書かれていませんでした。でも、別の解説書を見たらXPの画面で色々、 説明していました。実際のところ、どうなんでしょうか? XPでも使えるんですか、使えないんですか?
>>198 Delhi6 がでたときには XP はまだ出荷されていなかったのです。
D6 は 2001/8月
XP は 2001/11月。
D6 は「Delphi 6 Update Pack 2」を当てることで XP 対応となります。
200 :
デフォルトの名無しさん :03/10/11 14:08
>197 数学の時間ですか? 左上を原点としましょう。 元画像の左上原点が変換後画像の左上原点になるとします。すると (0,0) は (0,0) に変換されることになります。 元画像の左下、(0, hi) は変換後画像の (0, h1) 元画像の右上、(wi, 0) は変換後画像の (wo, -(h2-h1)/2) 元画像の右下、(wi, hi) は変換後画像の (wo, h1+(h2-h1)/2) にそれぞれ写像されます。変換後の図形が台形ということですから、右側の片は左の片に対して上下に (h2-h1)/2 だけ飛び出していることに気づいてください。
>197 後はこのような変形を行うための式を出すだけです。 元の画像の座標を小文字、変換後の座標を大文字とします。 一般座標変換の式として、以下の式を考えます。 X = ax + by + c Y = dx + ey + f これに四隅の値を入れて係数を見つけます。実際は3カ所代入すれば値は決定します。 X = ax + by Y = dx + ey 0 = 0 + b * hi => b = 0 h1 = 0 + e * hi => e = h1/hi wo = a * wi => a = wo / wi k = d * wi => d = k / wi (k は -(h2-h1)/2) よって X = (wo / wi)x Y = ( k / wi)x + (h1/hi)y ただし k = -(h2-h1)/2
最後に、SetWorldTransform を調べてみましょう。 98/ME では使えませんが。 あとは GDI+ を調べることも意味があるでしょう。その場合でも基本的な変換マトリクスくらいは 自分で導出できるようにしておきましょうね。
ゴメン マチガエテタ。 元になる変換関数は以下の式で、(解き方は同じ) X = ax + by + c Y = dx + ey + f +gxy これを解くと X = (wo / wi)x Y = ( k / wi)x + (h1/hi)y - (2k /(hi * wi)) xy ただし k = -(h2-h1)/2 検算してね。
>>199 さん
>>200 さん
>>204 さん
ありがとうございます。とりあえず98SEにはインストールしているのですが(まだ使ってはいませんが)、
XPでも使えればいいのにな、と思っていました。これでXPでも安心して使えそうです。
こんにちは。 TListViewで検索結果を選択状態にしたいのですがどうすればいいでしょうか。
>>207 ListView1.Items[0].Selected:=True;のようにします。
>>208 ありがとうございます。
やってみます。
>>201 ありがとうございます。
変換後画像が変換前画像より大きいこともあるので
X=f(x)、Y=f(x,y)でx,yのしらみつぶしだと空きがあいてしまいました。
汚い式になりましたけど、
x=f(X)、y=f(X,Y)にもできましたし、本当にありがとうございました。
>>206 安心してっていうか、MSはWindows98とSEのサポートを
打ち切った(よね?)し、98、SEでの開発はやめたほうが
よさげ(もちろんクライアントの都合あってのことだけど)。
なんかサポート終了後にでたDirectXだか、WMPとかいれて、
おかしくなった人がちらほらいるので、たぶん動作検証すら
していないかも・・。
212 :
デフォルトの名無しさん :03/10/12 16:40
FormatDateTimeの表示のため、 一時的にロケールを変更したいのですが、 過去ログなど調べてみてもわかりませんでした。 どなたか教えていただけないでしょうか
>>212 何がやりたいのかわかんないけど、
各国の指定形式で表示したいなら
GetLocaleFormatSettingsでTFormatSettingsを定義して、
FormatDateTimeでやってもだめなのかしら。
試してないのでスマソ
時差がしりたいなら、設定できる国はそんなに多くないから、
手動でもいけると思うけど・・・。
214 :
デフォルトの名無しさん :03/10/12 20:44
いま、TreeViewをいじってツリー形式の表示をさせようとしているんですが、 情報がたくさんあるので、レコードをポインタ型で扱い、TTreeNodeの Dataプロパティにポインタで格納しています。 一定時間で書き換えるので、その都度、Treeview.Items.Clearでクリアして 再描画しているのですが、このときItemをClearした時点で確保したメモリは 解放してくれているんでしょうか。 解放してくれないようであれば、その都度、Nodeを全部なめてメモリも解放 しなくちゃいけないのですよね・・・トホホ
>>214 一個一個にOnDeletionが飛んでくるから安心しる
216 :
デフォルトの名無しさん :03/10/13 00:40
PerlやPHPにあるような連想配列を使いたくなって色々調べたところ、 TBucketListというのがあると知りました。 ヘルプを見てみますと、 ポインタに対してポインタを割り当てるリストのようです。 これを連想配列のように使うにはどうしたら良いのでしょうか? $AssocArray['hoge'] = 100; ↑のようなことを多少手数が多くなってもTBucketListで実現したいのです。 お願いします。
GraphicEXを使ってGifを表示できるソフトを配布したら特許侵害になりますか?
文字列に対する連想配列、って TStringList.IndexOfName('hoge') じゃだめ?
>>218 TStringListは単純な文字列リストだと決めてかかっていたので、
NamesとValuesプロパティの存在を知りませんでした。
これで連想配列風の処理ができますね。
ありがとうございました。
ただ気になってしまうのがTBucketListの使い方です。
添字がポインタのため、動的に生成した添字でAddやFindやExistsは行えませんよね。
Str := 'hoge';
BucketList.Add( @Str, 関連づけたいデータのポインタ );
とすると、後から 'hoge' で参照することはできないし・・・。
ヘルプには「簡単なハッシュテーブル」とありますが。
>>222 単に使用したポインタを格納しておいて、
最後にまとめてForEachでnilするだけのもの
だったりして・・・・
誰かWDirectXの使い方を解説してるページ知らない? DelphiXやQuadrupleDよりもプロパティやイベントいじる亊で 出来ることが多いみたいで初心者向きじゃないかなと思うけど ヘルプやチュートリアルがない。
ちなみにgoogleで調べたはんいでは日本語のHPは ないみたい。
functionを呼び出して、中で例外処理をしているんですが、 これってエラーが発生したときには、値がもどらないんですか? 例えば function hoge():String; begin try i := i / 0; except resu;t := 'Error'; end; result := 'ok'; end; みたいなのやりたいんだけど・・・ どうもnilが孵ってエラーになってるぽいなー。 ちと調べてみるか・・。
>>219-220 GraphicEXでgif表示できるソフトを配布するなら、特許期限の切れる04/6/19に配布したほうがよさそうですね
ありがとうございました
ああ、私のミスでしたすいません try try except end; finally result := ''; end; でいけるっぽいですね。 ちと検証してみます。
>>223 マジっすか?!
でもこれといった利用法が浮かばないんですよね〜。
>>226 try
// 例外発生するかもしれない処理を書く
// 例外が発生しなかった
result := 'OK';
except
// Try部で例外が発生したらここに来る
result := 'Error';
end;
でいいんじゃないでしょうか。
必要なら
>>228 のように、try〜finallyでさらにネストする。
間違ってたらごめんなさい。
>>229 調べてたらTObjectBucketListとかでてきた。
海外で検索してもでてこないし、ひょっとして、
コンテナフォームとかでDelphiのコンポーネントが
使用しているような、すごくコアな部分なのかも・・・・。
コンプレックス丸出しで恥ずかしい奴。
C#スレの荒れ様はヒドイな。
C#って.netFrameWorkないと動かないんでそ? その時点で駄目やん・・・・
↓バッファオーバーフローを理解していないのにバッファオーバーフロー煽り
238 :
デフォルトの名無しさん :03/10/13 21:51
Delphiはバッファオーバーフローがあるので使ってはいけません
239 :
デフォルトの名無しさん :03/10/13 21:52
VCLにトロイを仕掛けられます。
240 :
デフォルトの名無しさん :03/10/13 21:55
Delphi.NETのデモ見たよ。何あれ。w しょぼいねー。ププププ
あのくだらないことで申し訳ないんですが・・ 画面にListViewがありまして 値を持っているArryList(中身がオブジェクト)をListViewにセットして あげるという処理は Formにがつがつかかないで 別クラスで独立 させてあげたほうがベストですか? 別にビジネスロジックでもないので もしかして 別クラスに分ける 必要ないのかな?とふときになりまして。。
明日からまた仕事だと言う現実から逃避したい気持ちはわかる。
>>241 処理をどのユニットに書くかは、興味の対象が何に依るのか
による。だからその画面に関係する事柄ならその画面のユニット
に書くほうが良い。
244 :
デフォルトの名無しさん :03/10/13 22:01
>>214 最初から別クラスにしておけば?
そのクラスを画面と同じユニットに書いたって良いんだし。
>>241 単に関数ひとつ書けば済むように思う。
関数なら移動も簡単だし
>>241 別Classで独立が正解だと思う。
そのArrayListになっているオブジェクトと、ListViewの
オブジェクトを、そのClassに渡す形にすれば、他でも
応用できるかもしれん。
生産性を上げるために、よく使われがちなロジックは、
すべてClassで作成して、最初は面倒かもしれないけど、
開発中のソフト専用じゃなく、汎用性を持たせたほうが
後から楽になると思う。
249 :
デフォルトの名無しさん :03/10/14 07:53
スレッド処理を長時間行わせていると以下のような エラーが発生します。 >EThreadがモジュールProject1.exeのXXXXXXXXXで >発生しました。 >スレッド作成エラー:このコマンドを実行するの >に十分なクォータがありません。 >EOSErrorがモジュールProject1.exeのYYYYYYYYで >発生しました。 >システムエラー。コード:5 アクセスが拒否されま >した。 スレッドは生成時にFreeOnTerminateをTrueに設定 しております。 上記エラーについてソースのgrepや検索をしてみま したが、これといった解決に結びつく情報が見つか りませんでした。どなたか解決方法をご存知では ないでしょうか。
「スレッド処理を長時間行わせていると」 ってのと >十分なクォータがありません。 からみて、リソースリーク関連かな? タスクマネージャ等でアプリケーションとシステムの状態を監視しなさい。 まずは、問題を把握しましょう。 FreeOnTerminate を True にしても、Terminate しなかったら意味ないし、 解放し忘れリソースがあったらやはり問題だ。
>247 簡単にやるなら s1 := StringReplace(s1, 'フォーム', 'Form', [rfReplaceAll]); s1 := StringReplace(s1, 'あ', 'い', [rfReplaceAll]); かね。
>>252 Delphiに対するC++Builderの開発意図というか、存在の意味は?
>>253 C++を知っていれば、ObjectPascalを覚えなくても、その知識が使える。
多重継承等が使用できる。
意味はあるでそ。
>>254 なら、C#Builderも意味があると思わないかな?
>>255 んー、C#は新しい言語だから新たに習得するなら、その手間は
Delphiと同じだし、JAVA使いならJBuilderがあるし・・・・
あ、JBuilder for .netの予定がなくて、そのかわりがC#Builder
という意味ならわかるな。
>タスクマネージャ等でアプリケーションと >システムの状態を監視しなさい。 いちど検証してみてみます。 >FreeOnTerminate を True にしても、 >Terminate しなかったら意味ないし、 >解放し忘れリソースがあったらやはり問題だ。 Terminateはtry〜finally〜end;のfinally節内で やっています。
DateTimePickerで時間表示をする場合に、 デフォルトではhh:mm:ssとなっているんですが、これをhh:mmだけにするにはどうすればいいんですか?
>>251 ありがとう
Memo1にテキストファイルを呼び込んだ時に
それ加えたらできた。
>>258 表示する横幅を小さくして、時:分にするだけじゃだめかな?ww
261 :
デフォルトの名無しさん :03/10/14 12:32
RicheditやMemoの背景に画像を表示させたいのですがどうやるのでしょうか?? 色の変更のみしかできないのですか・・・?
>>258 と思ったら、Format指定できるじゃん。
プロパティのFormatにhh:mmでいける
Format プロパティ(TDateTimePicker)参照
>>263-264 情報ありがとうございます。
参考のページを見ながら試してみます。
ありがとうございました
>>254 TObject派生クラスは多重継承できなかったはず。
しかもnew演算子での動的確保必須。
で、THotKeyでWindowsキーを捕捉する方法 or コンポってありますか?
すいません、自己解決しました
バージョンアップを続けてきたら、最近のは重いから古いのを使ってるっていわれました。 開発に使ってるパソコンは高スペックなので、重くなったことに気がつきませんでした。 Delphiで作ったソフトで、重くなる要因ってなんですか? たぶんここで言う重いってのは起動速度かと思っています。 レスポンスがいちいち遅くなってるとは思えません。
269 :
デフォルトの名無しさん :03/10/14 22:24
Delphiしようと思ってるんだけど、始めは何をすればよいでつか 使用バージョンは6.0Personalです あと、初めて作るのにお勧めのプログラムも教えてくらさい
sl := TStringList.Create; これがしてあったら sl.free; を行いたいのですが、どののようにすればできるのでしょうか?
>>269 とりあえず、「こんにちは。Delphi」と表示することだな。
>>270 意味が分からん。あなたが書いているとおり、Freeすればいいだけ。
sl := TStringList.Create;
try
処理
finally
sl.Free;
end;
if sl <> nil then FreeAndNil(SL); sl が公開されていると言う前提で、こういう話では。 FreeAndNil という奴を使った事無いので これが正しい使用法なのかわかりませんが。
>>271-273 ありがとうございます。
今作っているプログラムは272さんか273さんので、できそうです。
FreeAndNilを使う前に、nil以外かどうか確認する必要はないよ。 中でやってるから。
276 :
デフォルトの名無しさん :03/10/14 23:07
delphiなんてマイナーな言語なんで今更始めるんだろ・・
漢は黙ってFreeAndNil(sl); if不要
278 :
デフォルトの名無しさん :03/10/14 23:14
作り終えたexeファイルのアイコン変えるのってどうするの?
なるほど、便利ですねぇ。
>>262 遅れましたけどできました。
ありがとう。
プロジェクトのオプションでアイコンファイルを指定します。 それからコンパイルしなおせばOK
メモ帳の枠サイズやフォントの設定はどこに保存されているんですか? あと、Delphiからメモ帳のヘルプを起動する方法も教えてください。
>>283 HKEY_CURRENT_USER\Software\Microsoft\Notepad
285 :
デフォルトの名無しさん :03/10/15 16:13
WinHelp に、ヘルプファイル名を渡せば表示されないかな? > 283
>>283 C:\WINDOWS\Help\notepad.chm
を実行するだけだと思われ
どっちも見つかりました。 これでメモ帳になりすますソフトが作れそうです。
>>287 タスクバーの右クリック対策をお忘れなく。
_________ ∧,,∧ / ページ設定の ミ,,゚Д゚彡 < 実装は教えてホスィ ミつ旦(ミ~~ \ >>メモ帳 @ミ ミ  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ∪''∪ あと、ショートカットキーのDelキーの 扱いとかも、注意ね。
FindComponentを使おうとしたら[エラー] hoge.pas(774): 未定義の識別子 : 'FindComponent'と出て 先にすすめません。 なにか、必要なことがあれば教えてください。
未定義の識別子エラーに対する一般論 その識別子を定義しているユニットを uses 節に追加しているか? 「使うぞ」と宣言しないと使えないよ。 エラーを出している識別子がクラスのメソッドやメンバーの場合、(クラス名).(識別子名) という長い名前を持っている。 と考えてよい。クラスの外から使う場合には何らかの形でクラス名を指定しなければいけない。 これで解決できない場合には、エラーが出ている行を提示してみなさい。
>>292 FindComponentのユニット名ってなんでしょうか?
ソースもヘルプもないの?> 293 エディタ上で "FindComponent" って打って、単語の上で F1 押して何か出ませんか? 所属するクラス名がわかるから、クラス名の説明ページに行くとそのクラスを定義している ユニット名がわかります。
>>268 Delphi固有の重くなる要因というのはあまり思いつきません.
恐らく重くなっているのはアルゴリズム的な理由か
使っているWindowsの機能がユーザーさんの実行環境で重くなっているかだと思います.
#実はプロジェクトオプションの『最適化』のチェックがはずれているとか…
でもたいていは最適化しなくても充分速いので可能性は低いと思います.
そのユーザーさんに遅くなる箇所や実行環境を尋ねるのがよいと思います.
本当は実際に遅いPCで実行してみるのが一番よいのですが.
Delphi7でエディタを別のエディタで開く事はできないでしょうか? DelWikiにある「別のエディタで開くツール設定」はDel7ではできないようなので。
TEdit/TMemo で、文字を右に寄せるにはどうしたらよいのですか?
295 さんの記述に補足 >268 速度が遅いことの原因はそれこそ無数に考えられるので、具体的なものが無いと具体的な話はできません。 経験則としては ・不必要なフォームを起動時に大量に作成している。 ・それらが巨大なリソース(ビットマップとか)を抱えている。 ・遅いマシンは古い OS を使っていることが多く、実は OS 間の動作の差異だった ・遅いマシンは古い CPU を使っていることが多く、キャッシュが効きずらい ・機能を追加していく過程で、不必要なデータ構造を用意/作成している。 どれも Delphi 固有の話ではなく、一般論ですが。
>297 フォームデザイナ上で確認できなくてもよければ。 プログラムの適当な位置(初期化部とか)に SysLocale.MiddleEast := True; を追加。 あとは TEdit や TMemo の BiDiMode を bdRightToLeftに設定。
not((Boolean式)or(Boolean式)) の式って、もっと簡略化出来そうな気がするんだけど、 not削ってorをxorにするだけでいいのかなぁ… なんかxorって直感的に理解できない…
おいおい。 義務教育から集合論が抜けた影響かなぁ? not( B1 or B2 ) = (not B1) and (not B2) B1 と B2 をそれぞれ分割できないのであれば、これ以上の簡略化はできません。
>301 即レス感謝。要因として、 ・xorが理解出来ていない ・Delphiでこの式を簡略化できる構文・演算子の類がサポートされてるのかなとか思った だけですんで… まぁ義務教育程度の数学ならなんとか。 Delphi使い始めて日が浅いのでご勘弁を…
>>302 論理式としてそれ以上簡単にはできないのですよ。
せいぜい、専用の判定関数を作ってそれに渡すとか。
1 + 1
をもっと簡単に表現したい。といわれても困っちゃうでしょ?
A B A xor B 0 0 0 1 0 1 0 1 1 1 1 0 A xor B = ((not A) and B) or (A and (not B))
というか、xorの使い方知りたいんでしょ。 A:=A or B; とかいってビットフラグをたてることがたまにあり、 このフラグを消す場合、 A:=A xor B; と書くことがあるんだよ。 SetWindowLongでこういうことをよく使う。
xor は 面白い使い方が色々あるね。 1、レジスタ同士の交換 2、マスク代入 (指定したビット位置にだけ代入する) a :=a xor ( (a xor b) and mask) ) 3、2を応用して チャタリングキャンセラ(2度同じなら採用する)
>305 ビットフラグを立てるときに A:=A or B; は使うけど、 クリアするときは A := A and (not B); ではないかな? A:=A xor B; は反転だよ。 解っていて、ケアレスミスで間違えたんだと思うけど。
既に立っているならクリア出来るけど、あんまりやるべきじゃないね。
300 さんは 304-308 の話が理解できるようにちゃんと勉強してください。 基礎勉強は大事です。使う言語や OS, 環境が変わっても基礎は生きます。 以上、年寄りの説教ということで。
310 :
始めました ◆1TogqVyiR6 :03/10/16 10:54
delphiを昨日から始めた物です。 質問なのですが、edit では Caption で文字を表示したりできるのですが MemoだとCaptionがないのです。 Memo.Text := 'なんとか' で表示させられるのですが 起動時に毎回ヤルのはなんだかちょっと・・・ 左のプロパティでどうにかできないでしょうか?
>>310 VBとかでは Edit(1行編集)とMemo(複数行)が同じですが
Delphiでは分かれています。
Edit の文字初期値は Text
Memo の文字初期値は Lines です
>>310 なんかよく意味がわかんないけど、
FormCreateのところで、memo1.text := ''じゃだめなのけ?
いやなら、memoを右クリック、エディタで表示、
Lines.Strings = ('')のとこの文字を変更して保存するとか。
313 :
始めました ◆1TogqVyiR6 :03/10/16 11:08
>>311-312 左下の奴の Linesの右にある・・・をクリックしてMemoの内容を変更できました。
どうもありがとうございます。
また困ったら来ますので宜しくお願いします
ListboxやChecklistboxのItemsをiniファイルか何かに 保存して、また読み込めるようにしたいのですが、微妙に分かりません。 どなたかお助けください。
>>314 items.SaveToFileじゃだめかな
ヘルプのTStrings参照
VS.NETみたいなタブコントロールを公開してるところを見つけたら教えてください。 MagicシリーズのVCL版みたいなのを。
>>316 Magicシリーズっていわれてもわからん。
Delphian World、Indy、JEDI、TORRYを
delphi、VCLとともに検索汁
>>315 レスどうもです。
それも試していたんですが読み込むのが分かりません。
保存はできるんですが読み込もうとするとエラーでフリーズします。
var aaa:Tstrings;
begin
aaa:=listbox1.items;
aaa.SaveToFile('text');
で保存して
begin
aaa.LoadFromFile('text');
listbox1.items:=aaa;
だとなぜ読み込めないんでしょう?よく分かりません。
>>318 listbox1.Items.SaveToFile('C:\test');
listbox1.Items.LoadFromFile('C:\test');
>>318 TStringsで悩んでそうだから補足。
TStringsは抽象クラスだから、そういう使い方は本来できない。
直接、インスタンスしないでくださいというヘルプ通り。
もし、aaaにいったん入れてからやるのなら、TStringsを継承している
TStringListあたりを利用して
var
aaa: TStringList;
begin
aaa := TStringList.Create;
aaa.LoadFromFile('C:\test');
listbox1.Items.AddStrings(aaa);
aaa.Free;
とでもすればよろし
321 :
デフォルトの名無しさん :03/10/16 14:27
初歩的な質問ですみませんが ValueListEditorのヘルプはどこでしょう? 6Personalなのですがリンク切れとなっていて見つかりませんでした また、WEB上にもほとんど情報を見つけることができませんでした
Delphi7のヘルプには存在するのだが。Delphi6貧乏ユーザのことなど知らん。
C++Builder6 Personalのヘルプにも存在するのだが。Delphi6は‥‥‥‥ごめんなさいっ!
>>321 プロパティ
Cells ColCount DisplayOptions DropDownRows ItemProps KeyOptions
Keys RowCount Strings TitleCaptions Values
メソッド
DeleteRow FindRow InsertRow Refresh RestoreCurrentRow
TCustimGridを継承。
あとはDel6の補完機能でなんとか汁
>>319-320 レスありがとうございます。できるようになりました。
なんとなく概念が分かってきました。もちっと勉強してみます。
ありがとうございました。
326 :
始めました ◆1TogqVyiR6 :03/10/16 15:34
でもあたしはいつもお姉系だけどね
327 :
始めました ◆1TogqVyiR6 :03/10/16 15:36
ぁぅ・・・・ 誤爆です・・・・
>>327 ワロタ
ちょっとでも気に入った。
なんでも聞いてくれww
329 :
デフォルトの名無しさん :03/10/16 18:12
右クリックのプロパティで表示される [場所]と[ファイルタイプ]の文字列を取得したいのですが、 どうすればよいでしょうか。
すいません、自己解決しました。
333 :
デフォルトの名無しさん :03/10/16 22:01
ShellListViewからListViewにドラッグした際に、ドラッグされたファイルのパス をListViewに表示させたいのですがうまくゆきません。、ListView側のDragDrop は以下のようになっています。なにが違っているのでしょうか。 procedure TForm1.ListView1DragDrop(Sender, Source: TObject; X, Y: Integer); var Path: String; begin Path := (Source as TShellListView).Selected.Caption; ShowMessage(Path); end;
>>331 何が自己解決したのか、書いてくんないとわかんない・・
どのソフトのソースを見ても 例えばItem := TMenuItem.Createをしたのに Item.Freeがされていませんが、いいのでしょうか?
親メニューが破棄されれば自動でFreeされる。また明示的にFreeしても親メニューから削除される。 ソースを見れば一目瞭然なんだが。
ほとんど常に、メニューアイテムは TMenu/TPopupMenu と一緒に使われる。 その場合、TMenu/TPopupMenu の破棄と同時に所属する TMenuItem も破棄される。 ので、ほとんどの場合問題ない。 もし、たとえば自分で TMenuItem を挿げ替えたりしている場合など、TMenu に所属していない 単独の MenuItem を使っているときは、自分で何かをしないといけない。 TComponent 一族の共通の能力
>>338 TComponentの派生は、すべて親が破棄されれば自動的に破棄されるってこと?
それとも
type
TForm1 = class(TForm)
の中にあるか、親のFormを指定しなければいけないときはフォームを破棄すれば、
自動的に破棄してくれるってこと?
>>333 フルパス ShellListView1.SelectedFolder.PathName;
ファイル名 ShellListView1.SelectedFolder.DisplayName;
スレ違いかもだけど、パスワードの解析ってできるますか?
342 :
デフォルトの名無しさん :03/10/17 12:25
SamplesタグのTShellListViewは見た目はいいけどイマイチだな。 Shellを扱えるいいコンポーネントないのか? (for Del7)
>341 コードがあればできるよ。
すんません(´・ω・`)
347 :
バグですか? :03/10/17 13:42
Delphi5・BDE5.11でTBatchMoveを使用してParadoxテーブルのコピーを 行った所、「ディスク容量が足りません」って出ます。 ディスクの空き領域が4.00G(4,295,634,944)付近の場合のみ発生します・・・ ちなみにテーブルは200M程度なので、足りないわけ無いはずなのですが、 ディスクの空き領域が3.99Gになると発生しません。 何か分かる方居ますか?
>>346 DelのShell系コンポは全部バグバグで使えるこれぞ本命ってのが
ないよな。
>>349 >hp.vector.co.jp/authors/VA015730/vcl/vclworld.html
は使った。実行したらドライブのアイコンがなぜか
秀丸のアイコンになってたよ。
351 :
デフォルトの名無しさん :03/10/17 14:02
クラスのインスタンスをリスト構造でつなげようと思うのですが、 こんな作りで良いのでしょうか? アドバイス宜しくお願いします。 type TMyProc = class before,next : pointer; end; TPMyProc = ^TMyProc; procedure Create; begin new(pMyProc); pMyProc^ := TMyProc.Create; end; 構造体でリスト構造を作っていて、その後クラスにする必要性が出てきたので こんな風になってしまいました。 このあと、BeforeやNextメンバに入れていくコードを書いていて、 実際に動いているのですが、クラス自体がポインタなのにそれを さらにポインタにしている、こんなコードで良いわけないような気がしましたので、 アドバイスを宜しくお願いします。
>>350 ワラタ
TImageListで指定できないのね・・・
今の仕事が終わったら、ヒマになるし作ってみるかなw
>>351 type
TMyProc = class ;
TMyProc = class
before,next : TMyProc;
とやったら変な事やらなくても 良いと思うが?
ループがぐるぐる回っている(中でApplication.ProcessMessagesは発行しています)時、 ボタンコンポに対して、CM_MOUSEENTER、CM_MOUSELEAVEが 全然送られてこなくなってしまうのですが、対応策はないでしょうか?
>>355 .ProcessMessages -> HandleMessage ではダメ?
>>353 とても参考になりました。
ありがとうございます。
>>354 できました!
ありがとうございます。
>356 HandleMessage…ってのが有るんですね…知らなかった… 早速試してみます。
…なんか思いっきり処理が止まったようになる…(;´Д`)
>>359 スッドレwはここで
www.borland.co.jp/tips/delphi/dh004/thread_1.html
メインフォームのButton1OnClick中で ・前処理 ・サブフォーム呼び出し ・サブフォーム閉じるまで空ループ ・後処理 って、しているんですが、サブフォーム呼び出し中に、 メインフォームは操作できないけど、場所移動とかは出来るように、 ShowModal使ってないのですが、どのような感じで スレッド書けばいいのでしょうか…?
>>359 HandleMessageは Idle処理を回すから、 マウスイベントも処理してくれる筈だけど
その代わり処理がなかなかやってこない。 数回に1度 ProcessMessages -> HandleMessageとしてみたら?
ただ、ProcessMessages をそんな長い間呼ぶよりスレッドが使えるような処理ならスレッドで処理した方がいいよ
>>362 ・メインフォームのButton1OnClick中で
・前処理
・サブフォーム開く
・メインフォームの WindowProcイベントの設定
・サブフォーム側の閉じる処理で後処理 + メインフォームの WindowProcイベントを元に戻す
--
メインフォームの WindowProcイベントでメインフォームメッセージ以外を殺す
てのはどう?
みなさん色々とありがとうございます。 もう少しなんやかんやで頑張ってみます(;´▽`)
>>362 というか、その空ループの意味がわからん。
メイン→サブフォーム呼び出し
↓ ↓
待機 サブフォームで処理
↓ ↓
後処理←サブフォーム閉じたらメインに通知
みたいに、すればいいんじゃないの?
メインで空ループするんじゃなくて、処理が終わったら
メインにある後処理関数を呼び出せばいいと思うのだが、
これでも、メインは固まるっけ?
後処理も含めて、一つの関数内なので…(;´Д`)
あ、メインフォームの 子コントロール の全部のWindowProcを設定して メインフォームのWindowProcは触らないようにしないと逆か あるいは Application.OnMessage でやるか
>368 いえ、つくりが下手なだけで… 要は1関数中で問い合わせのダイアログを表示する、 ただし、呼び出し元のフォームは触れるようにするため、 ダイアログはShowで表示し、 ダイアログのModalResultを受けて、後処理する。 …だけなんです…
>>370 やぱーり関数を二つ作ったほうがいいと思われ。
1 SendMessage、PostMessageでイベントを発生させて後処理
(サブフォームの結果はメインの変数に入れる)
2 サブフォームのボタンを押したとき、サブフォームを閉じて、
メインの関数を実行させる。結果は引数で渡す
3 タイマーで定期的に監視。メインの変数が変化していたら
フォームが閉じられていたとする。
4 TEditをVisible := Falseで設置、サブフォームの結果を
Edit.Textに入れ、EditのOnChangeをイベントがわりに後処理を開始。
待機させる方法はたくさんあるよ。
Del6.0つかいはじめますた。 Form1からForm2をどうやって開けばいいんですか。 なんにもわからなくて。
たぶん単純に作ったと思うので、 Form2.Show;で表示されるのでは?
>>373 解決しましたありがとうございます。
usesに追加しないといけないんですね。
メッセージが出たから分かりました。
ありがとうございますた。
皆さんはデルを学ぶときに最初は本を買った? それともネットでしらべた?
struct{ char *moji; int *a; int d; }ckd[]={ "M", ¶_st, 0, "S", ¶_st, 1, "16", ¶_bit, 0, "8", ¶_bit, 2, "", NULL, 0, }; これをdelphiで定義したいんだが どう書いたらいいのだろうか
>>376 type
Tckd=record
moji:PChar;
a:^Integer;
d:integer;
end;
const
ckd:array[0..4] of Tckd = (
(moji:'M' ; a:¶_st ; d:0),
(moji:'S' ; a:¶_st ; d:1),
(moji:'16'; a:¶_bit ; d:0),
(moji:'8' ; a:¶_bit ; d:2),
(moji:'' ; a:NIL ; d:0)
);
(Delは基本的に変数の宣言と初期化を同時にすることが出来ない
配列も要素数を明示する必要あり)
TListの便利な使い方について等のtipsサイトってございませんか? Tlistについて勉強中なのですが、いまいち掴めなくて……
>>375 本もネットもなかったYo! 俺の時代は。
資料はDelphiのマニュアルとVCLソースだけさ。
Del本なんてなくてもなんとかなる。
>>379 便利も何もオブジェクトのポインタ格納する動的配列でそれ以上でもそれ以下でもない気がするんだが‥‥
C++STLのstd::vectorのVCL版
>>375 オレはネットで調べまくったよ。で、めぼしいページは保存。
けっこうたってから「オフィシャルコースウェア」の内容は必要ない
ものとなってたよ(オレの思い違いって話もあるが(藁)。
初心者は断然ネットの解説ページから入った方がいいと思う。
安くあげるならね。
383 :
デフォルトの名無しさん :03/10/18 03:56
>>347 Paradoxのエンジンには2GBの壁があって、2GBづつしか使えません
4GBはちょうど2倍のあたりなんで、それにひっかかったんでしょう
2GB以下の容量でHDDにパーテションを切って使うとよいです。
>>383 中級部屋にもう答えが書いてありました・・・
>>375 @nifty のDelphi会議室が国内ではもっとも充実した場所。
いまからだとどうやれば見れるのかなあ。
NIFTERMなんて新規ユーザーは使えないし。
スクロールバーを動かすと、そのPositonプロパティの数値を TEditのTextぷろぱてぃにセットしたいんですけど、string()でキャスト するとエラーになってしまいます。 どうすればよいでしょうか。
>385 FDelphi を持ち上げて ML を出さないところが香ばしい。 今は、ここ / 2ch が一番生きがいいでしょ
2ch が一番生きがいです
活きがいい
BDE(エリアス)について質問です。 このエンジンAS/400系等のいわゆるオフコン系とのやりとりでよく使用され、実績もある みたいですが、オラクルやMS-SQL鯖に使えますとマニュアルに書いてあります。 しかし、BDE使ってオラクルからデータを吸い上げて加工するような開発環境でデルファイ を使用するって聞いたことがありません。(少なくとも私の範囲では。) なぜでしょうか? 1:オフコン以外とやりとりする以外に使えないダメエンジン 2.エンジンは優秀なのだが、Web系(JAVA等)に流れている 3.パートナー企業の多さでMS製品群に押されているだけ。 いずれかだと思うんですが実際どうなんでしょう?
>>391 技術者としての自分の判断力より、他人の事例を聞きたいと。
まず、BDE にはオフコン接続能力なんてないぞ。何かと間違えているんじゃ?
あなたの周りでは、オラクルからデータを吸い上げて加工する開発環境では何を
使っているのですか?
単に
4.世界が広いことを知らない。
ではないのかな?
>392 そのとうり。 私はその他の人の開発環境をよく知りません。 技術者としてやってるわけではなく、業務上オフコンを使用する1ユーザーとして 我流でデル勉強してAS400ドライバ使ってWinの画面で操作できるように しただけという感じで、(なので超初心者向けに)いろいろ質問できる人がいないのですよ。 で、例えば、在庫管理や人事関係はオフコンで動いているけど 経理、財務系はオラクルDBで動いるとしてそっちのDBも触れるように してみたいけど、実績とかどうなのかと思って。
(なので超初心者向けに) =>(なので超初心者向けに投稿) です
Delphi/AS400 は、BDE を使って AS400 に接続しているわけではないですよね? BDE は、SQL link というプラグインのようなものを使うことで、各種のデータベースに統一した インターフェース/コードで操作できます。その代わりにここのデータベースに固有の機能が使えなくなります。 Oracle が Delphi/JBuilder を正式開発ツールとして売っていたことがある。ってのはご存知?
396 :
デフォルトの名無しさん :03/10/18 22:52
ExcelのファイルをCSV形式で保存したいのですが、SaveAsのFileFormat引数の 名前を教えてください。 //ファイルを保存 ExcelWorkbook1.SaveAs('C:\Work\Test.xls'{FileName}, Null {FileFormat}, Null {Password}, Null {WriteResPasswrd}, Null {ReadOnlyRecommended}, Null {CreateBackup}, xlShared {AccessMode}, Null {ConflicResolution}, Null {AddToMru}, Null {TextCodepage}, Null {TextVisualLayout}, 0);
399 :
デフォルトの名無しさん :03/10/18 22:57
RegisterClassWでつくったユニコードウィンドウに、 SetWindowTextWでキャプションを指定して文字化けします。 SetWindowTextW(Form.Handle,'あああ'); ws:='あああ' SetWindowTextW(Form.Handle,PWideChar(ws)); ともにダメです。 なにか変換が必要なのでしょうか? 助けてください。
>>400 それは正しくUnicode化がされていない。
Unicodeバージョンを使用するには、基本的には全ての末尾WのAPIを使用する必要がある。
だが、CreateWindowWまたはCreateWindowExWを使用することでUnicodeのウィンドウを生成することができる。
それとウィンドウが生成されていない時のテキスト保持はVCLが内部的に処理しているが
その処理はAnsiベースなため、Unicode化した時の整合性を保つ工夫をしないと予期しない動作が起きるかもしれない。
標準コントロールなどはGetClassInfoWを使用して正しくサブクラス化しないとUnicode化されない。
SetWindowTextWだが、そのようにAnsiとUnicodeが混在したイリーガルな状態だと正しく動作しないことがある。
その場合直接CallWindowProcまたはCallWindowProcWでWM_SETTEXTを処理すると問題を回避できる。
部分的Unicode化はとっても面倒なのでスキルの高くない人にはお勧めしません。
次期Delphiに期待するか、開発環境を変えるほうがいいでしょう。
VCLじゃなくてKOLをいじっています。 DefWindowProcを置き換えたらキャプションはうまくいきました。 //初めに出てくるDefWindowProcの前 function DefWindowProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; begin Result:=DefWindowProcW(hWnd,Msg,wParam,lParam); end; こんな感じでいくつか置き換えています。 エディットコントロールを張ったのですが、IMEからの日本語が化けます。 日本語のペーストは化けません。ハングルも化けません。 SetWindowTextWは化けます。 ほかに何か見落としてないでしょうか?
KOLって何だ? IMEからの入力文字化けはおそらくWM_CHARを正しく処理していないかも。 SetWindowTextWの文字化けは前述した:原因で現象が発生する。SetWindowTextWを使用した回避方法はない。 WM_PASTEで化けないのはOS内部で処理しちゃっているからUnicode<->Anisな処理が介入しないためである。 ASCIIな入力とかきちんとできているかと思うけど、たまたま上位が$00なためAnsiとUnicodeで一文字単位の メモリイメージの一致で動いていることもあるので、テストする時はWideChar(#$0101)など$00が入らないデータでやるとよい。
KOLって
ttp://bonanzas.rinet.ru/ なのか?
ソースを30秒ほど斜め読みした限りはAnsiベースですね。WM_CHARの処理はやはりバイトだったので上位8Bitの情報落ち。
それと構造というかまるまるVCLと同じ部分があることからVCLベースということが推測できる。
407 :
デフォルトの名無しさん :03/10/19 11:02
TListItemsを別のTListItemsにマージしたいのですが、 そのためのメソッドが見当たらないのですが、どうするのでしょうか。
自分でコード書いてください
>>404 とか
>>406 とかは関係ないようです。
試しに、APIのみでユニコードエディットボックスを作りましたが同じ症状です。
このAPIのみのウィンドウのプロシージャはDefWindowProcWしか呼んでいません。
何か他にやるべきことはないですか?
401に既に書いたけど、全部Unicode版のAPIを使用しましたか? KOLではPeekMessageを使用しているよね。Unicode版はPeekMessageW。 PeekMessageWを使わないとAnsi化されてメッセージが来ちゃうよ。 でPeekMessageWを使えば使ったで、プログラム全体に影響が出るので全体の完全Unicode化が必要になるっと。 とりあえずWM_CHARのデータがちゃんとUnicodeで来ているか確認汁。きっと'?'が着ていると思う。 Unicode Ansi混在でのIME入力を正しく処理する方法はあるけど、 まず問題をきちんと把握するのが先決だ。 ここまで書いてみたけど、最初の質問から詳しい状況が書かれていないから、予想ですまそ。 それと、Unicode化されているかはエディットコントロールの場合、ポップアップメニューを表示させるとすぐわかる。 Unicode化されている場合はUnicode特有のメニュー項目が追加されて表示されます。
C#Builder が使っている Ver7.1 の VCL には、UNICODE 対応版が含まれているって知ってた?
VCLのバージョンってどこに書いてあるの?
bin\vcl71.bpl D7 は System32\vcl70.bpl
7.1の詳細が知りてー。ソースが見てー。
C#Builder のオブジェクトインスペクターが UNICODE に対応している。 エディタも対応しているけど、VCL を使っているわけではないから別かな? ヒントウィンドウとかはまだまだ。 ひとつのアプリケーションで、UNICODE ウィンドウと今までのものを共存させているので 興味深い。
えーと、もしかして Wizman さんこれみてます?
指定座標が指定矩形内にあるか判定するのは どうすればいいですか。 単純にif文羅列になってしまうんですか。
PtInRect
フォームのCanvasにLineToとかで線を書いても フォームが隠れたり、別フォームが重なると描画したものが消えます。 消したくないのですがどうすればいいですか。
>>420 2つの解法をご提案します。
1、描画関数を作っておき それをフォームの OnPaint内で呼び出す
2、フォームに TImage を貼っておき、そのBitmapプロパティに描画する
424 :
デフォルトの名無しさん :03/10/20 15:44
DateTimeToStringやFormatDateTimeが正確な日時を 取得できず、動作が怪しかったのでヘルプを読んだら スレッドセーフとそうでない形式が載っていました。 私のプログラムはスレッドを使用していたので、 スレッドセーフの形式にしたのですが、 それでも正確な日時が取得できませんでした。 どうしたらよいでしょうか var DateStr, FileName: String; TmpFormat: TFormatSettings TmpDateTime: TDateTime; begin GetLocaleFormatSettings(GetUserDefaultLCID, TmpFormat); TmpDateTime := Now(); DateTimeToString(DateStr, 'yyyy/mm/dd', TmpDateTime, TmpFormat);・・・@ Label1.caption := DateStr; DateTimeToString(DateStr, 'yyyy年mm月dd日hh時mm分(ddd)', TmpDateTime, TmpFormat);・・・A FileName := DateStr; end; なんどコンパイル、再構築しても、@は正常な表示がされるのですが、Aは ある特定の時間(どこから取得されているかわかりませんが)になって しまいます
>>424 1、
DateTimeToString(DateStr, 'yyyy年mm月dd日hh時nn分(ddd)', TmpDateTime, TmpFormat);//・・・A
にしても同じ?
2、別スレッドで処理してるなら VCL は使わない方がいいよ。 つまり Label1.Caption もダメ
3、 SysUtil SysUtilsをそのユニットで別に使ってないかい?
×3、 SysUtil SysUtilsをそのユニットで別に使ってないかい? ○ Now そのユニットで別に使ってないかい? SysUtils.Now ではダメ?
GetMemで確保した領域をFormOnDestroyの時にFreeMemをしたらいつも例外がおきます。 任意の時に開放するのは可能なんですが、OnDestroyの時は駄目でわけがわかりません。 どうしたらいいの?
>>427 1、OnDestroyでブレークポイントかけてポインタ値を確認したら?
2、GetMemした時に その領域とその前少しにデータブレークポイントを仕掛けて誰が書き換えてるか見てみたら?
THintWindow上の子ウィンドウを表示するにはどうすればいいのでしょうか? ボタン等を動的作成して、ParentをHintWindowに設定しても表示されませんが。。。
ただし、HintWindowのParentがnilの場合です。
>>430 HintWindowはコントロールです。コントロールは親を必要とします。
それ自身を親にしたいならフォームにしなさい。
THintWindowはTWinControlを継承しているから、コンテナとして問題ないはずでは?
433 :
デフォルトの名無しさん :03/10/20 20:06
multipart/form-data のパラメータを受け取るにはどうすればいいですか?
>>429 ためしにやってみたがきちんと表示されたよ。
やり方が間違ってるんじゃない?
とりあえず、問題の起きるコードを出せ。話はそれからだ。
>>432 コンテナにはなっても表示が出来ないでしょ? というかだからそれで困ってるんでしょ?
だったらフォーム継承になさいな。
どうしてもというなら隠したフォームを親にするとか
>>434 var w: THintWindow;
w := THintWindow.Create(Application);
TButton.Create(w).Parent := w;
w.ActivateHint(Rect(0, 0, 64, 64), '');
>>435 単に子ウィンドウを表示したいのではなくて、THintWindowを継承して、
子ウィンドウを表示するためのコードを知りたいということですけど。。。
(ただし、HintWindow.Parentはnil)
>>436 そのコード実行してみたけど、Delphi7だと表示されたよ。
きっとそちらで何か間違っているんじゃないかな。
もう少し自分のコードを疑いましょう。
マルチアカウント対応のメールチェッカーを作ってるのですが、 OOP的には、どんなクラスを作ればよいのでしょうか? 考えてみたのですが、上手くまとまらないっす…。 括弧がisA、罫線がhasAの関係です。 (あるソフトのプラグインとして動作させるので、TTimerなどは使ってません) TMailCheckerPluginMain (TObject) * メインクラス └ TMailCheckThreadList (TClassList) .* スレッド用リスト └ TMailCheckThread(TThread) * 周期チェックを行うスレッド ├ TMailChecker(TObject) .* メールチェッカークラス | ├ TIdPOP3 * Indy POP3 コンポ | └ TMailAccount = record * メールアカウント情報(設定等含む) └ TSimpleTimer(TObject) .* 周期チェック用自作クラス これだと、おかしいですかね?
Forms.pasを参考にコードを追加したら、出来ました。。。
>>437 Delphi6だと、表示されません。
Delphi7のTHintWindowのソースはどう変わったのだろう?
てかさ、THintWindowなんて使わなくても似たようなもの簡単にできるだろ。 本来はVCLのヒントシステムの組み込み用の基底クラスなんだから それ以外の使い方しようとして動作しないと言われてもねえ。
他に間違ってる部分があるのは間違いない
>>436 なんだ。こっちにも書いてるのか。
だからさ、
>>435 に書いたように、 基本的にフォーム継承でないと表示されないんだよ。
ソース持ってるなら TWinControl.UpdateControlState メソッドを見てゴラン。
親を辿っていって、
if (Control is TCustomForm) or (Control.FParentWindow <> 0) then UpdateShowing;
となってるでしょ?
こいつをごまかしてやらないとダメなのさ。
>>428 すいません。さっぱりわかりません('A`)
Form1
procedure TForm1.FormCreate(Sender: TObject);
begin
Form2 := TForm2.Create(self);
Form2.Show;
end;
Form2
var
poin : Array [0..100] of PChar;
procedure TForm2.FormCreate(Sender: TObject);
var
count : Integer;
begin
for count := 0 to 100 do
GetMem(Poin[count], 100);
end;
procedure TForm2.FormDestroy(Sender: TObject);
var
count : Integer;
begin
for count := 0 to 100 do
FreeMem(Poin[count]);
end;
これでエラーが出る理由がわからんのです
自動生成からForm2をはずせ
うまくいきますた!( ・∀・ )
450 :
デフォルトの名無しさん :03/10/21 11:33
ファイルの選択はOpenDialog使いますがディレクトリの選択はどうしてますか
>>451 >1,SelectDirectory
おおっ、知りませんでした。ありがとう。
453 :
デフォルトの名無しさん :03/10/21 11:46
>>452 ほかにもshell系のAPI叩いてカスタマイズするのがある。
ぐぐれば出てくるんで根気欲ガンガレ
すいません、delphiでコマンドプロンプトみたいなの作れますか? 人間が打つ部分のかわりに C:\ とかのプロンプトが表示されたら自動でコマンドを次々に発行するようなことをやりたいです。
というかコンソールアプリが作れるか聞きたいだけでは。作れるわけだが。
>>456 そうは聞こえなかった・・・。
どっちにしろできるわけだけど。
454です。
>>455 さんありがとうございます。やりたいのはコンソールアプリじゃなくてコンソールを作る事で、
>>455 さんの書いてくれた通りです。
AllocateConnsoleで色々かかなきゃいけないみたいですね。
サンプルみてて気になったんですが、これじゃ対話型の処理できないのでは?
対話型コンソールアプリを実行して、途中で色々質問される内容に答えていくようなタイプのです。
454ですが、勘違いしてました。 もともともコマンドプロンプトに書きたい場合だけAllocateConnsoleが必要なんですね。
DELPHIって デルフィーって読むんですか? 電話で詳しい説明を聞こうと思っているのですが恥をかきたくないので教えてください
デルポイ
あーあ
>>461 日本では
>>462 が正解。 デルポイ神殿の事だからね。
ほら、無知の知をソクラテスが受け取ったのがデルポイの神託で有名でしょ?
>>464 だと、デルファイ法の事になってしまうので注意ね。
みなさんありがとう デルファイだそうですね 頭良く見させるためにデルポイで逝ってみようかな
>>468 あとに萌え萌えをつけてくれよう (ノД`)
萌え萌えつけるとBorlandのお姉ちゃん喜んでくれるよね
わかりました ちんぽ握りながらかけます
SelectDirectoryを使って目的を達したのですが、 ディレクトリを選択してOKボタンを押すと 元のウィンドウが別のウィンドウの背面に 隠れてしまいます。 Self.Activate; などでフォームを表に出そうとしたのですが、 うまくゆきません。この場合どうすればよい でしょうか。
デルップヒ
BringToFront
>>474 >BringToFront
ダメですた。。。
問題部分はこうなってます。
begin
var
dirpath: widestring;
begin
SelectDirectory('ディレクトリを選択してください。', 'Desktop', DirPath);
Form1.BringToFront;
end;
>>473 デルップヒってなんですか?
関数で、Assignedで確認しなくてもFreeしてくれる便利なヤツの 名前ってなんでしたっけ・・・・・ わすれてもーた
一生忘れてやがれ
>>477 別にさぁ、チェックしなくてもnilなやつをFreeしても大丈夫なの知らないの?
見栄っぱりの醜い争い。
481 :
デフォルトの名無しさん :03/10/21 19:51
文字列を入力として受け付けて、その文字列中に含まれる数字の合 値を求めよ。 例: a1b23g4 と入力された場合、1+2+3+4 で10 を出力する。
FreeAndNil
いまだにやっているのですが、やはりSelectDirectory のあと、どうしてもフォームが裏に隠れてしまいます。 いろいろ調べてみて、 Application.BringToFront; Application.ProcessMessages; とやるとよいとの情報があり、試してみましたが、 フォームが裏に隠れたあと、タスクバーが点滅 するだけでした。 結局最終的にはかっこ悪いのですが、以下のように したら常に表に表示させることができました。 Form1.FormStyle := fsStayOnTop ; SelectDirectory('ディレクトリを選択してください。', 'Desktop', DirPath); Form1.FormStyle := fsNormal; Application.BringToFront; 一応は解決できたのですが、正しい方法が ありましたら教えてください。
普通はそんな現象は発生しない。何か特殊なことをしてないか? とりあえず、Delphiのバージョンと詳しいフォームの関係を書け。 フォームが隠れると言われても、何に隠されているか誰一人わからんぞ。
>>485 環境はWin2000 + Del7です。
新規アプリケーションでボタンを貼り付けて、OnClickを以下のように
して実行すると、メインフォームが別の開いていたウィンドウの背面
に移動してしまいます。(たとえばExploreやDelのIDEの後ろなど、他に
開いているウィンドウならなんでも)
var
dirpath: widestring;
begin
SelectDirectory('ディレクトリを選択してください。', 'Desktop', DirPath);
Form1.BringToFront;
end;
コンパイルが通らなくて気になったのだが、VCLからQDialogsのSelectDirectoryを使っているんじゃあるまいな。
488 :
デフォルトの名無しさん :03/10/21 23:29
>>487 >VCLからQDialogsのSelectDirectoryを使っているんじゃあるまいな。
はいそうです。使い方が違うのでしょうか。
二つ質問があります 1つ目は Memo : TMemo ; procedure Form1.OnCreate; begin Memo := TMemo.Create(Form1); end; これをやってもForm1にはMemoコンポーネントは出ませんがどのようにすればできるのでしょうか? 2つ目は Stream : TMemoryStream; procedure Create; begin Stream := TMemoryStream.Create; Stream.LoadFromFile(f); end; procedure Close; begin Stream.SaveToFile(f); Stream.Free; end これをやると終了時にエラーが出ますがどのようにすればできますでしょうか?;
>>489 座標いれてVisibleをTrueにする。
2番目はそれだけだとわからんStream がSaveToFileでnilになってない?
>>489 1 Parentを設定汁
2 Streamの管理が正しいか確認汁
たぶん、破棄済みの無効なStreamをFreeしてるとかじゃない
テキストエディタでの検索速度を追求するロジックのサンプルを探しています。 大小文字、全半角区別とか、逆方向検索、置換まで考えてやれれば尚いいです。
(´-`)。o ○ (「そうですか。良かったですね」ってレスしか帰ってこない
ような気がする…
>>493 )
そうです。良かったです。 いまのところ、ポインターを一個ずつ移動しながら、(LeadByteなら二個) 検索したい文字列と同じ長さの部分文字列とCompareStringです。
大小文字、全半角区別とか、逆方向検索まで考慮すると BM だけでは結構大変
WideString を使えば、全半角区別も逆方向検索も簡単。
ユニコードならLeadByteがないので逆方向が簡単なのはわかりましたが、 どうして全半角区別するかどうかが簡単なんですか?
WideString の半角文字は 場所が決まってるからではない?
503 :
デフォルトの名無しさん :03/10/22 11:02
TNMFTPをDelphi7で使えるようにしたいのですが、 どうすれば良いのでしょうか? というか、可能なのでしょうか? 宜しくお願いします。
あるファイルの特定のメモリアドレスを覗くにはどうすればいいのでしょうか? ネットゲームのデータを取得して反映したいのですが… HP,MPなどのメモリアドレスは分かっているのですが、それをゲームで表示されるHP,MPの数値にする方法がわかりません。 的外れな質問をしているかもしれませんが、どうかよろしくお願いします。
>>504 何言ってるかわからん。もう少し詳しく書け。
506 :
始めました ◆1TogqVyiR6 :03/10/22 14:41
すいません また質問させてください delphiで作ったアプリを起動時に画面の真ん中当たりにしたいのですが 人によって起動時の場所が違うのです。 私の所だと真ん中なのですが知人だと画面右下の方にいくんです どうにかおねがいします
>>506 TFrom.Position のヘルプを確認。
poScreenCenter あたりがいいかも。
すいませんでした。分かる限り詳しく書いてみます。 そのゲームのツールでは、どのツールでも一つの設定ファイルがあれば使用可能なように 規格化されたiniファイルがあります。 そのiniファイルにはC/C++の16進法で記述された、 MaxHPTable=0x00698638 などのメモリアドレスがあります。 これを利用することで、ゲーム上のデータを読み取ることができるということで使用を試みたのですが どうしたらよいのか具体的な方法がわからりません。 自分で考えたのは、このメモリアドレスをバイナリに変換して、ゲームクライアントの対応するところを読み込み そのアドレスに存在するデータ(HPなど)を読み込んで10進数に直し反映させる。 ということなのですが、「アドレスに存在しているデータを読み込む方法」がわかりません。 そもそもバイナリに変換しようと思ったのは、メモリアドレスというものがバイナリエディタで開いたときの 番地のことを指していると思ったからです。 根本的に間違っているのかもしれませんが、何かご助言頂けたらと思います。
509 :
始めました ◆1TogqVyiR6 :03/10/22 15:25
>>507 ヘルプを参考にプロパティの選択でできましたぁ♪
とても助かりました またおねがいしますぅ
あ、あのうぅ、無理なんでしょうか? TidFTPで同じ事が出来るのは知っているのですが、 古いバージョンのDelphiで作られたプログラムを私が改良して行く事になってしまい、 プログラミング自体初心者なので、1万行ぐらいあるプログラムをぜんぜんコンパイル せずにTidFTPに移行するのは難しく・・・。 かと言って、古いバージョンのDelphiが会社にはないので、インストールもできず・・・。 (新しいバージョンを無理言って買ってもらったばかりなので、今更古いのもいるとは なかなか言い出せず・・・・)
512 :
デフォルトの名無しさん :03/10/22 16:36
データベースにアクセスする時、ログインのダイアログが出ないようにするには どうすれば良いのでしょうか?
>>510 回答ありがとうございました。
色々と検索してみます。
>>512 LoginPromptをFalse
Paramsに
user_name=ログイン名
password=パスワード
俺はTIBDatabaseでそうやってる。
515 :
デフォルトの名無しさん :03/10/22 17:04
>>511 [コンポーネント]-[パッケージのインストール]の追加ボタンです。
例えば、クイックレポートを追加する場合は、
Delphi7をインストールしたフォルダー内のBINより、
「dclqrt70.bpl」を選択となります。
また、その他の機能でも同様に事前にIDEを読み込ませておく必要があるようですので、
インストールCD直下のINSTALL.txtを一読されたらと思います。
>>511 FastNetのコンポはソースがシェアウェアで更にDelphi7用というかD6用も見つからないのだが。
ソース購入されていたならそのままインストールを試みるのもいいし、なければ諦めろ。
購入先探してみたが見つからんのだ。会社存在しているのか???
ここまで書いてみたがひょっとしたら、サードパーティ製コンポCDに紛れているかもしれない。
Indyでもバージョン違うと構造が少し異なることもあるしね。
たった一万行程度だろ。地道に修正したら?
>>515 >>516 探して見たのですが、見つかりませんでした。
逝ってきます。
色々とありがとうございました。
色々やってみたのですが上手く行きませんでした(´Д⊂ 16進数で読み込んだアドレスとポインタとの繋がりがわからず、関数を上手く使うことができませんでした。 バイナリに変換しなくても使えるのでしょうか… それともアドレス読み込みの時に、ポインタ型で読み込んで行うとかいう処理なのでしょうか? iniファイルから読み込むときstiringで読み込んで、後に「^」を使ってポインタにするという処理をしています。 なんだかもうわけがわからなく…_| ̄|○
PChar型ってのはCでいうchar*とおなじでつか?
504のやろうとしていることはかなり高度なことだ。 最低限、CのポインタとWindowsAPIのメモリ管理・プロセス管理の知識がないと無理。 あきらめて、ほかの人が作ったのを使うのが早いと思うが。 Googleで"バイナリエディタ" & "セーブデータ"で検索。
>>×504のやろうとしていることはかなり高度なことだ。 >>○504のスキルが低いだけだ。
C言語を最近始めました。 アスタリスクを単語の後ろにつけているソースを見かけるのですが どういう意味なのかわかりません。 プログラムーにまりたいので誰か教えてくだsさい。
>>518 >バイナリに変換しなくても使えるのでしょうか…
つーかさ、
MaxHPTable=0x00698638
って書かれた値をPointer型の変数に読み込む、って所までは出来てるの?
>>522 まずキーボードの打ち方を覚えろよ…
>アスタリスクを単語の後ろにつけているソースを見かけるのですが
・その単語は型の名前である
・そのアスタリスクは単なる乗算演算子である
525 :
525 ◆FjOpeTE2Ts :03/10/23 13:46
InstallShieldを使って、DBアプリをインストールする部分で つまっています。 DataBaseはMySQLを使っているのですが、ODBCの部分の設定が 出来ません。 例えばMySQLサーバーが別に存在するとして、 インストールするとMySQLサーバーのホスト名(もしくはIPアドレス)が 自動的に入った状態にする方法を教えて下さい。 宜しくお願いします。
>>525 スレ違い。と言ってもスレはないがMLならあったかな。
それとバージョンくらい書けよ。
527 :
525 ◆FjOpeTE2Ts :03/10/23 14:46
>>526 レスありがとうございます。
スレ違いでしたか。失礼しました。
InstallShieldのバージョンは3.5です。
ODBCリソースのプロパティリストのところで設定する事は
出来るのですが、その設定がインストールしたコンピュータには
反映されていません。
何か間違えているのでしょうか?
>>523 Ptr関数を使っています。
var PName: pointer;
としてから
PName := Ptr($00699B6C);
として、ReadProcessMemory(hprocess,PName,…)に使っています。
Ptrに直接アドレスを使っているのは、まずはゲームデータ取得だけでもしてみようと思い、
iniから読み込む処理を行っていないためです。
ありゃ? function ReadProcessMemory(hProcess: THandle; const lpBaseAddress: Pointer; lpBuffer: Pointer; nSize: DWORD; var lpNumberOfBytesRead: DWORD): BOOL; stdcall; ここに const 書いて いいのかな? function ReadProcessMemory(hProcess: THandle ; ReadAddr Integer ; var Buffer ; nSize: DWORD; var lpNumberOfBytesRead: DWORD): BOOL; stdcall; function ReadProcessMemory; external kernel32 name 'ReadProcessMemory'; とやってもダメ?
>>529 >function ReadProcessMemory(hProcess: THandle ; ReadAddr Integer ; var Buffer ;
>nSize: DWORD; var lpNumberOfBytesRead: DWORD): BOOL; stdcall;
>function ReadProcessMemory; external kernel32 name 'ReadProcessMemory';
この部分を
type
TForm1 = class(TForm)
の前に書き込めばよいのでしょうか?
上の様に追加しても上手く動きませんでした。
コンパイルはいつも上手くいくのですが、いざ動かしてみるとゲームデータを取得できずに
「モジュールproject1.exeのアドレス○○でアドレス○○に対する読み込み違反が起きました」とでます。
上記のように追加後 procedure TForm1.Button1Click(Sender: TObject); type Pstring = ^string; var PAName: integer; BName: cardinal; PMName: pointer; CP: Pstring; begin PAName := $00698270; GetHundle(rhwnd); //ゲームクライアントのハンドル取得 if hprocess <> 0 then begin ReadProcessMemory(hprocess,PAName,PMName,50,BName); CP := Pstring(PMName); Label1.Caption := CP^; CloseHandle(hprocess); end else Label1.Caption := 'FALED'; end; の様に組んでいます。 ゲームが起動していないときは「FALED」が返ってくるのですが、起動後実行させると Label1.Caption := CP^; のところで緑色の矢印が出てエラーがでます。 出力は決まった場所にしかできないのでしょうか…
>>530 Q1、そのアドレスは想定したアドレス?
Q2、hProcessはどうやって取得してる?
1、ゲームをプログラム内で起動してる
2、他の方法で調べた
>>531 それなら
var charBuf:array [0..49] of char;
とバッファをしてしてから
ReadProcessMemory(hprocess,PAName,charBuf,50,BName);
だと思うよ。
まずお前は基礎をきちんと学ぶことが必要だ。間違いだらけで突っ込みどころ満載。 少しは、頭を使ってコードかけよ。コンパイルが通ればそれで済むと思ってるのか? それと529のは無視して大丈夫。意味ないから(藁
暇人いっぱい。トリプルでかぶった
もっとちゃんと基礎的なことを学んでから、もう一度最初から取り組んでみようと思います。 お騒がせしてすいませんでした。 皆さんありがとうございました。
>>534 ほらみろ。 煽るならもうちょっとネタが熟してからにしろよ。 焦りすぎ。
>>534 .537
お前らは質問しにきた奴をバカにしたいのか?
一応初心者スレなんだから、もう少し優しく接してやれ
>>504 基礎がなってないのは確かだ。
また1からガンガレ
540 :
始めました ◆1TogqVyiR6 :03/10/23 17:59
すいません またまた質問させてください。 IndyのGet(URL)でソースを取得するのと ClientsocketのSendtextでURLのソースと同じテキストを送った場合 どっちが早く全てを読み込めますか? GetするひととURLまでの回線と、Getする人とSendtextする人までの回線は 考えない事にして貰ってお願いします。
541 :
525 ◆FjOpeTE2Ts :03/10/23 18:10
自己解決しますた。 MySQLのODBCドライバを「MySQL-SJIS」から 「MySQL ODBC 3.51」にしてやってみたら出来ました。 はぁ〜、こんな程度の事で一日つぶれた。トホホのホ。 皆様、お騒がせしました。
>>524 答えてもらって有難うございます。
2重3重に勘違いしてて書き込んだあとに自己解決しました。
自分ってあほだなぁとか思う今日この頃。
お手数かけてすいませんでした。
544 :
デフォルトの名無しさん :03/10/23 19:38
TTreeViewのHideSelectionで塗られる背景色(灰色)と選択色を 赤色に変更したいのですがフォントのサイズが大きくなったり 小さくなったりしてうまくいきません どこか間違えているのでしょうか? procedure TTreeView.CustomDrawItem(Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean); var ARect: TRect; begin with (Sender as TTreeView).Canvas do begin if cdsSelected in State then begin Font := TTreeView(Sender).Font; ARect := Node.DisplayRect(True); Brush.Color := clRed; FillRect(ARect); TextOut(ARect.Left+2, ARect.Top+1, Node.Text); end; end; end;
あいかわらずDel厨は低レベルですね。
>>540 シビアなものを作るのでなければ、
簡単に実現できる方を選択すれば?
データ容量、処理速度や通信速度なんて技術が
そのうち進歩すれば考える必要なんてないんだから。
と、私的な意見を言ってみる・・・。
>>544 FillRect(ARect);
TextOut(ARect.Left+2, ARect.Top+1, Node.Text);
これを削ったら、想定通りの動作になるようです。
理由は碩学の解説をお待ちください。
>>544 バージョンによって実装が異なるからなんとも言えん。
TCanvas.Refresh を呼び出すのも一つの手。
Font := TTreeView(Sender).Font; は実行しなくても描画前にVCLがフォントを初期化してくれたはず。
FillRect(ARect); TextOut(ARect.Left+2, ARect.Top+1, Node.Text); 環境はDelphi7JPro+WindowsXpで 上記の部分を削ったら確かに出来ました でも、どうしてだろう? TTreeViewは、まだまだつかいこなせてないな〜・・・
551 :
デフォルトの名無しさん :03/10/24 00:00
変なところでexceptまたはfinallyが必要、と怒られてしまいます。 どこが間違っているのか教えてください。 try TL:=TStringlist.Create; for begin Case i of 1:begin end; 4:begin if Wnd =0 then begin end; if TempList3.Count = 0 then begin end; for i:=TempList1.count-1 downto 1 do begin if strtoint(TempList1[i])> TempList3.Count then begin end; end;
552 :
551の続き :03/10/24 00:01
for i:=0 to 1 do begin end; for i:=0 to 50 do begin end; while i=1 do begin end; end; else end; end;//ここでexceptまたはfinallyが必要です。とエラーになる。何故??? if Mai1.Count<>0 then begin end; finally TL.Free; end; 以上です。
>>551 tryをけせ
もしくはちゃんと例外処理しろ
554 :
デフォルトの名無しさん :03/10/24 00:03
555 :
551の続き :03/10/24 00:05
>>553 即レスどうもです。
tryを消してみたのですが、そのすぐ下の行で宣言が必要な場所に・・・
でエラーとなってしまいました。
>>555 すまん
>>552 がかかれる前に書き込んでしまった。
begin endの対応が一つずれてるんだろ。
>>544 TCustomTreeView.OnCustomDrawItemのヘルプに
>>OnCustomDrawItem は,個々のツリー項目の描画の『前』にのみ発生します。
とあるので、イベントの中で描画を書いても、イベント終了後にコントロールが
デフォルトの描画をしようとする。表示がおかしくなるのは多分そのせい。
デフォルトの描画を停止するために、FillRect(),TextOut()の後に
DefaultDraw:=False;
を入れると改善される。
>>551 関係ないけど TL:=TStringlist.Create; はtryの外にするべき。生成する前にTL:=nilしてるなら別に構わんが。
Rect1がRect2と重なってるか判断できる関数ってありますか?
>>562 作っちゃいました。
function RectInRect(R1,R2: TRect):boolean;
begin
if (PtInRect(R1,Point(R2.Left,R2.Top)) = true) or
(PtInRect(R1,Point(R2.Right,R2.Top)) = true) or
(PtInRect(R1,Point(R2.Left,R2.Bottom)) = true) or
(PtInRect(R1,Point(R2.Right,R2.Bottom)) = true) then
RectInRect := true
else
RectInRect := false;
end;
>>563 まあ、ゲーム作る奴は当たり判定に使うからな。
以前自分も良く作ったし。
もっと簡単(高速)にできるよ。よく考えれ。
>>564 そっすね。
今ゲーム作ってるんですが、自分で手続き・関数作る機会がグンと増えました。
どうもです。
てか、563は間違ってる
>>565 む!なにやら高度な香り!
orを繰り返してる部分があやしい(というかソコしかない)・・・ちょっと考えて見ます
>>559 無駄な変数定義しなきゃいけないけど。
if IntersectRect(tmpRect, rect1, rect2) then
重なっている
else
重なってない;
>>569 ぐっは!さっきまでさんざ睨めっこしてた手続きが!
これならわざわざ関数化させる必要もなさげ。
親切にありがとうございます。
>>559 2つのRectをr1,r2として、
(r1.top < r2.top) and (r1.bottom < r2.top)
or
(r1.top > r2.botttom) and (r1.bottom > r2.bottom)
or
(r1.left < r2.left) and (r1.right < r2.left)
or
(r1.left > r2.right) and (r1.right > r2.right)
ならば重なってない。
>>571 頭硬いね。4つの比較だけで作れるよ。
ヒントは、絶対重ならない条件。
直線上の二つの線分が重なるかどうかで考えるべし。
>>571 は r1.top > r1.bottom でも正しく動きますね。
それと、r1.right <= r2.left では?
TFileStreamの書き込み/読み込みで使うためにバッファを確保しようと思うのですが 実行時のメモリの状況によっては「スタックオーバーフロー」になってしまいます。 そこで実行時に適切なサイズを確保するようにしたいのですが それにはどうすればよいのでしょうか?
>>575 文字列か動的配列をバッファとして使うと良いでしょう
例:
var s:string;
begin
setlength( s , バッファのサイズ);
stream.Read( Pchar(s)^ , サイズ);
Type TArrayChar=array of Char; TArrayAC=array of TArrayChar; Var AAC:TArrayAC; とした場合、メモリはどういう感じで連続するのでしょうか? たとえば、 SetLength(AAC[0],Length(AAC[0])); と、要素数を変えたときに、 AAC[1]に於いてはメモリーの移動が起こらないことを目指しています。 あってますか?
TArrayAC の要素の一つ一つに 動的配列がぶら下がっているだけ だから、TArrayACの要素のそれぞれは無関係、連続してもいないだろう。 たぶん、他の要素を変更してもメモリは再配置されないと思うが、それは判らない。
579 :
デフォルトの名無しさん :03/10/24 11:54
>>579 1、バッファオーバフローが起きても、普通は停止しない。
2、通常はバッファがオーバした所にはスタックの帰り番地があるので、それが書き換えられ
不正な実行を行った事によって停止する。
3、セキュリティホールになる理由は、
もし、コンボボックス内の文字を Webから取得した文字列をそのまま設定するような馬鹿な
事をすれば、自由に帰り番地を書き換えられる=帰り番地をその文字列上に構築したコード
にすれば好きなコードを実行させられるという理由による。
>>580 丁寧なレスありがとうございます。
>2、通常はバッファがオーバした所にはスタックの帰り番地があるので、それが書き換えられ
> 不正な実行を行った事によって停止する。
という事は、やはり停止するのでは?あれ?なんか勘違いしてますね、私(^^;
足りない頭でなんとかこんな風に理解しました。
コンボボックス内の4096バイトの次の4097バイト目に4098バイト目以降に作ったコードを
指す番地を入れておけば、そのコードを実行させる事が出来る。
そういう作為がなければ、多くの場合不正な番地が指定されプログラムは停止する。
という事でしょうか?
>>581 全Delphiスレを読め。これ以上書くなボケ。氏ね。
>>582 自分でも読んでないくせに説教たれんなハゲ。死ね。
>>544 です
最終的には以下のようにして実現できました
返信して下さった皆様、ありがとうございます。
with (Sender as TTreeView).Canvas do
begin
if cdsSelected in State then
begin
Font.Color := TTreeView(Sender).Font.Color;
Brush.Color := clRed;
end;
end;
そこでもう一つ質問なのですが、TShellTreeViewにも
同じような動作をさせたいのですがどこにどう書いてよいのか
わかりません・・・
TShellTreeViewのソースを見ようにも
"ファイル "ShellCtrls.pas" を見つけることができません。."
としかられてしまいます・・・
TShellTreeViewにも
同じような動作をさせたいのですがどこにどう書いてよいのか
わかりません・・・
TShellTreeViewで選択色を任意に変更できた方、
どなたかいらっしゃいますか?
>>581 コンボボックス内の4096バイトの次の4096-4099バイト目に0-4095バイト目までに作ったコードを
指す番地を入れておけば、そのコードを実行させる事が出来る。
多くの場合不正な番地が指定されプログラムは異常動作をするか停止する
>>585 やっと理解できました。
ありがとうございました。
勉強になるかもと思って、使えそうなVCLをいろいろみてます。 JEDIのEnhancedモノを実際に使用されているかたおられますか? ご感想をお聞きしたいのですが・・・。 あと、他にフリーのVCLで有名どころがあったら教えて頂きたいの ですが、よろしくお願いします。 いちおう、IndyやCompanionDiskに入っていたVCLあたりは目を 通しました。今後の参考のためによろしくお願いします。
delphiとC++Builderの利用者ってどっちが多いんですか?
590 :
デフォルトの名無しさん :03/10/24 17:27
Delphiってなんですか?
>>590 Dellが作るパソコンのキッズ向け製品のブランド名
592 :
デフォルトの名無しさん :03/10/24 18:20
メインのForm1を「X」ボタン等で閉じたとき、 form2を表示させて、OKを押せばプログラム終了、キャンセルなら Form2を消して元に戻す、というようなことがやりたいんですが どうすればよいのでしょう?
OK・キャンセル程度ならMessageBoxを使うのもいいかと。
>>593 レスありがとうございます。
OnCloseQueryを使うらしいことは分かったんですが
どう書くのかがよく分かりません・・。
delphi閉じるときのように、保存しますか「はい」「いいえ」「キャンセル」
だけでいいんですが・・。
>>595 procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean)
begin
if(Application.MessageBox('終わるよ?','終了確認',MB_OKCANCEL)=IDCANCEL) then
CanClose := False;
end;
実行してないからデバッグは自分でしてください。
>>596 ウホッ!ありがとうございます!できますた!
ほんと助かりました。
ぬるぽ
ガッ
ガッ
全部破棄したいとき、 for i:=0 to Length(AAC)-1 do SetLength(AAC[i],0); SetLength(AAC,0); と、それぞれの要素を破棄してからにすべきですか? それともSetLength(AAC,0);だけで全部消えちゃうんですか?
>>558 えっ?そうなの?
Stringlistはtryの中でcreateして、finallyでfreeがメモリリークを起こさない
鉄則と認識してたんだけどこれって間違い?
603 :
デフォルトの名無しさん :03/10/24 20:38
ModifiedってのはなぜListboxに使えないんでしょう? Listboxに変更があったかどうか判断するのはどうすればいいんでしょう?
>>603 変更があるということはつまり、イベントが発生しますよね。
そこで適当なフラグを建ててやればいいのではないでしょうか?
Modifiedのようなものがあるかも知れませんが知りません・・・
>>606 try内でのエラーあればexceptもしくはfinallyに飛んでくれます。
>>576 遅くなりましたが的確なアドバイスありがとうございました。
おかげさまでTStream系の使い勝手が格段に向上しました
>>607 >クラス参照により呼び出されたコンストラクタの実行中に
>例外が生成された場合,Destroy デストラクタが自動的に
>呼び出されて未完成のオブジェクトが破棄されます。
>>604 出来ましたら、お馬鹿な私にご教授を・・・
>>606 finallyに飛んで・・・、freeを実行しようとしてエラーになっちゃいますね・・・
ということはどうすれば良いのでしょうか?
var Strings: TStringList; begin Strings:=TStringList.Create; try ほにゃらら finally Strings.Free; end; end;
つか、try....finallyって、そんなに重要? デバッグレベルではエラーあったりするから重要だと思うけど、 完成したもので、エラーがあったらまずいよね・・・・ 予期せぬエラーがあったとき、そのメモリリークが予想以上に 激しいということです?それとも、エラーにはなってないけど、 Freeできないことがよくあるってことです? try...finallyをする意味はわかるんだけど、その重要性がいまいち わかってないのかも。 ド素人で申し訳ないですが、誰か教えてください。
Delphi7 Personal つかってます.。 パーソナル版でもMsAccsessのmdbに接続できることを知り、試してみました。 var Aff: OleVariant; Rst: Recordset; begin Connection1.Open('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=MyDb.mdb;Persist Security Info=False', '', '',adConnectUnspecified); try な感じで、たとえば Rst:= Connection1.Execute('DELETE * FROM MyTbl;', Aff, 0); とか Rst:= Connection1.Execute('SELECT * FROM MyTbl;', Aff, 0); とか 単純なのは出来ることが分かったんですが、追加クエリや更新クエリなんかで、 Delphiフォーム上のテキストボックスをパラメータにすることは、たぶん出来ないんですよね。 それはひとまずあきらめるとして(いや、出来ることならあきらめたくないんですが) まずは、レコードセットを「Open」して、ごちゃごちゃいじくり回す書き方が知りたいな、と。 Rstと書いてドット入れると、選択リストの中にOpenってのがあるんで、たぶん行ける んだろうと思い Rst.Open(MyTbl,Connection1, adOpenKeyset, adLockOptimistic,0) とか、適当に書いてみたんですけど全然ダメです
>>614 try...finaly する意味を教えて!
ファイルを保存しようとしたとき、そのファイルが書き込み禁止になっていたらどうなる? ファイルを保存しようとしたとき、そのファイルが別のソフトに排他モードで開かれていた場合は? ファイルを保存しようとしたとき、ディスク容量が足らなくなってしまったら? もちろんこういうエラーが出ないように対策する方法もあるけど、 起きえるエラーを想定して全部対策するの?
>>614 例えば、ファイルを開こうとしても開くのに失敗したら例外起きちゃうでしょ。
そういう時finallyで終了処理したりする。
とりあえず失敗する可能性のある時は保護しとけ。
自分の知らないコードやクラスの呼び出しなどても常に保護する習慣を身に着ける。
例外処理は自分のバグを見つけるためのものではなく、予期しない実行時の問題を
片付けるための仕組みだよ。
て、書いてるうちに、617にかぶったが書きこ。
>>617-619 なるほど〜それは言えますね。
自分は、いちいちファイルの存在とか確かめてました。
その他にも問題がある可能性を考えると、確かに意味ありますね。
ありがとう。
では、finallyで後処理を行うのはもちろんとして、関数を呼び出した側
でも、例外が発生したかどうかをfunctionでbooleanや、エラーコードが
返る場合はエラーコードを返して、その後の処理をさせるのですよね?
そうすると、try...finalltはいろんなところで使えそうだから、ほとんど
procedureは使用せずにfunctionでokなのか・・・
BringToFrontの逆をやりたいのですがどのようにすればできるでしょうか?
ヘルプでBringToFrontを探して「参照」を押せ
>>615 Delphi6 Personalでテストしたときのコードです。
var
cn: variant; // ADO Connection
rs: variant; // ADO Recode Set
{ DB Open データーベースと接続しデーターベースを開きます。}
function DBOpen(dns, dbf: string): boolean;
begin
result := true;
try
cn := CreateOleObject('ADODB.Connection');
except
cn := unassigned;
result := false;
ShowMessage('ADOオブジェクトでエラーが発生しました。');
exit;
end;
// DB Open
try
cn.open(dns + dbf);
except
cn.close;
cn := unassigned;
result := false;
ShowMessage('データーベースと接続できません。');
exit;
end;
end;
>>615 つづき
{ DB Close データーベースを閉じます。}
function DBClose: boolean;
begin
try
cn.close;
cn := unassigned;
result := true;
except
cn := unassigned;
result := false;
end;
end;
>>615 つづき
{ DB Execute データーベースの命令を実行します。}
function DBExecute(SQL: string): variant;
begin
try
rs := CreateOleObject('ADODB.Recordset');
rs := cn.execute(SQL);
result := rs;
except
rs := unassigned;
result := unassigned;
ShowMessage('cn.execute:SQLでエラーが発生しました。');
end;
end;
{ DB Save データーベースにデータを保存します。}
function DBSave(SQL: string): boolean;
begin
try
cn.BeginTrans; // トランザクション開始
cn.execute(SQL);
cn.CommitTrans; // トランザクション終了
result := true;
except
cn.RollbackTrans; // ロールバック
result := false;
ShowMessage('DBSave:SQLでエラーが発生しました。');
end;
end;
>>615 つづき
{ Recode Set Open レコードセットを開きます。}
function RSOpen(SQL: string): variant;
begin
{ レコードセットのカーソルタイプとロックタイプ
open(Source, Connection, CursorType, LockType);
rs.CursorType := adOpenDynamic = 3 動的なカーソル
rs.LockType := adLockOptimistic = 3 オプティミスティック }
try
rs := CreateOleObject('ADODB.Recordset');
rs.open(SQL, cn, 3, 3);
result := rs;
except
rs := unassigned;
result := unassigned;
ShowMessage('rs.open:SQLでエラーが発生しました。');
end;
end;
>>615 { Recode Set Close レコードセットを閉じます。}
function RSClose: boolean;
begin
try
rs.close;
rs := unassigned;
result := true;
except
rs := unassigned;
result := false;
end;
end;
>>615 test.mdbのテーブル構造
[data]
No 数値型 (長整数)インデックス重複なし
Text テキスト型(255)
SQL := 'select * from data';
Edit1.Text := rs.fields.item[0].name; フィールド名 -> "No"
Edit1.Text := rs.fields.item[1].name; フィールド名 -> "Text"
Edit1.Text := rs.fields[0].name; itemを省略可
Edit1.Text := rs.fields.count; フィールド数
Edit1.Text := rs.fields[0].value; Noの値
Edit1.Text := rs.fields[1].value; Textの値
Edit1.Text := rs.fields['No'].value; Noの値
Edit1.Text := rs.fields['Text'].value; Textの値
Edit1.Text := IntToStr(rs.RecordCount); レコード数
Edit1.Text := IntToStr(rs.AbsolutePosition); レコードの位置
>>615 これを忘れていた。
{ メインフォーム表示のときにDBと接続 }
procedure TMainForm.FormShow(Sender: TObject);
var
DNS: string;
DBF: string;
begin
DNS := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=';
DBF := IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName));
DBF := DBF + 'test.mdb';
if not dbOpen(DNS, DBF) then
begin
ShowMessage('データーベースに接続できません。');
end;
end;
長々と、くそコードで板を汚してすみません。
>>620 ,621
すみません。
検索のさいの単語選びがめちゃめちゃ不器用でした。
いただいた情報、こちらが欲していたものほぼそのまんまです。
レコードセットオープン、データ書き換え、ともに見事成功しました。
感謝です。
>>625-631 この一連のファンクション、ざっと試したらそのまんま使えちゃったんですけど、
たぶんオリジナルですよね。
いただいちゃっていいんでしょうか。
(てか、もういただいたも同然なんですけど)
超未熟なトーシロにここまでしていただいて、何か涙出そう。
633 :
デフォルトの名無しさん :03/10/26 00:04
>>632 ロジックはともかく、変数名ぐらいかえとけ
>>632 オリジナルです。
自由に使ってください。
私もnetでずいぶん助けられているので、自分の知っていることぐらいは公開
します。といってもたいしたものじゃ無いけど。
プログラミングのプの字も知らないような者が、 delphiを始めるにあたり、 読むべき書籍や見るべきサイトなどを教えてください。
>>635 DelphiMLの過去ログを何ヶ月かかっても全部読みなさい。
>>635 まず、「何か自分の作りたいソフト」を決める(オレの場合は、こっちが
先だった)。
そしたら、いろいろ試行錯誤してソレを目指して作ってみる。
当然分からないことが出てくる。
ソレを検索して探す。
これが一番いいと、オレは思う。
639 :
デフォルトの名無しさん :03/10/26 05:30
dsfadsf
面白くてやめられなくなり、ついに夜を明かしてしまった。。。
明日からの仕事大丈夫かな
Delphi買って数ヶ月、単純なスロットマシンや使い物にもならないお絵かきソフトを作ったきり、「やっぱりちょっと無理してでもPro版買っときゃよかったかな」とかぼやきつつそのまま放置。でもmdbいじれることが分かって俄然やる気が出てきました。
>>620 ,620
>>625-63 両氏にあらためて感謝します。
それから
>>633 'cn' は 'MyConn' に
'rs' は'MyRst' に
それぞれ変えときます(あんまり意味ないかな)
では、おやすみなさい
>>622 意味不明。なんでtry .. finally とprocedureやらfunctionが関係あるの?
後始末が必要な処理;
try
例外が発生するかもしれない処理;
finally
後始末;
end;
と覚えておけば問題なし。
if 例外が発生しないことを確認 then begin
後始末が必要な処理;
例外が発生するかもしれない処理;
後始末;
end;
って書くより楽でしょ。
そもそも「何が起こるか判らない」のが例外なんだから、事前にifで回避しようなどと
考えずに、例外で一元的に扱いましょう、という設計思想なんだが。
Image1.Canvas.TextOut(0,0,'aaa'); 'aaa'の色はどのように変えたらよいのでしょうか、 Pen.ColorやBrush.Colorでは出来ませんでした アホですいません
Font.Colorで変更できました アホなこと書いてすいません無視しておいてください
Delphiは、配列の宣言と同時に初期化を指定することは無理なのですかね?
>>644 「宣言」と「文」はまた別だと思うから・・・。
>>644 出来ません。
ただしオブジェクトのフィールドは初期化可能。
ついでに言えば、Delは配列型の定数やレコード型の定数を宣言できますが何か?
初期値は代入文とは別だと思うから・・・。
変数の性質によるんじゃないかと。 var Form1: TForm1; aiueo:array[1..5] of char=(#$30,#$31,#$32,#$33,#$34); この場所ならできちゃうよ。
649 :
デフォルトの名無しさん :03/10/27 16:16
サーバープログラムを少し弄ってるのですが サーバー機がスワップする前に自動でPCを 再起動させたいのですが・・・・・・・ よろしければ教えてください。 環境 WinXP Delphi7
スワップとは何のこと? それとお前は何を知りたいのだ?
651 :
デフォルトの名無しさん :03/10/27 16:50
ShellExecute(0, nil, PChar(AppPath), PChar(FilePath), nil, SW_NORMAL); でパラメータのFilePathが"Document and Setting"のように間にスペースが 入ると"Document"、"and"、"settings"という3つのパラメータと解釈 されてしまうのですが、どうすればよいでしょうか
>>651 DOS窓でのコマンド入力と同様にすればよいのです。
653 :
デフォルトの名無しさん :03/10/27 17:04
>>652 Delphiユーザーだとわからない人もいるかも。
654 :
デフォルトの名無しさん :03/10/27 17:17
Indy_9_00_14_src.zipをダウンロードしたのですけど、インストールの仕方がまったくわかりません。 Delphi6へのインストールはどういう手順でやればいいでしょうか?
655 :
デフォルトの名無しさん :03/10/27 17:24
>>652 Tmp := AppPath + ' "' + FilePath + '"';
ShellExecute(0, nil, PChar(Tmp), nil, nil, SW_NORMAL);
無理でした。
監視窓からTmpの値をコピーしてコマンドプロンプト
で実行したらちゃんとできるのに。
これでできました。 ShellExecute(0, 'open', PChar(AppPath), PChar('"' + FilePath + '"'), nil, SW_NORMAL);
2ch互換のトリップ扱いたいんですがDelphiのソースって落ちてないもんですね(´・ω・`) (´・ω・`)他言語のソースなんて読めねぇょ(´・ω・`)
>>658 Cのソースがあるでしょ? それを一つにまとめて BCC55でobjにしてリンクすりゃいいでしょ。
って・・・ソース読めないならそういう作業も出来ないか・・・Cくらいは読めるようになりなよ。
そういうのが勉強の動機として良いと思うよ。
TreeViewの項目名編集時に表示されるエディットコントロールを 移動させたいのですが、TreeView_GetEditControlで取得した ハンドルをMoveWindowに渡しても移動してくれません。 どうすればよいでしょうか?
661 :
デフォルトの名無しさん :03/10/27 19:33
Delphi6を使いサンプルプログラムを動かそうとしているのですが、 SHDocVw,DCPsha1のファイルがありませんというエラーが出ます。 これらのファイルを読み込むためのコンポーネント・設定方法などが あるのでしたら教えてもらいたいです。
ShDocVw.pasあるいはShDocVw.dcu DCPsha1.pasあるいはDcpsha1.dcuをパスの通ったところにおきましょう。 プロジェクトフォルダと同じところに放り込めば問題なし。
>>660 そのエディットコントロールのハンドルは正常に取得出来ているんだよね?
出来るかどうかわからんけど、サブクラス化してみ。
なんでこんな簡単なこともわかんないんだろうなぁ。 だからDel厨って言われるわけだ。まじ馬鹿なんじゃね。
>>658 Delphi製でソース公開している2ちゃんねるブラウザでトリップを変換して
プレビューする機能のあるやつもあるね。ソース見てないからしらねーけど。
2ch のトリップは crypt / DES でしょ? Indy に DES のコードがあるからそれを使えるかと。 どこかにトリップ算出のコード(他言語でよし)あるなら教えて。 コンバートしてあげよう
669 :
デフォルトの名無しさん :03/10/28 12:54
デルファイでプリンタの紙切れを検知する部分のコードの書き方を教えて下さい。 宜しくお願いします。
>>669 GetPrinter APIを使う。
NT系は検知不可。
>>671 レスありがとうございます。
NT系では出来ないんですね〜。
どうしよ・・・
紙がなければOS(ドライバ)が、紙がねーぞゴラァ メッセージ出るだろ。
>>673 そのメッセージが出ないので困ってるのです。
675 :
デフォルトの名無しさん :03/10/28 13:58
前から分からなかったのですが、except節は 例外時に実行されるとのことですが、以下の場合 開放処理が2つになるのが普通なのでしょうか。 それともexcept内では、開放する必要も ないのでしょうか。 Obj := ***.Create; try except FreeAndNil(Obj); end; FreeAndNil(Obj);
>>675 1、FreeAndNilを使うのは後から開放する場合があるからですか?
2、確実に開放したいなら
Obj := ***.Create;
with Obj do try
try
処理
except
FreeAndNil(Obj);
end;
finally free end;
とやってはどうですか?
ああ間違った 上のコードではfree が2度呼ばれてしまいますね。 1度目にnil が入っているので悪さはしないけど 無意味ですね Obj := ***.Create; with Obj do try try 処理 except エラー処理 end; finally free end;
>>677 tryを入れ子にすればよいのですね。
ありがとうございました。
679 :
デフォルトの名無しさん :03/10/28 14:20
初期化処理; try try 処理; except 例外処理; end; finally 解放処理; end;
681 :
デフォルトの名無しさん :03/10/28 17:26
661で質問させていただいたものですが ShDocVw.pasというファイルは、タイプライブラリのインストールで ファイルそのものが出来る事がわかったのですが、 DCPsha1.pasあるいはDcpsha1.dcuは何かコンポーネントのインストール・ Delphiの設定をすればファイルそのものができるのでしょうか? 今現在ではDCPsha1.pasあるいはDcpsha1.dcuはファイル自体が存在しないため 困っています。誰かわかる方がいましたら教えていただきたいです。
682 :
デフォルトの名無しさん :03/10/28 17:53
質問です。 Memo.Lines.Add('1'); Memo.Lines.Add('2'); Memo.Lines.Add('3'); と Memo.CommaText := '1,2,3,'; では どっちが処理早いですか?
>>682 何千回かまわしてみれ
んで、比較時間を出力してみれ
>>681 Delphiのインストールからやり直せ。単にパスが通ってないだけだろ。
きちんとインストールされていれば何もしなくてもコンパイルは通る。
チンポ
687 :
デフォルトの名無しさん :03/10/28 18:41
既存のデータベースを新しい別のデータベースに移植するユーティリティーを 作成しようとしています。 しかしデータベース(例えばParadox)のフィールド名の取得方法は分かったのですが、 そのフィールドの型が何か分かりません。 フィールドの型を取得するにはどうすれば良いのでしょうか? 宜しくお願いします。
FAQかもしれませんが、よろしくお願いします。 MainFormから、モードレスなFormを表示しようとしています。 このFormは、いつ起きるかわからないイベントによって表示 されるため、複数のFormが表示されてしまうことがあります。 なので、Form := TForm2.Create(Form1);のように開きたいの ですが、こういう場合、オブジェクトが入る変数Formを、皆さん は、どこにどういう形で設置しておられますか? いま考えているのは、グローバル変数FormをArrayで宣言し、 使用されていない配列のところにCreateする方法なのですが、 もっとすっきりしたやり方があるのかと思い調べたところ、それ らしき方法が見あたらず、お聞きした次第です。 配列を用いると、使用されない無駄の宣言の分や、宣言した 配列の数以上のイベントが発生すると、それ以上のフォーム は表示できませんし、少し考えています。 どなたか、ご存じのかたおられましたら、よろしくお願いいたし ます。
689 :
デフォルトの名無しさん :03/10/28 18:48
>>689 TObjectListの方がソースがすっきりするかも。
質問があります。 同じようなメソッドのRepaintとRefreshって何がどう違うのでしょうかね?
>>690 FormならTComponentListの方がよくねーか?
おお、そういうのがあるんですね。 皆さん、ありがとうございます。 ところで、早速実験でやってみたのですが、 Form := TForm2.Create(Form1); Index := ObjectList.Add(Form); ObjectList.Items[Index].Visible := True; とかやっても、うまくいかないのですが、 どうすればいいのでしょう・・・・ サイトにも載ってないし、開発者ガイドには、 そんなクラス名すらでてこないです。 んー
>>666 貴重な情報ありがとぅございまし。どうやらJaneにあるようです。
・・・ですが、肝心のトリップ関連っぽぃところが見つからない(´・ω・`)
ソフトつついてみてもどこにそんな機能あるのかわからんし
Main.pasにもないし、トリップシミュレータに利用されているというUcrypt.pasがUsesすらされてないし・・・
Ucrypt.pasの中には関数が一つ function crypt(const pw, salt: string): string;
saltは生成用文字列として、、、pwは明らかにパスワード・・これが分からないとどうしようもなぃ、で小一時間。
何とかして発見。とりあえずは
ということで何とかなりそうでし。
>>667 お気持ちだけでもありがたく受け取りますでし。
もしできちゃってたなら、ごむんなさぃ(´・ω・`)
Upしていただけたら使いますでし
そしてトリップ照合てすと
あるぇ?全然違う・・・
全角英数が入ってると2chと全く別物になるっぽぃでしね。 2ch側で半角に修正とかしてくれてるのかな? スレ汚しスマソ・・・
>>693 (ObjectList.Items[Index] as TForm2).Visible := True;
ではダメかい?
>>693 (List[Index] as TForm).Visible:=True;
>>697-698 さん、本当にありがとう!!
連続で申し訳ないのですが、もう一つ・・・・・
実際に、教えていたたいたようにやってみて、Addしたときに
帰ってくるIndexで管理しようとしたのですが、Index番号で
0、1、2とオブジェクトがあるとき、1を消去すると、番号が
切りつめられ0、1(2が1に切りつめられた)になってしまうため、
番号での管理ができないことがわかりました。
そこで、(varはしょってます)
procedure TTestClass.Open();
begin
Form := TForm3.Create(Form1);
Index := ObjectList.Add(Form);
(ObjectList[Index] as TForm3).Visible := True;
end;
procedure TTestClass.Close(ObjForm: TObject);
begin
ObjectList.Remove(ObjForm);
end;
とし、閉じられるフォームで
TestClass.Close(Self);
と呼び出したところ、1枚目と2枚目のフォームはうまくいくの
ですが、3枚目に必ずエラーが、2枚でも何回かやると、
なぜかエラーになります・・・・。
本当になさけないですが、これはどこがいけないのでしょうか。
申し訳ないですが、おわかりの方おられましたら、よろしくお願い
いたします。
//ObjectList.Remove(ObjForm); Index := ObjectList.IndexOf(ObjForm); (ObjectList[Index] as TForm3).Release; ObjectList[Index] := nil; ではダメかい?
701 :
デフォルトの名無しさん :03/10/28 21:17
(ObjectList[Index] as TForm3).Release; は ObjForm.Release; でいいか。
fs : TFileStream; このfsがCreateされたかどうかを外部から見分ける方法はどうしたら よいのでしょうか?
>>702 見分ける方法はないから、自分で管理するしかない。
>>700 んー、それでもエラーになったんですよね・・・・
ちょっと、もう少し実験してみます。
駄目だったら、またご教授いただければと
思いますので、よろしくお願いします。
まずフォームはReleaseで解放しなくてはいけない。 だからTObjectListの使用はお勧めしない。 代わりのTList使ってフォームを閉じる場合。 TForm(List[Index]).Release; List.Delete(Index); で良い。
>>705 ならば TObjectList.Create(False) とするのみ。
>>706 TObjectListを使う意味がないような気がするが。
708 :
デフォルトの名無しさん :03/10/29 03:52
簡単なバイナリエディタを作ろうと思ってますが、 全くどうしたらいいのか解らないです。 ファイルを読み込み、16進数で表示し、それを保存するには どういった流れでいけばいいのでしょうか? とりあえず、文字列と16進数の相互変換などはどのようにしたら出来るのですか わかる方手助けお願いします
>>708 BinToHex, HexToBin, StrToInt, IntToHex, Formatなど参照
function Dump(mem: TMemoryStream; pos: Int64): string;
var
buf: array[$0..$F] of Byte;
n: Integer;
begin
Result := Format('%.8X: ', [pos]);
mem.Position := pos;
for n := 0 to mem.Read(buf, $10) - 1 do
Result := Result + Format('%.2X ', [buf[n]]);
end;
var
mem: TMemoryStream;
path: string;
begin
mem := TMemoryStream.Create;
try
mem.LoadFromFile(path); // 読み込み
//Dump(mem, 0); // 表示
mem.SaveToFile(path); // 保存
finally
mem.Free;
end;
end;
>>707 痛い所突くなあw
ただのポインタにオブジェクトを持たせたくないだけで、自動解放はおまけだと
思ってる、という理由では納得してもらえないだろうな。
711 :
デフォルトの名無しさん :03/10/29 10:33
IDEのクラス補完で自動作成されるコードは末尾に追加されますが位置の指定はできないのですか?
>>711 あれ?名前でソートされた順に作られないの?
713 :
デフォルトの名無しさん :03/10/29 11:04
ImageListにアイコンをいくつか登録しておいて それをタスクトレイアイコンとして使いたいのですが、 ImageListからアイコンのハンドルを得るには どうすればよいでしょうか?
調べてみたのですが、よくわからないので質問させてください。 フォーム、を閉じるとき方法として、 Form1.Free; Form1.Close; Form1.Action:=caFree; Form1:=nil; とありますが、それぞれどれとどれの組み合わせで使用すれば Formが完全にメモリから消去されるのかいまいちつかめません。 例えば、 Form:=TForm.Create(Self); Form.Visible:=True; Form.Free; とやるとフォームも消えますが、Freeしてしまえば、Visible:=Falseはしなくてもいいもんなのでしょうか。 皆さんはFormを破棄するのに、どのような方法を利用しておられますか? また、procedure内でvar Form:TFormを宣言し、TForm.Createし、 Freeせずに関数が終了したとします。 このとき、Formは画面上に表示されたままですが、 Formにはもうアクセスできないので、オブジェクトを操作できないですよね。 これは、どういった理由からそうなってしまうのでしょうか。 これがいわゆるメモリに残って解放されないゴミと考えていいということですか?
>>714 フォームではFreeを使わずReleaseを使う。
Closeは閉じるだけ。Showを使えば再度表示できる。
>これは、どういった理由からそうなってしまうのでしょうか。
Formがフォームの実体を指している。Formが消えてフォームの実体を
指さなくなっても、フォームの実体は残ったまま。
>これがいわゆるメモリに残って解放されないゴミと考えていいということですか?
いいと思う。
>>715 ありがとうございます。Releaseを使うんですね。
イベントハンドラが終了するのを待つ・・・ですか。
ReleaseすればcaFreeとnilは必要ありませんか?
たぶん状況によっても異なると思うのですが、
caFreeとnilを使用しなければならない、
または使用したほうが便利というときも存在するのでしょうか。
717 :
デフォルトの名無しさん :03/10/29 12:21
テーブルのフィールドの型を知るにはどうすれば良いのですか? FieldName := Query1.Fields.Fields[i].FieldName; 上記と同じような感じで FieldType := Query1.Fields.Fields[i].FieldType; こんな風に取得できれば嬉しいのですが・・・。
>>716 nilの代入自体は必要じゃない。ただしnilであればフォームの実体は
存在しない(=解放済)と判断したい場合などは便利。
caFreeは使ったことがないので、誰か解説よろ。
720 :
デフォルトの名無しさん :03/10/29 12:49
listViewのreport表示で 1 2 3 1 黒 青 2 黒 赤 3 黒 赤 のように個別に色を変えたいんですが どうしたらいいのでしょうか?
Del厨はそんなことも出来ないのか?(驚
>>719 おおおお!!
こんなのがあったんですね。
ありがとうございます。
>>721 くだすれだからな
pascalつかいは、伝統的に親切なんだよw
>>718 なるほどーありがとうございます。
もっと勉強しないといけないですね・・・・
たすかりました!
>>720 OwnerDrawプロパティからたどってみて。
726 :
デフォルトの名無しさん :03/10/29 13:42
SetLength で 動的配列を指定しているのですが、 配列の長さを途中で変更することは出来ないのでしょうか?
727 :
デフォルトの名無しさん :03/10/29 13:56
redim
728 :
デフォルトの名無しさん :03/10/29 13:59
データベースのテーブルのフィールドがプライマリーキーかどうか調べるには
どうすれば良いでしょうか?
>>717 みたいに
PrimaryKeyFlg := Query1.Fields.Fields[i].PrimaryKeyFlg
こんな感じ使えたらベストなのですが・・・。
>>723 Del使いがさらにレベルが低いと思われるような
レスするなよ。
>>723 親切といっておきながら教えない所が
厨房だよね。
>>728 ヘルプ眺めてもわからんかった。
荒れてきたし、マナーを守らん香具師も出てきたので撤収。
>>700-701 >>705-707 さんありがとうございました
こんな感じでできました。ポインタのほうが意味が掴みやすかったので、
TListでやってみました。グローバルでListを作成し、Classで
procedure TTestClass.Open();
begin
ObjForm := TForm2.Create(Form1);
Index := List.Add(Pointer(ObjForm));
TForm2(List.Items[Index]).Visible := True;
end;
procedure TTestClass.Close(ObjForm: TForm2);
Index := List.IndexOd(Pointer(ObjForm));
TForm2(List.Items[Index]).Release;
List.Remove(Pointer(ObjForm));
end;
作成する側で、TestClass.Open;
閉じる側でTestClass.Close(Self);
とやっています。自信ないですが、さしあたり、こんな感じでよいでしょうか。
いままでFormを入れる変数に困っていましたが、これでよいようであれば、
なんとかなりそうです。TListを使うとポインタで管理できるので、どんな
コンポーネントでも管理できそうで便利ですね。これ一つあれば、なんでも
出来そうです。本当にありがとうございました。
>>733 わざわざ調べて頂いて、ありがとうございました。
私もヘルプを見たのですが分かりませんでした。
それっぽい項目がないので、何か別の方法でやるのかもしれませんね。
>>725 レスありがとうございます。
OwnerDrawを調べたら、できました!こんな感じです。
procedure TServerForm.ListView1CustomDrawSubItem(Sender: TCustomListView;
Item: TListItem; SubItem: Integer; State: TCustomDrawState;
var DefaultDraw: Boolean);
var
s1: String;
begin
s1 := Item.SubItems.Strings[1];
case SubItem of
0 : Sender.Canvas.Font.Color := clBlack;
1 : Sender.Canvas.Font.Color := clBlack;
2 :
begin
if(s1 = '青') then
ListView1.Canvas.Font.Color := clBlue
else
ListView1.Canvas.Font.Color := clRed;
end;
end;
end;
ありがとうございました!!
>>709 ぅぉーーー。出来ましたよ。
試行錯誤の上書き換えて保存も出来ました。
これでようやく…ニヤリ
738 :
デフォルトの名無しさん :03/10/29 15:30
>>736 おめでと。
がんばったね。マルチポストは嫌われるからやめたほうがいいよ。
>>738 ???
俺ですか?
ここにしか、投稿していませんが。。。
>>736 ↓一行で書ける
ListView1.Canvas.Font.Color := IfThen(s1 = '青', clBlue, clRed);
>>740 レスありがとうございます。
非常にすっきり見やすくなりました!
ご教示ありがとうございます。
742 :
デフォルトの名無しさん :03/10/29 16:02
>>737 なんだ?なにを作ろうとしているんだ!!
744 :
デフォルトの名無しさん :03/10/29 16:35
フォームの上の部分(メニューバーというんでしょうか)で 左上のアイコンを表示させて、右上のボタンをひとつも無し にするにはどうしたらよいでしょうか。BorderIconsプロパティ など切り替えてみたりしたのですが、どうしてもうまくいきません。
自作
746 :
デフォルトの名無しさん :03/10/29 17:38
解法@ 1.非クライアント領域ごと消し去る。(bsNone 2.PanelをalTopで貼り付け。Bevelは二つともNone。Colorもそれっぽく 3.Panel上にImage(擬似Icon用)、Label(擬似Caption用)をおく。詳細はお好みで。 4.ImageのOnClickにポップアップメニューを設定しておく。PanelのOnMouseDownで移動できるようにしておく bsNoneだと縁がなくなるのでそれが気に入らない場合はどでかぃPanelを最初に一個設置。Bevelを調整。 とりあえずハリボテ完成。 解法A オナニー
748 :
デフォルトの名無しさん :03/10/29 20:55
>>747 解法@は難しそうなので今回はやめときます。
結局BorderIconsを[biSystemMenu]だけにして
右上の×印ボタンが押されたとき、本当に終了するか
ダイアログを表示するようにしたいのですが、
イベントをどうやって捕らえたらよいですか?
OnCloseやOnDestroyだとできませんでした。
Indyって何って読むのですかね?
あい・えぬ・でぃ・わい
わい・えむ・しぃ・えぃ
名前の由来は”インディアン”から来ていると聞いた事があるけれど、 果たして本当なのだろうかね。
このスレを読んでレスを付けるのはDel厨以外にいったい誰がいるのだろう?
>>728 ixPrimary が IndexDefs[x].Options にあるか調べれ。
>>755 レスありがとうございます。
TSQLDataSetの使い方が分からず苦戦しておりますが、
なんとかなりそうです。
Delphiの宿題丸投げスレはココでいいんでしょうか? 現在ループのところを勉強してるんですが、サッパリ分かりません。 @繰り返しを利用して、九九の表を表示するプログラムを作成せよ。 A自然数nを入力すると、各i(i=1,2,・・・,n)に対して、1+2+・・・+nを計算するプログラムを作成せよ。 B自然数同士の乗算を加算の繰り返しで計算するプログラムを作成せよ。 C配列に格納された数値データを昇順に並べ替えるプログラムを作成せよ。 というかんじで4問出されたのですが・・・ どなたか助けてください。゚(゚´Д`゚)゜。
758 :
デフォルトの名無しさん :03/10/30 11:26
@繰り返しを利用して、九九の表を表示するプログラムを作成せよ。 for 文を2つ書きなさい。そのためには変数が2つ必要です。 A自然数nを入力すると、各i(i=1,2,・・・,n)に対して、1+2+・・・+nを計算するプログラムを作成せよ。 Σn はn*(n+1)/2 でも計算出来ます B自然数同士の乗算を加算の繰り返しで計算するプログラムを作成せよ。 2倍しながら、処理するのが普通です C配列に格納された数値データを昇順に並べ替えるプログラムを作成せよ クイックソートと言いたいけど、普通にfor文2つで処理してみてはどうですか?
>>757 (a) 考え方を教えろ。
(b) なんでもいいから動くソースをよこせ。
どっち?
初心者の課題って煽っただけでレスつくから面白いなー
>>760 あの、丸投げなのでコピペで提出できる形でお願いします。
ソースでお願いします。
>>756 TSQLDataSetは使いませんでした。
TTableで出来ました。
こんな感じでプライマリキーを取得できました。
なにかおかしければご教授下さい。
for i := 0 to Table1.IndexDefs.Count - 1 do begin
s := Table1.IndexDefs.Items[i].Fields;
for j := low(Field) to high(Field) do begin
if Pos(Field[j].Name,s) <> 0 then begin
Field[j].PrimaryKeyFlg := true;
end else begin
Field[j].PrimaryKeyFlg := false;
end;
end;
end;
>>757 これが宿題文そのままだったら、つっこみどころ満載かも。
@九九の表って、表示の仕方がわからん。
たぶんTStringGridあたりを使うのだろうが、見出しはいる?いらない?とか
Bこれも入出力がよくわからん。
[]*[]と入力させて、[]+[]+[]と表示させて、結果も出せばokなのかしら。
Cこれも入出力がわからん。
ランダムで勝手にいれて、ソートした数字はどこに出力すれば??
ロジックだけを見せればいいなら、問題ないけどね。
とりあえず、担当の教授に通報しますた!
765 :
デフォルトの名無しさん :03/10/30 11:55
質問があります。 SetScrollPos(Memo1.Handle, SS_LEFT, 100, True); を実行すると、水平スクロールボックスの位置が100に移動しますが、 メモ内のテキストはスクロールされません。 メモ内のテキストもスクロールするにはどうすればいいでしょうか。
PrimaryKeyでなくても反応しないか?
>>763 PrimaryKeyは1つだけなので漏れはこうしてるよ。
for i := 0 to Table1.IndexDefs.Count - 1 do begin
if ixPrimary in IndexDefs[x].Options then begin
s := Table1.IndexDefs.Items[i].Fields;
for j := low(Field) to high(Field) do begin
if Pos(Field[j].Name,s) <> 0 then begin
Field[j].PrimaryKeyFlg := true;
end else begin
Field[j].PrimaryKeyFlg := false;
end;
end;
break;
end;
end;
uses SysUtils, Windows; //B自然数同士の乗算を加算の繰り返しで計算するプログラムを作成せよ。 function mul(a,b:Cardinal):Cardinal; var i:Integer; begin Result:=0; for i:=0 to 31 do begin if (a and (1 shl i))<>0 then Result:=Result+b; b:=b+b; end; end; procedure sort(var b:array of Integer); var i,j:Integer; begin for i:=0 to High(b)-1 do for j:=i+1 to High(b) do if b[i]<b[j] then begin b[i]:=b[i] xor b[j];b[j]:=b[i] xor b[j];b[i]:=b[i] xor b[j];end end; var i,j:Integer; c:Char; dt,ans:array of Integer; begin AllocConsole; // @繰り返しを利用して、九九の表を表示するプログラムを作成せよ。 for i:=1 to 9 do begin for j:=1 to 9 do write(i*j:3);writeln; end; //A自然数nを入力すると、各i(i=1,2,・・・,n)に対して、1+2+・・・+nを計算 write('自然数nを入れてね');readln(j);writeln('Σn=',j*(j+1) div 2); write('掛算aを入れてね');readln(i); write('掛算bを入れてね');readln(j); writeln('a*b=',mul(i,j)); //C配列に格納された数値データを昇順に並べ替えるプログラムを作成せよ Setlength(dt,10); for i:=0 to High(dt) do dt[i]:=Random(100); ans:=copy(dt,0,length(dt)); sort(ans); for i:=0 to High(dt) do writeln(i:5,dt[i]:5,ans[i]:5); end.
もうそろそろネタばれしたらどうか? なんか可哀想になってきたw
>>764 TStringGridなんて使わんだろ。
つーかDelじゃなくて、単なるPascalの課題じゃないの?
{$APPTYPE CONSOLE}でやるみたいな。
>>769 あーそういうことね
Delphiでもっと複雑なことやってんのかとおもてたよ
771 :
デフォルトの名無しさん :03/10/30 19:19
ショートカットアイコンにD&Dしたファイルのパスを取得する 方法を教えて下さい。お願いします。
ParamStr
>>771 ファイル1個だけなら
>>772 つまり コンソールで引数に入れたのと同じです。
ファイル数個でも同じ。
ファイルとても沢山だと シェルエクステンションでやるしかないのかな?
>>772 >>773 ファイルひとつだけだからParamStrでうまく取得出来ました。
色々とありがとう
775 :
デフォノレトの名無しさん :03/10/30 21:51
CRC算出しようとしています。
いろいろ調べて、
ttp://forum.nifty.com/fdelphi/samples/00229.html のユニットを使い、
crc(0,PByte(string),Length(string))
という形で文字列(テキストファイル)は成功しました。
しかし、exeファイル等だと(EOFコードが入ってるから?)どうもうまくいきません。
そこで、MemStreamやFileStreamを使ってやってみようとしましたが、エラーが起きてだめです。
どうしたらいいでしょうか。教えてください。お願いします。
777 :
デフォルトの名無しさん :03/10/30 22:31
Usesを整理しようとひとつづつ消していったらBeep;が鳴らなくなった。。。 コンパイル時にエラーはないです。何か足りませんでしょうか。 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Spin, ComCtrls, Buttons, ExtCtrls, Menus, IniFiles, Math, ShellAPI, FileCtrl, ActnList, ImgList;
>>777 名前が衝突してんじゃないの?
SysUtils.Beep;
としてみれば?
779 :
デフォルトの名無しさん :03/10/30 22:45
>>778 だめでした。ごみ箱を空にするとか
普通のWindowsの操作ではビープ音は鳴るのですが・・・。
Delphiで新規プロジェクトでボタンひとつ置いてテストしたの
ですがDelで作ったプログラムは鳴りませんでした。
非常に簡単に解決しました。 PByte(string)をStream.Memoryにすればいいだけでした…。 コード補完って便利だねぇ。
781 :
デフォルトの名無しさん :03/10/30 23:55
スクロールボックスの水平スクロールバーが表示されているか、表示 されていないかを取得するには、どうすればいいでしょうか
784 :
デフォルトの名無しさん :03/10/31 00:27
すいません、GetWindowLong が良くわからないです。 恐縮ですが、表示されているか、されていないかのコードをお願できないでしょうか?
785 :
デフォルトの名無しさん :03/10/31 00:32
>>766 ああ、なるほど。そこに
ixPrimary in ParadoxT.IndexDefs[i].Options
これを入れたら良いんですね。
勉強になりました。
ありがとうございました。
>>783 MessageBeepでもだめでした。
sndPlaySoundを使ってサウンドファイルを見つからない状態に
するとデフォルト音としてのビープ音がなるようになりました。
不本意ですが、これで我慢することにします。
/::::)(:::)(:::::::::::)(::::::^::::::::::\ (::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::\ /::::::::::/ノ::::::::ノ::::::::ヽ:人::::::::::ヽ:::::::::::::::) (::::::::::/ ):::ノ::::ノ ) ソ ヾ::::::::::::丶::::ヽ (:::::::::/ 彡 ノ ノ :: 彡:/)) ::::::::::) (::::::::::/彡彡彡彡彡 ミミミミミミミ :::::::::::) ( :::::::// ̄ ̄ ̄ ̄ヽ===/ ̄ ̄ ̄ ̄ヽ |:::::::::) | =ロ -=・=- ‖ ‖ -=・=- ロ=== |:/ ‖ / /ノ ヽ \ ‖ ヽ|ヽ |/ ヽ`======/ .⌒ ` ========ノ. ..| | .( 。 ・:・‘。c .(● ●) ;”・u。*@・:、‘)ノ ( 。;・0”*・o; / :::::l l::: ::: \ :。・;%:・。o ) (; 8@ ・。:// ̄ ̄ ̄ ̄\:\.”・:。;・’0.) .\。・:%,: )::::|.  ̄ ̄ ̄ ̄ | ::::(: o`*:c / \ ::: o :::::::::\____/ :::::::::: / (ヽ ヽ:::: _- ::::: ⌒:: :::::::: -_ ノ \丶\_::_:::::_:::: :::::_/:::: / | \ \ ::::::::::: :::::::::: ::: ::__/ |  ̄ ̄\ 丶  ̄ ̄ ̄ ̄ ̄ ̄ ̄ / ̄ ̄
/::::::::::::::::::::::::::::::::::::::::::::::: ::::::::\ (::::::::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::\ /:::::::::::/ノ::::::::ノ::::::::ヽ:人::::::::::ヽ::::::::::::::::) (::::::::::/:::ハ):::ノ::::ノ ) ノノヾ::::::::::::丶::::ヽ (:::::::::/ 彡 ノ ノ :: 彡:/)) ::::::::::) (::::::::::/彡彡彡彡彡 ミミミミミミミ :::::::::::) (:::::::// ̄ ̄ ̄ ̄ヽ===/ ̄ ̄ ̄ ̄ヽ |:::::::::) | =ロ -=・=- ‖ ‖ -=・=- ロ=== |:/ ‖ //ノ ヽ \ ‖ ヽ|ヽ |/ ヽ`======/ .⌒ ` ========ノ. ..| | .( (● ●) ‘)ノ ( / :::::l l::: ::: \ . ) ( // ̄ ̄ ̄ ̄\:\. .) \ )::::|.  ̄ ̄ ̄ ̄ | ::::(: / \ ::: :::::::::\____/ :::::::::: / (ヽ ヽ:::: _- ::::: ⌒:: :::::::: -_ ノ \丶\_::_:::::_:::: :::::_/:::: / | \ \ ::::::::::: :::::::::: ::: :: __/  ̄ ̄\ 丶  ̄ ̄ ̄ ̄ ̄ ̄ ̄ / ̄ ̄
童貞捨ててすっきりしてきたか?
/::::::::::::::::::::::::::::::::::::::::::::::: ::::::::\ (::::::::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::\ /:::::::::::/ノ::::::::ノ::::::::ヽ:人::::::::::ヽ::::::::::::::::) (::::::::::/:::ハ):::ノ::::ノ ) ノノヾ::::::::::::丶::::ヽ (:::::::::/ 彡 ノ ノ :: 彡:/)) ::::::::::) (::::::::::/彡彡彡彡彡 ミミミミミミミ :::::::::::) (:::::::// ̄ ̄ ̄ ̄ヽ===/ ̄ ̄ ̄ ̄ヽ |:::::::::) | =ロ -=●=- ‖ ‖ -=●=- ロ=== |:/ ‖ //ノ ヽ \ ‖ ヽ|ヽ |/ ヽ`======/ .⌒ ` ========ノ. ..| | .( (○ ○) ‘)ノ ( / l l \ ) ( // ̄ ̄ ̄ ̄\ \ ) \ ) |  ̄ ̄ ̄ ̄ | ( / \ \____/ / (ヽ ヽ ノ \丶\_ _ _ _/ / | \ \ __/  ̄ ̄\ 丶  ̄ ̄ ̄ ̄ ̄ ̄ ̄ / ̄ ̄
プログラマって、本当に↑こんなキモイ感じの風貌の人が多い職業なのですかね?
毎日毎日PCの前に座って臭い息吐いているよ。
実数型の変数を使ってるんですが、 小数点第二位以下を切り捨てるのってどうすればできますか。
10倍して整数化して10で割る。
うわ頭悪そうな解法。
>>796 頭良さそうな解法を知ってるなら教えてください。
鳥つけておきます。
>>795 でもいいかな、と思うのですが、
他になにか良い関数などありますでしょうか。
ListViewの項目をドラッグアンドドロップで入れ替える方法が分かりません。 とりあえず、ListViewのDragModeをdmAutomaticにして、 OnDragOverにAccept:= Source is TListViewと書いて、 OnDragDropに何か書くということまでは分かりました。 あと、どうやるのでしょう・・・・。
dll内のグローバルフックプロシジャから 外部ファイル読み書きする方法はありませんか? Reset・Rewriteやファイルストリームだと どうやっても止まってしまうんですが。
>>800 実行されるスレッドは別ということに気づけ
Checkbox付きのTreeViewを使いたいんですが、どのようにしたらいいのでしょうか?
>>798 そういう関数を作れば? 1行で書ける関数だけど、キミにとって判り難さを解消されるなら意味がある分割だよ。
>>799 D&Dで入れ替えたいのは、 他のアプリから? それとも自分のアプリの要素?
とりあえず、ドロップで挿入するだけの場合こんな感じかな
procedure TForm1.ListViewxDragDrop(Sender, Source: TObject; X, Y: Integer);
var s,d:TListView;
it: TListItem;
begin
s:=Source as TListView;
d:=Sender as TListView;
it:=d.GetItemAt(X, Y);
if it=nil
then with d.Items.Add do Assign(s.Selected)
else with it.Owner.Add do Assign(s.Selected);
end;
805 :
デフォルトの名無しさん :03/11/01 11:03
引数 : char*, 返り値 : booleanを持つ、VC++のDLLを使おうとしています。 (実行時ステータスは返り値で、実際の関数からの応答文はchar*に入る) まず、DLLに渡す引数を設定するため、 type CharP = ^Char; で、Charのポインタ型を宣言して、 var test_char : CharP; で、CharP型の変数を宣言して、 function Hoge(test_char:charP): boolean; cdecl; external 'X.dll'; として呼び出す関数を宣言して Hoge(test_char); として関数を呼び出しました。ここまでは成功して、返り値もtrue。 次に、test_char^ で応答文の先頭文字にアクセスしたのですが、二文字目を見ようとして inc(test_char); とやったら無効なポインタ操作と怒られてしまいました。 この操作を行った直後に test_char^ を見ると、二文字目が出てきているんですが、 何かまずいのでしょうか・・・?
>type CharP = ^Char; で、Charのポインタ型を宣言して、 "PChar型"でヘルプを引くと幸せになれるぞ…
そのDLL関数は引数で与えたポインタが示すメモリ上に何らかの情報を書き込むのですか? それならば関数を呼び出す前に、関数によって書き込まれるデータ長よりも長いメモリを Delphi側で確保してますか? あとBooleanよりもLongboolを使った方が適切かもしれません。
>>806 ・・・・・なるほど!。・゚・(ノД`)・゚・。
Delphiでポインタを扱うはめになるとは思いもせず、軽く読み飛ばしてました。
>>807 あぁ、これもです・・・領域は前もって確保しないといけないんですね。
255文字まで返るはずが、5文字目あたりで文字列が破綻してマシタ。
ありがとうございます。試してみます。
809 :
デフォルトの名無しさん :03/11/01 11:56
構造体のメンバーを0で初期化したいのですが、皆さんはどんな方法でされてますか?
>>809 Fillchar
でもやっぱ遅いのかな
811 :
デフォルトの名無しさん :03/11/01 12:06
>>810 ありがとうございます。
参考になりました。
し、四捨五入だったのか――!? RoundToかSimpleRoundTo使っとけ
切り捨てだったら Integer(I * 100) div 100 だろ
>>816 Delphiの実数型は Integerには収まらない場合もあるから
Int関数 を使った方がいいね。 ・・・負数の場合別けが必要かも
Roundは四捨五入だったのですね・・・。
>>817 氏のでやってみます。
サンクスです。
>Roundは四捨五入だったのですね・・・。 違う。 ヘルプ嫁。
820 :
デフォルトの名無しさん :03/11/01 14:42
馬鹿だなあコイツ(笑
チンポ チンポチンポ チンポチンポ チンポチンポ チンポチンポ チンポチンポ チンポ
マンコ マンコマンコ マンコマンコ マンコマンコ マンコマンコ マンコマンコ マンコマンコ マンコ
ウンコ
824 :
デフォルトの名無しさん :03/11/01 18:23
Delphi7のProfessional版ってWebサービスのサーバは作れましたっけ?
>>824 作れます。それなりの知識も必要ですけど。
>>825 レスありがとうございます。
いま、Webサービスのサーバを作って、それをクライアントから利用しようと
しているのですが、WSDLインポートウィザードでURLを指定すると
「モジュール'dclsoap70.bpl'のアドレス****でアドレス****に対する読み込み違反がおきました。」
というエラーメッセージが表示されてしまいます。
一応、ブラウザからURLを指定するとXMLの記述が見えます。
しかし、Excelのマクロ→VBEditorのWebServiceでURLを指定しても
何も見つかりませんでしたになりますので、サーバのDLLを作った時点で
何か失敗しているのかもしれません。
これはどこに原因があるのでしょうか?
ごめんなさい。自己解決しました。 サーバの方でインターフェースのとこに何も書かず、 実装部でのみコードを書いていたからでした。 お騒がせしてスマソ。
Delphi用のobfuscatorってないんですかねぇ
obfuscator かけるなら UPX みたいな実行圧縮の方がいいかもね
ファイル送信ソフト作ろうとしてるんですが 自身(exe)が使用している帯域幅の取得はどのようにすればよいでしょうか? 単数の場合はStreamの位置の変化を経過時間で割ればいいと思いますが 複数になると複雑になる上、めんどくさそうです。 もっとスマートに 自身が使用している帯域全部を取得する方法があればご教示お願いします。
>>831 それは実装法がばっちいから、複数になると複雑になるんでないの?
singletonでthread safeな帯域算出オブジェクトを用意すればいいだけじゃないのか。
>>804 さん、レスありがとうございます。
ドロップの対象は自身のListViewです。
一応、OnDragDropイベントに Listview.MoveSelection(ListView);
の一行を書けば入れ替えできるんですが、動きが変です。
「ドラッグした項目をドロップしたIndexに挿入して、ドラッグする前の項目を消す」
みたいな感じにしたいのです。
OnStartDragイベントにも何か書かなきゃダメかなぁ。
RichEditのIMEの色を変えたいと思います imecolor[0].crText := clBlack; imecolor[0].crBackground := $00FFC0A0; imecolor[0].dwEffects := CFE_AUTOCOLOR; imecolor[1].crText := clBlack; imecolor[1].crBackground := clWhite; imecolor[1].dwEffects := CFE_AUTOCOLOR; imecolor[2].crText := clBlack; imecolor[2].crBackground := clAqua; imecolor[2].dwEffects:= CFE_AUTOCOLOR; imecolor[3].crText := clBlack; imecolor[3].crBackground := $00C0D0C0; imecolor[3].dwEffects := CFE_AUTOCOLOR; SendMessage(RichEdit1.Handle,EM_SETIMECOLOR, 0,imecolor[3]); どうも配列で指定の仕方がおかしいらしく最後の文で止まります。 どうすると色を変えられるでしょうか?
>>836 配列の使い方分かってませんでした。
ありがとうございます。
DelはCとは違って配列をポインタとしては扱えないよ。
Memo1とRichEdit1を両隣に配置すると行間が違うのがわかります。 RichEdit1の行間をMemo1と同じにしたいのですが、プロパティにはなさそうです。 APIとか使うんでしょうか? よろしくお願いします。
cocolcloak
841 :
デフォルトの名無しさん :03/11/02 23:01
TComponentから派生させたコンポーネントで OnMouseWheel、OnMouseWheelDown、OnMouseWheelUp を受け取りたいのですが再定義しただけではイベントが受け取れません。 誰か知ってる方がいましたら教えてください。
>>841 出来ません。TComponentは不可視のコントロールです。
TWinControlから派生させてください。
>>841 TCustomControl からの派生でした^^;
>>842 さん知ってたら教えて下さい。
フォーカス取得状態じゃないと動きませんよ。 非フォーカス状態でも動かしたいと言ってもWindowsの仕様なので出来ません。
842>> 言われてみればフォーカス取得してなかったかも・・・ ありがとうございます、早速試してみます。
>>842 さん、
無事取得できました、
どうもありがとうございました。
>>839 Windowsのメモコントロールやリッチエディットコントロールには行間を調整する機能はないようです.
メモコンポの代わりにリッチエディットコンポを使うことを検討してみてください.
リッチエディットコンポのPlainTextプロパティをTrueにすることで単純なテキストを編集する事ができます.
(なおリッチエディットコントロールの行間隔はWindowsのバージョンによって異なります.
(メモコントロールはわかりません)
行間隔が変わると困るようなプログラムは書かないようにしなければなりません.)
非常に遅レスですが、あれから色々やってみたところデータ読み取りになんとか成功しました。 今更ながらですが皆様お世話になりました。 ありがとうございました。
あのう、ググってみたんですが判らなかったのですが DelphiでTObjectから派生しない完全に新規のクラスってどう作るのでしょうか
無理。軽いのが作りたいならobject使え。
851 :
デフォルトの名無しさん :03/11/03 11:05
ボーランドのdelphi parsonalで フリーカーソルモード(っていうんでしょうか?)って解除できるんでしょうか? 何も無いところに行くのはちょっと気になるので
852 :
デフォルトの名無しさん :03/11/03 11:26
禁止するより、アドインのリンク示した方がいいのでは? といいつつ俺もあまりのFAQに 探してやるのも億劫に・・すまんな。
まあリンク出さなくても Delphi フリーカーソル の2つキーワードがあればgoogle検索すればいいだけでしょ。 アドインも追加したら間違いなく出る筈だ。
レスどうもです、検索したら見つかりました この件は禁句でしたか・・・すんませんでした
ボーランドのIDEって使いづらいね。
859 :
デフォルトの名無しさん :03/11/03 21:50
フォームにドラッグアンドドロップされたファイルのパスを取得するにはどうすれば良いのでしょうか?
>>859 それを実現するコンポなら山ほどあります。
技術を知りたいならShellAPIのDragAcceptFiles、DragQueryFile、DragFinishを調べてみるとよい。
861 :
デフォルトの名無しさん :03/11/03 23:29
任意のファイルの内容を変数に入れるにはどうすればよいのでしょうか?
TFileStream テキストファイルだけならTStringList.LoadFromFile
>>862 上手く出来ました。ありがとうございました。
TStringをStringにするにはどうすればよいのでしょうか?
ここって
>>863 みたいのにも「ヒントもらったんだから、検索ぐらいしろ」
って言うのはタブー?
>>863 って、よく読んだら質問内容が違うのか…。失敬。
でも、質問が意味不明。
なんでいきなりTStringが?TStringlistのtext?
hoge.FormCreate(self)とするとプロシージャの中でhogeを作れますが、 このhogeを.FormCloseさせたいときはどうしたらいいのでしょうか?
867 :
デフォルトの名無しさん :03/11/04 06:52
janeとか、そのほかDelphiで作られてたソフトを使っていて、自分もDelphiのプログラミングやってみたくなりました。 インストールしてみてヘルプ見たいんですけど、いまいちよく分からないし、プログラミングやるのが全く初めてなので、何か参考書を買おうと思います。 何も知らないところから最初の一冊として長く使えるもののお勧めはないでしょうか? インターネットで注文しようと思います。 どうかよろしくお願いします。
>>867 1冊ではムリ。
使い方の段階から -> ポトペタの段階から->こんにちは、プログラミングの段階から->コンポ作りの段階
この4段階に応じてそれぞれ自分で探しなさいな。
後の方の専門書と違って、
入門書は、相性が大きいから、お勧めは難しいんだよ。
869 :
デフォルトの名無しさん :03/11/04 11:23
テキストファイルの内容を読み込んで、 文字列の中から1文字目から「??」という文字までを取り出すにはどうすればよいのでしょうか?
Pos関数とCopy関数を使う。あとは頑張ってヘルプでしらべてね。
>>867 >インストールしてみてヘルプ見たいんですけど、いまいちよく分からないし
とりあえずインストールしてみてヘルプ見てみれば?
タダでもできるんだし。
その及び腰な所が、最大の問題かと…
873 :
デフォルトの名無しさん :03/11/04 12:40
Soapを使ってWebサービスのサンプルを作ろうとしているのですが、
クライアント側で「ドキュメントの最上位では無効です。」という
例外が出ます。
環境はDelphi7Professional サーバはWindows2000ServerでIISを使っています。
http://LocalHost/Scripts/Project1.dll/wsdl/ISoapSample にアクセスすると、XMLの文章が表示されます。
(一行目はこんなのです→<?xml version="1.0" encoding="utf-8" ?> )
クライアント側のWSDLインポートで上記URLを入れると
ISoapSample1.pasというファイルが出来て、それをUnit1に追加して
label1.Caption := a.HelloText; //aはISoapSampleオブジェクト
と書いてコンパイル、実行すると動きます。
ボタンを押すとHelloとLabel1に出るはずなのですが、
上記例外が出て止まってしまいます。
文字コードがデフォルトでutf-8になっているのと、
サーバ側のTWSDLHTMLPublishコンポーネントの
TargetNamespaceがデフォルトのままになっているのが
原因かなと思うのですが、ヘルプを見ても意味が分かりません。
どうかお助け下さい。宜しくお願いします。m(_ _)m
var Detail : TStringList ; Tex1,Tex2 : String ; i : Integer ; begin if OpenDialog1.Execute then Detail := TStringList.Create ; Detail.LoadFromFile( OpenDialog1.FileName ) ; // Tex1 := Detail.Text ; Tex1 := StringReplace(Tex1,#13#10,'',[rfReplaceAll]); Tex2 := 'Apple'; i := Pos(Tex1,Tex2); // showmessage(IntToStr(i)); end; こうしてみたのですが、文字位置が返ってきません。 何故なのでしょうか?
>>874 「文字位置が返ってきません」ではなく、「最後のShowMessageで××と
表示されます」と書くべきではないのか?
あと、Posのヘルプを読んだのかと小1時間(ry
i := Pos(Tex2,Tex1);
>>863 Str := StringList.Strings[i];
だな。TStringListでヘルプをみて、プロパティやメソッドをみれば、この手のはすぐわかるぞ。
あとdelの補完機能でも、だいたい想像がつく。Strings : [Index: Integer] : Stringとでてくれば、
数字を引数で渡すとString型の何かが帰ってくるということがわかる。
>>866 フォームのオブジェクトを作って開くことかな?なら
開くなら、hoge.Create(Self);hoge.Visible := True;
閉じるなら、hoge.Release;
>>867 >>868 の言う通り。良くも悪くも最初から最後まで末永く使えるのは、梱包されてるヘルプのみ。
1)何にもわからんから、IDEの使い方から、ダイアログでこんにちわ世界を表示させて、住所録
作るような、よくある入門書が欲しくなる。
2)ちょっとしたテクニック知りたくなって、Tips系の本が欲しくなる。
3)うざい解説はいらんから、プロパティとメソッドとイベントの使い方だけ知りたくなって
コンポーネントのリファレンス本が欲しくなる。
4)慣れてきて、コンポーネント開発の本が欲しくなる。
と、だいたい4冊ぐらい買うと思われ。
>>873 www.wwlnk.com/boheme/delphi/techdoc/index.html
ここを参照してみたらどうでしょう。私も時間があったら、SOAPやってみたいです。
>>876 ありがとうございます。
悩んでましたが.Releaseなんですね。
Delphiで作ったソフト同士で、ファイルのやりとりをしたいんですが、 (メッセンジャーのファイル送信のような感じです) これを実現できるコンポーネントや、 もしゼロから作らなければいけないとしたら、使うと便利な コンポーネントって、どのようなものがあるでしょうか。 環境はDelphi7Proで、いまIndyあたりをみています。 どなたかご存じでしたらよろしくお願いします。
>>875 申し訳ありませんでした。逆になっていました・・・(汗
上手くできました、ありがとうございました。
>>876 レスどうもです。
そこを見ても結局分からず、途方に暮れていたのですが、
DelphiMLの過去ログで検索してみると
サーバのプロジェクトソースの uses 節で
ISAPIApp ユニットを ISAPIThreadPool ユニットより 前に
移動させれば良い
という記述を見かけたので、さっそくやってみると、
速攻なおりました。
なんぢゃこりゃ!
882 :
デフォルトの名無しさん :03/11/04 17:10
ファイルの内容を読み込んだ後に バイナリエディタで開いた時のアドレスを指定して そのアドレス部分だけを取り出すにはどのようにすればよいのでしょうか?
ReadBufferかな?
884 :
デフォルトの名無しさん :03/11/04 17:21
Delphi6のPersonalとProfessionalでは何が違うのでしょうか? 今Personalを使ってるのですが違いが分かる方、教えて下さい。
>>880 IdHttpでも、P2Pのファイル送信可能なんですか!
ちとみてみます。
他にも情報ご存じのかたおられましたら、ご教授ください。
よろしくお願いします。
>>886 ServerSocket
ClientSocket
888 :
デフォルトの名無しさん :03/11/04 19:12
>>868 レスありがとうございます。
一冊で済ませるのは無理のようですね。
やはり遠出してでもちゃんと本屋さんにいって自分の目で見て決めてみます。
どうもありがとうございました。
漏れは一冊も買ってないがな。 海外まで回れば大体目的の情報は見つかる。
>>889 ま、人それぞれでしょ。
やりたいことや、わからないことをピンポイントで探すだけなら、
Web上の知識でいいかもしれないけど、なにげに眺めていたり、
調べていてふと目にとまったページで使えそうな方法や、新しい
関数、コンポーネント、プロパティ、メソッドを発見することもある。
Del7の分厚い、あんま役にたたないマニュアルでも、目を通すと
役立ちそうな部分があったりするようなもんだね。
あると何かと重宝なのは間違いない。
>>889 なるほど…言葉が分かれば有効な方法ですね。
とりあえず私はプログラム自体取り組むのが初めてなので、日本語で書かれた本を頼ってみます…
ありがとうございます。
Delphiは最初に覚える言語としては環境が悪いからなぁ。 本が全然無い。その本が読む人の理解力に合っていればいいけど そうでなくても変わりの本がない。
>>889 俺は立ち読みだけで初心者卒業しましたが。
>>892 ObjectPascal自体はは初心者にも安心して教えられる言語なんだがなぁ。
教育環境が整ってないっていうか。
TIdSMTPでメールを送ろうとしているのですが、
以下のような例外が発生します。
'<
[email protected] >:Recipient address rejected:Relay access denied'.
しかも、そのSMTPサーバのメールはちゃんと送信してくれます。
つまり、SMTPサーバがmail.delphi.comとすると、
[email protected] の
メールは送れるのですが、
[email protected] だと例外がでます。
これだけみると、SMTPサーバがそのメールアドレスのリレーを
拒否するような設定になっているんじゃないかとサーバ側を疑って
しまいますが、普通にメールクライアント(Outlook)で送信すると、
ちゃんと送信できるんですよね・・・・。
なので、プログラム側の問題だと思うのですが、どなたか
わかりますでしょうか??
hoge.comのサーバがmail.hoge.comとかじゃなくて?
896 :
デフォルトの名無しさん :03/11/04 22:52
>>882 TMemoryStreamを使う方法も。
LoadFromFile()
Seek()
Read()
の順で呼ぶ。
例えばedit1の中身はedit1.textに入ってますね。 ではform1にドロップしたファイルエントリはどこに入ってるんでしょう?
Memo1.Lines[0] := ('通報しますた'); Memo1.Lines[1] := ('やっぱりやめますた'); こう書いたが0行目しか表示されない... どこでポカやってまつか
line.add
>>895 ありがとうございます。
現状では
TIdSMTP(アドレスは
[email protected] )→mail.delphi.com→hoge.com(アドレスは
[email protected] )
というようにメールを送信したいと思っています。
mail.delphi.comは、プロバイダにあるような普通のSMTPサーバです。
どうも、mail.delphi.comからhoge.comのサーバにリレーできないようです。
このときリレーとは、From側のアドレスを任意に設定できる状態のことをいいます。
つまり、本来ならばmail.delphi.comのユーザは*@delphi.comですから、
メアドが@delphi.comでないとメール送信できないのが理想です。
しかし、場合によっては、この差出人のメアドを任意に設定したいこともあり、
それができるSMTPサーバのことをリレーサーバといいます。
通常のメールクライアントからは正常に送信できるため、たぶん何らかの設定が
足りないのではと思っていますが、それがわからずにおります。
おわかりのかたおられましたら、よろしくおねがいします。
>899 ありがd ドロップファイルのエントリが入ってるプロパティは無いんでつね。 DragQueryFileでやりますた。
>>900 Relay Access Denied.を訳してよく噛み締めれ。
ヒント:踏み台防止のため、この頃のSMTPサーバは「何か」をしないと使えないようにしていることが多い。
903 :
デフォルトの名無しさん :03/11/05 10:48
ものすごくあほな質問だと思いますが、 Delphiで作ったEXEってランタイムいらないのですか? というかDelphiにはランタイムってものがないのかしら?
>>903 無いとも言い切れない点もあるが、フツーに作られたEXEに関しては無い。
906 :
デフォルトの名無しさん :03/11/05 11:16
Delphiを使いはじめたばかりですが、
いまいちコツが分かりません。
文法は分かって、ファイル操作やDBの入出力など
ある程度簡単な物は出来るのですが
ソケット通信などをしようと思っても
どこに情報があるのか分かりません。
どこかにまとまった情報サイトはないでしょうか?
MLの過去ログはいつもありがたく検索しています。
ちなみにコンポーネントがまとまっているサイトは見つけました。
http://www.gnomehome.demon.nl/uddf/ 他にもこういうところはないでしょうか?
>>902 ありがとうございます。
一通りためしてみたのですが、やはりうまくいかないです
もう少しヒントを・・・
>>904 >>905 外部コンポーネント(ODBCドライバとか)を使っているなら
その部分のものはいるけど、
使わなければ、そのままEXEをコピーで使えるって事ね。
ありがとうございます。
910 :
デフォルトの名無しさん :03/11/05 13:40
DCPsha1, DCPrc5,DCPmd5 これらの3つのファイルは コンポーネントをインストールすれば出来るのでしょうか? これらのファイルが存在しませんという、致命的エラーが出て 先に進めないので教えていただきたいです。 お願いします。
>DCPsha1, DCPrc5,DCPmd5 これらの3つのファイルは >コンポーネントをインストールすれば出来るのでしょうか? いいえできません。 いったい何のコンポーネントをインストールしようとしているの? Readme とかに何か書いていませんか?
913 :
デフォルトの名無しさん :03/11/05 13:56
>>911 知らないことに対して無理にレスする必要はないよ。
914 :
デフォルトの名無しさん :03/11/05 13:59
>>911 ↑結局質問に答えられない癖に妙に偉そうにしてるこういう奴ほんとウザイ。
>>915 それは言い過ぎかと。まあ911が読み違えてるのは事実だけど。
DCPシリーズはDelphi Super Pageにおいてたな。
919 :
デフォルトの名無しさん :03/11/05 17:07
正直、書籍みたいなものを買わずに、ひたすらWeb上を駆け回って、 Delphi使いこなせるようになった人ってどれぐらいいるの?
920 :
デフォルトの名無しさん :03/11/05 17:26
910 で質問したものですが、返答ありがとうございます。 Delphi Super Pageを見てみたのですが、よくわかりませんでした。 DCPシリ〜ズというのは、どのような名前のものをダウンロード したらいいのか教えていただければ、うれしいです。 何度も質問してすみません。
これ? www.cityinthesky.co.uk/cgi-bin/schlabo/dl.pl?dcpcrypt2
922 :
デフォルトの名無しさん :03/11/05 17:58
TZipStreamはどこで入手できますか?
あるformのpopupmenuをmouseでclickせず、sendmessageを 使って表示させる事はできますか?
WM_CONTEXTMENU
>>919 WEBじゃないけど、評判の悪いヘルプを中心に勉強してたが。
コツは
・「目次」の順に読むこと。
・[Object Pascal 言語ガイド]から読み始めること。
・キレそうになっても堪えること。
かな?
>>926 追加です。
・「目次」の順に読むこと。
・[Object Pascal 言語ガイド]から読み始めること。
・キレそうになっても堪えること。
・読み飛ばしたくても堪えること。
既存のTLabelを縦書きにさせたいのですが、 フォントを作成してCanvasに直接描く以外に方法ってありますか? 海外を駆け回ってVertical Labelを探したけど、それらしいVCLは見つかりませんでした・・・。
>>928 フォントを作成して描くと、TTフォントしか描けないよ。
他の方法で、ビットマップフォントでもOKな方法しては、
TBitmapをheight/widthを逆にしたサイズで作って、そこに文字を描いてから90度回転する
>>929 なるほど、サンクスです。TTのみで構わないので、直接描くかな。
>>930 日本のサイトでどっかで見た記憶があるから、探してみたら?
俺は自分でも作ったけど、結局、フォントを作る関数を作った方ばかり使ってる。
>>927 それ何時間(何日と聞きたいが延べ時間を聞きたいのであえて)かかる?
集合型の変数に、目的とするデータが含まれているかどうか 簡単に判断する構造化文ってないですかね。 わざわざ、すべてif nantoka in NantokaSet thenとかやるの めんどいんだけどなぁ
集合型の変数が NantokaSet なのか? そのNantokaSet に nantoka があるかどうかなら nantoka in NantokaSet 以上に簡単にはならないと思うが?
>>919 使いこなせるというほどではないが、それなりのレベルにはなってると思う。
必要だけど分からない情報があれば探せばいいしね。
世界最大の情報媒体、インターネッツわしょーぃ
>>935 例えば、case文みたいに
case NantokaSet of
in Nantoka1:
in Nantoka2:
end;
とかできれば便利だなぁと思って。
>>937 for i := Low(NantokaSet) to High(NantokaSet) do
if i in NantokaSet then case i of
Nantoka1:
Nantoka2:
end;
>>938 おお、素晴らしい。ありがとう!!
こんなの思いつかなかったです。すばらしぃ。
940 :
デフォルトの名無しさん :03/11/06 21:04
ゲームのセーブデータの値を変えるプログラム作りたいんだけど どうしていいか全然わからないのよね。 VB製のものはソースとか公開されてるから分かりやすいんだけど Delphi製のモノで公開されてるの見たこと無いのよね。 だれか作って。
×どうしていいか全然わからないのよね。 ○どうしていいか考えようともしたこと無いのよね。
>940 program saveedit; {$APPTYPE CONSOLE} uses SysUtils; var FL_RW : string = ファイル名; DATA_W : char = 書き換えバイナリ; ADD_W : integer = 書き換えアドレス; WFL_RW : file; begin AssignFile(WFL_RW,FL_RW); Seek(WFL_RW,ADD_W); BlockWrite(WFL_RW,DATA_W,Length(DATA_W)); CloseFile(WFL_RW); end. コンパイルは通ったGAあとは知らん。だれかヨロ
>>940 まずはバイナリエディタと電卓でできるようにがんばればいい。
あとはそのアルゴリズム?をプログラムとして書くだけ。
VBのそのまんま移植すればいいじゃん。
みんな荒らし目的のネタ質問にレスしてあげて親切だな。
TServerSocketとTClientSocketを使ってファイルの送受信ソフトつくってるんですが ファイル名とかってどうやって送ればいいんでしょうか? 今はCS→SSの場合、 OnClientConnectでFS:=TFileStream.Create('適当な名前',fmCreate); CS側からButton1OnClickでファイル選択〜(**)SendStream。 OnClientReadでReceiveBuf、FSに書き込み OnClientDisconnectでFS.Free; といった風に何とかやってます。でもファイル名が・・・ で、ファイル名を(**)の辺りでSendText(FileName+#13#10);して procedure TForm1.SSClientRead(Sender: TObject; Socket: TCustomWinSocket); begin if Pos(#13#10,SS.Socket.Connections[0].ReceiveText)<>0 then begin RecFileName:=SS.Socket.Connections[0].ReceiveText; FS:= TFileStream.Create(RecFileName,fmCreate or fmOpenRead); end else begin SS1.Socket.Connections[0].ReceiveBuf(RecBuf^,SizeOf(RecBuf^)); FS.Write(RecBuf^,SizeOf(RecBuf)); end; end; こんな感じでやってみたんですがダメですた(´・ω・`) ファイルサイズ送ったりもできなぃんで困ってます(´・ω・`)
あれ?化けてる。何とかすらできてない(´・ω・`)
>>948 お、漏れもちょうどそういうのつくらなきゃいけない。
いま違うことやってるけど、そろそろとりかからないと・・・・
自分はテキストで情報をやりとりした後にファイルを送ろうと
思ってますた。
接続要求→ファイル情報をテキスト送信→サーバのOKが
帰ってきたらファイル送信 みたいな感じ。
まだコンポーネントみてないから、これが実現できるかどうかは
不明だけど・・・・
Delphiって文字列の置換処理遅い?
>>952 置換処理って・・・あ! D7で増えた関数か。 ああいうの使っちゃそりゃ遅いよ。
言語に関わらず、
・長さの変わる置換処理は出来るだけしない。
・それをする場合は、コピーをしながら全て一度に行う。
というのが普通のアルゴリズムだよ。
>>948 よく分からんが、
レスポンスヘッダに適当に必要な情報を加えてやればいいんでないの?
File-Name: Hoge.txt
とか、自分で定義して。
955 :
デフォルトの名無しさん :03/11/08 00:19
誰かMouseWheelを使ったコンポーネントのソースのある場所しらないですか?
>>954 レスポンスヘッダってのゎ…HTTPですヵ?
そっちのほうも調べてみまつ。
959 :
デフォルトの名無しさん :03/11/08 10:31
助けてください。 フォーム1(メインフォーム)についてはSetWindowPosを使って 常に前面に表示できるようになったのですが、フォーム2 (フォーム1のボタンを押すと作成される)を前面に表示させることが できません。 SetWindowPosのハンドルを記入するところにForm2.handleと書いたら アクセスバイオレーションエラーが出るし、Self.handleと書くと 前面に表示できませんでした・・・ なお、フォーム1については、SetWindowPos(Form1.handle・・・)として 前面に表示できています。 お時間があれば、よろしくお願いします。
>>859 そのフォーム2 の作成した結果はちゃんと Form2に入れてるの?
そこの作成場所のコードを書いてみて
>>960 早速のレスありがとうございます。
Form2(SubForm)の作成は、以下のコードで行っています。
procedure TMainForm.SubFormOpen;
var
NewWin:TSubForm;
begin
if ArticleFind then
begin
{サブフォームを表示}
NewWin:=TSubForm.Create(Application);
NewWin.Show;
end;
end;
そして、SubForm上のTopMostBtnを押すと、前面に表示するようにしたいのです。
{常に前面に表示}
procedure TSubForm.TopMost;
begin
if TopMostBtn.Down then
begin
SetWindowPos(SubForm.handle,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE Or SWP_NOSIZE Or SWP_NOACTIVATE);
end else
begin
SetWindowPos(SubForm.handle,HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE Or SWP_NOSIZE Or SWP_NOACTIVATE);
end;
end;
お手数をおかけしますが、お願いします。
とあるコントロールつくっているんでつが、 ParentのColorを取得したいんですが、 TContorlのColorはProtectedなため取得できません。 かといっていちいちTFormかTGroupBoxか判別してキャストするのも効率悪いと思うのですが、 強引にParentのColorを取得するほうほうって無いでつか?
>>961 やはりね。
NewWin というローカル変数で作成して、インスタンスを永続的に示すポインタを作ってないわけだ。
これ自身は問題というほどでもない。
でも、SubForm.handle と SubFormという変数を利用している。
これは Self.Hndleにするべきだ。
それから HWND_TOPMOST にするなら、そのまえに HWND_TOPMOSTだった ものを解除した方がいいと思うよ。
だから、TopMostを管理するユニットを別に作って、そこで統一して管理すべきだよ。
>>963 ありがとうございます。
え〜、自分のつたない知識でまとめると、
・SubFormのインスタンス(?)を永続的に示すポインタを作っていないため、
SubForm.handleとしても、どのフォームのハンドルを指すのかをWindowsが
判断できず、エラーが出ていた。
・SubForm.handleは、Self.handleとする。
・Self.handleとしても前面に表示できなかったのは、既にTopMostになっている
フォーム(MainForm)があったため。
ということでしょうか。
とりあえず、もう一度Self.handleでやってみます。
連投すみません。 MainFormのTopMostを解除して、SubFormでSetWindowPos(Slef.handle・・・ をしたら、ちゃんと前面に表示できました。 あとは、サブフォームは一度アクティブでなくなるとTopMostが解除されるって ところが問題になるんですよね・・・ これは、どこかでApplicationEventを使ってうまい事やればいいって読んだ ので、いろいろやってみます。 ただ、TopMostが重複するとだめということは、MainFormとSubFormを同時に TopMostに事は出来ないのでしょうか。 それとも、MainFormをTopMostにしておいて、何らかの方法で SubFormをMainFormのさらに前に出すことができるのでしょうか。 スレの終わり際にめんどくさい質問してすみませんです。
BringToFront使えよ
セーブダイアログの「保存(&S)」キャプションを「&O K」に変える方法を教えてください。
969 :
デフォルトの名無しさん :03/11/08 15:25
コーディングの質問じゃないんですけど、 Delphiってどんな意味なんですか?
970 :
デフォルトの名無しさん :03/11/08 15:26
>>969 無知の知というのはご存知ですか? 知らなければ検索してみて下さい。
あなたが Delphiについて知らないという事を知っているという意味で、Delphiについて一番良くしっているのです。
>>971 ここはネタスレではないので、電波の放出は電波板でお願いします。
973 :
デフォルトの名無しさん :03/11/08 15:38
>>970 ありがとうございます。
>>971 ごめんなさい、よくわかりません。
私はDelphiではないので、成り立たないと思います。
974 :
デフォルトの名無しさん :03/11/08 15:42
「クラクラ(((*´д`*)))エアエア」ってなんかきもい
>>968 procedure TForm1.SaveDialog1Show(Sender: TObject);
begin
SetDlgItemText(GetParent(SaveDialog1.Handle), 1, 'OK');
end;
ようするに アテネイのソクラテスが デルポイの神託 を授かった ・・・話の デルポイ から採った名前って事さ
ごめん、ごヴぁくです。
978 :
デフォルトの名無しさん :03/11/08 22:56
Delphi6 Personalを無料ということで使い始めたんですが、 これってChartが無いですよね? グラフを描くにはどうしたらいいんでしょうか。 もしかして無理?
無理とは人聞きの悪い。あなたはDelphiの評判を貶めるために放たれた刺客ですか? DelphiにはChartコンポーネントを作成することを妨げる技術的要因は存在しません。 すなわち可能であるということです。
Personal版にはChartコンポーネントを作成してはいけないという決まりがある
981 :
デフォルトの名無しさん :03/11/08 23:09
Delphi6Proを以前購入したんだけど 取っ付きにくいんだよね。 まだ、C言語の方が分かりやすいような、、 書籍も少ないような気がするし。 5万以上も出して買ったので是非使い回したいんだが いいウェブサイトとか無いですかね? ちなみに押入れに閉まったままです。
実践向けの本はDelphiの方が多いよ(^-^=)♪
どんな本屋でも1〜2冊くらいはdelphiの本があるもんだが、 某品川区の某デパートの本屋には一切置いてませんでした…。 それはもう見事なくらい無かった…。 どうやら、delphiの本は置かない方針のようだ。 トホホ。
普通に支店などで買う奴は・・・(ry winnyなどwinmxなどで普通に落とせるのでは・・と。 5万ですか・・もったいね・・
987 :
デフォルトの名無しさん :03/11/08 23:48
(´-`)。o ○ (「C言語やっとけ」ってのは言っちゃダメ?)
ループのやりかたとか変数の型とかそういう構文をマニュアルで覚えたら 後はコンポーネントを貼り付けて構文補充と悪評高いヘルプを調べながら やっていけばなんとかなる。
>>979 すみませんでした。精進します。
>>980 なんと。そんな決まりがあるとは・・・。
やはりProを買わなきゃいけないってことですか。
無料で済まそうと思ってた自分が甘かったです。
ありがとうございます。
990 :
デフォルトの名無しさん :03/11/09 01:50
あいかわらずDel厨はレベルが低いのぉ
991 :
デフォルトの名無しさん :03/11/09 02:17
超初心者向けって書いてるんだがな
993 :
デフォルトの名無しさん :03/11/09 02:33
記念カキコ v(^-^*)
クダスレと言うことで、私がのんびり埋めるよ〜。
>>1 さんもごくろうさまなのだよ。
Delphiは懐かしいのだよ。でも好きだったりするのだよ。
まぁ、私はどの開発も好きだったりするのだけどw
先ほどまでは別の板にのんびり常駐していたのだよ。 997ゲト〜。
そうだ。えと、2ちゃんねるの管理者さん。ごめんなさい。 発言は違うかったりするけれど、連続で書き込んでいるのには違いないので。 1000ゲトがしたくて、こそこそと書き込んでいます。ここが終わったら寝ます。
さてと、そろそろ気合を入れるのだよ。999ゲト〜
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。