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

このエントリーをはてなブックマークに追加
>879
SendMessageかmouse_eventでだいたい再現できると思う。
ビットマップにドットを打つ場合、
一番高速に処理できるものってどれなんでしょうか
ScanLine? それともAPIから?
レジストリから REG_BINARY を読み込んで
文字列にして表示する方法はどないすればよかとですか?

ReadBinaryData や
APIの RegQueryValueEx を使ってもどうにもうまいこといかんのです。
バイナリデータを文字列にして表示する方法は知ってるの?
それともレジストリから取るのができないの?
>>897
Scanline
901デフォルトの名無しさん:04/03/05 22:46
誘導されたので、こちらで質問よろしいでしょうか。
バージョン6のパーソナル使ってます。
MP3を鳴らそうとして、コンポーネント、ActiveXからWindowsMediaPlayerを追加しました。
ここで、繰り返し再生させたいのですが、WMPの設定で連続再生のボタンにチェックをいれても
1回しかならずに止まってしまいます。

どのようにすれば繰り返し再生できるのでしょうか。

なお、通常のTMediaPlayerを使用すると富士通のパソコンだと動くのですが、
vaioだと鳴らなかったりしたんで、WMPをインストールしました。
902デフォルトの名無しさん:04/03/05 23:45
D6 Proで組んだプログラムなのですが、
Keybd_eventでキーの模擬をしているのですが、Win2000では何の問題も無いのに
XPではたくさんエラーが出てしまいます。
XPをクラシック表示にしても同じです。

この症状の回避策ってご存じ無いでしょうか?
他のスレが良ければ誘導してください。
とりあえず、「エラーが出ます」って場合は
そのエラーを書くのが(略)
904885:04/03/06 00:58
>>889
そのとおりでした。小さいファイルでやったらうまくいったYO

>>890
ムリ
905902:04/03/06 10:01
>>903
keybd_eventを使って100回ぐらいキーを入力させているのですが、
Win2000マシンではなんの問題も無いのに、XPマシンだと模擬したキーが抜けるとか、
全くキーコードが送出されないときがあるんですよ。
NT系のOS は何故かキーをロストする妙な現象が昔からあったからね。
(キーボード端子から10mS以内に2つのキーを送ると2つめが無視される)
とりあえず時間を置いてみたら?
keybd_event は物理的なキー押し下げをエミュレートしているわけではないから
関係ないんじゃないかな?
>10mS以内に2つのキーを...
ってのも、単にキーボードが壊れているかドライバがタコか... 906 の思い込みだと思う。
どこかにこの件について公開された資料ある?
>>906
釣れますか?
909906:04/03/06 17:14
釣りではないし、マジな話だよ。
PS2キーボード端子用バーコードリーダのソフト作ってたからね。
ドライバがタコなのか、OSがロスとするのかは判らなかったけどな。
なるほど。キーボード入力をキーボード以外の用途に使う。って話だね?

905 さんは、keybd_event API に関して、MSDN をよく読むこと。
現在の WIndows では、非推奨 API になっている。sendinput か何か代替 API が
あるのでそれを確認。
たぶん、テキストサービスあたりの問題ではないかなと思う。
911898:04/03/06 18:35
>899
すいませんでした、自己解決しそうな雰囲気です。

一応参考URL貼っときます、お騒がせしました。
ttp://www.swissdelphicenter.ch/en/showcode.php?id=1431
912905:04/03/06 20:04
皆さんレスありがとう。

910殿の書いた代わりのAPIに非常に興味があるのですが、
それはどのようなAPIでしょうか?

解決策が分からないので、今日秋葉を徘徊した時にWin2000の
ライセンスを探し回ってた・・・
APIが分からなかったらOSをVersion Downするしかないのかな?鬱
ListViewをvsReportで表示しているとき、キャプションが表示しきれないと
ぴこっとキャプション全体が表示されるのを止めたい。
だけど、カーソルを合わせたときにはInfoTipを表示したい。
これを実現する方法があったら教えてください。
ん?カラム幅って表示されるもんの長さによって自動的に変わったっけ?
デフォルトで ... になったと思うんだが
カーソル合わせれば内容出るし

