1 名前:デフォルトの名無しさん mailto:sage [2009/12/01(火) 20:41:37 ] Delphi(デルファイ)について、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だか分からない質問を 勇気を持って書き込むスレッドです。 Delphi使いが優しくコメントを返しますが お礼はDelphiの布教と初心者の救済をお願いします。 <前スレ> くだすれDelphi(超初心者用)その50 pc12.2ch.net/test/read.cgi/tech/1246340765/ <過去スレ> DelWiki避難所(Delphi 関連の過去スレッド) delwiki.info/?%E3%83%AA%E3%83%B3%E3%82%AF%2F%E3%82%B3%E3%83%9F%E3%83%A5%E3%83%8B%E3%83%86%E3%82%A3%2FDelphi%20%E9%96%A2%E9%80%A3%E3%81%AE%E9%81%8E%E5%8E%BB%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89
267 名前:デフォルトの名無しさん mailto:sage [2010/02/24(水) 11:34:30 ] 266です。自己解決しました。 自動生成された function GetHoge(const Index: Integer; Idx: Integer): String; procedure SetHoge(const Index: Integer; Idx: Integer; const Value: String); を下記に書き換えたら通りました。 function GetHoge(Idx: Integer; const Index: Integer): String; procedure SetHoge(Idx: Integer; const Index: Integer; const Value: String); 自動生成だと、配列の添え字とインデックス値が逆になって、値の渡し方の問題でエラーになるみたいです。
268 名前:デフォルトの名無しさん mailto:sage [2010/02/24(水) 14:12:06 ] 配列プロパティにはデフォルト値与えられない?? property Items[Index: Integer = 0]: Integer read Get....
269 名前:デフォルトの名無しさん mailto:sage [2010/02/24(水) 14:30:48 ] そんなことをするような設計が悪い
270 名前:デフォルトの名無しさん mailto:sage [2010/02/24(水) 15:14:41 ] 配列コピーの高速化って無理だよね インラインアセンブラでMMX命令で32bitコピーとかやってもちっとも速くならねぇ
271 名前:デフォルトの名無しさん mailto:sage [2010/02/24(水) 15:21:32 ] fastcode projectにmoveがあったような
272 名前:デフォルトの名無しさん mailto:sage [2010/02/24(水) 20:37:10 ] >>264 理解できました。 thx!
273 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 07:22:20 ] >>260 あほか
274 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 08:46:15 ] あほです このすれにまじめなこと書くはずないだろ
275 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 12:49:24 ] >>262 本当だし
276 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 14:36:43 ] はいはい知らなかったなら素直に言おうね
277 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 14:57:45 ] Windowsのスレッド配分アルゴリズムは同一プロセス内のスレッドは物理的に同じプロセッサに優先的に割り当てるようになってる。 これはダイ間の通信がコア間の通信に比べて顕著に遅延が発生する等、別個に割り当てると問題が生じるからで、 割当先候補が減っている分、その時の処理状態によっては同一コアに複数スレッドが割り当てられるという事態は普通に発生する。 つまり「明示的にAPIで指定しない限り複数のコアを使うとは限らない」は真。 Delphiには並列ライブラリがないからこういった情報の浸透が遅れているんだろうね。
278 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 15:45:17 ] それ、完全にお前の誤解。 スレッド A が Core 1 に割り当てられたときに、 タスク切り替えやスレッド休止後の再起床時に 同じ Core を「優先」して使う。 および同じプロセスに所属するスレッドは、できるだけ「有利」なコアを使う。 というだけ。 この場合の「有利」は、キャッシュを共有しているコアとかが選ばれる。 スレッドが二つ、A と B があったときに、 A と B が「かならず」物理的にひとつのコアしか使わない。のだとしたら マルチスレッドの利点なんか残らないだろう? それくらい実験すればすぐわかるのに...
279 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 16:01:25 ] Win32APIスレ池
280 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 17:49:09 ] こんなクズども寄越さないでください
281 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 17:52:40 ] >>278 必ずなんて一言も書いてないんだけど OSに任せると必ず分散するとは限らないってだけ お前はまず日本語を勉強してこい
282 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 18:03:22 ] その辺はMSDNにも 「スレッドの割り当ては考えてやってるから、分散してなくてもSetProcessAffinityMask使うのはあんまりおすすめしないよ」 みたいに書いてある XPにはあまり賢くないアルゴリズムが載ってたからある程度自分でやった方が良かったけど
283 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 18:04:04 ] SetThreadAffinityMaskだった
284 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 18:06:27 ] ノ´⌒ヽ,, γ⌒´ ヽ, // ""⌒⌒\ ) i /::::::::: ノ \ ヽ ) !:::::::::::(・ )` ´( ・) i/ |:::::::::::::::(__人_) | \:::::::::::::`ー' / チッ うっせーな… /:::::::::::::::::::::::::::\
285 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 18:07:18 ] 使うとしたらこっちだな。SetThreadIdealProcessor
286 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 18:21:52 ] みなさん。 実験すればわかることなので、煽りは無視して自分で検証してみましょう。 一般向けの CPU では、物理的に存在する CPU コアのすべてが プロセス内のスレッドに割り振られます。 個別にコントロールする API は別途ありますが、通常は OS に任せておいて 問題ありません。
287 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 19:58:17 ] >>286 何となく興味あったから実験してみたけど、 中でsleepするスレッド4つ作って動かしたら全部一緒になったよ 環境はXP SP3 Core2 Quad なんで?
288 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 19:59:32 ] ノ´⌒ヽ,, γ⌒´ ヽ, // ""⌒⌒\ ) i /::::::::: ノ \ ヽ ) !:::::::::::(・ )` ´( ・) i/ |:::::::::::::::(__人_) | \:::::::::::::`ー' / チッ うっせーな… /:::::::::::::::::::::::::::\
289 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 20:05:57 ] >>287 sleepしてるスレッドがどのコアで動いてるか分かるの?
290 名前:デフォルトの名無しさん [2010/02/25(木) 20:34:33 ] タロット占いをするソフトを作りたいと思います。(実際に当たるかどうかは別にして) TEditにタロットのカード名(魔術師とか、女教皇とか、愚者とか) を表示させようと思うのですが、 Edit1〜Edit6に表示させる際 それぞれが重複しない値にさせるに はどうすればいいでしょうか。 単純にrandom(22)を使うと 重複してしまう場合があります。
291 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 20:44:26 ] リアルでのやり方と同じ。 カード全部を配列に突っ込んでシャッフルして頭から6枚取得する。 配列 シャッフルで検索かければそのコードが見つかるからDelphiに書き直せばいい。
292 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 21:07:56 ] WinXp+D7で質問です。 trunc関数で誤差が出るようなのですが何がいけないのでしょうか。 フォームにEdit1,2,3とButton1を配置し以下の計算をしますとEdit3だけが769になります。 Trunc内で計算せずにEdit1のようにすれば大丈夫なのでしょうか。 procedure TForm1.Button1Click(Sender: TObject); var Su : double; Kin : double; kei : double; begin Su := 1.4; Kin := 550; kei := Su * Kin; Edit1.Text := Floattostr(trunc(kei)); Edit2.Text := Floattostr(trunc(1.4*550)); Edit3.Text := Floattostr(trunc(Su * Kin)); end;
293 名前:290 mailto:sage [2010/02/25(木) 21:12:22 ] >>291 アドバイスありがとうございます。 検索したらFisher-Yatesという方法も見つかりました。 これでやってみます。
294 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 21:31:36 ] >>292 参考になるかどうかわからないけど、過去ログからコピペ。 857 :826 :2008/03/02(日) 20:57:07 SimpleRoundToの個人的まとめ。 正解かどうかわからないので、必要な人は追試してください。 ・SimpleRoundToは意図した結果が得られない場合(ADigit<0 ?)がある。 ・Truncは引数に変数を使った式を与えると意図した結果が得られない場合がある。 ○a := 10; Trunc(0.25 * a + 0.5) / a; ○Trunc(0.25 / 0.1 + 0.5) * 0.1; ×a := 0.1; Trunc(0.25 / a + 0.5) * a; //SimpleRoundToの中がこれ ・引数に指定する計算式の結果を一度変数に代入してから、Truncに与えれば大丈夫そう。 ○a := 0.1; b := 0.25 / a + 0.5; Trunc(b) * a; ・Floorも内部でTruncを使ってるので同様。 ・Ceilは内部でTruncを使っているものの大丈夫そう??
295 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 23:01:02 ] >>289 APIも知らないの?
296 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 23:01:54 ] >292 おもしろいね。時間があったら追試してみたいけど、気になったポイントを。 Edit1は計算結果が一旦Double型に代入されてそれがTruncに渡されている。 Edit2は予めコンパイラが計算した浮動小数点数の定数値をTruncに渡している。 Edit3は式の値がおそらくExtendedで一時的に保持されてそれがそのままTruncに渡されている。 CPUウィンドウでコンパイル結果がどのようなアセンブル命令に展開されているのかを見ると違いが わかるのかも。
297 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 23:02:22 ] ノ´⌒ヽ,, γ⌒´ ヽ, // ""⌒⌒\ ) i /::::::::: ノ \ ヽ ) !:::::::::::(・ )` ´( ・) i/ |:::::::::::::::(__人_) | \:::::::::::::`ー' / チッ うっせーな… /:::::::::::::::::::::::::::\
298 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 23:29:53 ] >>295 どれ使うか分からんので教えて。
299 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 00:08:58 ] >>290 procedure TForm1.Button1Click(Sender: TObject); const CARD : array [0..5] of string = ('THE FOOL','THE MAGICIAN','THE HIGH PRIESTESS', 'THE EMPEROR','THE LOVERS','The HIEROPHANT'); function tekitou(a,b:integer):TPoint; begin result.X := b; result.Y := a; end; var CardNum: array [0..5] of Integer; i,r1,r2 : integer; p : TPoint; begin Memo1.Clear; for i := 0 to 5 do CardNum[i] := i; for i := 0 to 999 do begin r1 := random(6); r2 := random(6); p := tekitou(CardNum[r1],CardNum[r2]); CardNum[r1] := p.X; CardNum[r2] := p.Y; end; for i := 0 to 5 do Memo1.Lines.Add(CARD[CardNum[i]]); end; 駄目な例
300 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 00:44:44 ] >>298 msdn.microsoft.com/
301 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 06:39:48 ] OSに任せておけばいいだけやん。あほか。
302 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 07:10:59 ] >>287 GetCurrentProcessorNumberやCPUIDで調べる方法は知ってるけど、 Sleepしてる最中に調べるのは無理だろって話さ。 ThrreadIDと違って、コアは実行途中でも入れ替わるんだし、 SleepしてたらCPUはつかんでないだろ。
303 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 07:43:33 ] sleep したスレッドが1000個あったとして、それに意味があるの? それこそ「特殊な」プログラムだと思うのだが。
304 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 12:54:02 ] >>302-303 だからいい加減出て行けよ バカに噛みつくのもバカ 必死にしか見えない
305 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 12:54:45 ] はいはい本人乙
306 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 12:56:05 ] 馬鹿というのは鳩山のAAを張ってる奴だな いい迷惑だ
307 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 12:57:17 ] 即レスとかどんだけ張り付いてるんだよw そんなに悔しかったのか
308 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 12:59:29 ] >>302 そんなことしなくても外部からいくらでも観測する方法あるだろ… 必死になるあまり視野が狭くなってないか?落ち着けよ
309 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 13:02:13 ] 本日も質問者不在のままおっさん鬱病患者達が頑張っていますね
310 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 13:06:52 ] 必死必死うるせえんだよ 必死って言う方が必死なんだよばーーーーーーーーーーーーかwwwwwwwwwwwwwwwww もうこんな気持ち悪いところ来ないから一人で勝手に喋ってろwwwwwwwwwwきめえwwwwww
311 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 13:08:47 ] これで静かになるな ありがたやありがたや
312 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 13:16:25 ] TBase = class public class const Value: Integer; abstract; end; TBaseClass = class of TBase; TExtend1 = class(TBase) public class const Value: Integer = 1; end; TExtend2 = class(TBase) public class const Value: Integer = 2; end; var cls: TBaseClass; cls := TExtend1; a := cls.Value; //1が入って欲しい もちろんこんなコードは書けないんですけど、 上記のようなクラス定数(もしくはクラス変数)の継承みたいなことって何かで代用できますかね
313 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 13:38:23 ] 代替にはならないと思うがReadプロパティで対応するのが一般的だと思う。
314 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 18:44:42 ] 引数なしの関数は変数にも見えるから function Value : Integer; virtual; を使う手もある
315 名前:312 mailto:sage [2010/02/26(金) 19:01:32 ] >>313-314 ありがとうございます そうなんですよね、実装部に書くことを許容すればできるんですけど、 宣言部だけで継承先の振る舞いを変えられたらと思ったんですが、やはり仕様上難しそうですね…
316 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 22:52:20 ] Delphi、VisualStudioに付いてくるやつ以外で TAnimateで使えるようなAVIファイルを集めた 市販の素材集はないでしょうか?
317 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 22:56:51 ] TStringListの内容をINIファイルの一行データとして安全に書き込んだり読み込んだりするための変換処理ってどう書けばいいですか?
318 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 23:29:37 ] 具体的にどういう変換をしたいのかが見えない
319 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 23:37:10 ] ini[0] = TStringList.Parse(sl[0]); sl[0] = TIniFile.Parse(ini[0]);
320 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 23:41:10 ] >>317 例えば、iniファイルに key=aaa;bbb;ccc と書かれていた場合に、 その値を aaa bbb ccc と、変換して取得したい。 または、逆変換してiniファイルに書き込みたい。ってこと? 単純にTStrings#DelimitedTextプロパティを通せば、自動的に変換してくれる。 ただし落とし穴があって、スペースもデリミタとして扱ってしまう。(Del 7の場合。以降のDelphiは使用したことないのでシラネ) 厳密に指定したデリミタのみで分割したい場合、JCL(ttp://jcl.delphi-jedi.org/)に含まれる、JclStrings#StringsToStrやJclStrings#StrToStringsを使用してます。 iniファイルへの読み書きはTIniFile使えばいいじゃね?。安全にが何を指してるか知らないけど。
321 名前:デフォルトの名無しさん [2010/02/26(金) 23:42:39 ] mailto:sage てs
322 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 23:47:32 ] 正直な話、オレだったらTStringlistの内容をinifileに保存なんてしない。 何を目指してるのかは分からないけど。
323 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 03:53:55 ] >>320 個々にAnsiQuotedStr(読み込み時は逆にAnsiDequotedStr)を適用すれば外部ライブラリはいらない
324 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 09:18:11 ] マルチコアの話に便乗なんですが、要は1つのスレッドを OSが適当に割り振るからあんまり考えなくて良いよって解釈しました。 言い方変えると1スレッドを複数のコアで処理はしないってこと? マルチコア対応とか書いてあるアプリって、重い処理でも1スレッドに書いたほうが プログラムが簡単なのにマルチスレッドに出来るだけ分けてるって事?
325 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 09:44:07 ] >>323 TStringListの個々の要素であるStringは#0-#20(当然#13#10も)なんかも格納できるバイナリコンテナだからもうひとひねり必要だな。 標準でやるには例えばURL Encode/Decodeとかできっちり処理しないと破綻する。
326 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 10:26:53 ] だがほとんどの処理で #0 以降の文字は欠落するから もう忘れてもいいんじゃないかな?
327 名前:292 mailto:sage [2010/02/27(土) 14:37:50 ] どの程度誤差が発生するのかちょっと調べてみました。 memo1,2,3を配置して誤差が出たとき追加していきます。 procedure TForm1.Button3Click(Sender: TObject); var Su : double ; Kin ,sux : integer; kei ,ans : double; a1,a2,a3 : double; t :string; const sucon = 0.00000001; begin memo1.Clear; memo2.Clear; memo3.Clear; for Sux := 1 to 1000 do begin su := sux / 10; for Kin := 1 to 1000 do begin kei := Su * Kin ; a1 := trunc(kei); a2 := trunc( Kin * su); a3 := trunc( Kin * su+ sucon); ans := trunc((sux * kin / 10)) ;
328 名前:292 mailto:sage [2010/02/27(土) 14:40:31 ] if a1<>ans then begin t := Floattostr(kin) + ' , ' + Floattostr(su) + ' , ' + Floattostr(ans) + ' , ' + Floattostr(a1) + ' , ' + Floattostr(a2) + ' , ' + Floattostr(a3); memo1.Lines.Add(t); end; if a2<>ans then begin t := Floattostr(kin) + ' , ' + Floattostr(su) + ' , ' + Floattostr(ans) + ' , ' + Floattostr(a1) + ' , ' + Floattostr(a2) + ' , ' + Floattostr(a3); memo2.Lines.Add(t); end; if (a3<>ans) then begin t := Floattostr(kin) + ' , ' + Floattostr(su) + ' , ' + Floattostr(ans) + ' , ' + Floattostr(a1) + ' , ' + Floattostr(a2) + ' , ' + Floattostr(a3); memo3.Lines.Add(t); end; end; end; memo1.Lines.SaveToFile('c:\memo1.csv'); memo2.Lines.SaveToFile('c:\memo2.csv'); memo3.Lines.SaveToFile('c:\memo3.csv'); end; どうやら単に計算してからtruncしただけでは発生頻度が減るだけで完全な対策にはならなそうです。 小さい数を足してやって切り捨てるのが良いようです。
329 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 14:58:05 ] 問題の所在を理解していないような希ガス…
330 名前:デフォルトの名無しさん mailto:sage [2010/02/28(日) 07:34:09 ] やべー、俺も>>292 の原因知りてぇ。 >>296 さんのExtendedになぜなるのかが知りてぇ。 こういう場合、Edit1の方法で計算しないと間違った答えが出ることもあるってことだよね。
331 名前:デフォルトの名無しさん mailto:sage [2010/02/28(日) 07:47:13 ] homepage1.nifty.com/MADIA/delphi/delphi_bbs/200310/200310_03100025.html ↑ここに同じようなやりとりがあった。
332 名前:デフォルトの名無しさん mailto:sage [2010/02/28(日) 07:52:04 ] つーことで、実数型使うときはdoubleを使わないでextendedを使えってこと?
333 名前:デフォルトの名無しさん mailto:sage [2010/02/28(日) 08:02:36 ] おー、すまん。一人でとっちらかっていた。 homepage1.nifty.com/MADIA/delphi/delphi_bbs/200607/200607_06070011.html ここ読んでわかったけど、 Trunc(X: Extended): Int64; で型変換してる。 Trunc使うときは、Extended型で使わないと誤差がでるってこと。 もしくは小数点移動させて、整数にしてから処理すればいいね。
334 名前:330-333 mailto:sage [2010/02/28(日) 08:20:53 ] 浮動小数って、意味がわかりました。そういうものなんですね。 使ったことなかったものですから、、、今回よくわかりました。 332も違うつーことで。
335 名前:デフォルトの名無しさん mailto:sage [2010/02/28(日) 18:43:16 ] それは不動少数
336 名前:デフォルトの名無しさん [2010/02/28(日) 20:36:04 ] すみません教えて下さい。 Form1 に直接 Image1 を置いていたのですが後から Panel1 を追加して Image1 の親コントロールを Panel1 に変更したいのですが、IDE でやる方法はありませんか?
337 名前:デフォルトの名無しさん mailto:sage [2010/02/28(日) 20:53:34 ] floatとdoubleで結果が異なる例は見たことあったけど doubleとextendedで差が出る実例は初めて見た。 64bit厨はどうするのだろうか。
338 名前:デフォルトの名無しさん mailto:sage [2010/02/28(日) 21:14:15 ] それ 64bit 関係ないし x64 なら 128bit 浮動小数点数が必ず使えるし
339 名前:デフォルトの名無しさん mailto:sage [2010/02/28(日) 21:51:41 ] 337は64ビットネイティブバイナリでFPU命令が使えないと思っているんじゃないだろうか
340 名前:デフォルトの名無しさん mailto:sage [2010/02/28(日) 22:00:26 ] >>336 切り取って貼り付ける。
341 名前:デフォルトの名無しさん mailto:sage [2010/02/28(日) 22:02:28 ] >>340 ! なるほど!ありがとうございます!
342 名前:337 mailto:sage [2010/02/28(日) 23:33:39 ] >>338 , 339 ごめん、知らなかった。 >128bit浮動小数点と、64bitネイティブでFPU エンバカスレに帰るよ。
343 名前:デフォルトの名無しさん mailto:sage [2010/03/01(月) 01:26:40 ] >>338 64bit2個をまとめて扱えるだけであって128bitが1個じゃないから
344 名前:デフォルトの名無しさん mailto:sage [2010/03/01(月) 02:02:25 ] 実装がどうなってるかは関係ないだろ 扱えることに変わりはないし
345 名前:デフォルトの名無しさん mailto:sage [2010/03/01(月) 17:58:10 ] 実装は関係ないだろキリッ!って言われてもなぁ
346 名前:デフォルトの名無しさん [2010/03/01(月) 19:12:48 ] はいはい
347 名前:デフォルトの名無しさん [2010/03/01(月) 19:25:15 ] >>345 お前がそう思うんならなんやらかんやら
348 名前:デフォルトの名無しさん mailto:sage [2010/03/01(月) 19:25:56 ] delphi2011っていつでるの?
349 名前:デフォルトの名無しさん mailto:sage [2010/03/01(月) 20:00:32 ] さあ
350 名前:デフォルトの名無しさん [2010/03/01(月) 20:56:48 ] >>348 もうすぐじゃないの? ただし32ビット
351 名前:デフォルトの名無しさん mailto:sage [2010/03/02(火) 21:21:42 ] 特定の位置からバイナリを読み取って、違うファイルとして保存するというプログラムを書いています。 fileopen関数で開いて、FileRead(F, Buff^, Size);でバッファに格納はできたのですが、 この格納したものはテキストでならstringですので取り出せますが、バイナリとして保存する場合はどのように取り出せばよいのでしょうか? お力をお貸しください。
352 名前:デフォルトの名無しさん mailto:sage [2010/03/02(火) 21:35:10 ] そのままでいいだろ
353 名前:デフォルトの名無しさん mailto:sage [2010/03/02(火) 21:36:16 ] >>344 実装がどうとか以前に扱えないし SSE2が四倍精度浮動小数点数扱えると思ってんの?
354 名前:デフォルトの名無しさん mailto:sage [2010/03/02(火) 21:41:13 ] >>352 バッファはテキストとして保存可能ですが、そのバイナリがテキストでない画像とかを どうやってバイナリとして保存するかがわからなくて・・・。
355 名前:デフォルトの名無しさん mailto:sage [2010/03/02(火) 21:49:37 ] >>354 MemoryStream
356 名前:デフォルトの名無しさん mailto:sage [2010/03/02(火) 21:57:44 ] >>355 それやろうと思ったんだけど、うまくいかなくて・・・ var ms:tmemorystream; begin ms := tmemorystream.create; ms.loadfromfile('TEST.dat'); //このseekがよくわからない。例えばSizeが300の地点から500までを読む場合の位置設定がわからないところ ms.seek(?); ms.read(Buff^,sizeof(buff)); ms.savetofile('TEST2.dat'); ms.free; これでできなかったんです・・・。
357 名前:デフォルトの名無しさん mailto:sage [2010/03/02(火) 22:05:49 ] >351 ファイルストリームで元ファイルを開く→所定の位置にseekする→メモリストリームにコピーする →メモリストリームのPositionを0に戻す→メモリストリームをファイルに書き込む
358 名前:デフォルトの名無しさん mailto:sage [2010/03/02(火) 22:13:33 ] >>357 レスありがと。 メモリストリームにコピーとは?どのような関数ですか?
359 名前:デフォルトの名無しさん mailto:sage [2010/03/02(火) 22:34:57 ] CB_SETCURSELってチェンジイベントみたいなのって起きないのかな。 他アプリのコンボボックスを操作するのに、CB_SETCURSELで選択項目を 変えるんだけど、一回コンボボックスにクリックメッセージを送らないと 認識しないみたいなんだ。 これって、相手のアプリの作りの問題? 別のAPIがあるの?
360 名前:デフォルトの名無しさん mailto:sage [2010/03/02(火) 22:50:08 ] >>354 意味分からん 何もしてないのにバッファが書き換わるとでも言いたいのか
361 名前:デフォルトの名無しさん mailto:sage [2010/03/02(火) 22:51:47 ] >>360 簡単にいうとどうやってこの格納されたバッファをファイルとして保存するかなんです。
362 名前:デフォルトの名無しさん mailto:sage [2010/03/02(火) 23:11:16 ] ファイルストリームでもメモリストリームでも好きなの使えば素敵やん
363 名前:デフォルトの名無しさん mailto:sage [2010/03/02(火) 23:43:28 ] >>361 b: array[0..4095] of byte; MS: TMemoryStream; begin for i:= 0 to 4095 do b[i] := $FF; MS:= TMemoryStream.Create; MS.Write(b, 4096); MS.SaveToFile('c:\gomi.dat'); MS.Free;
364 名前:デフォルトの名無しさん mailto:sage [2010/03/02(火) 23:58:58 ] >>363 書き込むだけの用途ならTFileStream使え Create-Freeはtry-finallyで囲め ハードコーディングすんな
365 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 00:07:55 ] >>364 うわ…
366 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 00:30:48 ] >>358 とりあえず、マニュアル(ヘルプ)読んでから、質問しろ function CopyFrom(Source: TStream; Count: Int64): Int64; ってのが見つかるはずだから
367 名前:デフォルトの名無しさん [2010/03/03(水) 13:06:15 ] Windows7が動くDelphiはどのバージョンまで対応していますか Delphi2以降は一応動くと思うのですが