待ってました 乙〜
5 :
デフォルトの名無しさん :2009/12/02(水) 14:26:09
質問です。
XP SP3 IE8
Delphi6 Personal にて
メインFormにTWebBrowserを張り
WebBrowser1.Navigate('
http://www.ugtop.com/spill.shtml ');すると
使用ブラウザに、
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0;
と表示され、IE8の互換モードであると出てきます。
IE8で表示すると、ちゃんと
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0;
となります。
TWebBrowserを使うと、互換モードになってしまうみたいですが
IE8モードにするにはどうすれば良いでしょうか。
IE8モードは色々と動かないサイトが多すぎる
AvastアンチウィルスがDelphi製ソフトの一斉検出祭りらしいぞ!
Delphi製以外でも大量誤検知らしい
10 :
デフォルトの名無しさん :2009/12/04(金) 11:29:07
Delphi6 PersonalをWindows7 x64に入れたいんだがインストール出来ない・・・ 回避策はありませんか?
動かないんならエミュるしかないんじゃね
7上のXPで動かせばいいじゃん
13 :
デフォルトの名無しさん :2009/12/05(土) 20:14:45
タイトルバーにアプリケーションの名前と一緒に、 アプリケーションをコンパイルした日付を表示したいのですが、 アプリケーションをコンパイルした日付を取得する方法ってあるのでしょうか? 毎回手作業で入力するのが面倒なので、プログラム的に何か方法が無いかなー?と思ってます。 hogehoge [ver.3.2.1.20091205] みたいな感じです。 バージョンの取得は出来ているので後は日付だけなのですが…。 どなたかご存知の方よろしくお願いします。m(_ _)m
ファイルタイムスタンプからとれば。
>>13 ファイルの作成日時を取得すればいいんじゃね?
16 :
デフォルトの名無しさん :2009/12/05(土) 21:05:15
>>14 >>15 レスどーもです!
更新日時を使えばいけそうな気がしてきました。
一つ気になったのは人に配布する時、
一度zipかなんかで圧縮すると思うのですが、
解凍した時のタイムスタンプってどうなるのでしょう?
自分のPCの中にある圧縮解凍ソフトでは
作成日時は変更になるけど更新日時は問題ないみたいですが…
ソフトによって違いってあるのでしょうか?
自分なら version.pas に文字列リテラル埋め込んでスクリプトで更新するかな。 リリースビルドはコマンドラインからやるようにしているから間にそういうのを挟むのも簡単だし。 実際は日付なんてつけずにバージョン番号のビルド番号の自動更新に任せてるけど。 GExpertだかJEDIだかに__DATE__もどきがあったような気もしたけど忘れた。
18 :
デフォルトの名無しさん :2009/12/06(日) 21:35:39
Delphi2010の体験版のIDEのツールバーがバグってるんですが直す方法ないですか?
具体的には
http://up.ultra-zone.net/up3706.jpg.html みたいな感じで縦に伸びたり
ツールバー同士が重なってしまう状態です。
うろ覚えですが、インストール直後は大きさは普通で一部重なっているだけだったと
思うんですが、使ってるうちにだんだんと大きくなってきてますw
環境はXPSP3+IE8です。
>Delphi2010の体験版のIDEのツールバーがバグってる 私も XPSP3/IE8 ですがこのような問題には出会っていません。 記憶では、ツールバーの不具合はビデオドライバが古い場合に出るように思います。 ツールバーを右クリック、カスタマイズダイアログの「戻す」ボタンを、個々のツールバーに対して押していったら どうなりますか?リセットできるかもしれません
20 :
デフォルトの名無しさん :2009/12/08(火) 10:20:04
Win7にDel7インスコできるのかな? 以降、自分で試せは無しの方向で
自分の手で試せ
>>19 ,20
ありがとうございます、一応自己解決できましたので報告です。
修復インストールとか色々試したんですが、レジストリを弄ってなんとか直りました。
HKEY_CURRENT_USER\Software\CodeGear\BDS\7.0\Toolbars
のキーの中身を全部消したら大きさは元に戻りましたが、重なるのは相変わらずみたいです…
多分、一時凌ぎで根本的な解決にはなってないと思うのでビデオドライバの更新やパッチ当て
等もやってみようと思います。
D7から乗り換えの評価目的で入れて10日位ですが、なんか相変わらずバギーなIDEだなぁと言う印象
VSみたいにモッサリしてないのはいいんですけどね
ただ、言語仕様の拡張は結構魅力的なんですよね
コード補完がもっさりしてるんだよなぁ。頻繁に使うだけあって、気になる。
開発環境はDelphi6で使用データベースはInterBaseです。 伝票入力画面にて得意先参照フォームを表示して得意先コードを設定しています。 伝票登録後、前回選択した得意先を選択状態にするためにLocateを使用して得意先参照フォームを表示しています。 得意先コードが得意先参照フォーム内のDBGridに表示されている場合はうまくいくのですが(例:得意先コードが 1から35でDBGridの表示行数が12行の場合で前回選択得意先コードが10の場合)、 DBGridから隠れている部分の場合(例:得意先コードが14)、「グリッドインデックスが範囲を超えています。]という エラーメッセージが表示されます。 そのときDBGridの最終行には空のレコードが追加されています。Locateの戻り値はTrueです。 Googleで検索した結果、フォームのOnShowイベントにてDBGrid1.DataSource := DataSource1; という記述をすればいいという検索結果がありましたので、試してみましたが効果はありませんでした。 なにがよい対処法はあるのでしょうか。よろしくお願いします。 (読みづらい文章ですみません。)
こういうの見ていつも思うんだが、読みづらい文章だと自分で気付いてるなら 免罪符みたいに「読みづらい文章ですみません」なんて書かずに直せよ
>>26 えーとなんだっけ?
delphiやめて5年ぐらいたつけどたしかbookmark系の処理で幸せになれるはず
ちょっと特殊な環境なんですけど、英語版のWinXP(職場)と日本語版のVista(自宅)で、 ソースを持ってきたり帰ったりしながら開発しています。Delphiは7の英語版です。 それぞれ、新規にプロジェクトを作成して、TLabel等のCaptionに日本語を入力すると、 問題なく日本語で表示されるのですが、このソースをそのままもう片方のPCに持ってきて、 プロジェクトを開くと、Captionが文字化けしてしまいます。 ちなみに、dfmファイルを通常のテキストエディタで開くと、 object Button1: TButton 省略 Caption = #381#192#141's' 省略 end このような感じになっています。 Delphiでフォームをテキストで表示した場合は、 object Button1: TButton 省略 Caption = '実行' 省略 end このように文字化けせずに表示されます。 現状は、フォームをテキストで表示しクリップボードにコピーして、それをテキストエディタで 貼り付けて持って帰るようにしているのですが、大変面倒です。 何か良い解決方法はありますでしょうか。
ん?何がしたいの? 文字化けはParent(Form側)のエンコードを固定させればいいだけな気がするけど
>>30 フォームのフォントの文字セットはどちらの環境でも日本語になっています。
エンコードって、どこか別のところで設定できるのですか?
>>32 すみません。これで解決するような問題ではないような気がします。
どちらもDelphi7ですし…
procedure TForm1.Button1Click(Sender: TObject); begin IdHttp1.Request.ContentRangeStart := 100; memo1.Lines.Text := IdHttp1.Get(edit1.Text); end; とやっても指定した位置から読み込みできないのですがどのようにすればいいのでしょうか? 現象としてはHTMLの先頭から表示されてしまいます。 環境はDelphi7 + Indy10.0.52です どなたかわかる方よろしくお願いします。
まずはリクエストヘッダを確認 Content-Range: bytes 100-/ほにゃらら みたいになってるか? なってないならカスタムヘッダつけろ なってるならレスポンスコードを確認しろ 206以外が来たら鯖が対応してねぇ つーかdelphi使ってもないのに何で俺しかいねぇんだよw
>>36 うおーありがとうございます
リクエストヘッダ見たら付いてなかったのでカスタムヘッダ付けてみました
見事に成功しました感謝です
>>34 どちらもDelphi 7なんですが、どういう事??
どう設定すればいいんですか?
バイナリDFMにしたら?
DBGridの仕様の問題でしょ。エラー出るならtryでトラップすればいい
del7のコンソールアプリでたまに --------------------------- test.exe - アプリケーション エラー --------------------------- アプリケーションを正しく初期化できませんでした (0xc0000142)。[OK] をクリックしてアプリケーションを終了してください。 --------------------------- OK --------------------------- というエラーが出るんだけどこれってunitのinitialization〜メインブロックより前の段階で出るメッセージ?
ブレークポイント張ってみればいいじゃない
そこまで言うならお前がやってよ
初心者ってコンソールアプリ作りたがるけどコンソールのほうがデバッグ面倒臭そう
>デバッグ面倒臭そう そんなことはありませんよ
FreePascal/Lazarus のスレは結局消滅して終わりか?
Delphiで構造体を引数にとるDLLを作って、VC++から呼び出そうとおもったんですが、値の渡し方としては void func1( TRec* rec ); void func2( TRec& rec ); のように参照渡し、ポインタ渡し、どちらのほうがいいんでしょうか?
どっちでもいいが、NULLあるいはnilを渡したいときもあるだろうからポインタがおすすめ
>>49 ありがとうございます。ポインタ渡しでいこうと思います
すみません教えてください 日経ソフトウエアのTurboDelphiで始めるWindowsプログラムの本で ジャンケンプログラムでラジオグループのイベントハンドラを作ろうとすると エラーが出て作れません。 対策はあるでしょうか? よろしくお願いいたします。
エスパーさんは今休みじゃないかな?
53 :
51 :2010/01/03(日) 03:41:33
使ってるバージョンはDelphi2010です。 よろしくお願いいたします。
54 :
デフォルトの名無しさん :2010/01/03(日) 04:12:48
ソースぐらいうpしろksg
宣言部分無しで実装部分だけ書いちゃったんじゃないかとエスパーしてみる とりあえずエラー出たならエラー内容も書こうよksg
56 :
51 :2010/01/03(日) 08:49:41
すみませんでした。 ジャンケンプログラムを入力してコンパイルすると、 本には書いてませんが、セミコロンが必要と表示されて コンパイルすることができません。
(´ρ`)そうなのかー
( ゚д゚ )そうなんすか!
59 :
51 :2010/01/03(日) 09:37:57
すいません自己解決しました。 お騒がせいたしました。
メモ帳を編集中にF2キーを押したら自前アプリで音を鳴らす という動作をするアプリを自作したいんですが ぐぐってもくそ難しいページしか出てきません。 他アプリにフォーカスがある状態でキーイベントが発生したらそれを取得するサンプルコード下さい。 明日の朝までに欲しいので早くしてくれ。 間に合わなくなっても知らんぞ?
ああ、ガムやるよ
62 :
60 :2010/01/04(月) 02:21:17
結局何が言いたいんだ?
64 :
60 :2010/01/04(月) 04:44:15
65 :
60 :2010/01/04(月) 05:31:20
もう見に来ないから売買
delphi2010で、コード整形について質問です。 if then begin 1 end else begin 2 end; のように、endとelseのあいだに改行の入らないようにしたいのです。
>>66 delphi2010でそれできなくなったの?
69 :
66 :2010/01/04(月) 20:35:09
>>68 いままでのdel5しか使ったこと無かったので、ソースの整形は初めてですわ。
end else
begin
みたく、elseとbeginのあいだの改行がどう設定しても取れなくて。
前からそうだったのかな?
>>69 俺の使ったことある物の記憶ではdelphi6,7,2007,2009はそんなことなかったと思う
俺も同じ書き方だからそれは不便だなー
Delphi2010のエディタで、コメント等日本語を入力していると 時々バグって(文字化けみたくなる)落ちるのは、うちだけでしょうか?
落ちるのは無いけど、コメント削除中とかにカーソルが変なとこ飛んで文字化けになるのはたまに起きる
>>72 おおよそ、同じような現象だと思います。
コメントの途中で挿入したり消したりしてると、
変なところで改行されたり文字化けしたり。
最新アップデートでも直ってなかったので
諦めるしかないかな…
あきらめられても。ねぇ。 再現できるデータとか何か無いかな。> エディタ周りバグ
化けた直後の画面とかだけでも有れば助けになるかとおもう。
つ キーロガー でも、うちはIDEfix入れてるからかわからんけど そいうことないなぁ。
77 :
デフォルトの名無しさん :2010/01/07(木) 17:37:32
用語の使い方が良く分からないので難解なところはエスパーしてください。 Application.CreateForm(TForm2, Form2); これを、ですね。 procedure TEST00(h:TComponentClass; f:TForm) begin Application.CreateForm(h, f); end; な感じにフォームを引数にした関数にして TEST00(TForm2, Form2); みたいな呼び出し方をすることはできませんか。 ちなみに上のやり方はペケです。 コンパイルはとおりますけど、実行すると激しく長いエラー文で怒られます。
動作確認済み。 procedure test(InstanceClass: TComponentClass; var Reference); begin Application.CreateForm(InstanceClass, Reference); end; 第二引数に Var がついていないので TEST00(TForm2, Form2); の呼び出しで Form2 の内容が更新されないことが、実行時エラーの直接の原因です
動きます、たしかに。 これで朝から夕方まで悩んでました。 ありがとうございました。
それをやる意味にすごく興味があるんだけど、 なぜそんなことをしようと思ったの?
81 :
71 :2010/01/07(木) 22:28:18
文字列入力中に文字化けが起きて 勝手にブレークポイントのマークが付く。と。 メモリ上のエディタバッファが壊れているように見えますね。 ここまでひどいとバグレポートが他にも有っても良いような.....
あの超つかいにくいエディタを使っている人っているんだね。 基本的に日本語処理部分は十分なテストは行われていないから 避けられるものなら、避けた方が無難。 使い慣れた外部エディタ使えば問題は一気に解決。 Indyの日本語処理もひどかったなぁ。
>Indyの日本語処理もひどかったなぁ。 Indy に関しては、あきらめずに、バグレポートを送り続けるしかないでしょう。
85 :
72 :2010/01/08(金) 17:01:34
>>81 うちではATOK使ってそうなってるから、IMEとの相性はあまり関係ないかも
何となくだけど、2バイト文字の片方のバイトだけ削除したりして化けてる気がする
あとブレークポイントが勝手に張られたことはないなぁ
>>80 えと、ですね。
職場用のアプリを作っているんですが、いくつものアプリ(プロジェクト?)
に分けなきゃならないほど、いっぱいフォームがあって、ついでに似たような
処理のフォームがやけにいっぱいあるので、その処理をどこかにまとめて書いて
おけないかなと(「フォームを開く」ってのもその似たような処理のひとつ)
>>86 それだとちょっとおかしくないかな?
あの処理はフォームを「開く」処理じゃなくてフォームを「作る」処理だよ
そもそもApplication.CreateFormは自分で呼ぶことはあまりない関数だし
何でそんなところに絡みたがるのかがよくわからん
無料のdelphiって無いですか? 昔personal6ってのがあったのですが・・・
Turbo Delphi Explorerってのがあったけどそれもなくなった。 今あるのは期間限定のトライアルのみ。 新会社の方針として完全にアマチュアそっちのけになったのだろう。 某が潰れる前にDel6Per認証解除パッチでも出してくれればよかったのに。
ボーランド終わったな
もうとっくにEmbarcaderoに身売り済みですが
del6personalって認証しないでも一応使えるぞ いいのか悪いのか別としてw
そもそもダウンロード出来るところがなくなっちゃった
どっかの大学がサイトに置いて無かったっけ
もう無いよ
CodeGearからダウンロードしたのがあったなと思って、 ディスクのなかを探してみたら Turbo Pascal 3.0 が出てきた。なつかしい・・・・
delphi6personalとturbodelphiどっちもあるけど再配布とかしたらウルサイこと言われんのかな?
俺は言わないよ
そういえば大学の図書館のdelphi6の本で付属CD-ROMに入ってたぞpersonal 大きい図書館で探せばあるかもね
>>88 おかしいと言われ、もしかしてと不安になって、ちょっとだけ実験。
ああやっぱりとショック受けてます。
フォームは全部visible、起動時クリエイトはform1だけにしてました
作業を始めたとき、かなりの数のフォームになりそうだってことで
起動時の一気生成は絶対無茶だって思ったんです。
でもけっきょく分割しなきゃならなくなり、一アプリあたりのフォーム数はせいぜい10.
10個の一気生成ってのもそれはそれは不安を誘いますけど
メインフォーム以外のクリエイト時プロシージャをコメントアウトしたうえ
実験してみたら、まったくどうってことありませんでした。
(起動時間もメモリ消費も違いがなさ過ぎて唖然)
書き直したほうがいいですか?
>>87 助言ありがとうございます
落ち着いたら調べてみます(いまかなりあせってる)
turboはあるから6が欲しいなぁ
>>102 10個程度は全然大した数じゃないよ
例え100個作ってもOnCreate内の処理(時間)が少しだけならほとんど変わらない
素直にIDEが自動生成したコードでフォーム作ればOKだと思う
105 :
デフォルトの名無しさん :2010/01/11(月) 00:44:12
基本となるフォームひとつだけ作って、条件ごとに変化するようにすればいい 似たようなフォームをたくさん作るなんてアホすぎる・・・
とりあえず10個のフォームにどんな違いがあるのかさらしたら? 些細なものならCreate時に対応 何せ基本はいるときに作って使ったらすぐに消すことだよ
>>条件ごとに変化するようにすればいい
ごめんなさい、そのやりかたは、何ていうかイヤなんです。
使っているうちに機能追加が出てくるのは分かりきっているので。
複雑になりすぎてわけわかんなくなります(前にMSAccsessで痛い目にあってる)
>>10 個のフォームにどんな違いがあるのかさらしたら
10個ってのは似てる物の数じゃないです。アプリを分割して一アプリあたり
それぐらいにとどめようかなと。
最終的にいくになるかは分かりません。
ところで
>>基本はいるときに作って使ったらすぐに消すことだよ
これは、フォームの立ち上げ方のことですか。
Show,Hideじゃなく、Create,Releaseでもいいと?
だとすると助かるんですけど(書き直そうと思ってた、というかすでに一部
書き直しに入って早くも泥沼)
VBプログラマぽい考え方だねw AccessでVBAやってたんでしょ
はい というかちょっと前まではそれしかいじったことがないです。 プログラマなんてものではないです。
>>>基本はいるときに作って使ったらすぐに消すことだよ? >これは、フォームの立ち上げ方のことですか。 俺も基本は必要になったら、フォームをCreateしていらなくなったらRelease。
なんとなくだけど「はい・いいえ・キャンセル」程度のダイアログもフォームで自作してそうだなw
delphi 6 personal見つけてインスコしたけど special launchのソース読み込むと txpmanifestが見つかりません。とかエラーが出るおorz
personalにXPManifestはなかった筈
personalかどうかは関係ないだろ そもそも6には存在しないんだから
そうだった勘違いしてた
えー special launchって6じゃないのかorz
delphi 7ください!
>>111 版権物のソフトだと全部のダイアログにイラスト出せとか無理言われる
>>118 その程度ならいちいちフォームを設計しなくても、CreateMessageDialogで取得したTFormのインスタンスに
動的にTImage等を作成して乗っけてやればいい
むしろ全部に出さないといけないならコードでやった方が楽
SetLengthで確保した領域は次回SetLengthの時に勝手に解放してくれますか?
やってみれば分かるが解放される
>>120 ソースが見れるならSystem.pasの該当箇所を見ればSetLengthが内部では何やってるか分かる
ソースは読めるのにスレタイは読めないのか
del7で簡単なCGIを作りたくてdelを使ったCGI作成は ググって大体分かったのですが、フォームの内容を メール送信する時ってどうすればいいか、教えてください。 sendmaneとか見つけたのですが、利用制限があるので (個人使用なので引っかかることはないのですが) 出来れば制限のない方法があれば教えて欲しいです。 よろしくお願いします。
126 :
デフォルトの名無しさん :2010/01/13(水) 11:45:51
普通にindy使えばよくね?
dです。 Indyスレ行ってきます。
indyは正直使えない
わけでもない
男は黙って
indy
132 :
デフォルトの名無しさん :2010/01/15(金) 07:53:00
TIdMessageは腐っているが それ以外は、まあまあ使える
Synapse最高!
メールくらいソケット通信でやればよし
というわけでもない
匿名関数をWin32APIのコールバックとして渡すことは可能でしょうか? 例えば次のようなことがしたいです EnumWindows( function(hwnd: HWND; lParam: LPARAM): BOOL begin // 処理 end, 0 ); MakeObjectInstanceのようなものがあればよいのですが…。 バージョンは2010です。
無名関数に STDCALL つけられないから、コールバックにはそのままでは使えないな。
stdcallを指定してもまだコールバックとしては使えないみたいですね…。
stdcall 指定した無名関数から、関数のポインタだけを取り出す。 無名関数が親関数が終了するまで存在し続ける この二つを実装、確認しないといけないですね もう少し時間が必要です
>>137 2010持ってないから何やってるのかわからないんだけど、これってすごいの?
すごいっていうかもうlambdaはあって当たり前の機能
TStringListのCustomSortに無名関数が渡せない俺
Delphi 2010についてるQA検査を何となく使ってみたところ、 parameter 'XX' でCamel記法を使用、というのが警告の対象になったんですが、 Camel記法ってDelphiの推奨の命名法じゃなかったでしたっけ。 サンプルコードも大体Camelになってますし。 試しに変数名を小文字開始にしたら、警告対象外にはなったんですが。 新しめのコーディング規約とか、どこかにまとまってますか?
Pascalは昔からPascal記法だろ 言語名が記法の名前になってるくらいで新しくも何ともない まとめ探す前に基本を勉強し直してこい
147 :
145 :2010/01/18(月) 23:24:02
>>146 あぁ。camelっていうと先頭小文字を呼び分けるときにも使うんでしたっけ。
引数をPascal記法(InfixCaps、先頭大文字、単語の頭大文字)で記述しているにもかかわらず、
QA検査にかけると、「parameter 'XX' でCamel記法を使用」という警告が出てきて、
引数の頭文字が大文字なのは普通だろ、なんで警告出すんだ、と思ったので、
まさかどこかで推奨の命名法が先頭小文字に変わった? と思って質問した次第です。
「昔からPascal」なのは知ってるので、それで警告出されて不思議に思ったってことですね。
プログラミングでcamelっていったら普通はlower camel caseを指すと思うが
>>147 検査項目をクリックする時間の方がここで回答を待つ時間より早いと思いませんか?
>>147 試してみたら確かに警告出たが、そもそもこんな機能あることすら知らなかったぞ
[Camel記法を使用]って、使用しろ、なのか使用しているから警告、なのかこの日本語だと分からんな
>>149 警告の内容が妥当かどうかの質問なんじゃないのか?
警告が出たのに意味も分からずにOffにするってのはナンセンスだと思うが。
しかし警告自体がナンセンスだからOffにしとけ
>>147 Javaとかだとcamelっていうと大体lowerを指すけれど、
DelphiでCamelっていうとUpperだと思ってる俺って古いのかな。
http://edn.embarcadero.com/article/10280 古いドキュメントだが、これにもThis is known as InfixCaps, or Camel Caps.
って書いてあるんだよな。
最近読んだものだと、cakephpとかのマニュアルもupperを単にcamelって書いてあった気がする。
影響力だか呼び分けだかでlower > upperなのは同意
PByteArrayの長さを取得するにはどうすればいいでしょうか。 Lengthは文字列しか受け付けてくれないみたいで……
それは質問自体が破綻している。 ソースで示さないとわからない。
Length(PByteArray)みたいな形で一発取得出来る関数があるものとばかり思い込んでいました。恥ずかしい ソースで示さないとということは、中身に合わせて一桁ずつ中身があるかどうかを確認してカウントしないといけない、 ということでよろしいでしょうか? Delphi全然慣れていないので型周りの把握が全然です。
慣れてないならPByteArrayは尚更使用すべきじゃないと思う
>>152 のいうようにまずどういう状態かソースで示せ
Byteは0〜255の何を入れても構わないので「中身があるかどうかの確認」なんてやりようがない。 PByteArrayが何を指しているのかわからないので、サイズを一般的に求める方法はない。 だからみなさんがソースを出せと言ってる。 文字列や配列でLengthが使えるのは、内部的にサイズを記録してあるから。
くだすれだし、もう少し優しい言い方でも良いかなぁ。とおもいつつ。 Length (組み込み)関数が使えるのは「長い文字列型 (AnsiString, WideString, UnicodeString)」 と 「動的配列 (array of 〜)」です。 PByteArray の定義上の型は 「TByteArray へのポインタ」で TByteArray は Byte 型の「静的」配列となっています。 この TByteArray型は動的配列が Delphi 言語に導入される前に使われていた、長さ不定の Byte 配列を 参照するための便宜的な型です。範囲チェックをオフにすることで任意のインデックスの場所を参照できました。 もちろん配列の領域確保と正しい場所へのアクセスはプログラム自身が保証する必要があります 現在は動的配列が導入されたため、領域確保に関しては動的配列を使えば解決できます。 Length または High を使えば実行時に配列の大きさを知ることもできます。 PByteArray 型は、キャストすることによって任意のポインタを Byte の配列として扱えるため 動的配列が導入された後もよく使われます。 PByteArray 型単体では、単なるポインタなのでコンパイラも(回答者も)それ以上のことは何も判りません。 PByteArray 型の指す実体が、何によって確保されているかによって、その実体の大きさを取得する方法は異なります。 PByteArray 型として格納されているポインタが不定なのであれば、そのポインタの指す「何か」の大きさを 知る方法は、まずありません。設計から見直しましょう。
あの、、、そんなこと長々と言われても分からないので。。。。 慣れてないって言ってるでしょう。。。
Delphi6 personalを使用しています IDEでファイルを複数開いていて、IDEを再起動したとき ファイルが1つしか開いてない状態になるんですが、 ファイルが複数開いたまま起動するにはどうしたらいいでしょうか?
D7なのでD6とはメニューの名前は違うかもしれないけど ツール→環境オプション→設定タブ 自動保存の設定 内の プロジェクトデスクトップ にチェック
160 :
158 :2010/01/19(火) 17:03:24
そうそう それぐらいの答えやすい質問をしろ ポインタ配列なんか難しくてわかんないから
知らないならレスしないでいいです >161
>>161 の頭を初期化しようとしたのですが、
「回復不能なエラーです」
という表示が出て初期化できません。
これはバグでしょうか?
初期化ではなくFreeAndNilをご利用ください。
>>162 間違ってるぞお前
正しくは「知らないならレスしないでください。ウザイだけです。」だ
わかりました。
>>165 知らないならレスしないでください。ウザイだけです。
167 :
151 :2010/01/21(木) 22:56:51
>>154-155 メモリ確保したり解放したりガチャガチャやっているので、PByteArrayを使っています。
Delphi内部で扱う分には出来るだけ安全な型で処理したいものですが、
DLLファイルでポインタを受けたり投げたりもしているので、その辺りはポインタを生で扱っています。
はっきり把握出来ている部分だと速度の為に直接メモリ弄ったりビット演算したりもするんですけれど……。
>>156 どうもありがとうございます。別で長さを管理して、ポインタ代入時やデータ更新時に併せて更新するように書き直しました。
少しDelphiにも慣れてきたのでテストコード一杯書きながら色々確認しています。
答えて貰えるだけでもありがたいですし、ソースを出せ、というのもわざわざ確認してくれようという思いからでしょうし、
ありがたい限りです。どうもありがとうございます。
しかしくだすれでも偽物って沸くんですね……。回答遅くなった私が悪いのか。
分かってるのに聞いたの? タチ悪いね
はいはい。素直に負けをみとめろや > 168 >くだすれでも偽物って沸く 2ch ですから。必要に応じてトリップ使いましょう
170 :
デフォルトの名無しさん :2010/01/22(金) 10:11:16
Delphi2010でCtrl+Dを押すとコードが整形されてしまうので これを抑止したいのですが可能でしょうか? あるいは、コードフォーマッタの設定で、 {$REGION 'ほにゃ'} {$ENDREGION} の前後に空行を入れる設定はあるでしょうか? どちらかできればよいのですが…
リファクタリングのショートカットの Ctrl-D を抑止することはできません。 {$REGION を含むコメントの前後に空白を入れる機能はありません Ctrl-D に関しては、カスタム拡張モジュールを作成できれば抑制できるかもしれません。 コードフォーマッターそのものを停止して良いのであれば bin\Embarcadero.Modeling.Formatter.dll を別の名前にリネームして再起動すれば Ctrl-D のキーアサインごと消えて無くなります。 レジストリでコントロールできない。のかな?だれか知ってるひといないかな?
172 :
170 :2010/01/22(金) 11:40:17
>>171 ありがとうございます。
フォーマッタ自体を使えなくしたかったので、
DLLのリネームで事足りました。
Ctrl+SとかCtrl+Cを押し間違えたとき勝手に
整形されるのでイライラしておりました。
>>169 厨ってすぐに勝ち負けとか言い出すよね
何かトラウマでもあるのかな?かわいそう
174 :
デフォルトの名無しさん :2010/01/22(金) 14:00:13
64bitのバイナリ出力できるようになるのは次のバージョンからですか?
176 :
デフォルトの名無しさん :2010/01/24(日) 22:58:15
ポップアップメニューを表示してそれを選ぶなりキャンセルするなりしたら即終了する フォームを一切出さないフォームアプリってどうやって作ればいいんですか?
メインウィンドウ非表示&スプラッシュウィンドウで
ポップアップ出すだけなら、非表示どころかそもそも作る必要すらない スプラッシュウィンドウも然り TPopupMenuとTMenuItemを動的生成するだけでいい
DMonkeyってやたらexeのサイズが大きくなるけど マイナーな機能取っ払ってサイズを劇的に小さくする技ってないの?
あの程度のサイズ増加を気にするのはお前だけ
いくら出せますか?
はいおつかれw 予想どうりw
??
188 :
デフォルトの名無しさん :2010/02/05(金) 21:39:13
質問です。 あるツールのフロントエンドを作っています。 そのツールがパスの通っているディレクトリのどこかに存在するか否か確認する方法を教えてください。 ツールの実行ファイル名はわかっています。
SearchPath
190 :
188 :2010/02/05(金) 21:46:13
はじめまして。 以前から興味があったのですが、今回思い切って初めてDelphi2010Proを購入してしまいました。 頑張って勉強していきたいと思います。 じつは、IDEの挙動について気になった事があり、お尋ねしたいと思います。 VCLその他の機能などをツールバーボタンに並べてみたのですが、マウスカーソルをボタンに持っていってもツールチップが表示されません。 ぼんやりとした記憶なのですが、インストール直後はちゃんと表示されていたような気がするのです。 まだまだボタンのアイコンと機能が頭の中で繋がらないため、ツールチップが表示されると大変助かるのですが(とくにVCL)…元々表示されないものでしたでしょうか。 ぐぐっても答えになりそうなページが見つからず、ご助言頂ければ幸いです。よろしくお願いいたします。 追伸 オプション内ツールパレット→「ボタンのキャプションを表示」にはチェックを入れてあります。
チェックしないで下さい
194 :
191 :2010/02/11(木) 11:31:15
>>192 さん、
チェックの有無では変化ありませんでした。ツールバーカスタマイズメニュー下のツールチップON/OFFでも効果ありませんでした。
>>193 さん、
アプリではなくIDEそのもののチップなので…でも紹介下さったページ勉強になりました。
再インストールとか色々調べてみましたら、やっと原因が判りました。
犯人は同時起動しているタブブラウザのタブ数でした。
60個近く開いているタブ数を減らしましたらチップが表示されるようになりました。
タブ数何個以下とは決まっていないみたいなので、よく分かりませんがリソースを食い合いしてたって事なんでしょうか。
IEコンポーネントベースだからなのかプログラム自体の問題なのかXPの問題なのか…勉強不足でわからないのですが、とりあえず自分の環境の所為と言う事がわかりました。
変な原因ですみません。ご回答頂きありがとうございました。
195 :
デフォルトの名無しさん :2010/02/13(土) 02:25:36
ツールバーのカスタマイズの実装方法について教えてください。 CustomizableプロパティをTRUEに設定して、 OnCustomizeCanDeleteとかOnCustomizeNewButtonとかのイベントを使うのだと思うのですが、 具体的にどのようなプログラムを書けばいいのでしょうか?
まず自分で分からないなりに書いてみたの?
TCollectionから派生させたTGraphItemのItemsに、TCollectionItemから派生させたTGraphItemsをリストするのはできました。 で、質問なのですが、 TGraphItemから派生させたTGraphBox,TGraphAxsis,TGraphLegend,TGraphDataなどの子クラスを同じTGraphItems.Itemに リストしたいのですが、どうすればいいのでしょうか? 同じクラスしかリストできない? ちなみにD6です。 よろしくお願いします。
あ、間違いです。 TCollectionから派生させたTGraphCollectionのItemsに、TCollectionItemから派生させたTGraphItemをリストするのはできました。 で、質問なのですが、 TGraphItemから派生させたTGraphBox,TGraphAxsis,TGraphLegend,TGraphDataなどの子クラスを同じTGraphColection.Itemsに リストしたいのですが、どうすればいいのでしょうか? です。 よろしくお願いします。
つD2010
D2010だと簡単にできるのですか? D2006だっけ(?)は持ってるけど使ってないんです。
つかTListを委譲したクラスを作ればいいじゃん。 TCollectionから派生させるいみがわからん。
オブジェクトインスペクタに出すならTCollectionの方が向いてるとかじゃないの? コンポ作らないからよくわかってないけど。
TListなりに放り込んで、各子クラス用のプロパティエディタを作ったほうが簡単だって事?
201みたいに答えわからない奴は書き込まなきゃいいのに。 って思う。 まぁ、俺もそうだけど…
>>198 リストしたいのですがって、派生クラスならできるでしょ
結局のところ何がしたいの?
>>205 要はグラフのコンポーネントなんですが、軸だとか凡例だとか項目名の子クラスをリストして、
リスト順に描画しようかと思ったわけです。
簡単そうではないので、仕方ないので各子クラス用のTCollectionを拵えて、
描画順は固定でいくようにします。
TListやTCollectionを継承する人はdelphi初心者というよりプログラム初心者な感じがするな
じゃぁ、今は何使うの?
>>206 描画順用のTCollection作って、個別のTCollectionと中身共有すればいいだけじゃないの?
簡単そうではないという判断基準はどこから出たの?
>>207 自分はバカだという新手の自己紹介ですか?
初心者かどうかはともかく10年以上も前のテクニックだとは思う
なぜだ
>>209 >描画順用のTCollection作って、個別のTCollectionと中身共有すればいいだけじゃないの?
なるほど、描画順はほかのリストで管理って言うのはいいですね。
>簡単そうではないという判断基準はどこから出たの?
そのCollectionにItemを追加する時に、どの子クラスを追加するかを指定する術をオブジェクトインスペクタが持っていないので
追加するときは規定クラスを追加して、その基底クラスのKindプロパティみたいな物を弄ると、そのプロパティに沿った子クラス
が作られる。みたいなものを考えていたのですが・・・
単一のCollectionにそんな機能を盛り込むよりも、一つの子クラスに一つのCollectionを与えたほうが簡単かなっと。
あとは描画順だけの問題なので、描画順のリストなりCollectionで対応しようと思います。
昔、「Visualこんぼ」っていうActivXコントロールがあったのですが、そのグラフ機能を模倣しようとしていたわけです。
だれか使ったことがある人いますか?
>>210 リストすることが10年前のテクニックなのか?
古いも何も、リストする事は普通だろ?配列とか使わないの?あなたは。
どこを指して古いと言っているのかわからないからおせーて。
元質問者そっちのけで申し訳ないけど、俺もその今時だか中級車向けだかのテクニックを教えてほしい。 煽りとかでなく、自分が古い知識のまま止まってる気がするので。
今はジェネリッククラスの時代だ
まさか、動的配列とか言わないですよね。
>>212 そういうことならオブジェクトインスペクタでボタン押した時に、
独自の編集フォームを表示するようにして、そこで追加クラス選べるようにすればいいんじゃない?
ぱっと思いつく範囲ではGLSceneがそういうことしてたと思う
描画順を別にしておいた方が実装は楽だろうけど
>その基底クラスのKindプロパティみたいな物を弄ると、
>そのプロパティに沿った子クラスが作られる。みたいなものを考えていたのですが・・・
子クラスが作られるという処理自体は簡単に作れるけど、
子クラスだけ持ってるプロパティがオブジェクトインスペクタに表示されるわけはないよね
さすがに発想からしてちょっと無理があると思う
基底クラスに派生で使われるプロパティが全部乗ってるとかならできると思うけど、
それだったらわざわざクラスを派生させずに単一のクラス内部で分岐すればいいだけになっちゃうし
>>217 どうもありがとうです。
>それだったらわざわざクラスを派生させずに単一のクラス内部で分岐すればいいだけになっちゃうし
そうなんですよね。
で、先ほど書いたように、各々の子クラス用のCollectionを用意しました。
あとは、描画順のコードを足してどうにかしようと思います。
コレクション系のクラスを継承してAddにobjectを指定する糞コード書く奴は間違いなくPG歴1ヶ月未満。
クリエイトプロセスについての質問です。 win2k pro, Delphi 6 personalを使用しており、 ボタンをクリックするとエディタが起動するようにしておりますが、以下のコードによって エディタが終了する前にshowmessageの'ok'が表示されてしまいます。 ググッてみたもののだいたい同じ内容のものしかヒットしませんでした。 エディタが終了した後に、残りの処理をする場合はどのようにすればよいのでしょうか? 教えてください。 パソコンが2コアだからとかは、関係ありますか? procedure TForm1.Button1Click(Sender: TObject); Var PI : TProcessInformation; SI : TStartupInfo; begin GetStartupInfo(SI); CreateProcess(Nil, 'D:\Wintools\Dana\Dana.EXE test', Nil, Nil, False, 0, Nil, Nil, SI, PI); while WaitForSingleObject(PI.hProcess, 0) = WAIT_TIMEOUT do Application.ProcessMessages; showmessage('ok'); end;
222 :
デフォルトの名無しさん :2010/02/18(木) 02:30:26
状況としては、エディタが終了した後にshowmessageを表示したいのです。 現在は、エディタが起動したすぐ後にshowmessageが実行されてしまいます。
CreateProcessの2行目を 'notepad.exe', にしたら待機できました。 なぜ、 'D:\Wintools\Dana\Dana.EXE test', ではだめなのか、もう少し調べてみます。
あー、わかりました。 danaが常駐モードで起動していたため、うまく動いていませんでした。 常駐モードを切って、通常に起動すれば、待機するようになりました。
うん
だな
227 :
221 :2010/02/18(木) 19:51:40
うーん、かなり初心者的なつまずきをしています。 テキストファイルの管理ソフトを作っているのですが、テキスト編集機能を自前で持つのではなく、 すでに優秀なエディタソフトがあるので、テキスト編集については、その外部ソフトで編集し、 編集した結果を管理ソフト側に持ってきたいと思っています。 Createprocessで起動していないソフトであれば、待機するということができるのが確認できたのですが、 常駐機能のあるDanaというエディタの場合は、待機できないことがわかりました。 (以降の処理が待機できない。) こういう場合、外部のソフトで編集した結果を自分のソフト側に持ってくるとしたら、どういう機能を 使ったらよいのでしょうか?
ファイル更新監視
もう少し、わかりやすく説明した方がいいですね。 テキストデータ管理ソフトは、データベース(sqlite3)上にデータを格納しようと考えております。 管理ソフト側では、Memoコンポーネントをビューワーにして、新規作成および編集については、 外部のエディターソフトに任せて、その編集結果をMemoコンポーネントに取り込みたいと思っています。 現在は、管理ソフト側でtestというファイルを作成し、外部ソフト側はそのtestファイルを読み込み、 編集結果をtestファイルに書き込んだ後、管理ソフト側でtestファイルを読み込むということを 想定しています。 外部ソフトと管理ソフトとで、データのやりとりをしたいのですが、通常どのようにデータのやりとりを するのでしょうか?
>>228 おー、ありがとうございます。
findfirstchangenotificationというのを調べておりました。
ファイルの更新をやはり監視して変更があった場合に、取り込みすればいいのですね。
ありがとうございます。
その手順で考えていきたいと思います。
JVCLにコンポーネント化されたものがあったはず。ところでCtrl-Sで頻繁に保存をするような 人もいるので一回きりじゃない動作を考えておくべきかも。たとえばプロセスの終了までは 監視を続けるとか。
>>231 どーもです。
そうですね。今いろいろとテストしていたんですけど、外部プロセスが終了していない間に
ファイルの削除(今回でいえば、test)とかをした場合など、困りますね。
外部プロセスの状態(起動中か終了しているのか)とか調べることも必要ですね。
教えていただいたjvclも調べてみます。ありがとうございます。
私のやりたいことは、CreateProcessとWaitForSingleObjectでそのまま動けば、
簡単なんですけど、常駐しているエディタもあることを考えるとそのまま使えないんですね。
ちょっと難しくなっちゃったな。とほほ。
そのエディタが編集中のファイルをロックしてるなら Timerで1秒ごとに排他オープンを試みて成功したら処理するというのも出来るかも タイムスタンプ監視で大体はうまくいくと思うけどね
>>233 そのエディタは、開いているだけの状態では、ファイルをロックしてませんでした。
ファイルの削除とか外部からできちゃいました。
ファイルの更新自体だけだと、エディタで処理が終わってファイルを書き込んだのか、
編集途中でファイルを書き込みをして、続けて処理しているのかが、はっきりわかりませんね。
困ったな。
プロセスの監視も実は、常駐モードだと常に起動状態なので、それだけだと状態の監視ができないです。
そうなると、エディタのWindowの状態を見て、testという文字列が表示されているかどうかを確認すれば、
良いのかな?
もう少し考えてみます。アドバイスありがとうございます。
エディタなんて星の数ほどあるのにプロセスの監視をするのは現実的じゃない キャプションにファイル名等が表示されないエディタだってある エディタ以外のプロセスが一時的にロックすることもある(アンチウイルスとか)
>>235 そうなんですよね。
vectorのサイトでeditorのレビューで一通りエディター画面見てみたんですけど、タイトルバーに
今編集してるファイル名が表示されてないのもある(9割以上は表示してる。)し、今使ってるDanaでさえも
複数ファイル編集していて、違うファイル開いているとタイトルバーがそのファイル名に
なってしまっているので、すべてのパターンに対応できないですね。
考えが浅はかだったかな?エディター部分を自分で作るよりは、すでにあるアプリで対応して、
ビューアー部分(将来的にはブラウザで表示しようとしてました。)とデータの格納部分だけ
作り込めばいいかなと思ってました。
ちょっと設計自体考え直す必要がありますね。
エディター部分の作り込みはあまりしたくないんだけどなぁ。自分の能力だと大した物できそうにないし。
なんで監視だけじゃだめなんだよ
>>237 何の監視ですか?
プロセスの監視は、常駐機能のあるエディタだと、ファイルの編集が終了した後でも、
起動したままですし、ファイルの更新状況の監視は、そのファイルが編集継続中であるのか、
すでに編集が終わっているのかの判断がつかないからです。
エディタで編集中であるのに、管理ソフト側を終了してしまうと、保存されないデータが出てくると
思われます。確実にファイルの編集が終わっている状況というのを管理ソフト側で把握できないと
確実なデータの受け渡しは難しいのではないかと思っています。
以上の点から、プロセスの監視もファイル更新の監視も、今の私の知識では無理じゃないかと思って
いるのですが、何か良い案をお持ちでしょうか?
文字列型と違い動的配列はコピーオンライトじゃないとだけは認識してたが、 SetLengthで長さ変えるとコピーされるんだ・・・ var A, B: array of Byte; begin SetLength(A, 10); B := A; SetLength(B, 5); // コピーされて、AとBは別物 end; ずっと、コピーされないと思ってたよ・・・
メモリ確保するためポインタ使う代わりに動的配列使ってたけど、 TClassA = class FArray: array of Byte; procedure TClassA.Method; begin SetLength(A, 10); end; そうすると、FArrayが他の変数によって参照されてるか否か意識しなきゃいけんのか・・ 素直にポインタ使ったほうが安全なのかな。
まぁ、型にうるさい言語だから FArray: array of Byte; とか単独で宣言すれば、まちがっても他の変数によって参照されることはコンパイルエラーが でるからありえないけど、例えば、Typesユニットで定義されているTByteDynArrayとか使って FArray: TByteDynArray; とすると危険か。まぁ、いっか。普通に使うか。
242 :
デフォルトの名無しさん :2010/02/19(金) 11:02:46
すいません質問です Delphi-MLの過去ログ検索のサイトが無くなっていたんですが 引き継ぎ先などの情報をお持ちの方おられるでしょうか?
過去ログブラウザおすすめ C#はさらにおすすめ
サービス止まってるね 面白そうだし引き継ぎ挑戦してみようかな
「私の投稿メールを削除していただけませんか」 メールが来るから覚悟しておいた方が良いぞ > 244
ならやめたw
247 :
242 :2010/02/19(金) 11:42:15
あの過去ログは宝の山でした・・・ あそこで使っていた過去ログって2008/05が最終なんでしょうか?
google の方に過去ログ追加しようかねぇ
TQueryに新規作成した参照項目を元に整列表示させることはできないですか? SQLのOrder節には入れられないし
252 :
デフォルトの名無しさん :2010/02/23(火) 13:53:52
Delphi6 ProとDelphi7 Pro、今使うならどっちがいいと思う?
7
7は6のマイナーチェンジな感じだからあえて6を選ぶ理由は少ないと思う。 6はXPのマニフェスト対応にも難有りだし。
難の前に未対応じゃん XP出る前なんだから
del7使いなんだけど、最新のDelにしたら マルチコアなCPUに対応したアプリって 簡単に作れるの?
257 :
デフォルトの名無しさん :2010/02/23(火) 22:46:01
>>255 難ってのはTheme Managerのことだろ
それにD2010はWin7出る前なのにWin7対応を謳ってますが
>>256 マルチスレッドじゃあかんの?
258 :
デフォルトの名無しさん :2010/02/23(火) 22:48:12
マルチスレッドなプログラム書けば特に意識しなくても複数のコア使うようになる。 簡単かは別。排他処理とかやらないと普通に死ぬ。
>>257 Del6の発売はXPの存在自体が発表される前なんですけど?
Win7はDel2010開発の段階でβ出てるじゃん
頭悪いね
>>258 明示的にAPIで指定しない限り複数のコアを使うとは限らない
嘘書くのはやめよう
本当でもないだけ。
OpenJaneのソース、HogeTextView#1839行より Move(#13#10[1], result[Position], 2); とあるのですが、この1つめの引数にある『#13#10[1]』とはどういう意味なのでしょうか? ついでに、同じ意味になる別の表記方法もあるのであれば、教えて頂けると助かります。
VBでいうところの vbCR, vbLF 、 まぁ改行コードのことやね
明示的にAPIで指定するとどのコアでスレッドを動かすかなどを細かくコントロールできる。 明示指定してない場合でも、複数のコアをプロセスに割り当てる。 いくつ割り当てるかは、OS の種類によって細かく違いがある。 ただし一般的なコンシューマ版(Vista とか Windows7) ではデフォルトですべてのコアが 利用可能となる。 そんだけだ
private function GetHoge(const Index: Integer; Idx: Integer): String; procedure SetHoge(const Index: Integer; Idx: Integer; const Value: String); public property hogeA[Idx: Integer]: String index 0 read GetHoge write SetHoge; property hogeB[Idx: Integer]: String index 1 read GetHoge write SetHoge; こんなPropertyが使いたいのですが read GetHoge で"互換性の無い型です"って怒られます。 hogeA,hogeB毎に read write の関数作らないと駄目なんですかね。 ちなみにfunction GetHogeとprocedreu SetHogeはCtrl+Shift+Cで自動生成したものです。
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); 自動生成だと、配列の添え字とインデックス値が逆になって、値の渡し方の問題でエラーになるみたいです。
配列プロパティにはデフォルト値与えられない?? property Items[Index: Integer = 0]: Integer read Get....
そんなことをするような設計が悪い
配列コピーの高速化って無理だよね インラインアセンブラでMMX命令で32bitコピーとかやってもちっとも速くならねぇ
fastcode projectにmoveがあったような
あほです このすれにまじめなこと書くはずないだろ
はいはい知らなかったなら素直に言おうね
Windowsのスレッド配分アルゴリズムは同一プロセス内のスレッドは物理的に同じプロセッサに優先的に割り当てるようになってる。 これはダイ間の通信がコア間の通信に比べて顕著に遅延が発生する等、別個に割り当てると問題が生じるからで、 割当先候補が減っている分、その時の処理状態によっては同一コアに複数スレッドが割り当てられるという事態は普通に発生する。 つまり「明示的にAPIで指定しない限り複数のコアを使うとは限らない」は真。 Delphiには並列ライブラリがないからこういった情報の浸透が遅れているんだろうね。
それ、完全にお前の誤解。 スレッド A が Core 1 に割り当てられたときに、 タスク切り替えやスレッド休止後の再起床時に 同じ Core を「優先」して使う。 および同じプロセスに所属するスレッドは、できるだけ「有利」なコアを使う。 というだけ。 この場合の「有利」は、キャッシュを共有しているコアとかが選ばれる。 スレッドが二つ、A と B があったときに、 A と B が「かならず」物理的にひとつのコアしか使わない。のだとしたら マルチスレッドの利点なんか残らないだろう? それくらい実験すればすぐわかるのに...
Win32APIスレ池
こんなクズども寄越さないでください
>>278 必ずなんて一言も書いてないんだけど
OSに任せると必ず分散するとは限らないってだけ
お前はまず日本語を勉強してこい
その辺はMSDNにも 「スレッドの割り当ては考えてやってるから、分散してなくてもSetProcessAffinityMask使うのはあんまりおすすめしないよ」 みたいに書いてある XPにはあまり賢くないアルゴリズムが載ってたからある程度自分でやった方が良かったけど
SetThreadAffinityMaskだった
ノ´⌒ヽ,, γ⌒´ ヽ, // ""⌒⌒\ ) i /::::::::: ノ \ ヽ ) !:::::::::::(・ )` ´( ・) i/ |:::::::::::::::(__人_) | \:::::::::::::`ー' / チッ うっせーな… /:::::::::::::::::::::::::::\
使うとしたらこっちだな。SetThreadIdealProcessor
みなさん。 実験すればわかることなので、煽りは無視して自分で検証してみましょう。 一般向けの CPU では、物理的に存在する CPU コアのすべてが プロセス内のスレッドに割り振られます。 個別にコントロールする API は別途ありますが、通常は OS に任せておいて 問題ありません。
>>286 何となく興味あったから実験してみたけど、
中でsleepするスレッド4つ作って動かしたら全部一緒になったよ
環境はXP SP3 Core2 Quad
なんで?
ノ´⌒ヽ,, γ⌒´ ヽ, // ""⌒⌒\ ) i /::::::::: ノ \ ヽ ) !:::::::::::(・ )` ´( ・) i/ |:::::::::::::::(__人_) | \:::::::::::::`ー' / チッ うっせーな… /:::::::::::::::::::::::::::\
>>287 sleepしてるスレッドがどのコアで動いてるか分かるの?
290 :
デフォルトの名無しさん :2010/02/25(木) 20:34:33
タロット占いをするソフトを作りたいと思います。(実際に当たるかどうかは別にして) TEditにタロットのカード名(魔術師とか、女教皇とか、愚者とか) を表示させようと思うのですが、 Edit1〜Edit6に表示させる際 それぞれが重複しない値にさせるに はどうすればいいでしょうか。 単純にrandom(22)を使うと 重複してしまう場合があります。
リアルでのやり方と同じ。 カード全部を配列に突っ込んでシャッフルして頭から6枚取得する。 配列 シャッフルで検索かければそのコードが見つかるからDelphiに書き直せばいい。
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 :2010/02/25(木) 21:12:22
>>291 アドバイスありがとうございます。
検索したらFisher-Yatesという方法も見つかりました。
これでやってみます。
>>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を使っているものの大丈夫そう??
>292 おもしろいね。時間があったら追試してみたいけど、気になったポイントを。 Edit1は計算結果が一旦Double型に代入されてそれがTruncに渡されている。 Edit2は予めコンパイラが計算した浮動小数点数の定数値をTruncに渡している。 Edit3は式の値がおそらくExtendedで一時的に保持されてそれがそのままTruncに渡されている。 CPUウィンドウでコンパイル結果がどのようなアセンブル命令に展開されているのかを見ると違いが わかるのかも。
ノ´⌒ヽ,, γ⌒´ ヽ, // ""⌒⌒\ ) i /::::::::: ノ \ ヽ ) !:::::::::::(・ )` ´( ・) i/ |:::::::::::::::(__人_) | \:::::::::::::`ー' / チッ うっせーな… /:::::::::::::::::::::::::::\
>>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;
駄目な例
OSに任せておけばいいだけやん。あほか。
>>287 GetCurrentProcessorNumberやCPUIDで調べる方法は知ってるけど、
Sleepしてる最中に調べるのは無理だろって話さ。
ThrreadIDと違って、コアは実行途中でも入れ替わるんだし、
SleepしてたらCPUはつかんでないだろ。
sleep したスレッドが1000個あったとして、それに意味があるの? それこそ「特殊な」プログラムだと思うのだが。
はいはい本人乙
馬鹿というのは鳩山のAAを張ってる奴だな いい迷惑だ
即レスとかどんだけ張り付いてるんだよw そんなに悔しかったのか
>>302 そんなことしなくても外部からいくらでも観測する方法あるだろ…
必死になるあまり視野が狭くなってないか?落ち着けよ
本日も質問者不在のままおっさん鬱病患者達が頑張っていますね
必死必死うるせえんだよ 必死って言う方が必死なんだよばーーーーーーーーーーーーかwwwwwwwwwwwwwwwww もうこんな気持ち悪いところ来ないから一人で勝手に喋ってろwwwwwwwwwwきめえwwwwww
これで静かになるな ありがたやありがたや
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が入って欲しい もちろんこんなコードは書けないんですけど、 上記のようなクラス定数(もしくはクラス変数)の継承みたいなことって何かで代用できますかね
代替にはならないと思うがReadプロパティで対応するのが一般的だと思う。
引数なしの関数は変数にも見えるから function Value : Integer; virtual; を使う手もある
315 :
312 :2010/02/26(金) 19:01:32
>>313-314 ありがとうございます
そうなんですよね、実装部に書くことを許容すればできるんですけど、
宣言部だけで継承先の振る舞いを変えられたらと思ったんですが、やはり仕様上難しそうですね…
Delphi、VisualStudioに付いてくるやつ以外で TAnimateで使えるようなAVIファイルを集めた 市販の素材集はないでしょうか?
TStringListの内容をINIファイルの一行データとして安全に書き込んだり読み込んだりするための変換処理ってどう書けばいいですか?
具体的にどういう変換をしたいのかが見えない
ini[0] = TStringList.Parse(sl[0]); sl[0] = TIniFile.Parse(ini[0]);
>>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
正直な話、オレだったらTStringlistの内容をinifileに保存なんてしない。 何を目指してるのかは分からないけど。
>>320 個々にAnsiQuotedStr(読み込み時は逆にAnsiDequotedStr)を適用すれば外部ライブラリはいらない
マルチコアの話に便乗なんですが、要は1つのスレッドを OSが適当に割り振るからあんまり考えなくて良いよって解釈しました。 言い方変えると1スレッドを複数のコアで処理はしないってこと? マルチコア対応とか書いてあるアプリって、重い処理でも1スレッドに書いたほうが プログラムが簡単なのにマルチスレッドに出来るだけ分けてるって事?
>>323 TStringListの個々の要素であるStringは#0-#20(当然#13#10も)なんかも格納できるバイナリコンテナだからもうひとひねり必要だな。
標準でやるには例えばURL Encode/Decodeとかできっちり処理しないと破綻する。
だがほとんどの処理で #0 以降の文字は欠落するから もう忘れてもいいんじゃないかな?
327 :
292 :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 :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しただけでは発生頻度が減るだけで完全な対策にはならなそうです。 小さい数を足してやって切り捨てるのが良いようです。
問題の所在を理解していないような希ガス…
やべー、俺も
>>292 の原因知りてぇ。
>>296 さんのExtendedになぜなるのかが知りてぇ。
こういう場合、Edit1の方法で計算しないと間違った答えが出ることもあるってことだよね。
つーことで、実数型使うときはdoubleを使わないでextendedを使えってこと?
浮動小数って、意味がわかりました。そういうものなんですね。 使ったことなかったものですから、、、今回よくわかりました。 332も違うつーことで。
それは不動少数
336 :
デフォルトの名無しさん :2010/02/28(日) 20:36:04
すみません教えて下さい。 Form1 に直接 Image1 を置いていたのですが後から Panel1 を追加して Image1 の親コントロールを Panel1 に変更したいのですが、IDE でやる方法はありませんか?
floatとdoubleで結果が異なる例は見たことあったけど doubleとextendedで差が出る実例は初めて見た。 64bit厨はどうするのだろうか。
それ 64bit 関係ないし x64 なら 128bit 浮動小数点数が必ず使えるし
337は64ビットネイティブバイナリでFPU命令が使えないと思っているんじゃないだろうか
342 :
337 :2010/02/28(日) 23:33:39
>>338 , 339
ごめん、知らなかった。
>128bit浮動小数点と、64bitネイティブでFPU
エンバカスレに帰るよ。
>>338 64bit2個をまとめて扱えるだけであって128bitが1個じゃないから
実装がどうなってるかは関係ないだろ 扱えることに変わりはないし
実装は関係ないだろキリッ!って言われてもなぁ
346 :
デフォルトの名無しさん :2010/03/01(月) 19:12:48
はいはい
347 :
デフォルトの名無しさん :2010/03/01(月) 19:25:15
delphi2011っていつでるの?
さあ
350 :
デフォルトの名無しさん :2010/03/01(月) 20:56:48
>>348 もうすぐじゃないの? ただし32ビット
特定の位置からバイナリを読み取って、違うファイルとして保存するというプログラムを書いています。 fileopen関数で開いて、FileRead(F, Buff^, Size);でバッファに格納はできたのですが、 この格納したものはテキストでならstringですので取り出せますが、バイナリとして保存する場合はどのように取り出せばよいのでしょうか? お力をお貸しください。
そのままでいいだろ
>>344 実装がどうとか以前に扱えないし
SSE2が四倍精度浮動小数点数扱えると思ってんの?
>>352 バッファはテキストとして保存可能ですが、そのバイナリがテキストでない画像とかを
どうやってバイナリとして保存するかがわからなくて・・・。
>>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;
これでできなかったんです・・・。
>351 ファイルストリームで元ファイルを開く→所定の位置にseekする→メモリストリームにコピーする →メモリストリームのPositionを0に戻す→メモリストリームをファイルに書き込む
>>357 レスありがと。
メモリストリームにコピーとは?どのような関数ですか?
CB_SETCURSELってチェンジイベントみたいなのって起きないのかな。 他アプリのコンボボックスを操作するのに、CB_SETCURSELで選択項目を 変えるんだけど、一回コンボボックスにクリックメッセージを送らないと 認識しないみたいなんだ。 これって、相手のアプリの作りの問題? 別のAPIがあるの?
>>354 意味分からん
何もしてないのにバッファが書き換わるとでも言いたいのか
>>360 簡単にいうとどうやってこの格納されたバッファをファイルとして保存するかなんです。
ファイルストリームでもメモリストリームでも好きなの使えば素敵やん
>>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;
>>363 書き込むだけの用途ならTFileStream使え
Create-Freeはtry-finallyで囲め
ハードコーディングすんな
>>358 とりあえず、マニュアル(ヘルプ)読んでから、質問しろ
function CopyFrom(Source: TStream; Count: Int64): Int64;
ってのが見つかるはずだから
367 :
デフォルトの名無しさん :2010/03/03(水) 13:06:15
Windows7が動くDelphiはどのバージョンまで対応していますか Delphi2以降は一応動くと思うのですが
Delphi上でOSを動かそうというのはなかなか難しいのではないかと。
>>351 単純な手があるんじゃないの ファイルAとBを開き、Aのファイルポインタを
移動してから、あとは全部AをBへコピー メモリに覚える必要とかまったくないと思う
>>368 Delphiで仮想マシン作れってことか
対応の意味によるんじゃね。 厳密な意味で対応してるのは最新の奴だけだろうし Vista以前のDelphiだとVistaでウィンドウのプレビューがうまくとれないなんて細かい不具合があったし。
372 :
デフォルトの名無しさん :2010/03/04(木) 10:10:42
超初心者です。 Delphi2005 プログラミングテクニックVOL4 に載っていた簡単なイメージビューワを作ってみましたが 作成中にフォームのOpenPictureDialogをクリックすると、 すべてのファイル(*jpg,*jpeg,*bmp・・・)と正しく表示されるのに 実行すると、jpegがすべてのファイルの中に出てきません。 bmp、ico、emf、ぐらいしか表示されません フィールターも見たのですが・・・・ コードはメニュー開く(&O)...の中に if OpenPictureDialog. Execute then begin Image.Picture.Bitmap.LoadFromFile(OpenPictureDialog.FileName); MainForm.Caption := OpenPictureDialog.FileName; end; ご教授頂ければ幸いです。
uses jpeg;
374 :
351 :2010/03/04(木) 18:50:43
とりあえずfilestreamで読み込み、指定の位置へ移動、バッファいれるためのメモリ確保までは問題なく動作しているようです。 ですが、readが間違えているのかうまくいかず、指定の位置からではなく、そのままファイルをコピーするものになったしまいました。 やりたいことは指定した位置から最後まで読み込んで、その読み込んだ部分だけをファイルとして書き出すことです。以下がソースになります。 ms := tmemorystream.Create; fs:= TFileStream.Create('C:\AAA.dat',fmOpenRead); try fs.Seek(targetposition, 0); Buff := AllocMem(SrcSize + 1); fs.Read(buff^,srcsize); ms.LoadFromStream(fs); ms.SaveToFile('C:\ABC.dat'); finally FreeMem(Buff); ms.Free; fs.Free; end; どうかご回答の程、よろしくおねがいします。Copyfromよりこちらの方が楽そうに思いしようしました。
buffは何のために確保してるの?
>>374 君がやっていることを例えると、
本を借りてきて、
メモ用紙に必要な事項だけ書き写して、
本をコピー機で全部複製して、
メモ用紙を捨てて、
本を返してる
>>375 部分的に読み取ったものを格納して・・・と思ったんですが、違うんですか?
>>376 その例えの必要な事項だけ書き写したのを欲しいんですが、余計なコード書きすぎとかですか?
この指定した位置から読み取ったバッファ=fsという理解ではないのでしょうか?
buffに格納したものを利用せずに捨ててる
>>378 この読み取ったバッファをファイル保存するために、
ms.LoadFromStream(fs);
ms.SaveToFile('C:\ABC.dat');
としたんですが、どうもうまくいかないのです。
何か良い手はございますか?
msにbuffを書き込めよw
>>380 レスありがとうございます。
言われた通りにしたらうまくいきました。
これまでお付き合いくださった方、ありがとうございました。
そしてお騒がせ致しました。
いいねぇくだすれらしくてw
もどかしいが嫌いじゃないぜ、この流れw
無意味なエラートラップならやらないほうがいい
無意味なエラートラップはない
try abort; except abort; end;
それは無意味なエラートラップじゃなくて無意味なコード
388 :
デフォルトの名無しさん :2010/03/10(水) 18:08:50
よく改造サイトでエミュでチートを・・・とか書いてありますが、これを(チートを)そのエミュ上で行うのではなく、 自作のプログラムで行おうとする場合どのような流れになるのでしょうか? 簡単にいうと、エミュでチートを行わずに、自作のプログラムでいま起動されてるエミュ上のゲームのデータを書き換える というものを作りたいのです。
ガキ臭いやつだなぁw
390 :
デフォルトの名無しさん :2010/03/10(水) 22:33:19
>389 素直に「答えられません」と降伏宣言したらだどうだ?。嫌ならゴミレスするな
答えられません ですから諦めて下さい
改造板行けよ
Delphi6まで使っていましたが、最近またDelphiで開発する はめになりました。 で、Delphi2010の購入を考えております。 そこでお聞きしたいのですが、Delphi2010は、Delphi6 と比較して、何が良くなっているのでしょうか? 特にエディタの使い易さなどはどうでしょうか。 メーカが出している機能比較のPDFなどは見ておりますが、 実際の開発者さんの感想をお聞きしたいです。 作成するアプリは、SQLServerおよびAccessMDBを使う業務 アプリです。 よろしくお願い申し上げます。
使い勝手は人によるので。 >特にエディタの使い易さ となれば、D6 でどこが不満だったのかをまとめれば答えやすいと思うよ
>>393 エディタはコードの折りたたみ等必要ないなら外した方がいい。
若干バギーな部分もあるが実用できるとは思う。
ただしvimなど外部エディタに慣れてるならそっちで環境整えた方がいいっていうレベル。
でもリファクタリングは便利。
生産性は上がってる。ジェネリクスがあるのでコードの記述量が劇的に減る。
C++でテンプレートを使えていたなら何も考えずに使えるはず。
テンプレートもよく分からないのなら、Delphi2009Handbookを読めば解説がある。
ジェネリクスはバグだらけ。とナカムラセンセが言っていますよ?
中村先生が指摘してたバグはすでに修正されてますが? 何年前の話を持ち出してるんだよ情弱
「Delphi ジェネリクス バグ」で検索すると中村の指摘が真っ先に引っかかるからな。 一番上のネタを持ってくる辺り、検索して知ったにわか知識ということがよくわかる。
なんかごめん・・・・
ジェネリクスなどのコンパイラの新機能にエディタは追いついてないので 古いバージョンからアップグレードすると既存の機能でいらいらする事結構ある。 前できた宣言の検索(Ctrl+Shift+上下キー)とか動かない部分とかあるし。 仕方なく通常のCtrl+F2の文字列の検索でソース追うはめになったり。
Delphi 2010のlicense_ja.rtfに書かれている 「指名ユーザーが本製品の使用を許可された唯一の個人である場合、 適正な数のコンピュータに本製品をインストールすることができます。」 というのは、 「俺だけが使うのなら、自宅のデスクトップPCと、カバンに入れている俺資産のノートPCと、 XPmode上の仮想PCの3つにインストールできるじゃん」 という認識でOKでしょうか? 自宅でも出先でも開発したいのよ。
その認識で良いと思いますが ライセンス関連の質問は Embarcadero サポートに問い合わせることを勧めます。
へー グーグルってあてにならないんだな、ヤフーサーチ使おうっと
>>402 その認識で良いです。
確か「ナンセンス」でない「ライセンス」という考え方で、有名な
ライセンス形態だったはずです。
古き良き時代の「ナンセンスではないライセンス」は、かなり以前に撤廃されています。 当時はデジタルコピーを配布することが、今よりは大変だったため、ライセンス所有者でなくても (複数の人が同時に使うので無い限り)利用可能でした。 その後ネットワーク速度の向上により、CD 一枚くらいなら気兼ねなく複製をコピーできるようになって、 ライセンス所有者でないと利用できないように変わりました。 実際には、インストール後にアクティベーションを行い、ユーザー名とシリアル番号とコンピューターを 結びつける作業を行います。 「適正な数のコンピュータ」というのは、アクティベーションの回数に上限があることを意味しています。 普通に使う分には問題にならないはずですが、もし上限に達したらサポートにメール/電話すれば 解除してもらえます。実際の値は10回か20回くらいらしいです。
407 :
405 :2010/03/13(土) 10:38:29
>>406 そうだったのですか、それは大変失礼しました。間違った
書き込みをしてすみませんでした。
>406 今は上限はwebからincrementできる。名義変更は電話する必要があるけど。
incrementは1回ずつしか増やしてくれないのが面倒といえば面倒な現在
410 :
402 :2010/03/13(土) 16:24:40
>>403 ,405,406,408,409
ありがとうございます。
週明けにでもEmbacarderoさんのサポート窓口に聞いてみます。
結果が分かったら報告しますね。
411 :
393 :2010/03/13(土) 20:00:14
>>394 ,395,396
回答ありがとうございます。
>D6 でどこが不満だったのかをまとめれば答えやすいと思うよ
エディタに関して言えば、
・フリーカーソルモードが不便(ふつうのエディタみたいなほうがいい)
・次を検索はF3でOKだが、前を検索はShift+F3でできて欲しい。
IDEに関して言えば、
登録したコンポーネントを探しにくい
VCLに関しては、
TListViewがショボい(.NETの方が格段に高機能)
こんなところです。
Delphi2010ではどうなんでしょうか?
フリーカーソルはD6の時点で無効化方法あっただろ 少しは自分で調べろよ… Shift+F3は可能、コンポーネントは名前で探せる TListViewはそもそもListViewのラッパーで コモンコントロールのバージョン(OSのバージョン)によって機能が違う D6のメインターゲットOSは2000だし機能が少なくて当然
それってExplorerのグループで表示みたいなのもできる?
SHBrowseForFolderでフォルダー選択ダイアログを出すようにしているのですが、 ダイアログを表示させる時に過去に選択されたフォルダーがある場合、そのフォルダーを 選択した状態で表示させるにはどうすればいいでしょうか? ググってサンプルコードをコピペして試しているのですが、BrowseInfo構造体で lpfn := @FolderCallback; lParam := LongInt(PChar(FolderPath)); //初期フォルダ指定 って、設定してもlParamの設定がおかしいらしくコンパイルエラーになってしまいます。 Dlphi7とXPの環境です。 よろしくお願いします。
そのコンパイルエラーの内容を書こうぜ
すみません。 解決しました。 lpfn := @FolderCallback; の@を消して lpfn := FolderCallback; lParam := LongInt(FolderPath); これで動きました。 でも、ここの設定はコールバック関数を指定するから @っているはずですよね? ググったサンプルコードも皆@付いてました。
>>412 >フリーカーソルはD6の時点で無効化方法あっただろ
>少しは自分で調べろよ…
D6にフリーカーソルモードの無効化方法があるのですか?
調べても見つかりません。
済みませんが教えていただけないでしょうか。
Delphi6 フリーカーソル 無効 に一致する日本語のページ 約 5,280 件中 1 - 100 件目 (0.57 秒)
>>420 逆に何を調べたら情報が見つからないのか教えて欲しい
あなたには聞いてません。黙っててください。
424 :
デフォルトの名無しさん :2010/03/14(日) 17:33:39
またヴビ厨の自作自演か。さっさとハローワーク行ってこい。
フリーカーソル無効化のソースをいじくってDelphi2009、2010でも うごくようにして使ってるぞ 基本的にはコンパイルエラーを取り除くだけで動く メモリリークしているかもしれないがw
アプリケーションの実行フォルダにできるdel01.mbっていうファイルは何ですかね。
最近のって例えばTStringsにShuffleメソッドを後付けするような機能ってつきました? 古いのでも無理やりできない事もなかったけどオフィシャルな機能として。
いい加減秋田 本当に知りたいなら体験版で試せば?
海の水はどうしてですか?
はい
TListViewのSubItemがダブルクリックされた時に いい感じに編集エリアを出す方法を教えれ。
>428 そんなファイルができたのみたことないわ。 >429 クラスヘルパ
435 :
292 :2010/03/15(月) 23:22:02
>>428 DBアプリでBDEが作るテンポラリーファイルだったと思う。
アプリ終了しても残ってたら削除しちゃって大丈夫のはず。
>>433 ダブルクリックされたら動的に生成すれば素敵やん
編集エリアって何??
わるい
がっかり
わかる
442 :
433 :2010/03/16(火) 22:33:14
くそう せっかく作った(?)のだがウケが悪かったか。
がんばれ!ベアーズ
ふるぅ
それゆけ!レッドビッキーズ
446 :
デフォルトの名無しさん :2010/03/17(水) 20:31:10
コンボボックスのOnMouseLeaveがなんだか変で困っています。 コンボボックス上でマウスを動かすたびにすさまじい 回数OnMouseLeaveイベントが発生します。 エディット等ではなりません。 フォームにコンボボックスとメモだけ貼り付けて、 コンボボックス上でマウスを動かすと、 メモの行数がどんどこ増えていきます。 procedure TForm1.ComboBox1MouseLeave(Sender: TObject); begin Memo1.Lines.Add(IntToStr(Memo1.Lines.Count)); end; 環境はDelphi2010です。 なにかうまい対処法はないでしょうか…?
ほんとだ、MouseMove並みに呼ばれるなw 飛んでくるウィンドウメッセージ調べたら実際に大量に飛んできてるからVCLのバグとかではなさそうだが・・・・
とりあえずの対処としてはイベントの中でFindVCLWindow(Mouse.CursorPos)<>Senderをチェックするのが手っ取り早そう。
>>446 とりあえず原因はわかったけど書くと長くなるので対処法だけ
StyleをcsDropDownListにする、これだけ
csDropDownで使う必要がある場合はちょっと面倒なことになるけど
>>448 当たり前だけど全部TComboBox宛の正規のメッセージだから意味がない
違うコントロール宛のメッセージが誤配されてるわけじゃないからね
450 :
446 :2010/03/18(木) 16:08:58
ありがとうございます。
やりたかったのは、「自作コンボボックスでMouseLeave時にヒントを隠す」
というものでしたので、無駄にメッセージは飛んできますが、対症療法的に
↓みたいな感じにしてみました。
procedure TMyComboBox.WndProc(var AMsg: TMessage);
begin
if (AMsg.Msg = CM_MOUSELEAVE) then
begin
// 自分自身の上にカーソルがあるときは捨てる
if (FindVCLWindow(Mouse.CursorPos) = Self) then
begin
Exit;
end;
// ヒント隠す処理
:
end;
inherited;
end;
ちなみに気が付いたのは、コンボボックスのCustomHintにTBalloonHintを
割り当てたときに、激しくヒントがちらついたためです。
仮にバグではないにしても、実用上問題があるような…。
>>449 ユーザーの入力で絞込み、みたいなことをする必要があるので、
csDropDownにしなくてはならないのです…ジレンマです。
エディット部分が何か悪さしているのでしょうか?
Delphi で書かれたアプリがあるんですが PC 環境を入れ替えたら一部(かつメイン)のファイル出力が出来なくなってしまいました それ自体は '06-07 ぐらいで開発が止まっています 自分の環境は XP で、最近クリーンインストールしたばかりです ファイアウォールでの出力禁止はしていません 症状は 「ファイル」メニューから「別名でファイル保存」を選択 ファイル出力のダイアログは出ず、メニューの「別名で…」が選択不能の状態になる エラーメッセージやイベントログへの吐き出しはありません 替わりになるようなソフトが他にないため、バージョンを遡って試したり 関連情報をググったりしていますが正直お手上げ状態です… スレ違いかと思いますが、少しでもヒントいただければ助かります
>>450 本筋とは外れるけど、フィルタリングみたいなことするならComboBox不向きじゃね?
TEditとTListBoxの方がいい気が
>>451 MLで聞いた方が早い気がする。
作者が参加している確率高いだろうし。
>451 互換モードでWin2kなり何なり指定してみては?あとは作者に聞くしかなかろう。 Delphiだからどうこういう問題じゃないと思うが。
455 :
451 :2010/03/19(金) 00:07:39
>>453-454 レスありがとうございます
そうですね、作者とやりとりできれば最善なんでしょうが
東欧の人だし自分も英語に自信がなく…
ソースは公開されているので、もうちょっとやれるとこまでやってみます
ソース公開されてるならリンク書いておけば見てもいいと思う奴もいるだろうに
オープンソースなら自分で直せよ
>>451 その手の問題って大抵互換モードで解決できるがダメか?
そもそもオープンソースでファイル出力に問題あるとわかっているなら
そこ書き換えるだけじゃないか?
あーそうですね
460 :
451 :2010/03/19(金) 23:20:30
件のソフトは初代氏と後継氏の二人?がメインで 最新版ソースには初代氏オリジナル部分は含まれず「必要だからここでDLしてくれ」的指示が入っていました しかし指定サイトは消滅済み 結局、初代氏サイトの旧版ソース(丸ごと)に行き着きました そこから必要部分をきれいに引き抜けるかどうかは、いまのところ不明 ちなみに初代氏exeのファイル出力はOKでした…。使い勝手も初代と最新で一長一短 とまあ、オープンでも時間が経っていると色々あるんだなぁと思った次第です 以上報告でした。以後名無しに戻ります
なんか突っこむ気も起きない 帰ってくれるようだから何も言わないけれども
コンポーネントのあるイベントに引数を追加したい時って コンポーネントを継承した新たなコンポーネントを作らないといけない? それとも、イベントをオーバーライドして普通のプロシージャーみたいな 使い方って出来る?
そのイベントってそのクラス内から呼ばれるんだろ? だったら持たせたい引数をクラスのメンバーにしてやればいいんじゃないの?
>使い方って出来る? 無理です。 OnClick(Sender)に引数追加しようとしたら 呼び出し側もOnClick(Sender, data)とやらないといけないから どうしてもコンポ側にも手を入れないといけないので。
Sender に無理やりポインタ渡すとかの話かと思った。
>>462 呼び出し元コンポがそのイベントを呼ぶためにClickやDoClickなどのメソッドを定義していて、
なおかつそれがvirtual、dynamic、messageで宣言されているならオーバーライドできると言えなくもない
実際にClickやDblClickなどのメソッドは仮想メソッドだから、
事実上OnClickやOnDblClickなどの呼び出しはオーバーライドできるし、
それがなくてもウィンドウメッセージがイベントの起点となっているような場合は
そのメッセージハンドラをオーバーライドしてやれば同じことができる
>>462 コンポーネントのイベントハンドラから、引数を追加したイベントを発行するってのは?
れい
type TNotifyEventEx = procedure (Sender, Option : TObject) of object;
...
property OnNotifyEx : TNotifyEventEx;
...
procedure THoge.HogeNotifyEvent(Sender : TObject);
var
uge : TUge;
begin
if Assigned(Self.OnNotifyEx) then begin
uge := TUge.Create;
Self.OnNotifyEx(Sender, uge);
uge.Free;
end;
end;
468 :
462 :2010/03/21(日) 12:36:02
皆さん、レス有り難うございます。 自分にはレベルの高い話の気がしないでもないですが、 出来る前提で色々試そうとも思います。
具体的に何したいんよ それによっては引数なんか追加しなくてもいい気がする
普通に Sender だけで何が不足なのかな? イベントハンドラ内で Sender を通してそのオブジェクトが特定できれば、public な プロパティーやらフィールドにアクセスするのは簡単だろうに・・
あなたには聞いてませんからw
472 :
462 :2010/03/21(日) 23:10:05
ListViewのSubItemの編集をしたくてググったり MLの過去ログ見たりしたんだけど、編集するセルの ところにEditを出す方法しか見あたらないんで、 Draw系のイベントにstringの引数を追加したら 簡単に出来ないかなと思って。
あなたに回答してませんから
あなたに答えてませんから
DelphiのGUIアプリから、ApacheHTTPサーバにアクセスし、様々な情報を やりとりしたいです。 使えそうなコンポーネントありますでしょうか? (Delphi2010 Pro版を使っています)
>>476 説明不足ですみません。
私が探しているのは、Indy(など)の上位層になり、例えばフォームにあるTStringGridのデータとか
TEdit.TextなどをまとめてXMLエンコードしIndyに渡すようなコンポを探しています。
フォームとIndyの中間に位置するようなコンポです。
冗談だよね
いったい何がしたいんだw
481 :
433 :2010/03/22(月) 16:24:22
>>478 渡すだけとかそんなの自分でコーディングすればええやん
10行もあれば書けるでしょ…
483 :
402 :2010/03/22(月) 21:43:34
すみません。サポート窓口に聞くまでもなく自己解決しました。
結局、店頭で購入した場合は「指名ユーザ使用権」であり、
このライセンスなら、自分の所有する複数のPCにインストールOKでした。
定義されていたのは、下記の3カ所。
License_ja.rtfの第2条
「(略)使用証書で他の種類の権利の取得が特定されていない限り、
お客様の取得した権利は指名ユーザー使用権です。(略)」
License_ja.rtfの第2条第3項
「(略)指名ユーザーが本製品の使用を許可された唯一の個人である場合、
適正な数のコンピュータに本製品をインストールすることができます。(略)」
Database Software and Developer Tools Licensing
ttp://www.embarcadero.com/jp/services/embarcadero-licensing-options 「指名ユーザー ライセンスは、特定の個人に使用権が与えられるライセンスです。
ソフトウェアは複数のコンピューターにインストールして使用することができますが、
同時に 使用できるのは1つのみです。指名ユーザーライセンスを、
複数のユーザーで共有したり譲渡することはできません。
現在、多くのCodeGear開発ツール が、このライセンス形態を採用しています。」
これで安心してノートPCにもXPmodeにもインストールできます。
みなさんコメントありがとうございました。
では名無しに戻ります。
乙
485 :
デフォルトの名無しさん :2010/03/25(木) 14:15:19
TPrinterを使用して印刷しているのですがこの場合印刷データを ファイルに保存することは出来ないのでしょうか? TPrinterはBeginDocの時にヌルクリアしたDocInfoを使って StartDocを呼び出しているのでlpszOutputを指定する方法が無く困っています。 なにかいい案がありましたらお願いします。
dekimasu
TPrinterから派生したクラスを作って、そのインスタンスをSetPrinterで設定するとか。
488 :
485 :2010/03/26(金) 08:42:22
>>487 それも考えたのですがTPrinterを使う他のコンポーネントが存在しており
TPrinterは1プログラム1インスタンスで動作するので躊躇していました
(印刷処理以外でもプリンタの状態確認にTPrinter()を使ってます)
派生したクラスを同時に使っても問題無いのでしょうか?
質問です。Delphi2010にて、"Generics.Collections"をusesして ジェネリクスなオブジェクトのリストのコレクションのメンバにアクセスしたとき、 コンパイルは正しくとおって実行してもエラーなく動作するんですが、左上のエラーが消えません。 例えば TObjectList<TForm> だと、 FL:=TObjectList<TForm>.Create; FL.Add(Form1); FL[0].Caption:='abc'; というようにメンバにアクセスすると、コンパイルは正しく通るのですが左上のエラーの欄で !'TObejectList<TForm>'hは'Caption'という名前のメンバを含んでいません。 というようなエラーが消えません。 どういう理由があってこのような状況になってるか、どなたかご教示いただけないでしょうか?
コンパイラは最新だがIDEは最新じゃない、と思っておいた方がいい
行き詰っているので相談させてください 環境はDeklphi2007です。 delphiでDBの操作ソフトの修正に関わっているのですが、コンパイルすると SrtingtoTdatabaseは互換性がありません とエラーがでてとまります。 変数(A,B,C,D) という行があり、Aは同じソースファイルの中でString宣言、BはTdatabese 宣言、C,Dは不明でA,Bの宣言を書き換えても駄目でした。 元々はDelphi6で前任者が作成したものを小生がXpで使用する為に2007で コンパイルしています。6の環境は残っておらず、前任者とも連絡が取れません。 C、Dの宣言を探す以外になにかよい解決は無いでしょうか?
>488 普通に印刷するときは通常の(デフォルトの)TPrinterのインスタンスを、ファイルに出力するときは それ用のTPrinterからの派生クラスのインスタンスを、それぞれとっかえひっかえでSetPrinterすれば いいんじゃないの? >489 普通にコンパイルするときとエラーインサイトやコードナビゲーションで使用するコンパイラは 違うものなのでそういう現象がおきる。 >491 プログラミングとかDelphiとかそういうものを理解してる?わからないならわからないって上司に 相談したほうがいいと思うが。できなければソフト屋に外注に出すとか。さもなきゃここに 晒すしかない。すくなくとも > 変数(A,B,C,D) > という行があり、 とか > C、Dの宣言を探す以外になにかよい解決は無いでしょうか? とか意味不明にもほどがある。
うるせーばか
>>492 上司に相談して解決するなら最初からここにくる訳が無い。
1の書き込みを鵜呑みにしてここに書いた俺が馬鹿だったって事だな。
金輪際来ませんのでご安心ください。。
よかった。もう来ないんだって。 誰だって気違いの相手はしたくないもんね。
マジレスすると、おそらく関数のパラメータ並びが変更されているのでそれを直す必要がある。 必要な情報は関数のパラメータそれぞれの型とその意味、現在指定されている(エラーになっている) パラメータそれぞれの型とその意味(内容)。だからCとDの型とその内容は必須な情報。でも Ctrl+クリックで探せないか?
それやったらジェネリクスの意味ないだろ 馬鹿か?
と、馬鹿が申しております。
ジェネリクスとTObjectListの区別がつかない
>>499 それ本気で言ってるとしたら頭疑うわ
ジェネリクスって何だか分かってる?
502 :
489 :2010/03/28(日) 22:37:31
>>497 はじめはTListやTObjectListに入れてキャストしたのをpropertyにしてたんですけど、
ダウンキャストをしたくないのと、getter setterを一々書くのが面倒なんでジェネリクスを使ってるんですよ。
とりあえず割り切ってエラーは見ないように割り切る他ないんでしょうかね。
いろいろ書き直してたら日本語おかしいまま書きこんでしまった・・・ 最後の行は脳内修正して読んでください・・・
まぁエラーインサイトとかは他でも誤動作するし、気にしすぎないほうがいいと思う。
エラーインサイトは実装当時から切ってるな 役に立った試しがない
お世話になります。 TMemoで行や桁があふれたときだけスクロールバーを出すにはどうしたら良いのでしょうか。 ScrollBarsをBothに設定すると常に出っぱなしで見苦しいのです。 他のコントロールだと自動で出したり引っ込めたりするのに、なぜ?
んー自分でOnChangeイベントあたりで制御するしかないんじゃないかなぁ。何でそうなっているかって? WindowsのEDITコントロールがそう作られているからだな。
>>506 SynEditなんてどう?などと適当なことを言ってみる。
>>507 そうなんですか…。
Delphiの構文さえ理解してないレベルの自分には難しそうです。
>>508 SynEdit調べましたが、ちょっと用途が違うような。
ただシンプルにテキストが入出力できれば良いので。
ふと思い立って、TRichEditならどうかと。
これはMemoと違い、あふれたときだけスクロールバーが出るじゃありませんか!
これでヨシ!と思ったんですが、今度はポップアップメニューが出ません orz
PopupMenuを設定すれば?
>>510 やってみます。スクロールバーを出すよりは難しくなさそうなので。
Delphi6 Personalを使用中 ヘルプが変です キーワード検索すれば出てくるけど、VCLリファレンス目次のルーチン一覧(カテゴリ別)には 見当たらない項目がいっぱいあるんですけど、これは仕様でしょうか FileAge関数とか、カテゴリMBCSユーティリティの全部とか MBCSユーティリティは重要視されてないのかな AnsiCompareFileName関数の説明もよく分かりません ・ AnsiCompareFileName 関数は,大文字と小文字を区別しないで S1 と S2 を比較します。比較演算は,現在のロケールに基づいて行われます。 AnsiCompareText('AA','aa') { 0 を返す } AnsiCompareFileName('AA','aa') { 0 ではなく 1 を返す } 大文字と小文字を区別しないはずなのに…? AnsiLastChar関数は、文字列処理ルーチン(ヌルで終わる)に入れるべきかと
最小化した時も処理を続けていて、その時のデータに応じて タスクバーに表示される文字を変更したいんだけど どうしたらいいですか?
フォームのCaptionかApplication.Titleを変更する。
>>512 そんな10年も前の終わったバージョンに対して文句言うとか頭おかしいんじゃないでしょうか
516 :
デフォルトの名無しさん :2010/03/31(水) 18:19:57
デザイン時にTPageControlを右クリックすると 「ページ新規作成」や「ページの削除」といった メニューが表示され、追加・削除が出来ますが これはどのように実現したらよいのでしょうか? 「子・孫を持つパネル」のような自作コンポーネントを 作成していて、その子・孫パネルを追加するのに、 メニューでやりたいなと思った次第です。
目で見たものを真似できない人は何も作れないと思う
つまり
>>517 は自分は何も作れないと宣言したかったんですね、わかります
わかりますがそういうのはチラシの裏にでも書いて下さい
顔真っ赤だよ?どうしたの?
と、顔を真っ赤にして申しております。
ListViewのことで質問です。 セルをクリックした時に何行目何列のセルかを知りたくて 下記のサンプルを見つけました。 Item部のCaption文字列の上とSubItemの部分をクリックした時はいいのですが、 Item部の余白部分をクリックすると何も取得出来ません。 Item部のどこをクリックしても取得出来るようにするにはどうしたらいいですか? var wCtrl : TListView; wStruct: TLVHitTestInfo; begin wCtrl:= (Sender as TListView); FillChar(wStruct, SizeOf(TLVHitTestInfo), 0); // マウスカーソルの座標を取得 GetCursorPos(wStruct.pt); // スクリーン座標からクライアント座標に変換 wStruct.pt:= wCtrl.ScreenToClient(wStruct.pt); //repeat wStruct.pt.X:=10; // 選択された項目の判定 if wCtrl.Perform(LVM_SUBITEMHITTEST, 0, LPARAM(@wStruct)) >= 0 then with wStruct do begin Item:=(Sender as TListView).Items.Item[iItem]; end;
524 :
520 :2010/04/01(木) 13:33:09
525 :
デフォルトの名無しさん :2010/04/01(木) 13:36:00
結局>516が分からない馬鹿しかいないんですね レベル低いですねもう来ません
逆ギレ乙です
なんつーか、回答する気も起こらないつまらん質問ってあるよね。 PopupMenu の使い方を知らんのか、動的にコンポつくる方法が知らんのか こっちが勝手に想像するのも面倒くさいような質問とか。
527 はこのスレの意義を理解できないのか? >Delphi(デルファイ)について、他のスレッドでは書き込めない超低レベル、 >もしくは質問者自身何が何だか分からない質問を >勇気を持って書き込むスレッドです。 回答する気にならないのなら、黙っていなさい。無理にコメントを書くことは無い。
>516が知りたいのはToolsAPI(OTA)の話だと思う。ListViewとかTreeViewのように デザイナ上でそのコンポーネントのカスタム項目を使えるようにしたい、とか。Inside Delphi あたりに載ってたような。
531 :
516 :2010/04/02(金) 09:01:08
>>529 仰るとおりです。デザイン時の話です。
ToolsAPIというのは初めて聞きました。ググって見た感じでは
まさにそれっぽいのですが、ちょっと私には敷居が高そうだなあ…。
とりあえず子パネルのSetParentと親パネルのValidateInsertを
overrideして他のコンポーネントを(に)置けないようにして
デザイナ上で貼り付けさせるとかしてお茶を濁すことにします。
Source\ToolsAPIとSource\Win32\Property Editorsを参考に(場所はDelphiの バージョンで違ってくるかも)。
もう少しちゃんと説明して下さい
534 :
516 :2010/04/02(金) 13:33:33
IDが出ないのをいいことに質問者のフリをして煽る人がいるみたいですね。 まあ句読点とかの文体が違うので、皆さんも分かってるとは思いますけど…。
13:33:33
537 :
523 :2010/04/02(金) 23:12:57
また、Listviewで質問なんだけどmousedownとかうpを 受け付けてもらえないんだけど、なんか設定とかある?
538 :
デフォルトの名無しさん :2010/04/04(日) 20:53:06
エクセルオートシェイプの矢印をTImageやTFormに描き、 bmpで保存したいのですが、それは加納ですか? というか、滑らかで綺麗な矢印がTImageに描ければ いいだけなんですけど・・・ 誰かソース書いてもらえません?
化膿です
適当なグラフィックツールで2倍とか4倍に描いたものを縮小してBMP形式で保存して 取り込めばいいんじゃね?
オートシェイプをPrtScnキーで取り込んでMSペイントで保存してTImageでStretchする。
フォームの上にパネルを1個置き、パネルのボーダースタイルをbsSingleにします。 そのパネルの上にボタンを置きます。ボタンのアンカープロパティを[akRight,akBottom]に設定します。 で、フォームの右クリックメニューから「エディタで表示」して、「フォームを表示」で元に戻します。 これを繰り返すとボタンの位置がどんどんずれていきます。マジで堪りません。 プロジェクトを開くたびにどんどんおかしくなっていきます。
パネル以外のコンテナでもページコントロールのBorderWidthを設定したり、 スクロールボックスでも発生します。アンカーはデフォルト以外に設定すると 位置がずれていたり、サイズが変わったりします。 ポトペタが売りの製品で基本の部分でバグるなんてあまりにもひどすぎます。 クソツールのようです。
そういうのはオッチャスレでやってください ここは質問スレです
一応手持ちの歴代Delphi(6〜2010)で試してみたけど発生しないなw 捏造もオッチャスレの受け持ちなんでやっぱりあっちでどうぞ バージョン書いてない時点で結構怪しかったけど もしくはパッチあててないだけという情けない落ち?
>>545 まじで言ってます?2010でも2005でも発生しますよ。それ以前は試してません。
「エディタで表示」ってのはフォームのDFMをテキスト形式でみるメニューのことです。
で、「フォームを表示」で元に戻すと、1回やるたびに4ピクセル分ずれます。
4ピクセルってボーダーの幅(GetSystemMetrics(SM_CXBOARDER)で、その分、クライアント領域が
小さくなるのにAnchorsなどの配置処理で考慮に入れてないんじゃ?と思ってます。
ソース追っかけ中。
環境によって変わるのでわ? 自分もPanelの中に貼り付けたコンポをalclientにしているのに高さが追随してくれない現象を体験しているので。 この現象が出るのはXPでW2Kは問題なしだが、自分以外のXPマシンでどうだかは知らない。 (Del7pro/W2Kでコンパイル/パッチは全部当ててるはず)
自分の試した環境ではWinXPモードとWin7とWin2000で発生します。 ここではボタンを配置しましたが、Anchorsプロパティをデフォルトの[akLeft,akTop]以外に 設定したコントロールすべての位置、サイズがどんどんずれていきます。 コンテナの方はパネル、スクロールボックス、ページコントールのタブシートなどです。
2k+D7Pro発生せず。
他のコンポでも試したがなんもおこらんよ。
手順は
>>542 の通りやった。
XP+2010で発生せずだなー。 Turboもあるけど試してない
よほど特殊な環境なんだろうな なのに環境情報は後出し、しかも小出し 解決する気のないただのアホにしか見えない
2k+D6Per発生せず。
手順は
>>542 の通りやった。
xp(sp3)+d7ent(sp1)だけど発生しなかった。 HDDを交換でXPをクリーンインストールしたいんだけど D7のライブラリパスとかを一発で元に戻す事ってできる?
>>553 んー。発生しませんか。お手数おかけました。ありがとうございます。
しばらくもうちょっと調べてみます。
>554 該当レジストリを持っていくっていう手もあると思うが>設定の引っ越し。
xp sp3+turbo delphiで発生しますた
発生してた奴はOSとDのバージョンだけじゃなくて ウィンドウ周りに関する環境設定情報を全部書き出せ
そんな書き方じゃまともな情報は上がってこないぞ
今のところ再現画像、再現動画等なし
オレのところでも発生したわ。 557と同じXPSP3+Turboだけど。 bsSingleとかで検索したら、似て非なる事例が何個か出てくる。
自演、乙。 オッチャ盛況だよ。
何個かしかないなら挙げればいいのに、しないのは何故なんだろうね
564 :
561 :2010/04/09(金) 16:55:56
Win98+Del6Per(XPSP3上のVirtual PC 2007)では発生しなかったわ。 アンカーの両側がオンだと、繰り返すたびにボタンが縮んでいくのが笑える。 まあ確かに、くだすれの話題ではないか。
Del7のVCLに直接手を入れて使ってる人いる? VCLってリコンパイルできるのかな。
566 :
191 :2010/04/11(日) 14:21:39
超初心者スレなのにみんなレベル高すぎでついていけませんT_T
途中で書き込んじゃった。 最近のバージョンって書籍でリファレンスって出てないんでしょうか。 自分としては首っ引きでページ捲り捲り勉強する方がしっくり来るのですが… 昔はパッケージにちゃんと含まれてたんですよね?
コミュニケーションのとれないおっさんだなw
おっさんきもい
おっさんかっこいい
あっちゃんかっこいい
574 :
554 :2010/04/13(火) 22:35:55
ライブラリパスって普通にテキストでコピーしとけば良かったのね。
Javascriptはやたら柔軟です。 ブックマークレットの例 Javascript:for(var I=0;I<3;++I){alert(['One!','Two!!','Three!!!'][I]);}; Delphi言語では上記の ['One!','Two!!','Three!!!'][I] みたいなお手軽な書き方はないでしょうか? オープン配列コンストラクタというのが近いかなと思ったんですが、違ったようです。
function getarr(arr: array of string): TStringDynArray; var i: Integer; begin setlength(result, length(arr)); for i := 0 to high(arr) do Result[i] := arr[i]; end; getarr(['a', 'b', 'c'])[0]というのはできなくもないけど 今の処理系では手軽表記はないと思う。 いつの日か'one'[2]と同様 ['One!','Two!!','Three!!!'][I] が通るようになるかもしれないけどな。
Cだと通るよね
教えてください。D6パーソナル使用です。
EXE自身のアイコンをTImageに表示しています。
アイコンの透過色が透明になってくれるのは良いのですが、白色まで透明になってしまいます。
何がいけないのでしょうか。それとも全部間違っているのでしょうか。
プロジェクトのオプションに設定しているicoファイルはこんな感じです。
http://www1.axfc.net/uploader/File/so/42162 var
Icon:TIcon;
begin
Icon:=TIcon.Create;
Icon.Handle:=Application.Icon.Handle;
if Icon.Handle<>0 then
Image1.Canvas.Draw(0,0,Icon);
Icon.Free;
end;
transparent
Transparentが関わってそうなことは想像できるのですが、2色が透過してしまうという上記例の場合 どのようにすれば良いのか分かりませんでした。もしよろしければご教示下さい。 結局ですが自己解決しました。以下のように修正。 Image1.Canvas.Draw(0,0,Icon); → Image1.Picture.Icon:=Icon; やり方が根本的に間違っていたということでした。 しかし、こんな方法↓でもOkでした。 Image1.Picture.Icon.Handle:=Icon.Handle; Image1.Picture.Icon.Assign(Icon); 一体どれが正しいのか?? さらに、Handleってなんなんだ?と思ったので調べると、32bit整数だと。ならば、 var Icon:Integer; begin Icon:=Application.Icon.Handle; if Icon<>0 then Image1.Picture.Icon.Handle:=Icon; end; と、やってみたら大丈夫でした。 こんなコードでいいんでしょうか???
ListBox.Items.Selectedが画面外の時、 その項目が表示されるようにスクロールするやり方教えてください
はい
>>581 Image1.Picture.Assign(Application.Icon);
これだけでいいと思う。(D6パーは持ってない
キャプチャーを作ってみたんだけど、ウィンドハンドルからデバイスコンテキストを 取得して指定の画面のキャプチャーを取ってるつもりなんだけど、わざと取りたい画面の上に 別のウィンド置いとくとその別のウィンドもキャプチャーされるんだけどそんなもの?
XP以降なら個別にとれる 詳細はググれ
589 :
587 :2010/04/19(月) 02:37:57
ググったらで来た。 ありがとう
printwindowを使うんだって。 使い方はググった方が早い。 簡単だよ。
>>585 D6パーソナルでもOkでした。正解はスッキリ簡単でしたね。
リソースからアイコン削除してApplication.Iconが無い状態(有り得ないけど)にしても
表示されないだけでエラー無し。
教えてもらってから理解したけど、IDEでImage1.Pictureに画像をセットするのとほぼ同じ動作ということですね。
ありがとうございました。
IDEのエディタマクロ書きたいんだけどそういう情報ってどこにあるの?
RichEditにDephiのソースコードを着色した状態で表示する サンプルなりコンポなりがあったら教えてください。
TParser使え
RichEditの使い方が分かりません。
単純に任意の色で文字を書いて、改行を付加する/しない が選べるようにしたいだけ
なのですが、どのようにしたら良いのか分かりません。
こんなイメージで使えるprocedureを作りたいです。
const
CRLF=#$0D#$0A;
…
RichWrite('エン', clBlue);
RichWrite('バカ', clRed);
RichWrite('デロ', clYellow);
RichWrite('☆', clGreen);
RichWrite('Delphi'+CRLF, clBlack);
RichWrite('Hello'+CRLF, clAqua);
RichEdit1に書かれる結果:
エンバカデロ☆Delphi // 青色赤色黄色緑黒色
Hello // 水色
これを実現するための材料だけでも良いので教えてください。よろしくお願いします。
一応ですが、私は
>>595 とは無関係です。
SelAttribute(ただし遅い)
>>598 ありがとうございます。
SelAttributesはヘルプによると、
>テキストを新規に挿入するときには,SelAttributes のフォント属性が適用されます。
とのことなので良さそうなのですが、改行無しで文字列を追加したい場合はどのように
すれば良いのでしょうか?
seltext
>>600 うーん分からないです。
SelTextプロパティを使ったサンプルをいただけないでしょうか。
ああっ、分かりました!
SelStart := GetTextLen;
SelText := 'ABC';
ですね!
「Delphi SelText SelAttributes」でググると一番最初に出てくる
http://delphi.about.com/od/delphitips2008/qt/format_richedit.htm の記事が分かりやすいです。
今までさんざん探してたんですが、こういう単純で基本的な内容のサンプルは初めて見ました。
ようするに、
with RichEdit1 do
begin
SelStart := GetTextLen;
SelAttributes.Color := clBlue;
SelText := 'エンバカデロ';
SelAttributes.Color := clBlack;
SelText := 'Delphi'+CRLF;
end;
みたいな感じにすればOkですね。これをprocedureにしてみます。
ありがとうございました。
グループボックスのCaptionがCheckBoxになっているコンポーネントってないでしょうか?
グループボックスのキャプションをなしにして、キャプションの位置にチェックボックスを置けば?
?
608 :
604 :2010/04/27(火) 23:56:33
del標準の関数でbitmapをjpegに変換すると、低圧縮でも汚いのできれいに変換できるコンポとかってないですか?
ないです
>>609 JPEGが何なのか調べてくるといいですよ^^
正しいことが何なのか、この胸にわかるまで〜
613 :
609 :2010/05/03(月) 23:15:23
Jpegへ綺麗に変換できるコンポがあって説明を読むと、 delphiのはサンプリングが4:1:1だから汚いと書いてありました。 del7proなんですが、このサンプリングレートを変えることは出来ませんか?
614 :
デフォルトの名無しさん :2010/05/04(火) 00:40:48
c言語の float range_0[] = { 0, 256 }; float* ranges[] = { range_0 }; をDelphiで書き換えたいのですが var range_0: array[0..1] of Float = (0, 255); ranges: array[0..0] of PFloat; begin ranges[0] := @range_0; ・・・・・・ end; でいいのでしょうか? Floatは type Float = Single; PFloat = ^Float; で作ってあります。 どなたかわかる方おられましたらよろしくお願いします。
なんで数字まで変わっちゃうんでしょうか
>>613 jpeglib.hのjpeg_component_infoをjpeg.pasに定義してcomp_infoを^jpeg_component_infoにして
TJPEGImage.Compressで
for i:= 0 to 2 do begin
jc.c.comp_info[i].h_samp_factor:=1;
jc.c.comp_info[i].v_samp_factor:=1;
end;
とかすればイケるのかな
つーか、そのコンポとやらを使えば良いんじゃないかな
酔ってるし寝るのであとは知らん
617 :
614 :2010/05/04(火) 08:24:11
>>615 レスありがとうございます。
数字は素で間違えました;
Cうろ覚えだけど愚直に移すならこんな感じか。 type Float = Single; PFLoat = ^Single; TFloatArray = array [0..High(Integer) div SizeOf(FLoat)-1] of Float; PFloatArray = ^TFloatArray; var range_0: array [0..1] of Float = (0,255); ranges: array[0..0] of PFloatArray = (@range_0); ranges[0][0] ==> 0 ranges[0][1] ==> 255
619 :
614 :2010/05/04(火) 15:27:34
>>618 こういった書き方は、初めて知りました。
とても勉強になりました。ありがとうございます。
>>618 そこまでこだわるならHigh(Integer)じゃなくて(High(Integer)+1)じゃね?
もしくはせっかく定数が用意されてるんだからMaxInt+1でもいいかと
ranges: array [0..255] of Single; とどう違うかさっぱりワカンネ
何で1足すんだよ
>>621 どう違うかどころか全然違うよw
実際に計算してみたら?
>>622 High(Integer) div SizeOf(Float)じゃなくてHigh(Integer) / SizeOf(Float)を計算すれば分かる
相変わらずどうでもいい頑張り方だな
そのどうでもいいレスよりマシじゃない?
WindowsXP SP3 DELPHI7 SQLSERVER2000 BDE 画像ファイル(JPG)を読み込み SQLServerの画像項目(IMAGE型)に格納したいんですが AFileName:='IMAGE.jpg'; jp :=TJPEGImage.Create; jp.LoadFromFile(AFileName); BDEの画像項目.Assign(jp); 上記を実行すると 「〜型が一致しません。VarBytesに対してBlobが渡されました」とエラーが出てしまいます。 blobからVarBytesに変換する処理が必要なのかと思い調べたのですがよくわかりませんでした。 ADOを使用した場合はネットから引用したソースでうまく動いたのですが、 該当システムはBDEで統一させたいので質問させていただきました。 宜しくお願い致します。
BDE からの接続形態は? ODBC ? SQL-Link ?
a-zから10桁の文字列生成をしてみようと思って '', 'a'..'z'の配列から文字列を取り出してつなげていくプログラムを組んでみたのですが、 forを10重にしたコード書いたけど ぐぐってみたらX種類の文字のN重ループは for i := 0 to Power(X, N)-1 do begin for j := 0 to N-1 do begin で代用出来ると書かれていたのですが、 文字列の取り出し方がわかりません。 str := mojiretsu[Trunc(i / j) mod High(mojiretsu)] + str; としてみたらなんとなくそれっぽい感じだったんだけど文字列がループしてしまいました。 mojiretsuにアクセスする式はどうかけばいいのでしょうか?
630 :
629 :2010/05/09(日) 17:07:43
コードはこんな感じにしてみました uses SysUtils, Math, Windows; const StrLenMax = 27; keta = 10; var i : LongWord; j, k : Integer; str : String; mojiretsu : array[0..StrLenMax-1] of string; begin { TODO -oUser -cConsole Main : ここにプログラムコードを書いてください } mojiretsu[0] := ''; for k := Low(mojiretsu) + 1 to High(mojiretsu) do begin mojiretsu[k] := Chr(97+k-1); end; for i := 0 to Trunc(Power(High(mojiretsu), keta))-1 do begin str := ''; for j := 0 to keta-1 do begin str := mojiretsu[Trunc(i / j) mod High(mojiretsu)] + str; end; Writeln(str); Sleep(100); end; end.
なんで乱数を使わないのかと小一時間
632 :
629 :2010/05/10(月) 04:10:41
>>631 期待している動作としては
a, b, c, d ... z, aa, ab, ac .. az, ba, bb
みたいな感じで指定した桁数の文字列を生成したいです。
テストとか学校の課題? >ぐぐってみたらX種類の文字のN重ループは >for i := 0 to Power(X, N)-1 do begin > for j := 0 to N-1 do begin >で代用出来ると書かれていたのですが 元 URL を出していただけるか、元 URL のところに相談を持ち込んだほうがよいかも。 このアルゴリズム断片は、整数を26進数表記で処理するアイデアです。 i が対象となる全整数、j が 26進数変換の変換対象桁数。 i が 32 なら、 32 / 26 -> 1 余り 6 -> 'g' 1 / 26 -> 0 余り 1 -> 'b' 文字列として 'bg' を得る。 となります。 アルゴリズムとしては簡単なほうですが、 * 全組み合わせを整数から生成しているけど 26進数10桁だと 16進で 806406972400 で 32bit に収まらないから int64 にしないと。 * 0-9 が 10進で、a-z で 26進。'a' が 0 を意味するので、このアルゴリズムを単純実装 したときは aaaaaaaaaa から zzzzzzzzzz が生成されます。頭の a を消去(ゼロサプレス) しても a,b ... y ときて z の次は aa ではなく ba です。 * おそらく、遅い。
634 :
629 :2010/05/10(月) 05:58:41
var table: array [#0..#255] of char; procedure init; var i: char; begin for i := #0 to #255 do case i of 'a'..'y': table[i] := succ(i); 'z': table[i] := 'a'; else table[i] := #0; end; end; function getnext(s: string): string; var i: integer; c: char; begin result := s; for i := length(result) downto 1 do begin c := table[result[i]]; result[i] := c; if c <> 'a' then break; end; end;
init; getnext('aaa') ==> 'aab' getnext('zzz') ==> 'aaa' var s: string; begin init; s := 'aaa'; while true do begin writeln(s); if s = 'zzz' then break; end; end; 最速狙いたいなら普通にCでDLL書いたほうがいい。
別にCなんか使わなくてもインラインアセンブラで十分じゃん
638 :
629 :2010/05/10(月) 16:20:22
639 :
デフォルトの名無しさん :2010/05/11(火) 14:28:43
Delphi7だけどバグの修正これでいいかな
Quality Centralの33496
http://qc.embarcadero.com/wc/qcmain.aspx?d=33496 procedure TMenuItem.DoDrawText(ACanvas: TCanvas; const ACaption: string;
.
with ACanvas do
begin
if Text = cLineCaption then//追加2010.05.11 QC33496
exit;//追加2010.05.11 QC33496
if IsLine then
begin
if Flags and DT_CALCRECT = 0 then
begin
R := Rect;
Inc(R.Top, 4);
DrawEdge(Handle, R, EDGE_ETCHED, BF_TOP);
end;
end
2箇所追加してみたけど(新しいの2010も治っていないけど)
//if Text = cLineCaption then if IsLine then でしょ
フォームのAlphaBlendを使った時に特定のコンポだけは透明化されないようには出来ないでしょうか?
AlphaBlendなフォームの上に Transparentなフォームをぴったり重ねればできそうだけど アホっぽいなw
バイナリデータを文字変数を使って処理しています 以下のようにすると、バイナリ状態のUTF-16LE文字列をWideString文字列に出来ることが分かりました var Bytes: AnsiString; WStr: WideString; begin // BytesにUTF-16LEのバイナリを入れる処理が入る… // 例:バイナリ 71 67 AC 4E 30 00 33 00 WStr:=WideString(PWideChar(Bytes)); // 結果:WStrに「東京03」が入る 質問: 1. コンパイル時に警告が出るんですが、このやり方で問題ないですか? [警告] Unit1.pas(174): String から PWideChar への型キャストは間違っている可能性があります 2. この逆(WideString → AnsiStringにバイナリ状態のUTF-16LE)の変換は、1文字ずつループを回せば 出来ましたが、もっと簡単に出来ますか? よろしくお願いします
なんでAnsiStringなんかに入れるの・・・ Byte配列でええやん
警告ごまかしたいなら w := WideString(PWideChar(Pointer(s))); w := WideString(PWideChar(@s[1])); で行けるんじゃね。 Stringをバイナリコンテナとして使う場合 別に文字コードなんて関知しないから問題ないはず。
>>644 何をどうすれば出来て、何が最善なのか分からないんです
実は当初、Byte型の動的配列で検索とかいろいろやってました
TByteDynArrayとかオープン配列パラメータとか使ってみたり
勉強にはなったんですが、配列要素を切ったりつなげたりのやり方が
よく分からなかったのと、いちいちSetLengthするくらいならStringの方が
簡単かつオールマイティで良いではないかと考えたんです
ちなみに配列版の試作途中ソースは誤って削除してしまいました(アホ)
>>645 ありがとうございます
WStr:=WideString(PWideChar(Pointer(Bytes)))
とすることで警告が出なくなりました
さらに、
WStr:=WideString(Pointer(Bytes)) でもOkでした
ということはと考えて、
Bytes:=AnsiString(Pointer(WStr)) とすると逆変換も出来ました
空文字やヌル付きでもそのまんま、ありのまま相互変換するようなので分かりやすいです
ポインタとかの理解度5%程度なのでよく分かってませんが、このPointer(文字型変数)
というのは単なるポインタじゃなくてポインタ型、文字列の長さ情報をも含んでいるんですね
ヘルプ見ても断片的に「型なしポインタ型」としか書いてないし…
配列でなく、オールマイティな?Stringをバイナリコンテナ(カッコ良い言葉なのでこれも拝借)
として使うのは、方向性として間違ってはいませんよね?
それともやはり配列使うべきでしょうか? 配列の利点があれば教えてください
>>642 それやったことあるw
よっぽど重いアプリでも作らない限り無難に理想の動作はしてくれるよ。
リサイズさせない移動させないサブフォームでなら普通に使える。
Del7を使っています。 WinSight32である特定のウィンドハンドルを見たら、そのウィンドウを隠した(スライドさせる)時に hidden となるのですが、この hidden になっているかどうかはどうすれば分かるでしょうか?
IsWindowVisibleとか
>>646 使ってるDelphiのバージョンが分からないけど、そのバージョンを一生使い続けるならそれも可
でも乗り換えることがあるなら、string型はすでに仕様が2回ほど変わった過去があるので
そのキャストが今後も使えるとは限らないし、配列を使った方が確実にいいと思う
だからそのコードは偶然動いた程度に考えた方がいいかと
あと利点云々は変換した後何するかによるし、もう少し情報出してくれないと・・・
652 :
649 :2010/05/13(木) 00:17:33
ありがとうございました。 状態の取得が出来ました。 新たな質問なのですが、 他のソフトのテキスト描画色を取得したくて、ググったらGetTextColorというのにたどり着きました。 var CL: TColor; begin CL:=GetTextColor(DC); と、やってもCLには「0」が入ります。 DCの取得は出来ています。 TColorをTColorRefとしてもダメでした。 どなたかよろしくお願いします。
0は黒だが
WStr:=WideString(PWideChar(Pointer(Bytes))) による PWideChar->WideString の変換は、 #$0000 が出現するまでのデータを (_WStrFromPWChar によって) WideString データに変換するけど、 WStr:=WideString(Pointer(Bytes)) と Bytes:=AnsiString(Pointer(WStr)) は、ポインタ型のつじつま合わせを行った後に代入(_WStrAsg/_LStrAsg) するので、後々トラブルが発生するかも。 前者は、バージョンによって、危険な場合があり、、 特に後者は、確実に refCnt いじってメモリーリークしているので危険。
>>653 レスありがとうございます。
その描画色はなん色か時間によって変わっていって黒は使われていないんです。
描画されている文字列を取得すると正しく取得できるし、WinSightで見てもハンドルは
間違ってはいないので、デバイスコンテキストも間違ってはいないと思うのですが。
>>654 >特に後者は、確実に refCnt いじってメモリーリークしているので危険。
w: WideString;
s: String;
w := '幹事';
s := AnsiString(Pointer(w));
がリークするの?
FastMM4は沈黙してるけど。
657 :
654 :2010/05/13(木) 12:26:30
Windows では、WideString は、OLE 文字列や BSTR 互換なので、 AnsiSting とは、メモリ管理方法が異なる。 WideString は、SysAllocStringLen などで 領域確保しているので FastMM4 の管理外。 WideString のオフセット -4 には、長さに相当するバイト数が 格納されていて、それ以外はしらん。 しかし、AnsiString を代入するときは参照カウントが格納されている オフセット -8 の refCnt フィールドを調べたり、いじったりする。
WideString (BSTR) は参照カウンタ管理されていないので、ストリングのコピーが複製になるため「遅い」 という問題を回避するために導入されたのが参照カウンタ付き UnicodeString なわけなので WideString 側には refCnt なんてフィールドはありませんよ。 UnicodeString と混ざってしまっているかな?
なんか疑問だな バイナリを入れるなら byte の配列を用意したほうが自然 Bytes: array of byte; で、WStr := WideString(Pointer(Bytes)); でどうなのか
WStr := WideString(Pointer(Bytes)) だと、Bytes配列はヌル終端してる必要ある?
662 :
646 :2010/05/13(木) 16:31:53
>>647 どういう点がセンスいいのか言ってもらわないとw 怖いもの知らずっていう意味ですか
>>651 ご意見感謝します
バージョンは6のPersonalです
作成中のアプリのコードを現代のバージョンに持って行くことはまず考えられません
しかし気持ちとしては、現代のバージョンにも転用可能なコードを書きたいと思いますし、
理解できていない・正体のハッキリしないモノ=ポインタ絡みの操作や原理不明のキャスト
も出来れば使用したくない、というのが本音です キャスト成功で手放しで喜んでいるわけではないです
なお、最近のバージョンではTEncodingとかRawByteStringとか、良さそうなものがあるようですね
>乗り換えることがあるなら、string型はすでに仕様が2回ほど変わった過去があるので
すごく承知してます
Stringでなく、AnsiStringと記述してるのは上記のような気持ちからです(あまり意味有りませんが)
自分が調べた限りではこんな感じですが、だいたい合ってますよね
■AnsiStringの系譜 D1:ShortString → D2:AnsiString → D2009:AnsiString(コードページ指定可能)
■Stringのデフォルト D1:ShortString → D2:AnsiString → D2009:UnicodeString
※ UnicodeString=AnsiString(1200)
※ D2:AnsiString、D2009:AnsiString/コードページ指定なし のコードページはシステムのロケールに依存
※ D2009:AnsiString(コードページ指定)では変数ごとに複数のコードページを保持できる
※ RawByteString=AnsiString(65535) コードページの変換をしない
やりたいことは、バイナリファイルを読み込み、特定条件の文字列や数値を検索して抜き出し、
変更を加え再構成して新たなファイルを作成、という操作です ゲーム改造みたいな感じでしょうか
いったんバラバラにしたデータを再構成する、つまり切ったりつなげたりをスマートに行う方法が
分からず、こんなことで悩むなら足し算引き算自由の文字列を使うべきかと結論付けました
配列だと、array[0..n] of Charまたはパック文字列型、StrPCopy、StrPas、Move
このあたりを使用するんでしょうか?
663 :
646 :2010/05/13(木) 16:34:38
>>654 ありがとうございます
WStr:=WideString(PWideChar(Pointer(Bytes))) ではヌル除去、
WStr:=WideString(Pointer(Bytes)) だとヌル保存を確認しました
少しだけナルホド、です
でも高度に技術的なお話はちょっと分からないです…
確かにSystem.pasにはそういうのがありますね、としか…
procedure _WStrFromPWChar(var Dest: WideString; Source: PWideChar);
procedure _WStrAsg(var Dest: WideString; const Source: WideString);
procedure _LStrAsg(var dest; const source);
procedure _WStrFromLStr(var Dest: WideString; const Source: AnsiString);
procedure _LStrFromWStr(var Dest: AnsiString; const Source: WideString);
みなさんのご意見をまとめると、「これらのキャストはすべて危険、未来も無いからやめとけ」
ってことですね?
しかし、配列優位とも思えませんので、文字列型を使いつつキャストもしない、という方針で
やってみようかと思います
>>659 えーと、私もそう考えて、というかByte型という名前に惹かれて、当初はTByteDynArrayでした
あと、1byte=Byte型配列の要素1個 というのも気持ち良い感じがしたんですが…
やはりバラバラにして再構成というのが配列の用法と合わないと思いました
>>661 いえ、話の発端の私がしておりますので…
664 :
654 :2010/05/13(木) 16:44:54
>660 PWideChar じゃないから危険だって。 PWideChar -> WideString はヌル終端までを変換するけど、 Pointer -> WideString はただの型キャスト。 PChar/PAnsiChar/PWideChar -> AnsiString/WideString/UnicodeString => ヌル終端までを変換 AnsiString/WideString/UnicodeString -> PChar/PAnsiChar/PWideChar => ヌル終端を保証 PAnsiChar/PWideChar/AnsiString/WideString -> Pointer => 型キャスト Pointer -> PAnsiChar/PWideChar/AnsiString/WideString => 型キャスト
665 :
654 :2010/05/13(木) 16:52:06
ついで。 Dynamic Array -> Pointer => 型キャスト Pointer -> Dynamic Array => 型キャスト
>「これらのキャストはすべて危険、未来も無いからやめとけ」 んなこたない。 生ポインタをC文字列とみなしてDelphiの文字列に変換する機能は Win32APIを叩く際の根幹的な機能だからそんな簡単に仕様変更なんてあるわけがない。 いくらなんでも脅かされすぎ。
667 :
646 :2010/05/14(金) 02:20:53
あれ、今までのレスをよく見直すと、
WStr:=WideString(Pointer(Bytes))
は危険な可能性有りだけど、
WStr:=WideString(PWideChar(Pointer(Bytes)))
は問題無いと言う見解ですかね?
>>666 仕様変更は無いだろうというご意見も覚えておきます
どちらにせよ、もうキャストはしないと決めました
「キャスト」なる仕組みは完全に明らかである、という状況ではない以上、
使うべきではないと思いました
668 :
646 :2010/05/14(金) 02:23:12
こんな感じの関数で十分でした これなら不明な点はありませんから問題無いですよね function BytesToUTF16LE(Bytes: AnsiString):WideString; var I: Integer; WOrd: Integer; begin Result:=''; for I:=1 to Length(Bytes) div 2 do begin WOrd:=(Ord(Bytes[I*2]) shl 8)+Ord(Bytes[I*2-1]); if WOrd=0 then break; // ヌルを含めるならこの行を外す ※ヌルは複数組の可能性もあり Result:=Result+WideChar(WOrd); end; end; function UTF16LEToBytes(WStr: WideString):String; var I: Integer; begin Result:=''; for I:=1 to Length(WStr) do begin Result:=Result+Char(Lo(Ord(WStr[I])))+ // and $00FF Char(Hi(Ord(WStr[I]))); // Shr 8 end; end; キャスト方法のアドバイスをくれた方、ご意見下さった方、ありがとうございました 大変勉強になりました
>>666 今までに変更があったという事実は無視なの?
コーディングスタイルは人それぞれだね 1行だけのforならbeginもendも不要なのに
エンバグの元なのに?
既に決着済みではあるけど一言だけ。
>>667 >「キャスト」なる仕組みは完全に明らかである、という状況ではない以上、
明らかに間違った使い方は示されたけど
Delphiの仕様の抜け道を使ったような未定義のやり方はないよ。
少なくともそんな指摘はまったく出ていないように思うが。
曖昧論やらべき論は出てきたが。
673 :
652 :2010/05/14(金) 08:14:15
GetTextColorについて質問をしたものです。 あれから色々試していたのですが、例えば赤で描かれたテキストがあって、 その色を取得しようと、GetDCPenColor、GetDCBrushColor、GetBKColorとか やってみたのですが、赤の値が取れませんでした。 何か他にやり方ってあるのでしょうか。 それとも、アキラメロンなのでしょうか。
>>673 座標を取ってGetPixelしてみるとかはどう?
675 :
デフォルトの名無しさん :2010/05/14(金) 21:57:57
描かれてしまったものは単なる絵だから。 描いたときのペンやブラシやテキストカラーの設定が現在も残ってると期待するのは無理
676 :
652 :2010/05/14(金) 23:43:02
>>674 ありがとうございました。
GetPixelで何とか出来ました。
>>675 そういうことなんですね。
納得しました。
ありがとうございました。
Form1の他にForm2を作ってメニューからForm2の表示、非表示させてるんだけど、 Form2を表示中にメインのForm1を最小化させると一緒に画面から消えちゃうの何とかならん?
678 :
デフォルトの名無しさん :2010/05/15(土) 15:35:35
今デルヒで一番安く手に入る環境(違法じゃないの、新品の)でお願いします?
679 :
デフォルトの名無しさん :2010/05/15(土) 16:10:05
680 :
デフォルトの名無しさん :2010/05/15(土) 16:13:24
頼む 日本語で
682 :
デフォルトの名無しさん :2010/05/18(火) 11:26:08
Delphi7ですけどIDE終了時AVなるのでコード変更してみました これでいいでしょうか _LStrClr関連で調べていたら_LStrFromPWCharLenのBuffersが悪さしてるみたいので procedure _LStrFromPWCharLen(var Dest: AnsiString; Source: PWideChar; Length: Integer); var DestLen: Integer; begin if Length <= 0 then begin _LStrClr(Dest); Exit; end; DestLen := CharFromWChar(nil, 0, Source, Length); SetLength(Dest, DestLen); if DestLen > 0 then begin CharFromWChar(Pointer(Dest), DestLen, Source, Length); end else _LStrClr(Dest); end;
683 :
デフォルトの名無しさん :2010/05/18(火) 12:02:46
こっちも変えてみました procedure _WStrFromPCharLen(var Dest: WideString; Source: PAnsiChar; Length: Integer); var DestLen: Integer; begin if Length <= 0 then begin _WStrClr(Dest); Exit; end; DestLen := WCharFromChar(nil, 0, Source, Length); SetLength(Dest, DestLen); if DestLen > 0 then begin WCharFromChar(Pointer(Dest), DestLen, Source, Length); end else _WStrClr(Dest); end;
カード占いをするソフトを作りたいと思っています。 (1)カードの使用枚数と配置を決める (2)カードを配置して裏返し、表示させる。 (1)でカードの位置を、マウスでクリックした位置に決めて カードの裏向きの画像ファイルを表示させたい のですが、どうすればいいでしょうか。
ActiveXのWindowsMediaPlayerコンポーネントで、 動画再生時にビデオの明るさを変更する方法はありますか? WindowsMediaPlayerの「拡張設定」の「ビデオ設定」にある「明るさ」を変更できる方法があればいいのですが。
>>684 その通りにやればいいだけじゃ?
どこで詰まったのかもっと具体的に言わないと答えようがないだろ
一から手取り足取り教えてもらいたいなら金払ってサポートしてもらえ
>もしくは質問者自身何が何だか分からない質問を >勇気を持って書き込むスレッドです。 >Delphi使いが優しくコメントを返しますが トランプの裏向きの画像は手に入れているとして。 フォームに CardImage という名前の TImage を作成。 Picture プロパティに画像を設定。 Visible プロパティを False に。 *クリックしたら From の OnMouseDown イベントメソッドを作成 *位置を決めて 引数の X と Y を使う。 * 画像ファイルを表示 procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var I : TImage; begin I := TImage.Create(self); I.Parent := self; I.Picture.Assign(Image1.Picture); I.Width := Image1.Width; I.Height:= Image1.Height; I.Left := X; I.Top := Y; end;
マルチスレッドのデバッグってどうすればいいでしょうか? 1つのスレッドを動的に複数Createして同時に実行した時に、ブレークポイントで止めていると Delphiが固まってしまいます。 Del7です。 よろしくお願いします。
>ブレークポイントで止めていると Delphiが固まってしまいます。 D7 が現役の頃にはそんな経験無いですけどね。 >Del7です OS は? CPU は? Vista/Win7 だとあきらめるしかないかも。
起動中のアプリケーションでコマンドラインを受け取るにはどうすればいいのでしょうか? a.exe -hoge -piyo が何度か呼び出される感じ(引数は変わる)なのですが・・・ 多重起動は禁止にしてます。
すでに起動中のアプリケーションに、後から起動された(同一)アプリケーションのコマンドラインオプションを 渡すのかな? Windows はマルチタスク/マルチインスタンスサポートの OS なので、別々に起動されたアプリケーションは 別々のインスタンスとして管理されます。何らかのアプリケーション間通信をおこなう必要があります。 擬似コードとしては program A; begin if 俺は起動中かな then begin 起動中のインスタンスにコマンドラインを渡す( paramstr(1), paramstr(2)...) end else 通常実行開始 end; 後から起動されたアプリケーション A2 から、すでに起動しているアプリケーション A1 にデータを送るには、 sendmessage がつかえますが、メッセージを受信するためのウィンドウが必要(非表示でよし)なので 純粋なコマンドラインツールだと余計な手間がかかるでしょう。
692 :
688 :2010/05/19(水) 17:05:30
>>689 レスありがとうございます。
説明不足でした。
ブレークポイントで止まってるだけなら何ともないのですが、ステップ実行を何行かすると
フリーズしてPCのリセットボタンを押さないといけなくなります。
マルチスレッドが1つだけの時は、正常です。
ヘルプを見るとマルチスレッドのデバッグの項目はあるのですが、イマイチよく分からないです。
>>292 XP+Turbo(2005)のわたしも同じ状況に見舞われてます。
以前わたしも、ここか雑談スレで相談しましたが、解決方法はわかりませんでした。
一応、めちゃくちゃ反応は鈍いですが、操作は可能です(時間的には、リセットで再起動の方が早いと思いますが)。
こちらでは、頻度は低いですが、マルチスレッドというか、シングルスレッドでも起こりますので、
スレッドをデバッグした時になるのだと思います(といっても、メインスレッドは別だから、結局はマルチスレッドなのだろうけど)。
おそらくデバッガーの問題かと。こちらでは、なるべくブレークポイントは使用しないという消極的な回避策で対処してます。
>>691 ですです。
だいたいおんなじことを考えていたのですが、
> 起動中のインスタンスにコマンドラインを渡す( paramstr(1), paramstr(2)...)
ここがわかりませんでした。
後出しですみません。
作ってるアプリはGUIアプリです。
>>694 あと、コマンドラインを渡したあと、どうやって受け取るのかもわからなかったです。。。
>>687 やっぱりああやって書くとレス付きやすいですねw
あざーすww
>>694 SendMessageが使えるって書いてあるじゃん
よく読めよ
698 :
684 :2010/05/19(水) 21:08:27
>>686 ,687
ありがとうございます。
やってみます。
マルチスレッドのデバッグっていくつか前に書いてなかったか。 俺も参考にさせてもらった。 今は忘れた。w
178 名前:デフォルトの名無しさん[sage] 投稿日:2009/08/12(水) 10:30:13
OutputDebugString使いまくる
179 名前:デフォルトの名無しさん[sage] 投稿日:2009/08/12(水) 10:38:37
>>175 現状では各スレッドに固有の番号を持たせて(多少面倒だがThreadId等でもいい)、
条件付きブレークでその番号をセットすれば任意のスレッドだけブレークさせることが可能
180 名前:175[sage] 投稿日:2009/08/12(水) 13:48:14
>>178-179 、レスありがとうございました。
Delphiがフリーズせずにデバッグできるようになりました。
勉強になりました。
if文の書き方で if A=B then・・・・・・・・@ if C=D then・・・・・・・・・T E:=F; else if A<B then・・・・A E:=G else A>B then・・・・・・B E:=H; @ABを条件分岐のグループで@の時だけ、入れ子のifを実行するつもりなんですが、 どうも、DelphiはTとABをグループと見るみたいで 「E:=F;」 の「;」がだめってコンパイルエラーが 出ます。 begin〜endで囲んでいけば欲しい動きにはなるのですが、単純な構文なので無意味に行数を増やしたくないのですが、 ifの中にifを入れる時はbegin〜endで囲むのがルールなんでしょうか?
インデントしたつもりがされなかったです。 これでどうだ if regCurrent=Current then if lblCurrent.Font.Color=clWhite then lblCurrent.Font.Color:=clYellow; else if regCurrent<Current then lblCurrent.Font.Color:=clRed else if regCurrent>Current then lblCurrent.Font.Color:=clLime;
素直に begin end でくくれ。
>>705 余計な話ですが、最後のelse、意味通りのインデントになってる?
; が文の終わりを表す C 系の規則と ; が文の区切りを表す Algol/Pascal の規則の差なのですが、 そういう物だと納得して先に進む方が賢いです。 それとネストした if/else 構造は、どの言語でも分かりにくい表記をすることができる物で、 C 言語でも if (A) if (B) process1(); else process2(); // A に対する else ? B に対する else ? さらに変なインデントがついていたりすると、予想外のミスを呼び込むかもしれません。 20年くらい前の構造化言語の導入時には、else がどの if に対応するべきかが議論対象になり、 else にオプションをつけて対応する if を(必要な時は)明示指定したらどうか?という試験的な言語も存在しました。 現在は、単純に直近の if を対象にする。という規則が一般的です。 数行を惜しんで分かりづらくするよりは、begin - end を明示的に入れてあげた方がコードの保守性という見地からも 得策でしょう。 なお、「else は直近の if に対応する」というルールを使って空の else 節を挿入する。というトリックもあり得ます。 if A=B then if C=D then E:=F else else if A<B then E:=G else if A>B then E:=H; これが「美しい」「わかりやすい」かどうかは、また別の話ですね。
皆さん、ありがとうございます。 基本的には begin〜end は保守性の面から入れるのですが 今回の質問のような単純で短い構文で、狙った動きにならないので びっくりしたのと納得できなかったので質問しました。 >直近のifに対応する こんな規則で動いていたんですね。 納得しました。 ありがとうございました。
綺麗さ、かつ Pascal の特性を活用するなら、入れ子関数を作って、 関数名をコメントがいらないくらい分かりやすいものにしてしまう。 というのも実用性の高い手法です。 新しめの処理系なら、日本語関数名も使えますしね。 procedure SetFontColor(originalColor, modifiedColor: TColor) begin if lblCurrent.Font.Color = originalColor then lblCurrent.Font.Color:=modifiedColor; end; if regCurrent=Current then SetFontColor(clWhite, clYellow) else if regCurrent<Current then lblCurrent.Font.Color:=clRed else if regCurrent>Current then lblCurrent.Font.Color:=clLime;
なるほど。 ちょっとの手間でスマートですね。 まだ、この辺の手間をかけた方が後々いいのか、どうかの判断が 出来ないレベルなので参考にさせてもらいます。
>>697 ,702
ありがとうございます。
ググりつつコピペしつつ改変しながら
http://eggrice.no.land.to/up/src/tohoh0403.txt と言うふうに書いてみたんですが、
二度目に起動したときに前のウィンドウがアクティブになるだけで
メッセージの処理は行われませんでした。
winexpでメッセージ監視してみたら
TMainFormじゃなくてTApplicationにメッセージが飛んでいたので
これが問題かな?と思ってFindWindowでハンドル取得してみてもうまくいきませんでした。
どこか間違えているでしょうか?
>>704 これあきらかにおかしいじゃん
if A=B then if C=D then E:=F; ここまで1行とコンパイラは理解するから次の else if が文法上間違い
質問が紛らわしくてすんません。 @ABの条件分岐のつもりで、@の時にTを実行する意図なのですが 「F;」の「;」を取ると TABがグループと認識して@の入れ子と処理されてしまいます。 Tは単独のif文にする意図で「;」を付けるとコンパイルエラーになるので 「何で?」と言う意味でした。
だいじょうぶ。意図を理解している人もいるよ。
自作アプリをプログラムから最小化してタスクバーに入れるにはどうすればいいですか。 WindwStataだとタスクバーの上に表示されてしまいます。
717 :
716 :2010/05/21(金) 17:07:39
出来ました。
Continueってバグを起こしますか? for i:=0 to max do begin if hoge then begin continue; end; end; デバッグしているとi = maxの時にcontinueが実行されるとループが進んでしまうのですが・・・
あなたの頭がバグを起こしているだけです
デバッグしろ
max-1が正しかったという罠
マルチスレッドが存在するかしていないかって、分かる関数とかってあります? Createした時に覚えておいて、解放する時はメインの方から明示的にFreeするしかないんでしょうか?
>718 ブロック内で、変数Iを使っていないので、最適化されて減少カウンタとして利用されている予感。
>722 スレッド終了時に自分で自分を解放 >718 >723のいうとおりだと思う。コンパイルオプションで最適化を外すとデバッグしやすくなる。
最後に判定しに行くだけだろ? Cで書けばfor(i=0;i<=max;i++)なんだからmaxの次に判定があるのは当たり前 アホか
>>722 一応IsMultiThreadってグローバル変数が存在してるけど。ソースみりゃわかるけど、
直接Win32のCreateThreadとか呼んだら駄目ぽだけど。BeginThreadかTThreadクラスだけを
使ってる場合だけオk。
ああでも、ダメポそうだな。ごめん。
>>722 WaitForと言うのがあるらしい。
使い方は分からない。
お知恵をお借りしたいのですが。
今、複数起動が前提のアプリを作っているのですが、
一斉に最小化や復元をしたいと思って共有メモリを
使うところまでは出来たのですが、例えば一斉に最小化の場合は
メニューをクリックされたソフトで共有メモリに「1」を入れる。
他のソフトはその「1」がたったかどうかで最小化すればいいのですが、
お知恵を借りたいのは「1」をどのタイミングで「0」にすればいいかです。
全部が最小化されたかどうかを知るにはどうすればいいかって事です。
考えたのは複数起動した数を共有メモリに記録しておいて、メニューをクリック
されたら「1」ではなく、起動数を入れて(例えば「10」)で最小化したら
-1 していくと言うやり方です。
他にもっとスマートなやり方があれば教えて下さい。
HWND_BROADCAST
e?
731 :
728 :2010/05/26(水) 14:07:31
レス、ありがとうございます。 >HWND_BROADCAST ググってみます
732 :
728 :2010/05/26(水) 18:53:43
ググったけど、よう分からんかったです。 SendMessageやPostMessageでHWND_BROADCASTを送ると 関係ないアプリまで最小化や終了をさせてしまうことになりませんか?
RegisterWindowMessageって知ってるか?
>>733 > RegisterWindowMessageって知ってるか?
おぉ、ありがとうございます。
ググって来ました。
確認させて下さい。
例えば、WM_APP+100は一斉に最小化、WM_APP+101は一斉に終了みたいに決めておいて
アプリ起動時に
RegisterWindowMessage(WM_APP+100);
とかやって登録して
一斉に最小化させたい時は SendMessage(HWND_BROADCAST , WM_APP+100 , 0 , 0);
とやればいいって事ですか?
受け取りは WndProc(ググった先で出てきたので、よく分かってないです。)を使って送られて来た
メッセージによって処理する
こんな感じで良いでしょうか?
RegisterWindowMessageの引数は文字列 RegisterWindowMessage(自分だけの文字列) ↓ SendMessage(HWND_BROADCAST, RegisterWindowMessageの戻り値, ここ, とここは自分で決めて振り分ける);
736 :
728 :2010/05/27(木) 00:41:49
>>735 思い通りの動きが出来ました。(;゚∀゚)=3
ありがとうございました。
var Form1: TForm1; days:double; procedure TForm1.Button1Click(Sender: TObject); begin days :=VarToDateTime('28/5/2010') - VarToDateTime('27/4/2010'); showmessage(FloatTostr(days)); end; これは2010年4月27日と2010年5月28日の日数の差として「31」が表示されます こんな感じで2010年4月27日から31日経つと「2010年5月28日」のような処理をしたいのですが、どうすればよいのでしょうか? 要はTDateTime 型から日付を求めたいのです
738 :
737 :2010/05/29(土) 00:01:44
ごめんなさい自己解決しました
>>712 ですが、
結局TMainFormというインスタンス名が他のアプリケーションで使われていたようでうまくいかなかったので
メッセージ受信専用ウィンドウを利用する方法を使いました。
メッセージ用ウィンドウプロシージャは
特定のメッセージがきたときだけMainFormにDispatchするようにして
あとはDefWindowProcに渡すようにしたのですが、
処理としてはあっているのでしょうか?
初めはディスパッチのみでDefWindowsProcを呼び出さずにしていたら
終了時にエラーがでました。
名前変えればいいだけじゃ・・・
下のソースをJavaに移植したいのですが、内容が理解できなくて困っています。 下から7行ほど前からが理解できないので・・・、別言語に書き換えて教えて頂けないでしょうか? java, c, perl , php, vb, javascript 辺りの書き方であれば理解できます。 function EncodeB32(s: String): String; const B32Char: array[0..31] of Char = ('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F', 'G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V'); var i: Integer; len: Integer; begin if s = '' then begin Result :=''; Exit; end; len := (Length(s) * 8 - 1) div 5 + 1; s := s + StringOfChar(#0, (len * 5 - 1) div 8 + 1 - length(s)); SetLength(Result, len); for i:=0 to len - 1 do Result[i + 1] := B32Char[(MakeWord(Byte(s[(i * 5) div 8 + 1]), Byte(s[(i * 5) div 8 + 2])) shr ((i * 5) mod 8)) and 31]; end;
BASE32 だから、検索すれば仕様書があるはず。仕様書から作ったほうが早いよ。私はCで作った。 function EncodeB32(s: String): String; const B32Char: array[0..31] of Char = ('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F', 'G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V'); var i: Integer; len: Integer; begin if s = '' then begin Result :=''; Exit; end; len := (Length(s) * 8 - 1) div 5 + 1; s := s + StringOfChar(#0, (len * 5 - 1) div 8 + 1 - length(s)); SetLength(Result, len); for i:=0 to len - 1 do Result[i + 1] := B32Char[(MakeWord(Byte(s[(i * 5) div 8 + 1]), Byte(s[(i * 5) div 8 + 2]) ) shr ((i * 5) mod 8) ) and 31]; end;
Javaならライブラリあるだろうに。
744 :
デフォルトの名無しさん :2010/06/06(日) 21:39:03
あれ、関数名はBase32だったので、そう思って組んでみたんですが、結果が違ったので・・・
1. そのソースコードが使われいるexe
$ exec "1c68ee574965514ec9c27a57972719ea"
4NDXFOSLFKFHMTQT2K6LSOGPK
2. Base32エンコード
$ echo "1c68ee574965514ec9c27a57972719ea" | java Base32encode
S0QSUB595BKSK4B0QRLEPJ43A7
>>742 整形ありがとうございます。
やってることは似てそうなんですが、定数が違ってそうなのでもう少し弄ってみます。
4NDX と、X が出てくる理由が不明だ。 B595 と、9 が出てくる理由が不明だ。 こうなるはず、 8bit区切り 1c 68 ee 57 49 65 51 4e c9 c2 7a 57 97 27 19 ea 5bit区切り 3 11 14 E 1C 15 1A 9 C 15 8 14 1D 12 E 2 F 9 B 19 E 9 18 19 1D 8
Base32(WXYZが使われてる)と、Base32hex(0189が使われてる)があるそうですね。
面白そうなので作ってみたら
>>746 と同じ結果に。
Base32: DRUO4V2JMVIU5SOCPJLZOJYZ5I======
Base32hex: 3HKESLQ9CL8KTIE2F9BPE9OPT8======
>>745 と全然違うなあ。
しかしBase32って超マイナーですね。
748 :
748 :2010/06/07(月) 20:34:22
> 1. そのソースコードが使われいるexe
> $ exec "1c68ee574965514ec9c27a57972719ea"
> 4NDXFOSLFKFHMTQT2K6LSOGPK
>
アナタの自作プログラム↑ソース↓
http://pc12.2ch.net/test/read.cgi/tech/1274617383/328 >
> 2. Base32エンコード
> $ echo "1c68ee574965514ec9c27a57972719ea" | java Base32encode
> S0QSUB595BKSK4B0QRLEPJ43A7
こっちのソース、またはソースのURLくれ。
749 :
748 :2010/06/07(月) 22:36:19
shr ((i * 5) mod 8)) and 31]; ↓に変更(再コンパイル可能なら、だけど) shr (11 - ((i * 5) mod 8))) and 31];
S0Q..L..はナンチャラは何なの?という疑問 0とL が混じってる。
1.Base32HEX エンコードだけをしてもこの値にはならないので、
その部分だけのDelphiでは足りない。ソースは受け取ったが、
ソース全部読む必要があるので、時間と人手がいる。
> nghash.exe "1c68ee574965514ec9c27a57972719ea"
S0QSUB595BKSK4BOQRLEPJ43A7
2.Base32HEX エンコードだけのソースなら、ネット検索すればあるはず。
1.に関連して、
>>749 はバグだと思ったけど、そのソースを生かすなら
Base32HEXではない。逆にその部分だけを修正すればBase32HEX のソース
を直せばいい。
また、
>>749 shr の使い方を誰かDelphiで合ってるか確認してほしい。
752 :
747 :2010/06/08(火) 10:53:30
>>750 やっぱり。どうも変だなと思ってた。あと、ソースの頭にしっかり
//5bitエンコーディング関数 Base32ではない。
って書いてあるじゃない。最初は見落としてたの?
>>751 >>741 の function EncodeB32 だけでちゃんと
S0QSUB595BKSK4BOQRLEPJ43A7
になるのを確認したので、これはBase32でもBase32hexでもないと思います。
>また、
>>749 shr の使い方を誰かDelphiで合ってるか確認してほしい。
どう確認すればいいのか分かりませんが、そこだけ差し替えたら
D0N6FIA5A575IGMQATBLF69A03
になりましたよ。
Delphi始めて数ヶ月の初心者が頭突っ込んでスマソでした
いやいや、可能性が無いなら参考になった。
>>752 以下の修正で目的の文字列になった。
参考になるURLがどこかに有ると思うが省略させてもらう。
MakeWord(byte1,byte2) の定義は byte1 | byte2 << 8
それと、shr ((i * 5) div 8)
BASE32の場合は
MakeWord(byte1,byte2) の定義を以下にする byte1 << 8 | byte2
それと、shr (11 - ((i * 5) div 8))
#include <stdio.h> #include <stdlib.h> #include <malloc.h> char*EncodeB32(char*s){const char B32Char[32]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K' ,'L','M','N','O','P','Q','R','S','T','U','V'};int i,len;char*sa,*Result;if(s==NULL||*s==(char)NULL){return NULL;}len=(strlen(s)*8- 1)/5+1;sa=s;Result=calloc(len+1,1);for(i=0;i<=len-1;i++){Result[i]=B32Char[(((sa[(i*5)/8+0]&0xFF)|(sa[(i*5)/8+1]&0xFF)<<8)>>(((i*5 )%8)))&31];}return Result;} int main(void){char*ans;ans=EncodeB32("\x1c\x68\xee\x57\x49\x65\x51\x4e\xc9\xc2\x7a\x57\x97\x27\x19\xea");if(ans)puts(ans);free(ans);}
755 :
747 :2010/06/08(火) 23:02:43
私も勉強がてらJavascriptに翻訳してみました。
出来る限り元ソースに忠実にしました。
http://ideone.com/bNeGf DelphiもJavascriptもよく分かっていない初心者が書いてるので、激しいツッコミはご容赦下さい。
一応、ブックマークレット版。もちろん、末尾改行は全部除去して使ってね。
Javascript:function EncodeB32(s){function StringOfChar(C,N){var I,Z='';for(I=1;I<=N;++I)
{Z+=C;}return Z;}function MakeWord(H,L){return H|L<<8;}var i,len,B32Char=['0','1','2','3',
'4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V'],
Result=[];if(s==''){return '';}len=(s.length*8-1)/5+1;s+=StringOfChar('\x00',(len*5-1)/8+1-s.length);
for(i=0;i<=len-1;++i){Result[i+1-1]=B32Char[(MakeWord(s.charCodeAt((i*5)/8+1-1),
s.charCodeAt((i*5)/8+2-1))>>>((i*5)%8))&31];}return Result.join('');}
function HexToStr(H){var I,Result='';for(I=0;I<=H.length/2-1;++I)
{Result+=String.fromCharCode(parseInt(H.substr(I*2,2),16));}return Result;}
alert(EncodeB32(HexToStr('1c68ee574965514ec9c27a57972719ea')));
普段はごく簡単なブックマークレットしか作らないので、functionすら滅多に使いません。。。
756 :
747 :2010/06/09(水) 07:20:10
DelphiスレなのにJavaやらCやらJavascriptもなんなので、
ideone.comのPascal(FPC:Free Pascal)でDelphiできるか?試してみました。
http://ideone.com/5Q6ky 結果:プログラム本体の書き換えは一切せずに動作しました。
追加したこと
1. コンパイラモードをDelphi互換に指定 → {$MODE DELPHI}
2. Uses節を追加、StrToIntのためにsysutilsを指定
3. function MakeWordをWindows.pasからパクってきた
以上、初心者の研究コーナーでした
スレ汚しまくってスマソ
>>756 君は毎回誤るんかい。
>>745 S0QSUB595BKSK4B0QRLEPJ43A7 誤り
S0QSUB595BKSK4BOQRLEPJ43A7 正しい
だね?
右から左への場合は入力を5の倍数ワード、出力を8の倍数にしなければならないが、
Base32HEX (WXYZを使わない) でエンコードする場合。
Base32を使って、左から右に5ビットで区切ってエンコード
1 c 6 8 e e 5 7 4 9 6 5 5 1 4 e c 9 c 2 7 a 5 7 9 7 2 7 1 9 e a 0 0 0 0 0 0 0 0
3 11 14 E 1C 15 1A 9 C 15 8 14 1D 12 E 2 F 9 B 19 E 9 18 19 1D 8 0 0 0 0 0 0
3HKESLQ9CL8KTIE2F9BPE9OPT8
Encode32を使って、左から右に5ビットで区切ってエンコード
1 c 6 8 e e 5 7 4 9 6 5 5 1 4 e c 9 c 2 7 a 5 7 9 7 2 7 1 9 e a 0 0 0 0 0 0 0 0
1C 0 1A 1C 1E B 5 9 5 B 14 1C 14 4 B 18 1A 1B 15 E 19 13 4 3 A 7 0 0 0 0 0 0
S0QSUB595BKSK4BOQRLEPJ43A7
Base32を使って、右から左に5ビットで区切ってエンコード
0 0 0 0 0 0 0 0 e a 1 9 2 7 9 7 5 7 7 a c 2 c 9 4 e 5 1 6 5 4 9 5 7 e e 6 8 1 c
0 0 0 0 0 0 7 A 3 4 13 19 E 15 1B 1A 18 B 4 14 1C 14 B 5 9 5 B 1E 1C 1A 0 1C
0000007A34JPELRQOB4KSKB595BUSQ0S
Encode32を使って、右から左に5ビットで区切ってエンコード
0 0 0 0 0 0 0 0 e a 1 9 2 7 9 7 5 7 7 a c 2 c 9 4 e 5 1 6 5 4 9 5 7 e e 6 8 1 c
0000008TPO9EPB9F2EITK8LC9QLSEKH3
0 0 0 0 0 0 8 1D 19 18 9 E 19 B 9 F 2 E 12 1D 14 8 15 C 9 1A 15 1C E 14 11 3
758 :
こまった?? :2010/06/09(水) 11:40:16
Delphi5 から Delphi2010 に一気に移行したものですが、 たとえば、 TMemo などの既存コンポーネントを継承して、 新しいコンポーネントを作成したとき、 TEST用プロジェクトで動作確認はできるのですが、 いざ、コンポーネントタブ(たとえばsample)に登録しようとしたとき Delphi5にはあった「コンポーネント」=>「コンポーネントのインストール」 メニューがDelphi2010メニューにありません。 どうやってインストールするのでしょうか? それとも、プロフェッショナル版ではできない?
TOpenDialogとかにボタンを追加したいときはどうするべきなのでしょうか。
TOpenPictureDialogのコードが参考になると思う。
Synchronizeで実行するプロシージャーで引数が使いたい時って皆さんはどうしていますか?
匿名メソッドでいいじゃん
>>762 そのためにわざわざフィールド変数を用意して、それ経由してる。
mixiにログインして情報をとってくるようなアプリケーションを作りたいと思っています。
そこで、TIdHTTPコンポーネントを使用してログイン部分をいま作成中なのですが、Cookieが無効
になっているため、ログインできませんと言われてしまいます。
(
http://mixi.jp/check.pl?n=%2Fhome.plが返ってくる )
TIdHTTPコンポーネントのCookieManagerには該当のTIdCookieManagerを指定し、
AllowCookiesはtrueの状態にしています。
IdHTTP1.Postの第一引数は以下の通りです。
'
http://mixi.jp/login.pl '
IdHTTP1.Postの第二引数にはstringlistで以下のようなデータを渡しています。
'next_url=/home.pl'
'email=メールアドレス'
'password=パスワード'
TIdHTTPコンポーネントを使用して、mixiへのログインに成功した方、どのようにされたかアドバ
イスいただけないですか?
オミトロンとかLiveHTTPHeaderなんかで ブラウザでログインしたときの状況を確認したほうが早いと思ふ
>>764 無名メソッドを使えば、わざわざフィールド変数を用意する必要はない。
http://edn.embarcadero.com/article/39701 procedure TNewThread.Execute;
var
i: Integer;
A,B: Integer;
begin
{ スレッドとして実行したいコードをここに記述してください }
for i := 0 to 99 do
begin
A := Random(10000);
B := Random(10000);
Synchronize(procedure
begin
Form1.Memo1.Lines.Add('NT : ' + FormatFloat('#,##0',A-B));
end);
end;
end;
768 :
765 :2010/06/11(金) 11:26:33
ssl だったり?
770 :
769 :2010/06/11(金) 11:43:19
771 :
765 :2010/06/11(金) 12:00:48
>>769 C#とかのサンプルみる限りはSSLじゃなくてもログインできるようなんですよね。
Indyの情報すくなすぐる・・・泣ける・・・。
Indyは自力でソース見て解決できないバカが使うものじゃないから、 おとなしくTWebBrowserを操作してログインしておけ
cookiemanagerにsessionはいってるのか?
url := '
http://mixi.jp/login.pl ';
contents := TStringList.Create;
contents.Text := 'next_url=%2Fhome.pl&email=hogehoge%40yahoo.co.jp&password=00000000&x=0&y=0';
res := IdHTTP1.Post(url, contents);
で実行したら
<html><head><meta http-equiv="refresh" content="0;url=/check.pl?n=%2Fhome.pl"></head></html>
が返ってきた。
たぶんこれが成功じゃないかな。
LiveHTTPHeadersからコピペしたからエンコード済みの文字列だったから
IdHTTPのHTTPOptionsのhoForceEncodeParamsはFalseにしたけど。
クッキーマネージャは何もいじってないよ
777 :
デフォルトの名無しさん :2010/06/11(金) 20:46:20
DSPack 2.3.3 destructor TFilterGraph.Destroy; var i:integer; begin SetActive(False); DeallocateHWnd(FHandle); if FFilters<>nil then//追加2010.06.11 FFilters.Free; FGraphEvents.Free; //追加2010.06.11 inherited Destroy; end; destructor TDSVideoWindowEx2.Destroy; begin FFullScreenControl.Free;//追加2010.06.11 if DesktopPlayback then NormalPlayback; if FDDXM <> nil then FDDXM.SetCallbackInterface(nil, 0); OverlayCallback := nil; FOverlayMixer := nil; FFilterGraph := nil; FVideoWindow := nil; FVideoRenderer := nil; FCaps.Free; FColorControl.Free; inherited Destroy; end;
778 :
デフォルトの名無しさん :2010/06/11(金) 20:52:58
>>777 続き
procedure TDSVideoWindowEx2.ClearBack;//変更2010.06.11
var
DC, MemDC: HDC;
MemBitmap, OldBitmap: HBITMAP;
BackBrush, OverlayBrush: HBrush;
begin
*
*
*
finally
SelectObject(MemDC, OldBitmap);
DeleteDC(MemDC);
DeleteObject(MemBitmap);
DeleteObject(BackBrush);
DeleteObject(OverlayBrush);
ReleaseDC(Handle, DC);
end;
上記を下記の順番に変更
finally
DeleteObject(OverlayBrush);
DeleteObject(BackBrush);
ReleaseDC(Handle, DC);
SelectObject(MemDC, OldBitmap);
DeleteDC(MemDC);
DeleteObject(MemBitmap);
end;
end;
TStringListのSaveToFileって同時に同じ名前のファイルで行われると共有違反とか起きますか?
起きる起きない以前にそんなクソコード書かないで下さい
「同時に」の意味は?本当に同時にはできないから、先にSaveToFileしたほうは 成功して、後のほうは失敗するんだけどね。
あとの方で上書きされると思ってたが違うのか?w
><html><head><meta http-equiv="refresh" content="0;url=/check.pl?n=%2Fhome.pl"></head></html> >が返ってきた。 >たぶんこれが成功じゃないかな。 ミクシィに詳しくない俺でもこれは失敗だとわかる・・・ リファラが不足してるかもしれないよ サーバーがクライアントを蹴る理由は UA、リファラ、IP、クッキーのいずれか
785 :
781 :2010/06/12(土) 18:23:37
>782 ああ、先のほうの保存が終了てから後の保存が行われるならその通りだね。 「同時に」って言葉に引っぱられすぎだ。
>>784 失敗したときは違うHTMLがかえってくるよ。
check.plを経由してhome.plにいくみたい。
ミクシィに詳しくない俺でもこれは失敗だとわかる・・・(キリッ うわあ・・・これは恥ずかしい こいつに足りないのはリファラじゃなくて頭だな
>UA、リファラ、IP、クッキーのいずれか 他のヘッダで弾いてるところもいっぱいあるよ 成功したかどうかの確認は帰ってくるURLとかじゃなくてクッキー見たほうがいい
オミトロンなりWireSharkなりを使って、ブラウザで認証OKだったときの挙動をキャプチャしてみると 何か見つかると思うよ。
procedure TForm1.Button1Click(Sender: TObject); begin Timer1.Enabled := true; Timer2.Enabled := true; end; procedure TForm1.Timer1Timer(Sender: TObject); var sl : TStringList; begin sl := TStringList.Create; with sl do begin clear; add(TTimer(sender).Name); savetofile(extractFilepath(Application.ExeName)+'test.txt'); free end; sl := nil; TTimer(sender).Enabled := false; end; 保存されたテキストの中身はTimer1だった
さすがにTimer使っといて同時はねーだろ。別スレッドとか別プロセスじゃないと。 同一スレッド上ではシーケンシャルにしか処理は動かないんだから。
いやそうじゃなくって・・・
>>791 だから中身はtimer2になるはずでしょ?
間違ってたらスマンが。
>>793 Timer1のイベントが先に実行されるって決まってるんですか?
無知なのは別にいいがそれをあたかも常識のように言うのはやめていただきたい
Timer2のイベントが存在していないのに、Timer2になるって脳内お花畑か。 まあそれより、ず〜っと以前の問題なんだけどな。
えっ?
イベントはTimer1とTimer2で共有ってことだろ。
>>794 決まってないと思うが、どちらのタイマイベントが先に発生するにせよ、
そのイベントハンドラの実行は同時に実行される事はない。だから、
後の方で上書きされるだけ。
タイマー使ってもマルチスレッドにはならんよ。
↑ 明らかな間違いだぜ イベントが共通だったとしても Timer2になることは無いのだよ。 ヒント:タイマーはひとつだけ!
1個のformには1個のTimerしか使えない。理由はWindowsの仕様だから。 ハイ、次の質問。
>>800 では次の質問。
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Memo1.Lines.Add((Sender as TTimer).Name);
end;
Timer1とTimer2が交互に追加されて表示されるのですが、なぜですか?
うそはよくない。TTimerは別々にウィンドウを保持してるので独立して動作する。 ただしメッセージループが動作していないといけないし、Windowsのタイマはもともと 指定時間を経過したことを示すフラグなのでそのあたりも注意が必要だが。
>>790 ファイル保存するときに排他処理やってないとかいうオチ?
806 :
756 :2010/06/14(月) 12:02:13
みなさん、レスありがとうございます。 あれから色々やってみたのですが、相変わらず <meta http-equiv="refresh" content="0;url=/check.pl?n=%2Fhome.pl"> が返ってきます。 今はLive HTTP headersを火狐に入れて、正常にログインできたときの情報を確認しています が、オミトロンを使用し、ブラウザとIdHTTP両方で確認してみます。 Indy使ったことがないので、勉強がてらやってみたのですが、俺にはてごわすぎる・・・。
それが正しいんじゃないの? ほんとにブラウザの動きを確認してる?
>>806 ブラウザの動き的にはそれであってるんじゃないの?
次にそのHTMLから/check.pl?n=%2Fhome.plにアクセスして
その次にhome.plに行けば成功じゃない?
>765
漏れはこれで成功してる
MixiURL = '
http://mixi.jp/ ';
MixiLoginURL = MixiURL+'login.pl';
・
・
・
IdHTTP1.CookieManager.CookieCollection.Clear;
{ ==> Login }
PostData.Add('next_url=/home.pl');
PostData.Add('email='+email);
PostData.Add('password='+passwd);
PostData.Add('x=0');
PostData.Add('y=0');
IdHTTP1.Post(MixiLoginURL,PostData,Req);
そうすると
IdHTTP1.CookieManager.CookieCollection
に
SESSIONとSTAMPがセットされる。
あとは普通に他のページを取得できる
811 :
765 :2010/06/15(火) 11:30:14
>>810 コードの具体例ありがとうございます!
x=0とy=0を765のコードに加えpostしたところ、
IdHTTP1.CookieManager.CookieCollection.Cookie['BF_SESSION','mixi.jp'].Value
と
IdHTTP1.CookieManager.CookieCollection.Cookie['BF_STAMP','mixi.jp'].Value
に値が入っている事が確認できました。
が、この状態でIdHTTP1.Get('
http://mixi.jp/home.pl ')を行ったのですが、ログイ
ン前の画面しか取得する事ができませんでした・・。
(ログインされていない状態)
もしよければ、最初のpost以降どのようなロジックでログイン後の画面を取得され
ているかアドバイスいただけないでしょうか?
>>811 もう数年前のコードで、内容をすっかり忘れてるし、今のmixiにログインできるかどうかすら解らないです
暇になったらDebugしながらどうなっているか確認してみます
が、期待しないでね
>>812 OSをWindows7にした時にDelphiをインストールし直したらコンポーネント不足でもうコンパイルすら出来なくなってたorz
なので自力で頑張ってくれ
確認だけどPostしてCookieもらってGetする前に
IdHTTP1.Request.ContentType:='';
ってやってる?
それくらいかな?
ほんとにCookieもらったあとは読みたいページを直で読みに行ってるだけだから
>>813 即興で作ってみた。
これでMemo1にはhome.plの内容が出ました。
procedure TForm1.Button1Click(Sender: TObject);
var
email:String;
passwd:String;
Buf:String;
PostData:TStringList;
Req:TStringStream;
begin
PostData:=TStringList.Create;
Req:=TStringStream.Create('');
IdHTTP1.CookieManager.CookieCollection.Clear;
email:='メールアドレス';
passwd:='パスワード';
>>814 続き
{ ==> Login }
PostData.Add('next_url=/home.pl');
PostData.Add('email='+email);
PostData.Add('password='+passwd);
PostData.Add('x=0');
PostData.Add('y=0');
IdHTTP1.Post('
http://mixi.jp/login.pl?from=login1 ',PostData,Req);
IdHTTP1.Request.ContentType:='';
Buf:=IdHTTP1.Get('
http://mixi.jp/home.pl ');
Memo1.Text:=Buf;
PostData.Free;
Req.Free;
end;
816 :
765 :2010/06/15(火) 13:54:33
>>814 コードありがとうございます。
が、なぜか同じコードを実行してみても、自分の環境ではログインされていない状態になるよう
です(ユーザー名とパスワード入力画面が表示される)。
TIdHTTP1でcookieを扱うために特にしなければいけない事はTCookieManagerの登録以外に
何かありますでしょうか?
うーん、まだPOSTしきれていない情報があるのか・・・?
>>816 一度新規にProjectを作ってやってみたらどうですかね?
と言うのは、IdHTTP等のプロパティの値が違うと取得できないケースがあります
ちなみに私のコードはDelphi起動、Project作成後に何も考えずにコンポーネントをペタペタやっただけです。
ちなみにDelphi2007です。
818 :
765 :2010/06/15(火) 18:06:06
>>817 新規で作ってみましたが、やはりログイン前のmixi.jp/home.plの画面が表示されますね・・。
(パスワードとIDの入力画面)
postでIDとパスワードを送っているにもかかわらず、ログインできていないという事か・・?
ちなみにIndyはD2009/2010版の最新のものを入れています。
>>818 Delphi2010はStringのエンコードがややこしいので普段使ってないのですが、Delphi2010でやってみたけど出来ました。
何が違うんでしょうね
頭・・・ですかね
他のアプリのウィンド内の文字列を取得するアプリを作っているのですが、 文字列を取得する時に、そのウィンドがアクティブになっていれば正常に取得できるのですが、 非アクティプの時に取得しようとすると ?Main と言う文字列が返ってきます。 目的のウィンド内の別のところの文字列は非アクティブでも取得できます。 どういう情報を書けばいいかよく分からないので、分かりにくい質問とは思いますがよろしくお願いします。
なんてソフトの どんなところを どうやって取得しているのか?
826 :
デフォルトの名無しさん :2010/06/16(水) 23:01:31
VCLベースアプリの可能性が高い感じ。 メインフォームの他に隠しウィンドウ持ってるから。
827 :
765 :2010/06/17(木) 10:24:12
>>819 、820
ひとつ確認させてください。
同じhome.plでもログイン前とログイン後の両方があります。
みなさんはログイン後のhome.plが表示されましたか?
828 :
765 :2010/06/17(木) 10:28:55
ちなみにログイン前のhome.plだった場合、getで取得された情報の中に、「いますぐ利用す る(無料)」や「すでに登録済みの方は、こちらからログインしてください」などの文字列が 入っています。 ログインされていない状態のhome.plですね。 俺がやると、なぜかこっちになるんだよね・・・。
いい加減、httpでアクセスして自分の送ってるパケットぐらい調べろ httpsonlyだったり正常ならレスポンス時のカスタムヘッダを列挙しろ それも駄目ならリクエスト時のカスタムヘッダに直接クッキー押し込め それでも駄目ならアカウントが死んでる クッキーコレクションだったか?あれはヘッダからクッキーを抜いて保持しとくだけの物なんだよ 使えなかったら直接ヘッダにぶち込め つかな、もうこれdelphiスレで何度も何度もいってるんだよ デバッグが出来ないならネットワークのプログラミングはやるな つかRFC読んで仕組みを勉強しろ!
↑ スレタイさえ読めないおバカさんですか? このスレのタイトルは、 くだすれDelphi(超初心者用)その51 >Delphi(デルファイ)について、他のスレッドでは書き込めない超低レベル、 >もしくは質問者自身何が何だか分からない質問を >勇気を持って書き込むスレッドです。 >Delphi使いが優しくコメントを返しますが >お礼はDelphiの布教と初心者の救済をお願いします。
>>829 不快にさせて、申し訳ございません。
いままでの思考錯誤をまとめると。
httpでアクセスした際のパケッットはLive HTTP Headersで取得し、POSTしているデータは
next_url/email/password/x/yであると確認済みです。
受け取るcookieはBF_SESSION/BF_STAMPで、CookieManagerに入ってきている事も確認
しました(cookieの値は同じものであると確認)。
IdHTTP1.Request.CustomHeaders.Add('Cookie:BF_SESSION=' + BF_SESSIONの内容);
IdHTTP1.Request.CustomHeaders.Add('Cookie:BF_STAMP=' + BF_STAMP);
で、Cookieをヘッダーに送ったりもしていますが、やはり同じ結果(ログオンされていない状態に
なる)になるのです・・・。
ログインからの流れとしては
ttp://www.atmarkit.co.jp/fdotnet/dotnettips/326cookie/cookie.html を参考にしています。 受け取ったcookieを持ってれば認証が必要なページにアクセス可能になる
ようですので、当方のCookieManagerの使い方がおかしいのか?と悩んでいるところです。
(他の方は成功しているようですので)
プロジェクト一式上げろよ
833 :
デフォルトの名無しさん :2010/06/18(金) 10:56:15
エクセルのファイルそのものを削除するにはどうすればいいのか誰か教えてくれないか DeleteFile('C:\ファイル名'); でやるとTXTファイルなら削除できるのにエクセルだとなぜか削除されないんだ・・・
834 :
デフォルトの名無しさん :2010/06/18(金) 11:17:22
追記 別の名前で保存はできるが、名前を変更して保存(リネーム)もできない
D3のQuickReportのパッチのd3qrupd.lzhをお持ちの方居りましたらメールで送っていただけませんか? サポート終了と言うことで本家から落とせなくて困っています。
>>832 うpローダー探してのちほどうpしてみます。
今日午後〜火曜まで出張のため、来週半ばぐらいになるかもしれません。
837 :
833 :2010/06/18(金) 15:14:23
すみません。自己解決しました。お騒がせしました。
838 :
デフォルトの名無しさん :2010/06/21(月) 17:47:50
bitmapのことで質問させてください。 canvas.draw(intX, intY, 別のビットマップ) で画像コピーができることはわかったのですが、 これって受け手側の座標しか指定できないんですか。 100X100の大きさの受け手に対して、送り手の101, 201, 200, 300から 100X100だけ持ってくるにはどうしたらいいんでしょう。
ヘルプでTCanvasについて調べなさい
840 :
デフォルトの名無しさん :2010/06/21(月) 19:09:39
ありがとうございます。 メソッドにCopyRectってのがあったので、もしかしてこれかなと 思ってやってみたら、以下あっさりできました。 送り手.Canvas.CopyRect(Rect(0, 0, 100, 100), 受け手.Canvas, Rect(30, 30, 130, 130));
>>840 できたならいいけど受け手と送り手勘違いしてない?
あとDrawでもマイナス指定すればできるけど
ゲーム作っている人教えて。スーパーマリオなどのゲームって スクロールしたとき、マリオをも背景も再描写させてるの?
そもそも昔のゲーム機はPCとは異なる概念で描画してるから PCでは参考にならないと思うぜ 画面全体がタイル上に分割されていて、 どこにどのタイルを貼るかを指定する感じで描画する 背景は全体的にスクロールできて、 キャラは背景とは別に置けたんじゃなかったかな(所謂スプライト) GBAの知識だからFCやSFCくらい古くなるとどうなってんのか知らないが 最近のゲーム機なら毎回レンダリングしてるんじゃないの カメラが固定ならさぼってるかもしんないけど
最近、Delphi7のデータベースを使ったプログラムを作った時の 配布方法について教えて下さい。 データベースを使ったプログラム自体初めてなので、これから 本とか買って調べるのですが、データベースアプリってデータベースも含めて Zipとかで配布できますか? インストーラーとかよく分からないので、解凍して終わりな感じにしたいです。
Delphi は複数の DB 接続技術を利用できますから、あなたのアプリがどれを使うかによって 話は変わってしまいます。 まず、データベースアプリを作りましょう。 配布の話はそれからで十分だと思います。
>>845 答えてくれてありがとうなんだけど、ケチ付ける前に日本語読めるか?
これから調べて作るんだよ。
すっこんどけ。ヽ(`Д´)ノプンプン
>>846 了解しました。
あと、せめてどのデータベースにつなげたいのかくらいは書いてね。 そういうのもまだ決まっていないならどうしようも無いけど
849 :
844 :2010/06/23(水) 11:27:58
>>848 > あと、せめてどのデータベースにつなげたいのかくらいは書いてね。
> そういうのもまだ決まっていないならどうしようも無いけど
なにぶん、初めてでどのデータベースに繋げようかとか決まってないです。
一応、「Delphi DB&Webプログラミング」って本が手に入りそうなので、
それで調べようかなと思っています。
逆に、簡単に配布出来るものってあるんでしょうか?
デルファイでマリオ作ろうとしてるやつっておめでたいな・・・
>>849 何を構築しようとしてるのか知らないけど、多分、君にDBは必要無いと思うよ。
7をWindows7で使ってます。 TRicheditの背景色についてですが、 いったん表示されてから、Windowsのテーマ変更で背景色が変わった場合 TRicheditは背景色がclWindowに追随してくれません。(ほかにTTrackbarも) テーマ変更時のイベントを捕捉できればいいのですが、eventにはそれらしき ものが見当たりません。 ためしにonChangeイベントで reRichedit.color := clWindow; とやってみましたが、テーマ変更後の色に変わりませんでした。 いったんコンポごと消して再生成するしかないのでしょうか?
まぁ、確かに要らないかも何ですが・・・ あるデータを溜め込んで、andやorで抽出する必要があるんで 何かのデータベースを使った方が楽かと。 データリスト自前で作っても良いんですけどね。
・自分でフィルタリングするの面倒だからDB使う。 ・インストール面倒だからzipでファイルだけ配布。 ・調べるの面倒だから2chで丸投げ。
854 どれも立派な理由だと思います。
いやいや別に丸投げって、そんんぁ。 インストーラーみたいなのをやらないといけないかどうかだけだよ知りたいのは。 データベースによるわ、ヴォケ!ってなら ヾ(゚∀゚)ノ ハイ で終わり
リレーショナル DB である必要がなく、データ件数が高々数万でよいなら ClientDataSet を MidasLib ユニット経由で使えば、アプリケーションに 組み込み(追加の配布ファイルなし)で作れます。 一般の(リレーショナル)DB を使う場合には、そのサーバーそのもの以外に DB メーカー提供のミドルウェア(接続用 DLL)が必要になります。 多くの場合、アプリケーションと同じディレクトリに置けば動く場合が多いですが そうでない場合もあります。
858 :
856 :2010/06/23(水) 15:52:28
>>857 ありがとうございました。
調べる的が絞れました。
ちょいちょい挟んでくるAAがイラッと来るなw 分かってやってるのかもしれんが
朝から引っ込んで炉よ、クズβακα..._φ(゚∀゚ )アヒャ
861 :
デフォルトの名無しさん :2010/06/24(木) 16:06:04
SHFileOperationって、いわゆる非同期というやつなんでしょうか? 大量のファイル(フォルダ)をバックグラウンドでコピーするために FOF_SILENTを指定してSHFileOperationを使ってみたのですが、 処理が終わるまで画面が固まってしまいます。 そこで↓みたいなワークスレッドを作ってその中で実行させてみたのですが 今度はすべてのファイルがコピーされないまま、SHFileOperationから抜けて スレッドが終了してしまいます。 procedure TWorkThread.Execute; begin ShellAPI.SHFileOperation(ShellParam); end; こっち立てればあっち立たずな感じで困っています... こういうときにDelphiでうまい対処法みたいなものがあるのでしょうか?
862 :
デフォルトの名無しさん :2010/06/24(木) 17:10:41
Outlook Expressの保存フォルダ(dbxファイル)の場所を取得するには?
>>858 分かってるとは思うけどDBのライセンスに注意してね
付属のIntereBaseも再配布不可どころか開発専用のライセンスだし。
Delphiの場合だとIBX+組み込み版Firebirdが手っ取り早いと思うけど
うるせーハゲ^^
>>861 画面の見た目にこだわらないのであれば
処理の進捗を表示するフォームを作成してからCopyFileExを呼び出して、
コールバック関数内で画面を更新させる手もある
>>861 TSHFileOpStructのウィンドウハンドルに0を指定でいいんじゃね。
他のアプリのフォントの色を取得するにはどうすればいいですか? 目的のアプリのコントロール?のハンドルは取得できています。 GetDCでデバイスコンテキストを取得して、 Label1.Font.Color := GetTextColor(DC); みたいにしているんですが、「0」が返ってきてしまいます。 よろしくお願いします。
全く同じ質問を見たような気がするが気のせいか?
失礼しました。 675にアキラメロンがありました。
数年前にDelphi6をやっていてある程度マスターしていたのですが ひさしぶりにプログラミングをやろうとしたら全然状況が変わっていて どの言語をやろうか迷っています。 Delphi経験者が今から趣味でプログラミングを始めるならどの言語がいいですか?
>870 趣味?お金をかけたくないならC#、お金に余裕があるならDelphiかPrism。 C#はEEならただだから。
875 :
765 :2010/06/26(土) 12:09:21
>>832 すいません、やっと出張から帰ってこれました・・・。
遅くなりましたが、うpローダーにうpしてみました。
ttp://www.dotup.org/uploda/www.dotup.org988294.zip.html 確認用に取得したHTMLをtest.htmlとしてexeと同じ位置に保存し、それを再度TWebBrowserに
取り込んでいます(ランタイムエラーでますが)。
TWebbrowserの画面でいますぐ利用する(無料)ボタンが表示されている場合、ログインできて
いないhome.pl画面です。
ログインできている場合は、該当アカウントのhome画面になるはずです。
よろしくお願いします。
来週からまた出張・・・orz
876 :
765 :2010/06/26(土) 12:10:15
しまった書き忘れ・・・。 うpローダーのダウンロードパスはdelphiです。
Delphiってもう無料版はないの?
ない
処理中にマウスのカーソルを砂時計にしたいのですが、 各コントロールのCursorを全部設定していかないと いけないのでしょうか?
Screen.Cursor := crDefault;
>>875 何度も言われていることなのにバカなの?
login.pl→check.pl→home.plっていう流れなのに
いきなりhome.plアクセスしてるじゃん。
いろんな人がいろんなアドバイスしてくれてるのに
全く聞く耳持ってないじゃん。
login.plでちゃんとログインできたらメタタグだけでcheck.plに行けって返ってくるから
そこにアクセスしてからhome.plにアクセスしてみなよ。
一度目のPOSTのレスポンスを表示しようと思わなかったのはなんでだろうか。
聞いてる時点でやる気も調べる気も行動する気も最後までやり遂げる気も無い
釣れた釣れたw
釣られちゃった てへっ
恥ずかしい後釣り宣言来ました
恥ずかしい後釣り宣言来ました宣言来ました
自動ログインしたいという根性そのものがいけすかない。 手動でやれ手動で。ビシっと。
そういうのはC#でやるのが簡単なのに
Del7のListViewの事で質問です。 ListViewの左端(ItemのCaption?)に入力されている文字列と これから追加しようとする文字列が重複していないか確認をしたいのですが、 for i:=0 to ListView1.Items.Count-1 do if ListView1.Items.Item[i].Caption<>stringData then ・・・・ みたいにするしかないでしょうか? よろしくおねがいします。
ListView1.Items.IndexOf(stringData) >= 0 とか ListView1.FindCaption(0,stringData,False,True,False) = nil とか
ListView1.Items.IndexOf(stringData) < 0 だった
892 :
889 :2010/06/29(火) 10:20:41
質問した時のプログラム例が間違ってる。
恥ずかしい。orz
>>890 ありがどうございます。
しかし、ItemsのIndexOfはTListItemを探すものらしいです。
ListView1.FindCaption(0,stringData,False,True,False) = nil
こっちでいいみたいです。
VirtualListViewでやれば好きなように出来る。
894 :
765 :2010/06/29(火) 11:14:01
>>881 当初Live HTTP headersで確認したところ、login.plのあとにcheck.pl?n=/home.plにアクセス
していることがわかりましたので、
IdHTTP1.Get('
http://mixi.jp/check.pl?n=home.pl ');
や
IdHTTP1.Get('
http://mixi.jp/check.pl ');
を試した事もありました
が、双方ともに302 Foundがでるので(ブラウザからはアクセスできる)、それ以上の調査はして
おりませんでした。
アップロードにうpしているファイルは、上の方でログインに成功されている方の例をそのまま
使って作り直したものです。
>>881 さんはcheck.plにアクセスした際に、302 Foundエラーはでませんでしたか?
もしでている場合、どのように回避されましたか?
実はIndyのバージョンを2009梱包版のものではなく、最新にあげてしまっているので、そのあた
りが影響していないか心配です。
895 :
765 :2010/06/29(火) 11:27:51
追加
POSTから返ってきた文字列に関しては
>>768 で触れております。
が、この時点でこのアドレスはクッキーが無効であるという失敗を表すものだという勘違いをして
しまい(
>>784 さんも同意見だったため)、しばらく迷走しておりました。
で、その後再度Live HTTP headersを追ってみたところ、「
http://mixi.jp/check.pl?n=%2Fhome.pl 」
へのGETを発見しました。
今改めてみてみましたが、ブラウザでもcheck.plへのアクセスのあと、一度「HTTP/1.1 302 Found」
がでていますね・・・。
D3のSQLエクスプローラーで二つのInterbaseファイル間のテーブルの比較って出来ますか? 片方で削除されたレコードを抽出したいのです。
897 :
デフォルトの名無しさん :2010/06/29(火) 23:44:12
win7でターボデルフィは動かせますか?
302がエラーだとしか思わない人がネットツール作れるのかよ・・・・・・
900 :
765 :2010/06/30(水) 09:49:43
>>898 超初心者ですので、勉強のつもりでやってます・・・。
用語もそれほど知らないので、どう皆さんにうまく説明していいかわからず、エラーと表現して
しまい申し訳ございません。
>>881 さんがどのように302 Foundを回避されているのか、アドバイスいただければ幸いです。
>>899 自分自身Delphiはおろかプログラミングもはじめたばかりですので、このスレに来たのですが、
もっと初心者向けのスレがあるという事でしょうか?
ここでも場違いなようでしたら、どちらかのスレに誘導していただければ嬉しいです。
Delphi7+Firebird+IBXで開発したものをDelphi2009で再構築しています。 データベースのテーブル一覧を取得するために下記SQLを発行していますが、 テーブル名が10文字分しか返ってきません。何か対処法ご存じでしたらご教授願います。 select rdb$relation_name from rdb$relations where (rdb$view_source is null) and (rdb$system_flag=0)
本当に勉強したいなら、匿名無料掲示板で相談するのではなく経験を持っている人に教わった方が 速いです。身近に相談できるような人はいませんか? >もっと初心者向けのスレが 「知らないこと」には限界が無いので、初心者とひとくくりにすることができないのですよ あなたがどこまで何を知っているか。によって答え(や参考資料の出し方など)は変わっていくのです。 どこかにもっと初心者向けのスレがあるかもしれませんが、それは誰にもわかりません。 多くの回答者は暇なときにしか対応できませんからどうしても時間がかかります。だから「出直してこい」「ちょっとは 自分で調べろ」と言うしか無いのですよ。 今回の件では、プログラムする前に何が正しい動作、期待する動作なのかを知る必要が有るでしょう。 まずブラウザとサーバーの会話を分析、理解するべきだと思います。 簡単にはパケットキャプチャ。Safari や Chrome などのブラウザ組み込み開発ツールも役に立つでしょう。 ここから先は、まずはネットワーク関連のスレに移動した方が、より専門的な解説、説明、罵倒が待っていると おもいます。行ってらっしゃい
903 :
765 :2010/06/30(水) 11:46:21
>>902 このスレですでに二人ほど、ログインに成功している方がいるので、できればその方たちから
のヒントを聞かせていただければなと思っておりました。(´・ω・`)
もちろんヒマな時の回答でも、すごく嬉しいです!
DelphiでIndyを使用してMIXIにログインする例が見あたらなかったので、今後トライしようと
する人の為にも成功例がコードと共にあった方がいいかなと思って質問を続けてきましたが、
他のスレに行った方がよさげですね・・・。
とりあえずネットワーク関連のスレの方をみてみます。
こちらでも何かヒント等ありましたら、引き続きアドバイスいただければ幸いです。
ありがとうございました。
904 :
765 :2010/06/30(水) 12:28:13
だからブラウザだって302を受け取って処理してんの。それと同じにやればいいんだよ
906 :
765 :2010/06/30(水) 12:55:21
>>905 >>904 のRedirect処理部分で、同じように処理いたしました(XRayさんのサイト参照)。
(Live HTTP Headersで確認したところ)正しい動きとしてはhome.plで無事ログイン済みになり
あらたにemidというCookieをもらえるはずですが、上記の通りでやはりログイン前の画面に
なってしまうので、引き続き調査中です。
そもそも認証は面倒だからIEでいいならIEコンポ(WebBrowser)でやったほうが早くて確実だけど INDYにこだわる必要があるのかな WebBrowserで自動ログインする部分が多少面倒だけどそれさえクリアすれば後は簡単
908 :
765 :2010/06/30(水) 14:13:21
>>907 WebBrowserは別の練習アプリで使ったので(その時にIndyでも認証ができると知りました)今回は
Indyに挑戦してみようと思いまして。
だが、資料が少なすぎて、今の俺のスキルでは無茶すぎた・・・! と後悔しつつも、せっかくだか
ら最後までやりたいと思っております。
302回避とか書いている時点でなにも理解できてない。 Delphiとは関係ない知識が足りてない。
910 :
765 :2010/06/30(水) 15:13:50
>>909 知識不足というのは、自分でも痛感しています。 なにぶんプログラムを勉強し始めたばかりで
すのでご容赦ください。
現在の時点では、ググった結果さえ理解できない事も多く、このスレの回答者の皆さんみた
いになるには、かなりの時間が必要そうです。
回避というのは、302が返ってくるのでどのように処理すればいいのかという意味のつもり
だったのですが、適切な言い方ではなかったようで、申し訳ないです。
Live HTTP Headersでの確認では、check.plにアクセスしたあと、「HTTP/1.1 302 Found」が返っ
てきており、その後home.plにアクセスしているので(おそらく
>>905 さんがおっしゃる通り、ブラウ
ザが302をこの時点で処理している)、やり方としては今Delphiでやっている事と同じような気も
するのですが。
今日は一日休みですので、もう少しLive HTTP Headersを確認しつつがんばってみます。
上で、すでにログインに成功している人がいるし、見落としている部分に答えがありそうです。
なぜDelphiなんだろうC#のがいいのに
912 :
765 :2010/06/30(水) 16:40:50
>>911 ちら裏になりますが、会社の自分の前任者(元プログラマ、退職済)が2009を購入してもらって、
ちょこちょこ便利ツールを作ってたみたいで、後任の自分も使ってみたら?と渡された。
もともとプログラムできる奴カッケー!!と思っていたので、仕事の合間や自宅にノートPC持っ
て帰ってに勉強しています(セキュリティが緩いので・・・)。
職種はまったくPCと関係ない上、社内でその手の知識がある奴も皆無なのがつらいところ。
なぜDelphiなんだろう
Webアプリ作りたいんならまずRFC2616くらいは読んどいたほうがいい。 とりあえず、「HTTP/1.1 302 Found」は必ずしもエラーを意味しない。それによりリダイレクト させることが目的である場合もあるから。 Indyのバージョンによるのかもしれないけど、プロパティで302を自動でリダイレクトさせる ことができるし、実際自分はそれを使ってる。
915 :
765 :2010/06/30(水) 22:33:34
>>914 実はRFC2616を説明しているサイトで302 Foundについてすでに調べたのですが・・・・
さっぱり意味わかんねえええええw orz
他も色々みてみて、どうやら一時的なページの移動か、CGIが返す場合があるという事
として今は理解しています(検討外れだったらすいません・・・)。
Indyのバージョンは最新のはずなので、もしかしたら自動でリダイレクトさせるプロパティ
があったのかもしれないですが、とりあえず現在はRedirectイベントで処理いたしました。
今日は力つきたので、ここまででw
Delphiと関係ないことは理解できましたか?
BDEでODBC経由でSQL Serverに接続しています。(TDateBaseクラスを使用) 複数のプロセスでDB接続している際、その中の1つのプロセスを強制終了 (クラッシュ)しては再起動ということを繰り返していると、何度かいったところで 「この操作に必要なメモリがありません」と出て、DB接続できなくなります。 DB接続しているプロセスをいったん全て終了させると、正常に戻ります。 見たところではリソースのリークのようなのですが、改善することはできますで しょうか。
プロセスの強制終了が直接の原因でしょ BDE は共有メモリモデルで動いているから異なるプロセス間で共有しているメモリブロックが解放されず 不足したのでしょう。 強制終了しないように直し、仮に例外が発生しても正しくアプリケーションを終了させるようにするのが正道。
BDE 使い続けている人は多いなぁ
BDE経由だとoracleでもそんな感じだし。
Indyってnegotiate認証に対応しているのでしょうか?NTLS認証は対応してるっぽい ですけど、Kerberos認証は対応してます?
Delphi2010(Rad Studio)の 逆アセンブル/レジスタなどのペイン(メニューだと表示→デバッグ→CPUウィンドウ以下) のフォントサイズが6?7?なのか不明ですが、文字が小さすぎて見えません CPU全体というものを選べばフォントサイズはでかくて見易いのですが、この項目はエディタウィンドウと重なってしまい、使い勝手が悪いです 特にこれらの項目のフォントサイズを変更する項目が見あたらないのですが、文字を大きくすることは不可能なのでしょうか…
日付の比較がしたいのですが、 2010年1月1日,aaa,bbb,ccc 2010年1月2日,ddd,eee,fff ・ ・ ・ 2010年7月1日,111,222,333 の様なリストがあって、ユーザーからは「2010年2月1日から2010年5月6日まで」みたいに指定されます。 今考えているのは、年月日の漢字を消して 201021 と言う数字にして比較しようと思っているのですが、 もっと良い方法があれば教えて欲しいです。 よろしくお願いします。
TDateTime型に変換する
>>924 > 今考えているのは、年月日の漢字を消して 201021 と言う数字にして比較しようと思っているのですが、
それだと2010年1月11日と2010年11月1日の区別ができないのでは。
StrToDateTimeでTDateTimeにして比較する
ごめん、こっちの方 VarToDateTime
929 :
924 :2010/07/01(木) 23:06:28
皆さん、ありがとうございました。 VarToDateTimeを使って、上手くできました。 また、よろしくお願いします。
930 :
765 :2010/07/02(金) 10:16:26
>>921 Reqのデータですが、こちらでは
<html><head><meta http-equiv="refresh" content="0;url=/check.pl?n=home.pl"></head></html>
となっています。
>>921 さんはどのようなデータを取得できましたか?
あれだけ言われてまだここでやるんだ
>>930 そのレスポンスなら、mixiの認証は通っている。
ここまでは正しい動作だ。
では次に
>>815 の次の部分を下のコードのように変更してほしい。
これを
Buf:=IdHTTP1.Get('
http://mixi.jp/home.pl ');
こうする
Req.Clear();
IdHTTP1.Get('
http://mixi.jp/home.pl ', Req);
Reqにサーバーからのレスポンスが入っている。
これをSaveToFileでファイルに保存して内容を確認してほしい。
なお文字コードはeuc-jpなので、euc-jpに対応しているエディタで開く必要がある。
933 :
765 :2010/07/02(金) 16:49:20
>>932 Reqの中身はログイン前の画面でした。
「すでに登録済みの方は、
こちらからログインしてください」
と共にログインメールアドレスとパスワードの入力を施す画面です。
>>932 さんや
>>814 さんはこれでログインできているようですので、もしや、Indyのアップデータを
行ったのが問題なのか?
週末にでも一度削除し、インスロールを一からやり直してみます。
ここまでやってパスかメアド間違えてるとかだったら殺意すら湧く
var X: Cardinal; としておいて、 X:=32768*32768; X:=X*2; とか、 X:=2147483648; だと問題ないのですが、 X:=32768*65536; では、コンパイル時に「[エラー] 〜: 数値演算のオーバーフロー」となってしまいます どうしてなのでしょうか
0..4294967295
>>937 4294967295 ?
32768*65536は
2147483648
ですから、あふれてないように思うのですが
ヘルプの「真の定数」によると、定数式が整数の場合はその値によって型が決まり 32768〜65535 ⇒ WORD 65536〜2147483647 ⇒ 0..2147483647 となる。この場合 (WORD)*(0..2147483647) の演算だから 式全体の型は 0..2147483647 となり、結果がこの範囲に収まらないとエラー という理屈になるのかな。何だか納得いかないけど、とりあえず X := 32768*Cardinal(655356) とでもすればコンパイルは通るだろ。
>>939 「真の定数」読みました
なるほど、65536..2147483647は、ほぼInteger(Longint)ですね
X:=Cardinal(32768)*65536;
でもOkでしたので、その解釈は当たりだと思います
分かりましたー、と言いたいところですが、それなら
X:=32768*32768;
でもオーバーフローになるはずでは???
やっぱりなんか変ですよね
>>940 あとは、整数型同士の演算の場合
どちらかがInt64なら結果もInt64、そうでなければ結果はInteger
という規則があるから、これにひっかかるのかな。(ヘルプだと「算術演算子」のところ)
Cardinalが入った場合の規則が書かれていないからよくわからないけど、
Integerの範囲には収まらないはずだからInt64扱いになるのかもしれない。
>もしや、Indyのアップデータを行ったのが問題なのか? >週末にでも一度削除し、インスロールを一からやり直してみます。 ワロタwww アップデータをインスロールしてくださいね(笑)
定数の型を指定したい場合はこうすればいい const foo = Cardinal(1);
計算時に i := Cardinal(1) * 10; でいいやん。
仕事に忙殺されてるうちにすっかり取り残されてしまい、いまだに D6 Pro ですが、 職場では Win7 を使っています。 少々余裕も出てきた&ネイティブコードも必要になりそうなので、職場のマシンに インスコしてみました。今のところ動いています。 せっかくなので Win7 のタスクバーの新機能を使ってみたいのですが、D6 Pro で ITaskbarList3 を使うにはどうしたらいいんでしょうか。タイプライブラリの取り込みで ExplorerFrame.dll を指定してもエラーになってしまいます。さすがに古すぎるんでしょうか。
>>944 定数の話してるのになんでマジックナンバーにするの?馬鹿なの?
947 :
946 :2010/07/03(土) 12:45:56
僕が馬鹿でした
948 :
944 :2010/07/03(土) 12:47:03
分かればいいよw
const foo:Cardinal=1; でいいやん。
>>949 しか知らんかったわ。
>>943 今度使ってみよう。
些細なことで偶に勉強になるな。役立つかは別にして。
厳密に言えば
>>949 は一度だけ書き替え可能な変数
>>944 が本当の定数
>>944 はコンパイル時に実際に数値と置き換わるけど、
>>949 は変数と同じく参照として扱われるから、
その展開がない分
>>944 の方が高速になる
知らないことは誰だってあるけど、いいやんとか言って違いも調べず思考停止するやつは向上心もう少し持とうぜ
もっと!もっと熱くなれよ!!
953 :
765 :2010/07/05(月) 14:22:54
IndyのバージョンをDelphiインストール時のものに戻してテストしてみたところ、こちらの バージョンではログイン後の画面が表示されました。 よって、バージョンアップをしてしまうと、なんらかの原因で正常なログインができなくなる ようです。 Proxomitronを使って、両者のPOSTおよびGETの内容を確認してみましたが、全く同じデー タでした。 旧バージョンで新バージョンのunitを開くとRequest.Ranges.Unitsが無いというエラーがでた ので、そのあたりのプロパティかと思い、わからないならがも色々やってみたのですが改善 することができませんでした。 ソースを追って、原因追及といきたいところですが、自分にはまだまだ無理ですので、とり あえず旧バージョンに戻す事で対応したいと思っています。 新バージョンで実装されているRequest.CharSetを使いたくてバージョンアップしたのですが、 残念です・・・。 色々教えていただき、ありがとうございました。 また自分の書き込みでご気分を害された方、申し訳ございませんでした。
そういうときはIndyのバージョンも書けよ
Double, Integer, Byte, Word, ShortIntなどの2値を比較し、その結果を返すような関数を作りたいのですが、 function TCompareClass.chkValProc<TypeID>( const srcVal, dstVal : TypeID ): Boolean; begin if ( srcVal < dstVal) then begin Result := False; end else begin Result := True; end; end; イメージ的にこういう感じのメソッドを作る方法ってないもんでしょうか。 ↑だと、型が限定されないからか、コンパイルが通りません。 function TCompareClass.chkValProc<TypeID>( const srcVal, dstVal : Double ): Boolean; function TCompareClass.chkValProc<TypeID>( const srcVal, dstVal : ): Boolean; function TCompareClass.chkValProc<TypeID>( const srcVal, dstVal : TypeID ): Boolean;
失礼しました。後半あやまって送信してしまいました function TCompareClass.chkValProc( const srcVal, dstVal : Double): Boolean; function TCompareClass.chkValProc( const srcVal, dstVal : Integer ): Boolean; function TCompareClass.chkValProc( const srcVal, dstVal : Byte ): Boolean; function TCompareClass.chkValProc( const srcVal, dstVal : Word ): Boolean; function TCompareClass.chkValProc( const srcVal, dstVal : ShortInt ): Boolean; こういう風に全部用意してやれば一応目的は達成できるのですが、1つにまとめたく思います。
>>954 自分の無能さをライブラリのせいにして逃げる口実なんだからわざと書いてないんだよ
言わせんな恥ずかしい
>>955-956 TComparer<T>.Defaultの実装が参考になるというかそのまま使えると思う
「最新」なんてバージョンはない
最初から最後までここまでぐだぐだになれるのもある意味才能だろうな・・・
ume
963 :
765 :2010/07/06(火) 11:10:56
>>960 同じようにアップデートしてしまって以前と同じような動きができなくなった方の為に、参考ま
でに書いておきますね。
バージョンは10.5.7で(2009に同梱のものは10.2.5)昨日の時点ではr4270のものを使用しまし
た(changelog.txtでの確認)。
最初に試したものはr4258です。
>>961 PCやプログラムについての知識がなさすぎて、皆様を不快な気持ちをさせてしまいました。
申し訳ございません。
いいよ^^
匿名関数使ったサンプル集みたいなサイトや本って無い?
WebBrowserをフォームに貼ってサイトを表示させてるとkeypreviewをtrueにしてもonkeydownでキーを拾ってくれないんですがどうすればよいのでしょうか?
ローソク足のチャートが書ける日本語のコンポーネントってありませんか? 有料でも良いです。
条件をひとつ削ってもいいなら腐るほどあると思うけど
969 :
デフォルトの名無しさん :2010/07/12(月) 17:54:17
どちらもinteger型の配列、hairetu1[0..5] と hairetu2[0..3] を 繋げ合わす事って出来ますか? hairetu1[10]とした時に、hairetu2[3]のデータを取り出したいのですが・・・。
はい
いいえ
キャンセル
エラー報告を送信する
(Y) はい (N) いいえ (C) キャンセル (S) エラー報告を送信する (X) 閉じる
「はい」と「いいえ」がある時にEsc押しても「いいえ」にならないのは納得いかない >972 それ10じゃなくて9じゃね? 無理矢理くっつけてみたけど 素直に動的配列でも使っとけ procedure test; var a: record case Integer of 0: (hairetu1: array[0..5] of Integer; hairetsu2: array[0..3] of Integer); 1: (gattai: array[0..9] of Integer); end; begin a.hairetsu2[3] := 10; ShowMessage(IntToStr(a.gattai[9])); // ←hairetsu2[3]の値が表示される end;
hairetu1[0..5]と定義したものをhairetu1[0..10]へ後から拡大できたっけ どうせ配列の個数を変化させるなら hairetu1: Array of Integer; とだけ定義して その都度SetLengthすりゃいいんじゃないの
hairetu1のポインタを求めて、Integerの個数分後ろへズラせばいい気もする
そもそも最初の要求がろくでもないんだからそんなに真面目に考えなくても…
できないんですね。わかりました・・・。 Delphiって使えないですね・・・。
983 :
972 :2010/07/17(土) 14:45:31
>>978 そんなやり方があるんですね。チャレンジしてみます。
ご返答ありがとうございました。
Delphi7 をXp-proに入れたんだけど、終了するとDelphi32.exe が生き残って エラーだしまくるときがあるんだけど、7.1updateとかで治るの? なんか対策があったら教えてくだされ。
まず試せよ
対策はリリースノートを見ることだ。
ごめん全くの初心者です、Delphi最新版(無償版)ダウンロードしたいんだけどどこにいけば落とせる? ボーランド行ったけどmicrofocusっていうサイトに飛ばされてよく分かりません・・・・
もう公開していない
ミラーとかないんですか?
kylixってまだ生きてんの?
日経ソフトウェアの付録になってたんで、それを入手するっていう手はあるかも たしか新宿のジュンク堂にはまだあったような希ガス
995 :
デフォルトの名無しさん :2010/07/18(日) 19:39:13
穴埋め995
996カカロットぉぉぉーーーーー!
『DROP』
『FIRE』
『GEMINI』
『BURNING DIVIDE』 (0M0 )サヨゴォォォォォォォォォォォオオオオオオオオオオォォォォォーーーーーー!!!!
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。