質問読み間違えてるのかな
915913:04/03/06 23:35
>>914
びろーんと横一本になるのが気に食わないのですよ。
OnInfoTipでテキスト突っ込めばInfoTipで改行表示できるので
カーソル合わせのときのキャプション自動表示だけを切れないかな、と。
ショートカットで使うアイコンと
フォームの左上に出てくるアイコンを
違うのにするのはどうやるの?
ショートカット? ショートカットなら IShellLink::SetIconLocation で変更可能

32x32と16x16でデザインを変えたらいいという話?
918デフォルトの名無しさん:04/03/07 08:58
901なのですが、まだできません。
どなたか教えていただけないでしょうか。
誘導した人が書いてくれるんじゃないの?
920デフォルトの名無しさん:04/03/07 09:04
>>919
http://pc2.2ch.net/test/read.cgi/tech/1076610073/102-
こちらから誘導されたのですが、誘導した方でなくても教えてくだされば嬉しいです。
なにとぞお願いします。
921916:04/03/07 09:38
わかりにくい質問ですみません。
プログラムを起動させるときにクリックするアイコンと、
フォームの左上に出てくる絵を違うものにしたいという
質問なんです。

>>921
プロジェクトオプションのアプリケーションのアイコンと、
フォームのIconプロパティをそれぞれせってー
今はAccessを使ってます。これからDelphiを習得したいのですが、
デスクトップ用データベースを選ぶとするなら何が良いのでしょうか?
DbaseとかParadoxとかバージョンも複数有りますが何が違うのでしょうか?
>>923
何を選んでも、Delphi側のコードは殆ど直さなくても良いので、あんまり考えなくていいと思うけど

目的は何ですか?
925923:04/03/07 14:54
>>924
1万から10万件程度のテーブルを検索更新する程度で、作成したプログラムと
ファイルを配布したいのです。Accessだとバージョンが複数あり検証が難しし、
配布先にAccessが無い事もあるのでDelphiで作り直そうと考えています。
>>925
他にDLL類の配布が不要なTClientDataSetをお勧めしようと思ったけど、10万件ですか
TClientDataSetは全てメモリ上に展開されるのでレコードサイズによっては古いパソコンだと厳しいかもしれません。

とりあえず、レコードサイズが小さいなら、見てみては?
http://www.borland.co.jp/midas/papers/multi_tier/multi_tier7.html
927デフォルトの名無しさん:04/03/07 16:39
>>925
せっかくAccessの経験があるんだから、ADO使えばいいじゃん。
会社で使ってんならProfessional以上でしょ?ADOコンポーネント付いてるんだから。

配布先クライアントPCが2000以降なら標準でADO付いてるからAccessいらないし、
ついてないなら、ADOは無償で手に入る。
http://www.microsoft.com/japan/msdn/data/default.asp
プログラムが、スタートアップから起動したのか
どうかを知る方法を、教えて下さい。
>>928
ホントに難しい問題だね。
まずスタートアップにショートカットがある事、
そして、GetTickCountが一定値以下である事(ただし49.7日で一周する)
くらいかなあ
>>928
スタートアップのショートカットにそれとわかるような引数を指定すればいい。
ファイルの名前を変えてコピーしたいのですが、

var
Name: String;
FileTo,FileFrom: TFileStream;

begin
(中略)
FileFrom := TFileStream.Create(FilePlaceLE.Text , fmOpenRead + fmShareDenyWrite);
FileTo := TFileStream.Create(Name , fmCreate + fmShareExclusive);
Try
FileTo.Write(FileFrom,FileFrom.Size)
Finally
FileFrom.Free;
FileTo.Free;
end;

とやると、FileTo := TFileStream.Createの行で「定数式が範囲を越えました」とエラーが出ます。
解決策をお教え願いませんでしょうか。
>>931
fmCreate or fmShareExclusive
933デフォルトの名無しさん:04/03/07 20:17
Setforegroundwindowで目的のWindowを表に出したいのですが、
Windows2000だときちんと動作するのにXPだと、該当のソフトのタスクバーが
茶色に点滅するだけで表に出てこないことがあります。

この症状を回避する方法があったら教えてください。
935931:04/03/07 21:01
>>932
ありがとうございました。
936デフォルトの名無しさん:04/03/07 21:22
>>934
素早い的確なレスありがとうございます。
Cの使い方が分からないので意味半分しか理解していないのですが、

