1 :
デフォルトの名無しさん :
2005/12/29(木) 23:35:29
2 :
デフォルトの名無しさん :2005/12/29(木) 23:36:48
3 :
デフォルトの名無しさん :2005/12/29(木) 23:37:28
4 :
デフォルトの名無しさん :2005/12/29(木) 23:38:06
5 :
デフォルトの名無しさん :2005/12/30(金) 00:11:05
質問です。 接続させるプログラムを使う時はServerSocketとClientSocketをつかいますよね? それを使って接続した状態で相手がアプリケーション上で行ったことをリアルタイムに受信するためにはどうすればいいのでしょうか? (カードゲームのアプリケーションで例えれば相手がフィールドのカードをずらした場合こちらにもその状態で表示させるようにする)
受信つうかアプリでイベントが起きたら相手に送信って感じじゃね
7 :
デフォルトの名無しさん :2005/12/30(金) 14:19:02
質問です アプリケーション同士で接続させるためにはどのような設定をすればいいのでしょうか?
「アプリケーション同士で接続」をもう少し詳しく。
>>7 ServerSocketとClientSocketを使う。
使い方はヘルプ参照。
ServerSocketもClientSocketも、とっくにobsoluteなんで今から作るなら Indyの方がいいかもね。
5=7 じゃないの?
>>1 お疲れ様でした.睡魔にはやはり勝てませんでした.
睡魔だけにすいま(ギャー
、i`ヽ ,r‐'ァ
`ヽ:: ::´
ヽ ヽ , -‐--、 / /
ヽ \ I:::::::I_ _ / /
ヽ ヽ i,(;;;ノI、;;;)l ,,/ , '
ヽ ` ー 、.,,ゝ´ヮ`,ノュ_, - ' r'
` 、_ / `山' /
ヽ ,r‐' _ _
ヽ 、 / ∧ ∧―= ̄ `ヽ, _
| ( ∵. ・( 〈__ > ゛ 、_―
ヽ ー=- ̄ ̄=_、 (/ , ´ノ
`iー__=―_ ;, / / / ←
>>12 -=_二__ ̄_=;, / / ,'
/ / / /| |
/ / !、_/ / 〉
/ _/ |_/
ヽ、_ヽ
gzipファイルをTStreamに展開したいんだけど、zlibを使ってそのまま開こうとすると gzipファイルのヘッダを解釈してくれないらしく、エラーになっちゃう。 (圧縮もヘッダをつけないのでアーカイブソフトで取り扱えない) zlibのページにもRFC 1950 1951準拠とあるので 1952には対応してなくて正しいのだろうけど、 対応してるコンポーネントどっかにないでしょうか? 統合アーカイバプロジェクトのはいったんファイルに開くので使いにくいし、 パフォーマンス落ちるのでボツになりました。
16 :
14 :2006/01/02(月) 01:50:25
他のソフト(例えば格闘ゲームとすると)を起動して使用している上で バックグラウンドで動いて例えば「a」キーが押されたら特定のコマンド(ab↑↓とか) を動かしてる格闘ゲームのほうに反映させるようなプログラムってのは Delphiで書けるようなモンでしょうか?
出来る
フォームをリサイズするとComboBox上のテキストがすべて選択されてしまうのですが、 防ぐにはどうすれば良いのでしょうか。 Delphi6 Personalです。
そんなことはない
言い方が悪かったです。配置されているComboBoxのTextが選択されてしまうということです。
そんなことはない
どうやらPageControl上に置いてるとなるようです。 どうしたもんかなー。
そんなことはない
25 :
デフォルトの名無しさん :2006/01/02(月) 21:20:39
time関数について質問です。 検索してtime関数はdouble型で1899年の12月30日から現在までの日数を返すとわかったのですが、 time関数は現在時刻を返す関数とも書いてあり、ちょっと混乱しています。 これは例えば、AM6:00のことを 0.24991 PM3:00を 0.54000 のように表しているということでしょうか? またtime関数の数値を確認するサンプルコードなどあればご教示いただければ幸いです。
FloatToStr(Time);
27 :
25 :2006/01/02(月) 21:34:23
すいません初心者なのでそのコードをどこに入力すればよいのかもわかりません。
28 :
デフォルトの名無しさん :2006/01/02(月) 21:42:27
>>7 です
ServerSocketとClientSocketについて詳しいサイトとかありませんか?
procedure TForm1.Button1Click(Sender:TObject); begin ShowMessage(FloatToStr(Time)); ShowMessage(FloatToStr(Time)); end;
30 :
25 :2006/01/02(月) 22:08:52
レスありがとうございました! 数値確認できました。
31 :
23 :2006/01/02(月) 22:51:59
ようやく詳しいことが分かってきました。 ComboBoxのAnchorsのRightかBottomをTrueにした状態でフォームをリサイズしたとき、 Textの文字列がItemsの中に存在するとき、Textがすべて選択されてしまうようです。(ノ▽`)
program test(input,output); begin writeln("hello") end.
33 :
デフォルトの名無しさん :2006/01/02(月) 23:14:23
Delphiで作ったソフトが実行してるか終了してるか監視するソフトを作りたいのですが、終了を判断するAPIがわかりません。 名前を教えていただければ、Googleで色々探せるのですが。 どなたか教えてください。
WaitForSingleObject
35 :
デフォルトの名無しさん :2006/01/02(月) 23:25:31
>>34 ありがとうございます
実行したアプリケーションの終了を検知するには等、いろいろ参考になるサイトがヒットしました。
36 :
23 :2006/01/02(月) 23:37:48
現状はComboBox1.SelLength := 0;のようにして回避することにしました。 もしもっと別の良い方法がありましたら、レスしていただきたいと思います。 ありがとうございました。
たんにフォーカスを移動するだけのような
シッ
それフォーカスを移動させるだけじゃ直らんよ。
じゃバグなんだね
41 :
23 :2006/01/02(月) 23:58:28
>>37 レスありがとうございます。
>ComboBoxのAnchorsのRightかBottomをTrueにした状態
にしている時、フォームをリサイズすると配置されているすべてのComboBoxのTextが
選択された状態になります。その状態で例えばMemo1にSetFocusしても選択された
状態が変わる事はありません。
ComboBox1.SetFocus;
Memo1.SetFocus;
とすれば一応直りますが、それだったらSelLength := 0したほうがいいかなぁという
状況です。
42 :
23 :2006/01/03(火) 00:00:36
>>40 私もバクだと思います。
なので、良い回避方法はないかとここで尋ねてみました。(;´▽`A)
QC に登録して、フィックスしたパッチを出してもらう。・・・ってことは絶望的にあり得ないな。 某は放置が得意だし。
条件はTextの文字列がItemsの中に存在するときにコンボボックスをリサイズ、だな。 VCでやっても起きるんで、ラップしたVCLが余計なことをしてるわけじゃなくて、Windowsのコンボボックスコントロール自身の仕様(バグ?)なだ。
>>43 Pro 以上でソースがあれば自分で間単に挙動を変更できると思うが。
どういうふうに?
簡単にFix出来るものをなぜ放置するんだろうか?
> Windowsのコンボボックスコントロール自身の仕様 VCL のバグじゃないからかぁ・・・>放置
49 :
23 :2006/01/03(火) 02:21:08
>>44 ありがとうございます。
なるほど・・私にはどうしようもなさそうなので一応SelLength := 0;で回避することにします。
Delphi6のTMediaPlayerコンポーネントについて質問します。 これでMP3を演奏する場合、deviceTypeをdtAutoSelectにするしかないのでしょうか?
全部ためしたらいいのでは?
52 :
デフォルトの名無しさん :2006/01/03(火) 13:02:39
質問があります。 以下の関数名は〜Atとか付いていますけど、 このAtって一体何の略でしょうか? GetHitTestInfoAt IndexOfTabAt ControlAtPos
( ゚д゚ ) _(__つ/ ̄ ̄ ̄/_ \/ /
略じゃなくて英語の at じゃないかと
>>52 at [ət, 強æt]
━━ prep. ((位置)) …において, …で (at home); ((時・時節・年齢)) …に, …で (at noon);
((状態・情況・従事)) …中で, …して (at work); ((方向・目標)) …に対して, 向って (look at it);
((径路)) …を通って; …によって, …から (come in at the window 窓から入る);
((原因)) …に接して, …で; ((代価・率)) …で (at a low price 安い値段で);
((仕方)) …で, …に従って (at will 思うままに); ((動作の仕方)) …に, …で (at a gallop 大速力で).
at it again また始まって(いる).
at that それぐらいで; しかも; それにもかかわらず; その結果.
at this これを見て[聞いて].
at mark 【コンピュータ】アット・マーク ((@のこと)).
At Work 【コンピュータ】マイクロソフト社のOAシステムアーキテクチャー.
56 :
52 :2006/01/03(火) 14:24:01
>>54-55 ありがとうございます。
てっきり何かの略かと思っていました。
57 :
デフォルトの名無しさん :2006/01/03(火) 15:14:43
Delphiでできないことを教えてください。
58 :
デフォルトの名無しさん :2006/01/03(火) 15:37:13
57>> 君にできないこと=Delphiでできないこと
子作り
60 :
デフォルトの名無しさん :2006/01/03(火) 21:19:51
質問があります プログラムの中のものをドラックして動かせるようにするのはどうすればいいのですか?
プログラムの中のもの・・・?
>>59 WinControlにInsertするとChildになりますよ。
動的にも性的にも作れるな
64 :
デフォルトの名無しさん :2006/01/04(水) 08:46:53
>>61 トランプゲームとかのカードをドラッグで動かす方法を教えてください。
マウスボタンが押されたらドラッグ開始。 ドラッグ中にマウスが動いたらカードを動かす。 マウスボタンが離されたらドラッグ終了。
66 :
デフォルトの名無しさん :2006/01/04(水) 09:38:52
>>65 ありがとう
それはなんて言うプロパティを使いますか?
トランプゲームのカードというクラスはデフォルトでは存在しないので、 あなたが自作することになります よって、そこで使われるプロパティ名はあなたが決めるのですよ。
>>66 気合と力技
とりあえずOnMouseDownとかでごにょごにょやってみろ
わからんかったら又くればいい
69 :
デフォルトの名無しさん :2006/01/04(水) 20:10:20
> 気合と力技 これからの回答のテンプレになりそうだな(笑 回答の質も下がったもんだな
人いないし・・・冬休み中なのに厨房も湧いて来ないし・・・ 下層のビンボ学生や趣味グラマのユーザは死滅なのかも
ビンボ人はVSExpressに行くだろうさ、それは。 メーカにこだわるほど長くやってもないだろうし。
73 :
デフォルトの名無しさん :2006/01/05(木) 16:51:36
>>69 です
全然わからん
オラに力を分けてくれ
たぶん間違いないかと
わかってて
>>74 を書いたw
マルチじゃなきゃ答えを書こうと思ってた
それにしても質問の仕方が、典型的な教えて君だな
向こうのBBSで誰か回答してくれたらいいですね^^
案の定、こんなレスがついてる
>意味がわからないのでもう少し具体的にお願いします。
>>73 はリア厨なんだろうけど、質問するときはもう少し詳しく書かないとな
せっかく
>>65 や
>>68 がヒントを出してるのに、それに対する答えが
>>73 じゃなぁ…
たぶんやりたいことは「動かせる」じゃなくて「移動させる」だろ?「動かせる」じゃ意味が多すぎ
自分でどこまでやったのか書け。まさか何もやってないのか?
コンポーネントを「移動させる」方法は知ってるのか?
ドラッグ&ドロップしたときにイベントを起こす方法を知らないのか?
そもそもこの程度の事は、わざわざ掲示板で聞くよりもググった方が早いぞ
はぁ…まるで赤ん坊を相手にしてるようだ…
まぁ落ち着け 何もそこまで切れるこたぁないと思うぞ
ここはくだすれだという事を忘れては困る 正月出勤でもあったのか?
delphi6 personalを落としてきて、使用許諾コードを取ろうとしているのですが、 何度やっても登録確認のメールが届きません。 本体はちゃんと起動するから、そのまま放置でもいいんでしょうか? 起動時のスプラッシュウィンドウに、[使用許諾未完了]と出るくらいで プログラム自体はちゃんと実行できています。 Delphi 6 使用許諾コードの取得プログラム(改訂版)も試してみましたが、 [CRCが一致しません]と表示され、何も起きません。
81 :
デフォルトの名無しさん :2006/01/05(木) 21:22:57
var ch Byte; begin ch := $ end. この$ってどういう意味ですか? 何かの文字ですか?
そのコードエラー出ませんか
$以下16進数の数字を入れ忘れてるのかな?
すいません、元はレジストリを弄るコードです var Reg : TRegistry; data : Array [0..11] of Byte; begin Reg := TRegistry.Create; Reg.RootKey := HKEY_CURRENT_USER; Reg.OpenKey('key', false); Reg.ReadBinaryData('data', data, 12); data[2] := $; data[3] := $; Reg.WriteBinaryData('data', data, 12); Reg.CloseKey end. $ってなんなのかな、と。
85 :
デフォルトの名無しさん :2006/01/05(木) 22:03:17
hogehoge:Array[0..7] of fugafuga; ↑ これをそれより前に定義した定数に置き換えることできない?
実際に置き換えてみれば分かるよ
87 :
デフォルトの名無しさん :2006/01/05(木) 22:14:06
>>86 定数式が必要です って言われる
定数式ってconst uhouho:integer=7; これ 混ぜれんの?
89 :
デフォルトの名無しさん :2006/01/05(木) 22:18:47
>>88 うおお!!
const hoge=8;
この記述は知らなかった!ありがとう!
俺まだまだ根本的な構造がわかってないなぁ・・・
>>88 わかりました。
このままではコンパイルできないってことですね。
ありがとうございました。
91 :
デフォルトの名無しさん :2006/01/06(金) 01:16:31
知らぬは一生恥って言うし・・・質問させてくれー data:pointer;で、型は何が入るかわからない。 integerかも知れないし、自作のクラスかも知れん。 どれにしても解放(してその後nilに)したいんだけど、このコードってどう? もしかして超池沼? procedure reset; begin if data<>nil then begin if data is TObject then begin TObject(data).Free; end else begin Dispose(data); end; data:=nil; end; end;
a: TObjectList; b: TObjectList; a := TObjectList.Create(True); b := TObjectList.Create(True); としている時に、 a.Assign(b, alCopy); とすると、bが保持してるポインタリストだけがコピーされますか? それともbが保持してるオブジェクトの実体ごとクローンが生成されます?
実体ごと
>>91 クラスはそれでおkだが、
配列やレコード等の解放時にはメモリリークする可能性がある
96 :
デフォルトの名無しさん :2006/01/06(金) 01:33:42
嘘だ。今、ソース追ったけど、オブジェクトの参照だけがコピーされるような気がするんだけど。 実態毎のクローン作成されないでしょ。つまり、ディープコピーじゃなくてシャローコピーじゃ??
97 :
デフォルトの名無しさん :2006/01/06(金) 01:33:49
>>94 あ そうか。考えてなかった。。。ありがとう。
てか pointer型にisは使えない って言われてしまった。
class(TObject)かどうかも調べられない。困ったな。
全部に対応するには、解放用イベントを用意しておくしかないかな。
>>97 TObject(data).hoge みたいにキャストしてメンバにアクセスすると
例外がでた気がするから、それ拾ったら?
try
TObject(data).Free;
except on E何とか do
Dispose(data);
end;
99 :
デフォルトの名無しさん :2006/01/06(金) 01:40:16
だから、クラスでも実体が複製されないよ。
>>98 あああああ!頭いいな!!!
例外を判断に使うなんて発想ねーよwwww
超ありがとう その方向性で行く
101 :
デフォルトの名無しさん :2006/01/06(金) 01:44:29
自作自演かよ。 100>>
102 :
デフォルトの名無しさん :2006/01/06(金) 01:46:10
たった一人の煽りで板全体を性格悪すぎと決めつける君もどうかと 2chにいるなら煽り耐性くらいつけなさい
104 :
デフォルトの名無しさん :2006/01/06(金) 01:51:08
96,99,101だけど、 本当にTObjectListはクラスでも実体は複製されないからね。 あくまで、参照だけがコピーされるだけです。 って、他の人の質問だったのか・・俺の事なら俺が悪かった。 てっきり、92の人かと。
今ちょっと試してみたけど、EAccessViolationだった。 よく考えてみると data := Pointer($乱数); みたいなめちゃくちゃなアドレス入れられた場合も考慮しなけりゃいけないのか この場合はDisposeしてもEAccessViolation 結構めんどくさそう。
106 :
デフォルトの名無しさん :2006/01/06(金) 01:57:21
まぁ、そもそも、オブジェクトとIntegerとかを一緒に扱おうという方向性が 問題だと思うが。
入らないようにすれば良い
108 :
デフォルトの名無しさん :2006/01/06(金) 02:21:05
>例外を判断に使うなんて発想ねーよ。 まぁ、悪い発想なら、発想しない君の方が正常だと思うが。
これ
ねぇねぇ、AdditionalのところにLabeledEditってあるじゃん? 普通のEditにLabelがくっついた感じのコンポーネント それと同じようなのでLabeledComboBoxってないかな? ComboBoxの上にLabelがくっついた感じのやつ 探してるんだけどないんだよね〜。誰か知らない?
それくらい自分で作りなされ 名前とか気にしないなら10秒で作れると思う
>>111 1. 自作する。
2. ComboBoxとLabelを配置する。
3. PCを窓から投げ捨てる。
10秒って、、アンタプロ並ですね〜 どっかにLabeledEditのソースがあれば真似できるかなー?
>>87 型付き定数って変数として扱われるんじゃないっけか
定数はコンパイル時にそのまま展開される 型付き定数はコンパイル時に参照アドレスが展開される
118 :
114 :2006/01/06(金) 05:01:54
ラベルつきComboBoxを複数動的に生成して、それらをTComponentListで管理するので、 ComboBoxとLabelをまとめた1つのコンポーネントで管理したい 新しい事に挑戦しないと進歩できない(今までは2の方法でやってきた)
THogehoge = class Label: TLabel; ComboBox: TComboBox; constructor Create; destructor Destroy; virtual; end; constructor THogehoge.Create; begin Label := TLabel.Create(nil); ComboBox := TComboBox.Create(nil); end; //略 ・ ・ var HogeList: TList; begin HogeList.Add(THogehoge.Create); //略 ・ ・ end; ちょっと手抜いたけど、こんな感じじゃダメなん?
ところどころ何か抜けたりおかしかったりするけど、その辺は察して
TPopupActionBarって何に使うものなんでしょうか。 ヘルプにも記述がないし・・・ TPopupMenuとの違いがいまいち。
122 :
デフォルトの名無しさん :2006/01/06(金) 12:19:46
memcpyみたいに、 直接メモリからメモリへコピーする方法おしえてくだせぇ!
123 :
931 :2006/01/06(金) 12:24:44
質問させてください。 TListViewのOnMouseClickイベントをつかってListViewに列挙されたテキストファイルを開くようなものを作ってみました。 それで、ListView(List形式)に列挙されている部分をクリックするとちゃんとファイルがmemoの部分に表示されるんですが、ListViewのファイル名がない白地の部分をクリックすると 「アドレス000004に対する読み込み違反がおきました」 とか、エラーが出てしまいます。 選んだItem.Selected.IndexがItems.Count以内になるように if Item.Selected.Index<Items.Count then (読み込み) みたいにしたけど、効き目ありませんでした。どこかのプロパティを設定するのかなと思って探したけどわかりません。 検索したけどモリタポが足りませんって出るので… すごく初歩的なことなのかもしれませんが、よろしくお願いします。
>>122 Move手続き
>>123 onMouseClickイベントの先頭に
if ListView1.ItemIndex = -1 then
exit;
125 :
122 :2006/01/06(金) 12:52:13
126 :
123 :2006/01/06(金) 13:01:26
127 :
123 :2006/01/06(金) 13:16:42
>>124 さんへ
TListViewにItemIndexプロパティはありませんでした・・
代わりに
if ListView1.Selected.Index=-1 then exit;
ってやってみたんですが、おんなじように
「アドレス000004に対する読み込み違反がおきました」
って出てしまいます(; ;)
ItemIndexが0〜IndexCount-1内なら処理しないでOnMouseClickイベントから抜けるって、
文法的にはわたしにもわかるんですが・・
>>127 > TListViewにItemIndexプロパティはありませんでした・・
アッー!りえない
オブジェクトインスペクタにはないぞ
コードに書くんだぞ
どーしてもSelected使いたければ
if lvRecordW.Selected = nil then
exit;
コンソールアプリを作ったとき、 コンソールの右上の×を押されたことを知るにはどんな方法がありますか? フォームでいうOnCloseやOnCloseQuery等にあたるものが欲しいです
130 :
デフォルトの名無しさん :2006/01/06(金) 14:01:37
>>129 コンソールって、DOS窓自体はアプリじゃないから、
自分の外の事はわからないんじゃない?
猫リセットにカートリッジのプログラムで抵抗するような。
131 :
123 :2006/01/06(金) 14:04:14
>>128 さんへ
TListBoxにはItemIndexありますけど、TListViewには無いみたいです・・
で、if lvRecordW.Selected = nil then exit; を使ってみたらうまくいきました。
ありがとうございます。Happyです!
>>130 いや、特に×にこだわってはいなくて、
別にAlt+F4でもよくて、そこに書いたとおり終了時のタイミングが欲しいだけです
whileループでしばらく時間かかる処理しようとしてまして、
その間に×押された場合に色々処理挟みたかったもので・・・
133 :
デフォルトの名無しさん :2006/01/06(金) 14:48:49
プロセス監視するとか
WM_CLOSEメッセージを捕まえるとか
135 :
デフォルトの名無しさん :2006/01/06(金) 15:09:23
Stringから改行コードの前まで取得する方法はありまつか?
PCharにキャストして#13#10が出るまで IncするなりCharNextするなりすりゃ良いんじゃね?
137 :
135 :2006/01/06(金) 15:13:19
メソッドでは無いんですか。
138 :
デフォルトの名無しさん :2006/01/06(金) 15:18:31
TStringListにブチこんでCommaText使うとか
141 :
デフォルトの名無しさん :2006/01/06(金) 15:54:27
WinAPI使って、いったん外側から、自分の実行されてるコンソールに行ってから監視すればいいのかな?妄想
SetConsoleCtrlHandlerは駄目か?
143 :
114 :2006/01/06(金) 16:08:52
>>119 ウボァ、Label:TLabelを加えるだけでいいのか
クラスを自作するのは初めてなんで、いろいろ調べながら解読したいと思います
どうもありがとう
>>142 うは、まさにそれでした
てか終了要因まで引数で分かるんですね
ありがとうございました
フォームからマウスが離れたイベントって取れますか?
146 :
デフォルトの名無しさん :2006/01/06(金) 19:42:37
TDrawGridの指定したCellを再描画する方法ありますか? 具体的には、DrawCell(ACol, ARow, ARect, AState)コールしたいんですが、 引数多杉orz
147 :
146 :2006/01/06(金) 19:44:54
procedure Repaint; override; ってのはあるみたいですね。 でも、1セルだけ再描画かけたいんですが。
C言語のstructに相当するのは recordとpacked recordのどちらなんですか? Cで利用するDLL作りたいのですが…
149 :
デフォルトの名無しさん :2006/01/06(金) 20:51:02
Cの事詳しくないけど、 Cで#pragmaでアライメントって調整できなかったっけ? 処理系によって違うのかな? だから、Delphiでpacked recordで宣言したら、それにあわせて、 Cで宣言する。 ただのrecordで宣言したら、それにあわせて、Cで宣言する。
150 :
デフォルトの名無しさん :2006/01/06(金) 20:52:32
あ、でも、アライメント指定できなかった、VBの事考えると、 どっちがよかったのか忘れた。 ごめん
151 :
デフォルトの名無しさん :2006/01/06(金) 21:03:06
で、 146> OnDrawCellイベント使っちゃ駄目なの? って、そういう意味じゃなくて、強制的に再描画かけたいのなら、 んー、どうやるんだろ?とりあえず、OS的には、ウィンドウのクライアント領域が 無効にならないと再描画されないわけで、repaintメソッド呼び出すとか。
152 :
デフォルトの名無しさん :2006/01/06(金) 21:08:24
ごめん、repaintの事自分で書いてたね。 特定のセルだけ、再描画したいなら、Cellの座標(矩形座標)計算して、 WindowsAPIのInvalidateRect呼び出すしかないんじゃ??
153 :
デフォルトの名無しさん :2006/01/06(金) 21:25:09
例外ダイアログを出さずにアプリを終了させる方法は無いでしょうか。 Delphiで実行させると例外ダイアログが出ずに終了しますが、 出来上がった実行ファイルを終了させると例外ダイアログが出てしまうんです。
154 :
デフォルトの名無しさん :2006/01/06(金) 21:29:50
Delphiの利点はVB並の接しやすさで、ネイティブコードを吐けて、尚且つインラインアセンブラが使えるところだ。 この点、C#は駄目だね。 ただし、64Bit時代のVisualC/C++にはインラインアセンブラは搭載されないようだし、別にそれが欠点になるということはないようだな。 でもあれだろ、.NETはユーザーの利便性というより、MS支配のためだよな。
>>153 それってアプリがデバッグされているかどうかに依存してしまってるってことっしょ?
ダイアログを止めるより、原因突き止める方が先では
>>154 なにをいまさら、かつ、レベル低すぎ、かつ、すれ違い
>>153 SetErrorMode(SEM_NOGPFAULTERRORBOX); は?
158 :
デフォルトの名無しさん :2006/01/06(金) 22:57:11
>>157 実行ファイルでも例外ダイアログが出なくなりました。
ありがとうございました
159 :
デフォルトの名無しさん :2006/01/06(金) 23:14:40
そんなんでいいんかぁああー〜〜
確かにそれ根本的な解決になってないような・・・対症療法の見本
市販ソフトでもこういう事ってあるの? バグ放置→どんなバグか誰も知らない→もしかしたらテラヤバスなバグ おら、なんだか尿意がしてきたぞ
何が言いたいかさっぱり分からんがあるだろ
Windowsなんてどうせ潜在的にとんでもないもん隠れてるだろ
それを言っちゃぁジェンキンス
>>145 フォームでマウスをキャプチャしていたら正確かつ楽に取れる。
多少のタイムラグがあっても良いならタイマを、
面倒でも良いならグローバルフックかな。
>>165 ありがとー。
SpecialLaunchみたいな動作をさせたいのです。
167 :
デフォルトの名無しさん :2006/01/07(土) 16:50:54
var NotifyData: TNotifyIconData; begin with NotifyData do begin cbSize := SizeOf(TNotifyIconData); Wnd := hWndTrayIcon; uID := 0; uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP; szTip := Toolname; hIcon := Application.Icon.Handle; uCallbackMessage := WM_MY_TRAYICON;// 独自に定義 end; Shell_NotifyIcon( NIM_ADD, @NotifyData ); end; この szTip に Toolnameの文字列を入れたいのですが、 [StringとArrayには互換性がありません]とエラーがでます。 szTip := Toolname; をどのように書き直せばよいでしょうか。
169 :
デフォルトの名無しさん :2006/01/07(土) 17:05:24
>>168 StrPCopy(szTip, Toolname);
できました、感謝!
170 :
デフォルトの名無しさん :2006/01/07(土) 17:23:58
初歩的な質問で悪いけど THogehoge = Class(TObject) private fuga
171 :
デフォルトの名無しさん :2006/01/07(土) 17:26:22
うあ インデントしようとしてtab押した後 改行しようとしたら送信ボタンがへこんだ>< THogehoge = class(TObject) public constructor Create; ←───┐ destructor Destroy;override; .←┴─この二つって必須? end;
172 :
デフォルトの名無しさん :2006/01/07(土) 17:30:23
必須じゃないよ。
173 :
デフォルトの名無しさん :2006/01/07(土) 17:34:56
う〜〜わ〜〜〜 からっぽのCreate、Destroyを書き続けてきた俺は!!!??? ありがとうっ 呪縛から放たれるお( ^ω^) 羽ばたけ俺
174 :
デフォルトの名無しさん :2006/01/07(土) 19:34:31
あともうひとつ THogehoge = class(TObject) fuga: TFuga; ←───これってprivate? public? private fugafuga public foofoo end;
175 :
171,173 :2006/01/07(土) 19:38:16
ヘルプでフィールドを調べてみろ
>可視性指定子が指定されていないメンバーには,1 つ前のメンバーと同じ可視性が与えられます。 >クラス宣言の先頭で定義されているメンバーで可視性が指定されていないものについては, >そのクラスを {$M+} 状態でコンパイルした場合,または,{$M+} 状態でコンパイルされたクラスから派生させた場合は, >デフォルトでパブリッシュの可視性が与えられます。それ以外の場合, >このようなメンバーにはパブリックの可視性が与えられます。 ヘルプより転載
178 :
デフォルトの名無しさん :2006/01/07(土) 20:10:36
>>173 には関係ないかもしれないけど、
からっぽのCreate、Destroyと定義すらしないのでは動作が違うよ。
そりゃ初耳だ 具体的にはどう違うん?
181 :
173 :2006/01/07(土) 20:57:46
フォームにボタンを2個置いて以下入力。 interface TForm1 = class(TForm) (略) end; TA = class(TObject) public constructor Create; end; TB = class(TA) end; TC = class(TA) public constructor Create; end;
続き implementation (略) constructor TA.Create; begin Form1.Caption := TimeToStr(Now); end; constructor TC.Create; begin end; procedure TForm1.Button1Click(Sender: TObject); begin TB.Create.Free; end; procedure TForm1.Button2Click(Sender: TObject); begin TC.Create.Free; end;
Button1をクリックすると、FormのCaptionが現在時刻に更新されるけど、 Button2をクリックしても、何もおきない。
>constructor TA.Create; >begin >Form1.Caption := TimeToStr(Now); >end; >constructor TC.Create; >begin >end; 『空』ってのは inherited すらしないと受け取っていいのか?
inheritedしないんですか、そうですか…
187 :
デフォルトの名無しさん :2006/01/07(土) 21:22:36
185>> そう、上位クラスのコンストラクタは呼び出されない。
普通inheritedは当然あるものとして、それ以外のコードがないと空と言うと思うが
まぁ継承しなければそりゃ動作も変わりますよ でも173はさすがにinheritedを除いて「からっぽ」と言ってたと思う ・・・と信じたい
190 :
デフォルトの名無しさん :2006/01/07(土) 21:32:42
189> 俺もそんな気がする。172でそこまで考えずにレスしちまった。 さすがに、面倒とか言ってたらかCtrl+Cでメソッド定義を生成してないと思うし。
>TC = class(TA) >public >constructor Create; >end; これでCtrl+Shift+Cしてもinheritedは自動的には入らない@D7
192 :
デフォルトの名無しさん :2006/01/07(土) 21:48:32
191> そうだった?ごめん、適当な記憶で書いちまったから。 でも、Createを仮想メソッドにしてたら、入ると思う。
レスをつける時の心得 ・質問文を熟読する。はっきりと理解できない箇所は問い直す。 ・書かれたコード、提示するコードを実際に検証する。 ・書いたレスは投稿する前に内容をよく確認する。
レスアンカーも何とかならんのか
195 :
デフォルトの名無しさん :2006/01/07(土) 22:02:44
193> まぁ、その通りだけど、あんま厳しく管理しないでくれ、 想像だけど、ここの人たちは、大半が暇つぶしにレスしてると思うから、 厳しくすると検証とか面倒だから、レスする人いなくなると思う。 194> レスアンカーって何??
196 :
デフォルトの名無しさん :2006/01/07(土) 22:03:29
あ、 194> ↑のことね。あれ、どうやってリンクするのかわからん。
「からっぽ」にinheritedは含まれるのね。 「くだすれ」なので一応書いといた方がいいかなと。 すまんかった。
199 :
デフォルトの名無しさん :2006/01/07(土) 22:14:26
それができん。ということで、
テストします。
>>198
200 :
デフォルトの名無しさん :2006/01/07(土) 22:15:26
おお、2個つければよかったのか、
201 :
173 :2006/01/07(土) 22:30:18
え・・・・・・inheritedしなきゃ駄目? orz...............
偉そうな事言ってるけどさぁ、いくらプログラマとしてのスキルがあってもマナーを知らない奴は公共の掲示板に書き込む資格は無いと思う。 それにアンカーの打ち方とか基本的なことはヘルプ見るなりググるなりすればいいだけの事でしょ? 2ちゃんねるは特にROMMERが多いんだからそう言う点に注意してから書き込んだ方がいいよ。
203 :
デフォルトの名無しさん :2006/01/07(土) 22:49:19
>>202 アンカーの事叩くのおかしいだろ。
2chに書き込む資格なんて必要ないのとおんなじで、
初心者だって書き込んだっていいじゃないか。
そういうのが嫌いなら、誰かが反応する前に「ぐぐれ」って3文字打てばいいんだ。
レスアンカーの付け方に決まりなんてないから好きにすればええやん 分からないわけじゃないんだし そんなことより173を一発殴ってもよかですか?w
205 :
173 :2006/01/07(土) 22:53:43
/\___/ヽ ヽ / ::::::::::::::::\ つ . | ,,-‐‐ ‐‐-、 .:::| わ | 、_(o)_,: _(o)_, :::|ぁぁ . | ::< .::|あぁ \ /( [三] )ヽ ::/ああ /`ー‐--‐‐―´\ぁあ
>決まりなんてない あります
>>としないとリンクされないとでも言いたいんだろうけど、 それは決まりじゃなくて単にcgiの仕様 むしろリンクにならない方が転送量削減に貢献して運営も喜ぶんじゃない?(w
>>207 そこまで追求するなら、
専ブラが対応してて cgiに負荷がかからない
>1000
これが一番良い( >一個ね
専ブラでもリンクタグはくっ付いてくるから別に変わんないよ
173のキャラが初心者に似つかわしくなくおもろい件について
くだすれ2ch(超初心者)
212 :
173 :2006/01/07(土) 23:13:10
>>210 ありがとうっ
今度からインヘるとするよっ また来るぜ! (`・Д・´)ノシ
よし、次からまた1発ずつ・・・
ROMMER(笑)
215 :
デフォルトの名無しさん :2006/01/07(土) 23:47:57
>偉そうな事言ってるけどさぁ、いくらプログラマとしてのスキルがあってもマナーを知らない奴は公共の掲示板に書き込む資格は無いと思う。 だからさぁ、それは人それぞれのものさしがあるわけでしょ、ある程度の幅が。 だから、君のものさしですべてを見ないでくれる。
216 :
デフォルトの名無しさん :2006/01/07(土) 23:51:12
>>206 一応、2chの決まりあるけど、
他のスレを引用するのにリンクタグをつけろなんて決まりまはない。
217 :
デフォルトの名無しさん :2006/01/07(土) 23:57:07
ほんと、自分の価値観で他人のする事でどうこういう輩多いいよね。 人それぞれ考え方とか違うのに。 だから、基本的に自分のルールはずれた人現れても俺からは何も言わん。 言われたら言い返すけど。 そんなに自分のルールで運用したければ、自分で掲示板作れって感じ。
218 :
デフォルトの名無しさん :2006/01/08(日) 00:25:27
だから、色んな人が集まるんだから、ある程度の自分のルールにはずれた人が くると思って対処しろよ、リンクタグはそもそも付けろなんてルールなんて2chにはないし、 グダグダいってんじゃねぇよ、この考え方狭いクソヤロウが。 って↑、こういうのは、2ch的には、煽りとかになるから禁止されていると思う。
2chで煽りが禁止されてるなんて初耳だ
それをいうならお前らスレ違いですよ
221 :
デフォルトの名無しさん :2006/01/08(日) 00:35:31
>>220 そんなこと言う君は全く俺の言った事わかってないな。
2chにスレッドタイトルと関係ないことを書いちゃいけない2chの決まりはない。
>>219 あ、そうなの?禁止されていないなら、俺が間違ってた。
じゃあ教えてあげますね^^ 2chではそういうのを 空気嫁 って言うんですよ^^ あ、2chの玄人さんだから当然知ってるか^^;;;;;;;;; ごめんなさいね^^;;;;;;;
223 :
デフォルトの名無しさん :2006/01/08(日) 00:41:23
おいおい、俺の意見に反論してくれよ。 この意見に。 >2chにスレッドタイトルと関係ないことを書いちゃいけない2chの決まりはない。 反論できないと問題すりかえるんだもんな。しかも、 反論できないが自分が優位にたちたいから、絵文字をなるべく多く使う。 よくいるよ君みたいな人。
225 :
デフォルトの名無しさん :2006/01/08(日) 00:51:07
俺においおいって何度も言わせないでくれよ。 さらに、反論できないと、あげくのはてはそれかよ。 実社会でもある話題を他人に意見ぶつけてるときに、君は意見言い返せないと 、話の中心をすりかえて、あげくはその人自体を攻撃。 たまにいるよ君みたいな人。
考え方が違う奴が集まるから衝突する おそらくこれからも議論が起こるだろうが絶対に解決はしない だからお前等不毛な言い争いするくらいなら黙ってろ
んまぁ、決まりうんぬんじゃなくて、結局 周 り の 奴 に ど う 思 わ れ る か マナーってそういう事。
228 :
デフォルトの名無しさん :2006/01/08(日) 00:51:58
君は議論が苦手ってことは知能も低そうだね。
229 :
デフォルトの名無しさん :2006/01/08(日) 00:54:24
226>> その点はあやまる。俺も解決はしないと思う。だから、これくらいにしときます。 ちなみに、不毛とはおもわない。相手からためになる意見があるかも知れないので。
230 :
デフォルトの名無しさん :2006/01/08(日) 00:57:00
さらに最後に一言だけ、 >おそらくこれからも議論が起こるだろうが絶対に解決はしない 絶対に解決しないとは思わない。絶対に解決しないと思ってる君は 他人のいい意見も取り入れないわけ?俺は相手の方が意見よさそうなら、 相手の意見を取り入れます。でないと人間的に成長しないので。
231 :
デフォルトの名無しさん :2006/01/08(日) 01:03:20
>>230 >でないと人間的に成長しないので。
偉いなお前。でもそれなら今後は
「よくいるよ君みたいな人」とか最後につけない事を推奨する。
相手を上から見た発言だし、
「僕は世の中の事がわかってます」っていう厨房スメルがして痛いから。
それじゃ話し合いにはならないさ。
232 :
デフォルトの名無しさん :2006/01/08(日) 01:08:24
231> ありがとうございます。その通りです、「よくいるよ君みたいな人」とかは、 実社会ではもちろん使いません。今回はバカとか意見に対して反論するんじゃなく、 その人自体を攻撃してきたので、言い返してしまいました。 すみません。それでは、寝ます。
おいおい、俺の意見に反論してくれよ。 この意見に。 >2chにスレッドタイトルと関係ないことを書いちゃいけない2chの決まりはない。 反論できないと問題すりかえるんだもんな。しかも、 反論できないが自分が優位にたちたいから、絵文字をなるべく多く使う。 よくいるよ君みたいな人。 おいおい、俺の意見に反論してくれよ。 この意見に。 >2chにスレッドタイトルと関係ないことを書いちゃいけない2chの決まりはない。 反論できないと問題すりかえるんだもんな。しかも、 反論できないが自分が優位にたちたいから、絵文字をなるべく多く使う。 よくいるよ君みたいな人。 おいおい、俺の意見に反論してくれよ。 この意見に。 >2chにスレッドタイトルと関係ないことを書いちゃいけない2chの決まりはない。 反論できないと問題すりかえるんだもんな。しかも、 反論できないが自分が優位にたちたいから、絵文字をなるべく多く使う。 よくいるよ君みたいな人。
顔真っ赤だね
おまいら、そうとう暇なんですね・・・。
>>179 がエスパーであとは凡人だということがよくわかった。
冬休みですねこの展開
DEL厨最後の冬休みになりそう
Delphiの内容についてのはなしにしようぜ
>>80 俺も今やってみたけど、そうなった。
後日またやってみるかな…。
242 :
デフォルトの名無しさん :2006/01/08(日) 11:30:47
delphi6&7のプロフェッショナル版を持っています。 BDEを使うことがないので、これだけインストールしたくないのですが、 最後までインストールが終了した後、BDEのみをアンインストールする 方法を教えてください。コントロールパネルを開いてもBDEのアンイン ストールの項目ででてきません。
BDEは必須コンポーネントだから無理じゃなかったけ。
>>240 Delphiの内容についてのは、無しにしようぜ
ってことなのかもしかして
10×10の範囲ごとにRGB値の合計を出すっていうのを画像全体で行いたいんですが もし範囲内にRGB(0,0,0)が出現したときは、次の範囲の取得に移る動作をさせたいんですけど頭がこんがらかって分からなくなってます 変数について書いてきます y、x:画像のy座標とx座標 j、i:10×10の範囲内でのループ、1ピクセルごとにRGB値を加算するためです All10R、All10G、All10B:RGB各々の合計 Pnt1[y,x].R、Pnt1[y,x].G、Pnt1[y,x].B:座標(y,x)のRGB値、前もって取得済み All10[y,x]:左上を(y,x)とする10×10のRGB値の合計 以下にプログラムを書いておきます
247 :
246 :2006/01/08(日) 14:50:28
for y:=0 to Image1.Picture.Height -10 do //10×10の範囲の左上の座標は画像の縦ピクセル数−9まで変化、480の画像なら471まで begin for x:=0 to Image1.Picture.Width -10 do //yと同様で、こちらは640の場合なら631まで変化 begin //All10〜の初期値は10×10の左上のピクセル All10R:=Pnt1[y,x].R; All10G:=Pnt1[y,x].G; All10B:=Pnt1[y,x].B; for j:=0 to 9 do //10×10の範囲内で対象のピクセルを移動する、y座標 begin for i:=0 to 9 do //10×10の範囲内で対象のピクセルを移動する、x座標 begin //範囲内の値を加算していく Inc(All10R,Pnt1[y+j,x+i].R); Inc(All10G,Pnt1[y+j,x+i].G); Inc(All10B,Pnt1[y+j,x+i].B); All10[y,x]:=All10R+All10G+All10B; end; end; end; end;
248 :
246 :2006/01/08(日) 14:50:59
yとxのループで−10となっているのはPnt1[y,x]の配列に格納されてるのは 1ピクセル目がPnt1[1,1]ではなくPnt1[0,0]に入ってるから・・・です それで本題なんですが、これにRGB(0,0,0)を見つけたら次の10×10の範囲の取得に移る動作をくわえたいんです たとえば(a,b)を左上とする範囲を調べてた際にRGB(0,0,0)が出てきたら、その範囲は無視して左上(a+1,b)の範囲に移る、というような 次の範囲に移る前に加算の計算を行ってしまっているのが当然で、その範囲の情報自体がいらないのが困りモノです・・・ All10[y,x]に格納したいのはRGB(0,0,0)が存在しないもののみにしたいんです 条件文などをどう加えればいいのか教えてくださいm( _ _ )m 長文スミマセン
なんかj、iのループがおかしい気も・・・これだと左上のピクセルを2回加算してるような・・・
250 :
246 :2006/01/08(日) 15:33:52
前もって範囲内にRGB(0,0,0)があるか調べておいて、なければ加算処理する、あれば無視・・・にしないとダメですかね 調べる処理が何度もダブるので(同じRGB(0,0,0)を何度もひろってしまう)無駄も生まれますが 前もって画像全体からRGB(0,0,0)の位置を全てチェックして、最初からそれを避けるように調べられるやり方ができればいいんですが・・・
寝起きだから間違ってるかも試練 Breakってループのネストひとつだけ抜けるんだっけ?忘れちったケケケ var check: Boolean; for y:=0 to Image1.Picture.Height -10 do begin for x:=0 to Image1.Picture.Width -10 do begin check := False; All10R := 0; All10G := 0; All10B := 0; for j:=0 to 9 do begin if check then Break; for i:=0 to 9 do begin if (All10R+All10G+All10B)=0 then //RGB(0, 0, 0)を発見しますた begin check := True; //フラグ立ててから Break; //抜ける end; Inc(All10R, Pnt1[y+j,x+i].R); Inc(All10G, Pnt1[y+j,x+i].G); Inc(All10B, Pnt1[y+j,x+i].B); end; end; //フラグが立ってないときだけ if not check then All10[y,x] := All10R +All10G +All10B; end; end;
252 :
246 :2006/01/08(日) 16:58:16
ありがとうございます。 そのままだとエラーは出ませんでしたがラベルに値を表示しようと思ったらエラーが出てしまいました。 Label4.Caption:=IntToStr(All10[0,0]); →なぜかフォームが開く前に”定数式が範囲を超えました”のエラー Label4.Caption:=IntToStr(All10[1,1]); →エラーは出ませんが値が0に 値が0になっちゃうのはAll10R:=0などで初期化する段階まで戻っちゃってるからでしょうか・・(よくわかってない) if文も次のようにしたらそれらしい値が出ましたがここもy+j,x+iにしたほうがいいのでしょうか? if (Pnt1[y,x].R+Pnt1[y,x].G+Pnt1[y,x].B)=0 then なんで(y,x)は(0,0)からはじまってるのに[0,0]でエラーが出る理由もわかりませんが(汗
>>252 うわやっぱ間違ってたか
ぐわあああああやっぱScanLineつかいてええええええええ
> if (All10R+All10G+All10B)=0 then //RGB(0, 0, 0)を発見しますた
たしかにここは
if ( Pnt1[y+j, x+i].R+Pnt1[y+j, x+i].G+Pnt1[y+j, x+i].B )=0 then だな
> なぜかフォームが開く前に”定数式が範囲を超えました”のエラー
Pictureには何かしら画像は入ってるんだよね?
All10の変数定義部分はどうなってる?
つかさあ、配列で記憶しておくには要素数多すぎじゃね?
超頻繁に呼び出すような値じゃなければ手続きにして
getGoukei(x, y); みたいにして値をもらってきたほうがいいような気がする
254 :
246 :2006/01/08(日) 19:27:27
>>253 RGB値をPnt1に格納する際にはscanlineで取得してます、Pnt1は2次元の動的配列です
むなしいことにscanlineでの利用法を他に知らないのです・・・
定数式が範囲を超えました、のエラーの原因はおっしゃるとおりAll10配列の定義ミスでした
× All10:array[1..631,1..471] of integer;
○ All10:array[0..630,0..470] of integer;
にしたらなくなりました。
>getGoukei(x, y); みたいにして値をもらってきたほうがいいような気がする
確かにそのとおりですね、ゴリ押ししか考えてなかったもんで・・・
255 :
246 :2006/01/08(日) 20:09:58
>ぐわあああああやっぱScanLineつかいてええええええええ ここでscanlineを使ってRGB値を取得しながら繰り返ししたほうがはやいんですか? 今のやり方だと640ピクセルの画像でこの処理に0.6〜0.7秒かかりますね(基準が曖昧・・)
いや、すでに使ってるんでしょ どういうコード書いてるのかこっちは分からんのでなんともいえないなぁ
まさか Pixels[] じゃないだろな。まさか、いくらなんでも・・・
258 :
ぬやあ :2006/01/08(日) 21:28:03
RGBの情報から、 色相、鮮やか、明るさ に変換するにはどうすればいいの?
259 :
デフォルトの名無しさん :2006/01/08(日) 21:34:26
>>258 HSVへの変換はググれば、どっかに公式落ちてたよ。
それがてっとりばやいと思う。
260 :
ぬやあ :2006/01/08(日) 21:38:54
>>259 お そうですか 野暮な質問で正直スマンカッタ
>>258 いえいえ。
たぶん、知ってるというか、公式をそのまんま覚えてる人は、いないと
思うから。覚えてる人は画像処理の達人か記憶力がすごい人くらいだと。
HSL への変換はWindowsにすでにあるよ。
多分D2005以降だと思うけど、GraphUtilユニットにColorRGBToHLSというのがあるよ。
HSVなのかHSLなのかHLSなのか
ウチのビデオはVHS
266 :
デフォルトの名無しさん :2006/01/09(月) 13:11:26
Aというアプリでテキストファイルの内容を追加編集させ、Bというアプリで テキストファイルに更新状況を監視して更新があれば読み込ませたいです。 AとBでファイルの読み書きが同時に起こり、干渉が原因でBアプリが読み込みエラーを 起こします。 他アプリがファイル使用中か調べる関数はありませんか?。
>266 Aでファイルを開くときに排他する Bでファイルを開くときに排他でエラーになったらしばらく待つ
269 :
デフォルトの名無しさん :2006/01/09(月) 14:42:04
例えば、 Button1.Visible := (Button1.Caption = Button1.Name); 見たいな書き方ってアリ?それとも読みにくいから無し?(if ---- then のほうがいい?)
あり。
それは括弧なしでも書けるけど、その場合は無しだね。
括弧無しの場合は質問してない。
リストボックスの項目削除なのですが 特定の項目名を探して見つかったら削除するという処理で何故か例外が発生します。 for k:=0 to ListBox1.Items.Count-1 do begin if ListBox1.Items[k] = 'hoge' then ListBox1.Items.Delete(k); end; ListBox1.Items.Countは4なのでkは0から3なわけですが k=3の時にif文で止まってしまうようです。
275 :
270 :2006/01/09(月) 18:52:33
おー、アリなのか 実はこの書き方が成立するのを知ったのが2日前なんだけど、これから慣れるようにがんばります
>>274 削除は後ろからやりなさい
その場合は
for k := ListBox1.Items.Count - 1 downto 0 do begin
・
・
・
277 :
274 :2006/01/09(月) 18:58:58
コンボボックスが数10個あって、そのすべてに同一のリスト(1万個近く)を設定する処理がクソ重い。 どうもコンボボックスのItemsにTStringsを代入するときが重いらしい。 コンボボックスのリスト自体は後からはいじらないんで、 TStringsのコピー処理が重いんだったらポインタ(参照先)だけ変えてやりゃいいんじゃね?と思ったんだけどそれって可能? &それで早くなる?
シングルクォーテーションを含む文字列ってどうやって指定すればいいんですか?
>>280 'シングルクォーテーションで''文字を囲む''実例'
文字列の中にシングルクォーテーションを入れたいのですが
>>279 BeginUpdate/EndUpdateはしてる?
>>283 してる そしてしてもしなくても大して変わらないorz
処理内容は
ItemList := TStringList.Create;
ItemList.BeginUpdate;
for i := 0 to intItemListLength - 1 do begin
ItemList.Add('リストのデータ - ほんとはファイルから事前に読み込まれて配列に入ってる');
end;
ItemList.EndUpdate;
ってやって登録するデータを作って、
for i := 0 to Length(ComboBoxArray) -1 do begin
ComboBoxArray[i].Items.BeginUpdate;
ComboBoxArray[i].Items := ItemList; //ここが重い。リスト登録件数が8500件くらいあるんだけど、P4/3.2Ghzで0.5秒程度かかる
ComboBoxArray[i].Items.EndUpdate;
end;
って設定してる。(ComboBoxArrayはFindCompornentで配列化してあるコンボボックスたち)
ComboBoxArray[i].Items := ItemList; のところを
@ComboBoxArray[i].Items := @ItemList; みたいに書けたら早いんじゃないかなーと思った
あぁ半角スペース使ったせいでインデントがとんだ
@つけなくてもポインタ代入してるだけなんだが あんまり基礎分かってなさそう 0.5秒で重いって言ってるのもどうかと思うが
>してる そしてしてもしなくても大して変わらないorz >ComboBoxArray[i].Items := ItemList; この場合は自動的にBeginUpdate/EndUpdateされるからだね。
>>286 >@つけなくてもポインタ代入してるだけなんだが
そうなの?
リストボックス2つ作って、同じStringList代入して、かたっぽ操作してももう一つ変わらないけど
>あんまり基礎分かってなさそう
基礎が分かって応用できりゃ自力解決してる、とorz
>0.5秒で重いって言ってるのもどうかと思うが
その0.5秒の処理が数十回行われるんで重いんです。
ウインドウ開くのに0.5x30で15秒。20回でも10秒。
>287
なるほど
とりあえず取っ払いました
ちょっと 数ミリ秒は早くなったのかな
289 :
246 :2006/01/09(月) 20:50:17
>>288 重いのはどうしようもないと思うぞ
やるならコンボボックス30個という仕様を変える方を選ぶべき
>>288 >>@つけなくてもポインタ代入してるだけなんだが
>そうなの?
>リストボックス2つ作って、同じStringList代入して、かたっぽ操作してももう一つ変わらないけど
Itemsプロパティへ代入するとItemsプロパティのSetterである
TCustomCombo.SetItemsが呼ばれる。
そこでFItems.Assign(Value)によって中身が複製される。
なので当然反映されることはないよ。
ところでVCLのソース持ってないの?
ComboBoxじゃなくてEdit+Buttonでカスタムダイアログで項目選ばせれば。 それに一万個も項目あったら選びにくくないか。
> それに一万個も項目あったら選びにくくないか。 ワラタ
>>290 外部アプリの設定ファイルを操作するツールなんで、インターフェースとか変えにくいんですよ…
分割して1個ずつ設定とかにすると、操作が分かりにくくなるんで
>>292 TCustomCombo継承して、新しいコントロール作ったほうがいいんですかね
>それに一万個も項目あったら選びにくくないか。
オートコンプリートonにしてるんで最初の数文字入力するだけで選択できて、そこは問題ないと思います。
ComboBox コントロール使っていれば少なくとも、(その1万個の文字列×コンボボックスの数)分の文字列の実体のコピーは発生するんだからどうやったって遅くなる。 起動時の初期化処理にでも組み込めばユーザーからはマシに見えるんじゃない?
lame.exe等を使って音楽ファイルのデコードをする、フロントエンド的なソフトを作っています。 createprocessを使うことで一応デコード自体はできるようになりました。 が、プログレスバーによるデコード進行状況の表示ができず不便です。 コマンドプロンプトからlame.exe等を実行すると、デコード中の進行状況(56%とか)が出ます。 これを読み取って数値に変換し、プログレスバーのプロパティに入れればできると思うのですが… どうすればいいでしょうか。ご教授お願いします。
lameは使ったこと無いけどリダイレクトを横取りしたら駄目なの?
リダイレクトを横取りとかわけわかんないこと書いた 正直すまん
>>289 > //ここで各々の探索ブロックの場所のRGB値の合計を出しておく
> //RGB(0,0,0)は加算しても変化がないのと同じこと
初期化する必要があるんじゃない。
wbRGB[n] := 0;
> difMax:=99999; //適当
これはループの中に必要でしょ。
しかしおそろしく汚いソースだな。。。
lameの標準出力をパイプで受け取る
302 :
297 :2006/01/09(月) 22:37:35
303 :
デフォルトの名無しさん :2006/01/09(月) 22:43:41
>>303 すごい!これで何とかなりそうです。
お答えいただいた皆様、ありがとうございました。
305 :
289 :2006/01/09(月) 23:12:00
>>300 汚くてスミマセン・・・
他に何かおかしいと思う場所はないですか?
やっぱり見当違いの場所がペーストされるのは他に原因があるんですかね・・・
>>279 ダミーのComboBoxを配置してフォーカスの当たったコントロールをOnEnterで察知して
実際にデータの詰まったComboBoxに差し替えるとか。
>>288 ItemListが既に有るんだから、空の項目のみ追加しておいて、
オーナードローでやってはどうだろう?
オートコンプリートは自分で実装する必要があるけど。
>>305 おかしいところは他にもいろいろあるよ。
そもそもどんな動作を期待してるのか分からん。
黒く塗ってたところをクリックしたら
>Aクリックした2点を白いブロックで塗るのと同時にそのブロックの座標を取得
>+(image2から)ブロックで隠れる部分1つ1つのRGB値の合計を計算しておきます。
ここで計算した値には黒ばっか入っちゃうけど。
これからコンポーネントの自作に挑戦したいんだけど 先にポインタの勉強しといたほうがいい?
なんで同時にできないの? 関係ない事項だからどっち先でもOK
ポインタの知識があったほうがコンポーネントについて深く理解できるのか気になってさ とりあえずカスタムコンポーネント先にチャレンジしてみまっす
はぁ、海外のオープンソースのコンポーネント使ってるんだけどさ、 ちょっとバグがあって、デバッグしてるんだけど、 気が付いたら、オブジェクトインスタンスとかStdWndProcのレベルまで、調査しても 原因わからん。もう、どこを調べたからいいか分からんよ。
独り言はチラシの裏へ
デバッグは整理してからやるかな。とりあえず、オナニーして寝るか。
315 :
289 :2006/01/10(火) 00:55:18
>>308 >黒く塗ってたところをクリックしたら〜ここで計算した値には黒ばっか入っちゃうけど
これは黒い線よりも白く塗る範囲のほうがでかいので(本当は線の太さを制限しておかないとダメですね)
実際に取得するRGB値は黒と、その他の部分になります
RGB(0,0,0)はRGB値の合計を計算する際に加算しても結果には影響しないので、
プログラムでは白いブロックに隠れる部分のRGB値を求めるとき区別してないです
>>315 > これは黒い線よりも白く塗る範囲のほうがでかいので(本当は線の太さを制限しておかないとダメですね)
> 実際に取得するRGB値は黒と、その他の部分になります
でかければよいという問題ではないと思うんだけど。
たとえば風景1-1なんかだと、右上の白い空の部分の黒線は
処理後は白くなって欲しいのだよね?
黒い部分が少しでも入ると白くならなくなるわけで。。。
黒い部分を無視して平均すればマシになるかな。
wbRGB[n] := 0;
BlackCount := 0;
for y:=py-5 to py+4 do
begin
for x:=px-5 to px+4 do
begin
if (Pnt2[y,x].R+Pnt2[y,x].G+Pnt2[y,x].B)=0 then
Inc(BlackCount);
Inc(wbRGB[n],Pnt2[y,x].R+Pnt2[y,x].G+Pnt2[y,x].B);
end;
end;
wbRGB[n] := Trunc(wbRGB[n]*100/(100-BlackCount));
317 :
289 :2006/01/10(火) 01:47:15
おお、確かにRGB(0,0,0)を含めたら本来は白い部分をとってこないといけないのに 合計値が少なくなるから違う色になりますね。指摘ありがとうございます!
318 :
289 :2006/01/10(火) 02:25:17
差が最小になるのを探す部分は間違えてないですか? コピーとペーストの座標のズレはないみたいですし、RGB値の取得にミスがないとすると残るはここだけなんですよね。 いや、別のところが間違えてるかもしれないですが・・・
>>318 上に書いた点を直せばとりあえずそれっぽくは動くけど。
グラデーションでは、どこを選んでも元の状態が復元され、
風景1-1では黒線が一見消えたように見える。
よく見ると変だけど、このアルゴリズムではしょうがないね。
MemCheckでメモリーリークをチェックしたらちょっと動かしただけで200個300個くらい余裕でヒットしてしまうのですが 何をどうやって開放した良いのかわからず途方に暮れているのですが TListItemとかTListViewなんかで気をつけるべき点などあれば教えて頂きたいです。
そんな漠然としたこと聞かれても困るからソース晒しなさい
リークしてるメモリダンプしてクラス名割り出せ
TListItemでメモリリーク発生する可能性と言えば TListItem.Dataにメモリを設定してそれを解放しないまま TListItemだけFreeするとかかな 下記の例を参考に var myListItem: TListItem; pMemory: Pointer; begin Getmem(pMemory, 10); myListItem := TListItem.Create; myListItem.data := pMemory; //この文がないとメモリリーク発生! FreeMem( myListItem.Data, 10 ); myListItem.Free; end;
ListItemのDataプロパテ使ってるならOnDeletionで解放 もし仮想ListView使ってるなら話は別だけどね
325 :
289 :2006/01/10(火) 17:17:12
326 :
320 :2006/01/10(火) 18:14:09
皆さんレスありがとうございます TListItemはSubItemsしか使っていないです procedure TForm1.OnTimer(Sender:TObject); begin ListView.Clear; ListItem:= ListView.Items.Add; ListItem.Caption:= hoge; ListItem.SubItems.Add(hogehoge); end; こんな感じです 今はIndyのTIdTcpClientでデータを取得する際に使っているReadBufferがいけないのかなぁと思い調べてみています。
>>325 すげえええええええええ
商用ソフトかこれ?!
>>325 > そちらでもこんな風になってますか?
なってるし、想定通りの動作だと思うけど。
RGBを足しちゃってるから、たとえばR:255 G:0 B:0とR:0 G:255 B:0が同じに評価されるわけで、
色が違う部分が引っ張ってこられるのは当然だよね。
>[Pascal 警告] hogehoge.pas(1200): W1000 シンボル 'AllocMemSize' を使用することは推奨されていません と出るのですが、AllocMemSize の代替となる関数は何でしょう。
今は、 {$WARN SYMBOL_DEPRECATED OFF} Result := AllocMemSize; {$WARN SYMBOL_DEPRECATED ON} とやってます。
331 :
デフォルトの名無しさん :2006/01/11(水) 02:20:15
すいません、質問させてください。デルファイ6パーソナルです。 簡単なサンプルで、メニューの実行→実行を選んだときに、 普通に実行してくれる時と、実行すると見せかけて実行してくれない 時があります。(どちらも全く同じファイルです) 何度やっても駄目な時はデルファイを再起動すると実行してくれたりします。 何が原因なんでしょうか?回避策ってありますか?
f9とctrl+f9の違いみたいなもん?
>>331 メニューを選ぶ代わりにF9ボタンを押す
334 :
デフォルトの名無しさん :2006/01/11(水) 03:07:50
>>332-333 レスどうも。やってみたんですが、メニューで実行してくれない時は、
f9、ctr+f9どちらも、同じように実行してくれなかったです。
更に、メニュー→実行を選べない(グレーアウト)の状態になることもあります。
難しい事してるわけではないので、ソースがどうこう、って話ではないと思うんですが。
unit sample; interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus;
type TForm1 = class(TForm)
MainMenu1: TMainMenu;
File1: TMenuItem;
Show1: TMenuItem;
N2: TMenuItem;
ool1: TMenuItem;
HELP1: TMenuItem;
Close1: TMenuItem;
N1: TMenuItem;
N3: TMenuItem;
About1: TMenuItem;
About2: TMenuItem;
procedure Close1Click(Sender: TObject);
private { Private 宣言 }
public { Public 宣言 }
end;
var Form1: TForm1;
implementation {$R *.dfm}
procedure TForm1.Close1Click(Sender: TObject);
begin close; end;
end.
335 :
デフォルトの名無しさん :2006/01/11(水) 03:43:31
なんどやっても出来るときと出来ない時が・・・ 法則性が全く見当たらず・・・とりあえず今日は寝ます。
336 :
325 :2006/01/11(水) 04:03:56
337 :
325 :2006/01/11(水) 04:37:36
というかdelphi内部で実行を選んで動かしたときと、exeファイルから動かしたときで結果が違う・・・(@ @
DelphiじゃなくてVB使ってるんじゃないのかw
いやVBだったらdelphiみたいな糞言語と違ってもっとマトモに動作するだろうがな。
じゃあずっとVB使ってて下さい
談話室の過去ログによると、旧VBユーザはまだDelphiユーザの5倍はいるし、 ほんとにVBの方がよさそうですね。
341=ハンメルンの笛吹き男
雑談スレ逝け屑共
344 :
デフォルトの名無しさん :2006/01/11(水) 12:52:38
DelphiのTCustomFormから継承されたフォームをSpy++で見ると、WindowsのParent Window とOwner Windowとなるウィンドウがあります。これって どうやっているのでしょうか?? 普通のフォームを見る限り、Parent Windowは設定されていません。 で、そのソースも見てもSetParentなどで設定されているようでもありません。
346 :
デフォルトの名無しさん :2006/01/11(水) 13:31:39
>>345 ありがとうございます。丁度そのページの他のところ読んでました。
Jane当たりはParent Windowのハンドルの解放がうまく行っていないのか、 explorer.exeがどんどんメモリリークしちゃうね。explorer.exeから見ると、 画面に表示されない「お化けウィンドゥ」が多量にあるわけだ。そしてそれは Janeを終了しても消えない。 Windowsを再起動するか、わざと多量のウィンドゥを作って、Windowsに 「未使用のハンドルがありますよ」と知らせないと、気づいてくれない。
Parent と Owner を混同する人って多いよね。まったく違うんだが。
349 :
デフォルトの名無しさん :2006/01/11(水) 19:03:06
panelをフォームサイズにピッタリにしたくて、formcreateに panel.width:=form.width;panel.height:=form.height;lett:=0;top:=0; と入れてみたのですがなぜかあまりが出てスクロールバーが出てしまいます。 どうすればよいですか?初心者過ぎてすみません。
panelのAlignをalClientにしてみな
351 :
デフォルトの名無しさん :2006/01/11(水) 19:18:21
>>336 >この画像を見てもらえると分かりますが、明らかに平均自体が全然違うところもってきてますよねw
空の横線のことを言ってるんだと思うけど、そう思うならホントに節穴だよ。。。
置き換える前と後でRGBの合計値を実際に比べてごらん。
> if (dif<difMax) then
ってなってるから、同じ差分なら最初に見つけた場所から持ってきちゃうしね。
前にも書いたけどせめてRGB別々で処理する必要があるんじゃないの。
解説サイトを読んだり、実際delphiをいじってみて「オブジェクト」というのが何かはなんとなくわかった しかし「オブジェクト指向のプログラム」というのがどういうことなのかいまいちわからない オブジェクトを使ったプログラムならオブジェクト指向なの?
本一冊買えよ。
>>353 > オブジェクトを使ったプログラムならオブジェクト指向なの?
YesでもありNoでもあり、難しいね。
その時々の流行もあるし・・・やたらとC++やJavaの話が出てきたり、デザインパターン
が強調されたり、UMLを使わなきゃ駄目だとか。Delphi の場合、オブジェクト指向で
作られたVCLを使っているから手続き志向で書いてもオブジェクト指向だ!なんて言う
トンデモ意見すらあったし。
カプセル化、継承、ポリモフィズムを使っている事・・・うーん抽象的すぎるかな。
クラスに属していないグローバル変数・関数とか裸の配列とかが沢山ありすぎない事。
静的なクラスではなくてインスタンスを中心に物事が進むこと。
やたらと大きくて何でも出来るクラスやメソッドが無いこと・・・
http://www.borland.co.jp/borcon/pdf/Day2/D2_A1.pdf あたりを読むと
やってはいけない事が分かるかな〜
> クラスに属していないグローバル変数・関数とか裸の配列とかが沢山ありすぎない事。 Delphi や C++ なんかは OOPL としては、これができるんで中途半端なんだよね。 Java とか C# とか、もっと徹底した OOPL をやった方が入門としてはよいよ。 その分、すこし敷居が高いけど。 Java や C# は本がたくさんあるから、本買うのがおすすめ。
357 :
デフォルトの名無しさん :2006/01/12(木) 00:03:38
初めてまともに触ったプログラムがTonyuSystemだった俺には、 Delphiを始めてからしばらくしてHSPとか見て唖然とした。無理だRO!?って・・・
オブジェクトを使うという事は、どのようにインスタンス生成させるか設計するということ。 それがプログラム全体の構造とリーダビリティを決定する。
あるいは古い概念では、どのようにオブジェクトにそいつ自身の処理の責任をまかせるかということ。
そんな抽象的な説明では何の役にも立たないが
>>356 > もっと徹底した OOPL をやった方が入門としてはよいよ。
正論だけど、Delphi に慣れてきた所で?JavaやC#に移れというのも酷なような気も。
とりあえずDelphi で継承、ポリモフィズムあたりを実践してみたら、どうよ。
自分でクラスを作って継承させるだけでも、なんとなく分かってくるはず。
virtual とかoverride を使えるようになれば楽しい。
その先は後で考えれば良いと思うが。
353は Delphi じゃなくて OOP を知りたいんだろ?
C# から、はどうか知らんが、Java からプログラミング入門する人は多いよ。
うーん、そう言う事ならJava スレで聞いた方が良いかも。 原理主義的にSmallTalk スレの方が良いのかな?
ふーむ、せっかく Delphi 始めたんだから Delphi の言葉で OOP を説明した本か HP なんかを紹介できればいいんだけど・・・
さすが、はやいね
369 :
デフォルトの名無しさん :2006/01/12(木) 00:52:19
MSXのベーシック→C→パールと全て独学でやってきて、 今までは何の困った事もなかったんだけど。 数年ぶりになんかプログラムいじるかぁ、と思って デルファイに手だしてみた。 なんかさっぱりわからん。 ネット上の情報も少なすぎて痒いところに手が届いてない感じだね。 注文した本が届くまであと数日お預けって感じ。
>>369 だから日記はチラシの裏に書けとあれほど…('A`)
エクセルVBでゲーム作りしてたんですがそろそろ転向したいなと 思いまして。DelphiとFlashではどちらがとっつきやすいですか? 入門サイトナナメ読みした感触ではDelphi=変数管理がラク、 Flash=メモリ管理不要のようなイメージで、どっちもエクセル依存 してた未知の分野なので甲乙付けられなくてorz 両方こなせる方おりましたら率直な感想教えてください。
>Delphi の場合、オブジェクト指向で作られたVCLを使っているから手続き志向で書いてもオブジェクト指向だ!なんて言う トンデモ意見すらあったし。 一応Tmemoなんかのクラスからインスタンスつくったりしてるわけで、オブジェクト指向だっていうのはトンデモ意見ってわけじゃないと思うが。
オブジェクト指向のライブラリを使って、 自分が書いた分がオブジェクト指向じゃない場合どうなるか、だな。 「指向」なんで、自分が書いた分がオブジェクト指向を目指して無い場合は オブジェクト指向ではないと言っていいと思うけれども。
375 :
デフォルトの名無しさん :2006/01/12(木) 05:19:43
質問があります。 オーナードローで以下のようにサブアイテムが存在する ListViewを扱う場合、サブアイテムのテキストの上にマウ スカーソルを移動しても、そのアイテムの1列目のCaption がツールチップとして表示されてしまうのですが、これをマ ウスカーソルの下のアイテムの該当列のテキストをツール チップに表示するにはどうすれば良いでしょうか? 列1 列2 --- --- --- ---
376 :
デフォルトの名無しさん :2006/01/12(木) 09:36:20
>>372 各人の向き不向き、好み、色々あって、他人の意見はあまり意味がないかと。
何を作るか、用途は何か、目的でどちらを使うべきかが決まるのではないかと。
良く分からなければ自分で両方試してみて、選択すべきかと。
377 :
デフォルトの名無しさん :2006/01/12(木) 12:28:33
どうみてみFlashを使ったことのなさそうなお前の意見なんて誰も聞いていないだろう。
378 :
デフォルトの名無しさん :2006/01/12(木) 12:49:15
>>376 お前人に相談されたことないんじゃない?
相談する側はそんなどうでもいい回答を期待してるわけじゃないよ
せめて両方のメリットデメリット挙げるくらいはしろよ
>お前人に相談されたことないんじゃない? 無駄な挑発書いてる手間でお前が挙げろよw
まぁ、なんだ、376みたいなレスは役に立たないレスの見本みたいなもんだな。 人生いろいろ、人の好みもいろいろ、だから自分で決めろ、ってなんも中身ないもんね。
>>381 まぁ、彼は寛容な人なんだとは分かったけどね。
もちろん、多少、メリット・デメリット出すと良かったとは思うけど。
大抵の相談事というのは、実は既に自分の中で答えは出ているものだ 故に、方向性はどうあれ、背中を押してやるような答えが望ましい
お前らもう消えていいよ
386 :
デフォルトの名無しさん :2006/01/12(木) 15:40:28
TStringGridのセル編集カーソルを閉じる方法を教えて下さいでつ。 お願いします。
StringGrid1.Options := StringGrid1.Options - [goEditing];
388 :
386 :2006/01/12(木) 16:00:44
>>387 有難うございます。
でも、既に開いたエディタが消えないよぅ。
・゚・(つД`)・゚・ウワアン
エディタが消えないとはどういうことなんだ StringGridの各セルを編集不可能にするんじゃないのか
390 :
386 :2006/01/12(木) 16:08:14
セルを編集してるのを、 ポップアップメニューが開いた時点で一時カーソルを閉じたいだけです。 ポップアップメニューのイベントハンドラで、 goEditingを引いてみましたが、 既に編集中のカーソルが消えません。
カーソル消すのは無理なんじゃないかな イベントハンドラでgoEditing引く処理入れても選択セルが変わらないと 反映されないみたいだし
「カーソル」の意味が間違ってるような。InplaceEdit のことかな?
393 :
386 :2006/01/12(木) 16:37:38
394 :
386 :2006/01/12(木) 17:03:32
TStringGrid.EditorModeプロパティで出来ます田。 有難うございました。
395 :
デフォルトの名無しさん :2006/01/12(木) 18:12:36
>>395 擁護するわけじゃないが、
その辺の本屋にDelphi本が売ってる確率は極めて低い
なのでネット注文になることは多々あったりする
いえてる
Delphi本、ほんとに少なくなったな。 Del4、5のあたりはVC++やVBにタメはってたくらい出てたのに。
399 :
372 :2006/01/12(木) 22:17:06
比較系スレに行くべきでしたね。タイヘン失礼しました。
ここでむちゃくちゃ初歩的な質問していいですか?
いいよ
ども。 IDispatchでインターフェースされてるコレクションから、一つずつ取り出したい のですけど、使えると思ってたFor〜Inでは使えないので思案してます。 VBだと、For〜Eachで取り出せたのですが。 もし、COMを勉強しろ、そしたらわかる。というのなら、そうします。
>>395 俺は引きこもりだけどネットの情報だけでかなりのところまで行けるぞ
少なくとも
>>369 の言うような、さっぱりわからん ということはない
Delphiは情報が少ないとか言う人は検索スキルが低いんじゃねーの?
>>403 Delphiではできないってことですか。
うーん、おとなしくC#で作り直します。Delphi2005で・・・
ども。
>>402 for〜inはCOMではなく.NET互換のための構文だからな。
ラッパー一枚噛ませてGetEnumerator定義すればいけるが、
逆にめんどいだろうから素直にfor〜toでいいじゃん。
>>406 ところが、そのコレクションには要素数のプロパティが無いのですよ。
具体的にはDirectShowで定義されているフィルタを検索するため、
タイプライブラリをインポートして使おうとしたのですが、生成された
ユニットに定義されたインターフェースを見ても、たしかにFor〜Inで
使える条件は満たされてません。
VBとかC#のFor Eachはどうやってそれをクリアしてるのか。
>>408 お、ポインタありがとう。読んでみますね。
410 :
デフォルトの名無しさん :2006/01/13(金) 00:23:23
Delphiができりゃなんでもできるって言ってた人がいるんですけどマジですかね? あとDelphiに移るとき、どの言語を知っていたら飲み込みやすいですか?
APIスレに書くべきかもしれんが、VCL使ってるのでこっちで。 仮想リストビュー (TListView.OwnerData := True) の OnDataHint イベントに何を書けばいいのか分かりません。 引数は (Sender: TObject; StartIndex, EndIndex: Integer) ってなってるけど、 OnData を fo rで回したような感じのを書けばいいのかな?
>>410 Delphiができりゃ(ALGOL系なら)なんでもできる、だろうね。
LispとかHaskellできるようにはならない。
でも、大抵はできるってこと。
Delphiに移る時は、JavaかC#やってると楽。(普通は逆だがw)
Lispはカッコの鬱陶しささえクリアすればいけると思うw 文法自体は単純だし
>>412 レスサンクス。
>Delphiに移る時は、JavaかC#やってると楽。(普通は逆だがw)
まじか(;´Д`)
Delphiって難しいってイメージがあるから後にやるもんだと思ってた
415 :
414 :2006/01/13(金) 02:06:03
今Delphiについてちょっと調べてみた。 Delphiって基本的に簡単な言語らしいね(本当かどうかはわからんけど…) 先にDelphiを勉強してみます
Pascal自体が教育用に作られた言語じゃなかったっけ。 だからそれほど難しい言語ではないと思うけど。
「簡単」とかいうより「見やすい、読みやすい」という感じかな。俺には。 結局はオブジェクト指向系の言語ですから。
>>415 別にDelphiから初めても何の問題もないよ
要はやる気と才能次第
いや、Delphiからやるべき。 自分C→C++を本で勉強したが全然分からなくてMFCのスケルトンコード見て絶望してたが、 Del数年したらC++勉強しなくても読めちゃった。 DelのVCLがFormからコンポーネントから全部クラスになってて、 クラスの派生文法はC++を読みやすくした構文だたから。
Delphi より Java からがオススメ。死滅間近なのと情報・書籍少ないのでDelphiはおすすめしない。
しかし、Javaで勉強がてらに作ったアプリは使えない。 勉強後、そこそこのアプリを作れるのは認めるが。
ま、初心者が使えるアプリを作れるのはずっと先なわけだが。 簡単にWindowsでアプリを作るのが優先ならDelphiでもいいかもね。 一般的な意味でプログラミングを学習したい、というならDelphiよりJavaがいいと 思うけど。
学習とアプリを切り離すのは学習効果落とすぉ。
ついでに書いとくと、 >一般的な意味でプログラミングを学習したい なら、 DelとJavaは全く等価なクラスベース言語。 学問として、実行時に自分を書き換える言語とか、オブジェクトベース言語を学ぶならいざ知らず。
このスレッドはBorland(ボーランド)のDelphi(デルファイ)について、 他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。 Delphi使いが優しくコメントを返しますが、 お礼はDelphiの布教と初心者の救済をお願いします。
正直なところ俺もdel厨だしこれからも死滅するまで使って行くと思うが、 新しく始める人に勧めるかっていったらかなりそれは酷だと思う
> DelとJavaは全く等価なクラスベース言語。 まったく等価なわけねぇだろ。裸の関数やら、グローバルな変数が作れるのに。 Delphi は Windows べったりだろ。そういう意味では一般的じゃない。 ま、それが簡単にアプリを作れる利点でもあるが。 初心者にとって、よい入門本がない(少ない?)のがDelphiの弱点ですね。 あと、コミュニティーが閑散としてるとこも。
ター坊から使ってる俺のようなおっさんもいるわけで.
そんなおっさんとかしかいないだろ。あとわけわからん超初心者。
M$Cだと、コンパイル〜リンクのコマンドラインの不整合から、 defファイルの記述1個間違えただけで起動しなかった。 DOS窓〜Win起動の繰り返し地獄もあったし、 コンパイラがヒープ足りないエラーでコンパイルをあきらめたり。 TurboC++はプロジェクトに適当にソース足すと、GUIが超高速でコンパイルして、 平然とアプリが起動してそれまでの苦労は何だったんだろうかとオモタ。
思い出は美しい・・・ってか? 雑談スレに行けば
おっさんはもう引退して下さい
TurboPascal→Delphi TruboC++→BCBコンパイル →BDS となってソースもライブラリもあるんだから引退必要ないじゃん。
でも仕事が無いから引退じゃん
あ、そっちは仕事無いんだ。 こっちはあるから。
あ、それで2chに書き込んでるヒマの仕事してるんだね
きっと儲かってるんだろうなぁー。余裕で2chやってるし。
マンセー書き込みが仕事なんだろ。
雑談スレに行けよーーーーーーーーーーー
きっと儲かってるんだろうなぁー。余裕で2chやってるし。
444 :
デフォルトの名無しさん :2006/01/13(金) 13:45:59
これおしえてください>< RndNum:integer; procedure TForm1.FormCreate(Sender: TObject); begin Randomize; RndNum:=Random( )+ ; Label1.Caption:=IntToStr(RndNum) end; procedure TForm1.Button1Click(Sender: TObject); var MyNum:integer; begin MyNum:=StrToInt(Edit1.Text); if > then Label1.Caption:='もっと大きい数を入力してください' else If < then Label1.Caption:='もっと小さい数を入力してください' Label1.Caption:='正解!!'; Edit1.SetFocus end;
> Label1.Caption:=IntToStr(RndNum) 答え表示してるんじゃ、数あてゲームにならないんじゃ・・・
何を教えろと
447 :
デフォルトの名無しさん :2006/01/13(金) 13:55:39
括弧の中を教えてくださいRandomの><
if文オカシイから無理
449 :
デフォルトの名無しさん :2006/01/13(金) 14:01:59
if 分のところも空欄です すみません
エスパーじゃねえんだから分かるかバカ それとここは宿題スレじゃない
このスレッドはBorland(ボーランド)のDelphi(デルファイ)について、 他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。 Delphi使いが優しくコメントを返しますが、 お礼はDelphiの布教と初心者の救済をお願いします。
> Delphi使いが優しくコメントを返しますが、 450 はDelphiユーザではない、と認定されました。
質問に答えるのであって宿題に答えるのではないから そこんとこ間違えないように
宿題だといってるのは450だけ。
ということで 450 はDelphiユーザではない、と認定されました。
粘着www
ということで 450 はDelphiユーザではなく、粘着と認定されました。
厨房必死だな
ということで 450 はDelphiユーザではなく、粘着で厨房必死と認定されました。
いい加減あきらめたら?
ということで 450 はDelphiユーザではなく、粘着と認定されました。
お前もこんなことしてる暇あったら宿題考えろよw
464 :
444 :2006/01/13(金) 14:50:21
もうお前らには頼まないよバーかあほ
465 :
444 :2006/01/13(金) 14:52:18
ていうか自力でできたしねこんな初心者でも解決できることを答えられないなんてばかじゃねーの?ワラ
またひとつ大人になったな
自力でできることを質問するほうがどうかしてるだろ・・・
この板は何故いつまでたってもIDが表示されないのだろうか?
すれ違い
ずーっと待っていればIDが表示されるはず、って思い込むほうがおかしいだろ
そうか、もつカレー
471=FOX
474 :
デフォルトの名無しさん :2006/01/13(金) 17:07:48
抽象的な質問ですいませんが、よろしくお願いします。 ボタンを押したらサーバ上のHTMLファイルを読み込み、 必要な部分だけを抜き出した形にして(抜き出したHTMLはローカル保存) 表示したいのですが、 どういった手段でどういった手順でやればいいんでしょうか? HTMLを読みに行く段階ですでにわかりません。 よろしくお願いします。
TWebBrowser つかってみたら。グぐればいっぱい情報ある。ソーステキストも抜き出せるし 目に見えるのもいいし。
Indyというのを使ってみれ とりあえずHTMLを簡単に取得出来る
>>408 昨日の
>>400 だけど,かなりうまくいったよ.ありがと.
定型処理だからマクロ化できたらいいのになあ.
478 :
デフォルトの名無しさん :2006/01/13(金) 17:42:43
>>475 >>476 どうも!今、検索で出てきたサンプルで勉強してます。ありがとうございました。
(サンプルが何故かまともに動いてくれないけど・・・)
479 :
デフォルトの名無しさん :2006/01/13(金) 20:46:11
DelphiがバグだらけなんですけどVSに乗り換えた方が賢明ですか?
ここで質問してる時点で賢明ではないだろ
もし、過去ログにあったとしたらすみません。 VC++で書かれたコードをDelphiで書き直さなければならなくなったのですが、 DelphiのFindFirst、FindNext関数はVC++のCFileFine::FindFile、Fine::FindNextFileと同じように使えるのでしょうか? 使えるとしたらVC++のFine::GetFileNameと同じようにファイル名を返す関数はあるのでしょうか? また、この部分以外は書き直しが済んでいるのですが、 exeのサイズがVC++でビルドしたexeの10倍あるんですが、 ビルドの方法間違えてますか?? (VC++:32kB、Delphi:345kB)
>>481 その前にDelphiのドキュメントを読むとかしないの?
483 :
481 :2006/01/13(金) 22:52:39
おっしゃる通りなのですが、 事情によりDelphiのヘルプだけしかないんですよ。 ヘルプで調べても出てこなかったので、ここで質問させてもらいました。
いいえ、出てきます。
出てくるよね
同じように使える ExtractFileName フォーム使うアプリはでかい
つうかDelphiは、マニュアル全部をヘルプファイルにぶちこんであるだろ。
488 :
481 :2006/01/13(金) 23:16:24
>>486 回答ありがとうございます。
やってみます。
てゆーか、CFileFineって何だよ、俺。。。
コピペしながら書いたのがバレバレだ。。。。。
489 :
481 :2006/01/13(金) 23:17:53
追加。 ヘルプの検索がまだまだ下手ってことですね。 もっと精進します。
Delphiはヘルプが糞な上にクラス化が不十分だから検索が大変なんだよな。 VCLソースがあるならWin32APIのFindFirstFileとかでソース検索して それ使ってる関数名を検索するとかすると早いかも。
Delphiのヘルプは糞。VSのヘルプの方がマシ。
ま、それは今に始まったことではないが、最近はどんどんひどくなってるね
Delphi1とか2とかヘルプ日本語版ですら不十分ながらもやたら丁寧だったからな… 自動翻訳するぐらいなら英語版付けといて欲しい、つーか2005には英語版ヘルプついてたのに2006には無い…
494 :
デフォルトの名無しさん :2006/01/14(土) 00:25:31
MSDNにいってAPIの意味を必死に考えるのが楽しい エキサイトとおすと日本語とも英語ともいえないお
API なら6−7割は日本語化されてんじゃないの
雑談スレでやれよ屑共
アンタも含めて屑しかいないんだからどこでも同じ。
498 :
デフォルトの名無しさん :2006/01/14(土) 02:01:23
だから雑談スレでやれよ屑
499 :
デフォルトの名無しさん :2006/01/14(土) 03:08:37
ちょっとぐらいええやん
500 :
デフォルトの名無しさん :2006/01/14(土) 03:25:21
ほとんどのアプリにあるみたいに、 メニューのヘルプ→バージョン情報を選んだら ポップアップで情報表示させたいんだけど、どうやってポップアップだすの?
フォームデザイナで設計して Show するだけ。
502 :
デフォルトの名無しさん :2006/01/14(土) 03:47:32
>>501 ありがとうございます、今日はもう眠気限界なので明日試して見ます!
503 :
デフォルトの名無しさん :2006/01/14(土) 06:39:38
簡単なゲームを作っています。 セリフや画像は外のデータフォルダに入れて暇なときにテキストエディタなどで編集してたりするのですが いざ公開するときにデータフォルダから直接シナリオや画像が見られないようにしたいのです。 メモリ操作などの強固なガードではなくて、メモ帳なんかで開けなくするか文字化けさせるような方法でよいので どなたかご教授ください。
505 :
デフォルトの名無しさん :2006/01/14(土) 07:00:25
>>504 3Dプログラム用のやつですか・・・。
かなり難しそうですが、他に方法がなかったらがんばってみます。
ありがとうございました。
>メモ帳なんかで開けなくするか文字化けさせるような方法でよいので XOR通すとかblowfishなんかの共通鍵で暗号化するとか zipで圧縮して拡張子だけ変えるとか。
507 :
デフォルトの名無しさん :2006/01/14(土) 08:00:07
>>506 ありがとうございます。
用語を聞いてもやり方の検討もつかないのですが、難しい技術ですか?
506が答えないようなので、かわりに。 XORなら簡単。 1.あらかじめ全てのファイルをXORで変換しておく。公開するのは変換したファイル。 procedure toDat(); var pFileStream: TFileStream; iCount: Longint; Data: array of Byte; begin pFileStream := TFileStream.Create('Test.txt',fmOpenRead); SetLength(Data,pFileStream.Size); pFileStream.Read(Data[0],pFileStream.Size); for iCount := 0 to pFileStream.Size-1 do begin Data[iCount] := Data[iCount] xor XORDATA; end; FreeAndNil(pFileStream); pFileStream := TFileStream.Create('Test.dat',fmCreate); pFileStream.Write(Data[0],Length(Data)); FreeAndNil(pFileStream); Data := nil; end;
2.読み込む時にXORで元のファイルにもどす。 procedure toText(); var pFileStream: TFileStream; iCount: Longint; Data: array of Byte; begin pFileStream := TFileStream.Create('Test.dat',fmOpenRead); SetLength(Data,pFileStream.Size); pFileStream.Read(Data[0],pFileStream.Size); for iCount := 0 to pFileStream.Size-1 do begin Data[iCount] := Data[iCount] xor XORDATA; end; FreeAndNil(pFileStream); Data := nil; end; おっと、XORDATA はconstで指定しておけ。 const XORDATA = 255; 0から255の好きな数いっとけ。
ああスマン。 0じゃ駄目だ。元のファイルと同じになる。 1から255な。
>>508 −510
ご丁寧にありがとうございます。
XORを掛けて、もう一度掛けると元に戻る、とルールでしたっけ。
509が変換で、510が戻すコード、'test.txt'を別のstring、プロシージャーの引数からにすれば色々使い勝手がよくなりそう?
とあってるかどうか微妙ですが自分なりに理解してみました。
初級の参考書でクラスとポインタまで勉強したものの
怖くて使えずせいぜいレコード型くらいしか使えないレベルなのでちっとも実力は上がらないのですが
まずはコピペで利用して、HELP読みつつ必要なところはカスタマイズできるようになるよう頑張りたいと思います。
>>511 508,509はちょっと無駄が多い
せっかくxorなんだから、デコードとエンコード関数は同じにできる
引数をTStreamあたりにして、ファイル読み込みと保存は小分けにすればいい
>512 どうせならTFileStreamを継承して新しいクラスを作るとか。 で、Readをオーバーライドする、と。
>>513 どうせならTStream派生させてファイルのアーカイブ化も(ry
>>513 ああ、それがスマートかもね
でもXORが分からなかった彼にしてみると、
クラス継承してoverrideして・・・・ってのはハードル高そう
あえてチャレンジして欲しいが
単にメモリ上の操作で完結したルーチン示してあげればいいだけなのに。 教え方のセンスが悪いね。
>メモリ操作などの強固なガードではなくて、メモ帳なんかで開けなくするか文字化けさせるような方法でよいので
質問の意味すらわかってないなら適切な回答が出来なくてもしょうがないね。
きっと516はTFileStreamを3時間かけて調べてたんだよ。 でも、そこは本質的な事じゃなかったんだ。 すごい時間がかかったのに、あんまりだって怒ってるんだ。 ……だよね、516。
521 :
デフォルトの名無しさん :2006/01/14(土) 12:38:47
>>516 教えてる人が居るのに怒るだけとかwwwキモスwww
じゃあ516は早くセンスのあるコード示せよ まぁ示される可能性は限りなくゼロだろうが、 それでも一応期待してやるよ
516が答えないようなので、かわりに。 センスがないかも知れんがそこは大目に見てくれ。 const XORDATA = 255; type TXorFileStream = class(TFileStream) public function Read(var Buffer; Count: Longint): Longint; override; end; function TXorFileStream.Read(var Buffer; Count: Longint): Longint; var pBuf: PByte; iCount: Longint; begin Result := inherited Read(Buffer,Count); pBuf := @Buffer; for iCount := 0 to Result-1 do begin pBuf^ := pBuf^ xor XORDATA; Inc(pBuf); end; end;
>メモ帳なんかで開けなくするか文字化けさせるような方法でよいので 日本語も読めないのか?
516と524は同一人物か、そうでなくても同じような頭の構造してる人だろうね
>>524 はいはいC#すごいすごい
これで満足ですか?^^
>>526 そうそう、君らとはだいぶデキか違うようだ。
529 :
デフォルトの名無しさん :2006/01/14(土) 13:43:48
>>524 謎すwwwwwwXOR暗号ぐらいサクッと作れるのにそれが無い事批判するとかよっぽど実力ないのね^^
AES(だっけ?ラインダールが採用された奴)使うライブラリが入ってたら便利だけど、
そんなブルートフォースで現実的に突破できる最低限のXOR暗号のライブラリ自慢するとか馬鹿じゃねwwwwww
ないことを弁解するのも大変ですね。あったほうがいいにきまってるだろ。
531 :
チラシ :2006/01/14(土) 13:52:30
無いよりは有ったほうが便利だろうなぁ。 でもまぁ、この程度の暗号化なら初心者でも作れるし、俺は初めてこの手法を知ったときけっこう感動した。 こういう小さな感動もプログラムやる楽しみの1つだと思ってる。
使ったことないけど標準で付いてるIndyでできるんじゃないの。 けど、今回の用途には大げさすぎるよね。
ということは今回の用途の為にC#に乗り換えるなんて愚の骨頂と
534 :
デフォルトの名無しさん :2006/01/14(土) 15:18:07
ネトラジのストリーム再生全部やってくれるコンポーネント無い?
WMP
536 :
デフォルトの名無しさん :2006/01/14(土) 15:32:09
537 :
デフォルトの名無しさん :2006/01/14(土) 17:06:29
ActiveXコントロールのインストールってすごくね?どうなってんの????
538 :
デフォルトの名無しさん :2006/01/14(土) 17:19:00
しかもmsdn行ったらいろいろダウンロードできるwwwwなんだこれwwwww 言語関係なしで使えるようになってんの}??
うぜ
540 :
デフォルトの名無しさん :2006/01/14(土) 17:36:48
いっくらやってもやっぱりわかんねー!おしえてー!!! form1のメニューである項目を選んだら form2がポップアップされるようにしたんだけど どうやればいいのー???
541 :
デフォルトの名無しさん :2006/01/14(土) 17:41:15
542 :
デフォルトの名無しさん :2006/01/14(土) 17:44:46
activeXって普通にあるコンポーネントみたいなのばっかやな Delphiの中の人もこれをラップしてるだけなの???
543 :
デフォルトの名無しさん :2006/01/14(土) 17:53:42
ActiveX=COMは多言語で使いまわせるクラスライブラリ=コンポーネント。 技術的にはDLL経由で関数ポインタやり取りしてるだけ。
545 :
デフォルトの名無しさん :2006/01/14(土) 19:31:14
>>544 >DLL経由で関数ポインタ
ほーう・・・ OSの機能の一つでやってるのか 勉強になりました!
546 :
デフォルトの名無しさん :2006/01/14(土) 21:23:39
で?
548 :
デフォルトの名無しさん :2006/01/14(土) 21:38:21
>>547 使い方のマニュアルがVBで、何がなんだかわからなかったお
549 :
デフォルトの名無しさん :2006/01/14(土) 23:39:35
ChangeFileExtとExtractFileNameの戻り値(というより中の処理?)をWideStringにできませんか? Delphi6でUnicode使いたいのでWideStringを扱いたいのですが。。。
mp3プレイヤーなどで、 mp3ダブルクリック時 プレイヤーが起動していなければ、プレイヤーを起動。 プレイヤーがすでに起動していれば、新しくプレイヤーを起動しないで、 現在起動しているプレイヤーで再生する という動作がありますが、 これを実現するにはどうしたらよいのでしょうか? 二重起動防止だけならば下記で出来たのですが・・・ var MainWnd: THandle; begin MainWnd := FindWindow('TForm1', nil); if MainWnd <> 0 then begin SetForegroundWindow(MainWnd); Exit; end;
>>549 単に戻り値をWideStringにするなら
WideString(ExtractFileName('Hoge'))でおkだが、
中もUnicodeで処理したいなら自作かTntを使う
>>550 WM_COPYDATAでも使ってみれば?
552 :
549 :2006/01/14(土) 23:58:14
>>551 解説ありがとうござます。
Tntの中身を検索してみたのですが、ChangeFileExtとFileExtractPathはありませんでした。
ディレクトリのファイル一覧をTntのListBoxに追加する処理を作っている為の質問だったのですが、
TSearchRecとかFindFirstとかもWideStringに対応してないですか?
関数ないとは、そりゃスマナイ…と思ったらちゃんとあるじゃんよ TntSysUtils.pasにWideString用の関数ちゃんとあるぞ TSearchRecWなんて構造体もしっかり宣言されている …もしかして釣られたのかオレ?
554 :
549 :2006/01/15(日) 00:13:10
>>553 ほんとにすんません!確かにありました!!
Windowsの"含まれる文字列"で検索してました。。。
本当にありがとうございます。お手数かけてすみませんですorz
555 :
550 :2006/01/15(日) 00:34:36
TPopupMenuに背景画像を付けたいのですがどのようにすればいいでしょうか?
TMenuItemのOnDrawItemで描写
調べてもさっぱりなんで諦めます ありがとうございました
例えば、 「ファイルのダウンロード」等のダイアログの中身を読み取る…みたいなことって出来ますか? フリーウェアでダイアログ中のStaticLabel等をコピペ出来るツールがあったのですが… どうやって実現させてるのかなぁと。 いくつかヒントを挙げてくれれば、後は自力で何とかします。
> フリーウェアでダイアログ中のStaticLabel等をコピペ出来る 簡単。ハンドルを見つけるのがちょっとメンドイけど、Static はウィンドウなので ハンドルさえ見つかれな、WM_GETTEXT でテキストげっと
特定のイベントが起きたときだけフォームを最前面に表示したいのですが SetForegroundWindow( Application.Handle ); Update; ではうまくいかないのですが。。。
563 :
deleteじゃないよdelphiだよ :2006/01/15(日) 10:37:41
はじめまして、最近、Delphi7プロフェッショナル版(アカデミック版)を 入手した、中学3年生の男子生徒です。身長170cm体重55kgです。一応数学は 得意です。 入門本がアスキー出版のコースウエアかカットシステムのDelphi2005用の 一連の本しかないので、迷っています。それは2006を買うかどうかです。 我が家では大蔵大臣は母です。勉強に役立つし、将来工学部に行くからと 説得できるのですが、もうDelphi7をもっているのに2006を買っても何か メリットはあるかどうかわかりません。繰り返しますが参考書籍が少なくて Delphi7用はコースウエアしか見当たらないので、将来2006関連の本が出る ことを期待して2006を買ったほうがいいでしょうか?自分の学習スタイルは 本をじっくり読むことです。
564 :
563 :2006/01/15(日) 10:40:32
ちなみに、いま取り組んでいることはデータベースプログラミング です。図書館のサーバーに5台のノートパソコンを使ってアクセスし 蔵書をチェックするシステムに取り組んでいます。学校には お金がないので、図書委員でソフトを作ることになりました。
まずは、Delphi7 を使い込んでみたらいいんじゃないの? 機能的に Delphi2006 で出来ることが増えたわけじゃないし、 あせって買う必要もないし、D7で出来ることをやってみてはいかがでしょうか。
>>563 Delphiは滅亡への道を辿ってるから、今後も
D7(で使える)本>>>>超えられない壁>>>>D2006の本
という構図は変わらないと思う
あと工学部に行くなら(絶対ではないけど)Delphi使う機会ほぼないかと
だいたいCで書くし
できることが増えたわけではないというのは、逆に言えばDelphi7でも大抵のことは
できるからなんだよね。開発効率は2006の方があがるのは間違いないと思うけど。
>>567 Delphi7持ってればFreePascalは論外かと。
一応XP対応してるしD7でいいんじゃね。 個人で明確な動機なしに2006購入するのは無駄すぎる。
570 :
デフォルトの名無しさん :2006/01/15(日) 13:40:02
初めまして。 サーバーにファイルをアップロードするプログラムを組みたいのですが、どうやったらいいのかわかりません。 いろいろ調べてみたのですが、なかなか理解できなくて・・・。 簡単に書いていただけないでしょうか? お願いします。
まずはサーバにファイルをアップロードするプロトコルをはっきりさせないと
572 :
デフォルトの名無しさん :2006/01/15(日) 14:16:14
プロトコルとは、アドレス・ユーザー名・パスワード等のことですよね・・・。 それらは、分かってます。
↓ここで満を持してエスパー降臨
どうみても知識不足です ありがとうございました。
>>572 プログラム以前にネットワークについての知識を学んだ方が良いでしょう
まずTCP/IP関連の本を1冊でも読んでから質問。(RFC読んで来いとまでは言わん。) 話はそれから。
きっとファイルをアップロードするのはFTPが全てだとか思ってる類なんだろうな。
FTPって何ですか? って来そう('A`)
579 :
デフォルトの名無しさん :2006/01/15(日) 15:09:44
中1から趣味でプログラミングして、(主にゲームとゲームとゲーム) 科学技術高校の情報科に推薦合格した俺が着ましたよ。 ・・・すっげー叩かれそう
581 :
579 :2006/01/15(日) 15:16:21
>>580 俺がきましたよ って言ってるじゃないかwwww 違う違う
ファイル転送なら謎の自作プロトコルで作ったりしたおwwww msnメッセ糞バルスwww
ftpはwininetでもできるんじゃなかったっけ?
いいから、どっかいちゃいな、じゃまなんだよ
>>579 叩かれるって言うかスレ違いなんじゃないの?
質問は?
推薦合格したのを自慢したいだけ?
585 :
579 :2006/01/15(日) 17:30:38
そうだよ まあお前らが束になっても一生追いつけないだろうけどねw
586 :
579 ◆UM8a1py3qg :2006/01/15(日) 18:16:15
585は俺じゃないよ。 偽者が出たからトリ付けるね。
>>586 おめでとう。
がんばれよ。パソコンばっかやってないで、遊んだりもしろよ。
Vipperの為のDelスレ作って出てってくれ
589 :
デフォルトの名無しさん :2006/01/15(日) 19:08:49
やはり、理解する必要ありますか・・・? アップロードのことだけでそこまでする余裕無いので諦めます。 アドバイスありがとうございました。。
case文って同時に2つのことを実行できないんですか? ENDが必要な場所に , があります、というエラーが出ます 1..100 : x:=10, y:=10; 101..200 : x:=20, y:=20; 2つ実行する方法ってないんでしょうか?
begin end;で囲め
case Hoge of 1: begin ShowMessage('Hoge'); ShowMessage('Uho'); end; end;
593 :
590 :2006/01/15(日) 19:32:24
特定のピクセルだけ色を塗り替えるって命令ありますか?
Form1.Canvas.Pixels[x,y] := clRed;
596 :
デフォルトの名無しさん :2006/01/15(日) 23:32:24
質問があります。 あるファイルのファイルの種類(エクスプローラーの”種類”の列 に表示される値)を取得するにはどうすれば取得できるでしょうか?
何か関数があったような気がしないでもないが、 普通にやるならレジストリ見れば分かる
思い出した、SHGetFileInfoだな
599 :
481 :2006/01/15(日) 23:39:07
FindFirstとFindNextでフォルダ内のファイル名の取得について質問した481です。 やってみたのですが、上手くいきません。 var sFile : TSearchRec; szFileName : string; begin nRet := FindFirst(szInputDir, faAnyFile, sFile) szFileName := sFile.Name; while (true) do begin if (FindNext(sFile) <> 0) then begin break; end; szFileName := sFile.Name end; end; というような感じで仮に書いてみたのですが、FindFirstではファイル名が取得できているのですが、 while文の中のFindNextで次のファイル名が取得できません。 どのようにすれば取得できるようになるのでしょうか?
ヘルプのサンプルを16777216回嫁
ああ、ヘルプ1箇所だけ間違ってるから >if (sr.Attr and FileAttrs) = sr.Attr then は >if (sr.Attr and FileAttrs) = FileAttr then な。 あとはヘルプ嫁
s抜けたがまぁ許せ
あの・・・10進数で256が16進数では100ってどうやったらわかるの でしょうか??もう頭パンクしそうです!!
605 :
596 :2006/01/15(日) 23:56:05
>>606 すいません。もうわかりましたぁ☆
簡単だったんですね。
線形リストとポインタがさっぱりわかんね… なんかコツとかある?
デバッガで全部の変数の内容表示して ポインタ・参照の値がどうなってるかを理解しながらステップ実行
610 :
デフォルトの名無しさん :2006/01/16(月) 14:15:28
質問があります。 ファイルが開かれていたり、ファイルにデータを書き込んでいる最中は ファイルが使用中という事でそのファイルを操作できないですけど、 ファイルが使用中かどうかを調べる関数とかは存在するでしょうか?
ファイルを操作して使用中なら使用中。 どうしても処理前にリソースをロックしたいなら書き込み側アプリにも手を入れてMutexでも仕込んどけ。
612 :
デフォルトの名無しさん :2006/01/16(月) 17:52:54
>>610 try
ファイルを開く処理
except
使用中だった処理
end;
これでよくね?
613 :
デフォルトの名無しさん :2006/01/16(月) 18:54:45
「こういう機能を実現したいけど何ていう関数を使うんだろう?」 って時は、みんなどうやって調べてるの? 今日も、IEを呼び出す、ってためだけに散々検索しまくって 見つけたソースをコピペして済ませました。 意味もわからずコピペしただけだから、発展性もないし。 本ももってるけど、そういう意味では全く役に立ちません。
614 :
デフォルトの名無しさん :2006/01/16(月) 18:57:20
>>613 文字列検索なら、
まずcopyとかの知ってる文字列関数のページだして、
そのあと、ヘルプの左上?にある、グループのウィンドウ出して、
そーすると文字列操作シリーズがいっぱいでたりするから
ウィンドウ最大化して説明をひたすら読む
615 :
デフォルトの名無しさん :2006/01/16(月) 19:10:20
>>614 ヘルプの時に出てくる「参照」ってやつですよね?
たしかに、それだと知識が有機的に広がっていきますよね。
この場合、初心者の場合は目当ての項目にたどり着くまでが
非常に困難ですよね。初心者や他の(非オブジェクト指向の)言語しか
経験ない人間には辛いところです。
知識が少ないうちは、暇なときにTipsが載ってるサイトを眺めてりゃ、IE起動などといったありがちな疑問は解消する。 内容まで覚えて無くても、あああそこに載ってたなって思い出せれば十分だし。
キーワードがわからなかったらここで聞けと
>>613 コピペしたソースの全てを理解するのは大変なときもあるので、
見たことがないキーワードだけでもざっと調べておく。
それがWindowsAPIだったりすると、他言語のサンプルがあってその言語の勉強にもなったり。
619 :
デフォルトの名無しさん :2006/01/16(月) 19:36:41
WindowsAPIなら、思い切って検索キーワードから Delphi はずすといっぱい出るよね 慣れればC++⇒Delphi 翻訳(・∀・)デュワー(・∀・)デュワー
620 :
608 :2006/01/16(月) 23:05:20
621 :
481 :2006/01/16(月) 23:12:13
解決しました。 FindFirst関数の第1引数にフォルダ名までのパスしか入っていなかったことが原因でした。 ヘルプをちゃんと読んだらしっかり書いてありました。 すみませんでした。 テスト用だからといって、フォルダ名:a、ファイル名:a、b、cなんてやってたこともあって、 気付くのがホントに遅くなりました。。。
自作のクラスにタイマー機能付けようとしたのですが メモリ違反といわれてうまくいきません。 Ttest = class s : string; t :Ttimer; end; procedure Tform1.button1click; var test:Ttest; begin test := Ttest.create; test.t.enabled := true; //ここでエラーがでます。 test.free; end;
TTest.Create内でtに値をちゃんと代入してるか? test.tがnilのままだったらアボーンだぞ。
624 :
デフォルトの名無しさん :2006/01/17(火) 08:29:15
SJIS以外の文字を扱うため、WideString型の変数を用意して Unicodeで管理しようと思います。そこで質問です。 1.監視式ウィンドウで見るとSJIS以外の文字が「?」で表示されてしまう 値を見るにはどうすればよいのでしょうか 2.SJIS以外の文字が入っているWideString型の文字を一度String型に代入して もう一度WideString型に代入すると文字が?になってしまう(情報の欠落?) この場合、VCLの内部までさかのぼって調べる必要があるのか? よろしくお願いいたします
>>623 原文のままなのでnilのままだと思いますが
tの値の入れかたもよくわかりません。
constructor TTest.Create; begin ... FT := TTimer.Create(nil); // TTestがTComponentならnilの代わりにSelfを渡す ... end; destructor TTest.Destroy; override; begin ... FT.Free; // TTestがTComponentなら不要 ... end;
>>624 Delphiの中の人は基本的にUNICODEは理解出来ない
WideStringをStringに代入したら情報が破損するのは当然
WideCharToString等で安全に変換する必要がある
混じれすするとVB.NET使え
>>627 そうだったのかぁ。俺も知らんかった。てっきり、自動変換が行われると
思っておった。やべぇ。ってまてよ。
var
A: string;
S: WideString;
begin
A := 'あ';
S := A;
A := S;
ShowMessage(S);
ShowMessage(A);
end;
が正しく表示されるのは何故??
>>642 が言ってることはそもそもマッピングできな文字が入ってるから、
WideCharToStringでも同じじゃないの?
この関数何かしてくれる??ってより、例外生成してしてくれるのかな??
627 は言ってることがおかしい、と思う
for y:=0 to Image1.Picture.Height -10 do begin for x:=0 to Image1.Picture.Width -10 do begin check := False; All10R := 0; All10G := 0; All10B := 0; for j:=0 to 9 do begin if check then Break; for i:=0 to 9 do begin
633 :
632 :2006/01/17(火) 14:43:53
上の続き if (Pnt1[y+j,x+i].R+Pnt1[y+j,x+i].G+Pnt1[y+j,x+i].B)=0 then //RGB(0, 0, 0)を発見したら begin check := True; //フラグ立ててから Break; //抜ける end; Inc(All10R, Pnt1[y+j,x+i].R); Inc(All10G, Pnt1[y+j,x+i].G); Inc(All10B, Pnt1[y+j,x+i].B); end; end; //フラグが立ってないときだけ if not check then All10[x,y] := All10R +All10G +All10B; end; end; このループってRGB(0,0,0)を発見した場合は処理の順序はどうなるんでしょうか?
634 :
デフォルトの名無しさん :2006/01/17(火) 14:55:55
PageControlにリッチテキストをのせてテキストエディタを作成してるのですが、 最新に作ったタブシートにはフォントなどの機能がアクセスできるのですが、その前までに作成したタブシートをアクティブにしても、機能がアクセスできません。何か特別な方法があったら教えていただけませんでしょうか?
>最新に作ったタブシートにはフォントなどの機能がアクセスできるのですが、 これが良く分からない
636 :
デフォルトの名無しさん :2006/01/17(火) 15:10:12
>>634 PageControl1.ActivePage := TabSheet2;
>632 ざっと見た感じ。 ある点Pnt1(y,x)について(y,x)から(y+9,x+9)について調べる。 調べる順序は、Pnt1(y,x)、Pnt1(y,x+1)……Pnt1(y,x+9)、Pnt1(y+1,x)、……Pnt1(y+9,x+9) 1.この正方形の中にRGB(0,0,0)がなかった場合、All10[x,y] は変化なし。 2.あった場合Pnt1(y,x)からRGB(0,0,0)になる点までのRGBの合計をAll10[x,y] に代入。 以上を(0,0)から(Image1.Picture.Height -10,Image1.Picture.Width -10)までの全ての点で行う。 ※疑問点 Pnt1は[y,x]の順でAll10は[x,y]の順? All10R、All10G、All10Bって3つも変数いらなくない?
638 :
632 :2006/01/17(火) 15:34:50
>>637 どうもです、RGB(0,0,0)がなければAll10の計算は無視されてしまうんですか
となるとAll10R,G,Bだけ算出してるのみになるようなので意図してることと全く逆かもしれません
RGB(0,0,0)が見つかったらAll10[x,y]はデータなしにしたいんですが
単にこんなのでいいんですかね
if not check then All10[x,y] := 0
他に空データにする書き方があればいいんですが
639 :
637 :2006/01/17(火) 15:58:13
ああ、スマン。よく見ると逆だった。 1.この正方形の中にRGB(0,0,0)が「あった」場合、All10[x,y] は変化なし。 2.「なかった」場合Pnt1(y,x)からPnt1(y+9,x+9)までのRGBの合計をAll10[x,y] に代入。 >RGB(0,0,0)が見つかったらAll10[x,y]はデータなしにしたいんですが なかった場合は合計を代入、でいいのか? それなら、 if check then All10[x,y] := 0 else All10[x,y] := All10R +All10G +All10B;
Delphi起動したときのTFormの座標、サイズってどこで設定するんだっけ? さっきからレジストリみてるけど、よくわからん。
641 :
デフォルトの名無しさん :2006/01/17(火) 16:30:44
タスクトレイにアイコンを表示させるアプリはよく見かけ、 Delphiでもサンプルやコンポが結構ありますが、 タスクトレイの領域にFormそのものを格納することはできますか? どこかで長細い時刻表示をしているアプリを見たのですが・・・
意味不明。アイコンをいろいろ用意して動的に変更して時刻表示やタスクマネージャ のCPU使用量などを擬似的に表示することはできる。
TClockのことだろ。あれタスクトレイの領域じゃありませんから。 TClock2chのソース嫁。
644 :
デフォルトの名無しさん :2006/01/17(火) 16:36:12
要は、アイコンの大きさではなかなか思うような情報を 表示できないため、長細いFormを格納できないかと思ったのです。
そもそもFormって言葉の使い方が違ってる
あったかくのーる
647 :
641 :2006/01/17(火) 16:50:53
>>643 おお!そうなんですか!
情報、ありがとうございます。
>>647 ただ、そのレベルであれを表現するのはたぶん無理
あと1〜2年は勉強するつもりで頑張りな
【例題】 ・Button→Btn ・Label→Lbl ・Image→Img 【問題】 ・Memo→? ・Panel→?
GExpert使っとけ
>649 ・Panel→Pnl
>649 ・Memo→Mem
ボインボインの法則に則るならMmだな
Memって他にも使ってそうだけど、やっぱりMemだよな・・・
1文字目ではない母音を抜くんだよ
Memoでいいじゃない
・DataSource→? ・UpdateSQL→? ・QuickRep→?
dsrc sql rep
Delphi 2006 で MemCheck を使いたいんだけど、コンパイルできません。
何とかお助けを。
ニューズグループでも話題になってますが、解決はしていないようです。
http://groups.google.co.jp/group/borland.public.delphi.thirdpartytools.general/browse_frm/thread/47c60796f04c0956/d889ccb8b3293369 エラー内容は
[Pascal Error] MemCheck.pas(1554): E2003 Undeclared identifier: 'System'
[Pascal Error] MemCheck.pas(1557): E2003 Undeclared identifier: 'SysUtils'
[Pascal Error] MemCheck.pas(1561): E2003 Undeclared identifier: 'Variants'
エラーがでたコードは procedure ChangeFinalizationsOrder; 内の
if {$IFNDEF DELPHI6_OR_LATER}@{$ENDIF}CurrentUnitInfo.Init = @System.System then //ここ
NewUnitsInfoOrder.Insert(0, CurrentUnitInfoCopy)
else
if {$IFNDEF DELPHI6_OR_LATER}@{$ENDIF}CurrentUnitInfo.Init = @SysUtils.SysUtils then //ここ
NewUnitsInfoOrder.Insert(1, CurrentUnitInfoCopy)
else
{$IFDEF DELPHI6_OR_LATER}
if CurrentUnitInfo.Init = @Variants.Variants then //ここ
NewUnitsInfoOrder.Insert(2, CurrentUnitInfoCopy)
else
{$ENDIF}
この @System.System とかがおかしいわけですが、この部分が
何をしようとしてるかもさっぱりなので行き詰まっております。
MemCheck全ソースは
http://v.mahon.free.fr/pro/freeware/memcheck/より {$IFDEF VER170} を VER180 に変えて試しました。
>>659 Warning: this routine is likely to need to be rewritten when upgrading Delphi
>>640 オブジェクトレポジトリでしょ。
デフォルトプロジェクトを設定。
663 :
デフォルトの名無しさん :2006/01/18(水) 01:06:47
ボタンをクリックすると子ウィンドウが表示されるようにしたいのですが どうすればいいのでしょうか?
Form2.Show;
for y:=0 to Image1.Picture.Height -10 do begin for x:=0 to Image1.Picture.Width -10 do begin for j:=0 to 9 do begin for i:=0 to 9 do begin r:=0; g:=0; b:=0; case Pnt1[y+j,x+i].R of 0..43 :begin Pnt2[y+j,x+i].R:=22; end; 44..85 :begin Pnt2[y+j,x+i].R:=65; end; 86..127 :begin Pnt2[y+j,x+i].R:=107; end; 128..169:begin Pnt2[y+j,x+i].R:=149; end; 170..211:begin Pnt2[y+j,x+i].R:=191; end; 212..255:begin Pnt2[y+j,x+i].R:=234; end; end;
666 :
665 :2006/01/18(水) 04:47:44
case Pnt1[y+j,x+i].G of 0..43 :begin Pnt2[y+j,x+i].G:=22; end; 44..85 :begin Pnt2[y+j,x+i].G:=65; end; 86..127 :begin Pnt2[y+j,x+i].G:=107; end; 128..169:begin Pnt2[y+j,x+i].G:=149; end; 170..211:begin Pnt2[y+j,x+i].G:=191; end; 212..255:begin Pnt2[y+j,x+i].G:=234; end; end; case Pnt1[y+j,x+i].B of 0..43 :begin Pnt2[y+j,x+i].B:=22; end; 44..85 :begin Pnt2[y+j,x+i].B:=65;b end; 86..127 :begin Pnt2[y+j,x+i].B:=107; end; 128..169:begin Pnt2[y+j,x+i].B:=149; end; 170..211:begin Pnt2[y+j,x+i].B:=191; end; 212..255:begin Pnt2[y+j,x+i].B:=234; end; end; end; end; end; end; Pnt1に格納されたRGB値を特定の範囲で書き換えて減色してるものなんですが、 Pnt2に格納した値を使って減色した画像を描画するにはどうすればいいんでしょうか?
667 :
665 :2006/01/18(水) 05:02:56
image2に描画するとして・・・
取得はどうしてるの。ScanLine で取得してるんなら、設定もできるだろうに。 なんかややこしいことするまえに、ちゃんと基本を押さえておかないと
やってみた uses Jpeg; procedure TForm1.FormCreate(Sender: TObject); var jpg: TJpegImage; begin Image1.AutoSize := true; Image2.AutoSize := true; jpg := TJpegImage.Create; try jpg.LoadFromFile('c:\サンプル.jpg'); Image1.Picture.Bitmap.Assign(jpg); finally jpg.Free; end; end;
procedure TForm1.Button1Click(Sender: TObject); var x, y, i: integer; ps, pd: PByte; begin Image2.Picture.Bitmap.Width := Image1.Picture.Bitmap.Width; Image2.Picture.Bitmap.Height := Image1.Picture.Bitmap.Height; Image2.Picture.Bitmap.PixelFormat := pf24bit; for y := 0 to Image1.Picture.Bitmap.Height-1 do begin ps := Image1.Picture.Bitmap.ScanLine[y]; pd := Image2.Picture.Bitmap.ScanLine[y]; for x := 0 to Image1.Picture.Bitmap.Width-1 do for i := 1 to 3 do begin case ps^ of 0..43 : pd^ := 22; 44..85 : pd^ := 65; 86..127 : pd^ := 107; 128..169: pd^ := 149; 170..211: pd^ := 191; 212..255: pd^ := 234; end; inc(ps); inc(pd); end; end; end;
671 :
659 :2006/01/18(水) 12:52:34
>>660 確かにそう書いてありますね。
メモリマネージャ変わったみたいだからいろいろややこしいのか
FastMMのメモリリークレポートでも、発生箇所なんかも
追跡できるようにならないかどうか並行して調査中。
672 :
665 :2006/01/18(水) 13:10:58
for i := 1 to 3 do これはなんのためにおいてあるんですか?
673 :
641 :2006/01/18(水) 13:43:02
タスクトレイ関係はあまりにも難しそうなので、タスクバーを親として フォームをタスクバーに埋め込みました。 これでもいいのですが、できればスタートボタンに埋め込みたいので、 スタートボタンのハンドルを取得して、MoveWindowで大きさを変えようと したのですが、何も変わりません・・・何故でしょう?
675 :
デフォルトの名無しさん :2006/01/18(水) 15:02:54
UTF-8 = Unicodeと思っちゃって WideString型変数にブチ込んでも問題ないですか?
>>675 UTF8とUnicodeは別物
UTF8StringとUtf8Decode使え
>>675 UTF-8を入れれるのはWideStringじゃなくてAnsiStringだお。
ま、Utf8Stringってのもあるが、AnsiStringでtypedefしてるだけ。
見通しをよくするため普通は分ける
>>676-
>>678 ありがとうございました
今後はUTF-8はUtf8Stringにブチ込むことにします
680 :
デフォルトの名無しさん :2006/01/18(水) 17:22:53
Form を起動時に最大化して表示する方法を教えて下さい。 Delphi7 です。
WindowStateをwsMaximized
682 :
669 :2006/01/18(水) 20:38:21
>>672 R,G,B の分で1ピクセルにつき3回
>>665 それよりこっちの方が謎。
for j:=0 to 9 do
begin
for i:=0 to 9 do
begin
r:=0;
g:=0;
b:=0;
なんで、同じことを1ピクセルにつき最大10回も繰り返すのか?
そういえば彼はこれをなおしたんだろうか。 > //類似領域をコピペする際に使えるようにPnt1をPnt2にコピーしておく > Pnt2:=(Pnt1); 動的配列のディープコピーはこれではできないんだが。。。
例えばパネルなんかは自分自身に他のコンポーネントを乗せられるじゃないですか でもラベルとかは他のコンポーネントを乗せられない この、[乗せられる/乗せられない]はどこのプロパティで設定されてるんだっけ?
TWinControlの派生であれば Handleを持っているので親になれる
>>685 TControl.ControlStyleのcsAcceptsControlsじゃない?
688 :
685 :2006/01/19(木) 02:29:22
>>687 それそれ!ComponentStyleと勘違いしてた
こんな夜更けにサンクス
689 :
デフォルトの名無しさん :2006/01/19(木) 06:34:35
質問させてください。 procedure CActinData_Set; var DataList : TStringList; i , j : integer; begin DataList := TStringList.Create; try DataList.LoadFromFile('CActionData.txt'); Cconf_x := StrToFloat(DataList.Strings[1]); Cconf_y := StrToFloat(DataList.Strings[2]); 〜省略〜 finally DataList.Free; end; end; このような状態でAcccessViolationエラーが出てしまいます。 ちなみに、それの一歩前の部分で同じ形式で書かれてる部分ではエラーが出ません。 またこのプロシージャを実行するタイミングを変えるとエラーがでなくなります。 (違うところでエラーが出ますが)
690 :
デフォルトの名無しさん :2006/01/19(木) 06:35:06
続き そして不思議なことに一度動的に作成したことのあるTImageをソースから削除したのが、 このエラーのきっかけなのです。 PaintBoxを知らなかったときに背景代わりに60個のTimageを動的に作成して並べていたのですが、 それを削除するとエラーがでて、戻すとなぜかエラーがでなくなります。 35個あれば問題ないのですがそれ以上減らすとエラーがでております。 動的に作成したものについては全てFreeやSetlength(〜,0)など指定してみたのですが直りませんでした。 どのような理由からくるものかわかる方はいらっしゃいませんか?
理由は勉強不足
693 :
692 :2006/01/19(木) 10:24:24
photoshopでレベル補正を見てみたら解決しました RGBそれぞれの階調の設定みたいですね これだと6×8×5で240色ってことですか
>>691 その理由はもちろんですけど、
実際にここ数週間かけたものが動かなくなってしまってるので、
もっと直接的な原因とその改善方法を教えていただきたいんです。
695 :
692 :2006/01/19(木) 10:27:00
あ・・ちがうかも・・
DataList の行数を表示してみる
>>695 いや、RGB 各色のパレット設定値の段数だから、色数でいいんじゃないの。
この方法では、RGB を線形に区切ってるだけで、パレットの最適化はしてないのね。
ところで君は665だろう? 同じことしてるし。上のレスにちゃんと応答してよね
>>697 パレットの最適化が問題みたいですね・・・photoshopの誤差拡散の減色と品質が雲泥の差でした
前の質問についてはまだ考えてるので終わってから書こうと思ってました、すみません
> パレットの最適化が問題みたいですね そう。森の中の葉っぱをとった写真と夕焼けの写真を同じパレットで減色するのに無理が あるのは当然。
>>696 3箇所で同じ書き方をしてるのですが、
うまくいってる部分では直前が0行で読み込んだ後は44行でした。
問題の箇所も同じように直前が0行で、そのままエラーとなります。
そりゃない行を参照すればAVがでるわな。なぜ読み込んだ後を見ないのか謎だが
>>701 LoadfromFileの途中でエラーが出て終了するために、
読み込んだ後をチェックできないんです。
エラーが出るのは読み込んだ後の参照部分ではなくて、
DataList.LoadFromFile('CActionData.txt');
この行の途中でエラーとなります。
そのプロシージャを違う段階で呼ぶと普通に通るので、
載せた箇所自体に問題があるわけじゃない気もするのですけど、
それでも違う部分でどこかしらエラーが出るのはどこかがおかしいんですよね・・・
private BackImage : Array[0..59] of TImage; procedure Create_Image; 〜省略〜 procedure TMainForm.Create_Image; var i , j : integer; begin for i := 0 to 11 do begin for j := 0 to 4 do begin BackImage[i * 5 + j] := TImage.Create(Self); with BackImage[i * 5 + j] do begin Parent := pnlCtrl; Picture.LoadFromFile('backimage.bmp'); Left := i * 40; Top := j * 38; SendToBack; end; end; end; end; なぜかこのプロシージャがある時はエラーは出ていなかったのですが、 これを削除すると関係ない上記のDatalist.LoadfromFileの部分でAccessViolationがでるんです。
そんな訳分かんないこと言われて理解できるのはエスパーだけ
withでなんか勝手に他の呼ばれてるんじゃねーの
その関数呼ぶ前にヒープだかスタックだかが破壊されまくってるんだろ。
画像をタイル状に敷き詰めるのに TImage はひとつだけでいいんだよ。 Bitmap に画像をひとつ読み込んで、予めタイル状に描けば済むのに。 あるいはもうひとつの Bitmap にタイル状に描いておいて PaintBox.OnPaint で表示するとか。
たぶんメモリ破壊だろうな
>>705 なぜかそのイメージ作成部分があると動き、呼ぶのをやめるとエラーになるのです。
>>706 今からヒープとスタックについて調べてみます。
>>707 その方法を昨日知ったのでそう書き直そうとしたらこのエラーに遭遇しまして。
>>708 それは動的に作成したものを破棄し忘れている部分があるとかでしょうか?
あまりに心配でPCのメモリ壊れてないかのチェックはしてみてしまったのですが。
率直に言って、上記ルーチンの有無とエラーは関係ないと思うけど。それ以外の 要因に気づいてないような気がする。しめされたコードだけでエラーを類推するのは ほとんどエスパーの仕事になってるし。ま、適切なコードをしめせないのがエラー原因 を突き止めれない理由でもあるんだが。
それからファイルアクセスはちゃんと絶対パスを設定しろよ。ファイル名だけで アクセスするとカレントディレクトリが変化しただけでアウト。LoadFromFile() で失敗する場合はこれが多い。
頓珍漢なアドヴァイスはいりませんから
712が有力だな
自演もいりませんから
別のファイルや存在しないファイルを読みに行っても アクセス違反にはならないけどな。
>>713 質問者が頓珍漢なのでそれにレベルを合わせてあげてるのですよ^^
もうソース全部出せよ この情報量でやっても無意味
エスパー同士がんばれよ!
> これを削除すると関係ない上記のDatalist.LoadfromFileの部分でAccessViolationがでるんです。 これ「AccessViolation」を厳密な意味で使ってるの? 失敗するだけじゃないの?
712が有力だな
723 :
デフォルトの名無しさん :2006/01/19(木) 14:24:09
712が有力じゃね?
多分712
きっと712
エスパー大集合!!
720も捨てがたい
画像をカレント以外に読み込みにいって、カレントが変更されて712=720 になってると思う
TImageで動画表示させたらチラツキまつね。
712ならさっき電車で見たよ
置換から女の子助けようとして逆に痴漢と間違えられてた。
ほんとの置換は732だよな
734 :
689 :2006/01/19(木) 23:02:23
>>711 少し出かける必要があったので出ていました。
713は別人です。
あの後メモリ破壊という言葉を元に調べたところ、
自分があげたルーチンの前でおかしくなっていてそのせいだった気がしました。
今から怪しい部分を徹底的に調べてみたいと思います。
頓珍漢な質問をしてすみませんでした。
もし他の部分を全部見直してみても直らないようでしたら、
ソースを全部あげてみたいと思います。
絶対パス指定というのはインストール先でも困らないように、
現在のパスを取得してから書く方法ですよね?
エラーが直ってから実装したいと思います。
アドバイスありがとうございました。
>>734 そんな大変なことじゃないから忘れないうちにやっとけ
hoge.LoadFromFile(FileName);
を
hoge.LoadFromFile(ExtractFilePath(ParamStr(0)) + FileName);
にするだけ
あ、別にexeと同じ階層とは限らないか・・・ ('A`)
がんばるねぇ
>>735 親切にありがとうございます。
早速やってみたいと思います。
>>696-737 後おかげさまで原因が突き止められました!
ずっとそのLoadFromFile周りを調べてたので気づかなかったのですが、
ここの方のアドバイスを参考にその前の部分を全部1から調べていったら直りました。
SetLength(Pl,2);
for i := Low(pl) to High(pl) + 1 do
とHigh(pl) - 1 とかいていたつもりがプラスになっていて違反を起こしていたようです。
皆様お騒がせいたしました。
本当にありがとうございました。
2 をリテラルで書いておいて、High、Low もないもんだが
結局、あれか Image たくさんつくるルーチンは関係なかったのか? アホエスパーばかりだったな・・・
頼む。お前しゃべるな
742 :
デフォルトの名無しさん :2006/01/20(金) 02:04:12
Font.StyleでfsBoldなどに変更した文字を戻すのはどうすればいいのでしょうか?
-[fsBold]ってのはダメでした。 Font.Style := []; で出来た。
Excludeっていうのもある
746 :
デフォルトの名無しさん :2006/01/20(金) 02:28:42
>-[fsBold]ってのはダメでした。 どうせ Font.Style := -[fsBold]; とかやってたんだろ。
Font.Style := Font.Style-[fsBold]; と書けばいいだけなのに。 ここ最近変なニート君が常駐してるなぁ。いよいよ末期かもしれない。 不毛な議論ばっかしてたオサーンたちのがまだましだったかも。
不毛がましって、末期症状だよな
ってか、やはり質問者も回答者もカスだよな、最近。
変なのが一匹常駐するだけでこうも変わるもんだな
自己紹介、乙
くだすれなんだからみんなカスだよ 変にプライドとか持っちゃダメ
カスすれにするといいね、次から。
みんなエスパーじゃなかたってことだな
>>755 ここで尋ねる規模じゃないと思うのだが・・・
問題点を抽出しぬいて、簡潔に尋ねてください。
>>756 おっしゃるとおりです・・
誤った部分が取得されるということはヒストグラム取得〜コピペ以外はあまり関係がないと思います
最後のほうのDの中で最大のものを探す処理ですが、
if max:=100(100ピクセルの中の使われてる色とその回数が完全に一致する)
という条件のときしかx,yを取得しないようにしても取得場所がおかしかったので比較以前でミスしてる気がします
比較する条件文か、配列D、wb[ ]、AllHis[ ]で格納してるデータがおかしいのか・・・
ここはなにしてるんだ?っていうのがあればいくらでも言ってください
ヒストグラム取得部
画像全体で10×10ピクセルの範囲ごとに使われてる色を見て、最大216色でどの色が何回使われてるか調べてます
除去領域指定部
クリックした地点から少しずつずらして白く塗りつぶしてます。同時にその範囲の1つ1つのヒストグラムをwbHis[ ]に格納してます
比較部
D値(比較する範囲同士で色が一致する個数)を求めてます。Dが0なら全く同じ色が使われておらず、100なら使われてる色も個数も同じということになります。
長くなってすみません
簡潔じゃないですね・・問題なく動作するんで余計にどこがおかしいのかわからなく・・
訂正です if D[x,y]:=100(100ピクセルの中の使われてる色とその回数が完全に一致する)
756が言いたかったのはそういう事じゃないような。 ・そもそもこれは何をするプログラムなのか? ・どういう問題が発生しているのか? ・その問題はどの部分で発生しているのか? ・何故その問題は発生しているのか? わかる部分でいいから755は答えてくれ。
761 :
755 :2006/01/20(金) 11:20:10
どうもです >何をするプログラムなのか? 画像中で消したい部分があったら、画像中の他の部分から似てるところをひろってきて消したい部分にペーストして消してしまおうというプログラムです。 アップしたものはその前段階で、消したい部分は関係なく白く塗りつぶした部分と同じものをひろってくる!というのを目的にしてます。 白く塗りつぶしたところにペーストするわけですね、似てるかどうかの判断材料は使われている色とその回数です。 >どういう問題が発生しているのか? 白く塗りつぶした部分の色と関係のない色の部分をひろってきてしまう、ということです。 たとえば青い色が使われてる空で実行したのに茶色い地面からひろってくるとか。 >その問題はどの部分で発生しているのか? これは・・・画像中のどこで実行してもですね(汗 単純に言ってしまうと色の違う部分をひろってくるってだけなので。 >何故その問題は発生しているのか? エラーとか見える部分で問題がないようなので実行したら結果が変だ・・・ でも何で間違っているのか分からないという状態です
付け加えで。。 色数が多すぎるとやっかいなので比較に用いる画像の情報は減色してあるImage2のを使ってます。 →白く塗りつぶした部分の座標を取得しておいて、Image2の同じ部分の色情報を取得 →それに最も似た場所をImage2内で探し座標を取得 →Image1でその座標の部分をコピーして白い部分にペーストする の流れになってます。 仮に結果が正確ならばほとんど同じ色が使われてる場所からしかひっぱってこないはずなんです。
せめて、どの辺でおかしいのかぐらいは自分で発見するべきだと思うのだが 何が間違っているのか分からないなんて話ならん お前、何故動くか分からないとかの魔法のコードを書くタイプだろ
チェックすべき項目をざっと挙げてみた。すべてクリアにすればおそらく問題は解決できるだろう。 >その問題はどの部分で発生しているのか? その問題は「プログラム」のどの部分で発生しているのか? 問題の発生する部分で使用される変数は何か? その変数の値はどのように変化すべきなのか(具体的な数値で)? 実際にはどう変化しているのか(具体的な数値で)? 白く塗りつぶした部分の座標を取得 これは何という変数に取得してるのか? 正しく取得されているか? 実際に使われる時、正しいデータが入っているか? Image2の同じ部分の色情報を取得 これは何という変数に取得してるのか? 正しく取得されているか? 実際に使われる時、正しいデータが入っているか? 最も似た場所をImage2内で探し座標を取得 これは何という変数に取得してるのか? 正しく取得されているか? 実際に使われる時、正しいデータが入っているか? Image1でその座標の部分をコピーして白い部分にペーストする この処理は正しく行われているか?
どうせ自分では理解できないコードが何十行とあるんだろ もう一度最初から、今度は自分が理解できるコードを少しずつ書きなさい
>763の言う魔法のコードを書くタイプによくあるが、問題を一気に解こうとするのは間違いだ。 「1つの問題をいくつかの細かい問題に分けて1段階ずつ解決していく」という手法の方がいい。 ジグソーパズルを例にとると、まず枠を完成させてから中身に取りかかるのが普通だ。 いきなり全部をやろうとするのは、よほど簡単な場合か、腕に自信がある奴が腕試しにする場合だろう。 あと、テストデータが複雑なのもよくない。 フランス国旗みたいな画像でテストしたらどうか。
>>766 >画像処理スレいけよ
画像処理スレはもう、イッパイイッパイなので勘弁して〜
>>767 >フランス国旗みたいな画像でテストしたらどうか。
で、サイズを40x40ぐらいにしたほうがいい。
そうすれば配列をダンプして、目で追えるだろう。
>//truncは小数点以下を切り捨てる関数
コメントを入れるときは、こーいうのじゃなくって、p2とp3はなんなのかとか書いてね
あと、関数ローカルじゃない変数とかは、名前を長めに。
まぁーた、エスパー勢ぞろいですか。ごちゃごちゃ言わずに、正解書けよ。
グダグダ遠回りに書いて引き伸ばす一文字いくらでバイト料もらってる某日の雇ったテクニカルエバンジェリストなんだよと言ってみる
この質問してるヤツって、連日、減色だの誤差拡散だのとわけ分からんコードしめして 質問してるのと同一人物だろ。過去にいっぱいレスもらってるのに放置してるから無視した 方がいいよ。
>>773 確かに。
ツッコミ待ちにしか見えないもんな、あのソース。
毎日毎日よく飽きないな・・・
ソースをよく見てないがこれたぶんこの考え方じゃ無理だと思うんだが・・・
777 :
755 :2006/01/20(金) 19:12:13
>>769 適当に数色だけで書いた画像を用意したらきちんと白く塗った部分と同じ色を拾ってきました
ただ色の境界の部分でやるとおかしいので白く塗るところの色の情報の取得が間違ってるのかもしれないです
>>776 処理を少なくして精度をあげたいんですけど何か方法ないですかね・・・
前にやったRGB値の合計だと合計が一致すれば同じと判断されて全然ダメでしたから
今度は同じ色が存在しない限りスルーするやり方なので精度はかなり上がると思うんですよ
同じ色がどれだけたくさんあるかで判断してるんで(処理時間も増えちゃってますが)
>>777 青、白、赤のフランス国旗でやってみたが、ちゃんとなんないぞ。
Button6Click内の、
if wbHis[n,h+1]<AllHis[x,y,h] then
Inc(D[x,y],wbHis[n,h+1])
else
Inc(D[x,y],AllHis[x,y,h]);
ってトコ、何やってんの?
「同じ色がどれだけたくさんあるか」になってないよ。
>>778 もしかすると332行目あたりに6,8,5っていう数字ないですか?
そこを6,6,6に変えてみてください、修正せずにアップしてしまったかもしれません。
あとそこは白く塗りつぶした範囲と比較する範囲で同じ色の数を比較してます。
値が小さいほうを加えていけば一致する分だけカウントできるってやり方です。
hには216色のうちどれかの色が含まれてる数が格納されてます。
データの受け渡しがおかしいみたいですね。
ボタン6もそうかもしれないですが、塗る潰すところの時点でおかしい気がしてるので考え中です。
302行目でした
すみません、hは216色のうちどの色かをあらわすだけですね ヒストグラム取得のところでカウント処理してます hが200なら、この色は200番で、じゃあ配列に+1して200番が使われた数が1回・・・こんな感じです
頼むからもう余所に行って下さい
お前がな
>>761 > >何をするプログラムなのか?
>
> 画像中で消したい部分があったら、画像中の他の部分から似てるところをひろってきて
> 消したい部分にペーストして消してしまおうというプログラムです。
ここから、すでに何を意図しているのかわからない漏れは一体…orz
画像をベクトル量子化的に非可逆圧縮するプログラムってことなのかな?
>>784 多分、クローンブラシみたいなことをコピー元を指定せずにやりたいってことじゃない?
漏れDel6持ってないんでコンパイルできなんだけど B,G,Rの構造体ってpaqueしなくていいんだっけ?
>>785 そうですそうです
ペイントソフトとかでも修正ツールとかあるんですけど、自動修復みたいなのはないんですよ
それをやりたいんです
修復っていうのは、修復後の画像が分かってないと(予想できないと)出来ないわけだが。
789 :
778 :2006/01/20(金) 22:10:22
>>780 298行目じゃないか?
6,6,6); になってるぞ。
>あとそこは白く塗りつぶした範囲と比較する範囲で同じ色の数を比較してます。
色ごとに比較しているのが問題なんじゃないの?
640×480の画像で右半分が黒、左半分が白に場合、
(0,0)のヒストグラムAllHis[0,0,0]が100、AllHis[0,0,1..215]は0になる。
(319,0)のヒストグラムAllHis[319,0,0]が10、AllHis[319,0,1..214]は0、AllHis[319,0,215]は90になる。
検索ブロックの先頭が(0,0)の場合、wbHis[1,1..216]にAllHis[0,0,0..215]がコピーされるはず。
ここで
>>778 のプログラムを実行すると、D[319,0]はどうなるか。
hが0の時、wbHis[1,0+1]はAllHis[0,0,0]=100、AllHis[319,0,0]=10だからまず100がプラスされる。
hが1..214の時は変化なし。
hが215の時、wbHis[1,215+1]はAllHis[0,0,215]=0、AllHis[319,0,215]=90だからさらに90がプラスされる。
で、D[319,0]は190になる。
と、思うのだがどうか?
>>788 言葉の意味で言うならそうなのかもしれませんけど
Photoshopとかでも修復ツールというのは手動で他の部分をコピーしてきてなじませるだけですから(処理は複雑みたいですが)
元を予想するとか元画像があるなしじゃなくて、とりあえず消したい部分を違和感なく消そうってことですよ
手動だとユーザは消したい部分を知っている。プログラムで「消したい部分」をそうでない部分と どうやって自動で認識するの?
792 :
デフォルトの名無しさん :2006/01/20(金) 22:34:02
質問させてください。 プログラムを実行したときに、突然ある一つのButtonだけがクリックできなくなってしまいました。 以前は正常に動作していましたし、そのButtonのプロパティをいじったわけでもありません。 Enabledはもちろん常にTrue状態で、見た目も灰色表示になっていないのですが、 なぜか実行中クリックしても押すことができません(押下状態になりません)。 それ以外の他のボタンは至って正常なのですが。 これには可能性としてどのような原因が考えられますでしょうか? ちなみに、Delphi6でOSはWinXPです。
ソース読まずに発言するけど
>>790 の人はもう一度アルゴリズムの部分を整理して考え直した方がいいんじゃないの?
>>792 procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Releasecapture;
end;
実行中にEnable:=Falseしてるとか
> Enabledはもちろん常にTrue状態で、見た目も灰色表示になっていないのですが
797 :
792 :2006/01/20(金) 23:11:09
>>794 なるほど。と思いましたが、それでも無理でした…。
思い当たる原因もなく突然クリックできなくなったので、どうも何かおかしいようです。
私の個人的な環境側の問題なんでしょうか。
>>795 ボタンの表示は常にEnable:=Trueの(灰色になっていない)状態なんです。
しかも、以前正常だった時から、そのボタンに関する処理の部分も特にいじってないんですよ。
まあ処理以前に押下状態にさえならないのですが…。
798 :
775 :2006/01/20(金) 23:13:31
>>789 後半の部分ですが、同じ色があれば数が少ないほう加算するので合計は10になりませんか?
>>791 プログラムが消したい部分を判別するために本来はそこを黒く塗りつぶしておく必要があります
とにかく白く塗った部分と同じものがもってこれないとダメなんで、判別の処理は一旦消しました
ボタンが乗ってるパネルのEnabledがFalse
>>790 そんなこと簡単にできるなら、レタッチツールに実装されてないはずないとか思わないのかな。
> 黒く塗りつぶしておく必要があります 手動でやるんだよね、これ(汗汗
>>800 消したい部分を違和感なく消すっていうだけなら、精度の高いものはすでに完成してます。
でもかなり処理に時間がかかるのであまり使えないんで精度を保ちつつ処理時間を短くする方法を考えてるんです。
今やってるのもその1つのアプローチの仕方ってだけで。
803 :
775 :2006/01/20(金) 23:22:06
>>801 消す部分を指定しないで出来たら人工知能になっちゃいますから到底出来ないです(汗
804 :
792 :2006/01/20(金) 23:25:25
>>799 …まさにそうでした。ありがとうございます!
いつの間に変わってたのか…お恥ずかしい。
お騒がせして申し訳ありませんでした。レスくれた人ありがとうございます。
805 :
794 :2006/01/20(金) 23:25:29
>>797 勘違いしてるかもしれないけど、
>>794 みたいな事をするとボタンが反応しなくなるよ、って言う実例
ボタン1つならもう一回そのボタンだけ作り直せば?
806 :
794 :2006/01/20(金) 23:26:33
4秒差か…orz
807 :
789 :2006/01/20(金) 23:42:23
誰か775がやろうとしてることを分かりやすく3行で頼む 意味がよく分からんです
809 :
775 :2006/01/20(金) 23:47:17
>>807 でも色の境目とかで実行すると大変なことになってますね・・・
取得は出来ててもデータの受け渡しの最中でどっかミスってますなこれは
812 :
775 :2006/01/21(土) 06:33:25
>>811 おおおおおおっこれは!!!完璧に同じ場所をコピペできてますね!
しかも難題だったパレットからひろってくる処理まで加えられてあって・・・涙出そうです
これは・・・同じ手法で色の比較方法なんですかね?
複雑な形状の部分でも完璧にひろってきてますし、正直216色でここまで精度が高くなるとは思いませんでした。
深夜まで作業ありがとうございます、変わってるところも多々あるようなので勉強させていただきます。
813 :
775 :2006/01/21(土) 06:52:43
っと、パレット云々は関係ないですか
ところでおまえさんは775じゃなくて755じゃないのか。
775だろ。どっちも変なヤツ。
>>811 すげー、よくあれで仕様が理解できたなー
ロゼッタストーンみたいな神だな。
ロゼッタストーンは神と関係ないですが
毎日毎日よく飽きないな・・・
楽しそうだな。こちとら雪の中つまらんコーディングの最中でもう飽きあきだ…
プログラマって、つまらなそーな職業ですね。趣味にしてると、楽しいから飽きないけど
.NETを速く動作させることはできますか?
できるよー、速いCPU使えば
クラスをリスト化するには具体的にどうすればよいですか?
>>823 クラスのオブジェクトってことね??
ContnrsユニットのTObjectListを使うと解放までしてくれる。
TListでもいいと思う。
>>824 しばらく頑張って出来なかったので再度質問します。
リストに加えるのは出来たのですが、リストのアイテムをクラスに代入する方法がわかりません。
>>821 .NETってdelphiじゃないのにwww
procedure TForm1.Button1Click(Sender: TObject); var test :Test; begin test := Ttest.Create; objectlist.Add(test); test.Free; end; は問題なく出来るのに、 procedure TForm1.Button2Click(Sender: TObject); var Ttest; begin test := Ttest.Create; test := objectlist.Items[i]; test.Free; end; ではTobjectとTclassでは互換性がないと言われて先に進めないのですがどうすればよいですか?
>>827 「キャスト」を調べなさい
つーかキャストも分からないでクラス使おうなんて・・・
>>828 クラスを習いたいと思ってキャストの方法を聞いたつもりなのですが・・・
test := Test(objectlist.items[i]); もしくは test := objectlist.items[i] as Test; as演算子、is演算子をヘルプでしらべてみん。
DelphiもDelphiならユーザーもユーザーだなぁ
>>827 これがDelphiユーザーの負の部分の代表格か
↑ これがDelphiユーザーの負の部分の子分格
DelphiもユーザーならユーザーもDelphiだなぁ
TPageControl を使っているのですが、 タブの表示/非表示を切り替えるにはどうすればよいでしょうか。 TabHeightの値を1にすれば、 ほぼじゃまにならないと言えなくもないのですが、 すっきりと見えなくするにはどうすればよいでしょうか。 よろしくお願いします。
TTabSheetにTabVisibleプロパティあるじゃんよ。
840 :
838 :2006/01/21(土) 17:21:19
書き方が下手でした。失礼しました。 ページそのものは表示しておきたいのですが、 タブの部分だけ表示したり、非表示にすることで、 少しでも画面サイズを大きく使いたい という意味だったんです。 よろしくお願いします。
全ページのTabVisibleをFalseにして、ActivePageやActivaPageIndexで表示したいページを指定するのだよ
842 :
838 :2006/01/21(土) 19:24:49
TPaintBoxに描いた絵の一部を消すにはどうしたらよいのでしょうか? 透明色で塗り潰せばいいのかといろいろ調べましたがその方法が わかりません。invalidateやrefreshは画面がちらつくので使いたく ありません。よろしくお願いします。
背景色で塗りつぶす
別途TBitmapなどに描画しておいて、後からコピー
意味わかんね。それでどうして一部を消すことができるの?
消すなんて処理はない。何かを描く事で消したように見せるだけ。 下地が絵ならその絵をコピー。下地が単一色ならその色で塗りつぶす。
848 :
デフォルトの名無しさん :2006/01/21(土) 22:46:26
Delphi6パーソナルのページ、 インスコ鍵の取得が日本語サイトからできなくなったーーwwww これから参戦するフリー厨オワタ
>これから参戦するフリー厨オワタ うひょー、某もなかなか厨房くさいことやるんだな。最低。イメージとっとこ。
あっ、インストールキーか。それならオレは問題ないな。これからのヤツはお終いか。 厨房ユーザはあとすこしで絶滅
英語がわかりません って質問がこなきゃいいけど
もう、わざとDL、インストールしにくくしてるとしか思えんな・・・
853 :
デフォルトの名無しさん :2006/01/22(日) 00:29:40
>>850 厨房ユーザーだった俺ももう工房。
ってことはほんとに絶滅直前や
BDNのアカウントは製品版でも登録には必要なんだが・・・ 英語が分かりませんというほど難しい所は無いだろ。
英語まだ習ってないような子もいるんだからさ
そんな子供にプログラミングが出来るとも思えないが
学校の先生とか、周りの大人に聞きなさい。
なぜ、日本語でできるようにしないのか? っていう議論はないのですか? 不思議なユーザコミュニティーですね。
| | | | /  ̄  ̄ \ (=) /、 ヽ J |・ |―-、 | q -´ 二 ヽ | ノ_ ー | | \. ̄` | / O===== | / | / / |
日本語しか出来ない奴は相手しない=日本市場撤退
>>861 鍵だけの話だから大して影響ないんじゃね
とりあえずそれらの時代が来るとすれば、
どっちもタダってことで同じなんだから、
Delphi6の機能をまず追い抜いてもらわないと
for y:=0 to pBitmap.Height -10 do begin for x:=0 to pBitmap.Width -10 do begin check:=False; Blackcount:=0; for j:=0 to 9 do begin if check then Break; //ループを抜ける for i:=0 to 9 do begin if (aRgbArray[y+j,x+i].R+aRgbArray[y+j,x+i].G+aRgbArray[y+j,x+i].B)=0 then begin //RGB(0,0,0)があったら Inc(Blackcount); //カウント処理 check := True; //フラグ立ててから Break; //ループを抜ける end; ☆ h := Trunc(aRgbArray[y+j,x+i].R/51) +Trunc(aRgbArray[y+j,x+i].G/51)*6 +Trunc(aRgbArray[y+j,x+i].B/51)*36; Inc(aHistogram[x,y,h]); //カウント処理 end; end;
864 :
863 :2006/01/22(日) 12:31:13
★ if check then begin for h:=0 to 215 do begin aHistogram[x,y,h]:=Trunc(aHistogram[x,y,h]*100/(100-Blackcount)); end; end; end; end; また同じループのところで混乱しているんですが 画像にRGB(0,0,0)がなければ☆を実行、あれば★を実行できるようにしたいんですがどうすればいいんでしょうか? 調べたところ上のままだとRGB(0,0,0)があろうがなかろうが☆は実行されてます 逆に★はあろうがなかろうが実行されてません・・・if not check then beginにしたところ、逆転して必ず★は実行されてます
全然わからん
お前さぁ…もう少し自分で調べるなりしろよ… Breakはループを一つしか抜けないが、 その程度のことは一回調べれば済むことだろ 黒抜き星はまたエスパー待ちか? もうお前の相手すんの疲れた
867 :
863 :2006/01/22(日) 12:50:12
check:=True; Break;→☆回避 if check then Break; ★ って進むように見える・・・
>>863 お前の個人スレじゃないんだからもういい加減自分で何とかしろ
870 :
863 :2006/01/22(日) 13:42:02
はぁ?分からないなら黙っててくれませんか?
871 :
865 :2006/01/22(日) 13:43:40
すまんこ
華麗に863をスルーで次の質問↓
873 :
863 :2006/01/22(日) 13:49:08
>>868 Breakはループ抜けて次の文に進む、ですね
for y:=0 to pBitmap.Height -10 do begin
for x:=0 to pBitmap.Width -10 do begin
for j:=0 to 9 do begin
for i:=0 to 9 do begin
if (aRgbArray[y+j,x+i].R+aRgbArray[y+j,x+i].G+aRgbArray[y+j,x+i].B)=0 then
showmessage('kita');
end;
end;
end;
end;
end;
試しに中身すっからかんにして実行してみたらダイアログボックスでましたが・・・
if (aRgbArray[y+j,x+i].R+aRgbArray[y+j,x+i].G+aRgbArray[y+j,x+i].B)=0 then begin
Inc(Blackcount);
showmessage('kita');
end;
にしたら文が必要な場所にFUNCTIONがありますとかいうエラーが・・・
if文の中身を1つ追加しただけなのに何が変わってるんでしょうね
874 :
863 :2006/01/22(日) 13:52:29
>>873 の原因は分かりました・・コメントみたいです
Inc(Blackcount);の横に//カウント処理ってコメント消したらエラー消えました・・・なんなんでしょう
863はスルーでよろしく
少し前の方で誰かが予測したとおりに 863が真面目に魔法のコードを書いている件について
877 :
863 :2006/01/22(日) 14:43:20
for y:=0 to pBitmap.Height -10 do begin for x:=0 to pBitmap.Width -10 do begin Blackcount:=0; for j:=0 to 9 do begin for i:=0 to 9 do begin if (aRgbArray[y+j,x+i].R+aRgbArray[y+j,x+i].G+aRgbArray[y+j,x+i].B)=0 then begin //RGB(0,0,0)があったら Inc(Blackcount); continue; end; h := Trunc(aRgbArray[y+j,x+i].R/51) //RGB(0,0,0)がなければ +Trunc(aRgbArray[y+j,x+i].G/51)*6 +Trunc(aRgbArray[y+j,x+i].B/51)*36; Inc(aHistogram[x,y,h]); end; end; for h:=0 to 215 do begin aHistogram[x,y,h]:=Trunc(aHistogram[x,y,h]*100/(100-Blackcount)); end; end; end; これでよさそうですか・・・
魔法のコードってなんだ?
マホっ
880 :
863 :2006/01/22(日) 15:07:19
あってたようで問題はなくなりました〜 ご迷惑かけてすみませんでした
881 :
デフォルトの名無しさん :2006/01/22(日) 15:08:11
アッー! 変数h!!!
アイデアに実装能力がついていかないって悲惨だな・・・
>>882 そのための超初心者スレやね?
プロの職場だと先輩にきけたりすんのかね
素人が出したアイデアを俺らがコード化するスレでないのは確かだ
885 :
883 :2006/01/22(日) 19:58:34
うまい事いうねえ そのとおりですた
コードの書き方なんだけど、 (1) if 〜 then begin 処理; end; (2) if 〜 then begin 処理; end; if〜then に限らず、with〜do、while〜doとかも同じだと思うけど 一般的にはどっちの方が読みやすい? 初心者の漏れは断然(2)だと思うんですけど
オレはVCLに準拠した(2)で書いている てか、そういった書き方に興味あるなら DelWiki…は消滅したか 「Delphi コーディング規約」でググレ
>>887 多くのサンプルが(1)方式だから迷ってた
さっそくググって見ますわ
889 :
デフォルトの名無しさん :2006/01/22(日) 20:36:15
俺は1派だなぁ 行が増えるとスクロールバーがちっこくなって困る しおり が つかえなさすぎる
しおり機能なんてあったっけ?
エディタの左端で右クリックしてみなさい
892 :
889 :2006/01/22(日) 21:03:43
>>891 細かいことだが、文章のところでも大丈夫だよ
製品版だと、文字列と行ジャンプを関連付けするTodo機能があるらしいんだが都市伝説?
しおり1 しおり2 ・・・ これじゃぁ何がどこだかわからんちん
894 :
891 :2006/01/22(日) 21:08:09
あ、ついでに質問ですけど、コードの途中でprocedure呼んだりするじゃないですか、PrcHoge;とか。 そいつをダブルクリックして反転させて「このprocedureを宣言した行に飛ぶ」みたいな機能ってない? 無いなら自分で作ろうと思うんだけど
895 :
893 :2006/01/22(日) 21:09:18
897 :
889 :2006/01/22(日) 21:16:13
>>894 右クリック→定義の検索
ユニットが違う場合は、最初から入ってるユニット?は見れないけど
ctrl+shift+↓
899 :
889 :2006/01/22(日) 21:16:43
描き忘れた >自分で作ろうと思う ここkwsk!
>>896 ダメっす。普通に反転したのが解除されるだけ見たいです
と思ったら右クリック、定義の検索ってのがあった
>>896 =神
901 :
893 :2006/01/22(日) 21:21:55
神 :=
>>889 自分で作るってのは.pasファイル読み込んで定義文を検索して何行目か表示するショボイのを作ろうかと思った次第です
902 :
889 :2006/01/22(日) 21:31:17
>>901 あんた誤爆しすぎwwww
なんだ 外部エディターとdelphi連動できるのかとおもた
これエディターさえなんとかしてくれればなぁ。。。
Delphiのなんかのハンドルぶっこぬいて、エディターに文字列強引に飛ばすようなソフトって作れるのかな?
リアルタイム解析がいかれそう
↑ 君、レベル低すぎ
クイック起動のように、自分の作成したアプリをタスクバーに 追加する方法を教えてください。
いやだお^^
907 :
904 :2006/01/23(月) 12:07:45
>>906 ありがとうございます。
ばっちりです!!
質問させて下さい 他アプリケーションのフォーム位置を変える事はできないのでしょうか? SetWindowPosでサイズを変更するところまではできたのですが サイズ変更後に画面の真ん中にウィンドウを移動させたいと考えています。 宜しくお願いします。
何故サイズ変更が出来て移動がわからんのか理解出来ん SetWindowPosの引数調べなおせ
>>908 他アプリケーションのフォーム位置を変える事はできます。
あー なに? (デスクトップのサイズ - ウィンドウズのサイズ) / 2とかゆー計算式が教えて欲しいわけか?
ウィンドウズじゃねぇ ウィンドウ 癖でなぜかズつけてしまった
913 :
908 :2006/01/24(火) 01:27:52
できました。どうもありがとうございました。
>>911 > (デスクトップのサイズ - ウィンドウズのサイズ) / 2とかゆー計算式
Delphi では
(デスクトップのサイズ - ウィンドウのサイズ) div 2;
じゃね?
整数型の場合はね。
この場合は整数にしないとダメだろ
SetWindowPosの引数分かってる?
>>916 さんもっとお勉強しましょうね^^;
一度doubleで計算してtruncしてるんですがもっとスマートなやり方があれば教えて欲しいです。
こんなもん、1ピクセル以上の精度なんか関係ないだろ。どうみても div で十分だわな。
stringや動的配列を含む構造体をコピーするにはどうするのが一番ですか? やりたいことは例えば、 type TMyStruct = record; name: String; values; Array of TOtherStruct; end; MyStructs = Array[0..31] of TMyStruct; で MyStructs[0] と MyStructs[3] の値をSwapしたいのですが、 Move(MyStructs[0], tmp, SizeOf(TMyStruct)); Move(MyStructs[3], MyStructs[0], SizeOf(TMyStruct)); Move(tmp, MyStructs[3], SizeOf(TMyStruct)); 上のようにメモリコピーでやると中身がぐしゃぐしゃになってしまうようです。
tmp.name := MyStructs[0].name; tmp.values := MyStructs[0].values; MyStructs[0].name := MyStructs[3].name; MyStructs[0].values := MyStructs[3].values; MyStructs[3].name := tmp.name; MyStructs[3].values := tmp.values;
922 :
920 :2006/01/24(火) 14:30:07
>>921 回答どうもです。
実際のソースでは、構造体のサブアイテム(?)が20個くらいあるので
できればもっとすっきり書きたいです。
今、したのような感じで試してみて、うまく行っているように
見えるのですが、まずいでしょうか?
tmp := MyStructs[3];
MyStructs[3] := MyStructs[0];
MyStructs[0] := tmp;
あと、920のソースコードでぐちゃぐちゃになってしまう理由というのは
TMyStruct.name のlengthがコピーできていないのが原因
といいうのであってますか?
>>922 おk
動的配列はもちろんAnsiStringも実際はポインタなので
Length取ったところで4バイトしか返さない
長さの管理は言語が管理してるので無理やりメモリコピーしても
ポインタがコピーされるだけだし参照カウンタも狂ってぐちゃぐちゃに
代入で問題無し
924 :
920 :2006/01/24(火) 15:25:33
>>923 ありがとうございます。
これですっきりできました。
recordで文字列とか動的配列とかまずいんじゃなかったっけ
ヘルプにこんな構造体載ってるし、大丈夫だろ var S: record Name: string; Age: Integer; end;
>>927 1.0には長い文字列も動的配列もないけど、短い文字列のこと?
>>923 Length取るっていうとLength関数と勘違いするかも。
sizeofのことを言ってるんだよね?
Length関数のことだと思ってたDelphi初心者がここにいます。。。
Length使う時はちゃんとした長さが返ってくる
treeviewでindexof(caption: string)のように captionと一致したNode返してくれるようなのってなす?
適当にごまかすた
Webログイン後のページをWebBrowserで表示させたいのですが どのようにすればよいのでしょうか? 現在、以下のようなソースで実行していますが、WebBrowserの表示がおかしくなります(画像、外部スクリプトを読みこまない) (TFormにはTidHttp, IdCookieManager, WebBrowserを貼り付けています) const ADDR = '<URL>'; ADDR_REG = ADDR+'<LoginPath>'; var sl: TStringList; ms: TMemoryStream; begin sl := TStringList.Create; ms := TMemoryStream.Create; sl.Add('user=<UserName>'); sl.Add('passwd=<Password>'); try try //ログイン IdHTTP1.Post(ADDR_REG, sl); //例外無視 except on EIdHTTPProtocolException do ; end; //ログイン成功なら if IdHTTP1.ResponseCode = 302 then begin //ログイン後のソースを読み込み IdHTTP1.Get(ADDR, ms); //WebBrowserで読み込み WebBrowser1.Navigate('about:blank'); if Assigned(WebBrowser1.Document) then begin ms.Seek(0, 0); (WebBrowser1.Document as IPersistStreamInit).Load(TStreamAdapter.Create(ms)); end; end; finally ms.Free; sl.Free; end; end; 何か根本的に間違っているような気がしますが、どうぞよろしくおねがいします。
>>935 Indyで認証してHTML取得>IEコンポに流し込んでるから、おそらく画像とスクリプトが認証で刎ねられてロードされてない。
IEコンポは認証用のID、Passを知らないわけだから呼び出そうとしてもサーバが401返してくる。
IEコンポで認証できるはずだからIndy使わずIEコンポで完結させれ
>>936 なるほど、そういうことだったんですね。ML参考にしながらWebBrowserのみで認証してみました。
しかしうまくいかず・・・。アドバイスがあれば、どうかよろしくお願いします。
const
ADDR_REG = '<URL>':
USERNAME = 'user=<USERNAME>';
PASSWORD = 'passwd=<PASSWORD>';
var
URL: OleVariant;
TargetFrameName: OleVariant;
Flags: OleVariant;
PostData: OleVariant;
Headers: OleVariant;
PostStr:PChar;
pb:PChar;
begin
URL := ADDR_REG;
Flags := navNoReadFromCache;
TargetFrameName := '_self';
Headers := 'Content-Type: application/x-www-form-urlencoded'+#$d#$a;
//DelphiMLの過去ログを参考(よく意味がわからず使用)
//しかし複数のパラメータを設定してるせいかうまくいかない
PostStr := PChar(USERNAME+#$d#$a+PASSWORD);
PostData := VarArrayCreate([0,Length(PostStr) - 1],varByte);
pb := varArrayLock(PostData);
StrMove(pb,PostStr,Length(PostStr));
VarArrayUnlock(PostData);
//認証できない。
WebBrowser1.Navigate2(OleVariant(URL), OleVariant(Flags), OleVariant(TargetFrameName), OleVariant(PostData), OleVariant(Headers));
end;
パケットのログをとりHTTPヘッダを抽出してみました。
POSTされているような気がするのですが、なぜか認証できず。
POST <LoginPath> HTTP/1.1
Accept: */*
Accept-Language: ja
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)
Host: <HOST>
Pragma: no-cache
Connection: keep-alive
Browser reload detected...
Posting * bytes...
user=<USERNAME>
passwd=<PASSWORD>
その後、認証できないので他のページに飛ばされて・・・
(上記(
>>935 )、indyでの認証では302 Foundでログイン出来たのを確認しています)。
HTTP/1.1 200 OK
Server: Apache/1.3.34 (Unix) PHP/4.3.11 mod_ssl/2.8.25 OpenSSL/0.9.8a
X-Powered-By: PHP/4.3.11
Transfer-Encoding: chunked
Content-Type: text/html
>>937 (30行目)訂正(必要ないのにキャストしてました)
//認証できない。
×WebBrowser1.Navigate2(OleVariant(URL), OleVariant(Flags), OleVariant(TargetFrameName), OleVariant(PostData), OleVariant(Headers));
○ WebBrowser1.Navigate2(URL, Flags, TargetFrameName, PostData, Headers);
>>938 IEでBasic認証(ルータ: NTT V110M)したときの通信見るとAuthorizationヘッダで認証してるようだが‥‥
根本的に間違えていたようで紹介していただいたサイト、じっくり見てみました。
そこでそのサイトと
>>941 氏がおっしゃってる内容を元に以下のように記述してみましたが
ログインウインドウが表示されて自働認証にはなりません。
おそらく一回目のGetで"Authorization: Basic 〜"を発行しているためとと思われますが
2回目のGetで"Authorization: Basic 〜"を発行する方法がわかりませんでした。
お分かりの方、何卒ご教授お願いいたします。
現在のソース
const
//Base64でエンコードした<USERNAME:PASSWORD>
BASE64_USER_AND_PASS = 'AAABBBCCCDDDEEEFFF';
//ヘッダの区切り
H_BREAK = #$d#$a;
var
URL: OleVariant;
TargetFrameName: OleVariant;
Flags: OleVariant;
PostData: OleVariant;
Headers: OleVariant;
begin
{初期設定}
URL := '192.168.0.1'; //基本認証の自前のルータに接続
Flags := navNoReadFromCache;
TargetFrameName := '_self';
PostData := '';
Headers:= 'Authorization: Basic '+BASE64_USER_AND_PASS+H_BREAK;
{WebBrowserで認証}
WebBrowser1.Navigate2(URL, Flags, TargetFrameName, PostData, Headers);
//しかし一度目のGetの為、ログインウインドウが出て自働認証にならない。
end;
>>935 の認証でmsにどんなデータが入ってるかちゃんと確認したのかな?
302で認証出来てると見てるみたいだけど
>938では200OKが返って来てると思うんだが
ルータの画面は単一のhtmlだけで終わってるの? GETしたhtmlの中に、cssなり画像なり他のhtmlなりが記述されていたら ブラウザがそれらをGETしにいくと思うんだけど、そのときは Authorizationヘッダついてなくなるよね。
>>944 ビンゴ!
キャプチャしたログと睨めっこしてたら以下のような手順になっていました。
1) 192.168.0.1/index_frame.html読み込み(Authorization付)
2) 192.168.0.1/index_frame.htmlがmenu.htmlとwork.htmlを要求
3) menu.htmlとwork.html読み込み(Authorization無し)
4) 認証を要求されログインウインドウが表示
そこで、menu.html(又はwork.html)を直接読み込むと認証できました。
付き合ってくださった皆様、本当にありがとうございました。
しかし、このようなケースの場合どうやって自働認証すればよいのかという新たな疑問が・・・。
むむむ・・・。
>>945 昔はそれでいけたらしいのですが今は以下のパッチで埋められているらしいようです。
"Internet Explorer 用の累積的なセキュリティ修正プログラム (832894) (MS04-004)"
ttp://www.microsoft.com/japan/technet/security/bulletin/MS04-004.mspx
947 :
& ◆zLXgQexfRg :2006/01/25(水) 20:59:06
すみません、どなたか教えてください。 DelWikiに記述があったはずですが、Delphi7から7.1にアップグレードすると コンパイラの最適化か何かに支障が生じたはずです。 詳しくはどんな事象で、回避策はどうだったのか、ログをなくしてしまったし、 Delwikiが消失したので困っております。 今頃になってやっと7.1にアップしようとしている自分もなんですが どうか、教えてください。
(1)パッチをインストールする前にdcc32.exeとdcc70.dllをbinディレクトリから コピーしておく。(*.jpも?) (2)パッチをインストールし、(1)でコピーしておいたファイルを上書きする。
950 :
& ◆po73KQOmZk :2006/01/25(水) 21:23:45
質問です ごっつぁんです ある文字列から指定した文字列を削除する関数ってありませんか? Erase('phi','Delphi厨'); みたいな
>>951 たぶん、それReplaceでいけると思うよ。置換後の文字列を空文字列にすれば、
削除にならない??
953 :
951 :2006/01/25(水) 21:44:36
押忍! 先輩が教えてくれたReplaceっていうのは見つからなかったけど、StringReplaceというのがありました ヘルプ見ながら StringReplace('Delphi厨','phi','',[rfReplaceAll]); ってやったらできました。ありがとうございました
質問です。 1から40までの整数をランダムで1つずつ選び(取り出し) int型配列に格納していきたいのですが 既に選ばれたものかどうか判別するには どのようなやり方が効率いいのでしょうか?
>>954 1)StringList に1〜40までの数値を格納する
2)行数までのランダムな数値(A)を計算し、
3)行Aにある数値を格納すると同時に、行Aを削除
4)2)〜3)を40回繰り返す
>>954 にふちーサンプル蔵からTIntegerListぱくってくる
Random->indexof->add
957 :
954 :2006/01/26(木) 14:38:35
958 :
954 :2006/01/26(木) 16:40:29
rand_num: Array[0..39] of Integer;
num := TStringList.Create;
try
for i := 0 to 39 do begin
num.Add(IntToStr(i+1));
end;
for i := 0 to 39 do begin
j := RandomRange(0, num.Count-1);
rand_num[i] := StrToInt(num[j]);
num.Delete(j);
end;
finally
num.Free;
end;
こんな感じかな?
>>955-956 ありがとうござました。
rand_num: array [0..39] of Integer; for i := 0 to 39 do begin rand_num[i] := i + 1; end; for i := 39 downto 0 do begin j := Random(i + 1); k := rand_num[j]; rand_num[j] := rand_num[i]; rand_num[i] := k; end;
TStringListを使うのはちょっと酷いな
stringlist重いからな まぁ40くらいだったら楽だからいいのか
重いのもあるけど、それ以前に手段と目的を取り違えてるという話でしょ?
963 :
デフォルトの名無しさん :2006/01/26(木) 18:48:37
ただのTListはだめかね
TStringListよりはマシだけど・・・
965 :
ささ ◆6KVcpBNXy. :2006/01/26(木) 23:52:45
みなさん。こんにちゎ。経済学部のささと申します。 パスカル(Delphi)の授業での課題がわかりません。。教えてください! 3科目、10人分のデータを入力して各人の合計点と科目毎の平均点を出せ! という課題が出ました。。。 先生に下記を改変するとやりやすいといわれました。repeatとwhileとforまでしか習っていません。 Score :array[0..1000] of integer; begin writeln('入力得点の平均と偏差値を計算します'); writeln('入力後、負の数を入力すると…終了します。'); kazu :=0; repeat write('点数は?'); readln(data); if data >= 0 then begin kazu := kazu + 1; score[kazu] := data end until data < 0; goukei := 0; for i := 1 to kazu do goukei := goukei + score[i]; heikin :=goukei / kazu; goukei :=0; for i := 1 to kazu do goukei := goukei + Sqr(score[i]); hensa := sqrt(goukei /kazu - sqr(heikin)); writeln('点数 偏差値'); for i := 1 to kazu do writeln(score[i]:4, 50 +10 * (score[i]-heikin)/ hensa:10:1); writeln(' 平 均 =',heikin:5:1); writeln('標準偏差=',hensa:5:1); readln; end.
科目数と人数は決まってるから、ふつうにforでまわして配列に入れていけばいいやん
969 :
ささ ◆6KVcpBNXy. :2006/01/27(金) 01:34:50
>>968 forでまわして配列ってどういう意味ですか?
970 :
ささ ◆6KVcpBNXy. :2006/01/27(金) 01:35:51
>>966 全くどう作るか思いつかないという意味です。
宿題スレにいけ
次の質問↓
リソースファイルを使ってexeにwavを埋め込むことは出来ますが wavでは無くmp3を埋め込むようには出来ないでしょうか。 wavにするとサイズが大きくなりすぎます。 現在は外部からそのままの状態で読み込ませています。
974 :
追記 :2006/01/27(金) 02:05:49
再生はTMediaPlayerを使っています
>>973 単にバイナリとして埋め込めるはずだけど
バイナリと埋め込むにはどうするのですか?
var hoge: TResourceStream; hoge := TResourceStream.Create(hInstance,'HOGE','MP3'); と、取り出すところまでは出来ましたが これをTMediaPlayerでPlay()やStop()で操作に出来るようするには どういう方法でやればいいのでしょうか?
↓次の質問どぞー
はぁ?さっさと教えなさい 怒りますよ?
フリーザ様がいるな
982 :
978 :2006/01/27(金) 14:38:49
>>979 TMediaPlayerでLoadFromStreamを実現する方法を教えてください
>>982 リソースとして取り込んでもTMediaPlayerで扱えない
どうしてもTMediaPlayer使いたいならSaveToFileで
テンポラリにどっかファイル作ってそのファイルをTMediaPlayerで読み込ませる
984 :
978 :2006/01/27(金) 15:49:54
var hoge: TResourceStream; sFileName: String; begin hoge := TResourceStream.Create(hInstance,'HOGE','MP3'); hoge.SaveToFile(sFileName); MediaPlayer1.FileName := sFileName; end;
ついでだから
>>958 と似たようなもの見つけました。
>>983 サンクス
RS := TResourceStream.Create(hInstance,'HOGE','MP3');
try
if FileExists(ExtractFilePath(Application.ExeName)+'HOGEHOGE.mp3') = False then begin
RS.SaveToFile(ExtractFilePath(Application.ExeName)+'HOGEHOGE.mp3');
end;
finally
RS.Free;
end;
if FileExists(ExtractFilePath(Application.ExeName)+'HOGEHOGE.mp3') then
with MediaPlayer1 do begin
Filename := ExtractFilePath(Application.ExeName)+HOGEHOGE.mp3';
end;
988 :
978 :2006/01/27(金) 19:56:42
>>986 ちょっと待ってくれ、そっちこそ偽者だろう
こっちはすでに解決しました
↓質問したい人は「ワッフルワッフル」と書き込んでください
>>988 ID出ないとややこしいな。
じゃあちょっと質問。
PlaySound関数を使えばリソースファイルから読み込んで
直接ストリームから再生する事が出来る。
それなのにわざわざ、SaveToFileで書き出してから読み込む
という効率の悪いTMediaPlayerを使う理由は?
TMediaPlayerではTMediaPlayer.Start以外使わない。
つまり機能の面でTMediaPlayerに頼る必要は無い。
PlaySound()が良く分からないとか
TMediaPlayerの方が簡単・分かりやすいとかその程度の理由ではなく
どうしてもTMediaPlayerでないとOSの動作の仕様上困るって言う理由がある。
その理由を100字以内で明確に書いて下さい。
なにこの流れ
>>990 お前がTMediaPlayerでって言ったんだろうが
アホか?
なぜTMediaPlayerでって言ったのか、その理由聞いてるんだろ。 日本語大丈夫?
はいはい自演乙
流れをまとめると、 リソースにmp3埋め込んで、TMediaPlayerで再生ってどうやるの? ↓ 〜〜で××すればできる ↓ 分かりました。ところで私がTMediaPlayer使う理由ってなんですか?100字以内で答えなさい ↓ (゚Д゚)ハァ? この場合おかしいのはどっちよ?
>>993 煽るくらいならあんたが答えてやりなよw
997 :
978 :2006/01/27(金) 21:26:57
すいません。トリップ付いてるのは偽者です。 私の方はもう解決しましたので、気を悪くされないようお願いします…。
>分かりました。ところで私がTMediaPlayer使う理由ってなんですか?100字以内で答えなさい これは 978◆TvbdT7pwtkが真の978ではない(978を騙った)と断定する988に対して聞いていること。 自問自答じゃないだろ。
私怨はよそでやってくれ
>>997 書けるはずが無い。
なぜならお前は私ではないからだ。
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。