1 :
デフォルトの名無しさん :
2007/01/21(日) 22:41:54
2 :
デフォルトの名無しさん :2007/01/21(日) 22:42:42
4 :
デフォルトの名無しさん :2007/01/21(日) 23:39:02
はやくBDS 2007出ないかな~
Del6です IDEで実行 ↓ 無限ループのバグがありWinからアプリを強制終了 ↓ プロセスを終了できません どうしたらいいですか?orz
Delphiのバージョンくらい書け
>>5 IDEから終了させようとして、「プロセスを終了できません 」ってでたんです(汗
Delphiを終了させようとしても、「デバック中です」とかいわれたり。
結局Delphiを強制終了
11 :
デフォルトの名無しさん :2007/01/22(月) 11:23:54
>>10 たまに、あるよ。
IDEからでは、どうしようもないことが。
極力、無限ループは避けるしか・・・。
あとは、タスクマネージャで、優先度の設定を通常以下にすると、IDEからでも終わらせられることがある。
12 :
デフォルトの名無しさん :2007/01/22(月) 11:36:24
文字の形をしたウィンドウをTransparentColorを使わずに リージョンで作ろうと思っているのですが StrokePathで文字の縁取りを含めたウィンドウを作ろうと思ったら どうすればよいのでしょうか? TextOutで縁取りなしのウィンドウは作れるのですが 縁取りも含めた形の文字のウィンドウがどうしても作れません・・・><;
前スレの969ですけど、 Socketのプログラムを組んでいるんですが、 接続相手が居ない時にでる例外が捕まりません。 try Form1.ClientSocket1.Open; except end; これで、例外のポップアップがでます。 どうも、Open時には例外が出なくて、タイムアウト時に例外が出ているのかな?って推測ですけど、 この例外を捕まえるにはどうしたらいいのでしょうか? 例外が出たらメッセージは出さずにログに記録したいと思っています。
14 :
7 :2007/01/22(月) 12:47:42
>>8 すみません、バージョンは関係無いと思ったのであえて書きませんでした。
Delphi6Personalです。
>>9 ブラウザは普通に作ることが出来ました。
私が知りたいのは何処からMicrosoft製コンポーネントの仕様が入手できるかです。
可変部分を持つレコード型で演算子をオーバーロードするために次のように書いています。 TVector3 = record class operator Equal(const A, B: TVector3): Boolean; class operator Add(const A, B: TVector3): TVector3; class operator Subtract(const A, B: TVector3): TVector3; case Integer of 0:(X, Y, Z: Single); 1:(E: array[0..2] of Single); end; このときに各演算子メソッドの実装部分で、 「宣言がすでに定義されているものと異なります」というエラーが出てコンパイルできません。 可変部分をなくすとコンパイルできるのですが、 可変部分を持つレコード型では演算子のオーバーロードはできないのでしょうか。
16 :
13 :2007/01/22(月) 12:50:49
自己解決 エラーイベントの中にErrorCode:=0;って書けばスルーできた
18 :
7 :2007/01/22(月) 13:11:28
>>17 有難う御座います。
英語版のMSDNにあるのですね。どうりで見つからなかった訳です。
ラベルにTStrings型のプロパティを持たせたのですが、 これの初期値をNameから得るにはどうしたら良いのでしょうか。
20 :
デフォルトの名無しさん :2007/01/22(月) 13:35:28
>>15 可変じゃなくても、メソッドの後に、変数置いても、
同じエラーがでますね。(もちろん、後に置けません!とは言われるけど)
仕様なのか、バグなのか?
QCに報告しておいたらどうでしょうか。
Socketのsendtextって1回で最大何バイトぐらいまで送っていいんでしょうか リストをやり取りするプログラムを組んでいるんですが、 いっぺんで送ってしまおうと考えていて。 そのリストは1KBを超えることは無いとは思うんですが。
22 :
ヽ :2007/01/22(月) 20:01:49
ノートパッドに書かれたテキスト(.txt)から、一行目,三行目,五行目,七行目.....というように奇数番目の行だけを読み込んで表示するプログラムを作りたいのですが、指定された行だけを読み込む方法が分かりません。 教えてくださいませんでしょうか?
var i: Integer; sl: TStringList; begin sl := TStringList.Create; try sl.LoadFromFile('ファイル名.txt'); i := 0; while i < sl.Count do begin ShowMessage(sl[i]); Inc(i, 2); end; finally sl.Free; end; こんなかんじ
24 :
ヽ :2007/01/22(月) 20:33:05
25 :
前スレ986 :2007/01/23(火) 12:56:18
前スレではお世話になりました。 探してみましたがやっぱりエンコードが分かりません>< .tmpファイル(EUC)をShift_JISで読み込みたいのですが どうすればいいか教えてください。
nkf使え
27 :
デフォルトの名無しさん :2007/01/23(火) 13:20:33
>>25 一旦stringでも読み込んできて、
なんらかのEUC to SJISのライブラリを間にはさむしかなかろうて。
IDEのようにボタンやテキストボックス等をフォームに置いて 選択したコントロールの端をドラッグしたりして コントロールを引き伸ばしたり縮めたりしたいのですが クリックしたときにIDEのようにコントロールを選択された状態 (コントロールの上下左右斜め端に■が表示された状態) にする方法がわかりません。 どうすればよいでしょうか? バージョンはDelphi2005です。
30 :
デフォルトの名無しさん :2007/01/23(火) 16:43:51
Delphi6でネット巡回ソフト作ったけど FastNetではHTTP1.1に未対応で転送されるとアウトで断念。 Indyではタイムアウトが無くて、応答無しの時の処理が超無駄使い。 タイマーで監視して120秒待ってもIdHTTPのGet関数が終わらなかったら タイムアウトと判断しているが、強制的にIdHTTPを開放しようとすると フリーズするので、スレッド丸ごと放棄して新しいスレッドを製作して そっちに引き継ぐ処理でごまかした。 だが放棄したIdHTTPが悪さをしているのか、たまに全く通信が出来なく なることがある。もっとスマートな手段は無いのだろうか...
31 :
28 :2007/01/23(火) 17:11:41
32 :
デフォルトの名無しさん :2007/01/23(火) 18:39:23
ファイル転送のプログラム作ってるんだけど、Indy使うか標準のSocket使うか迷ってます。 どっちがいいんでしょうか?
33 :
デフォルトの名無しさん :2007/01/23(火) 19:21:18
>>30 > Indyではタイムアウトが無くて、応答無しの時の処理が超無駄使い。
最近のIdHTTP にはreadTimeout があると思うけど、駄目なの?
35 :
デフォルトの名無しさん :2007/01/23(火) 19:31:41
じゃあ俺は共有かけてBlockWriteを使う。 けど、やっぱりSocketかな
俺なら面倒だからindy使う
37 :
デフォルトの名無しさん :2007/01/23(火) 20:07:59
test.txtというファイルの1行目に「~~~」、 2行目に「~~~」、3行目に「~~~」..... というように、ファイルに書き込みをするソフトを 作りたいのですが、書き込む方法が分かりません。 教えてください。お願いしますm(__)m
TStringList
39 :
30 :2007/01/23(火) 20:59:56
>>34 ほほー
Delphi6標準のには無かったんでIndyの新しいのを探してみるよ
40 :
デフォルトの名無しさん :2007/01/23(火) 21:00:34
ファイルの日付の取得を行いたいのですが、 Data := FileDateToDateTime(FileAge); とやると、FileAgeが使用を推奨されないうんぬんとwarningがでます。 では、何が推奨されるのでしょうか? ヘルプにも書いてありません。困っています。 {$WARN SYMBOL_DEPRECATED OFF}も負けを認める用でいやなのですが・・・
FindFirstをしてTSearchRec.Timeを見れば?
deprecatedじゃない方のFileAge使えばいいじゃん
43 :
デフォルトの名無しさん :2007/01/23(火) 22:36:09
>>42 ですね。サンクス。
Helpに記述が無いのは、Borlandクオリティってやつですか?
とりあえず、返り血がTrueなら、成功だろうか
44 :
32 :2007/01/24(水) 00:05:02
皆さんありがとうございます。 今はSocket使ってるんですが、不安定なんでIndyにしようかな。 ブロッキング接続でエラーでるんですよね。なのにSleep入れてやったら出なかったりと、 かなり不安定なんです。
45 :
デフォルトの名無しさん :2007/01/24(水) 01:10:11
46 :
32 :2007/01/24(水) 03:30:43
ローカルでやってるんなら 送信ファイルパスと受信ファイルパスが同じだと書き込みエラーになるよ パスが同じなら同じファイル名でもね
DMonkey付属のもよいよ これで君のソフトもIrvineなみ
AquesTalk.dllを使ってテキストを音声にし、それを保存しようと しているのですが、保存部分のみどうしても分かりませんorz AquesTalkのヘッダファイルに以下のようにあったので、 DllExport unsigned char * __stdcall AquesTalk_Synthe(const char *koe, int iSpeed, int *pSize); Delphiで以下のようにしています。 function AquesTalk_Synthe(Koe: PChar; ISpeed, Size: integer): PChar; stdcall; external 'AquesTalk.dll' name 'AquesTalk_Synthe'; 戻り値がWAVフォーマットのデータの先頭アドレスとなっているのですが、 これをファイルに保存するにはどうのようにしたら良いのでしょうか?
1年ぐらい前からプログラミング勉強しだして、今度はDelphiをやってみようと思って色々調べてみた。 Turbo Delphi Turbo Delphi for .NET Delphi 6 無料版でこの3つかな? で、この3つがどう違って、何を入れたらいいのかわからなくて困ってるんだ。 誰か軽い解説&お勧めplz。
>>50 Turbo Delphi Explorer
最新版だが、少々、動作不安定。DBアプリを作れる。商用アプリも可。
コンポーネントを追加できない(裏技あり)
Turbo Delphi for .NET
Delphi WIN32のソースコードをそのまま.net化できる。
Delphi6
2001年版。DBアプリは作れない。商用不可。
コンポーネントを追加できる。
pasをプロジェクトに登録するだけじゃないの?
54 :
デフォルトの名無しさん :2007/01/24(水) 19:23:00
>>52 ライブラリパスの場所に
unit_windows_api.pasを置く
>>50 とりあえず全て無償版という前提で。お勧めの順番はD6>=Turbo Delphi>>Turbo Delphi .NET
Turbo Delphi:
最新版のWindowsネイティブ版のDelphi。商用可。
基本的にコンポーネント等追加不可で、おかげでエディタのフリーカーソルを解除できないのが痛い。
可能にするツールが海外で配布されているが明らかにライセンス違反くさい。
Turbo Delphi for .NET:
最新版の.NET Framework版のDelphi。商用可。
基本的にコンポーネント等追加不可で、おかげでエディタのフリーカーソルを解除できないのが痛い。
.NET Frameworkアプリを作るならVC#の方がなんぼかマシなのでこの中では一番非推奨。
Delphi 6:
3世代前のDelphi。商用不可。
最近追加されたDelphi言語の書き方が出来ないが、そういうのは未だに一般的じゃないのであまり気にしなくていい。
コンポーネント等の追加が可能で、フリーカーソルを解除できるのが良いが、一部キーボードショートカット(Ctrl + Shift + ↓とか)が使用できない。
Turboはヘルプが完全に日本語化されてないので初心者にはちょっとね フリーカーソルも慣れればかえって使いやすいもんだし
Delphi6を使ってます。 バイナリエディタを作ってみたいんですが、バイナリデータをTMemoryStreamなどで読み込んだあと、そのバイナリを表示する方法がわかりません。 どのようにすればいいですか?
59 :
50 :2007/01/24(水) 20:32:17
>>51 >>55 ありがと。
スレ見ててもDelphi6の話題が多いし、初心者にもいいみたいだしDelphi6入れる事にします。
>>58 何が聞きたいのかがいまいち分からんが、
Formatとかで1バイトずつ16進に直してStringGridとかに表示していけばいいんでない?
61 :
58 :2007/01/24(水) 21:03:10
ありがとうございます。 とりあえずFormatをググって使い方を調べます。
DrawGrid使って自分で描いた方が速いと思う。
>>49 これ面白そうだな。
フリーでアクセント付けれるのって他にあるんかな。
とは言うものの俺もわかんね。すまんorz
>>49 Size 引数は int へのポインタだよ。
(Koe: PChar; ISpeed: Integer; Size: PInteger)
> size にエラーコードが設定される。 なので p:=AquesTalk_Synthe(Koe: PChar; ISpeed: integer; var Size: integer): で TMemorystream.Write(p, Size) で SaveToFile で procedure AquesTalk_FreeWave (wav: PChar); とか (テキトー)
67 :
デフォルトの名無しさん :2007/01/25(木) 00:18:18
フォーム上にラベルのようなものを貼って、それをクリックしたら通常のブラウザ(IEなど)が開くようにするのってどうすればよいですか?
69 :
デフォルトの名無しさん :2007/01/25(木) 00:23:43
70 :
デフォルトの名無しさん :2007/01/25(木) 04:07:03
IndyのTCPServerの、Readbufferで取得できたサイズを知る方法がわかりません。 どうすれば取得できますか?
質問です exe等からアイコンを抜き出してSpeedButtonに張り付けて使っていたのですが アイコンの左上1ドットの色で透過されないようにする方法があれば教えてください
72 :
デフォルトの名無しさん :2007/01/25(木) 07:23:05
DelphiがWindowsVistaで文字化け? みたいなサイトを目にしてしまいました。 深刻なんでしょうか?文字化けを克服したバージョンのリリースの予定っていつ頃なんでしょうか?
デュアルブートにしてXPとVista使いわければ?
74 :
49 :2007/01/25(木) 08:50:57
>>64-66 ありがとう!参考にして以下のようにやったらできました。
今までポインタ自体全くわからなかったけどなんとなく前に進めそうです('A`)
var
wav: PChar;
Size: Pinteger;
FS: TFileStream;
begin
if SaveDialog1.Execute then
begin
wav := AquesTalk_Synthe(PChar(Edit1.Text), 100, Size);
FS := TFileStream.Create(SaveDialog1.FileName, fmCreate);
FS.Write(wav^, Size^);
FS.Free;
AquesTalk_FreeWave(wav);
end;
end;
76 :
デフォルトの名無しさん :2007/01/25(木) 11:44:01
>>75 忘れちゃったけど、Unicode関係なのか「Vistaになって新たに追加された文字」(それ以前の開発環境でのソフトでは表示できない!?)みたいなことが書いてあったと思う。
78 :
25 :2007/01/25(木) 12:02:19
>>26 、
>>27 ありがとう。
ttp://www31.ocn.ne.jp/~pz/delphi/pzconv/document.htm のTPzConvを使いたいと思います。
そこで、また質問なのですが、コンポーネントのインストールは
できたのですが、使い方(呼び出し方)が良く分かりません。
サンプルのように
Memo2.Text := PzConv1.EucToSjis(TempFileString);
とやってみたのですが、未定義の識別子:'PzConv1'とエラーが出ます
Memo2.Text := PzConv.EucToSjis(TempFileString);
だったら未定義の識別子:'EucToSjis'と出ます・・・・・・・・
おねがいです・・・・・・・・。呼び出し方教えて下さい。
質問です。 ClientSocketで複数のサーバーに同時接続というのは無理でしょうか?
>>80 やったことないんで想像で書くけど、
コンポーネントを複数おいたらできない?
一個のコンポーネントでは無理。接続中にアドレスとかポートとか書き換えれないから。
不特定多数に繋ぐならコンポーネントの動的生成じゃない?
82 :
デフォルトの名無しさん :2007/01/25(木) 14:24:08
>>78 普通に、Delphiの使い方勉強しましょうよ・・・
>>81 動的生成でやってみます。
ありがとうございました。
84 :
80 :2007/01/25(木) 16:46:05
もう1つ質問を・・ 動的生成数を変数intで管理していて ClientSocket1 ClientSocket2 ClientSocket3 : となるとき 生成時に生成数+1の変数を書きたいのですが ClientSocket[ ? ] = TClientSocket.Create; の[ ? ]にはどんな風に書けばよいのでしょうか・・
85 :
デフォルトの名無しさん :2007/01/25(木) 18:03:42
ちょいと、質問を。 TListみたいなデータ構造で、オブジェクトプールのように、 クラス名を渡して、あらかじめオブジェクトを生成してもらう汎用的なプールを作ろうとしています。 そのときに、クラス名を渡して、生成してもらう、という処理が上手く行きません。 TObjectのCreateが、virtualでないため、 THogeClass = class of TObjectとして、プールに型名を渡しても 渡した型のCreateが呼べません。 プール用にCrateをvirtualにしたクラスを定義して、登録するデータはそれを継承するという方法も ありますが、そうすると任意のクラスを登録できるわけではなくなります。 何かよい方法はありませんでしょうか?
86 :
デフォルトの名無しさん :2007/01/25(木) 18:04:11
テンプレートが使えればすむのですが、使えないので・・・orz
87 :
85 :2007/01/25(木) 18:29:34
とりあえずは、オブジェクトを生成するメソッドのポインタを渡して、 そのポインタから呼び出して生成してもらうようにしていますが、 もっとスマートな方法はないだろうか? (まあ、こちらの方が汎用性は高いですが・・・)
88 :
85 :2007/01/25(木) 18:32:46
簡略化したコード書いてみます。 interface const NumOfPool = 100; type TObjectPool = class FItems: array of TObject; constructor Create(ObjectClass: TObjectClass); end implementation constructor TObjectPool.Create(ObjectClass: TObjectClass); begin SetLength(FItems, NumOfPool); for i := 0 to NumOfPool - 1 do FItems[i] := ObjectClass.Create; end; ↑これでは駄目
そもそもコンストラクタの型が一定ではないのだから、無理な話。
90 :
デフォルトの名無しさん :2007/01/25(木) 19:43:52
>>84 Delphiの基礎ちゃんと勉強したか?
For ix:= 0 To生成したい数 Do begin
ClientSocket[ix]:=TClientSocket.Create;
End;
91 :
デフォルトの名無しさん :2007/01/25(木) 21:03:21
質問させてください。 ●プロジェクトに含まれないソースファイル(リンカ?等の設定でつながっている)をステップインしてデバッグしたい。 方法はないでしょうか? ●事の成り行き とあるサードパーティ製のGridを使っていると、カラム幅を変えた際(MouseUp)にエラーが発生しました。 ソースコード付きだったので動作を追って行くと「inherited」という部分でエラーが出ているのが分かりました。 「inherited」を調べてみたところ、呼ばれているイベントの継承元の処理が動く、と認識しました。 継承元をたどってゆくと、VCLのTCustomGridのpasファイル内にある「MouseUp」イヘ゛ントがそれっぽいのです。
>>90 forの初期値が0なら
for ix := 0 to 生成したい数 - 1 do
でしょ
>>84 配列の数が3以上に定義されているのなら[4]
94 :
デフォルトの名無しさん :2007/01/25(木) 23:53:17
Delphiのクラスには静的コンストラクタがないようですが、 クラスフィールドは自動的に0やnilで初期化されるのでしょうか? それとも他のタイミングで手動で初期化する必要がありますか?
>>94 > クラスフィールドは自動的に0やnilで初期化されるのでしょうか?
YES
>>91 プロジェクトのオプションでデバッグ版DCUを使うにチェック入れてみたら?
>>94 ついでにいうと同じくヒープに確保されるグローバル関数も初期化される。
一方スタックを使い回されるローカル変数は初期化されない。
自ら修正 誤:グローバル関数 正:グローバル変数
99 :
94 :2007/01/26(金) 00:13:00
>>84 コンポーネントを動的にいくつも追加する場合は配列かリストオブジェクトを使います.
いずれの場合も生成数を自分で管理する必要はありません.
ここではリストオブジェクトのひとつ TComponentList クラスのオブジェクトを使う例を.
○宣言
FClientSockets: TComponentList;
○生成,追加
FClientSockets.Add(TClientSocket.Create(self)); // ソケットコンポを1個生成してリストに追加
○使う(例)
TClientSocket(FClinetSockets[2]).Open; // 3番目のソケットを接続(最初が0番になる)
リストオブジェクトもオブジェクトなので生成と廃棄が必要です.
IDEなど設計時に Memoコンポーネントなどを配置し実行時にその機能を使える処理を コード側からやるにはどのように記述すれば良いのでしょうか? 具体的にはボタンを押すと パネルにMemoが出現するプログラムをつくりたいのです どうかご教授よろしくお願いします
MDI子フォームを整列させるコードってあるんでしょうか?
103 :
78 :2007/01/26(金) 11:14:30
>>79 、
>>82 できました!!ありがとうございます。
typeにPzConv1: TPzConv;を書き忘れてました。
みなさんに頼りすぎました。すみません。
>>102 TileメソッドやらCascadeメソッドがあるがな・・・
それか標準アクションにも用意されてるがな・・
>>100 >>84 の元の質問の答えになってないがな・・
>>101 とりあえず、設計時にMemoのVisibleプロパティをFalseにして、
実行時にボタンが押されたらVisibleプロパティをTrueにすればいいんじゃまいか??
ボタンが押された時の処理はボタンのOnClickイベントに書けばいいがな・・
106 :
102 :2007/01/26(金) 13:01:55
>>101 >>105 の方法がお手軽でヨロシ
設計時にコンポーネント置くのは嫌だってんなら
procedure TForm1.Button1Click(Sender: TObject);
var
objMemo: TMemo;
begin
objMemo := TMemo.Create(Panel1);
objMemo.Parent := Panel1;
end;
おい、2005はVISTAで使えるのか?
2006 と同じだと思われ。
Delphiで遊んでるものにはつまんない、さびしい
111 :
85 :2007/01/26(金) 18:06:55
とりあえず、
>>87 のようにこんな形で切り抜けたが・・・
interface
const NumOfPool = 100;
type
TObjectMakeMethod = function (): TObject of object;
TObjectPool = class
FItems: array of TObject;
constructor Create(ObjectMake: TObjectMakeMethod);
end
implementation
constructor TObjectPool.Create(ObjectMake: TObjectMakeMethod);
begin
SetLength(FItems, NumOfPool);
for i := 0 to NumOfPool - 1 do
FItems[i] := ObjectMake;
end;
112 :
101 :2007/01/26(金) 19:07:18
>>107 できました!
ありがとうございました。
113 :
デフォルトの名無しさん :2007/01/26(金) 21:03:22
HTTPリクエストとレスポンスヘッダを見たいんですが どうすりゃいいんでしょうか
114 :
デフォルトの名無しさん :2007/01/26(金) 21:36:10
>>113 他のアプリのを見たいのなら、ディープな部分のWindowsの知識が必要。
ぱぱっと作れるような簡単なものでは無い。
内容を見るだけなら、そういうツールを探したほうがいい。
自作アプリのならば、コンポーネントで見方が違うから
何を使っているのか書いてくれないと確認するのが面倒。
winsock2.0以降ならRAWソケットで簡単にできるような
118 :
84 :2007/01/27(土) 08:34:54
119 :
デフォルトの名無しさん :2007/01/27(土) 13:20:19
TStringListって2Gまでの情報が入れられると聞きましたが、2Gを越えるかどうかのチェックってどうやってるんですか? 保持してる情報量が2Gを越えたら新しくAddさせない、とか。 気にしなくても勝手にやってくれるんですかね?
>>119 textプロパティの長さを調べるとかじゃダメなの? もっと性格に知りたいとか?
テストしてみたら?
2Gのファイルを用意するのはメンドイと思うからaddをループでもさせて。
2Gあふれたらどうするの? ってのは今俺も思った。
>119 正確にはプログラム本体+システム以外のDLLで使用しているコード、データの合計が 2GBを超えられない。でも物理メモリが2GB以上ないとスワップ発生しまくりで その時点でシステムが不安定になるような気がする。 TStringListに関して言えば保持している文字列の中にユニークでないものもあるため、 正確な所要メモリってのはなかなか難しい。 while True do begin S.Add('TESTETSTTESTTEST'); // 16byte end; とかやっても文字列の実体は1つなのでね。増えるのはString型変数のみ。 間違ってもTextプロパティとか見るなよ?あれは手持ちの文字列をその場で連結するものだから。
するってえと、ベテランの人たちでも2G溢れたときの処理はしてないのか? ま、テキストで2Gって滅多とあるもんじゃないけどね。 でも作法的には違反のような気がするお。
ヒープが2GBを超えられないんだから対策する必要がない。
メモリーが2Gない
>>124 2G行きそうな気配の時はファイル分割とかになるのが当たり前な設計で、
分割できない時は部分読み込みなんじゃない?
しかし、2Gのテキストファイルって何だろ?
DVD ISOをishかけたのぐらいしか思い浮かばん。
129 :
デフォルトの名無しさん :2007/01/27(土) 21:59:01
1G以上のオンメモリを使用するって、設計が間違ってないか?
Vistaに対抗して無駄にメモリを食うプログラムの設計に勤しむスレはここですか?
DBサーバーは平気で4G位喰う。
ギガ級のデータをStringで行こうってのがそもそも間違いだろ
134 :
デフォルトの名無しさん :2007/01/28(日) 00:37:56
>>133 そりゃそうだが、テキストエディタなんかだと、通常はStringで足りるわけだが、
まれにギガデータをぶち込んじまうやつがいる。
ギガデータが普通なDBとかなら、対応を考えるけど、
通常キロバイト、せいぜい数メガバイト級しか扱わないツールだと、
ギガデータには対応しないっていう実装しても、無理はないと思う。
使用頻度の低い機能や使い方のために、工数かけても無駄だしね。
落ちるのが許されないってんなら、対応するしかないけど。
まともな例外ハンドリングしていれば何の問題もないわけだが
>まともな例外ハンドリング どのイベントでどう実装するもんなんですか?
クレーマーぎみの奴が故意にデカイ情報入れたりするんじゃないかな
自作のアプリにログをとる機能つけたけど、 TMemoにaddしてるだけだから、 可能性としては2G行けるな 1時間で9KBぐらいなんだけど。 (保存はしてない)
TMemo、TStringList、TListBox等にずーっとADDしてみ? 数万行を越えると、目も当てられないくらい、1行の追加時間が遅くなる。 100MB越えるあたりで使い物にならないね。
仮想ツリービューってどうやるんですか?
Virtual TreeViewコンポーネントを直訳するとそうなる
>>139 それ、ログの取り方としては間違ってる。
ログって何かあったときに調べるためのものなのに、
オンメモリで保存しといて、マシンがハングアップしたらどうするつもりだよ。
随時吐き出せ。
もし、そういう状態を考慮しないにしても、2Gいっぱいは使えない。
せいぜい実用になるのは数100メガくらい。
それも、たっぷりメモリーを積んだマシンでだ。
データの状態にもよるけど、管理用のデータ領域が場合によっては
実際のデータに匹敵するくらいのメモリーを消費する場合もあるしね。
みんな64bit版の話してるの?
つまり普通のツリービューでの実現は無理?
で、例外ハンドリングのやり方は?
try finally end;
finallyがハンドリングできない。
try try except end; finally end;
>>150 この書き方たまにやるんだけど、どうなんでしょうか?悪くない?
>151 必要ならいいんじゃない?except...endが空だったりするとダメダメかもしれんが。
この書き方をしないといかん時だってあるさ。 except節で全ての例外を正しく補足・処理できるとは限らんのだから。
finally~endは例外が起きなくても実行される。そればかりかtry~finallyの途中でExitしても実行される。
exceptとfinallyを入れ子にしないといけない(一つのtryで処理できない) のは言語設計の失敗だろって書き込みを前に見たような気がする
一緒に書ける言語のが少数派じゃね?
CreateしたものをfinallyでFreeするようにして なおかつ例外を捕らえたいって時にやるんじゃないの?
try except finally end; っていう書き方ができないって話でそ
みなさん、バージョン情報ってどうしています? プロジェクトオプションの使っています? 自分はソースの最初の方に定数で指定してやるのが好きですけど、 これってマナー悪いですかね。 職業プログラムじゃなくて遊びのプログラムなんですが。
質問です。 TFontの情報をiniファイルに書き出そうと思っているんですけど、 Font.StyleのようにBooleanが複数の項目はどうやって保存してやればいいんでしょう? 項目ひとつひとつ保存ですかね?
>>161 TypInfoをusesしてGetOrdProp関数の戻り値でも使えばいいんじゃまいか・・・
I := GetOrdProp(Font, 'Style');
// Iniへの書き込み
読み出しは逆のSetOrdProp関数でどうぞ。
>>162 の続き
それか、GetPropValueとSetPropValueでもいいかもな。第3引数のPreferStringsを変えれば
値を[fsBold]みたいな感じでもIniファイルに手軽に書き込めるはずだがな・・・
質問させてください、ファイル検索の FindFirst がエラーコードを返した時は FindClose が自動的に呼び出されるので そのあと FindClose を呼び出すと2重になってバグを起こすと聞いたんですが FindNext がエラーコードを返した時も FindClose が自動的に呼び出されるんですか? もしそうなら FindNext でファイル検索して行って、もうこれ以上ない時に FindClose を 呼び出す必要はないんですか?
165 :
デフォルトの名無しさん :2007/01/29(月) 13:47:05
カラーダイアログで選択した色を16進数のカラーコードに直したくて、
下記のソースを見つけました。
http://forum.nifty.com/fdelphi/samples/00039.html procedure TForm1.Button1Click(Sender: TObject);
var
L,R,G,B:String;
IntColor:Integer;
begin
if ColorDialog1.Execute then
begin
IntColor :=ColorToRGB(ColorDialog1.Color);
L:=IntToHex(IntColor,6); //この状態ではBBGGRRになっている
R:=Copy(L,5,2);
G:=Copy(L,3,2);
B:=Copy(L,1,2);
Edit1.Text:=R+G+B;
end;
end;
これを、まっさらなプロジェクトに作ってテストした所、きちんと動くのですが、
今製作中のプロジェクトに入れようとすると、Copyのところで「実パラメータが多すぎます」
と表示されてしまいます。
procedure TForm1.ToolButton18Click(Sender: TObject);
のところに入れたくて、varから以降の部分をコピペしてるだけなんですが、なぜ通らないのでしょう・・・
>>165 その自作プロジェクトのどっかでCopyって関数定義とかしていない??
>>164 VCLのソースを見る限りじゃFindNextに失敗しても
FindCloseは呼び出されない
なので必要ないかと
>>165 どっかでCopyって名前の自作関数定義してない?
System.Copyと関数名にユニット名を付ければOK
168 :
164 :2007/01/29(月) 14:24:55
レスが被ったからって笑うなよ チンコは被ってないぞw
>>166 ,
>>167 的確な即レスありがとうございます!!
Copyって自作関数定義してました;
System.Copyとすることで解決しました。
本当にありがとうございました。
>>136 先生!
して、
try
except
finally
end;
の間にはどう書けばいいんでしょうか?
try try except end finally end;
TBitmapをA4サイズの用紙に綺麗に印刷したいんですが、HeightとWidthの設定はどうすればいいでしょうか?
no no ドラえもん 泣かない 想い出 作ったら?;
思い出したんだけど、便乗して質問していいですか? 用紙サイズ(A4とかA3とか)を指定するとそれに丁度いいビットマップのサイズになるようにできないか悩んだことがあったんですが、 インチあたりのピクセル数がどうとかこうとかで、結局わからないまま技量不足と断念したことがあったんですが、取得できる方法を知ってる人はいませんか?
dpiを求めればいいのかな? GetDeviceCaps辺りで取得できたと思う。
>>175 dpiの基礎から
dpiは1インチ当たりのドット数。
印刷したい物の辺の長さ(インチ)×必要とするdpi=必要とするドット数
1インチ=25..4mm
ちなみにフォントの1ポイント=1/72インチ。
>>173 綺麗にの条件がわからない。
A4 72dpiのやつをA4 300dpiでも綺麗に印刷したいとかいうなら、
むっちゃ難しい技術になる気がする。完成したら金取れるソフトになると思うよ。
delphiのことはよくわかんないから他の人に。
ホントにめんどくさい。メートル法つかえよ欧米人。
178 :
デフォルトの名無しさん :2007/01/29(月) 17:21:40
Delphi習いたての初心者です。Turbo Delphiを使っています。 画像のデータとテキストのデータを一つにしてファイルに保存するってことはできるんでしょうか?
179 :
デフォルトの名無しさん :2007/01/29(月) 17:25:20
>>176-177 レス、ありがとうございます。
>1インチ=25..4mm
こういうのがあって二の足踏んじゃったんですよね。
写真みたいに鮮明に、じゃなくて、文字がブレない程度でよかったんですが、
Metafileっての使ったらどうかと、でもMetaFileの資料が少なくて断念しました。
dpiの話だけど、(delphiの知識じゃなくて余談ですが) Windowsは72dpiで描写している。 しかし、この場合のdpiは正確にはドットパーインチにならない。 なぜかって言うと、画面解像度と画面サイズによって変わるから。 たしか1024*768 CRT17インチぐらいの環境を1インチ72ドットの基準にした(ちょっと記憶が曖昧) 印刷に必要なdpiだけど、カラーの場合300dpi、文字で白黒の場合600dpiぐらい。 まあ、この辺は実際に刷ってみて目で確かめるのがいい。文字はデータがかるけりゃ1200dpiとかいってもいいかも。 最近のカラープリンタはdpiが5760dpiとかバカみたいにあるけど、これに合わせる必要はない。 実際、カラープリンタのdpiはヘッドの数だけ足してあるし。 ちなみに、印刷の現場で主に使われるサイズはカラーが350dpi/モノクロが1200dpiぐらい。 もちろん、印刷物の内容や目的によって変わるけど。 巨大ポスターとかは150dpiとか。 で、初心者が陥りやすい罠として、 画面上で綺麗に見えているんだから、印刷しても綺麗だろうって思いこみ。 前述したとおり、モニターは72dpiで綺麗に印刷したいのなら300dpiは必要。
>>179 文字と画像は綺麗に見える最低限のdpiが違うので、
すでに画像にビットマップとして貼られた文字を綺麗に出すのは難しい。
画像の画素数がむっちゃたかけりゃいいんだけど。
delphiはあんまり詳しくないんだけど、
画像が別にあってdelphiで文字を付け足すのなら、
ポイント数を高めにしてビットマップ化かクイックレポートなんじゃないかな?
182 :
デフォルトの名無しさん :2007/01/29(月) 18:07:17
>>178 TStream系(TMemoryStream、TFileStreamなど)を使って、逐次書き込みかな?
ヘッダーと本体を用意して、書き込み時は、
ヘッダー部には、サイズと保存位置を計算して書く。
本体部は、各ファイルを書く。
読み込み時は、ヘッダー情報を元に、本体部から読み込み
画像印刷のハードルって高いですねorz 初心者はわかり始めるまで、我慢… かな?
Socket通信のアプリを書いているんですけど、 大きなデータをやり取りするのはどうしたらいいのですか? Sendtextで送るとある程度の長さで切れてしまいます。 SendStreamかなって思ったんですけど、送り方と受け取り方が判りません。
>るとある程度の長さで切れてしまいます。 TCPの使用上2回以上に分けて送受信されてるだけ。 全部受信し終えてから次に逝け。
>>160 Application.MessageBox使ってる
オヌヌメ
188 :
デフォルトの名無しさん :2007/01/30(火) 04:32:08
表示の問題と勘違いしてるんじゃないかな・・・
189 :
デフォルトの名無しさん :2007/01/30(火) 21:52:03
加速器(AlquadeLiteみたいな)への 対策はどのようにすればよいのでしょうか? Timerで数秒分現在時刻を取得しておいて計算させれば うまくいくかなぁとか思っているのですが、いまいちよく分かりません。
>>189 むかし、PC98のBASICとかでゲーム作っていた時の記憶だけど、
毎回、計測用ループが1秒間に何回回るかでウェイトの値求めていたけど
そんな感じでどう?
つまり同じ秒数を何個吐くかを計算すればいいのですか? Timerのwait値を1にする 1000個Timeが取得できる それが一秒ずれでかつ足して1000個になれば良い つまり 2007/01/30 22:15:44が466個で2007/01/30 22:15:45が534個なら良い これでいいのでしょうか?とてもいけそうな気がしてきました
>>192 ちょっと違う。
気をつけて欲しいのはこの辺の設計思想はCUIのマルチタスクの時代の物だから、かなり古くさい。
実際BASICでやっていたのは、temptime:=now if now<>now then temptime:=now ループ inc(i) if now<>now then wait:=inc
てな感じの。
まあ、1秒だと長いので、
Intervalを100ぐらいにして、
適当なループを作り、1回目のtimerイベントと2回目の間に何回ループが回るか計測して、
その数からwaitの値を求める。
で、メイン実行部分はタイマーイベントを使わずに、事実上の無限ループにして、
先に求めた値のウェイトを入れる。
自分で書いてて、問題が山積みな方法だとは思うけど。
194 :
デフォルトの名無しさん :2007/01/30(火) 23:46:25
TEXTfileを読み込み、 N行目が1だったら ウインドウの(N*100,100)の座標に 1辺10の正方形を表示、 N行目が2だったら ウインドウの(N*100,200)の座標に 1辺10の正方形を表示するという プログラムの作り方がよく分かりません。 教えていただけないでしょうか?
何がわからないんだよ もしかして全部か?なら氏ね
197 :
デフォルトの名無しさん :2007/01/31(水) 00:17:56
>>194 宿題かな!頑張れ~。
ヒントだすから、googleでサンプル検索したり、ヘルプ見たりして頑張れ
・TStringList
・TImage.Canvas.Rectangle
>>192 では無いのですが、逆に加速器の仕組みってどうなってるんでしょうか?
それがわかれば理解したうえでの対策法が練れると思うんですが
ファイルからテキストを Read したときに、文字型を数値型の時みたいに 1行をタブ区切り単位で Read 出来ませんか?
すみません質問させて下さい。
Delphi6でTServerSocketを使い多接続可能なサーバープログラムを作っているのですが
何度か接続を繰り返すとサーバーが応答しない状態になってしまい困ってます。
既に接続してるクライアントとの通信は問題なく行えるのですが
新しい接続要求が送られてこない?状態です。
一体何が問題なのでしょうか・・・宜しくお願いします。
ブラウザなどで、
http://localhost:6900 に接続を繰り返すと問題が発生します
TMyServerThread = class(TServerClientThread) public procedure Execute; override; end; procedure TForm1.FormCreate(Sender: TObject); begin ServerSocket1.Active := False; ServerSocket1.ServerType := stThreadBlocking; ServerSocket1.Port := 6900; ServerSocket1.Active := True; end; procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject; Socket: TCustomWinSocket); begin Memo1.Lines.Add('ClientDisconnect'); end; procedure TForm1.ServerSocket1GetThread(Sender: TObject; ClientSocket: TServerClientWinSocket; var SocketThread: TServerClientThread); begin Memo1.Lines.Add('GetThread'); SocketThread := TMyServerThread.Create(false, ClientSocket); end; { TMyServerThread } procedure TMyServerThread.Execute; begin ClientSocket.Close; end;
>>198 想像だけど、windowsではVSYNC割り込みが無いので
インターバルタイマーを使ってるものが多いのだろう
WM_TIMER メッセージを監視して、このメッセージを増やしたり減らしたりしてるのでは?
>>199 TStringList
を調べてみて。
自分はこれを知らずに、ループで文字列をチェックして分解するサブルーチン作って、今も現役。
Delphi5です。ソースの書き方について質問させてください。 関数AはプロシージャB,Cを呼び出す。これを実現するにはプロシージャB,Cを 先に記述してから、その下に関数Aを書くと教わりました。 C言語のプロトタイプ宣言(?)のような書き方はDelphi5にはないので しょうか?
>>205 あるよ
Interface節に書けばいい
function hoge(a:integer):integer;
とかなんとか
>>206 希望通りにいきました!ありがとうございます。(m_ _)m
>>193 お礼が遅くなりました。
試してみます。ありがとうございました
209 :
199 :2007/01/31(水) 15:15:25
>>204 そんな方法があったなんて、ありがとうございましたw
210 :
デフォルトの名無しさん :2007/01/31(水) 15:44:47
ところで、加速器って何?
FPSをいじるツール
FPSだけではないな 色んな形態あるんだろうけど 一般的に加速器といったらゲームを改造するツール 具体的には 「動く」とか「攻撃する」といったアクションを連続で実行するときの 次までの待機時間を任意に短くし 通常の○倍の効率を確保するためのプログラム
そういう事するのって、APIフックとかインジェクションとか必要なのかな?
214 :
デフォルトの名無しさん :2007/01/31(水) 22:47:01
Delphi7のADOConnectionで、MSSQLServer2005 Express Editionと接続できますか?
215 :
デフォルトの名無しさん :2007/01/31(水) 23:01:37
時間関係の関数、コールバックをごまかすのにフックは必要 インジェクションは知らない。 フックが掛けられたかを監視すれば良いんじゃないかな? ネトゲだとサーバーにクライアントの経過時間を送りチェックしたり モニターの垂直同期とクライアント経過時間をチェックをしてるのもある。
>206 それはちょっとナニだな。ユニット外から呼び出す必要がないならimplementation部でforward宣言すべし。 Cのプロトタイプ宣言に(概ね)相当する。 function FuncA(Value: Integer): Integer; forward; こういうやつをimplementationからFuncAの呼び出しをする関数の直前まで(フツーはimplementationの 後ろあたり)に書いておく。
218 :
デフォルトの名無しさん :2007/02/01(木) 01:09:29
来週からインターンでDelphiを使って プログラミングをすることになりました。 恥ずかしながらプログラミングが何のことだかさえわからない状態です。 どうしてもインターン始まる前に慣れておきたいです。 インターンにおいてDelphiを使ってどんな課題が出されるのかわかりませんが、 現時点で私ができることがあったら教えてください。 お願いします。
スラムダンクでも全巻読んどけ
>>218 Delphi6でもダウンロードして”HALLO WORLD”からじゃね?
221 :
デフォルトの名無しさん :2007/02/01(木) 01:44:39
>>220 ありがとうございます。
プログラム言語などは参考本などを見ながら
勉強するべきですか??
才能がすべてです。
>>220 英字が全て大文字っていうのが気持ち悪くなるぐらい英語を勉強するべきじゃないかな・∀・)"
225 :
203 :2007/02/01(木) 04:17:39
ところで、Application.MessageBoxを使っていると思われるメッセージボックスでTMsgDlgTypeのアイコン(!、×、i、?)が表示されてるのを見かけるんだけど、どうすればああなるの?orz
それぞれ関数があったはず
MB_ICONWARNING MB_ICONASTERISK MB_ICONQUESTION MB_ICONERROR
230 :
デフォルトの名無しさん :2007/02/01(木) 12:29:03
>>229 ありがとうございます。
とりあえず「Delphi入門教室」から勉強していきます
231 :
デフォルトの名無しさん :2007/02/01(木) 21:15:25
今日、Delphi 6 personalをinstallしたのですが、使用許諾コード取得が できません。サーバーに接続しています。少々お待ちください。がでて、 しばらく待たせた後、サーバーが見つからないとエラーがでます。取得しないでも動くようですが、 使用許諾コードなしでも問題ないのですか?
フォームが最小化されたことを通知するイベントってありませんか? Resize・ConstrainedResize・CanResizeでは最小化したときにイベントが発生しなかったし、 WM_SIZEのメッセージハンドラを作っても最小化時にメッセージが飛んでこない・・・ 環境はDelphi5 + WinXP Proです
あるよ
ありがとう
>>234 TWMSysCommand CmdType SC_MINIMIZE
>>232 Fuckだと。こんちきしょう。fuck u!!
239 :
デフォルトの名無しさん :2007/02/02(金) 06:05:16
> 232,233 RESありがとうございます。が、Registraion Codeが分からないので 送られてきたメールにあったResgstration accountを入力して次の stepに移りBDN accountありで送信したら画面が白くなったまま、一晩待って 見ましたが今も白いままでした。そこでBDN accountなしでいろいろ入力しても 送信すると白くなってずーとそのままです。Regsitration codeにRegistratin acountを入力したのがいけなかったのでしょうか?
本気で取り組む気があったら購入すべきだよ
D7でクイックレポートで印刷ボタンを押したらダイアログを出してページ数とか指定してから印刷させたいんですが どうしたらいいでしょうが。 デフォルトだといきなり全ページ印刷してしまってうっかり大量印刷の危険があるのでなんとかしたいです。
243 :
デフォルトの名無しさん :2007/02/02(金) 23:57:19
Delphi6ProにDirectXのコンポーネント「Quadruple D」インストールしたら Delphi終了時にエラーが出るようになったけど、みんなそう? 他にもコンポーネント入れてるから相性とかあるのかな?
Quadruple Dとは全然関係なく、Delphi自体不安定。
FastMM でも使ってみたら、どうよ。
246 :
デフォルトの名無しさん :2007/02/03(土) 05:01:11
>>243 Delphi6では、ならないよ。
BDS2006だと、Quadruple Dなんか入れなくても、終了時にエラーが出るようになるから、
気にならない。
ListView なんですけど、行数を沢山読み込むとフリーズしてしまうんです。 やっぱり表示が可能な行数はマシンのスペックに依存しますか? 列ごとに文字数を何バイトまでと制限を付けたら、沢山の行数を表示することが可能になる っていう機能とかありますか?
君の書いた出来の悪いコードを晒しなさい。 優しいおにいさんが超高速にしてくれるでしょう。
>>247 沢山じゃなくて、もうちょっと具体的に数値挙げたほうがいいよ
とりあえず、更新前にVisibleをFALSEにして更新後にTRUEにするとかやってみ
>>248 >>249 こんな感じです、これで1000行位読もうとしてるんです。
スピードは遅くて良いんですけど、沢山の行数を読みたいんです。
カラム0 カラム1 カラム2 カラム3 カラム4
2バイト 約130バイト 約60バイト 約20バイト 約15バイト
ver
STRING1,STRING2,STRING3: String;
ListItem: TListItem;
procedure TForm1.Button1Click(Sender: TObject); {OK}
begin
AssignFile(F,'FILE.TXT'); Reset(F);
while not eof(F) do begin
readln(F,STRING1); readln(F,STRING2);
readln(F,STRING3); readln(F,STRING4);
readln(F,STRING5);
ListItem:=ListView1.Items.Add;
with ListItem do begin
ListItem.Caption:=STRING1;
ListItem.SubItems.Add(STRING2); ListItem.SubItems.Add(STRING3);
ListItem.SubItems.Add(STRING4); ListItem.SubItems.Add(STRING5);
end
end;
closefile(F)
end;
せめてbeginupdateくらい使おう。
252 :
247 :2007/02/03(土) 16:20:16
すいません、ここ間違ってました ver STRING1,STRING2,STRING3,STRING4,STRING5: String; ListItem: TListItem; F: TextFile;
たしか1項目追加するたびにソートが走ってた気がするから ソートするなら初めSortTypeをstNoneにしておいて 全件読み終わってからstNone以外にしてソート。 僕はこれで少し早くなりました。
ListView1.Items.BeginUpdate; ~~ ~~ ListView1.Items.EndUpdate;
1000件程度ならBeginUpdate/EndUpdateでいいけど、 10000件とかならVirtualListViewで。OwnerDataプロパティと OnDataイベントを参照。Delphi付属のデモにもあったっけかな。
256 :
247 :2007/02/03(土) 17:33:08
>>251 >>253 >>254 出来ました、読み込み時にスクロールバーがギュイーンと小さくなっていくのが無くなって
読み終わってからパッと表示されて快適になりました。
いまでは2000行以上読んでいます。
皆さん本当にありがとうございましたw
>>255 それ今度、勉強してみますw
>読み込み時にスクロールバーがギュイーンと小さくなっていく あるあるww
258 :
デフォルトの名無しさん :2007/02/04(日) 08:48:20
すごく初級な質問なのですが TStringGridで反転選択されいるセル範囲はどうやって取得するのでしょうか?
259 :
デフォルトの名無しさん :2007/02/04(日) 08:51:58
すみませんageてしまいましたorz
260 :
258 :2007/02/04(日) 10:02:06
解決しました Selectionですね。 お騒がせしました。
261 :
デフォルト名無し :2007/02/04(日) 12:06:00
TurboDelphiで、データベース関連のプログラムを作りたいのですが、 いいサイトが見つかりません。どこかいいサイトがあれば教えていただきたいです。 よろしくお願いします。
>>261 なんのデータベースを使うかによるかも
その気になれば、TStringListでも組める
TEditまたはそれに類する物で数値が入力されたときに右寄せ、カンマ区切りで表示したいんですが どうすればいいでしょうか。 いくつかフリーのコンポーネントを使ってみたのですがソースが提供されないとかコードで代入すると カンマ区切りにならないとかでちゃんとした物がみつかりませんでした。
>>263 カンマ区切りで右寄せって、ハウスルールが濃そうな世界。
3桁どりを前提とするかで話が変わる気がするし。
自作推奨。
>263 コードで代入するときだけ自前でカンマ区切りにすれば?ちゃんとしたものと あなたが欲しいものはイコールではないのでしょう、きっと。
TPaintBoxで、描画した物をクリアする方法はあるのでしょうか? また、TPaintBox内のスケールを変更するようなメソッドかプロパティはありますでしょうか? (VBのPictureBoxで言う所の.Scaleメソッド)
クリアはない。親コントロールの色でFillRectするんだな。
269 :
267 :2007/02/05(月) 14:39:29
>>268 ありがとうございます。
それでやってみます。
TPaintBoxはデバイスコンテキスト用意するけど 後は勝手にどうぞってスタンス
271 :
267 :2007/02/05(月) 15:06:36
デバイスコンテキスト? 検索してみたら、描画に関するページに辿り着けましたが 「論理単位」とやらを変更すれば良いのでしょうか?
いや、だからTPaintBoxにクリアするメソッドは無い デバイスコンテキストは簡単言えば描画エリアって意味 線とか画像を描く場所は提供するけど他は全部自分でやってねってこと 描画もクリアも保存も何もかも
273 :
267 :2007/02/05(月) 15:14:22
>>272 いや、クリアに関してはFillRectを使用してみます。
問題はスケールの方。
274 :
263 :2007/02/05(月) 17:43:33
>>264 自作しようと思ったのですがコンポーネント作る技能がないもので今調べてる最中です。
何かヒントを得られればと思い質問したしだいです。
>>265 > コードで代入するときだけ自前でカンマ区切りにすれば?ちゃんとしたものと
> あなたが欲しいものはイコールではないのでしょう、きっと。
カンマがTEXTに含まれてしまっては困るので表示だけカンマ区切りにする方法が
わかりませんでした。
ご存知でしたら教えてください。
>>266 ありがとうございます。
ですが、エラーが出て解凍できませんでした。
幾つかのソフトで試したのですがすべて未サポートのメソッドエラーでした。
>>274 あなたが望んだ回答じゃないと思いますが
>カンマがTEXTに含まれてしまっては困るので表示だけカンマ区切りにする方法が
カンマを削るサブルーチンを作る
カンマ入力を簡略しつつ3桁づつ区切りたいなら
TEditを沢山置いて、3桁ごとにフォーカスを飛ばしてやるのは?
コンポーネント作成orカスタムコンポーネント使用ってのは、
効率化にはなるんだけど、
仕様変更やバグが出た時に致命傷になる。
技術的にムリとか枯れたルーチンを使うとか以外は
サブルーチンでやってしまった方がやりやすい
オブジェクト指向に逆行しているけど。
オブジェクト指向のためにプログラミングしてるわけじゃないだろ。
>>267 きみは TPaintBox を全くわかってない。
TImage でもつかったらいいよ。
知ってたら聞かんわな
>いや、クリアに関してはFillRectを使用してみます。 これは TPaintBox の描画の仕組みが分かってないことを示してる。 メッセージベースの再描画の仕組みを全く知らないらしい。 >問題はスケールの方。 全部自分でやるんだよ。TPaintBox とはそういうもの。 オフスクリーンのTBitmap に描画しておいて、自分で比率を計算して縮小拡大して 表示する。または表示用のTBitmapに転写する。それから再描画する。
TImage なら自動でやる。もとVB厨ならこっち使え。
Delphi6Personalを使用してます 通常、varで宣言しながら使われない変数があればコンパイル時に警告が出てきますが 出てこない場合があります(出るコードと出ないコードは異なる) どうすると出なくなってしまうんでしょうか
> どうすると出なくなってしまうんでしょうか 再構築しない場合は、全ユニットをコンパイルする訳ではないので 出ない場合があるのではないかと。
>274 逆に考えるんだ。Textにはカンマを含み、そこに文字列を入れるときにはカンマを付加し、 文字列を取り出したらカンマを削除するんだ。
>>282 単一ユニットのプログラムでも発生するので・・・
ユニット内の関数Aでは警告が出て、関数Bでは出ないとかそんな感じです
理由はいろいろとありすぎて、再現手順をきちんと書かないと答えようがないと思うけど。
亀田が、>266のコードは一応コンパイル通るぞ 拡張子をtxtからpasに変える必要があるようだが。 ちなみにD6Pro
>>286 うちだと書庫が壊れていて解凍すらできないな
Accessのmdbファイルを開いて、TADOTableにテーブル及びクエリを読み込んでいます。 そこで、開いているテーブルが、テーブルなのかクエリなのか判別することは可能でしょうか。 また、クエリの場合、クエリのSQL文を取得することは可能でしょうか。
>>275 >コンポーネント作成orカスタムコンポーネント使用ってのは、
>効率化にはなるんだけど、
>仕様変更やバグが出た時に致命傷になる。
これは、他人の作成したソースの無いコンポーネントについてはそうかもしれないが
自作コンポーネントや、ソースがあるなら自分で対処出来るから、あたらないよ
何か問題がある都度、イベントを追加するなりして対処すればいいんだからさ。
あるいは、インターフェースを同じにして、中身だけ入替えればいいんだからさ
今回の場合だって、コンポーネント自作なら
1個のTEditからテキストへの読み書き+クリップボードコピー時の挙動に介入するコードで対処してもいいし
TEditを動的に作成してしまう作戦に出てもいい。
それを後から変更しても、インターフェースさえ同じならアプリのほかの部分は変更しなくていい。
だけど実際にTEdit並べる方法で作ってしまったら、最初はサブルーチンにまとまっていても、
改変してる間に、アプリ全体にその為のコードがちらばってしまうもの。 そうなってしまうと
誰も手を出せないスパゲッティアプリの出来上がりだ
291 :
267 :2007/02/06(火) 19:46:19
>>277-280 回答ありがとうございます。
TPainBox/TBitmap/TImageをもう少し勉強してみます。
まったく空想に近いくらいのことを言ってるのかもしれないですけど、 配置したコンポーネントをそのまま(プロパティやらItemsも)ファイルに保存、読み込みする荒業ってありますか?
>>292 TStream.ReadComponent/WriteComponent
RegisterClass
辺りを駆使すれば出来ると思う。
ただこれだとpublishedのプロパティしか読み書きできなかったような。
>>293 レスありがとうございます。
StringListに「Top=120・・」とかいうようにしてテキストベースで保存することは思いついたんですが(素人ぽい方法?)
TStream.ReadComponent/WriteComponentはちょっとわからんですね(汗
急ぐことではないので、じっくり考えたいと思います。
どうもありがとう。
ふつうは ini ファイルに保存するんでは
>>295 うわっ、すごい簡単にやってますね!
でもItemsは保存できないみたいですね…
ありがとうございます。
>>296 そうですね。
298 :
297 :2007/02/07(水) 03:19:18
自己レスですが今実験したところ、Linesが読み込まれたみたいなのでItemsも保存できそうです。
なにげにすごいものを見つけたと思いました。
>>295 さんありがとう。
Cでいうところの__FILE__や__LINE__マクロのような機能はDelphiでは使えませんか?
>>299 相当する機能はない。
IDEを使っている限りはコンパイルエラーも
実行中の例外もその場所を表示してくれるので必要性は特にない
iTunesの曲名を取得するプログラムを作っているんですが、 temp=temp+曲名 って感じに文字列を連結していった場合、どうやら不正な文字コードが混じっていた場合、tempがそこで途切れてしまいます。 この不正な文字を無視して文字列を連結するにはどうしたらいいでしょうか?
不正な文字コードを取り除く
303 :
301 :2007/02/07(水) 15:47:24
>>302 なにが不正な文字コードかもわかっていませんorz
どうもタグの変換時にiTunes側が勝手に入力した文字みたいで、選択もできません。
2バイト文字の1文字目かな?とも思いますけどよく分かっていません(汗
TStringListにaddすると完走するんですけど、TStringlist.Textを読み出すと途切れてしまいます。
TStringList.Textはリスト内の個々の文字列を キャッリジリターン、ラインフィールドで連結したもの それらが悪さしてるじゃないかな
よくわからんが、文字列は切れてはいないと思う、どうやって確認したのかしらんが 切れて表示されてるだけなので安心しろ。 というか、デバッグで確認しろよ。
306 :
デフォルトの名無しさん :2007/02/07(水) 16:15:49
なにが悪さをしているのか判らなければ話にならないと思うよ。 思い込みでプログラムするより、原因調査が第一だと思う。 文字列から一文字づつ追加→出力チェック→OKなら次の一文字追加→... して何が悪さをしているのか調査したほうがいいのでは?
>>301 文字列を連結させてる部分のコードを晒しなさい。
優しいおほもだちが直してくれますよ。
コードを晒せば直していただけるんですね
tryexcept使えよ
310 :
301 :2007/02/07(水) 18:26:11
レスありがとうございます。
自分でチェックしてみてわかったこと
・iTunes上では「ロ」と表示
・delphiのStringに代入すると「・」(WideStringでも一緒)
・iTunesのライブラリをテキストエディタで開き、問題の文字をコピー→文字コードの確認をすると32で普通の半角スペース。(テキストエディタが自動変換している?)
問題の箇所のソースは
for i:=1 to iTunesApp.CurrentPlaylist.Tracks.Count do
begin
Application.ProcessMessages;
if i=1 then
strTempSend:=',"'+iTunesApp.CurrentPlaylist.Tracks.Item[i].Name
else
strTempSend:=strTempSend+'","'+iTunesApp.CurrentPlaylist.Tracks.Item[i].Name+'()';
end;
LogSet('MusicListData'+strTempSend+'"');
end;
LogSetは自作関数でTMemoにaddしているだけです。
strTempSendはWideStringです。
>>309 例外が出ないんですよ
上でも言ってるけど2バイト文字の2バイトの内の1バイトっぽいね
てゆうかヌルポ
んじゃガッ
ヌルポって言ってるけど、ニルポが正解じゃないの?
>>314 PascalでのnilはCとかだとnullって表記するんだよ
つかさ、iTunesAppのことよくしらんけど、COMオブジェクトかなんかだと思うから、 文字列はUnicodeベースのWideString型だろ。で、Delphi付属のTMemoはAnsiStringで。 よって、WideString型をTMemoに追加すると自動でUnicode->CP932への変換が起こる( WideCharToMultiByte) >iTunesのライブラリをテキストエディタで開き、問題の文字をコピー→文字コードの確認をすると32で普通の半角スペース。(テキストエディタが自動変換している?) つか、自分で治す気ねぇだろ。なんだよ。「テキストエディタで開き」って・・・ for i := 1 to Length(strTempSend) do ShowMessage(Format('%.4X', [Ord(strTempSend[I])])) とかで確認してくれよ・・・。 >>例外が出ないんですよ 無効な文字が含まれてるからって例外はでない。
>>315 だがC言語ではなくPascalなのだ. よって説明になっていない.
Delphi言語はPascalじゃないよ。よって反論になっていない
Delphi6とActiveBasicってどっちが分かりやすい?
321 :
デフォルトの名無しさん :2007/02/08(木) 12:39:55
>>320 前提条件は?
・プログラム初心者
・C言語とか、他の言語はやったことある
・言語の一般論の話
おれは、ActiveBasicやったことないから答えられないけど
コンボボックスをクリックしたときに出るリストを出ないようにしたいのですが Enabled:=false にするとコンボボックスの色が変わってしまい OnMouseDownイベントなども発生しなくなってしまいます。 何か良い方法はありませんでしょうか。
動的配列でsetlengthを使って確保された領域は静的配列のように 連続したメモリ空間に確保されるんでしょうか?
>>322 リストの出ないTComboBoxなんてTEditで置きかえれるだろ
>>323 1次元動的配列なら連続した領域に置かれるけど
多次元動的配列の場合はそうとは限らない
他の言語で作ったDLLに多次元動的配列のポインタを渡す場合なんかは注意
超初心者にも分かりやすい解説サイトってありまつか
329 :
デフォルトの名無しさん :2007/02/08(木) 13:51:10
質問です。 恐ろしく初歩的なことのようで申し訳ないのですが・・。 テキストデータを読み込んだStringGridがあるんですけど、 テキストの行数が1000くらいあるのでスクロールバーが表示されます。 その最後の行が初期状態で見えるようにしたいのですが、 表示位置を先頭行から終端の行に移動させるにはどうすればよいのでしょうか? StringGrid1.Col:= x; StringGrid1.Row:= y; だとカーソルは移動するのですが、 画面の表示位置が変わらなくて困っています。
>>328 まあ多次元動的配列は 動的配列の動的配列だからね
type TAAinteger =array of array of integer;
var a:TAAinteger;
SetLength(a,10,20); のようにすると
要素20の動的配列が10個分確保される
でa[0] はポインタだから a[1] とは4バイト分離れているだけ
>>329 LeftCol / TopRow
>>329 TStrinGrid.TopRowプロパティを使うんだ
StringGrid1.TopRow := 1000
とかってやると1000行目の行が一番上に表示されるようにスクロールされる
下記のようにユーザー名を取得して、表示しようとするとs以降の文字が表示されません。 表示させるにはどうすればいいのでしょうか。 var s: string; nSize: DWORD; begin //ユーザー名取得 s := StringOfChar(#0,100); nSize := 100; GetUserName(PChar(s),nSize); SetLength(s,nSize); ShowMessage(s + 'abc'); end;
>>332 表示されないのは、 sの文字列最後に #0 が入っている為
これを削除する一番簡単な方法は
s:=PChar(s);
これを SowMessageの前に入れればいい
こんな感じ sのサイズがユーザー名分しか確保されてないかので abc'の3バイトを足して確保 ヌル文字列の連結なのでStrCat var s, s2: string; nSize: DWORD; begin //ユーザー名取得 s := StringOfChar(#0,100); nSize := 100; GetUserName(PChar(s),nSize); SetLength(s, nSize + Length('abc')); ShowMessage(StrCat(PChar(s), 'abc')); end;
>>333 アンタ
>>330 か?
いっつも俺の一歩先を行くw
それはそうとそんな方法あるの知らなかった
>>327 >>330 ありがとう
やりたい事は1次元静的配列の1次元動的配列なんだけど
type TArrayByte =array [0..19]of Byte;
var a: Array of TArrayByte;;
var Count: Integer;
Count := 10;
SetLength(a, Count);
このようにすると20バイトの領域が連続して10個並ぶ筈だよね?
で、↓の様な手続きに丸ごと渡したいので
procedure FuncTest(const Buf; Size: Integer):
FuncTest(a, Count * SizeOf(TByteArray));
として一応正常に動いてるんだけど、たまにエラーが出てたので
質問させて貰いました。
337 :
332 :2007/02/08(木) 14:54:28
WritelnやReadlnのソースを見たいのだけれど、System.pasのどこにあるのでしょ。 > function _WriteLn(var t: TTextRec): Pointer; というものがあったんですが、 ヘルプに書かれているWritelnの宣言とは、名前も引数も違うし、procedureのハズなので違いますよね。
>>336 構造体の場合packed を使ってないとワード境界にゴミを入れられる場合があるのと
そのコードそのままだとすれば、TByteArray はSysUtilsで定義済みの
TByteArray = array[0..32767] of Byte
になっちゃうから、そもそも正しくないよ
Writeln、ReadlnそれにCopyと いった低レベルな関数のソースは公開してない それらはコンパイルの時に暗黙の内にリンクされる
>>338 Write系のコードは、systemにある その_WriteXXXX 系の関数にコンパイラが展開するんだよ
複数の引数がそれぞれの型に応じた関数に置き換わって
_WriteLn は、作成する文字列の最後に CR/LFを追加するだけ
実際の出力はその後にコンパイラで procedure __IOTest; が呼ばれるように追加されて、そっちで出力される
クラスの後ろにある= 4;とか= $10;って何
Write[ln] だと、 Writeln(5:3); みたいな記述が出来るけど、これはWriteにだけ使える記述? 他の関数や自分で作った関数には使えないようなので。
>>339 あ、TByteArrayは書き間違い。
SysUtilsで定義済みなのは知っていたので敢えてTArrayByteとしてみた
つもりが間違ってたみたい。
あと型名とかは適当です。
>>343 そう。 pascalからの盲腸みたいなもん・・・まあCスタイルのformat系が便利だよね
>>345 とりあえず、メンバーがバイト要素だけなら今の実装では勝手にゴミが入れられる事はないけど
後の為に packed は追加しておこう。
もっとも、そもそも そういうメモリ操作を伴うようなコードは推薦されなくなってるからなあ・・・
349 :
301 :2007/02/08(木) 15:54:26
>>317 そのソースをちょっと意地ってようやくチェックすることができました。
ちょっとテンパって(仕事じゃないのに)視野が狭かったようです。
問題の文字は0000でした。
これがヌルポってやつですかね?
初遭遇です。
iTunes設計がクソだorz
#0 は ヌルターミネータ・・・・で ヌルポインタとは違うよ。
>>348 var a: Array of TArrayByte;
を
var a: packed Array of TArrayByte;;
としてみたけど変わらないみたい。
取りあえず、もちっとシンプルなデータ用意して検証してみます。
>>351 じゃあ関数に渡す前に簡単なチェックルーチンを作って確認したら?
for i:=1 to High(a) do
if ( integer(@a[i] )-integer(@a[i-1] ) )<> SizeOf(TByteArray) then raise Exception.Create('あ! 連続してないぞ!');
FuncTest(a, Count * SizeOf(TByteArray));
353 :
329 :2007/02/08(木) 16:30:04
お願いがあります!!簡単なプログラミングをつくってください。 【問1】2~任意の数までの間に現れる素数を求めて表示するプログラム。 【問2】I=1/12×b×h^3 任意の数値hとbを入力して答えを出力するプログラム 【問3】2行×2列の行列同士の積を求めるプログラム 【問4】5行×5列の行列同士の積を求めるプログラム。計算結果をファイルに書き出せる様にする。 神様お願いします!!
355 :
デフォルトの名無しさん :2007/02/08(木) 17:08:56
できたよ 17:15 開会式 17:30 気合をこめる 18:00 問題を眺める 18:30 解決の糸口をつかむ 19:00 夕飯を食べる 19:30 問題を解き始める 23:00 全問解き終える 23:10 閉会式 23:15 送辞 23:20 答辞 23:25 自由時間
>>355 せっかく作っていただいて悪いのですがそれじゃあないんです。。。。
すっげーワラタw
>>352 態々コード書いてくれてありがと。
試してみたけど、やっぱりポインタは連続してるみたい。
う~んなにが悪いんだろ。。。
高校の宿題かな?
>>354 1番だけ
procedure prog1(n:Integer);
var b:TBits;
var i,j:Integer;
begin
b:=TBits.Create;
try
b.Size:=n;
AllocConsole;
for i:=2 to b.Size-1 do
if not b.Bits[i] then begin
for j:= 2 to (n div i) do b.Bits[i*j]:=true;
writeln(i);
end;
finally b.Free end;
end;
>>358 君がやりたいのは静的配列の動的配列。
で、
>>330 がいってるのは、動的配列の動的配列。OK?
つか、何を試してるんだ??レコード型の使ってるの?
つまり、レコード型の静的配列の動的配列?
問1以外は情報少なすぎて無理じゃない?
365 :
363 :2007/02/08(木) 18:24:24
良く見たら ベキ演算子も処理してくれるみたいだから I:='1/12*'+b+'*'+h+'*'+h+'*'+h; ↓ I:='1/12*'+b+'*('+h+'^3)'; とした方がいいかもな
>>361 あ、いちお配列のメモリ割り当ては分かったんで、解決ってことで。
あとは、データそのものに問題あるかFuncTest(実装不明)に問題あるかなので
いろいろデータをいれて試してみるしかないです。
みんなありがとでした。
>>354 です
みなさんありがとうございます!!参考になりました!!
あとはなんとか自己解決できそうです!本当にありがとうございました!
try except hogehoge; end; この場合、hogehogeで例外が出たら無限ループですか?
>>368 いいえ、
try~ except までの分を exceptでキャッチするのであって
hogehogeはtry の中で書かれていないので その外に例外を出す事になりますよ
>>369 レスありがとうございます。
try
except
try
except
hogehoge;
end;
end;
こうやって書いたところでどうも無限ループにはまったぽいんですが再現できなくて悩んでいます。
別の不具合でループしたかな…
別の不具合に1票
例外の中で例外出してループってすげぇ器用だなw
例外をキャッチしたハンドリング中で例外をさらになんてのは、あんまり見た事がないな 一体何がしたいんだろ? あと、どうしてもネストする時は関数内関数とかでスタックフレームを別けた方がいいんじゃないの?
Except内でTryするのは普通な気がするがなあ。 例外が発生した場合、念のため実行したいメソッドがあるけど、 それもエラーを出す事がありうるなんて事は、ちょくちょくある。
375 :
デフォルトの名無しさん :2007/02/08(木) 23:24:19
あの・・・まさか・・・とは思うんですが・・・・ 無料のターボデルファイはひょっとすると パラドックス付いてません? データベースデスクトップ探しているのですが見つかりません ま・・・まさか買えという意味じゃないですよね・・・ひいいい;;
>>320 Delphi
ActiveBasicはバージョンが0.01上がると言語仕様が派手に変わることがある。
趣味で作っているものだし、しょうがないんだけどね。
377 :
デフォルトの名無しさん :2007/02/08(木) 23:38:11
がっかりんこ
文字(TLabel or TStaticText)を透過させたいんですけど… 背景画像の上にあっても、.Colorが上書きされないようにってこと
>>378 TCustomLabel.TransparentプロパティをTrueにするとか。
アプリケーション上から、独自の拡張子のデータを自身のアプリケーションに関連づけたいのですが、 どのようにしたら実現可能でしょうか。
レコード型をプロパティにした時の挙動についてなんですが TCharacter = class private FCurrentPos: TPoint; public property CurrentPos: TPoint read FCurrentPos write FCurrentPos; end; 例えば上記のようなクラスを作ってCurrentPosの座標を書き換えたいとき procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (key=VK_UP) then FCharacter.CurrentPos.Y := FCharacter.CurrentPos.Y - 16; end; この様に書くと「代入できない左辺値です」とコンパイルエラーが出ます。 これはプロパティが読み出し専用で呼び出されているからなんでしょうか? CurentPosがポインタではないから? PPointを使って動的に領域確保すれば上記の様な書き方でも問題ないんでしょうか? x,yを個別にフィールド或いはプロパティにすれば済む問題なんですが、なんか腑に落ちなくて。。。
プロパティの場合、 FCharacter.CurrentPos := aPoint; こういう記述は、write の記述に従って、例えば write setCurrentPos となっていた場合、 setCurrentPos(aPoint); のように呼び出される作りになっている。 なので、プロパティの子プロパティに対して直接代入することはできない。 但し、ポインタ参照やクラスにすれば、子プロパティにもアクセスできるようになる。 ただ、この例の場合、read も write も FCurrentPos を直接参照しているのだから、 わざわざプロパティにしないで、 CurrentPos:TPoint; と宣言すれば済む話ではないかな。
384 :
381 :2007/02/09(金) 06:38:59
>>382 ありがとうございます。
> プロパティの場合、
> FCharacter.CurrentPos := aPoint;
> こういう記述は、write の記述に従って、例えば write setCurrentPos となっていた場合、
> setCurrentPos(aPoint);
> のように呼び出される作りになっている。
はい、一応それは分かっているのですが、例えば
property read GetCurrentPos write SetCurrentPos;
となっていた場合
FCharacter.CurrentPos.X とした時は GetCurrentPos が呼び出される分けですよね?
なので
property read FCurrentPos write SetCurrentPos;
とすると、FCurrentPos の領域全体が読み込み専用にロック?される故に子プロパティにも代入はできないと。
でも、ポインタ(クラス)だとロックされるのはポインタの4バイトのみなので子プロパティ(実際の領域)は
ロックされてないから代入できるって事でいいんですよね?
> ただ、この例の場合、read も write も FCurrentPos を直接参照しているのだから、
> わざわざプロパティにしないで、 CurrentPos:TPoint; と宣言すれば済む話ではないかな。
アクセサメソッドは面倒だったので省略して書いたんですが、確かに、public CurrentPos:TPoint; とすれば済むんですよね。。。
>>384 > property read GetCurrentPos write SetCurrentPos;
> となっていた場合
> FCharacter.CurrentPos.X とした時は GetCurrentPos が呼び出される分けですよね?
そう。つまり、プロパティを読み出した場合、そのプロパティは変数じゃなくて関数の返値なので、代入できない。
CurrentPos.x は、
GetCurrentPos.x であり、それに代入することはできないということ。
SetLengthの引数や、Lengthの戻り値はIntegerですが、負数はありえないと思います。 Cだとstrlenの戻り値はsize_tですし… Cardinalじゃない理由は何ですか?
>>386 >Cardinalじゃない理由は何ですか?
文字列型の最大長はIntegerで扱えるから
ちなみにCには文字の配列はあっても文字列型は無い
>>386 Cardinalにすると、Integerな数と演算させると演算中にInt64に変換されて速度が落ちるから、というのもあるかな。
おまいさんも、負の範囲が必要じゃないときは、Cardinalじゃなくて、
type
MyWhole=0..MaxInt ;
みたいなのを定義して使うといいぞ。
って、どこぞの本にかいてあったはず。
でもそれって普通に負の数代入できるからあんまり意味ないよな
>>389 IDEオプションで範囲チェック入れろよw
Application.Minimize;で最小化したんですけど、タイトルバーが残ります。 これを隠すにはどうしたらいいでしょう?
タイトルバーには残りませんが
言い方が悪かったですね 最小化した時にデスクトップ上からけしたいんです。 Application.Minimize; だと、左下に最小化されたタイトルバーみたいな物が残ります。(これが最小化ってことだとは思いますが…)
いや、最小化したらタスクバーに入るだろ
お前は黙っていたほうがいい
メインフォームじゃないとか?
なに言ってるのか、もっと説明しないと判らんぞ。
他のアプリと違う操作にしたいのか、あるいは他のアプリと結果が違うのか?
他のアプリでもそうだけど、
最小化すると、タスクバーがあるwindowsの場合はタスクバーにのみ残る
(古いwindowsではタイトルだけ残ってたけど)
一部常駐系のアプリではタスクバーからも消して、通知領域にのみ残る
http://support.microsoft.com/kb/882639/ja もしかして、そうしたいのか?
>>398 >一部常駐系のアプリではタスクバーからも消して、通知領域にのみ残る
それ、それです。
タイトルバー、タスクバーを消して
通知領域にアイコン表示するところまでは行ったんですけど。
402 :
デフォルトの名無しさん :2007/02/10(土) 19:08:46
Delphiで、コマンドライン解析に便利な、ライブラリはないですか? ソフト作るごとに、System.ParamCount で、 System.ParamStrで、しこしこすんのがめんどくなってきた。 SysUtils.FindCmdLineSwitchは、単体パラメータしか判別してくれないし。 rubyのoptparse みたいなのがほしす
FindCmdLineSwitchをちょっと改造して次の引数を返すような関数を作ればいいのでは? -a -bを-abとか、-a hogeを-ahogeとかは書けなくなるが・・・
getopt
Delphi6の無料バージョンをやってるのですが 一番最初の uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, この部分に、Mathを入れたいのですが いちいち起動時にMathを書くのは面倒です。 デフォルトでMathを書いてくれるようにするにはどうしたらいいんでしょう?
>>405 Mathを使うと実行ファイルが結構大きくなるので。
どうしてもというのなら、そういうプロジェクトを一個つくってそれを開けばいいんじゃねの
407 :
デフォルトの名無しさん :2007/02/10(土) 21:50:09
723 :(*⌒m⌒)プププ ◆2GVl5znG.o :2007/02/07(水) 12:57:44 ID:YY0HWMJu ひでぇなこりゃww クソ豚(高津&新城)もいい加減にしないと、アク禁&警察いきだぞww
408 :
デフォルトの名無しさん :2007/02/11(日) 02:45:08
Delphi6とturboのライセンス(?)についてお聞きしたいんですけど、 Delphi6とturboで作ったソフトはソースコード公開しないでいいんですよね? 6は商用利用不可っぽいですが、turboはOKなんでしょうか? 今からどちらかを使ってプログラミングをしようかと思うのですが どちらを使ったほうがいいですか? ほんのちょっとデータ管理する程度のソフトを作りたいのですが・・・
409 :
デフォルトの名無しさん :2007/02/11(日) 03:27:13
> Delphi6とturboで作ったソフトはソースコード公開しないでいいんですよね? YES GPL のライブラリを使わなければ問題なし > turboはOKなんでしょうか? YES > どちらを使ったほうがいいですか? DB を使うならTurbo > 6は商用利用不可っぽいですが、 商用利用=作ったアプリを売るという話じゃね 自分で使うだけなら、どんな用途でも問題ないと思う
戻り値が空文字かどうかチェックすればいいだけじゃないの。
>>411 ありがとうございました
三日悩んだのに
空文字の可能性に気付かなかったとはアホでした...orz
413 :
デフォルトの名無しさん :2007/02/11(日) 20:30:49
メッシュデータの配列の読み込み方教えてくれよw 数年前のオレなら一瞬でできてたと思うだけどよw fortranばっかつかっててwwdelphiわすれたw むしろdelphiってよりpascalか? まぁとりま2次元配列の読み方書き方おしえてくれ!!!
てめぇで調べろよwwwwwwwwwwwwwwwwwwww
415 :
デフォルトの名無しさん :2007/02/11(日) 21:59:12
いぢわるしないで>< なんかこうやったら300まで書いてくれないんです>< for i:=1 to 300 do writeln(ff,i);
あんた神だよ!!
>>416 さん><
ありがとうございます><
今夜は寝れそうです><
fortranのいい加減な文法になれるとdelphiがうざく感じますね><
419 :
デフォルトの名無しさん :2007/02/13(火) 10:11:32
TEditに入力した文字列をバイナリ形式で保存して それを読み込もうとしています 下のソースは読み込みは成功するのですが fs.Freeの所でEAccessViolationが発生します エラー内容がアドレス00000000~なので Delphi様は「fsなんてメモリ上に存在しないにょ」「そんなのFree出来ません><」と 仰ってると推測されるのですがどこかおかしい部分あるでしょうか? 書きこみ ms := TMemoryStream.Create; try sData := Edit1.Text; ms.WriteBuffer(sData, Length(Edit1.Text)); ms.SaveToFile('C:\hoge.dat'); finally ms.Free; end; 読み込み fs := TFileStream.Create('C:\hoge.dat', fmOpenRead); try fs.ReadBuffer(sData, fs.Size); Edit2.Text := sData; finally fs.Free; end;
>>409 遅くなりましたが、ありがとうございます
ファイルを開くモードは,Mode パラメータで指定します。 Mode パラメータには,オープンモードと共有モードを表す識別子を or で結んで指定します。オープンモードには次のいずれかの値を指定します。
424 :
419 :2007/02/13(火) 13:21:39
一番制限の緩いfmShareDenyNoneを 指定してみましたが変わらずです
sDataのデータ型ってなんだ??ソースを見ると文字列型のような気がするけど、 ちゃんと読み込むデータのサイズになってるか??つか、Freeじゃなく、 ReadBufferでエラーになってるように思える。
426 :
419 :2007/02/13(火) 15:27:03
自己解決しました sDataはString型です 書き込み ×ms.WriteBuffer(sData, Length(Edit1.Text)); ○ms.WriteBuffer(sData[1], Length(Edit1.Text)); 読み込み ×fs.ReadBuffer(sData, fs.Size); ○fs.ReadBuffer(sData[1], fs.Size); //sTempは事前に確保 sDataをそのまま渡していたのでsDataが指しているアドレスじゃなく sData自身のアドレスが渡っていました その為、スタックが壊れてたまたまfs.Freeの部分でアクセスヴァイオレーションが 発生していたと思われます お騒がせしました
まあ、古式ゆかしい言語だから、ReadBufferみたいに メモリアクセスが直接見えてる部分も残ってて、 それを面白いと思えればいいんだけど、 ミスすると原因不明な困ったバグを入れてしまう部分にもなりえるからな
>>426 sDataが空の時にsData[1]とするとアクセス違反になるので
空だったら読み書きしないようにする必要があります.
setlength(sData,fs.Size); //<---- これが必要だろ? fs.ReadBuffer(sData[1], fs.Size);
>>429 > setlength(sData,fs.Size); //<---- これが必要だろ?
同意。
>>419 のコードだと、書き込んだ同じ文字列を読み出しているからsDataの長さが
同じになっていて、たまたま問題が起きてないみたいだけど、本当は必要だよね。
>428 SetLength(sData,fs.Size); fs.ReadBuffer(PChar(sData)^,fs.Size); ってことね。
> 文字列をバイナリ形式で保存して これどうやるの? ってか、バイナリ以外保存できるのか?
バイナリとテキストの2つの形式があるよ テキストで保存すると環境によって CR/LFがついたりLFだけになったり といってもDelphiとKylixの2つの差だけどね
で、バイナリ保存とやらで保存したファイルからファイルストリームで string に 代入とはこれいかに?
436 :
デフォルトの名無しさん :2007/02/14(水) 08:17:50
784 :ラーメン大好き@名無しさん :2007/02/13(火) 12:19:35 ID:wHbpSh1v
>高津の新城は南部学区なんだがな
ここの
>>1 ってマジ馬鹿だねw
マジ笑うw
785 :↑ :2007/02/13(火) 17:26:37 ID:1sb18rZn
お前の発言だろうが(超新星爆)
脳ミソが溶けてる奴は記憶力が激低だな(ブラックホール爆)
>>434 まあファイルストリームには、もはやテキストだのバイナリーだの区別はなくなってるから
若者には区別する事そのものが奇異に見えるんだろな。
>>434 まあファイルストリームには、もはやテキストだのバイナリーだの区別はなくなってるから
若者には区別する事そのものが奇異に見えるんだろな。
LabelのCaptionを上下方向の中央揃えをするにはどうしたらいいのでしょうか?
AutoSizeプロパティをTrueにする
TLabel.Layout
自作アプリをタスクマネージャーのプロセスでチェックした場合、 メモリ使用量がWin2000で7MB、XPで47MBとOSによってむっちゃ差があるんですが、OSでメモリの計算式変わってます? メモリ使用量47MBってすごいデカイ気がするんですが(汗
ドラッグ&ドロップする場所をフォームではなく エディタにしたいのですが、どうしたらいいでしょうか
447 :
デフォルトの名無しさん :2007/02/14(水) 15:02:16
誰かDELPHI6のプログラミングのサンプルくれませんか?? 星が動くやつとかめっちゃ簡単なのでけっこうです!! よろしくお願いします!!
>>447 久しぶりに言うぞ…
先ずはググれ
話はそれからだ!
Delphiで星を動かす447
>>447 program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
C: Integer;
begin
C := 0;
while C < 78 do
begin
Write('★');
Sleep(100);
Write(#$08#$08);
Write(' ');
Inc(C);
end;
end.
なんか、昔に、パソ屋のデモ機で、ROMのN88BASICをつかって、ランダムに色が付いた■を表示するやつを作り逃げした記憶がよみがえった。 しかし、星を動かすとなると、地球シミュレーターどころの規模じゃないな。がんばれ。
この時期はせっぱ詰まったヤツが大杉。Delphi特有。
何が言いたいのかよくわからん。
>450のやつコピペしたら動かない
>450のやつコピペしたら動かない つ{$APPTYPE CONSOLE}
ちゃんと Project1.dpr って名前で保存するんだぞ
中身をこう換えると、もう少し派手になるよ program Project1; uses windows,forms; begin with TForm.Create(nil) do try show; while Visible do begin application.ProcessMessages; Canvas.Font.Color:=random($ffFFff); Canvas.Font.Size:= random(30)+5; Canvas.TextOut(random(width),random(Height),'★'); Sleep(1); end; finally free end; end.
458 :
デフォルトの名無しさん :2007/02/15(木) 11:32:58
EditBoxでEnabled:=FalseにしたときFontの色が灰色になりますが EnabledがFalseのままで黒にしたい場合どうすればよいのでしょうか?
>>458 Panelの上にEditBoxを置いてPanelのEnabledをFalse
適当だけど。
>>459 良く判らん
program Project1;
uses windows,forms;
var x:integer=0;
var y:integer=0;
var xs:double=0;
var ys:double=0;
begin
with TForm.Create(nil) do try
show;
while Visible do
begin
Canvas.Font.Color:=$ff00ff;
x:=x+round(xs); y:=y+round(ys);
if (x<=0) or (x>=ClientWidth -Font.Size) then xs:=-xs+random(3)-1;
if (y<=0) or (y>=ClientHeight-Font.Size) then ys:=-ys+random(3)-1;
Canvas.TextOut(x,y,'★');
Sleep(33);
application.ProcessMessages;
Canvas.Font.Color:=Color;
Canvas.TextOut(x,y,'★');
end;
finally free end;
end.
>>458 TEditはWindowsのコントロールを使っていて
Windowsのコントロールがそういう仕様だから無理
ReadOnly = Falseで逃げるとかごまかし手段はいくらでもあるが
>>460 ,462
ありがとうございます。
仕様で直接変更は無理なんですね。
ごまかしつつがんばってみます。
>>458 一見操作できそうで実は操作できないというのはユーザーにとってはストレスだと思いますよ.
その点は解決する必要があります.
TEdit1.ReadOnly := False; TEdit1.Color := clBtnFace; もしくは TEdit1.Enabled := False; TEdit1.Color := clBtnFace; が最適
×TEdit1 ○Edit1
TStringListをちょくちょく使う場合、 使うたびにCreate、freeを繰り返すのと、 パブリックにしちゃって、アプリ起動時にCreate、終了時にfree するのとどっちがいいんですかね? 気にするほどじゃない問題?
俺の最近のお気に入りは、TMemoのStringListを使う事。 フォームをSizenableにして範囲外においておけば 見たいときにフォームサイズ変えれば直ぐに内容が見れて デバッグも簡単だし。 処理結果とか書いていくようにすれば、ログ表示になるしね。
//フォームを使わないバージョン program Project1; uses windows,forms,Graphics; var xsize,ysize:integer; var x,y,xs,ys:double; var Canvas:TCanvas; begin x:=1;y:=1;xs:=5;ys:=0; Canvas:=TCanvas.Create; Canvas.Handle:=GetDC(0); with Canvas do try Font.Handle:= GetStockObject(OEM_FIXED_FONT ); xsize:=GetSystemMetrics(SM_CXSCREEN)-Font.Size;ysize:=GetSystemMetrics(SM_CYSCREEN)-Font.Size; while (GetKeyState(VK_ESCAPE) and $8000)=0 do begin Canvas.Font.Color:=$8080 ; x:=x+xs; y:=y+ys; ys:=ys*0.997+200/ysize; if x<=0 then xs:= abs(xs); if y<=0 then ys:= abs(ys); if x>=xsize then xs:=-abs(xs); if y>=ysize then begin ys:=-1.2*abs(ys)-random(2000)/ysize;xs:=xs+(random(2000)-1000)/xsize;end ; Canvas.TextOut(round(x),round(y),'★'); Sleep(33); application.ProcessMessages; Canvas.Font.Color:=$ffFFff; Canvas.TextOut(round(x),round(y),'★'); end; finally ReleaseDC(0,Canvas.Handle); Canvas.free; end; end.
>>467 publicには極力モノ置きたくないから前者
まあ気にするほどのもんじゃない
>>467 そんなに気になるならTStringListを継承したのを作って
function CreateStringList:TStringList;
で、その継承したのを返すようにして、
Freeで実際にFreeせずに、ストックに入れておいて
次のCreateStringList:でストックしたのを返して、
アプリ終了時にFreeするようにしたら?
VB.NETならGCあるからFreeなんてしなくてすむのにね
>>472 VBよく知らないんだけど、手続き内でCreateしたものをfreeしなかったらどこで破棄されるの?
手続き完了後に自動的に破棄?
コンパイラが必要ないと判断した時点で自動的に解放される メモリリークが(一応)無くなるから便利なんだけど ポインタ等の直接メモリを覗く処理が(ほぼ)扱えなくなる
475 :
デフォルトの名無しさん :2007/02/15(木) 16:17:39
TTcpClient、TTcpServerについて質問です Clientから文字列をServerに送信してServer側で表示する その後、送られてきた文字をServerからClientに 送信するという処理を考えています ClientからServerへのデータ送信は出来たのですが ServerからClientでデータを遅れません TTcpServer.Sendlnメソッドと使えばClientに データが送られると思うですがTTcpClient.onRecieveイベントが起きません どこがおかしいのでしょうか?
>>472 Delphi .NETもGCじゃないの?
.Createの戻り値受け取らなくても(.Freeしなくても)問題ないよな?
.NETは言語の種類に関係なく全てGCに対応してる
Crete try finally FreeはDelphiの宿命だ。 下らん小細工で避けてもろくなことにはならない。
レコードにデストラクタ付けたいんだけど、無理?(将来対応しますか?
480 :
475 :2007/02/15(木) 16:37:02
ClientにTTcpClient、ServerにTTcpServerを置いてましたが ClientにTTcpServerを、ServerにTTcpClientを追加して ClientからServerにデータ送信 ↓ ServerのAcceptイベント内で全部のデータを受信したら Server側のClientからClient側のServerに送信 の手順で出来ました
>>472 Delphiもインターフェース型を途中から導入してて、これを使えば
自動廃棄も可能だよ。
でも
>>467 は、メモリの確保解放の処理コストを考えると
頻繁に利用するオブジェクトは再利用した方がいいんじゃないのかという事だろう?
だとすると、.NETはそれに対して良い解決法を提供してくれてるとは言えない。
ただ、TStringListは1行づつメモリを使うので、そっちのメモリ確保解放のことを考えると
TStringListのインスタンスのコストを考えてもしょうがないレベルだと思うけどね
レジストリのサブキーのうち、名前の一部が一致するキーを探すにはどうすればいいんでしょう? HKCRから「foo.」を探して、HKCR\hoge.fooもHKCR\hoge.barも得る(存在を確認する)、ということなんですが…
×「foo.」 ○「hoge.」
Delphi6personalを使っています TStringGridで項目数が少ない場合にも縦のスクロールバーを 表示するようにしたいのですがうまくいきません procedure TForm1.FormCreate(Sender: TObject); var VertScrlInfoSt :TScrollInfo; begin //ShowScrollBar( StringGrid1.Handle, SB_VERT, true );←多分不要? GetScrollInfo( StringGrid1.Handle, SB_VERT, VertScrlInfoSt ); VertScrlInfoSt.fMask := VertScrlInfoSt.fMask or SIF_DISABLENOSCROLL; SetScrollInfo( StringGrid1.Handle, SB_VERT, VertScrlinfoSt, true ); end; コードは概略このような感じです FormResizeでも同じようにしてみたのですがうまくいきません どうすればスクロールバーを表示したままにできるのか教えて頂けないでしょうか?
delphi6 personal使ってます 文字だけで構成された(画像がないの意)ホームページソースの内容を テキストファイルに保存するにはどうすれば良いでしょうか? どうかよろしくご教授下さい
486 :
デフォルトの名無しさん :2007/02/16(金) 02:08:22
487 :
デフォルトの名無しさん :2007/02/16(金) 03:08:45
THTTPやTHTMLを使いたいのですがuses節には何を書けばいいのでしょうか? TWebBrowser, THTTPRIO, THTTPSoapCppInvokerあたりを Formに貼ればusesできるかと思ったのですがハズレでした。 よろしくお願いいたします。
488 :
デフォルトの名無しさん :2007/02/16(金) 03:29:26
489 :
デフォルトの名無しさん :2007/02/16(金) 03:30:16
って、見てみようとしたが、THTTPなんてないんだが・・・
490 :
デフォルトの名無しさん :2007/02/16(金) 03:36:22
すみません、参照した情報がDelphi3の頃のもので、今は無いのかもですね。
やろうとしているのがネットワーククライアントですので、
>>486 見て
調べてみて、Indyでいこうかな、って思ってます。
すみませんありがとうございました。
配列a[1]からa[1000]までで a[n]が1
配列a[1]からa[1000]までで a[n]が1
おい誰か手伝ってやれよ
BDS2006で、IDEのコードの左側の + - でコードを折りたたんだりできるんだけど、 プログラムの任意の範囲を折りたためるようにする方法ないですか?
try .. finally .. end の、finally ・・ end 間で、エラーがあったか、あったらそのメッセージを取得できませんか。
{$REGION} // BDS2006で、IDEのコードの左側の + - でコードを折りたたんだりできるんだけど、 // プログラムの任意の範囲を折りたためるようにする方法ないですか? {$ENDREGION}
497 :
486 :2007/02/16(金) 15:30:54
またまたすいませんorz delphi6 personalにはindyは最初から付属しているのでしょうか? それとも個別にダウンロードする必要があるのでしょうか? 構文を参照しようとヘルプを検索しましたがみつからずT.T ググったindyのサイトにはdelphi5以前用のファイルしか掲載されてなくて マジ困ってます お手数ですが教えて下され
499 :
デフォルトの名無しさん :2007/02/16(金) 16:04:19
501 :
499 :2007/02/16(金) 16:09:28
うわすみません目の前に答えが ありがとうございました
>>495 try
except
on E : Exception do
begin
///
end;
end;
超初心者用のはずなのに
どのくらい分かるようになると、超初心者ではなくなりますか?
構造型プログラミングを実践できれば超初心者脱皮 オブジェクト指向を理解実践できれば初心者脱皮 他言語の良さを理解できるようになると中級者脱皮
他の言語に移ると上級者 言語なんざどうでもよくなると上級者脱皮 プログラミングやめるとやっと普通の常識人
>>505 せんせい! VBの良さがわかりません!
winならdelphi 携帯ならjava cgiならperl うわべだけ複数の言語かじりましたが オブジェクトが理解できてましぇんorz
TEDITを全体のウィンドウの大きさの変更に対応して変化させたいのですが AlignのAlClientにあたる物がみつかりません 正確には横幅のみ伸縮可能にしたいのですがどうすればいいのでしょうか?
Anchors
513 :
デフォルトの名無しさん :2007/02/17(土) 14:11:09
var F:TFileStream;で F.Size:=F.size+ 5000;とファイルを増やした場合、 この増えた部分は0で初期化されるのでしょうか?
TFileStream.Sizeプロパテイの値を増やしてもファイルサイズは変わらないよ
と、思ったら変わるんだな ヘルプには変わらないって書いてあるのにw
>ファイルを拡張した場合、 ファイル内の以前のエンド オブ ファイルの位置と新しい位置との間の内容は、 未定義になります という事だから、0で埋められるかどうかは判らないという事になるんだろな でも、そこを初期化していないと、 巨大なサイズに変更して、そこを読めば 削除した筈の個人情報が読めてしまったり・・・・・
518 :
デフォルトの名無しさん :2007/02/17(土) 14:31:38
519 :
デフォルトの名無しさん :2007/02/18(日) 01:31:20
SynEditはGPLとMPLのライセンスみたいですが、MPLを選択して 改造して無くて、著作権表示と、ライブラりへのURLアンカつけたらソース公開しなくて良いんでしょうか? いまいちわからなくて、、、リンクしてるのでアウト?
521 :
520 :2007/02/18(日) 02:00:40
もちろん、使用したMPLなソースコードがどこで入手可能かってのは 絶対必要。
BDNアカウント作成の鯖につながんね Delphi6のキーの取得も404('A`)
207 名前: デフォルトの名無しさん [sage] 投稿日: 2007/02/17(土) 21:10:23
>>203 メンテナンス中とか。
> Maintenance announcement: Membership services will be unavailable
> Abstract: February 17, 2007 Membership services will be down for maintenance
http://dn.codegear.com/jp/article/33982
質問です var s: string; begin s:='ABCDE'; ShowMessage(IntToHex(Ord(s[1],2))); end; とすれば 61 と出ますが その逆、$61をs[3]等に代入するにはどうすれば良いでしょうか?
s[3] := #61;
526 :
524 :2007/02/18(日) 04:04:23
>>525 迅速な解答ありがとうございました
ついでにもう一つ質問を・・・
'616263' といった文字列を使用して
同じ様に文字列変数に 'ABC' と代入するにはどうすれば良いでしょうか
2バイトづつ切り分けて IntToStr して Char にキャストして代入。
char型のデーターをstringに入れたいのですが どのような書き方をすればいいでしょうか
529 :
524 :2007/02/18(日) 04:30:15
良く分からないので とりあえずpcharとstring使っておきます お騒がせしました
char は 文字型で例えば var c:char; var s:string; とすれば、 s:=c; と代入出来る s[1]:=c; とも出来るが、これはいきなりやってはいけない。 setlength(s,1) のように領域確保後でやるか s:='abc'; のように文字列を持ってる時に、 s[1]:=c と1バイト目を置き換える pchar は文字列のポインタ形で Delphiでは文字列と互換があるようにpascalから改良されている var p:PChar; の時 s:=p; のように代入すれば 文字列の領域確保とコピーが自動的にされる。 p:=PChar(s) のようにすれば、文字列s[1]を指すポインタが帰ってくる sには自動的に文字の最後の後に#0が入っている だから s:=PChar(s) のようにすれば、sの途中に#0がある場合にそこまでのサイズの文字列にするという意味なる
533 :
522 :2007/02/18(日) 12:28:10
>>523 thx
アンケート答えるとこまではいったけど
こんどは「Send me a serial number and authorization key via email」クリックしてもページ読み込みエラーだ・・・
だめぽ
>>484 ちょいと調べてみましたけどそれっぽい情報があまり転がってないのとDelphiで実装するのはめんどくさそうなので
せこい手ですがスクロールバーが見えないグリッドコンポとスクロールバーコンポを2つを組み合わせるというのはどうでしょうか.
ためしに作ってみたらそれっぽい感じになりました.
ただしスクロールバーはXPのビジュアルスタイルが有効になりません.
コードが少し長くなったのでここには貼り付けませんが必要でしたらうぷしますが…
535 :
522 :2007/02/18(日) 18:49:08
ダメだキーが手にはいらねー つながらねーよヽ(`Д´)ノウワァァン
536 :
デフォルトの名無しさん :2007/02/18(日) 19:10:35
くだすれってなんですか?
哲学的な問いだな うぅむ・・・
くだらない質問はこのスレですれ の略だっけか
くだらない質問なんてしないプロ専用スレッド ~~~ ~~~~
くだけた質疑応答すれ
くだすれとかけてマラソンととく そのココロは↓
ぼくはしらない
>>512 これを使うんですね。ありがとうございます!
>>542 誰がうまい事言えと
あ、書いてあったわ
>>520 ありがとうございます。
VCLでのリンクだけなら自分のソースを公開しなくて良いみたいですね。
これで安心して会社で発言できます。
546 :
デフォルトの名無しさん :2007/02/19(月) 06:32:21
超初心者です。 Image1.Canvas.LineTo..などを使ってグラフを作るソフト(白の画面に 黒で線や文字を記入)を造りました。そのままだと、800Kのbmipファイル になるので今は、irfanviewで白黒のBMPに変換し80Kのbmpファイルに しています。 ネットをみるとpf1bitでビットマップイメージのピクセル形式を1ビットに できるとの事。一度、Image1.Picture.SAveTOfile('dummy.bmp') で保存して bmp.loadFromFIle(dummy.bmp')でbmpファイルとして読み込ませ BMP.PixelFormat:=pf1bit で変換し、また、保存しようかと思いましたが、何とかこんなことを せずに変換できませんでしょうか?;
D7でFireBird1.5+IBXで開発してるのですが、IDEでIBDatabaseのconnectedプロパティをTrueにしたまま実行すると Cannot perform operation -- DB is currently open と言うエラーメッセージが出て実行できません。 テーブルに項目を追加したりすると勝手にTrueになるのでいちいち直すのが面倒なんですが 何か設定が間違っているのでしょうか。
548 :
445 :2007/02/19(月) 14:58:24
procedure TForm1.FormCreate(Sender: TObject); begin DragAcceptFiles(Form1.Edit1.Handle, True); end; これでエディタへのドラッグ&ドロップを有効に出来たのですが ファイルの受け取り方が分かりませんでした。 エディタのイベントにOnDragDropというのがありますが これを使うんでしょうか?
>>546 保存の直前に1ビット形式に変換すればよいのでは?
最初から変換する場合はFormのOnCreateイベントハンドラあたりで以下のように書いてみてください.
Image1.Picture.Bitmap.Width := Image1.Width;
Image1.Picture.Bitmap.Height := Image1.Height;
Image1.Picture.Bitmap.PixelFormat := pf1bit; //①
①だけではうまくいきません.またうちの環境ではPixelFormatを先に設定するとうまくいきませんでした.
(黒と黒の2色になってしまいました)
WM_DropFilesメッセージを捕まえて そん名かでDragQueryFile APIでファイル名を取得する
TThreadでVCLコンポーネントへアクセスはシンクロナイズで行うということですが、 例えば、Thread.Execute内からForm1のCaptionなどの値を変更するだけでなく 取得するのも駄目なんでしょうか? また、TForm1のpublicに設けたintegerやstring、TstringListなどへのアクセスも駄目ですか? よろしくお願いします。
取得はOK、VCLコントルール以外へのアクセスもOKのはず そもそもワーカースレッドからメインスレッドを参照すること自体 なんかおかしいような気がするが
553 :
デフォルトの名無しさん :2007/02/19(月) 16:01:55
>>546 bmp.assign(Image1.Picture);
で出来たと思うけど。
>>552 ありがとうございます。すっきりしました。
こういうのは普通やらないのですか。。
早速直すようにしたいと思います。
>>547 ClientDataSet がOpen のままとか。
2進表記ってできないでしょうか?
できます。
ここで質問するような内容かどうかわからないのですが… 環境はDelphi6です。 ありていに言うと、FDをフォーマットしながら フォーマット時の書き込み内容のチェックを行い、書き込み内容がNGなら フォーマットを中断する、というPGを考えています。 正直、どういう風にコーディングするかさっぱりわかりません。 WindowsAPIをコールしてFD読み書きをするように するんでしょうか?
>>547 TIBDatabase.AllowStreamConnectedを参照のこと。
560 :
デフォルトの名無しさん :2007/02/20(火) 06:07:05
549 ななしへたぐらま さん、お返事ありがとうございました。 領域確保はしていたので Image1.Picture.Bitmap.PixelFomat:=pf1bit; だけ書いて望みどおりの結果を得られました。 553 さん、お返事ありがとうございました。 bmp.assign(Image1.Picture); ではTpictureをTBitmapに代入できませんというエラーが でましたが、 bmp.aasignp(Image1.picture.bitmap); としてみたら望むどおりの結果を得る事ができました。 少しだけですが、おかげさまでTpictureとTbitmapへの 理解が深まりました。まだまだ奥深いようですが.. ありがとうございました。
質問させてください! Memo1のTextにある改行を<ret>というタグに置き換えていきたいんですが、改行のコードはどんなのでしょうか? また、StringReplaceで置き換えられるものでしょうか?
>>562 A1 改行は Windows環境なら #$0d#$0A = #13#10
A2 StringReplaceで置換可能
なお Memo1ってのが TMemoなら Lines を1行づつ処理した方が簡単だろう
s:='';
with Memo1 do
for i:=0 to Lines.Count-1 do s:= s + Lines.String[i] + '<ret>';
>>563 ありがとうございます!
一行ずつって手もありましたね…
でもStringReplaceで置換可能なのもわかってよかったです。
ありがとうございます…
>>555 >>559 ありがとうございます。
今回は
>>559 さんの言うようにTIBDatabase.AllowStreamConnectedを
Falseにすることで解決しました。
566 :
445 :2007/02/20(火) 15:28:01
>>550 このように作ってみたのですが、うまく動きません。
private
{ Private 宣言 }
procedure WMDropFiles(var msg: TWMDropFiles);
message WM_DROPFILES;
....
procedure TForm1.FormCreate(Sender: TObject);
begin
DragAcceptFiles(Form1.Edit1.Handle, True);
end;
procedure TForm1.Edit1.WMDropFiles(var msg: TWMDropFiles);
var
FileName: array[0..1024] of Char;
begin
DragQueryFile(msg.Drop, 0, FileName, SizeOf(FileName));
Edit1.Text := String(FileName);
DragFinish(msg.Drop);
end;
手続き名が間違ってるみたいなのですが・・・
メッセージを捕まえる手続きは↓こんな感じ procedure WMDropFiles(Var Msg: TWMDropFiles); Message WM_DropFiles; 実装部は↓こんな感じで procedure TForm1.Edit1.WMDropFiles(Var Msg: TWMDropFiles); var FileName: Array[0..MAX_PATH] of Char; begin DragQueryFile(Msg.Drop, 0, FileName, SizeOf(FileName)); Edit1.Text := String(FileName); DragFinish(Msg.Drop); end;
> procedure TForm1.Edit1.WMDropFiles(var msg: TWMDropFiles); ^^^^^ なにこれ?
TForm1.Edit1.WMDropFiles ↑ こんな記法は出来ないと思うけど? TEditを継承するか、 サブクラスを使うかの2つだよ サブクラスを使う場合は、フォームの定義で private OldEditWindowProc:TWndMethod; procedure EditWindowProc(var Message: TMessage); procedure EditDropFiles(var msg: TWMDropFiles); ---------FormCreate OldEditWindowProc:=Edit1.WindowProc; Edit1.WindowProc:=EditWindowProc; DragAcceptFiles(Edit1.Handle, True); -------------------------- procedure TForm1.EditWindowProc(var Message: TMessage); begin if Message.Msg= WM_DROPFILES then EditDropFiles(TWMDropFiles(Message)) else OldEditWindowProc(Message); end; -------------------------- EditDropFiles は既出の通り。 ただし、最初に-1($ffFFffFF)を渡して、個数を得てからループするべき
勘違いしないように書くと、 ここで言うサブクラスは Windows用語でメッセージフックのテクニックの事 TEditを継承するのではなく、(本来は継承すべきだけど) TEditに流れるWindowsMessageを横取り(フッキング)して 処理内容を変更してしまうテクニックの事ね。
571 :
デフォルトの名無しさん :2007/02/20(火) 19:35:36
サブクラスを使わなくても、Form1で選別すればできる。
Form1? TApplicationのメッセージに割り込むんじゃなくて? どうやるの?
どうやるの?
YOU TEditから派生した独自のクラス(コンポーネント)作っちゃいなYO
TEditを継承する方法 TCanDropFileEdit = class( TEdit ) protected procedure WM_DropFiles(var msg:TMessage );message WM_DROPFILES; public constructor Create( AOwner:TComponent ); override; end; 中身はもう判るよね? 問題は、これをというか、この程度でコンポーネントとして登録するのがメンドクサイ事 TEditを貼り付けておいて、 メモリストリームを作成して WriteState してFree でこっちを作成して ReadStateしてしまうか
WM_DROPFILES はキューを通過するので Application.OnMessage で普通に捕まえられる。 uses ShellApi; procedure TForm1.FormCreate(Sender: TObject); begin DragAcceptFiles(Form1.Edit1.Handle, True); end; procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean); var FileName: array[0..1024] of Char; begin if (Msg.message = WM_DROPFILES) and (Msg.hwnd = Edit1.Handle) then begin DragQueryFile(Msg.wParam, 0, FileName, SizeOf(FileName)); Edit1.Text := String(FileName); DragFinish(Msg.wParam); end; end;
>>576 最近のバージョンのAddtionalタブに増えてる ApplicationEvents だね
D6 以降ですが。もう6年もたつわな。全然最近じゃない。がD7以降は無いのと一緒だからなぁ
コンポーネントバージョン type TCanDropFileEdit = class( TEdit ) //この定義は実装部に書いてもいい private procedure CreateHandle;override; protected procedure WM_DropFiles(var msg:TWMDropFiles );message WM_DROPFILES; end; procedure TCanDropFileEdit.CreateHandle; begin inherited; DragAcceptFiles(Handle, True); end; procedure TCanDropFileEdit.WM_DropFiles(var msg: TWMDropFiles); var FileName: string; var cnt,i:Integer; begin DragQueryFile(msg.Drop, DWORD(-1), @cnt, 0); for i:=0 to cnt do begin SetLength( FileName,4096); DragQueryFile(msg.Drop, 0, PChar(FileName), Length(FileName)); Text :=PChar(FileName); end; DragFinish(msg.Drop); end;
利用するためにTEditをこのコンポーネントに取り替える方法 procedure TForm1.FormCreate(Sender: TObject); var mstr:TMemoryStream; begin mstr:=TMemoryStream.Create; try mstr.WriteComponent(Edit1); Edit1.Free; mstr.Position:=0; RegisterClass(TEdit); Edit1:=TCanDropFileEdit.Create(self); Edit1.Parent:=self;//パネルに貼り付けてるならパネル mstr.ReadComponent(Edit1); finally mstr.Free end; end; 関数にしておけばタイプ量は減らせる
for つかって最初の一つだけとはこれいかに? コピペ丸出しじゃないの
○ DragQueryFile(msg.Drop, i, PChar(FileName), Length(FileName)); × DragQueryFile(msg.Drop, 0, PChar(FileName), Length(FileName));
○ cnt:= DragQueryFile(msg.Drop, DWORD(-1), nil, 0); × DragQueryFile(msg.Drop, DWORD(-1), @cnt, 0);
これが for ループに入ってますが Text :=PChar(FileName);
一行エディットなんだから最初に一つだけでいいんじゃないの
MAX_PATH って4096もいるんだっけ
>>584 それはまあ TEditなんで 複数ドロップされたら最後が有効って事でご容赦
TMemoなら
Lines.Add( PChar(FileName) );
とかでお願い
>>586 まあ、将来どんな環境が出るか判らんし、スタックと違ってヒープにとっておけば
そう迷惑な量でもないから、
迷惑というかスタックに文字領域を取るのは脆弱性の面で良くないとか?
最後じゃなくて最初を有効にすべきでしょ
Application.OnMessage でいいでしょ。一つなら。
>>591 まあ、そうなんだけど、Delphiが出た当時評価された一つが、
メッセージをサンクを使って高速割り振りしてた所にあるわけで
そういう意味じゃ年寄りには
全メッセージに判断入れるような
ApplicationEvents の手法は、受け入れ難いのでしょ。
× for i:=0 to cnt do begin ○ for i:=0 to cnt-1 do begin
キューを通るようなメッセージにはVCLは内部でいっぱい判断いれてるよ。それこそ、ほとんど全部のコンポで。 一つ増えたからってなんだっていうんだよ。
>>594 年寄りいわく、
アプリケーションには1秒に数10~数千のメッセージが飛んでくるんじゃ
VCLはサンクを使って高速に分岐してくれる。
つまりじゃ、分岐が終わってから処理するコストと、分岐前に比較するコストは全く違うって事じゃ。
しかし、現代のCPUにとっては、目糞鼻糞だと思うけどね
もっとも、タブページのように窓ハンドルを大量に使うとそうとも言えないかもしれないが
>>534 レスありがとうございました
> スクロールバーが見えないグリッドコンポとスクロールバーコンポを2つを組み合わせる
若干姑息な感じもしますけど、実現可能なのはそのぐらいなみたいですね
ただ、この方法だと、グリッドコンポとスクロールバーコンポを連動させる処理を
全部自前で書かないといけなさそうな気がします
結局、見た目だけの問題ですし、気にしないことにします
レスが遅くなってすみませんでした
分岐は関係ないだろ。MouseMove のようなメッセージだって、イベントハンドラが 設定されているかどうか判断するところまでは、実際に実行されるんだから。 if 文一つがすべてのキューメッセージに対して実行されるから、どうだこうだ いうんなら、そもそもVCLなんざ論外だわな。
ユニットを二つ使っている場合 二つのユニットどちらからでも使える変数はどのように宣言すれば良いですか?
すいません自己解決しました public節に宣言すればいいのですね
>>597 1、そのメッセージ全部に 判断が入るのと
2、窓の一つだけで判断が入る のでは違うだろ?
メッセージは ProcessMessageで一度捕捉され
PeekMessageしてTranslateMessageの後DispatchMessage
DispatchMessageでは、本来は各クラスが呼び出される仕掛になっている。
でも、VCLは動的に作った短いコードを割り当てて、直接オブジェクトメソッドを呼び出す
http://www.asahi-net.or.jp/~HA3T-NKMR/vcl3-1.htm MouseMoveを例にしているけど、他にも、
たとえばマルチメディア系のコールバックをメッセージに貰う場合とか、
大量のタイマーを使っているとか、メッセージが大量にやってくる場合に
たとえば1秒に千個のメッセージが来るなら、
DispatchMessage前に判断を入れたら、たとえ増えた判断が1サイクルでも、
1千サイクル分の命令を入れたのと同じこと
議論は他所でやれよ おっさんミットモナイ
>>596 UpdateScrollRangeがvirtualだったら良かったのにね。
personalでなければソース書き換えばいいんだろうけど、難しいね
>>600 きみさ、なんか勘違いしてるよ。
> VCLは動的に作った短いコードを割り当てて、直接オブジェクトメソッドを呼び出す
これは単に、普通にはできないウィンドウ関数をクラスのメソッドにするためのせこい仕掛け。
普通のWin32APIでつくったウィンドウより速くなる事はありえない。ごちゃごちゃと
イベントハンドラも設定してないメッセージにいちいちいっぱいコードを実行しているVCL使ってて
Application.OnMessage にメソッドを書くのは遅くなる、とか勘違いも甚だしい。
必死だな
OOPが2つのポインタを必要とする以上、その解決が必要。セコイ仕掛でも必要な事。 そして、OOPレベルで書く以上、Cでカリカリに書いたコードより遅いのも仕方ない。 ここまでは、同意するが、最後の行は間違い。 PeekMessage~DispatchMessage は高速道路であって、ここは早く流してやらないとね。
その高速道路で無駄コードを実行しながらよたよた走ってるのがVCLなんだな。 イベントのうちハンドラが設定されるのは1割以下。9割以上のメッセージ処理 はVCLの無駄コードを実行してから DispatchMessage() に復帰するんだよ。 そもそもApplication.OnMessage だってコード書かなくても、イベントが設定さ れてるかどうか毎回見に行ってるし。VCL のOOPの機能の一つだ。ほか使ってて このイベントだけごちゃごちゃいうのは変。
滅多に来ないメッセージがどんなに重く処理されてようが、関係ないない? 感覚的には一番頻度の高くなるメッセージは 1、マルチメディア系でコールバックにメッセージを使った場合 2、タイマー 3、MouseMove 4、Paint で、これらはやってくるとなると集中的で、なおかつ応答が悪いと体感されちゃうでしょ?
他所でやれよ馬鹿 迷惑なんだよ
別に迷惑じゃないが。
枯れ木も山の賑わいさ。 質問はいつでも受け付けてるよ。
DispatchMessageに渡さず、 Application.OnMessageで自分で処理したほうが 速いよ。
もういいじゃん。ほとんどのケースではどっちで処理しようが、速度の違い体感できないんだから。
613 :
デフォルトの名無しさん :2007/02/21(水) 19:06:54
議論の最中に恐縮ですが、また直接Delphiと関連がないことかも知れないのですが {$R sound.RES} として効果音のリソースを取り込んでいます。リソースはbrcc32で作りました。 で、この効果音の制作会社に「WEB等で公開する場合は、第三者が素材音源を ダウンロードして二次利用出来ない形でお願い致します」と言われています。 この場合、このプログラムはWebサイトで公開できるものなのでしょうか。
>>613 リソースだと容易に抽出できちゃうから、厳密に言うとまずいだろう。
暗号化してリソースに入れて、使うときに複合化するべきだな。
>>613 聞いてみるのが一番だよ。
リソースそのままで問題になりそうなら、どうせ
LoadResource/LockResource/sndPlaySound で再生してるんでしょ?
だったら、メモリ上のデータをなんか適当な文字列とxor してやれば
まあ、リソースハッカーあたりで簡単に取りだせないでしょ
どっちにしても、windows標準で付いてるサウンドレコーダで録音して保存したら2次利用できてしまうんだから まあ右クリックして保存出来なけりゃ、いいんじゃないの?
617 :
613 :2007/02/21(水) 21:14:52
おお、なんと素早い回答… やはり制作者側に聞いてみるべきなのかもしれません。(ちょっと担当の方が 苦手気味なので、ついここで質問してしまいました…) 暗号化する件や録音された場合の音質等も含めて相談してみます。 何か進展しましたら(忘れてなければ)報告します。ありがとうございました。
618 :
613 :2007/02/21(水) 21:31:53
ちなみに再生は PlaySound('#100',0,SND_RESOURCE OR SND_ASYNC); としてました。LoadResourceを使う必要があるのですか。うーん、対処します。
Delphi2007 出るのね。 具体的な新機能のアナウンスは無いのかな。
おお・・なんか要するにあまり変更無しって感じね・・。
VCL for WebとDBX4はちょっと気になるが・・ これってBDSとは別に買えってことかしらん?
今時Unicode非対応のアプリを作るやつなんてバカ以外いないだろ。
つくればいいじゃん。 自分の技術のなさをdelのせいにしないように。
↑ バカの見本
ユニコード対応は個人のレベルじゃできないだろ、普通・・
16bit->32bitへの移行をあれほどスマートにやってのけたのに なぜいまだにUnicodeベースの環境に移行できないんだよ・・・
もう何年もまえから要望が出てますが。
>>628 いや、別に国際化というより、JIS2004の補助漢字とかが入力できない・・TNT使わんと・・・
某的には.NET対応ですべて完了って目論見だったんだろうな。
Tnt使うのはダメなの?
>>628 もうちょっとCP932がどういうものなのか勉強した方がよかれ。
そろそろバカボンスレ行け
え? まだ対応しないって?
>>630 JIS2004で問題なのは補助漢字じゃなくて、異体字の方では…?
文字コードが一緒で違う字が当てはまるんだから、プレーンテキストを扱うプログラムは
今後出るであろうマイクロソフトの開発環境でも対処のしようがないんじゃない?
>>636 その問題も出てるが、少なくともAnsiウィンドウじゃ、その補助漢字すら入力できないの知ってる?
もちろん、第3・4水準の漢字もね。
だから、VCLで普通に開発したアプリは異体字の問題に直面しないと思うが・・・
>だから、VCLで普通に開発したアプリは異体字の問題に直面しないと思うが・・・ あぁ、この発言は取り下げておく。
>>637 いや、補助漢字とか第3水準以降とかの漢字じゃなくて、第1水準の漢字「辻」とか「葛」とかの字形が変わるんだって。
word2007かIME2007で異体字切替に対応するって話だけど、はき出すプレーンテキストをどうするか見当が付かない
プログラムでどうこうの話じゃなくなってくるけど、
MSゴシック(JIS90)で作ったプレーンテキストとMSゴシック(JIS2004)で作ったプレーンテキストは内部処理的には同一の物であっても、見た目が違う。
神経質な人がJIS2004で作ったデータをJIS90でプリントアウトしてクレーム出たらどうする? 出力環境をJIS2004にする?
じゃあ、出力環境をJIS2004にしたら、JIS90前提で作ったデータはどうするの?
人名を管理するデータを扱っている人はどう対処する?
ゴメン。詰問口調になったけど、自分自身答えが見つからなくて不安なんだ。
ウゼェ
641 :
デフォルトの名無しさん :2007/02/22(木) 13:18:55
おっさん達キモイからどっか行けよ 質問者が来づらいだろ
>>639 その話知ってるって。開発環境レベルでどうこうできる問題じゃないだろ。
>>576 をやってみたのですが、ファイルを読み込んでくれません。
Additionalから何か追加しなければならないのでしょうか?
644 :
デフォルトの名無しさん :2007/02/22(木) 16:14:30
あれはファイル名を読み込むだけ 中身を読み込みたいなら自前でファイル名に対して AssignFile、TStringList、TFileStreamとか使わないと
TOpenDialogなんで使わないんだろう・・・
>>644 言い方が変でしたスミマセン。
エディタに放り込むことは出来るのですが、放り込んだ後
エディタにファイル名が読み込めていないのです。
イベントハンドラが設定されてない、とか? コピペするだけして・・
特定のフォルダ内の全てのテキストファイルを探す処理はどうすれば良いですか? 具体的にはwindowsのファイル検索のような処理をしたいのです FindFirstのワイルドカード(*.txt)を使うと forやwhileを使ってもいつも同じファイル名を返し フォルダ内のファイル名一覧になりません どうすれば良いか教えて下さい
ヘルプを読む。 |FindFirst は,Path で指定された~一致する最初のファイルを検索します。 ^^^^^^^^^^^^^^^^^^ 故に >forやwhileを使ってもいつも同じファイル名を返し は正しい。 |関連情報 |SysUtils.FindClose |SysUtils.FindNext
>>647 ドラッグ&ドロップは
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
でファイル名の取得を行なっているのではないのですか?
これの他にもイベントハンドラが必要なのでしょうか。
2007でもUTF16対応しないのかorz
>>650 ちゃんとIDEでイベントハンドラを設定してあるか確認してみては?
ApplicationEvents1 の OnMessage イベント
653 :
デフォルトの名無しさん :2007/02/23(金) 01:08:11
質問です。 オブジェクトインスペクタに表示されるプロパティのカテゴリはどのようにして決まっているのですか? 自分で作成したプロパティを特定のカテゴリに入れることはできますか?
>>650 関連するイベントハンドラやメソッドにブレークポイント仕掛けて何処で止まってるのか特定。
>>653 RegisterPropertiesInCategory
>>626 だからできないのをdelのせいにすんなって。
まあ初心者スレだから仕方ないか。
というかウニ厨は.netにいって帰ってこなきゃいいのに
>>655 超初心者に初心者が教えるスレだからなw
658 :
デフォルトの名無しさん :2007/02/23(金) 12:45:43
for i := 0 to 10 do begin for j := 0 to 10 do begin (条件) end; end; となっているとき、 (条件)の部分から次の i のループに行くにはどうしたらいいのでしょう? Continueじゃ次の j のループに行ってしまうし・・
659 :
658 :2007/02/23(金) 12:48:09
自己レスです。 breakでOKでした。大ボケかましてしまった・・。
質問です 任意のバイナリファイルを開き、各バイトごとにビット反転を行い 上書き保存するにはどうしたらいいでしょうか?
//uses classes; var ms:TMemoryStream; i:integer; pb:pByte; begin ms:=TMemoryStream.create(); try ms.loadfrom('読みたいファイル'); pb:=PByte(ms.memory); for i:=0 to ms.size-1 do begin pb^:=not(pb^); end; ms.savetofile('上書きしたいファイル'); finally ms.free; end; end;
>>661 ありがとうございます!
できませんでした!!!
ms.loadfrom('読みたいファイル');
は
ms.loadfromfile('読みたいファイル');
だとおもいますが
ビット反転はおこなわれていませんでした
ついでに質問ですが
00 01 02 03
と並んでいるのを
03 02 01 00
という風に逆並びにする方法もお願い申し上げます
661には inc(pb)が抜けてるのだが、その場所は自分で探す事 pbの定義をarray of byte のポインタにすれば、ついでのお願いは難しくないだろう
実用性を感じない、宿題臭い質問だ。
漏れもだいぶ昔、作ろうと思ったことがあるプログラムだ。 漏れの場合はTFileStreamを直接いじるやつだったけどうまく書き換えられずに放り出した覚えがある。 今ならバッファに取り込んで加工してファイルに落とすかな
>>663 ポインターのことはよくわからないので、forの中に入れてみましたが、なぜかできました。
ありがとうございます。
>>664 わるいけど、俺は、中国を動かしている在日日本人なの!
>>665 TFileStreamで数Kのブロック毎に処理するのが一般的だけど
メモリマップドファイルにしてメモリ上で反転してしまうのが、なんか速そうに思う。
>>663 >pbの定義をarray of byte のポインタにすれば
微妙に勘違いさせちゃわないか、その書き方。
あえて言えば、
array[0..適当] of byte のポインタ
かな
ひどいな、このスレ。とくに回答者。Del はもうこんな状況なのか? 絶望的・・・
>>655 できないのは、いまだに非対応なDelのせいですが? なにか?
TNT つかえば解決、とか思ってるんじゃね? 初心者だから。
使用許諾コードの取得ができねぇConection Failedになる CDコードとパスワードの取得も鯖につながんねぇしどうなっとるんだ 導入の時点で問題ありすぎオワタ\(^o^)/
そんな事はてめぇの日記帳にでも書いてろバーカ
マジでどうすりゃいいか教えてよ つかいたいんだけどDelphi6
製品版、買いなよ。 本当にはじめたいんならさ。
そうなんだけどトライアルで試してみないことには… 月曜になったらボーランドに直接問い合わせてみることにした
最初からそうしろよ低脳が
codegearとborlandのリンクが入り混じってアチコチリンク切れになってるね Delphi for PHP の発売で変更とか忙しいのだろ とりあえずTurbo Delphi で試してみたら?
>>672 vipperのdelphi wikiにコード載ってるはず
SQL文のwhere句に where U_GROUP in ('A','B','C') と書いてあるんですが、この('A','B','C')の部分をパラメータにしたいのですが どうすればいいのでしょうか。 where U_GROUP in :UserGroup と書き換えて ParamByName(':UserGroup').AsString:='(''A''',''B'',''C'')'; とするとエラーになってしまいます。
681 :
デフォルトの名無しさん :2007/02/24(土) 10:28:09
Delphi製アプリはUNICODE非対応って本当ですか? Delphiを採用しようかVB.NETにしようか迷っているのですが。 やはりOSを出しているメーカーの開発環境のほうが安心ですかね。
>>680 オレの知る限り(Delphi4)inの中身をパラメータで指定することはできないはず。
どうしても in句 を使いたい場合は
プログラムでSQL文を生成して、SQL.Textにセットしてた。
>>681 Delphiにはfor Win32 と for .NET の2つがある
for Win32で 単に貼り付けるだけで作ったアプリは ANSI文字列対応
for .NET で // UNICODE対応
for Win32でも 当然UNICODE文字列は扱える。
>安心ですかね? は答えようがない。
何に安心したいの? 就職先だの派遣先があるかどうかという問題なら、あるんじゃないの?
>>681 言語を道具として扱えない技術者はどう転んでも使い捨て.
どう転んでも安心できる日など来ない.
Perl も PHP も Ruby も C# も VB.NET も Delphi も全部使うくらいの気概でいなければ駄目.
まぁ、Delphi つかうような技術者は転びやすいってことだよね
全部使うっていっても、Webアプリが主のPerlとかとネィティブアプリが主のDelphiを一緒にされても困るわな。
だって組み合わせて使うじゃん。HTTPやソケットとCGI、DBの連携とか…
はいはいワロタワロタ
>680 682のいうとおり、直接は㍉だとおも。奥の手はサブクエリかな?
>>680 >>ParamByName(':UserGroup').AsString:='(''A''',''B'',''C'')';
Aでシングルクォート多くね?
>だって組み合わせて使うじゃん。HTTPやソケットとCGI、DBの連携とか… 何がいいたいのかわからねぇ。HTTPやソケット??CGI・DB??
ADODatasetのLocate、条件が複数あると、全然まともに動かない。 レコードが見つからない時にわざわざ例外が出るのは一体何だ。
難しい話はDelphi-MLで聞けばいいじゃないか。
どのくらいの質問になると「難しい」のか分からない
どのくらい難しいかDelphi-MLで聞けばいいじゃないか。
与えられたローカルアドレスが ディレクトリかどうかの判断はどうすればいいんでしょうか if FileGetAttr(Dirname) = faDirectory これで判断してるのですが、ディレクトリ判定されないフォルダが偶にあります。 もっと正確な判断方法はないでしょうか?
if (FileGetAttr(Dirname) and faDirectory)<>0
一般のソフトに良くある メニューのオプションを選択すると オプション設定用の別窓(form?)が開くアプリを作りたいのですが 2つ目のformの呼び出し方がわかりません やり方のヒントだけでも教えて下さいorz
フォームを新規作成したよね? そのフォームの名前を変更しよう 変更しないままのForm2だとすると そしたら1つ目のフォームにボタン配置して、ダブルクリック Form2.Show; と1行書く。 実行させようとしたら、 ユニットを追加しますか と聞いてくれる
For i:=0 to 1000 do begin if i = x then break; end; このループを正常に抜け出した直後のiは xか1000のどちらかと考えて良いんでしょうか?
>>701 ループに使ったローカル変数は、
ループ後不定です。
って、コンパイルしたときに警告でると思うが?
>>702 そのまま使えてそうな感じがしたのですが、そうなんですか。
ありがとうございました。
>>704 ループ変数はレジスタ(概ねECX)で、ループを抜けたあとに以前の値をPOPしていることがおおい・・・かも
stringlistでブランクを詰める機能ってないんですか?
無い。自分で実装した方が早い。 String型の動的配列で代替できる可能性も考えてみることだ。
708 :
706 :2007/02/26(月) 21:53:14
>>707 ありがとうございます。
読み込む件数に比べればブランクになるデータは屁みたいなもんだからまぁ無ければ無いでいいです。
教えていただきたいのですが・・・。 海外のEmbeddedWBというブラウザのコンポーネントを使って ブラウザっぽいアプリを作ろうと試行錯誤しております。 IEなどでは大きい画像ファイルを表示する時に 自動でウィンドウサイズに合わせて画像が縮小表示されますが このコンポーネントを使って、そういったことはできますでしょうか? プロパティのどこかをtrueにするだけで実現できるとか。 あるいは他のコンポーネントを使った方が簡単にできるとか。 ちょっとしたヒントでもいいので どなたか何かご存知であれば、教えていただけないでしょうか?
標準の TWebBrowser を使わない理由ってなに?
>>709 実行ファイルのファイル名(プロセス)がiexplore.exeじゃないと
イメージツールバーとオートサイズは有効にならなかったはず
>>701 forループをbreak、gotoで抜けた場合に限り
ループを抜けた値が保持されるよ
その場合だと i = x の条件を満たしてループを抜けた時に限り
iの値はxとなる
それ以外でループを抜けた場合はiの値は不定
1000かもしれないし0かもしれない
普通にwhile文を使えばいいのでは?
ある文字列の中にある文字が何個あるかをカウントしたいんですが、forループで自分でカウント取るしかないんでしょうか?
そーですね。
AnsiStringで漢字をカウントだと、ちょっとメンドクサイな AnsiStrPosで検索してはカウントするかな
作って三田 こんな漢字化? var iCount: Integer; sText, sSubStr: String; begin iCount := 0; sText := 'あいうえこあかきくけこさしあすせそあ'; sSubStr := 'あ'; while AnsiPos(sSubStr, sText) <> 0 do begin Inc(iCount); sText := Copy(sText, AnsiPos(sSubStr, sText) + Length(sSubStr), Length(sText)); end; ShowMessage(IntToStr(iCount) + '個見つかりますた。'); end;
こうだろう。 var sl:TStringList; begin sText := 'あいうえこあかきくけこさしあすせそあ'; sSubStr := 'あ'; sl:=TStringList.Create; sl.Text:=StringReplace(sText,sSubStr,#13#10+sSubStr,[rfReplaceAll]); ShowMessage(IntToStr(sl.Count-1)+'個見つかりますた。'); sl.Free; end;
>>718 巧いけど、先に CR/LFを殺してからやらないと、既にCR/LFが入ってるとマズイよ
そっちの方が簡単だね TStringList.StrinReplaceはクソ遅いから 文字列が長くなるとかなり時間喰うのがアレだけど まあ、俺が作ったやつだってString使ってるんだからあんまり変わらんか
sSubStrにCRLFが入ってるかもな。
漢字コードの1バイト目、2バイト目を意識して無いと
って書いてたら
>>718
723 :
718 :2007/02/27(火) 17:04:52
もっと色々突っ込んでくれ。
まずは力を抜いて四つん這いになるんだ
725 :
709 :2007/02/27(火) 17:26:35
>>710 >標準の TWebBrowser を使わない理由ってなに?
見た目が洗練されていなかったというのが、確か乗り換えた理由だったと思います。
たとえばGoogleの画面を開いたときに検索ワードの入力ボックスが
XP風に簡単に設定できたので、EmbeddedWBを使うようになりました。
EmbeddedWBならプロパティのその他→UserInterfaceOptionsの
EnableThemesをtrueにするだけで簡単に見た目をXP風にできます。
726 :
デフォルトの名無しさん :2007/02/27(火) 17:26:53
delphi6.0のCDは持っているのですが、CDkeyがなく、ボーランドのサイトでkeyを取得しようとしたら、7.0は取得出来るのですが、6.0のCDkey は取得出来ませんでした。ボーランドの英語のサイトで、リンク先からCDkeyが取得できると書いてるのにそのリンクがクリックすると存在しないページになってるみたいで。 自分にだけ出来ないのかもしれませんが… どなたか、取得の仕方を教えてください。もしくは、delphi7.0のダウンロード出来る場所を教えてください。
>>726 Personal版と言わないと誤解買うぞその書き方
D7の無料パーソナル版は、少なくとも日本語版では存在しない。
D6については、ぐぐってわからんようだったら、Borlandに電話した方が早い。
728 :
709 :2007/02/27(火) 17:34:42
>>711 ご教授いただきありがとうございます。
アドバイスを参考に自分なりに色々工夫してみます。
×ご教授 ○ご教示
>>729 マジレスしてやると、教授でも間違いじゃない
731 :
デフォルトの名無しさん :2007/02/27(火) 18:12:46
>>732 現在、登録系をいじっているみたいね。
つながらない所が多い。
俺も試しにやってみたが
そのページからアクセスしても、キーは取得できないみたい。
電話かねー。
Button1Clickで作成したオブジェクトがnilかどうかButton2Clickでチェックしたいのですが どの様なコードを書けば良いのかお願いします。 根本的に間違っていそうですが以下のコードだとnilが返ってきませんでした・・・ var p: Pointer; procedure TForm1.Button1Click(Sender: TObject); var c: TStringList; begin c := TStringList.Create; p := c; c.Free; c := nil; end; procedure TForm1.Button2Click(Sender: TObject); var c2: TStringList; begin c2 := TStringList(p); if c2 = nil then ShowMessage('nilです'); end;
var c: Pointer; procedure TForm1.Button1Click(Sender: TObject); begin c := TStringList.Create; p := c; c.Free; end; procedure TForm1.Button2Click(Sender: TObject); begin if p = nil then ShowMessage('nilです'); end;
>>734 c.Free;
c := nil;
インスタンスを破棄したのにそこにnilを代入とな!?
普通にこうでいいじゃん var c: TStringList; procedure TForm1.Button1Click(Sender: TObject); begin if c = nil then c := TStringList.Create; end; procedure TForm1.Button2Click(Sender: TObject); begin if c = nil then ShowMessage('nilです'); end; どこかでc.free;
738 :
734 :2007/02/27(火) 22:48:27
>>737 さんの方法だと上手くいくのですが
ポインタを使った方法をやってみたくて
>>734 みたいなコードになりました。
どうにも勘違いしてたようで
var c, c2: TStringList;
begin
c := TStringList.Create;
c2 := c;
c := nil;
end;
と、するとc2を調べてもnilが返ってくるだろうと思ってました。
インスタンス、ポインタなどもっと調べてみる事にします。
レス付けてくれた方どうもありがとうございます。
>するとc2を調べてもnilが返ってくるだろうと思ってました。 ポインタ同士の代入は値(アドレス)のコピー var n1,n2:integer; n1 := 3; n2 := n1; n1 := 0; としても n2 がゼロでないのと同じ。
流れ豚切って悪いんですが、ちょっと教えてください。 Formを2つもつアプリを組んでます。 メインフォームのボタン押すとサブフォーム出るように組みました。 が・・! メインを最小化するとサブフォームも最小化されてしまいます。 同様に、サブフォームをアクティブにすると、メインフォームもアクティブに なってしまいます。 この辺を直すにはどうしたらいいのでしようか。 メインフォームに必要な情報いれてセットしたら、メインフォームは最小化 してサブフォームだけで作業するようなPGを作りたいのです・・。
>>742 type
~略~
protected
procedure CreateParams(var Params: TCreateParams);
override;
end;
~略~
implementation
~略~
procedure TForm2.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
Params.WndParent := 0;
end;
でいけるんじゃないか?
ぐはっ!半角スペース直すの忘れたorz
>>743 横から失礼します
長い間悩んでた事が解決しました、感謝感謝
746 :
デフォルトの名無しさん :2007/02/28(水) 11:14:48
・ImgBuffはByte型で任意のBMPデータが入っている ・iLengthは読み込むサイズ ・ImgBuff[5]となっているのは先頭5バイトは独自のデータを入れてる為 ms := TMemoryStream.Create; try ms.WriteBuffer(ImgBuff[5], iLength); ms.SaveToFile('C:\hoge.bmp'); finally ms.Free end; 上の例だとBMPデータをバイト配列から取り出すことは出来るのですが 色が白黒になってしまいます。 何が原因でしょうか?
>>746 元々は白黒じゃなかったんだよね? だったらパレットが付いてないんじゃないの?
WordのマクロをDelphiで書いて、自動実行させようとしたら、Wordのマクロ見ると:=とかpascalっぽい記述。 こんなんどうしろっつーんじゃ!!
>>748 なんか面白そうな事やってるね。 もうちっと詳しく書いてくれたら皆んなも楽しめるかも
750 :
748 :2007/02/28(水) 13:58:26
Wordで記録するとこんなマクロ。どうやってDelphiで記述すればいいのか・・。 しかも入力したとおりに記録されてないし。何これ。 Sub Macro1() ' ' Macro1 Macro ' 記録日 2007/02/28 記録者 ' Selection.TypeText Text:="こんにちは。" Selection.TypeParagraph Selection.TypeText Text:="こので。" Selection.TypeParagraph Selection.MoveUp Unit:=wdLine, Count:=2 Selection.Style = ActiveDocument.Styles("見出し 1") End Sub
>>750 それはVBAじゃないのか? Delphiでどうしたいの?
752 :
750 :2007/02/28(水) 14:15:21
この処理を、Delphiで書きたいだけだよ。
これで良いのだろうか? const wdLine = 5; var app, selection: Variant; begin app := CreateOLEObject('Word.Application'); app.visible := true; app.Documents.Add; selection := app.Selection; selection.TypeText(Text := 'こんにちわ'); selection.TypeParagraph; selection.TypeText(Text := 'こので。'); selection.TypeParagraph; selection.MoveUp(Unit := wdLine, Count := 2); selection.Style := '見出し 1'; end;
755 :
デフォルトの名無しさん :2007/03/01(木) 12:52:38
あの質問です。delphi6personalをインストールするときの、キーが分らないんです。 登録して、アンケート答えて、キーをメールで送信するってとこをクリックしてもページが見つかりませんとなってしまう。 どうすればいいですか??
インストールできません
>>755 ウェブサイトを弄っている途中みたい。
面倒だがボーランドに電話汁。
インストール番号はどうするのよ?
>>755 OS環境が許せばTurbo delphi (Explorer版)を使えば?
こっちも無料だよ
Turboはコンポ入れられないから糞
ある文字列をクリップボードにコピーしようと思ったのですが 一番最後に改行が入ってしまいます。 これはどうにもならないのでしょうか? uses Clipbrd; .... var Form1: TForm1; clip: TClipboard; tex: TStrings; ..... procedure TForm1.FormCreate(Sender: TObject); begin clip:=TClipboard.Create; tex:=TStringList.Create; tex.Add(''); end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin clip.Free; tex.Free; end; procedure TForm1.Button1Click(Sender: TObject); begin tex[0] := CurrentDirectly; clip.AsText := tex.Text; end;
function chop(s: string): string; begin result := s; whlie length(result) > 0) and (result[length(result)] in [#10, #13]) do setlength(result, length(result)-1); end; ... clip.AsText := chop(tex.Text); とかやっとけ。それからClipboardインスタンスは定義済みだから create/freeは不要。 Clipboard.AsText := で桶
つーか、そもそも procedure TForm1.Button1Click(Sender: TObject); begin Clipboard.AsText := CurrentDirectly; end; でいいんじゃ・・
766 :
デフォルトの名無しさん :2007/03/01(木) 18:22:56
TStringListを継承して独自のクラスをつくりたい… で、 Createしたときに一行目に予め注意書きみたいなのを入れるようにしたくて TMyStringList = class(TStringList) ~ public constructor Create(note: String); overload; で、実装部で constructor Create(note: String); overload; begin inherited; Append(note); end; で、なにも問題ないですか? overrideつけないといけないようですが、引数なしのコンストラクタはoverrideする元がないようですし…
横から質問スマソ TStringListって最初の行にstringを代入する時 addを使わずに tex[0] := CurrentDirectly; ってやってOKなの?
んなわけない
>>767 FormCreateのときに空文字をAddしてるから
tex[0]が使えてるだけです
length(result)て改行文字も含めた値が返るんですか?
かけあい漫才ですかwwwwww
お尋ねします。 Excelでは画面を更新する時に、ちらつきを抑えるために ScreenUpdatingプロパティをFalseにすることで実現できるのですが Delphiにもそういった機能はあるのでしょうか?
何について知りたいのかわからない フォーム?
グラフィックの描画がちらつく場合は DoubleBufferedというのがある
774 :
771 :2007/03/02(金) 09:02:50
771で質問した者です。 レスありがとうございます。 あまりにも質問が抽象的過ぎたので具体的に説明します。 エクスプローラーのようなものを作ろうとしております。 TreeViewをAlineプロパティを上下左右に変えることで 上下左右に移動できるような機能を兼ね備えたものです。 たとえばTreeViewのalineプロパティがalLeftの時にalTopに変えたら TreeViewは左から上に移動しますが、この時デフォルトでは alLeftの時の幅がalTopの時の高さになります。 しかしこのままでは、適切な高さにならない場合もあるので 強制的にプログラムで適切な高さになるように修正しているのですが、 修正しているさまがあまりにもバレバレでかっこ悪いのです。 ExcelVBAにはScreenUpdatingという機能があり、 これを使えば、見せたくないものに関しては途中の描画を見せずに プログラム実行後の最終結果だけを見せることができます。 これに類似した事をDelphiで実現することは可能でしょうか?
beginupdate endupdate かな?
>>774 TApplicationのProcessMessagesメソッドは使ってみた?
>>774 LockWindowUpdate(Form1.Handle);
try
(処理)
finally
LockWindowsUpdate(0);
end;
>>766 オーバーライドは継承元のクラスのCreateメソッドが仮想メソッドか動的メソッドの場合にだけ関係しますので
ここでは気にしなくて結構です.
このクラスではパラメータ無しのCreateを記述することもできて実行すると継承元クラスのCreateが呼び出されますが
これは想定した仕様ですか?(もしそうなら問題ないと思います)
779 :
766 :2007/03/02(金) 20:08:25
>>778 そうですね、パラメータ無しのCreateを呼んだときは何かデフォルトの文字が入ってるような感じにしてごまかそうかと思ってます。
無しのCreateにもoverloadつけてデフォの値をいれても(パラメータ、有り、無し2つのCreateを書いてしまっても)問題はありませんか?
オーバーロードする必要なんて無いような気がしてならない。
overrideとoverloadをごっちゃにしているような気がしてならない。
782 :
771 :2007/03/02(金) 23:54:26
783 :
766 :2007/03/03(土) 09:58:34
引数ありのCreateと無しのCreateではoverloadしなくちゃならないかな、と思っただけ。 overrideは継承した子クラスでの手続の振る舞いを変えるための上書きみたいなもんでそ? うっふん♥
言われてみれば、コンストラクタはoverloadしなくて複数宣言出来るのは、勘違いしてもしょうがないな overloadが導入される前からの設計だからしょうがないけど
横槍スマン デストラクタはどうなの?
プログラムを起動したとき、ボタンでなくてエディタにフォーカスを 移すにはどうしたらいいですか?
edit1.setfocus;
ActiveControl
>>785 デストラクタは Destroy をオーバーライド一択だろ。
だよねぇ
>>786 setfocusはFormが既にアクティブじゃないと使えない
Formが最初に得るフォーカスを指定するときは
ActiveControlを使うべし
設計時にEdit1のTabOrderを0にするというのはあり?
Print Tools/32用のチェーンストア統一伝票各種のテンプレートどっかにないですか?
Visual dBASE まだ使ってるのか・・・・
Delphi2007のDMきたお。 Delphi-PHPのチラシも入ってたんだが、「英語版日本先行販売」ってのは「日本語版後行発売」と受け取っていいのか!? PHP使いたいんだが、マニュアルやらサンプルやら全部英語だと滅入っちまう… 日本語環境では保証ありませんとか書いてるし。
>>日本語環境では保証ありませんとか書いてるし。 これかなり重要だよな マルチバイト文字環境では動作不安定とかマジ日常茶飯事