nForegroundID = GetWindowThreadProcessId(GetForegroundWindow(), NULL);
nTargetID = GetWindowThreadProcessId(hWnd, NULL );
AttachThreadInput(nTargetID, nForegroundID, TRUE ); // TRUE で結び付け
SystemParametersInfo( SPI_GETFOREGROUNDLOCKTIMEOUT,0,&sp_time,0);
SystemParametersInfo( SPI_SETFOREGROUNDLOCKTIMEOUT,0,(LPVOID)0,0);
SetForegroundWindow(hWnd);
SystemParametersInfo( SPI_SETFOREGROUNDLOCKTIMEOUT,0,sp_time,0);
AttachThreadInput(nTargetID, nForegroundID, FALSE ); // FALSE で切り離し

この中のどの部分にFindwindowで見つけた目的のWindowのHandleを入れれば
良いのでしょうか?
hWndでしょう
938デフォルトの名無しさん:04/03/07 22:46
>>937
今試しているのですがなかなか、うまくいきません。
もうちょっとやってみます。
939933=936:04/03/07 23:09
やっているのですが、どうしてもエラーが回避できません。
nForegroundID := GetWindowThreadProcessId(GetForegroundWindow(), NULL);
未定義の識別子NULLとなってしまいます。

nTargetID := GetWindowThreadProcessId(hWnd, NULL );
指定された引数で呼び出すことのできるオーバーロード関数'GetWindowThreadProcessId'が定義されていません

AttachThreadInput(nTargetID, nForegroundID, TRUE ); // TRUE で結び付け
SystemParametersInfo( SPI_GETFOREGROUNDLOCKTIMEOUT,0,&sp_time,0);
不正な文字が入力ファイルにあります:'&'

SystemParametersInfo( SPI_SETFOREGROUNDLOCKTIMEOUT,0,(LPVOID)0,0);
未定義の識別子 LPVOID

SetForegroundWindow(Wnd);
SystemParametersInfo( SPI_SETFOREGROUNDLOCKTIMEOUT,0,sp_time,0);
'Cardinal'と'Pointer'には互換性がありません

となってしまいます。
たぶんCのソースをDelphiに置き換えられていないのが原因だと思うのですが、
どのようにすれば良いのでしょうか?

NULL → nil
&sp_time → @sp_time (元記事の最後のsp_timeは&sp_timeの間違い)
(LPVOID)0 → nil
ありがとうございます
できました
942923:04/03/07 23:36
>>925
ありがとうございます。
もしBDEを利用するのであればどれが良いのでしょうか?レコード件数やデータ容量
の制限等でDbaseとかParadoxの資料が探せませんでした。

>>927
ADOを利用してMDBを使う、と言う事でしょうか?
Access2000のMDBは更新していくとファイル自体が増加し2Gの所でエラーが
発生してしまいす。そこでMDB以外を検討してます。DbaseとかParadoxについては
知識が無いのですがこれらのファイルでも2G位が上限でしょうかね?
943933=936:04/03/07 23:41
偽者まで出てきた。俺って人気者?

>>940
教えていただいた方法で出来ました。ありがとうございました。

>>941
お前ってエスパー?
単純に「質問者はトリップ付けろ」って話。
945デフォルトの名無しさん
>>942
Accessの最適化と同じことすればサイズ減る。
http://homepage2.nifty.com/inform/vbdb/jro_compactdb.htm

DbaseやParadoxはもう過去のデータベースだからサポートも期待できないし、
あえて今選ぶデータベースじゃない。BDEもサポートを期待できない。

もしデータベースサーバを1台立てられるのなら(データベースを複数クライアントで共有するなら)
無料のMSDE2000を使うといいよ。これとADOを組み合わせればクライアントサーバー型のデータベースを構築できる。
ただし、2GBのサイズ制限があるけどね(圧縮すれば大丈夫)。
http://www.microsoft.com/japan/sql/msde/
http://support.microsoft.com/default.aspx?scid=kb;ja;321518

それでもBDE使いたいのなら、古いDelphiの本を買ってきてください。
確か「Delphiデータベースプログラミング」みたいな本があった。