1 名前:デフォルトの名無しさん mailto:sage [2005/11/23(水) 23:31:08 ] Delphi初心者が問題をコツコツと解きながらレベルアップするためのスレです。
367 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 09:53:58 ] codecentral.borland.com/Item/22123
368 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 11:44:07 ] DelphiでJpeg2000を表示する方法を教えて下さいでつ。
369 名前:365 mailto:sage [2007/10/11(木) 11:51:18 ] 368はニセモノでつ。 でも、実は未だに解決してなくて知りたかったりして。
370 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 13:22:13 ] 普通に>>367 ので表示できたけど?
371 名前:365 mailto:sage [2007/10/11(木) 14:23:02 ] サンクス>>370 実は自分もDel7出来ました。 が、実際の環境である、 C++ Builder 6だと上手くコンパイルできないんでつ><
372 名前:デフォルトの名無しさん [2007/10/11(木) 16:41:56 ] Delphiアプリのメインフォームのウィンドウクラスって、TApplication固定でしたっけ?
373 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 19:19:37 ] でつでつ言うなよ
374 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 22:14:07 ] でつな
375 名前:デフォルトの名無しさん [2007/10/12(金) 15:44:09 ] (a+3)^ ってある^はどういう意味?
376 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 16:43:45 ] ObjectPascalの場合 後ろの^は ポインタの参照 C言語の *(a+3) と同じ
377 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 17:52:24 ] なるほどサンクス
378 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 18:39:09 ] よく見かける、 エディットボックスにファイルをD&Dしてそのパスを取得 はどのようにやればよいですか?
379 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 19:29:56 ] 質問はこちらにどうぞ くだすれDelphi(超初心者用)その44 pc11.2ch.net/test/read.cgi/tech/1191657968/l50
380 名前:デフォルトの名無しさん mailto:sage [2007/10/13(土) 05:15:36 ] 答えられんからって誘導とは酷いな!
381 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 17:21:40 ] vb.netでそこそこは作れるレベルだけど、delphi始めようと思ったら最初に買うべき 本は何がいい? それかどぼんみたく、そこだけ見ればそこそこのものは作れるようになるサイトか
382 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 23:12:41 ] 何を作りたいかだろ ファイラ作りたいとか、MMO作りたいとか(スレがあっったりするが)
383 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 08:44:22 ] ドトネトみたく環境設定も要らないし、コンポーネントも要るものはあるし。 いきなり始めて、躓いてから質問してみたら?
384 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 15:17:32 ] VB2005はヘルプがすごく使いやすい
385 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 15:30:47 ] ヘルプだけかよw ネイティブアプリが作れるようになったら試しに触ってやるよ。
386 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 23:24:20 ] ま、C#からやったらいいよ。DelphiもIDEは.NETが必要だし。 C#は良い本もヘルプもMSDNもWEBサイトも腐るほどあるし。
387 名前:デフォルトの名無しさん [2007/11/09(金) 01:23:20 ] Del5。XPで、 Ctrl+Alt+Delを無効にする方法。 右クリックを無効にする方法。 教えて。
388 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 01:40:40 ] >Ctrl+Alt+Delを無効にする方法。 マルウェアでも作るつもりですか?
389 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 05:38:41 ] そーゆーことしたいなら自分で調べろww
390 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 06:47:53 ] >>387 いちばん簡単なのは、DirectXのフルスクリーンモードで、そういうモードがある。 やり方は自分で調べろ
391 名前:387 [2007/11/09(金) 06:48:48 ] いや、調べてもわからないから聞いてるんで。 ちなみに、会社のIT担当委員ってのをやってて、社員にサイバーテロの対処について教育するんだが、 本物のウィルスを使うわけにはいかないんで、ジョークウェアを作ろうと思っている。
392 名前:387 [2007/11/09(金) 06:49:39 ] 書き忘れた。 一定の時間が経過したら自動的に終了させるつもりだ。
393 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 23:31:11 ] Ctrl-Alt-Deleteのキーストロークは最優先でシステムが捕捉するので、これを 無効にすることはできない。無理。不可能。Deleteキーの軸を折っちゃえ。 右クリックはマウスの右クリックのスイッチを(ry
394 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 06:56:12 ] 無理ではない。教えたいところだけど、>>391 が本当か分からないし 教える立場だったら自分で調べて欲しいところ。 ヒント:海外
395 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 07:35:04 ] ソフトウェア板の各所でも、キーロガーとか、スパウウェア用途に使われるものは紹介しないというルールだしな おしえる側も、最低限のことは守らないと
396 名前:デフォルトの名無しさん [2007/11/10(土) 08:46:07 ] 391だけど、不正ソフトばらまくのは犯罪だってことくらい知ってるよ。 けどまぁ、信用してもらえないのも仕方がないからなんとかするわ。
397 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 07:10:16 ] 2chで信用しろといわれても・・・
398 名前:delphi初心者 [2007/11/12(月) 13:48:03 ] ご質問いたします。 1.コンマ区切りの文字列をばらして配列にセットしてくれる関数はありませんか? 2.functionで配列は返せないのですか? 追伸: 「そんなこと自分で調べろ!」 と云う罵倒はおことわり。
399 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 13:50:46 ] TStringList.CommaText
400 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 13:51:22 ] それかTStringList.Textに入れれば、バラしてくれたかも
401 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 22:10:08 ] >398 配列の型を宣言してそれを戻り値の型にすればおk
402 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 14:33:42 ] >>401 それ、何てTStringList?
403 名前:デフォルトの名無しさん [2007/11/13(火) 18:48:49 ] 【Borland Delphi 6 Personal日本語版 入手先】 www.vector.co.jp/soft/dl/win95/prog/se205882.html 【Delphi 6 導入手順 】 www.wikihouse.com/DelphiVIP/index.php?%C6%B3%C6%FE%BC%EA%BD%E7 【インターネットダイレクト(Indy)コンポーネント導入手順 】 homepage3.nifty.com/KENCH/open/indy/delphi_indy.htm 動作確認は、メモとIdHttpコンポーネントを貼り付けて以下のコードを書いて実行してみる。 うまくいくとこのスレがメモにダウンロードされる。 Memo1.Lines.Text := IdHttp1.Get('live19.2ch.net/test/read.cgi/stock/1144395454/l50 '); 【デルファイの質問所】 hpcgi1.nifty.com/MADIA/DelphiBBS/wwwlng.cgi leed.t.u-tokyo.ac.jp/~takeuchi/delphi/search.cgi groups.google.com/groups/search?hl=ja&q=delphi+
404 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 20:01:32 ] 上げ荒らしうぜえ
405 名前:初心者++ [2007/11/18(日) 11:09:49 ] UpdateSQLがうまくいきません。以下のようなコードで実行すると、例外エラー'アップデート失敗'がでます。 propertyの設定は cachedupdate true /requestlive true /updateobject updatesql updatesqlのsql設定文もできてると思うんですが、、、 begin database1.open; database1.StartTransaction; query1.Open; end; procedure TSDIAppForm.Button1Click(Sender: TObject); begin if query1.UpdatesPending then begin query1.ApplyUpdates; end; database1.Commit; query1.CommitUpdates; query1.Close; database1.Close; end; どこが間違ってるのでしょうか?教えてください Turbo Delphi for wind32 OS : wind2000です。
406 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 15:36:44 ] 残念、スレちがいです。 >Delphi初心者が問題をコツコツと解きながらレベルアップするためのスレです。
407 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 17:54:22 ] 糞なテンプレでスレ立てて必死に粘着交通整理してる奴ってなんなの?
408 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 18:45:04 ] 自分の居場所なんだから、そりゃ必死だろう。 自分の居場所をキチンとメインテナンスするのは、それは当然ではあるまいか?
409 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 17:32:32 ] 自分の居場所ならグダグダ「スレ違い」とか言ってないで、問題を出題すべきだと思うんだな。 問題と解答、それに議論が無いから、過疎ってスレ違いと基地外の巣窟と化してるんだな。 問題:おみくじ randomを使って大吉、吉、凶のいずれかを表示するプログラムを作れ
410 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 17:36:13 ] >>409 あまりにも簡単すぎるプログラム出題でワロタw せめて、n回凶が出る確率を計算するプログラムとかにすればいいのに。
411 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 17:47:39 ] >>405 Queryの更新エラーは、 query1.RequestLiveのtrue/falseが 結構関係している。
412 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 22:53:35 ] Gandomを使って大吉、吉、凶のいずれかを表示するプログラムを作れ
413 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 23:05:26 ] >>412 CGは専門外なんで無理ですw
414 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 23:21:52 ] Gandom はすれ違い。
415 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 01:02:34 ] 問題:呼び出すたびに1と0を交互に返す関数を書け。グローバル変数を使っても良い。
416 名前:初心者++ [2007/11/21(水) 02:06:06 ] UpdateSQLのエラーが解決しました。レスを下さった方ありがとうございました。 SQL文のキー違反でした。 SQLの勉強をもっとしないと阿寒と思いました。 Accessのビューで作ったSQL文を貼り付けたりしておったのですが、、、。 エラー続出でした。
417 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 23:30:12 ] 問題:マウスクリックすると、クリックしたマス目とその上下左右のマスが反転する。 マス目を全て塗りつぶしたらクリアとなるゲームを作る □□□□□ □□□□□ ■■□□□ □□□□□ □□■□□ ■□■□□ □□□□□ □■■■□ □■■■□ □□□□□ □□■□□ □□■□□ □□□□□の真ん中を押すと □□□□□左上クリックで .□□□□□ ■■□□□ ■□□□□ ■○■□□ □■□□□ □■■■□ □□■■□ □□■□□ □□■□□ □□□□□ ○を押したら □□□□□ 全部塗りつぶしたらゲームクリア ■■■■■ ■■■■■ ■■■■■ ■■■■■ ■■■■■
418 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 23:43:16 ] >>417 ライツアウト懐かしいな
419 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 00:58:06 ] 俺には作れねぇ
420 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 01:03:28 ] 頑張れば作れなくもなさそうだけど、とてつもなく無駄が多くなりそう・・。
421 名前:1/2 mailto:sage [2007/11/22(木) 01:33:44 ] TForm1 = class(TForm) procedure FormPaint(Sender: TObject); procedure FormClick(Sender: TObject); private FTable: array[0..4, 0..4] of Boolean; end; procedure TForm1.FormPaint(Sender: TObject); const B2S: array[Boolean] of String = ('□', '■'); var x, y: Integer; begin for x := 0 to 4 do for y := 0 to 4 do Canvas.TextOut(x*12, y*12, B2S[FTable[x, y]]); end;
422 名前:2/2 mailto:sage [2007/11/22(木) 01:34:15 ] procedure TForm1.FormClick(Sender: TObject); var pt: TPoint; begin pt := Self.ScreenToClient(Mouse.CursorPos); pt.X := pt.X div 12; pt.Y := pt.Y div 12; if (0 <= pt.X) and (pt.X <= 4) and (0 <= pt.Y) and (pt.Y <= 4) then begin FTable[pt.X, pt.Y] := not FTable[pt.X, pt.Y]; if 1 <= pt.X then FTable[pt.X-1, pt.Y] := not FTable[pt.X-1, pt.Y]; if pt.X <= 3 then FTable[pt.X+1, pt.Y] := not FTable[pt.X+1, pt.Y]; if 1 <= pt.Y then FTable[pt.X, pt.Y-1] := not FTable[pt.X, pt.Y-1]; if pt.Y <= 3 then FTable[pt.X, pt.Y+1] := not FTable[pt.X, pt.Y+1]; end; Invalidate; end;
423 名前:2/2 ver.2 mailto:sage [2007/11/22(木) 01:40:47 ] クリア判定忘れてた。 procedure TForm1.FormClick(Sender: TObject); var pt: TPoint; x, y: Integer; Clear: Boolean; begin pt := Self.ScreenToClient(Mouse.CursorPos); x := pt.X div 12; y := pt.Y div 12; if (0 <= x) and (x <= 4) and (0 <= y) and (y <= 4) then begin FTable[x, y] := not FTable[x, y]; if 1 <= x then FTable[x-1, y] := not FTable[x-1, y]; if x <= 3 then FTable[x+1, y] := not FTable[x+1, y]; if 1 <= y then FTable[x, y-1] := not FTable[x, y-1]; if y <= 3 then FTable[x, y+1] := not FTable[x, y+1]; end;
424 名前:3/2 mailto:sage [2007/11/22(木) 01:41:18 ] Clear := True; for x := 0 to 4 do begin for y := 0 to 4 do if not FTable[x, y] then begin Clear := False; Break; end; if not Clear then Break; end; if Clear then ShowMessage('おめ'); Invalidate; end;
425 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 02:02:47 ] すげー!参考にさせて頂きますm(_ _)m
426 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 11:33:40 ] implementation {$R *.dfm} //スペースの都合上ここに記述本当ならTForm1のprivateが望ましい var BTable:array of array of Boolean; procedure CheckComplete(); var X,Y:Integer; begin for X:=1 to High(BTable)-1 do for Y:= 1 to High(BTable[X])-1 do if Not BTable[X,Y] then Exit; ShowMessage('Mission Complete!'); end; procedure TForm1.FormCreate(Sender: TObject); begin SetLength(BTable,DrawGrid1.ColCount+1,DrawGrid1.RowCount+1); end;
427 名前:修正1/2 (426は放置推奨 ) mailto:sage [2007/11/23(金) 11:43:25 ] //●最初にDrawGridを貼り付け、プロパティを以下のようにセット Align = alClient DefaultDrawing = False ColCount = 6 RowCount = 6 //●FormのPrivateに以下のフィールドとメソッドを追加 BTable:array of array of Boolean; //動的二次元配列 procedure CheckComplete(); //●CheckComplete関数を書く procedure TForm1.CheckComplete(); var X,Y:Integer; begin for X:=1 to High(BTable)-1 do for Y:= 1 to High(BTable[X])-1 do if Not BTable[X,Y] then Exit; ShowMessage('Mission Complete!'); end; //●FormCreateを書く procedure TForm1.FormCreate(Sender: TObject); begin SetLength(BTable,DrawGrid1.ColCount+1,DrawGrid1.RowCount+1); end;
428 名前:修正(2/2) mailto:sage [2007/11/23(金) 11:43:59 ] //●DrawGrid1DrawCellを書く procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); const COLORPALS:array[Boolean] of array[Boolean] of TColor = ((clWhite,clBlack),(clSilver,clSilver)); begin DrawGrid1.Canvas.Brush.Color := COLORPALS[(gdFixed in State) , BTable[ACol,ARow] ]; DrawGrid1.Canvas.FillRect(Rect); end; //●DrawGrid1SelectCellを書く procedure TForm1.DrawGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;var CanSelect: Boolean); begin BTable[ACol-1,ARow] := Not BTable[ACol-1,ARow]; BTable[ACol ,ARow] := Not BTable[ACol ,ARow]; BTable[ACol+1,ARow] := Not BTable[ACol+1,ARow]; BTable[ACol,ARow-1] := Not BTable[ACol,ARow-1]; BTable[ACol,ARow+1] := Not BTable[ACol,ARow+1]; DrawGrid1.Invalidate; CheckComplete(); end;
429 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 18:34:16 ] >>417 7行スレで盛り上がりそうな内容だなw
430 名前:デフォルトの名無しさん mailto:sage [2007/11/28(水) 17:46:32 ] 25ボタンの処理を全部書くことで初心者でも作れてしまうが、まじめにやれば7行に・・・・なるな多分
431 名前:デフォルトの名無しさん mailto:sage [2007/11/28(水) 23:00:38 ] >>157 D6からそうなったのか? パスなしだとWINDOWSフォルダにつくられるんじゃなかった?
432 名前:デフォルトの名無しさん mailto:sage [2007/11/28(水) 23:01:27 ] 未読位置を間違えてロングパスを放ってしまったorz
433 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 01:31:13 ] >>417 作れたは良いんだがクリアできない なんかコツとかある?勿論クリアするね
434 名前:デフォルトの名無しさん [2007/12/13(木) 23:00:31 ] TMEMOの任意の行を削除するにはどうしたらいいの?
435 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 23:09:52 ] >>434 TMemo.Lines.Delete
436 名前:434 [2007/12/14(金) 06:52:10 ] >>435 ありがとう。 ごめん、質問間違えた。 あるデータと一致する行を削除 だった。 listboxだったらitems.indexとかで簡単にできるけど
437 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 22:58:42 ] >>436 TMemo.Lines.IndexOf
438 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 19:30:52 ] BDS2007を使っているんですが、コード補完機能って、すごーく 時間がかかるものなのでしょうか? HDアクセスしまくりで、VS2005のそれとは比較にならない程遅いのですが。 それとも何か設定等が悪いのでしょうか? OSはWinXP, メモリは2Gです。よろしくお願い致します。
439 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 18:36:32 ] コンポを大量インスコしてるとか
440 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 09:47:31 ] 普段使わないコンポはチェック外しておくとロード時間が劇的に短くなる。
441 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 21:13:59 ] 普段使うコンポはチェック外さないでおくとロード時間がものすごく長い。
442 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 22:06:02 ] 最新式マシンに変えるとロード時間が劇的に短くなる。
443 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 01:49:05 ] ちょっと前のマシンだとロード時間がはげしく長い。
444 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 02:11:10 ] BDS2006で、PenD(3.0GHz) メモリ2G WinXPマシンでつこーてるが、 コード補完は、特に遅くないな。 ちなみに、起動時は、起動オプションで、Delphiのプロファイルのみ読み込み、 あと余計なDB周りのコンポなどもはずしてる。 しかしメモリ2Gで、ハードディスクカリカリは感がられんな BDS2007が遅いということあるのかね
445 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 23:14:45 ] D7En Pen3(966) MEM384MB コード補完滅茶苦茶遅い。 数年前は大丈夫だったから多分原因はHDDだろうと勝手に思ってる。
446 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 03:44:18 ] >>445 そのくらいのスペックで、Del6Pro つかってだけど、問題なかったぞ? BDSの世代になって、死ぬほど重くて、マシン買い換えたが
447 名前:デフォルトの名無しさん [2007/12/31(月) 07:28:11 ] 職場のD7ENTでこちょこちょ書いてますがひたすらコピペしまくりでクラスも作った事がありません。 どこかのサイトにオプジェクト志向学ぶならC#やJavaで書かれた出来の良いコードをDelphiに移植するのが面倒だけど理解が早くなる、と言う意味の事が書かれてました。 とは言え、自分にオプジェクト志向の良いコードなのかどうか判別が出来るくらいならわざわざ移植には及ばない訳でして、適当なサンプル選びで途方に暮れています。 簡単なもの、ちょい重たいかなレベルで適当そうなコードを紹介して頂けませんか?
448 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 07:30:10 ] スミマセン ageてしまいました。
449 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 11:10:07 ] どこまでもコピペするつもりですか。 *頭をたたくと「いてぇ」、わきの下をくすぐると「わははは」と笑うクラスをつくて まじめな課題です。
450 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 11:59:29 ] 自分用のコンポーネントを自作するのが近道だよ。
451 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 12:06:15 ] >>447 何度も同じコード書いてるならそこを共通化するクラスなりライブラリなりを作ってみたら。 重複部分で呼び出しているAPIなり関数なりをJediVCLでGrepかけてどうラップしてあるかを見てみればいいと思う。 あのライブラリ郡の設計が美しいかどうかは微妙なところだけど。 一番手っ取り早いのはC#をやること。 C#、Delphi両面の利点と欠点が見えてくると思う。 もちろんよりリッチなクラスライブラリの使い方も習得できるしね。
452 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 19:50:50 ] JCLのコンテナ使いにくすぎる。おすすめせん。 俺も、C#のライブラリを参考にするのがお勧め。 標準のでいい。 インターフェスだけならMSDNで見たい放題、クラス設計の参考になる。 中のぞきたかったら、Reflectorででも、使えばソース見られる。 Reflectorなら、Delphiでも見られるしなw あとは、OOPなら、動的型言語のRubyもお勧め。 ほとんどが、オブジェクトなので、それを前提として、 どういった便利な使い方ができるか?というのがよくわかる。 ただ、ガーベジコレクション前提でオブジェクトを使い捨てまくるので、 そのままは使えないのだが、 勉強にはなる。
453 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 23:14:08 ] 2005を今更再インスコしようとして、鬱になる。 #さぽきれかあ
454 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 15:25:42 ] あー、今頃出来やがんのorz
455 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 16:05:07 ] ASMならジャンプテーブルを用意すれば簡単化と思いますがDelphiなら 以下の条件ならどんなコーディングをすればいいのでしょうか? type TSomeInts = 0..9; IntSet1, IntSet2 = set of TSomeInts の条件下で if (0 in IntSet1) and (0 in IntSet2) then ... if (0 in IntSet1) and (1 in IntSet2) then ... ... if (9 in IntSet1) and (9 in IntSet2) then ... のように、IntSet1且つIntSet2の組み合わせでcase文を使用したい場合です
456 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 16:08:54 ] すみません 問題を単純化するのにミスしました type Int1, Int2 = 0..9; の条件下で if (Int1 = 0) and (Int2 = 0) then ... if (Int1 = 0) and (Int2 = 1) then ... ... if (Int1 = 9) and (Int2 = 9) then ... でお願いします
457 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 16:15:33 ] case を2重にして全部を列挙するか 0〜9と決まってるんなら単純に case Int1*10+Int2 of 00: 01 ... とやったら?
458 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 16:29:47 ] >>457 ども 実際ご指摘のとおり type Suit = (Club, Diamond, Heart, Spade); var card1, card2: Suit; cardbits: BYTE とあれば cardbits := ($01 shl Integer(card1) + ($10 shl Integer(card2)); case cardbits of $00, $01, $02: ... $10, $11, $03: ... end みたいなことで実現しているのですが、実際は条件がもっと複雑で 単純にcase文でネストする場合三重になります この場合可視性が悪いですし Suit = (Null, Club, Diamond, Heart, Spade, Joker); みたいに列挙型を変更する場合も困難を極めます
459 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 17:04:39 ] var jumptable: array[0..9, 0..9, club..spade] of tjumpproc; なジャンプテーブル用意したら。
460 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 17:16:45 ] >>459 どもw ジャンプテーブルが使えたんですね・・・ 何やってんだ俺orz
461 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 17:54:22 ] ×可視性 ○可読性
462 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 14:54:47 ] Delphi6のFileSeekは多重定義されてますが function FileSeek(Handle, Offset, Origin: Integer): Integer; overload; function FileSeek(Handle: Integer; const Offset: Int64; Origin: Integer): Int64; overload; OffsetにInt64をあたえても上が呼ばれてるみたいなんですが どうなんでしょう
463 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 18:45:19 ] 気のせいです
464 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 22:18:42 ] Threadを使用してバックグラウンドで処理を行い、進行状況をForm1で表示する処理を行っています Form1のLabelに表示するたびにSynchronize関数を呼び出すとそのオーバーヘッド が凄まじく処理時間が数倍に跳ね上がってしまいます VCLを使用する場合にはSync関数を使用して呼び出すべきとの話ですが 全てが全てSyncを使用しなければならないのでしょうか? 例えばInvalidate関数等はどのタイミングで呼び出すべきなのでしょうか
465 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 22:31:43 ] スレッドセーフで無いコードはSynchronizeを使いVCLにスレッドセーフであることを保証してもらう必要がある。 初めからスレッドセーフなコードならばわざわざそんな事はしなくても良い。
466 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 22:33:02 ] いろいろやり方はあるけどLabelの更新頻度を下げるのが手っ取り早い。 データがどれだけ変更されようが画面の更新は1秒に一回未満にするならこんな感じ lastupdateview := GetTickCount; while true do begin 処理 if GetTickCount - lastupdateview > 1000 then begin lastupdateview := GetTickCount; Synchronize; end; end;
467 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 23:05:17 ] >>466 ども。 Invalidateの呼び出しはそれでやってます。 その方法では、例えば処理中のファイル名を表示しようとした場合 重い処理を行っている時は表示されているファイル名と処理している ファイルが異なるような場面が発生しませんか? かと言って”処理が長くなるようだったら強制的に表示する”って方法 を実現しようとするとタイマーを使用するなり手間がかかる気がするのですが・・・