[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 03/27 14:57 / Filesize : 277 KB / Number-of Response : 972
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

くだすれDelphi(超初心者用)その51



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以降は一応動くと思うのですが






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<277KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef