10/02/28 07:47:13
URLリンク(homepage1.nifty.com)
↑ここに同じようなやりとりがあった。
332:デフォルトの名無しさん
10/02/28 07:52:04
つーことで、実数型使うときはdoubleを使わないでextendedを使えってこと?
333:デフォルトの名無しさん
10/02/28 08:02:36
おー、すまん。一人でとっちらかっていた。
URLリンク(homepage1.nifty.com)
ここ読んでわかったけど、
Trunc(X: Extended): Int64;
で型変換してる。
Trunc使うときは、Extended型で使わないと誤差がでるってこと。
もしくは小数点移動させて、整数にしてから処理すればいいね。
334:330-333
10/02/28 08:20:53
浮動小数って、意味がわかりました。そういうものなんですね。
使ったことなかったものですから、、、今回よくわかりました。
332も違うつーことで。
335:デフォルトの名無しさん
10/02/28 18:43:16
それは不動少数
336:デフォルトの名無しさん
10/02/28 20:36:04
すみません教えて下さい。
Form1 に直接 Image1 を置いていたのですが後から Panel1 を追加して Image1 の親コントロールを Panel1 に変更したいのですが、IDE でやる方法はありませんか?
337:デフォルトの名無しさん
10/02/28 20:53:34
floatとdoubleで結果が異なる例は見たことあったけど
doubleとextendedで差が出る実例は初めて見た。
64bit厨はどうするのだろうか。
338:デフォルトの名無しさん
10/02/28 21:14:15
それ 64bit 関係ないし
x64 なら 128bit 浮動小数点数が必ず使えるし
339:デフォルトの名無しさん
10/02/28 21:51:41
337は64ビットネイティブバイナリでFPU命令が使えないと思っているんじゃないだろうか
340:デフォルトの名無しさん
10/02/28 22:00:26
>>336 切り取って貼り付ける。
341:デフォルトの名無しさん
10/02/28 22:02:28
>>340
!
なるほど!ありがとうございます!
342:337
10/02/28 23:33:39
>>338, 339
ごめん、知らなかった。
>128bit浮動小数点と、64bitネイティブでFPU
エンバカスレに帰るよ。
343:デフォルトの名無しさん
10/03/01 01:26:40
>>338
64bit2個をまとめて扱えるだけであって128bitが1個じゃないから
344:デフォルトの名無しさん
10/03/01 02:02:25
実装がどうなってるかは関係ないだろ
扱えることに変わりはないし
345:デフォルトの名無しさん
10/03/01 17:58:10
実装は関係ないだろキリッ!って言われてもなぁ
346:デフォルトの名無しさん
10/03/01 19:12:48
はいはい
347:デフォルトの名無しさん
10/03/01 19:25:15
>>345
お前がそう思うんならなんやらかんやら
348:デフォルトの名無しさん
10/03/01 19:25:56
delphi2011っていつでるの?
349:デフォルトの名無しさん
10/03/01 20:00:32
さあ
350:デフォルトの名無しさん
10/03/01 20:56:48
>>348
もうすぐじゃないの? ただし32ビット
351:デフォルトの名無しさん
10/03/02 21:21:42
特定の位置からバイナリを読み取って、違うファイルとして保存するというプログラムを書いています。
fileopen関数で開いて、FileRead(F, Buff^, Size);でバッファに格納はできたのですが、
この格納したものはテキストでならstringですので取り出せますが、バイナリとして保存する場合はどのように取り出せばよいのでしょうか?
お力をお貸しください。
352:デフォルトの名無しさん
10/03/02 21:35:10
そのままでいいだろ
353:デフォルトの名無しさん
10/03/02 21:36:16
>>344
実装がどうとか以前に扱えないし
SSE2が四倍精度浮動小数点数扱えると思ってんの?
354:デフォルトの名無しさん
10/03/02 21:41:13
>>352
バッファはテキストとして保存可能ですが、そのバイナリがテキストでない画像とかを
どうやってバイナリとして保存するかがわからなくて・・・。
355:デフォルトの名無しさん
10/03/02 21:49:37
>>354
MemoryStream
356:デフォルトの名無しさん
10/03/02 21:57:44
>>355
それやろうと思ったんだけど、うまくいかなくて・・・
var
ms:tmemorystream;
begin
ms := tmemorystream.create;
ms.loadfromfile('TEST.dat');
//このseekがよくわからない。例えばSizeが300の地点から500までを読む場合の位置設定がわからないところ
ms.seek(?);
ms.read(Buff^,sizeof(buff));
ms.savetofile('TEST2.dat');
ms.free;
これでできなかったんです・・・。
357:デフォルトの名無しさん
10/03/02 22:05:49
>351
ファイルストリームで元ファイルを開く→所定の位置にseekする→メモリストリームにコピーする
→メモリストリームのPositionを0に戻す→メモリストリームをファイルに書き込む
358:デフォルトの名無しさん
10/03/02 22:13:33
>>357
レスありがと。
メモリストリームにコピーとは?どのような関数ですか?
359:デフォルトの名無しさん
10/03/02 22:34:57
CB_SETCURSELってチェンジイベントみたいなのって起きないのかな。
他アプリのコンボボックスを操作するのに、CB_SETCURSELで選択項目を
変えるんだけど、一回コンボボックスにクリックメッセージを送らないと
認識しないみたいなんだ。
これって、相手のアプリの作りの問題?
別のAPIがあるの?
360:デフォルトの名無しさん
10/03/02 22:50:08
>>354
意味分からん
何もしてないのにバッファが書き換わるとでも言いたいのか
361:デフォルトの名無しさん
10/03/02 22:51:47
>>360
簡単にいうとどうやってこの格納されたバッファをファイルとして保存するかなんです。
362:デフォルトの名無しさん
10/03/02 23:11:16
ファイルストリームでもメモリストリームでも好きなの使えば素敵やん
363:デフォルトの名無しさん
10/03/02 23:43:28
>>361
b: array[0..4095] of byte;
MS: TMemoryStream;
begin
for i:= 0 to 4095 do b[i] := $FF;
MS:= TMemoryStream.Create;
MS.Write(b, 4096);
MS.SaveToFile('c:\gomi.dat');
MS.Free;
364:デフォルトの名無しさん
10/03/02 23:58:58
>>363
書き込むだけの用途ならTFileStream使え
Create-Freeはtry-finallyで囲め
ハードコーディングすんな
365:デフォルトの名無しさん
10/03/03 00:07:55
>>364
うわ…
366:デフォルトの名無しさん
10/03/03 00:30:48
>>358
とりあえず、マニュアル(ヘルプ)読んでから、質問しろ
function CopyFrom(Source: TStream; Count: Int64): Int64;
ってのが見つかるはずだから
367:デフォルトの名無しさん
10/03/03 13:06:15
Windows7が動くDelphiはどのバージョンまで対応していますか
Delphi2以降は一応動くと思うのですが
368:デフォルトの名無しさん
10/03/03 13:36:48
Delphi上でOSを動かそうというのはなかなか難しいのではないかと。
369:デフォルトの名無しさん
10/03/03 13:59:04
>>351 単純な手があるんじゃないの ファイルAとBを開き、Aのファイルポインタを
移動してから、あとは全部AをBへコピー メモリに覚える必要とかまったくないと思う
370:デフォルトの名無しさん
10/03/03 15:37:49
>>368
Delphiで仮想マシン作れってことか
371:デフォルトの名無しさん
10/03/03 15:53:45
対応の意味によるんじゃね。
厳密な意味で対応してるのは最新の奴だけだろうし
Vista以前のDelphiだとVistaでウィンドウのプレビューがうまくとれないなんて細かい不具合があったし。
372:デフォルトの名無しさん
10/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;
ご教授頂ければ幸いです。
373:デフォルトの名無しさん
10/03/04 10:28:30
uses
jpeg;
374:351
10/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よりこちらの方が楽そうに思いしようしました。
375:デフォルトの名無しさん
10/03/04 19:16:24
buffは何のために確保してるの?
376:デフォルトの名無しさん
10/03/04 19:20:26
>>374
君がやっていることを例えると、
本を借りてきて、
メモ用紙に必要な事項だけ書き写して、
本をコピー機で全部複製して、
メモ用紙を捨てて、
本を返してる
377:デフォルトの名無しさん
10/03/04 20:32:46
>>375
部分的に読み取ったものを格納して・・・と思ったんですが、違うんですか?
>>376
その例えの必要な事項だけ書き写したのを欲しいんですが、余計なコード書きすぎとかですか?
この指定した位置から読み取ったバッファ=fsという理解ではないのでしょうか?
378:デフォルトの名無しさん
10/03/04 21:18:41
buffに格納したものを利用せずに捨ててる
379:デフォルトの名無しさん
10/03/04 21:51:23
>>378
この読み取ったバッファをファイル保存するために、
ms.LoadFromStream(fs);
ms.SaveToFile('C:\ABC.dat');
としたんですが、どうもうまくいかないのです。
何か良い手はございますか?
380:デフォルトの名無しさん
10/03/04 22:37:23
msにbuffを書き込めよw
381:デフォルトの名無しさん
10/03/04 22:49:54
>>380
レスありがとうございます。
言われた通りにしたらうまくいきました。
これまでお付き合いくださった方、ありがとうございました。
そしてお騒がせ致しました。
382:デフォルトの名無しさん
10/03/05 00:02:09
いいねぇくだすれらしくてw
383:デフォルトの名無しさん
10/03/05 02:27:05
もどかしいが嫌いじゃないぜ、この流れw
384:デフォルトの名無しさん
10/03/05 12:06:52
無意味なエラートラップならやらないほうがいい
385:デフォルトの名無しさん
10/03/05 12:51:14
無意味なエラートラップはない
386:デフォルトの名無しさん
10/03/05 15:07:49
try
abort;
except
abort;
end;
387:デフォルトの名無しさん
10/03/05 15:16:16
それは無意味なエラートラップじゃなくて無意味なコード
388:デフォルトの名無しさん
10/03/10 18:08:50
よく改造サイトでエミュでチートを・・・とか書いてありますが、これを(チートを)そのエミュ上で行うのではなく、
自作のプログラムで行おうとする場合どのような流れになるのでしょうか?
簡単にいうと、エミュでチートを行わずに、自作のプログラムでいま起動されてるエミュ上のゲームのデータを書き換える
というものを作りたいのです。
389:デフォルトの名無しさん
10/03/10 20:23:01
ガキ臭いやつだなぁw
390:デフォルトの名無しさん
10/03/10 22:33:19
>389
素直に「答えられません」と降伏宣言したらだどうだ?。嫌ならゴミレスするな
391:デフォルトの名無しさん
10/03/10 22:38:14
答えられません
ですから諦めて下さい
392:デフォルトの名無しさん
10/03/11 02:50:49
改造板行けよ
393:デフォルトの名無しさん
10/03/11 06:39:25
Delphi6まで使っていましたが、最近またDelphiで開発する
はめになりました。
で、Delphi2010の購入を考えております。
そこでお聞きしたいのですが、Delphi2010は、Delphi6
と比較して、何が良くなっているのでしょうか?
特にエディタの使い易さなどはどうでしょうか。
メーカが出している機能比較のPDFなどは見ておりますが、
実際の開発者さんの感想をお聞きしたいです。
作成するアプリは、SQLServerおよびAccessMDBを使う業務
アプリです。
よろしくお願い申し上げます。
394:デフォルトの名無しさん
10/03/11 06:53:43
使い勝手は人によるので。
>特にエディタの使い易さ
となれば、D6 でどこが不満だったのかをまとめれば答えやすいと思うよ
395:デフォルトの名無しさん
10/03/11 09:28:58
Delphi 2010 Architect - 30 day trial
URLリンク(downloads.embarcadero.com)
396:デフォルトの名無しさん
10/03/11 13:57:05
>>393
エディタはコードの折りたたみ等必要ないなら外した方がいい。
若干バギーな部分もあるが実用できるとは思う。
ただしvimなど外部エディタに慣れてるならそっちで環境整えた方がいいっていうレベル。
でもリファクタリングは便利。
生産性は上がってる。ジェネリクスがあるのでコードの記述量が劇的に減る。
C++でテンプレートを使えていたなら何も考えずに使えるはず。
テンプレートもよく分からないのなら、Delphi2009Handbookを読めば解説がある。
397: [―{}@{}@{}-] デフォルトの名無しさん
10/03/11 16:03:34
ジェネリクスはバグだらけ。とナカムラセンセが言っていますよ?
398:デフォルトの名無しさん
10/03/11 16:18:15
中村先生が指摘してたバグはすでに修正されてますが?
何年前の話を持ち出してるんだよ情弱
399:デフォルトの名無しさん
10/03/11 16:22:41
「Delphi ジェネリクス バグ」で検索すると中村の指摘が真っ先に引っかかるからな。
一番上のネタを持ってくる辺り、検索して知ったにわか知識ということがよくわかる。
400:デフォルトの名無しさん
10/03/11 22:54:43
なんかごめん・・・・
401:デフォルトの名無しさん
10/03/12 13:01:50
ジェネリクスなどのコンパイラの新機能にエディタは追いついてないので
古いバージョンからアップグレードすると既存の機能でいらいらする事結構ある。
前できた宣言の検索(Ctrl+Shift+上下キー)とか動かない部分とかあるし。
仕方なく通常のCtrl+F2の文字列の検索でソース追うはめになったり。
402:デフォルトの名無しさん
10/03/13 04:21:43
Delphi 2010のlicense_ja.rtfに書かれている
「指名ユーザーが本製品の使用を許可された唯一の個人である場合、
適正な数のコンピュータに本製品をインストールすることができます。」
というのは、
「俺だけが使うのなら、自宅のデスクトップPCと、カバンに入れている俺資産のノートPCと、
XPmode上の仮想PCの3つにインストールできるじゃん」
という認識でOKでしょうか?
自宅でも出先でも開発したいのよ。
403:デフォルトの名無しさん
10/03/13 07:01:11
その認識で良いと思いますが
ライセンス関連の質問は Embarcadero サポートに問い合わせることを勧めます。
404:デフォルトの名無しさん
10/03/13 08:48:25
へー グーグルってあてにならないんだな、ヤフーサーチ使おうっと
405:デフォルトの名無しさん
10/03/13 09:47:15
>>402
その認識で良いです。
確か「ナンセンス」でない「ライセンス」という考え方で、有名な
ライセンス形態だったはずです。
406:デフォルトの名無しさん
10/03/13 10:02:52
古き良き時代の「ナンセンスではないライセンス」は、かなり以前に撤廃されています。
当時はデジタルコピーを配布することが、今よりは大変だったため、ライセンス所有者でなくても
(複数の人が同時に使うので無い限り)利用可能でした。
その後ネットワーク速度の向上により、CD 一枚くらいなら気兼ねなく複製をコピーできるようになって、
ライセンス所有者でないと利用できないように変わりました。
実際には、インストール後にアクティベーションを行い、ユーザー名とシリアル番号とコンピューターを
結びつける作業を行います。
「適正な数のコンピュータ」というのは、アクティベーションの回数に上限があることを意味しています。
普通に使う分には問題にならないはずですが、もし上限に達したらサポートにメール/電話すれば
解除してもらえます。実際の値は10回か20回くらいらしいです。
407:405
10/03/13 10:38:29
>>406
そうだったのですか、それは大変失礼しました。間違った
書き込みをしてすみませんでした。
408:デフォルトの名無しさん
10/03/13 11:01:41
>406
今は上限はwebからincrementできる。名義変更は電話する必要があるけど。
409:デフォルトの名無しさん
10/03/13 14:28:16
incrementは1回ずつしか増やしてくれないのが面倒といえば面倒な現在
410:402
10/03/13 16:24:40
>>403,405,406,408,409
ありがとうございます。
週明けにでもEmbacarderoさんのサポート窓口に聞いてみます。
結果が分かったら報告しますね。
411:393
10/03/13 20:00:14
>>394,395,396
回答ありがとうございます。
>D6 でどこが不満だったのかをまとめれば答えやすいと思うよ
エディタに関して言えば、
・フリーカーソルモードが不便(ふつうのエディタみたいなほうがいい)
・次を検索はF3でOKだが、前を検索はShift+F3でできて欲しい。
IDEに関して言えば、
登録したコンポーネントを探しにくい
VCLに関しては、
TListViewがショボい(.NETの方が格段に高機能)
こんなところです。
Delphi2010ではどうなんでしょうか?
412:デフォルトの名無しさん
10/03/13 22:35:40
フリーカーソルはD6の時点で無効化方法あっただろ
少しは自分で調べろよ…
Shift+F3は可能、コンポーネントは名前で探せる
TListViewはそもそもListViewのラッパーで
コモンコントロールのバージョン(OSのバージョン)によって機能が違う
D6のメインターゲットOSは2000だし機能が少なくて当然
413:デフォルトの名無しさん
10/03/14 09:44:30
>>412
Delphi 2009のVCL機能
URLリンク(www.codegear.com)
TListViewは、Windows XP/Vistaで追加された機能が使えるようになった。
414:デフォルトの名無しさん
10/03/14 09:56:13
それってExplorerのグループで表示みたいなのもできる?
415:デフォルトの名無しさん
10/03/14 13:37:52
>>414
まさしくそれが追加された。
416:デフォルトの名無しさん
10/03/14 13:46:43
SHBrowseForFolderでフォルダー選択ダイアログを出すようにしているのですが、
ダイアログを表示させる時に過去に選択されたフォルダーがある場合、そのフォルダーを
選択した状態で表示させるにはどうすればいいでしょうか?
ググってサンプルコードをコピペして試しているのですが、BrowseInfo構造体で
lpfn := @FolderCallback;
lParam := LongInt(PChar(FolderPath)); //初期フォルダ指定
って、設定してもlParamの設定がおかしいらしくコンパイルエラーになってしまいます。
Dlphi7とXPの環境です。
よろしくお願いします。
417:デフォルトの名無しさん
10/03/14 14:33:29
そのコンパイルエラーの内容を書こうぜ
418:デフォルトの名無しさん
10/03/14 15:16:18
すみません。
解決しました。
lpfn := @FolderCallback;
の@を消して
lpfn := FolderCallback;
lParam := LongInt(FolderPath);
これで動きました。
でも、ここの設定はコールバック関数を指定するから
@っているはずですよね?
ググったサンプルコードも皆@付いてました。
419:デフォルトの名無しさん
10/03/14 15:28:13
FolderCallbackが(名前で推測できるとはいえ)何を表してるのか書いてないのに、どう回答しろと?
URLリンク(homepage1.nifty.com)
420:デフォルトの名無しさん
10/03/14 15:29:05
>>412
>フリーカーソルはD6の時点で無効化方法あっただろ
>少しは自分で調べろよ…
D6にフリーカーソルモードの無効化方法があるのですか?
調べても見つかりません。
済みませんが教えていただけないでしょうか。
421:デフォルトの名無しさん
10/03/14 15:33:56
Delphi6 フリーカーソル 無効 に一致する日本語のページ 約 5,280 件中 1 - 100 件目 (0.57 秒)
422:デフォルトの名無しさん
10/03/14 17:20:50
>>420
逆に何を調べたら情報が見つからないのか教えて欲しい
423:デフォルトの名無しさん
10/03/14 17:25:56
あなたには聞いてません。黙っててください。
424:デフォルトの名無しさん
10/03/14 17:33:39
またヴビ厨の自作自演か。さっさとハローワーク行ってこい。
425:デフォルトの名無しさん
10/03/14 21:55:58
>>423は偽善です。私が本物です。
426:デフォルトの名無しさん
10/03/15 09:13:44
フリーカーソル無効化のソースをいじくってDelphi2009、2010でも
うごくようにして使ってるぞ
基本的にはコンパイルエラーを取り除くだけで動く
メモリリークしているかもしれないがw
427:デフォルトの名無しさん
10/03/15 10:19:32
>>414
URLリンク(www.gesource.jp)
428:デフォルトの名無しさん
10/03/15 12:01:32
アプリケーションの実行フォルダにできるdel01.mbっていうファイルは何ですかね。
429:デフォルトの名無しさん
10/03/15 13:35:29
最近のって例えばTStringsにShuffleメソッドを後付けするような機能ってつきました?
古いのでも無理やりできない事もなかったけどオフィシャルな機能として。
430:デフォルトの名無しさん
10/03/15 17:38:45
いい加減秋田
本当に知りたいなら体験版で試せば?
431:デフォルトの名無しさん
10/03/15 17:51:49
海の水はどうしてですか?
432:デフォルトの名無しさん
10/03/15 18:10:44
はい
433:デフォルトの名無しさん
10/03/15 18:20:00
TListViewのSubItemがダブルクリックされた時に
いい感じに編集エリアを出す方法を教えれ。
434:デフォルトの名無しさん
10/03/15 21:09:34
>428
そんなファイルができたのみたことないわ。
>429
クラスヘルパ
435:292
10/03/15 23:22:02
>>428
DBアプリでBDEが作るテンポラリーファイルだったと思う。
アプリ終了しても残ってたら削除しちゃって大丈夫のはず。
436:デフォルトの名無しさん
10/03/16 14:22:20
>>433
ダブルクリックされたら動的に生成すれば素敵やん
437:デフォルトの名無しさん
10/03/16 17:15:17
編集エリアって何??
438:デフォルトの名無しさん
10/03/16 19:08:45
ああもう説明めんどくさい
こんな感じ
URLリンク(www1.axfc.net)
URLリンク(www.codeproject.com)
これをサル移植したけど、いんだかわるいんだか。
439:デフォルトの名無しさん
10/03/16 19:18:20
わるい
440:デフォルトの名無しさん
10/03/16 19:49:02
がっかり
441:デフォルトの名無しさん
10/03/16 20:49:37
わかる
442:433
10/03/16 22:33:14
くそう
せっかく作った(?)のだがウケが悪かったか。
443:デフォルトの名無しさん
10/03/17 02:35:29
がんばれ!ベアーズ
444:デフォルトの名無しさん
10/03/17 09:32:14
ふるぅ
445:デフォルトの名無しさん
10/03/17 15:11:13
それゆけ!レッドビッキーズ
446:デフォルトの名無しさん
10/03/17 20:31:10
コンボボックスのOnMouseLeaveがなんだか変で困っています。
コンボボックス上でマウスを動かすたびにすさまじい
回数OnMouseLeaveイベントが発生します。
エディット等ではなりません。
フォームにコンボボックスとメモだけ貼り付けて、
コンボボックス上でマウスを動かすと、
メモの行数がどんどこ増えていきます。
procedure TForm1.ComboBox1MouseLeave(Sender: TObject);
begin
Memo1.Lines.Add(IntToStr(Memo1.Lines.Count));
end;
環境はDelphi2010です。
なにかうまい対処法はないでしょうか…?
447:デフォルトの名無しさん
10/03/17 21:18:44
ほんとだ、MouseMove並みに呼ばれるなw
飛んでくるウィンドウメッセージ調べたら実際に大量に飛んできてるからVCLのバグとかではなさそうだが・・・・
448:デフォルトの名無しさん
10/03/18 05:12:59
とりあえずの対処としてはイベントの中でFindVCLWindow(Mouse.CursorPos)<>Senderをチェックするのが手っ取り早そう。
449:デフォルトの名無しさん
10/03/18 15:27:19
>>446
とりあえず原因はわかったけど書くと長くなるので対処法だけ
StyleをcsDropDownListにする、これだけ
csDropDownで使う必要がある場合はちょっと面倒なことになるけど
>>448
当たり前だけど全部TComboBox宛の正規のメッセージだから意味がない
違うコントロール宛のメッセージが誤配されてるわけじゃないからね
450:446
10/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にしなくてはならないのです…ジレンマです。
エディット部分が何か悪さしているのでしょうか?
451:デフォルトの名無しさん
10/03/18 17:12:30
Delphi で書かれたアプリがあるんですが
PC 環境を入れ替えたら一部(かつメイン)のファイル出力が出来なくなってしまいました
それ自体は '06-07 ぐらいで開発が止まっています
自分の環境は XP で、最近クリーンインストールしたばかりです
ファイアウォールでの出力禁止はしていません
症状は
「ファイル」メニューから「別名でファイル保存」を選択
ファイル出力のダイアログは出ず、メニューの「別名で…」が選択不能の状態になる
エラーメッセージやイベントログへの吐き出しはありません
替わりになるようなソフトが他にないため、バージョンを遡って試したり
関連情報をググったりしていますが正直お手上げ状態です…
スレ違いかと思いますが、少しでもヒントいただければ助かります
452:デフォルトの名無しさん
10/03/18 18:20:56
>>450
本筋とは外れるけど、フィルタリングみたいなことするならComboBox不向きじゃね?
TEditとTListBoxの方がいい気が
453:デフォルトの名無しさん
10/03/18 21:14:18
>>451
MLで聞いた方が早い気がする。
作者が参加している確率高いだろうし。
454:デフォルトの名無しさん
10/03/18 23:07:43
>451
互換モードでWin2kなり何なり指定してみては?あとは作者に聞くしかなかろう。
Delphiだからどうこういう問題じゃないと思うが。
455:451
10/03/19 00:07:39
>>453-454
レスありがとうございます
そうですね、作者とやりとりできれば最善なんでしょうが
東欧の人だし自分も英語に自信がなく…
ソースは公開されているので、もうちょっとやれるとこまでやってみます
456:デフォルトの名無しさん
10/03/19 07:20:27
ソース公開されてるならリンク書いておけば見てもいいと思う奴もいるだろうに
457:デフォルトの名無しさん
10/03/19 08:58:12
オープンソースなら自分で直せよ
458:デフォルトの名無しさん
10/03/19 10:18:39
>>451
その手の問題って大抵互換モードで解決できるがダメか?
そもそもオープンソースでファイル出力に問題あるとわかっているなら
そこ書き換えるだけじゃないか?
459:デフォルトの名無しさん
10/03/19 22:52:13
あーそうですね
460:451
10/03/19 23:20:30
件のソフトは初代氏と後継氏の二人?がメインで
最新版ソースには初代氏オリジナル部分は含まれず「必要だからここでDLしてくれ」的指示が入っていました
しかし指定サイトは消滅済み
結局、初代氏サイトの旧版ソース(丸ごと)に行き着きました
そこから必要部分をきれいに引き抜けるかどうかは、いまのところ不明
ちなみに初代氏exeのファイル出力はOKでした…。使い勝手も初代と最新で一長一短
とまあ、オープンでも時間が経っていると色々あるんだなぁと思った次第です
以上報告でした。以後名無しに戻ります
461:デフォルトの名無しさん
10/03/20 00:40:52
なんか突っこむ気も起きない
帰ってくれるようだから何も言わないけれども
462:デフォルトの名無しさん
10/03/20 11:05:05
コンポーネントのあるイベントに引数を追加したい時って
コンポーネントを継承した新たなコンポーネントを作らないといけない?
それとも、イベントをオーバーライドして普通のプロシージャーみたいな
使い方って出来る?
463:デフォルトの名無しさん
10/03/20 11:35:48
そのイベントってそのクラス内から呼ばれるんだろ?
だったら持たせたい引数をクラスのメンバーにしてやればいいんじゃないの?
464:デフォルトの名無しさん
10/03/20 11:52:46
>使い方って出来る?
無理です。
OnClick(Sender)に引数追加しようとしたら
呼び出し側もOnClick(Sender, data)とやらないといけないから
どうしてもコンポ側にも手を入れないといけないので。
465:デフォルトの名無しさん
10/03/20 16:36:32
Sender に無理やりポインタ渡すとかの話かと思った。
466:デフォルトの名無しさん
10/03/20 19:25:03
>>462
呼び出し元コンポがそのイベントを呼ぶためにClickやDoClickなどのメソッドを定義していて、
なおかつそれがvirtual、dynamic、messageで宣言されているならオーバーライドできると言えなくもない
実際にClickやDblClickなどのメソッドは仮想メソッドだから、
事実上OnClickやOnDblClickなどの呼び出しはオーバーライドできるし、
それがなくてもウィンドウメッセージがイベントの起点となっているような場合は
そのメッセージハンドラをオーバーライドしてやれば同じことができる
467:デフォルトの名無しさん
10/03/21 11:59:23
>>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
10/03/21 12:36:02
皆さん、レス有り難うございます。
自分にはレベルの高い話の気がしないでもないですが、
出来る前提で色々試そうとも思います。
469:デフォルトの名無しさん
10/03/21 17:18:14
具体的に何したいんよ
それによっては引数なんか追加しなくてもいい気がする
470:デフォルトの名無しさん
10/03/21 18:15:39
普通に Sender だけで何が不足なのかな?
イベントハンドラ内で Sender を通してそのオブジェクトが特定できれば、public な
プロパティーやらフィールドにアクセスするのは簡単だろうに・・
471:デフォルトの名無しさん
10/03/21 22:16:51
あなたには聞いてませんからw
472:462
10/03/21 23:10:05
ListViewのSubItemの編集をしたくてググったり
MLの過去ログ見たりしたんだけど、編集するセルの
ところにEditを出す方法しか見あたらないんで、
Draw系のイベントにstringの引数を追加したら
簡単に出来ないかなと思って。
473:デフォルトの名無しさん
10/03/21 23:11:13
あなたに回答してませんから
474:デフォルトの名無しさん
10/03/21 23:53:45
あなたに答えてませんから
475:デフォルトの名無しさん
10/03/22 08:02:06
DelphiのGUIアプリから、ApacheHTTPサーバにアクセスし、様々な情報を
やりとりしたいです。
使えそうなコンポーネントありますでしょうか?
(Delphi2010 Pro版を使っています)
476:デフォルトの名無しさん
10/03/22 08:43:55
>>476
Indy?
477:デフォルトの名無しさん
10/03/22 08:44:42
安価違い。>>475だた
478:デフォルトの名無しさん
10/03/22 09:02:02
>>476
説明不足ですみません。
私が探しているのは、Indy(など)の上位層になり、例えばフォームにあるTStringGridのデータとか
TEdit.TextなどをまとめてXMLエンコードしIndyに渡すようなコンポを探しています。
フォームとIndyの中間に位置するようなコンポです。
479:デフォルトの名無しさん
10/03/22 12:25:26
冗談だよね
480:デフォルトの名無しさん
10/03/22 13:20:03
いったい何がしたいんだw
481:433
10/03/22 16:24:22
>>462
>ListViewのSubItemの編集をしたくてググったり
おまえは俺か。
URLリンク(cc.embarcadero.com)
ここのは、キャプションの編集を横取りするタイプ。
BCCの文法が混じっていてコンパイル通らないという
サンプルとしていいんだかわるいんだか。
482:デフォルトの名無しさん
10/03/22 17:26:51
>>478
渡すだけとかそんなの自分でコーディングすればええやん
10行もあれば書けるでしょ…
483:402
10/03/22 21:43:34
すみません。サポート窓口に聞くまでもなく自己解決しました。
結局、店頭で購入した場合は「指名ユーザ使用権」であり、
このライセンスなら、自分の所有する複数のPCにインストールOKでした。
定義されていたのは、下記の3カ所。
License_ja.rtfの第2条
「(略)使用証書で他の種類の権利の取得が特定されていない限り、
お客様の取得した権利は指名ユーザー使用権です。(略)」
License_ja.rtfの第2条第3項
「(略)指名ユーザーが本製品の使用を許可された唯一の個人である場合、
適正な数のコンピュータに本製品をインストールすることができます。(略)」
Database Software and Developer Tools Licensing
URLリンク(www.embarcadero.com)
「指名ユーザー ライセンスは、特定の個人に使用権が与えられるライセンスです。
ソフトウェアは複数のコンピューターにインストールして使用することができますが、
同時に 使用できるのは1つのみです。指名ユーザーライセンスを、
複数のユーザーで共有したり譲渡することはできません。
現在、多くのCodeGear開発ツール が、このライセンス形態を採用しています。」
これで安心してノートPCにもXPmodeにもインストールできます。
みなさんコメントありがとうございました。
では名無しに戻ります。
484:デフォルトの名無しさん
10/03/22 22:32:58
乙
485:デフォルトの名無しさん
10/03/25 14:15:19
TPrinterを使用して印刷しているのですがこの場合印刷データを
ファイルに保存することは出来ないのでしょうか?
TPrinterはBeginDocの時にヌルクリアしたDocInfoを使って
StartDocを呼び出しているのでlpszOutputを指定する方法が無く困っています。
なにかいい案がありましたらお願いします。
486:デフォルトの名無しさん
10/03/25 15:19:48
dekimasu
487:デフォルトの名無しさん
10/03/26 01:19:42
TPrinterから派生したクラスを作って、そのインスタンスをSetPrinterで設定するとか。
488:485
10/03/26 08:42:22
>>487
それも考えたのですがTPrinterを使う他のコンポーネントが存在しており
TPrinterは1プログラム1インスタンスで動作するので躊躇していました
(印刷処理以外でもプリンタの状態確認にTPrinter()を使ってます)
派生したクラスを同時に使っても問題無いのでしょうか?
489:デフォルトの名無しさん
10/03/26 15:05:04
質問です。Delphi2010にて、"Generics.Collections"をusesして
ジェネリクスなオブジェクトのリストのコレクションのメンバにアクセスしたとき、
コンパイルは正しくとおって実行してもエラーなく動作するんですが、左上のエラーが消えません。
例えば TObjectList<TForm> だと、
FL:=TObjectList<TForm>.Create;
FL.Add(Form1);
FL[0].Caption:='abc';
というようにメンバにアクセスすると、コンパイルは正しく通るのですが左上のエラーの欄で
!'TObejectList<TForm>'hは'Caption'という名前のメンバを含んでいません。
というようなエラーが消えません。
どういう理由があってこのような状況になってるか、どなたかご教示いただけないでしょうか?
490:デフォルトの名無しさん
10/03/26 20:15:43
コンパイラは最新だがIDEは最新じゃない、と思っておいた方がいい
491:デフォルトの名無しさん
10/03/27 00:07:38
行き詰っているので相談させてください
環境はDeklphi2007です。
delphiでDBの操作ソフトの修正に関わっているのですが、コンパイルすると
SrtingtoTdatabaseは互換性がありません
とエラーがでてとまります。
変数(A,B,C,D)
という行があり、Aは同じソースファイルの中でString宣言、BはTdatabese
宣言、C,Dは不明でA,Bの宣言を書き換えても駄目でした。
元々はDelphi6で前任者が作成したものを小生がXpで使用する為に2007で
コンパイルしています。6の環境は残っておらず、前任者とも連絡が取れません。
C、Dの宣言を探す以外になにかよい解決は無いでしょうか?
492:デフォルトの名無しさん
10/03/27 01:06:58
>488
普通に印刷するときは通常の(デフォルトの)TPrinterのインスタンスを、ファイルに出力するときは
それ用のTPrinterからの派生クラスのインスタンスを、それぞれとっかえひっかえでSetPrinterすれば
いいんじゃないの?
>489
普通にコンパイルするときとエラーインサイトやコードナビゲーションで使用するコンパイラは
違うものなのでそういう現象がおきる。
>491
プログラミングとかDelphiとかそういうものを理解してる?わからないならわからないって上司に
相談したほうがいいと思うが。できなければソフト屋に外注に出すとか。さもなきゃここに
晒すしかない。すくなくとも
> 変数(A,B,C,D)
> という行があり、
とか
> C、Dの宣言を探す以外になにかよい解決は無いでしょうか?
とか意味不明にもほどがある。
493:デフォルトの名無しさん
10/03/27 03:37:29
うるせーばか
494:デフォルトの名無しさん
10/03/27 11:06:13
>>492
上司に相談して解決するなら最初からここにくる訳が無い。
1の書き込みを鵜呑みにしてここに書いた俺が馬鹿だったって事だな。
金輪際来ませんのでご安心ください。。
495:デフォルトの名無しさん
10/03/27 16:15:22
よかった。もう来ないんだって。
誰だって気違いの相手はしたくないもんね。
496:デフォルトの名無しさん
10/03/27 21:12:04
マジレスすると、おそらく関数のパラメータ並びが変更されているのでそれを直す必要がある。
必要な情報は関数のパラメータそれぞれの型とその意味、現在指定されている(エラーになっている)
パラメータそれぞれの型とその意味(内容)。だからCとDの型とその内容は必須な情報。でも
Ctrl+クリックで探せないか?
497:デフォルトの名無しさん
10/03/28 01:06:08
>>489 明示的にTFormにキャストすれば?
498:デフォルトの名無しさん
10/03/28 03:32:37
それやったらジェネリクスの意味ないだろ
馬鹿か?
499:デフォルトの名無しさん
10/03/28 07:55:03
と、馬鹿が申しております。
500:デフォルトの名無しさん
10/03/28 13:17:30
ジェネリクスとTObjectListの区別がつかない
501:デフォルトの名無しさん
10/03/28 14:17:23
>>499
それ本気で言ってるとしたら頭疑うわ
ジェネリクスって何だか分かってる?
502:489
10/03/28 22:37:31
>>497
はじめはTListやTObjectListに入れてキャストしたのをpropertyにしてたんですけど、
ダウンキャストをしたくないのと、getter setterを一々書くのが面倒なんでジェネリクスを使ってるんですよ。
とりあえず割り切ってエラーは見ないように割り切る他ないんでしょうかね。
503:デフォルトの名無しさん
10/03/28 22:39:27
いろいろ書き直してたら日本語おかしいまま書きこんでしまった・・・
最後の行は脳内修正して読んでください・・・
504:デフォルトの名無しさん
10/03/28 23:11:19
まぁエラーインサイトとかは他でも誤動作するし、気にしすぎないほうがいいと思う。
505:デフォルトの名無しさん
10/03/29 02:38:37
エラーインサイトは実装当時から切ってるな
役に立った試しがない
506:デフォルトの名無しさん
10/03/29 21:54:11
お世話になります。
TMemoで行や桁があふれたときだけスクロールバーを出すにはどうしたら良いのでしょうか。
ScrollBarsをBothに設定すると常に出っぱなしで見苦しいのです。
他のコントロールだと自動で出したり引っ込めたりするのに、なぜ?
507:デフォルトの名無しさん
10/03/29 22:02:16
んー自分でOnChangeイベントあたりで制御するしかないんじゃないかなぁ。何でそうなっているかって?
WindowsのEDITコントロールがそう作られているからだな。
508:デフォルトの名無しさん
10/03/29 22:57:00
>>506
SynEditなんてどう?などと適当なことを言ってみる。
509:デフォルトの名無しさん
10/03/30 01:27:19
>>507
そうなんですか…。
Delphiの構文さえ理解してないレベルの自分には難しそうです。
>>508
SynEdit調べましたが、ちょっと用途が違うような。
ただシンプルにテキストが入出力できれば良いので。
ふと思い立って、TRichEditならどうかと。
これはMemoと違い、あふれたときだけスクロールバーが出るじゃありませんか!
これでヨシ!と思ったんですが、今度はポップアップメニューが出ません orz
510:デフォルトの名無しさん
10/03/30 02:43:38
PopupMenuを設定すれば?
511:デフォルトの名無しさん
10/03/30 09:01:56
>>510
やってみます。スクロールバーを出すよりは難しくなさそうなので。
512:デフォルトの名無しさん
10/03/30 22:44:01
Delphi6 Personalを使用中
ヘルプが変です
キーワード検索すれば出てくるけど、VCLリファレンス目次のルーチン一覧(カテゴリ別)には
見当たらない項目がいっぱいあるんですけど、これは仕様でしょうか
FileAge関数とか、カテゴリMBCSユーティリティの全部とか
MBCSユーティリティは重要視されてないのかな
AnsiCompareFileName関数の説明もよく分かりません
・ AnsiCompareFileName 関数は,大文字と小文字を区別しないで S1 と S2 を比較します。比較演算は,現在のロケールに基づいて行われます。
AnsiCompareText('AA','aa') { 0 を返す }
AnsiCompareFileName('AA','aa') { 0 ではなく 1 を返す }
大文字と小文字を区別しないはずなのに…?
AnsiLastChar関数は、文字列処理ルーチン(ヌルで終わる)に入れるべきかと
513:デフォルトの名無しさん
10/03/31 10:58:29
最小化した時も処理を続けていて、その時のデータに応じて
タスクバーに表示される文字を変更したいんだけど
どうしたらいいですか?
514:デフォルトの名無しさん
10/03/31 11:11:06
フォームのCaptionかApplication.Titleを変更する。
515:デフォルトの名無しさん
10/03/31 13:31:53
>>512
そんな10年も前の終わったバージョンに対して文句言うとか頭おかしいんじゃないでしょうか
516:デフォルトの名無しさん
10/03/31 18:19:57
デザイン時にTPageControlを右クリックすると
「ページ新規作成」や「ページの削除」といった
メニューが表示され、追加・削除が出来ますが
これはどのように実現したらよいのでしょうか?
「子・孫を持つパネル」のような自作コンポーネントを
作成していて、その子・孫パネルを追加するのに、
メニューでやりたいなと思った次第です。
517:デフォルトの名無しさん
10/03/31 19:32:09
目で見たものを真似できない人は何も作れないと思う
518:デフォルトの名無しさん
10/03/31 21:33:33
つまり>>517は自分は何も作れないと宣言したかったんですね、わかります
わかりますがそういうのはチラシの裏にでも書いて下さい
519:デフォルトの名無しさん
10/04/01 02:43:49
>>518
わざわざ自己紹介ご苦労さん
520:デフォルトの名無しさん
10/04/01 03:42:49
顔真っ赤だよ?どうしたの?
521:デフォルトの名無しさん
10/04/01 06:50:33
と、顔を真っ赤にして申しております。
522:デフォルトの名無しさん
10/04/01 09:14:51
>>520
つ 鏡
523:デフォルトの名無しさん
10/04/01 12:10:51
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
10/04/01 13:33:09
>>521-522
>>518に向けて書いたんだけど、ひょっとして思い当たる節でもあったの?
525:デフォルトの名無しさん
10/04/01 13:36:00
結局>516が分からない馬鹿しかいないんですね
レベル低いですねもう来ません
526:デフォルトの名無しさん
10/04/01 17:07:10
逆ギレ乙です
527:デフォルトの名無しさん
10/04/02 01:27:09
なんつーか、回答する気も起こらないつまらん質問ってあるよね。
PopupMenu の使い方を知らんのか、動的にコンポつくる方法が知らんのか
こっちが勝手に想像するのも面倒くさいような質問とか。
528:デフォルトの名無しさん
10/04/02 04:22:45
527 はこのスレの意義を理解できないのか?
>Delphi(デルファイ)について、他のスレッドでは書き込めない超低レベル、
>もしくは質問者自身何が何だか分からない質問を
>勇気を持って書き込むスレッドです。
回答する気にならないのなら、黙っていなさい。無理にコメントを書くことは無い。
529:デフォルトの名無しさん
10/04/02 07:08:59
>516が知りたいのはToolsAPI(OTA)の話だと思う。ListViewとかTreeViewのように
デザイナ上でそのコンポーネントのカスタム項目を使えるようにしたい、とか。Inside Delphi
あたりに載ってたような。
530:デフォルトの名無しさん
10/04/02 08:01:18
>>528
拍手ーー
531:516
10/04/02 09:01:08
>>529
仰るとおりです。デザイン時の話です。
ToolsAPIというのは初めて聞きました。ググって見た感じでは
まさにそれっぽいのですが、ちょっと私には敷居が高そうだなあ…。
とりあえず子パネルのSetParentと親パネルのValidateInsertを
overrideして他のコンポーネントを(に)置けないようにして
デザイナ上で貼り付けさせるとかしてお茶を濁すことにします。
532:デフォルトの名無しさん
10/04/02 10:35:21
Source\ToolsAPIとSource\Win32\Property Editorsを参考に(場所はDelphiの
バージョンで違ってくるかも)。
533:デフォルトの名無しさん
10/04/02 13:02:05
もう少しちゃんと説明して下さい
534:516
10/04/02 13:33:33
IDが出ないのをいいことに質問者のフリをして煽る人がいるみたいですね。
まあ句読点とかの文体が違うので、皆さんも分かってるとは思いますけど…。
535:デフォルトの名無しさん
10/04/02 14:41:00
13:33:33
536:デフォルトの名無しさん
10/04/02 15:15:12
>>534
そんなのどうでもいいし
帰れ
537:523
10/04/02 23:12:57
また、Listviewで質問なんだけどmousedownとかうpを
受け付けてもらえないんだけど、なんか設定とかある?
538:デフォルトの名無しさん
10/04/04 20:53:06
エクセルオートシェイプの矢印をTImageやTFormに描き、
bmpで保存したいのですが、それは加納ですか?
というか、滑らかで綺麗な矢印がTImageに描ければ
いいだけなんですけど・・・
誰かソース書いてもらえません?
539:デフォルトの名無しさん
10/04/04 21:04:59
化膿です
540:デフォルトの名無しさん
10/04/04 22:53:11
適当なグラフィックツールで2倍とか4倍に描いたものを縮小してBMP形式で保存して
取り込めばいいんじゃね?
541:デフォルトの名無しさん
10/04/06 11:56:00
オートシェイプをPrtScnキーで取り込んでMSペイントで保存してTImageでStretchする。
542:デフォルトの名無しさん
10/04/06 23:29:32
フォームの上にパネルを1個置き、パネルのボーダースタイルをbsSingleにします。
そのパネルの上にボタンを置きます。ボタンのアンカープロパティを[akRight,akBottom]に設定します。
で、フォームの右クリックメニューから「エディタで表示」して、「フォームを表示」で元に戻します。
これを繰り返すとボタンの位置がどんどんずれていきます。マジで堪りません。
プロジェクトを開くたびにどんどんおかしくなっていきます。
543:デフォルトの名無しさん
10/04/06 23:35:15
パネル以外のコンテナでもページコントロールのBorderWidthを設定したり、
スクロールボックスでも発生します。アンカーはデフォルト以外に設定すると
位置がずれていたり、サイズが変わったりします。
ポトペタが売りの製品で基本の部分でバグるなんてあまりにもひどすぎます。
クソツールのようです。
544:デフォルトの名無しさん
10/04/07 01:53:38
そういうのはオッチャスレでやってください
ここは質問スレです
545:デフォルトの名無しさん
10/04/07 02:00:21
一応手持ちの歴代Delphi(6~2010)で試してみたけど発生しないなw
捏造もオッチャスレの受け持ちなんでやっぱりあっちでどうぞ
バージョン書いてない時点で結構怪しかったけど
もしくはパッチあててないだけという情けない落ち?
546:デフォルトの名無しさん
10/04/07 09:52:03
>>545
まじで言ってます?2010でも2005でも発生しますよ。それ以前は試してません。
「エディタで表示」ってのはフォームのDFMをテキスト形式でみるメニューのことです。
で、「フォームを表示」で元に戻すと、1回やるたびに4ピクセル分ずれます。
4ピクセルってボーダーの幅(GetSystemMetrics(SM_CXBOARDER)で、その分、クライアント領域が
小さくなるのにAnchorsなどの配置処理で考慮に入れてないんじゃ?と思ってます。
ソース追っかけ中。
547:デフォルトの名無しさん
10/04/07 10:01:07
環境によって変わるのでわ?
自分もPanelの中に貼り付けたコンポをalclientにしているのに高さが追随してくれない現象を体験しているので。
この現象が出るのはXPでW2Kは問題なしだが、自分以外のXPマシンでどうだかは知らない。
(Del7pro/W2Kでコンパイル/パッチは全部当ててるはず)
548:デフォルトの名無しさん
10/04/07 10:07:20
自分の試した環境ではWinXPモードとWin7とWin2000で発生します。
ここではボタンを配置しましたが、Anchorsプロパティをデフォルトの[akLeft,akTop]以外に
設定したコントロールすべての位置、サイズがどんどんずれていきます。
コンテナの方はパネル、スクロールボックス、ページコントールのタブシートなどです。
549:デフォルトの名無しさん
10/04/07 13:17:22
2k+D7Pro発生せず。
他のコンポでも試したがなんもおこらんよ。
手順は>>542の通りやった。
550:デフォルトの名無しさん
10/04/07 13:42:02
XP+2010で発生せずだなー。
Turboもあるけど試してない
551:デフォルトの名無しさん
10/04/07 14:47:13
よほど特殊な環境なんだろうな
なのに環境情報は後出し、しかも小出し
解決する気のないただのアホにしか見えない
552:デフォルトの名無しさん
10/04/07 16:41:28
URLリンク(www1.axfc.net)
のコメントDelのSc_100990.zipでアップロードしておきました。5秒で再現できるんですが。
上記の操作を繰り返すとボタンの位置がずれていきます。
553:デフォルトの名無しさん
10/04/07 18:38:24
2k+D6Per発生せず。
手順は>>542の通りやった。
554:デフォルトの名無しさん
10/04/07 19:23:08
xp(sp3)+d7ent(sp1)だけど発生しなかった。
HDDを交換でXPをクリーンインストールしたいんだけど
D7のライブラリパスとかを一発で元に戻す事ってできる?
555:デフォルトの名無しさん
10/04/07 20:24:04
>>553
んー。発生しませんか。お手数おかけました。ありがとうございます。
しばらくもうちょっと調べてみます。
556:デフォルトの名無しさん
10/04/07 22:17:01
>554
該当レジストリを持っていくっていう手もあると思うが>設定の引っ越し。
557:デフォルトの名無しさん
10/04/07 22:55:14
xp sp3+turbo delphiで発生しますた
558:デフォルトの名無しさん
10/04/08 10:51:28
発生してた奴はOSとDのバージョンだけじゃなくて
ウィンドウ周りに関する環境設定情報を全部書き出せ
559:デフォルトの名無しさん
10/04/08 10:55:20
そんな書き方じゃまともな情報は上がってこないぞ
560:デフォルトの名無しさん
10/04/08 17:14:14
今のところ再現画像、再現動画等なし
561:デフォルトの名無しさん
10/04/08 19:32:37
オレのところでも発生したわ。
557と同じXPSP3+Turboだけど。
bsSingleとかで検索したら、似て非なる事例が何個か出てくる。
562:デフォルトの名無しさん
10/04/09 11:22:49
自演、乙。
オッチャ盛況だよ。
563:デフォルトの名無しさん
10/04/09 16:00:49
何個かしかないなら挙げればいいのに、しないのは何故なんだろうね
564:561
10/04/09 16:55:56
Win98+Del6Per(XPSP3上のVirtual PC 2007)では発生しなかったわ。
アンカーの両側がオンだと、繰り返すたびにボタンが縮んでいくのが笑える。
まあ確かに、くだすれの話題ではないか。
565:デフォルトの名無しさん
10/04/11 13:25:46
Del7のVCLに直接手を入れて使ってる人いる?
VCLってリコンパイルできるのかな。
566:191
10/04/11 14:21:39
超初心者スレなのにみんなレベル高すぎでついていけませんT_T
567:デフォルトの名無しさん
10/04/11 14:39:48
途中で書き込んじゃった。
最近のバージョンって書籍でリファレンスって出てないんでしょうか。
自分としては首っ引きでページ捲り捲り勉強する方がしっくり来るのですが…
昔はパッケージにちゃんと含まれてたんですよね?
568:デフォルトの名無しさん
10/04/11 15:30:19
>>565
できる
>>566-567
印刷
569:デフォルトの名無しさん
10/04/11 20:14:09
コミュニケーションのとれないおっさんだなw
570:デフォルトの名無しさん
10/04/12 00:41:45
おっさんきもい
571:デフォルトの名無しさん
10/04/12 13:10:21
おっさんかっこいい
572:デフォルトの名無しさん
10/04/12 14:25:42
あっちゃんかっこいい
573:デフォルトの名無しさん
10/04/13 11:51:03
>>569△
574:554
10/04/13 22:35:55
ライブラリパスって普通にテキストでコピーしとけば良かったのね。
575:デフォルトの名無しさん
10/04/14 12:56:06
Javascriptはやたら柔軟です。
ブックマークレットの例
Javascript:for(var I=0;I<3;++I){alert(['One!','Two!!','Three!!!'][I]);};
Delphi言語では上記の ['One!','Two!!','Three!!!'][I] みたいなお手軽な書き方はないでしょうか?
オープン配列コンストラクタというのが近いかなと思ったんですが、違ったようです。
576:デフォルトの名無しさん
10/04/14 13:10:11
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] が通るようになるかもしれないけどな。
577:デフォルトの名無しさん
10/04/14 13:29:46
Cだと通るよね
578:デフォルトの名無しさん
10/04/14 13:44:23
>>575
URLリンク(d.hatena.ne.jp)
URLリンク(d.hatena.ne.jp)
この辺を応用すると一応書ける
uses .., Types;
var
s: string;
i: Integer;
begin
for s in TStringDynArray.Create('One!','Two!!','Three!!!') do
ShowMessage(s);
for i := 0 to 2 do
ShowMessage(TStringDynArray.Create('One!','Two!!','Three!!!')[i]);
end;
579:デフォルトの名無しさん
10/04/16 12:32:54
教えてください。D6パーソナル使用です。
EXE自身のアイコンをTImageに表示しています。
アイコンの透過色が透明になってくれるのは良いのですが、白色まで透明になってしまいます。
何がいけないのでしょうか。それとも全部間違っているのでしょうか。
プロジェクトのオプションに設定しているicoファイルはこんな感じです。
URLリンク(www1.axfc.net)
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;
580:デフォルトの名無しさん
10/04/16 13:46:07
transparent
581:デフォルトの名無しさん
10/04/16 15:39:26
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;
と、やってみたら大丈夫でした。
こんなコードでいいんでしょうか???
582:デフォルトの名無しさん
10/04/18 00:36:03
ListBox.Items.Selectedが画面外の時、
その項目が表示されるようにスクロールするやり方教えてください
583:デフォルトの名無しさん
10/04/18 04:35:59
はい
584:デフォルトの名無しさん
10/04/18 06:47:12
>>582 TopIndex
585:デフォルトの名無しさん
10/04/18 06:51:43
>>581
Image1.Picture.Assign(Application.Icon);
これだけでいいと思う。(D6パーは持ってない
586:デフォルトの名無しさん
10/04/18 16:59:50
>>582
MakeVisible
587:デフォルトの名無しさん
10/04/18 23:10:54
キャプチャーを作ってみたんだけど、ウィンドハンドルからデバイスコンテキストを
取得して指定の画面のキャプチャーを取ってるつもりなんだけど、わざと取りたい画面の上に
別のウィンド置いとくとその別のウィンドもキャプチャーされるんだけどそんなもの?
588:デフォルトの名無しさん
10/04/19 00:14:15
XP以降なら個別にとれる
詳細はググれ
589:587
10/04/19 02:37:57
ググったらで来た。
ありがとう
590:デフォルトの名無しさん
10/04/19 07:57:21
>>589
興味有るから、やり方教えて
591:デフォルトの名無しさん
10/04/19 09:51:25
printwindowを使うんだって。
使い方はググった方が早い。
簡単だよ。
592:デフォルトの名無しさん
10/04/19 14:00:11
>>585
D6パーソナルでもOkでした。正解はスッキリ簡単でしたね。
リソースからアイコン削除してApplication.Iconが無い状態(有り得ないけど)にしても
表示されないだけでエラー無し。
教えてもらってから理解したけど、IDEでImage1.Pictureに画像をセットするのとほぼ同じ動作ということですね。
ありがとうございました。
593:デフォルトの名無しさん
10/04/19 17:55:06
>>591
ありがとう!
がんばってみる
594:デフォルトの名無しさん
10/04/20 23:58:23
IDEのエディタマクロ書きたいんだけどそういう情報ってどこにあるの?
595:デフォルトの名無しさん
10/04/26 17:46:07
RichEditにDephiのソースコードを着色した状態で表示する
サンプルなりコンポなりがあったら教えてください。
596:デフォルトの名無しさん
10/04/26 19:50:22
TParser使え
597:デフォルトの名無しさん
10/04/26 22:45:23
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とは無関係です。
598:デフォルトの名無しさん
10/04/26 23:01:57
SelAttribute(ただし遅い)
599:デフォルトの名無しさん
10/04/26 23:34:48
>>598 ありがとうございます。
SelAttributesはヘルプによると、
>テキストを新規に挿入するときには,SelAttributes のフォント属性が適用されます。
とのことなので良さそうなのですが、改行無しで文字列を追加したい場合はどのように
すれば良いのでしょうか?
600:デフォルトの名無しさん
10/04/26 23:36:49
seltext
601:デフォルトの名無しさん
10/04/27 00:06:58
>>600 うーん分からないです。
SelTextプロパティを使ったサンプルをいただけないでしょうか。
602:デフォルトの名無しさん
10/04/27 00:10:21
つ URLリンク(www.google.co.jp)
603:デフォルトの名無しさん
10/04/27 00:50:57
ああっ、分かりました!
SelStart := GetTextLen;
SelText := 'ABC';
ですね!
「Delphi SelText SelAttributes」でググると一番最初に出てくる
URLリンク(delphi.about.com)
の記事が分かりやすいです。
今までさんざん探してたんですが、こういう単純で基本的な内容のサンプルは初めて見ました。
ようするに、
with RichEdit1 do
begin
SelStart := GetTextLen;
SelAttributes.Color := clBlue;
SelText := 'エンバカデロ';
SelAttributes.Color := clBlack;
SelText := 'Delphi'+CRLF;
end;
みたいな感じにすればOkですね。これをprocedureにしてみます。
ありがとうございました。
604:デフォルトの名無しさん
10/04/27 08:53:22
グループボックスのCaptionがCheckBoxになっているコンポーネントってないでしょうか?
605:デフォルトの名無しさん
10/04/27 09:06:16
グループボックスのキャプションをなしにして、キャプションの位置にチェックボックスを置けば?
606:デフォルトの名無しさん
10/04/27 16:29:52
>>604
ググって一発で出てきたんだけど
URLリンク(www.delphidabbler.com)
607:デフォルトの名無しさん
10/04/27 20:18:13
?
608:604
10/04/27 23:56:33
>>605,606
トンです。
でけました。
609:デフォルトの名無しさん
10/05/02 08:17:35
del標準の関数でbitmapをjpegに変換すると、低圧縮でも汚いのできれいに変換できるコンポとかってないですか?
610:デフォルトの名無しさん
10/05/02 08:23:04
ないです
611:デフォルトの名無しさん
10/05/02 13:29:03
>>609
JPEGが何なのか調べてくるといいですよ^^
612:デフォルトの名無しさん
10/05/03 15:08:57
正しいことが何なのか、この胸にわかるまで~
613:609
10/05/03 23:15:23
Jpegへ綺麗に変換できるコンポがあって説明を読むと、
delphiのはサンプリングが4:1:1だから汚いと書いてありました。
del7proなんですが、このサンプリングレートを変えることは出来ませんか?
614:デフォルトの名無しさん
10/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;
で作ってあります。
どなたかわかる方おられましたらよろしくお願いします。
615:デフォルトの名無しさん
10/05/04 03:06:22
なんで数字まで変わっちゃうんでしょうか
616:デフォルトの名無しさん
10/05/04 03:41:13
>>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
10/05/04 08:24:11
>>615
レスありがとうございます。
数字は素で間違えました;
618:デフォルトの名無しさん
10/05/04 08:37:43
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
10/05/04 15:27:34
>>618
こういった書き方は、初めて知りました。
とても勉強になりました。ありがとうございます。
620:デフォルトの名無しさん
10/05/05 09:59:28
>>618
そこまでこだわるならHigh(Integer)じゃなくて(High(Integer)+1)じゃね?
もしくはせっかく定数が用意されてるんだからMaxInt+1でもいいかと
621:デフォルトの名無しさん
10/05/05 14:11:06
ranges: array [0..255] of Single; とどう違うかさっぱりワカンネ
622:デフォルトの名無しさん
10/05/05 23:27:13
何で1足すんだよ
623:デフォルトの名無しさん
10/05/06 01:25:46
>>621
どう違うかどころか全然違うよw
実際に計算してみたら?
>>622
High(Integer) div SizeOf(Float)じゃなくてHigh(Integer) / SizeOf(Float)を計算すれば分かる
624:デフォルトの名無しさん
10/05/06 01:55:41
相変わらずどうでもいい頑張り方だな
625:デフォルトの名無しさん
10/05/06 04:02:03
そのどうでもいいレスよりマシじゃない?
626:デフォルトの名無しさん
10/05/07 10:01:09
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で統一させたいので質問させていただきました。
宜しくお願い致します。
627:デフォルトの名無しさん
10/05/07 11:37:45
BDE からの接続形態は?
ODBC ? SQL-Link ?
628:デフォルトの名無しさん
10/05/07 12:08:57
>>627 ODBCです
629:デフォルトの名無しさん
10/05/09 17:07:02
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
10/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.
631:デフォルトの名無しさん
10/05/10 01:55:29
なんで乱数を使わないのかと小一時間
632:629
10/05/10 04:10:41
>>631
期待している動作としては
a, b, c, d ... z, aa, ab, ac .. az, ba, bb
みたいな感じで指定した桁数の文字列を生成したいです。
633:デフォルトの名無しさん
10/05/10 05:36:27
テストとか学校の課題?
>ぐぐってみたら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
10/05/10 05:58:41
>>633
いえ、ブルートフォースもどきなプログラムを作ろうと思ってまずは文字列生成部分を作ってみようとしました。
参考URLはURLリンク(dobon.net)です。
同じように26進数のことをいわれていたのですけど、
結局わからなかったです。
まさか32bitに収まらないとは・・・
なんとなく10桁って書いたので6桁でも8桁でもいいのですが・・・
635:デフォルトの名無しさん
10/05/10 09:00:01
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;
636:デフォルトの名無しさん
10/05/10 09:00:54
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書いたほうがいい。
637:デフォルトの名無しさん
10/05/10 15:34:26
別にCなんか使わなくてもインラインアセンブラで十分じゃん
638:629
10/05/10 16:20:22
URLリンク(www.ss.u-tokai.ac.jp)
ここを参考にしたらなんとかいけそうでした。
ご協力ありがとうございました。
639:デフォルトの名無しさん
10/05/11 14:28:43
Delphi7だけどバグの修正これでいいかな
Quality Centralの33496
URLリンク(qc.embarcadero.com)
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も治っていないけど)
640:デフォルトの名無しさん
10/05/12 01:08:13
//if Text = cLineCaption then
if IsLine then
でしょ
641:デフォルトの名無しさん
10/05/12 10:44:10
フォームのAlphaBlendを使った時に特定のコンポだけは透明化されないようには出来ないでしょうか?
642:デフォルトの名無しさん
10/05/12 12:15:46
AlphaBlendなフォームの上に
Transparentなフォームをぴったり重ねればできそうだけど
アホっぽいなw
643:デフォルトの名無しさん
10/05/12 13:04:26
バイナリデータを文字変数を使って処理しています
以下のようにすると、バイナリ状態の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文字ずつループを回せば
出来ましたが、もっと簡単に出来ますか?
よろしくお願いします
644:デフォルトの名無しさん
10/05/12 13:11:55
なんでAnsiStringなんかに入れるの・・・
Byte配列でええやん
645:デフォルトの名無しさん
10/05/12 13:34:12
警告ごまかしたいなら
w := WideString(PWideChar(Pointer(s)));
w := WideString(PWideChar(@s[1]));
で行けるんじゃね。
Stringをバイナリコンテナとして使う場合
別に文字コードなんて関知しないから問題ないはず。
646:デフォルトの名無しさん
10/05/12 18:04:55
>>644
何をどうすれば出来て、何が最善なのか分からないんです
実は当初、Byte型の動的配列で検索とかいろいろやってました
TByteDynArrayとかオープン配列パラメータとか使ってみたり
勉強にはなったんですが、配列要素を切ったりつなげたりのやり方が
よく分からなかったのと、いちいちSetLengthするくらいならStringの方が
簡単かつオールマイティで良いではないかと考えたんです
ちなみに配列版の試作途中ソースは誤って削除してしまいました(アホ)
>>645 ありがとうございます
WStr:=WideString(PWideChar(Pointer(Bytes)))
とすることで警告が出なくなりました
さらに、
WStr:=WideString(Pointer(Bytes)) でもOkでした
ということはと考えて、
Bytes:=AnsiString(Pointer(WStr)) とすると逆変換も出来ました
空文字やヌル付きでもそのまんま、ありのまま相互変換するようなので分かりやすいです
ポインタとかの理解度5%程度なのでよく分かってませんが、このPointer(文字型変数)
というのは単なるポインタじゃなくてポインタ型、文字列の長さ情報をも含んでいるんですね
ヘルプ見ても断片的に「型なしポインタ型」としか書いてないし…
配列でなく、オールマイティな?Stringをバイナリコンテナ(カッコ良い言葉なのでこれも拝借)
として使うのは、方向性として間違ってはいませんよね?
それともやはり配列使うべきでしょうか? 配列の利点があれば教えてください
647:デフォルトの名無しさん
10/05/12 19:05:45
>>646
あんたなかなかセンスいいw
648:デフォルトの名無しさん
10/05/12 20:50:44
>>642
それやったことあるw
よっぽど重いアプリでも作らない限り無難に理想の動作はしてくれるよ。
リサイズさせない移動させないサブフォームでなら普通に使える。
649:デフォルトの名無しさん
10/05/12 21:59:47
Del7を使っています。
WinSight32である特定のウィンドハンドルを見たら、そのウィンドウを隠した(スライドさせる)時に
hidden となるのですが、この hidden になっているかどうかはどうすれば分かるでしょうか?
650:デフォルトの名無しさん
10/05/12 22:57:03
IsWindowVisibleとか
651:デフォルトの名無しさん
10/05/12 23:58:52
>>646
使ってるDelphiのバージョンが分からないけど、そのバージョンを一生使い続けるならそれも可
でも乗り換えることがあるなら、string型はすでに仕様が2回ほど変わった過去があるので
そのキャストが今後も使えるとは限らないし、配列を使った方が確実にいいと思う
だからそのコードは偶然動いた程度に考えた方がいいかと
あと利点云々は変換した後何するかによるし、もう少し情報出してくれないと・・・
652:649
10/05/13 00:17:33
ありがとうございました。
状態の取得が出来ました。
新たな質問なのですが、
他のソフトのテキスト描画色を取得したくて、ググったらGetTextColorというのにたどり着きました。
var
CL: TColor;
begin
CL:=GetTextColor(DC);
と、やってもCLには「0」が入ります。
DCの取得は出来ています。
TColorをTColorRefとしてもダメでした。
どなたかよろしくお願いします。
653:デフォルトの名無しさん
10/05/13 01:01:48
0は黒だが
654:デフォルトの名無しさん
10/05/13 01:10:32
WStr:=WideString(PWideChar(Pointer(Bytes)))
による PWideChar->WideString の変換は、
#$0000 が出現するまでのデータを (_WStrFromPWChar によって)
WideString データに変換するけど、
WStr:=WideString(Pointer(Bytes))
と
Bytes:=AnsiString(Pointer(WStr))
は、ポインタ型のつじつま合わせを行った後に代入(_WStrAsg/_LStrAsg)
するので、後々トラブルが発生するかも。
前者は、バージョンによって、危険な場合があり、、
特に後者は、確実に refCnt いじってメモリーリークしているので危険。
655:デフォルトの名無しさん
10/05/13 06:47:59
>>653
レスありがとうございます。
その描画色はなん色か時間によって変わっていって黒は使われていないんです。
描画されている文字列を取得すると正しく取得できるし、WinSightで見てもハンドルは
間違ってはいないので、デバイスコンテキストも間違ってはいないと思うのですが。
656:デフォルトの名無しさん
10/05/13 07:35:18
>>654
>特に後者は、確実に refCnt いじってメモリーリークしているので危険。
w: WideString;
s: String;
w := '幹事';
s := AnsiString(Pointer(w));
がリークするの?
FastMM4は沈黙してるけど。
657:654
10/05/13 12:26:30
Windows では、WideString は、OLE 文字列や BSTR 互換なので、
AnsiSting とは、メモリ管理方法が異なる。
WideString は、SysAllocStringLen などで
領域確保しているので FastMM4 の管理外。
WideString のオフセット -4 には、長さに相当するバイト数が
格納されていて、それ以外はしらん。
しかし、AnsiString を代入するときは参照カウントが格納されている
オフセット -8 の refCnt フィールドを調べたり、いじったりする。
658:デフォルトの名無しさん
10/05/13 12:39:38
WideString (BSTR) は参照カウンタ管理されていないので、ストリングのコピーが複製になるため「遅い」
という問題を回避するために導入されたのが参照カウンタ付き UnicodeString なわけなので
WideString 側には refCnt なんてフィールドはありませんよ。
UnicodeString と混ざってしまっているかな?
659:デフォルトの名無しさん
10/05/13 13:47:46
なんか疑問だな バイナリを入れるなら byte の配列を用意したほうが自然
Bytes: array of byte; で、WStr := WideString(Pointer(Bytes)); でどうなのか
660:デフォルトの名無しさん
10/05/13 14:14:50
WStr := WideString(Pointer(Bytes))
だと、Bytes配列はヌル終端してる必要ある?
661:デフォルトの名無しさん
10/05/13 14:22:08
>>659
バイト配列の話なんて誰もしてないから
662:646
10/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
10/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
10/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
10/05/13 16:52:06
ついで。
Dynamic Array -> Pointer
=> 型キャスト
Pointer -> Dynamic Array
=> 型キャスト
666:デフォルトの名無しさん
10/05/13 21:33:15
>「これらのキャストはすべて危険、未来も無いからやめとけ」
んなこたない。
生ポインタをC文字列とみなしてDelphiの文字列に変換する機能は
Win32APIを叩く際の根幹的な機能だからそんな簡単に仕様変更なんてあるわけがない。
いくらなんでも脅かされすぎ。
667:646
10/05/14 02:20:53
あれ、今までのレスをよく見直すと、
WStr:=WideString(Pointer(Bytes))
は危険な可能性有りだけど、
WStr:=WideString(PWideChar(Pointer(Bytes)))
は問題無いと言う見解ですかね?
>>666
仕様変更は無いだろうというご意見も覚えておきます
どちらにせよ、もうキャストはしないと決めました
「キャスト」なる仕組みは完全に明らかである、という状況ではない以上、
使うべきではないと思いました
668:646
10/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;
キャスト方法のアドバイスをくれた方、ご意見下さった方、ありがとうございました
大変勉強になりました
669:デフォルトの名無しさん
10/05/14 03:12:16
>>666
今までに変更があったという事実は無視なの?
670:デフォルトの名無しさん
10/05/14 04:43:03
コーディングスタイルは人それぞれだね
1行だけのforならbeginもendも不要なのに
671:デフォルトの名無しさん
10/05/14 04:46:14
エンバグの元なのに?
672:デフォルトの名無しさん
10/05/14 06:40:31
既に決着済みではあるけど一言だけ。
>>667
>「キャスト」なる仕組みは完全に明らかである、という状況ではない以上、
明らかに間違った使い方は示されたけど
Delphiの仕様の抜け道を使ったような未定義のやり方はないよ。
少なくともそんな指摘はまったく出ていないように思うが。
曖昧論やらべき論は出てきたが。
673:652
10/05/14 08:14:15
GetTextColorについて質問をしたものです。
あれから色々試していたのですが、例えば赤で描かれたテキストがあって、
その色を取得しようと、GetDCPenColor、GetDCBrushColor、GetBKColorとか
やってみたのですが、赤の値が取れませんでした。
何か他にやり方ってあるのでしょうか。
それとも、アキラメロンなのでしょうか。
674:デフォルトの名無しさん
10/05/14 10:29:38
>>673
座標を取ってGetPixelしてみるとかはどう?
675:デフォルトの名無しさん
10/05/14 21:57:57
描かれてしまったものは単なる絵だから。
描いたときのペンやブラシやテキストカラーの設定が現在も残ってると期待するのは無理
676:652
10/05/14 23:43:02
>>674
ありがとうございました。
GetPixelで何とか出来ました。
>>675
そういうことなんですね。
納得しました。
ありがとうございました。
677:デフォルトの名無しさん
10/05/15 00:08:51
Form1の他にForm2を作ってメニューからForm2の表示、非表示させてるんだけど、
Form2を表示中にメインのForm1を最小化させると一緒に画面から消えちゃうの何とかならん?
678:デフォルトの名無しさん
10/05/15 15:35:35
今デルヒで一番安く手に入る環境(違法じゃないの、新品の)でお願いします?
679:デフォルトの名無しさん
10/05/15 16:10:05
>>678
URLリンク(kaidoku.ocn.ne.jp)
コンポーネントを一緒に買う気があるなら
URLリンク(www.componentsource.co.jp)
680:デフォルトの名無しさん
10/05/15 16:13:24
あ、直販の方が安いのか
URLリンク(www.embarcadero.com)
681:デフォルトの名無しさん
10/05/15 22:29:59
頼む 日本語で
682:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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;
684:デフォルトの名無しさん
10/05/18 22:30:32
カード占いをするソフトを作りたいと思っています。
(1)カードの使用枚数と配置を決める
(2)カードを配置して裏返し、表示させる。
(1)でカードの位置を、マウスでクリックした位置に決めて
カードの裏向きの画像ファイルを表示させたい
のですが、どうすればいいでしょうか。
685:デフォルトの名無しさん
10/05/18 23:04:57
ActiveXのWindowsMediaPlayerコンポーネントで、
動画再生時にビデオの明るさを変更する方法はありますか?
WindowsMediaPlayerの「拡張設定」の「ビデオ設定」にある「明るさ」を変更できる方法があればいいのですが。
686:デフォルトの名無しさん
10/05/19 00:51:54
>>684
その通りにやればいいだけじゃ?
どこで詰まったのかもっと具体的に言わないと答えようがないだろ
一から手取り足取り教えてもらいたいなら金払ってサポートしてもらえ
687:デフォルトの名無しさん
10/05/19 03:56:58
>もしくは質問者自身何が何だか分からない質問を
>勇気を持って書き込むスレッドです。
>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;
688:デフォルトの名無しさん
10/05/19 12:06:14
マルチスレッドのデバッグってどうすればいいでしょうか?
1つのスレッドを動的に複数Createして同時に実行した時に、ブレークポイントで止めていると
Delphiが固まってしまいます。
Del7です。
よろしくお願いします。
689:デフォルトの名無しさん
10/05/19 15:55:47
>ブレークポイントで止めていると Delphiが固まってしまいます。
D7 が現役の頃にはそんな経験無いですけどね。
>Del7です
OS は? CPU は?
Vista/Win7 だとあきらめるしかないかも。
690:デフォルトの名無しさん
10/05/19 16:35:03
起動中のアプリケーションでコマンドラインを受け取るにはどうすればいいのでしょうか?
a.exe -hoge -piyo
が何度か呼び出される感じ(引数は変わる)なのですが・・・
多重起動は禁止にしてます。
691:デフォルトの名無しさん
10/05/19 16:55:10
すでに起動中のアプリケーションに、後から起動された(同一)アプリケーションのコマンドラインオプションを
渡すのかな?
Windows はマルチタスク/マルチインスタンスサポートの OS なので、別々に起動されたアプリケーションは
別々のインスタンスとして管理されます。何らかのアプリケーション間通信をおこなう必要があります。
擬似コードとしては
program A;
begin
if 俺は起動中かな then
begin
起動中のインスタンスにコマンドラインを渡す( paramstr(1), paramstr(2)...)
end
else
通常実行開始
end;
後から起動されたアプリケーション A2 から、すでに起動しているアプリケーション A1 にデータを送るには、
sendmessage がつかえますが、メッセージを受信するためのウィンドウが必要(非表示でよし)なので
純粋なコマンドラインツールだと余計な手間がかかるでしょう。
692:688
10/05/19 17:05:30
>>689
レスありがとうございます。
説明不足でした。
ブレークポイントで止まってるだけなら何ともないのですが、ステップ実行を何行かすると
フリーズしてPCのリセットボタンを押さないといけなくなります。
マルチスレッドが1つだけの時は、正常です。
ヘルプを見るとマルチスレッドのデバッグの項目はあるのですが、イマイチよく分からないです。
693:デフォルトの名無しさん
10/05/19 17:14:22
>>292
XP+Turbo(2005)のわたしも同じ状況に見舞われてます。
以前わたしも、ここか雑談スレで相談しましたが、解決方法はわかりませんでした。
一応、めちゃくちゃ反応は鈍いですが、操作は可能です(時間的には、リセットで再起動の方が早いと思いますが)。
こちらでは、頻度は低いですが、マルチスレッドというか、シングルスレッドでも起こりますので、
スレッドをデバッグした時になるのだと思います(といっても、メインスレッドは別だから、結局はマルチスレッドなのだろうけど)。
おそらくデバッガーの問題かと。こちらでは、なるべくブレークポイントは使用しないという消極的な回避策で対処してます。
694:デフォルトの名無しさん
10/05/19 17:28:09
>>691
ですです。
だいたいおんなじことを考えていたのですが、
> 起動中のインスタンスにコマンドラインを渡す( paramstr(1), paramstr(2)...)
ここがわかりませんでした。
後出しですみません。
作ってるアプリはGUIアプリです。
695:デフォルトの名無しさん
10/05/19 17:32:15
>>694
あと、コマンドラインを渡したあと、どうやって受け取るのかもわからなかったです。。。
696:デフォルトの名無しさん
10/05/19 18:54:34
>>687
やっぱりああやって書くとレス付きやすいですねw
あざーすww
697:デフォルトの名無しさん
10/05/19 18:57:28
>>694
SendMessageが使えるって書いてあるじゃん
よく読めよ
698:684
10/05/19 21:08:27
>>686,687
ありがとうございます。
やってみます。
699:デフォルトの名無しさん
10/05/19 22:25:41
>>696はいかにもゆとり
700:デフォルトの名無しさん
10/05/20 00:51:52
マルチスレッドのデバッグっていくつか前に書いてなかったか。
俺も参考にさせてもらった。
今は忘れた。w
701:これかな?
10/05/20 01:10:29
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がフリーズせずにデバッグできるようになりました。
勉強になりました。