1 :
デフォルトの名無しさん :
04/10/11 09:29:48
>3 はブラクラ。踏まないように。
TStringListのLoadFromFileメソッドで「ファイルXXXXXは開けません」というメッセージがでます。 それは使用中のファイルなのですが、これを回避して開きたいのですがどうしたらいいでしょうか? メモ帳など他のソフトではそのまま開けるので完全?にロックされているわけじゃないようなので ファイルオープンの方法が変わればいけるんだと思うんですが こういう場合はどういった命令で読めばよろしいでしょうか?
TFileStreamで開いてTStringListのLoadFromStreamじゃダメかな?
ありがとうございます さっそくTFileStreamで開いてみましたが同様のエラーがでてしまいました
開けるはずなので色々調べたんですがどうしてもDelphiの命令で開けません。 あきらめ半分でWin32APIを使ったら・・・なんとすんなり開けてしまいました。 以下が結果で、ヘルプを見た感じだとどっちも同じことをするようにしか見えないのにできない。 D6Personalゆえソース見えないんですが内部でどのAPI呼んでるんですか? FileStream.Createがどうしてダメなのか、わかる方いませんか? //開けない TFileStream.Create('test.txt', fmOpenRead, fmShareDenyNone ); //fmShareCompatFCB によりファイルを開く方法と互換性がある //fmShareExclusive他のアプリケーションはファイルを開くことができない //fmShareDenyWrite他のアプリケーションは読み出し用にファイルを開くことはできるが,書き込み用に開くことはできない //fmShareDenyRead他のアプリケーションは書き込み用にファイルを開くことはできるが,読み出し用に開くことはできない //fmShareDenyNone他のアプリケーションからのファイルの読み出しおよび書き込みを妨げる処理は行われない //開ける Win32API CreateFile('test.txt', GENERIC_READ, 3, nil, OPEN_EXISTING, 0, 0); //0 共有しない 他のアプリケーションからオープン出来ない //FILE_SHARE_READ = 1 他のアプリケーションから読み込み可能 //FILE_SHARE_WRITE = 2 他のアプリケーションから書き込み可能 //READとWRITEをあわせて 3 (定義はなし)
>>8 もしかして「読み書き属性」のままファイルを開こうとしているじゃない?
読み書き属性なら「書き込めないと困る」からエラーが出ても不思議じゃ
ないんだけど。
LoadFromFileの前にFileMode=0を入れてエラーが出るか確認してみて。
>>9 FileMode は Reset 手続きでしか使わないのでは?
TFileStream.Create('test.txt', fmOpenRead, fmShareDenyNone );
の命令文でEFOpenErrorになります。
直前にFileMode := 0 にしてもやはり変わりませんでした。
ん? TFileStream.Createの3番目の引数はWindowsでは使わないはずだが。 TFileStream.Create('test.txt', fmOpenRead or fmShareDenyNone ); じゃないかな?
>>11 勘違いしてました_| ̄|○
指摘の通りorで指定しなおしたのですが、やはりEFOpenErrorになりました
ごめんなさい、前のEXEファイル動かしてました 動きました!! 引数指定ミスだったとは・・・・・・ご迷惑おかけしました。 回答くださったみなさんありがとうございました。
>>10 あ、ほんとだ。前ここで引っかかったことがあったから、
てっきりそうだと思ってた。
くだスレらしくてよいな、ここまでの流れ。
くだらしいとき、くだらしく、くだらした
IDEを拡張するやつで、 関数一覧を表示してオブジェクトツリーにドッキング出来るの あったら教えて。(D6パーソナル)
Personal には無い。
19 :
デフォルトの名無しさん :04/10/13 01:52:22
文字列データが扱いたいのですが、TStringsプロパティを作るとコンパイラに怒られます。 string型でもいいのですが、LoadFromFileとかのメソッドが使えたほうが便利なんです。 仕方がないので、TMemoを非表示にして、TMemo.Linesにデータを入れてるんですが、 何かもっと普通の方法があるはずだと思うのですが。。 どなたか教えてくださいませ m_ _m
コンパイラは何て言ってる?
× TStrings.Create ○ TStringList.Create
くれぐれも 「SL.Create」としないように。 経験者談w
TStringListでできましたー。
ありがとうございます。^o^
>>20 「警告」抽象メソッドを含む'TStrings'のインスタンスを作成しています。
といわれました。
25 :
デフォルトの名無しさん :04/10/13 10:54:03
フォーム上の全てのコントロールのフォント名を指定されたものに置き換えるには どうすればいいですか?
フォームのフォントを変える
>>25 設計時の話だと思いますのでその前提で.
フォーム上のコントロールのフォント設定はどうなっていますか?
全くいじっていない場合はコントロールはその親となるコントロールの設定に合わせますので,
フォームのフォント設定を変更すればすべてのコントロールの設定も同様に変わります.
いじっている場合には個別に変換することになるでしょうが,
フォームをテキスト形式で表示させれば
ユニットファイルのソースコードと同じように文字列置換できます.
フォームがテキスト形式で表示するには
対象となるフォームを右クリックして『エディタで編集』をクリックします
(または対象となるフォームがアクティブな状態で[Alt]+[F12])
ソースコード中の Font.Name というところでフォント名を指定しているので
ここの既存のフォント名を任意のフォント名に置き換えます.
フォント名がデフォルトだとこの記述がないので自分で書き足す必要があるかもしれません.
念のため,あらかじめバックアップを取ってください.
※テキスト形式の表示をやめるには[Alt]+[F12]です.
>26 いやそうじゃなくって… プログラムで行うにはどうすればいいかな?っていう質問です。 ParentFontを使うのも無しでお願いします。 下のようにすればいいのかなあと思ったけど、エラーが出るので‥‥。 procedure SetFont( TheControl: TControl ); var i: Integer; begin TheControl.Font.Charset := DEFAULT_CHARSET; TheControl.Font.Name := "MS 明朝"; //ここはフォントにするとか for i:= 0 to TheControl.ControlCount - 1 do begin SetFont( TheControl.Control[i] ); end; end;
> プログラムで行うにはどうすればいいかな?っていう質問です。 Form1.Font.Name := TControl では Font プロパティーにアクセスできない。protected だから
TEditorを使って、行間にいろいろ表示できるようにしようとしています。 Paintメソッドをoverrideして、そこに描画命令を書くと、一応表示はされるのですが、 スクロールすると、残像が残ってうまく描画できません。 リサイズすると、きれいに再描画はされるのですが、スクロール量に 関係なく、canvasの原点から描画されるので、テキストの途中が 表示されてても、ページの先頭が描画されてしまいます。 スクロールされているときに、 実際に表示されている領域の原点が、(隠れている部分を含めた) 画像全体の原点から何ピクセルずれているのか 取得する方法がありますか?
フォントの大きさにも依存するし。 作者は日本人なんだし、サポート掲示板もあるし、そっちで訊いたら
なんで ParentFont を True じゃだめなの?
あ。自分で全部コントロールしたい。って話なのかな? 29 さんのがヒント。 あなたの SetFont 関数の引数を TWinControl にし、 子コントロールをなめるときに、TWinControl またはそれの子孫のクラスかどうかを 判定して再起呼び出しすればよい。
>TWinControl またはそれの子孫のクラスかどうかを ラベルのフォントが変更できないでしょ
D6のヘルプだと TWinControl でも Font プロパティーないけど
RTTIでFontプロパティを持ってるかどうかを判断しとけ
再帰プログラムの練習でしょ? 実用性からみて ParentFont を使わないってことはない。
何故Delphiってよくバカにされたり嫌われたりするんですか??
つまり、
>>39 がDelphiをバカにして嫌っているのだから、
理由は>39の胸に手を当てて聞いてみるとよい。
このスレッドは、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。 Delphi使いが優しくコメントを返しますが、 お礼はDelphiの布教と初心者の救済をお願いします。
lnkファイルの参照先を取得したいのですが どうすればいいでしょうか?
DrawGridにサムネイルを表示させているんですが スクロールして再描写している最中に更にスクロールすると残像が残ってしまいます 再描写の部分をスレッド化すれば防げますか?
>>44 http://www2.big.or.jp/~osamu/Delphi/delphi-browse.cgi?index=018949 のパクリだけど
uses
ComObj,ActiveX,ShlObj,ShellApi;
function GetLinkedFilePath(LinkFile:string):string;
var
PersistFile:IPersistFile;
ShellLink:IShellLink;
wsz:array[0..MAX_PATH] of WideChar;
pfd:TWin32FindData;
begin
ShellLink:=CreateComObject(CLSID_ShellLink) As IShellLink;
OleCheck(ShellLink.QueryInterface(IPersistFile,PersistFile));
Assert(Assigned(PersistFile));
MultiByteToWideChar(CP_ACP,0,pChar(LinkFile),-1,wsz,MAX_PATH);
OleCheck(PersistFile.Load(wsz,0));
result := StringOfChar(#0,MAX_PATH);
OleCheck(ShellLink.GetPath(PChar(result),MAX_PATH,pfd,SLGP_SHORTPATH));
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text := GetLinkedFilePath('C:\Documents and Settings\All Users\デスクトップ\+Lhaca.lnk');
end;
> 再描写の部分をスレッド化すれば防げますか? いいえ。 > スクロールして再描写している最中に更にスクロールすると残像が残ってしまいます うーむ、シングルスレッドで再描画しながら同時にスクロールするってことがあるとは思えないが
> 再描写の部分をスレッド化すれば防げますか? いいえ。 > スクロールして再描写している最中に更にスクロールすると残像が残ってしまいます うーむ、シングルスレッドで再描画しながら同時にスクロールするってことがあるとは思えないが
あ、二重投稿すまん
50 :
デフォルトの名無しさん :04/10/14 17:00:20
Delphiで、とあるクラスのメンバ関数を、同じクラス内で宣言している関数ポインタ配列にセットしたいんですけど、 どうすればよいのでしょうか?
type TMyEvent = procedure(a, b: Integer) of object; type TMyClass = class MyMethods: array [0..99] of TMyEvent; procedure MyMethod(a, b: Integer); end; var obj: TMyClass; obj := TMyClass.Create; obj.MyMethods[0] := obj.MyMethod;
52 :
デフォルトの名無しさん :04/10/14 18:53:01
>>51 よくわかりました。ありがとうございました。
この場合、クラス生成後に自分で配列に関数を登録しますよね。
(見たまんまですが)
初期化付き?(というんでしたっけ?)で宣言する事はできないですか?
53 :
デフォルトの名無しさん :04/10/14 18:56:49
52です。 初期化付きと言っているのは aaa:array [0..6-1] of integer = ( 0, 1, 2, 3, 4, 5 ); みたいな感じで。この0〜5が、要はクラスのメンバ関数にしたいんです。 とりあえず格納する配列はクラス外でもいいんですけど・・。
無理 基本的にメソッドポインタはクラスインスタンスに従属してるから。 全部クラスメソッドにすれば可能かもしれないけど。
配列プロパティにすればそれっぽく見えるけど…多分使い物にならない可能性大。 使い道よくわからんけど。
皆さんは以下のような機能を実装したい場合にはどうしますか? 「ディレクトリにあるファイルをすべてにたいして適切な加工を施す。」 と言うプログラムを作りたいとします。 これをメインスレッドでやってしまうととんでもないことになるので、別途 ディレクトリの中のファイルを読み出し、適切な加工を施す処理を行う専用スレッドを作って、メインスレッドから そのスレッドを起動して、処理させるという方法をとりました。 ところが仕様上である制約があるのです。 作業状態をこと細かくメインスレッドのForm上のLabelに報告せねばならない。(ユーザーがなにをしているか分かるように) たとえば今〜フォルダの〜というファイルを処理しています。 処理結果は進行状態は何%ですといった具合にです。 ところがこれを実装しようとすると、処理専用スレッドの中で、いたるところでSynchronizeメゾットを呼び出さねばならず スレッドの中はSynchronizeだらけになってしまいます。 これでは大変効率が悪いと思うのですが。皆さんならどのように実装しますか? お知恵を拝借したいと思います。 長文失礼いたしましたm(_ _)m
進捗の更新のタイミング=Synchronizeなんだからしょうがない。 進捗表示がいい加減でいいなら スレッドセーフなCurrentDir, Positionプロパティを用意して Timer使って一秒毎にラベルを更新するとか。
レスありがとうございます なんか自分のコードを見てですね。 Synchronizeばかり呼び出しているのをみて。 「かっこわるいコードだなぁ…」とおもっていたものですから… やはりこれは仕方が無いのですね。もっとエレガントな実装方法があるのかなぁなんて思ったものですから…
>もっとエレガントな実装方法 アスペクト指向であれば指定した一連のメソッドを抜ける際に 自動的にSynchronizeを呼び出すってできるんだけどね。 Delphiじゃサポートしてないけど。
>>56 1:
Synchronizeを呼び出す別のメソッドを定義すればよい。
ファイル名や進行状況の値をクラスの変数などにして。
2:
ファイル名など排他制御が必要なものだけSynchronizeまたはクリティカルセクションで保護して更新。(取得時も保護ね)
進行状況の値は32bitの変数などで保護なしで更新もあり。
GUIの更新はタイマで定期的にそれらの値を参照して行う。
こっちの方法はGUIの更新頻度を一定にできるので負荷が少ない。
被ってる内容だが2が個人的にお勧め。1だと大抵の場合処理が遅くなるし負荷も高い。
基本は子スレッドにファイル処理だけをやらせて、VCLの更新はメインスレッドにやらせる事ですな。
ヘルプを見ると、配列の記憶域が2GBと書いてありますが、 これは例えば、 A[0..100,0..100]という配列があった場合、Aの中身全てを総合して2GBが限度ということですか?
みなさんありがとうございます
>>60 さんの二番でアプローチしてみたいと思います。
次いで質問で申し訳ないのですが…
>進行状況の値は32bitの変数などで保護なしで更新もあり。
integer型はクリティカルセクションの保護が必要ないのですか!?
>ヘルプを見ると、配列の記憶域が2GBと 2G byte は Windows の制限/制約ですから、乗り越えることは大変ですよ。 配列は、実体を宣言した時点でメモリを確保されますから、 A[1..256, 1..256] の2次元配列は 64K (65536) 個の要素を格納します。 ひとつの要素の大きさが 1K (1024) byte だとしたら全体で 64M の(連続した) メモリ領域が必要となります。 Delphi では、このトータルの最大値が 2G. ビジネスアプリなどではめったに 2G の制限に達することはありませんが、 科学計算などで三次元配列とか使うと、限界に到達するのは早いです。
>>62 SizeOf(A)が2G以上になったらコンパイルエラー。
>>63 Windowsの動いているPCは大抵32bit以上だから、32bitの変数は1命令で変更される。(4バイトがバラバラに取得変更されることはない)
この特性から、変数書きこみが1スレッドだけならば保護しなくてもただしく値を取得できる。
>>64 迅速な対応に感謝します。確かに、普通に使っていて2Gを超えることは無いと思うのですけど、
今回、2次元配列をサイズが448×448のビットマップ型で宣言しているんですよ。
それで、その変数がA[400,400]くらいのでかい配列なので。無理かな、と。
というか、普通はやんないことですよね・・。
4バイト×448×448×400×400って100Gバイトを簡単に超えますけど・・・。
>>68 ええと、ビットマップのサイズは、ファイルサイズではなくて画像の大きさです。
いずれにしろ、無駄なことをやってるには違いないんですが。
横着なことやってないで、Byte型で宣言して、
それに対応した画像描画プロシージャを呼び出すようにします。
64bit CPU ならまた別だが、拡張されていない IA32 アーキテクチャそのものが 一度に 4G byte までしかアクセスできません。さらにその空間を OS や各種データ でやりくりしなきゃいけないわけだから.. 物理メモリの半分以上をひとつのデータで確保しなきゃいけなくなったら、何か間違っている。 と思わないと。 なお、フォトショップとかの画像処理アプリケーションでは、自前でメモリ管理をするのが定番です。
>>70 >書きこみが1スレッドだけならば
って予防線張ってるじゃん
>>71 参考になります。重いデータを扱うなら相応の気配りが必要ですね。
処理上のことで、もう一つ質問がしたいんですが、
単純な四則演算や、if文は一度に(単位時間あたり)どれくらいの演算ができるんでしょうか。
変な質問ですみません。演算量の多いプログラムを組んでいまして、処理落ちを心配しています。
試しに秒間数十万回の四則演算、数万回の条件文を組み込んだプログラムを回してみました。
そうしてもCPU使用率はほぼゼロ%になるんですが、ほとんど際限なく演算ができると考えていいのでしょうか?
(完璧なのかどうかは分かりませんでしたが、処理が行われてることも確認しました。)
演算の処理上、CPU使用率を参考にしていいのかどうかもわかっていないので、恐らくおかしなことを言ってるんだと思います。
また指摘していただければ幸いです。
75 :
デフォルトの名無しさん :04/10/15 15:42:33
はじめましてハイパー初心者です。 エディタ部とブラウザ部に分かれた HTMLエディタを作成しています。 エディタ部に書き込んだソースを リアルタイム(エディタ部が変更されたときに対応)で ブラウザ部に反映(更新)させているのですが 「ブラウザに表示される内容が縦長になった」場合 ブラウザの縦スクロールバーを一番下まで下ろしておいて その状態でエディタにソースを書きたすと ブラウザの縦スクロールバーが一番上に勝手に上がって更新されます。 これを回避し、ページを更新する方法がありましたら 教えていただきたいのです。 スクロールバーの位置を記憶させておいて 更新と同時にそこに飛ばす (記憶させたところにスクロールバーを戻す) という感じ・・ですか?
>>74 CPUによるっしょ。際限無く、ってのはあり得ない
>>70 SMPでも問題ない。マルチプロセッサのメモリアクセスについて勉強したほうがいいよ。
atomicity
SMP ネタは、別のスレでよろしくお願い。
>>74 あなたのコードによるので、実測するしかない。
が、ものすごく大雑把に。クロック 1G の P3 クラスの CPU を考える。
1秒間に 1000 * 1000 * 1000 クロック存在する。
32bit の四則演算をキャッシュアクセスできたとして4クロックで処理できるとする。
そうすると一秒間に 250,000,000 / 2億5千回の単純計算が可能だ。
「秒間数十万回の四則演算」は、データがキャッシュ等 CPU の近傍に存在するうちは
CPU の能力の1%も使わずに処理できる。わけだ。
大雑把な数字でいいから、だいたいの目安を一度計算、会得しておくと、異常な結果に
気づきやすいぞ。
81 :
デフォルトの名無しさん :04/10/15 20:28:50
9個のボタンを作って、それぞれクリックすると キーボードの「1」「2」「3」〜 が押されたことにするようにするのはどのように書けばよいのでしょうか。 procedure TForm1.Button1Click(Sender: TObject); begin (ここに、キーボードの数字の「1」が押されたことにするように書きたい) end; procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); begin if Key =('1') then showmessage:=('1が押されました')
ごめんなさい自己解決しました。
>>81 解決したようですけど、せっかくやったので・・・
Form1 の KeyPreview を true にし、Button1〜9 の OnClick イベントハンドラを
共有して、
procedure TForm1.Button1Click(Sender: TObject);
var
KeyCode:Byte;
Caption:string;
begin
If Sender is TButton then begin
Caption := TButton(Sender).Name;
KeyCode := $30+StrToInt(Copy(Caption,Length(Caption),1));
keybd_event(KeyCode,0,0,0);
keybd_event(KeyCode,0,KEYEVENTF_KEYUP,0);
end;
end;
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
case Ord(Key) of
Ord('1')..Ord('9'):ShowMessage(Format('%d キー が押されました',[Ord(Key)-$30]));
end;
end;
>>83 すいません。ほんとにありがとうございました。
私は
procedure TForm1.Button1Click(Sender: TObject);
var c : Char;
begin
c := '1';
form1.KeyPress(c);
end;
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if Key =('1') then
showmessage:=('1が押されました')
end;
一応これでやりたいことは出来ました。
82さんのは私の知識を遥かに超えていて良く分らない・・
>>84 それはキーを押してることにはならない。ただ、ハンドラを呼び出してるだけ。
それが目的ならいいけど。
> form1.KeyPress(c);
これじゃコンパイルできないとおもうけどなぁ。
FormKeyPress(Sender,C);
だと思う。
>>84 ハンドラを呼び出すだけでいいにしても、ButtonClick のイベントハンドラを
9つも書くのは無駄です。Button2〜Button9 までを選択して、OnClick イベント
ハンドラを Button1Click に設定すると一つですみます。
procedure TForm1.Button1Click(Sender: TObject);
var
KeyCode:Byte;
Caption:string;
c:Char;
begin
If Sender is TButton then begin
Caption := TButton(Sender).Name;
KeyCode := $30+StrToInt(Copy(Caption,Length(Caption),1));
c := Chr(KeyCode);
FormKeyPress(Sender,c);
end;
end;
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
case Ord(Key) of
Ord('1')..Ord('9'):ShowMessage(Format('%d キー が押されました',[Ord(Key)-$30]));
end;
end;
Delphi6 Personalで作成したソフトは無償なら配布可能でしょうか?
オープンソースの2ちゃんブラウザのほとんどはDelphi6 Personalでもビルドできる。
もちろんDelphi製のやつね。
RPGやシミュレーションなどを作る場合にはHSPよりDelphiの方が向いてるんですか?
>>91 Delphiの方が細かい事ができる。
難易度は変わらない。 後は好みの問題。
SLGなど大量のデータ扱う場合はその手段が豊富なDelphiの方が有利だと思う。
type THoge = record
すいません間違えて途中で送信してしまいました type PHoge = ^THoge; THoge = record Child : array of THoge; TArratHoge end; PArrayHoge = ^TArrayHoge; TArrayHoge = array of THoge; THogeのChildをPArrayHogeにしたいのですができるでしょうか?
誤 Child : array of THoge; TArratHoge 正 Child : array of THoge; //TArrayHoge です
Child : array of THoge; これ自体だめだったみたいですね 他の方法で実装することにします
ていうかrecordなんて使うな
100 :
75 :04/10/16 14:05:54
101 :
デフォルトの名無しさん :04/10/16 15:07:52
TUIWebBrowserって、Delphi6パーソナルじゃぁインストできないんでしょうか? 本家いっても記述がないし、BBSもないので。。。
APIで、SetForegroundWindowの逆ってありませんか。 最前面から最後面に送るやつ。
SetWindowPos
106 :
デフォルトの名無しさん :04/10/16 17:10:47
108 :
101 :04/10/16 19:20:19
>>102 vclieってのがないとDelphiに怒られて、やっぱりインストできませんでした。・゚・(ノД`)・゚・。
質問です override指令とoverload指令を同時に使用することはできませんか?
override して引数変更できるわけないでしょ
overload; virtual; がついているメソッドは reintroduce; overload; で 下位クラスで overload できるけど、override したことにはならない。
引数ってヒキスウって読むんですね。ずっとインスウだと思ってた…
引数で変数Rectが使われているときに関数Rectはどうやって使えばいいのでしょう?
>>113 何も考えずにそのまま使っても、
関数として使われているか変数として使われているか
コンパイラが自動的に判断してくれる。
逆に言い換えれば変数か関数か識別できない構文は使えないと。
レスありがとうございました とりあえずReintroduceで解決しました。
>>113 ユニット名を明示する
SysUtils.Rect(Rect.X, ...)
とか。SysUtilsじゃなかったような気もするけど。
>>117 Classesにある。
で、ClassesのRect関数はTypesのRect関数を呼び出してる。
Point関数なんかも同じようになっている。
変わりにBoundsを使えばいいかも。
114ってあってんの?
あってる
114 はあっているけど、117 にあるように名前空間を指定することで区別することも できる。ということ。
勇気を出して質問します。 ディレクトリが空かどうかを調べたいのです。 具体的にはワールドカードでディレクトリをfindfirstで検索して見つかったファイルの数が0ならTRUEという手順なのですが、空ディレクトリを調べても絶対2になってしまいます。 なにかいい方法はありませんか?
. .. だろ、2なら空で良いんじゃねぇか?
. .. があるんだろ
>>123 拡張子がないファイルは必ずディレクトリとは限らないのでワイルドカードで引っかけてはダメ。
Pathは"*.*"にして、AttrにfaDirectoryを使うべき。
それと"."".."というディレクトリをカウントに含めない。
おお、オレも同じようなことで悩んでたんだ。 .と..を取り除く方法って (F.Name = '.')or(F.Name = '..')でifにかけるだけでいいの? なんか原因不明のバグがあってこのifが原因かなぁと疑っているのだが
>>127 faAnyFileじゃないとだめだろ。
>>128 それでいいよ。
処理はしょってF[1]='.'で原因不明のバグを生んだことがあったけどw
良い初心者的質問ですね。
>>123 2ch は匿名掲示板ですから、恥ずかしさは脇においといて聞くだけ聞いてみましょう。
コマンドラインで DIR やった場合にも
04/10/17 11:12 <DIR> .
04/10/17 11:12 <DIR> ..
0 個のファイル 0 バイト
2 個のディレクトリ 1,540,747,264 バイトの空き領域
と出ますね? . と .. は必ず存在します。これらの意味、利用方法がわからない
場合は google で「親ディレクトリ カレントディレクトリ」のキーワードで調べて
みましょう。
そのまんまじゃねーかw
つーか、FindFirstのサンプルをぐぐれば出てくるだろ
ルートディレクトリでやったら . も .. もなかった。 .. は知ってたけど、. もないとは意外なり。
134 :
デフォルトの名無しさん :04/10/17 12:55:49
>>133 ルートディレクトリはカレントディレクトリとする意味ないし。
親ディレクトリがないのはあたりまえ。
>ルートディレクトリはカレントディレクトリとする意味ないし。 いみふめ
136 :
デフォルトの名無しさん :04/10/17 20:15:06
TInifile.ReadStringでキーが存在しなかった場合ってどうやって処理するの? DefaultValueに変な値入れとくとかはなしで。
>>136 どうやってってデフォルト値がセットされてるとして処理するだけだろ
>>136 DefaultValueに変な値入れといて、変な値であったら存在しなかったと判断する。
ReadSectionしてNamesで拾ってけ
141 :
デフォルトの名無しさん :04/10/17 22:55:05
delphi5に付属しているInstallShieldについて教えてください。 BDEも一緒にインストールさせたいのですが、どうしても、BDEがインストールできません。 この辺のやり方を解説しているサイトがあったら教えていただけないでしょうか? 具体的にはインストールしたマシンで実行しようとするとそんなデータベースは無いと怒られてしまいます。
Delphiインストールしたときにフルインストールしてあるのか?
143 :
141 :04/10/18 00:19:56
>>142 即レスありがとうございます。
はい。きちんとインストールしてます。
すみません、私の質問の意味がきちんと伝わってないといけないので書きますと、
Delphi環境の入っていないマシンに自分の実行ファイルとBDEをインストールするように
InstallShieldで設定しているのに、InstallShieldを実行した後で、自分の作った
プログラムを実行するとそんなデーターベースソースは無いって怒られるんです。
144 :
デフォルトの名無しさん :04/10/18 03:05:43
Delphi製オープンソースアプリってどのくらいあるの まとめサイトとかあればプリーズ
Visual Basic (1951 projects) が意外ですね。
ユーザー数の多さから言えば妥当だと思われ。 すでに C#にも抜かれているんだな。 > C# (1879 projects) もうそろそDelphiから手を引くのには良い潮時か。
宣言する奴って停めて欲しいのかなw ばかだなw
なんの宣言? なんでも宣言に読める奴もばかだなw
ユーザー数だけで決めたいのなら、C# より C/C++/Java となりますが?
>>147
151 :
141=143 :04/10/18 12:28:02
色々とチェックするところがあって答えずらいかも知れませんがどなたかお願いします。
152 :
ググってきた。 :04/10/18 12:59:11
269 :デフォルトの名無しさん :04/09/09 00:22 BDEは付属のInstall Shieldでインストーラを作成し配布する。 その他、BDEのディレクトリにあるBDEINST.CABを使ってWebで 配布する方法もある。同じディレクトリにあるBDEINST.TXTを参照の事。
>>152 たぶんそれはくだすれの過去ログだと思いますが、その質問をしたのは私です。
で、そのアドバイスに従ってやってみてBDEはたぶんきちんとインストールできたのですが、
どうもデータソース絡みの設定がきちんとできてないみたいでしてデータソース絡みが
きちんとインストールされていないようです。
一月悩んでもまだ解決しないのでどなたかお知恵を貸してください。
>InstallShieldで設定しているのに、InstallShieldを実行した後で、自分の作った >プログラムを実行するとそんなデーターベースソースは無いって怒られるんです。 じゃいくつか質問。 ・ファイルは展開されていますか?(展開後の BDE ファイルがどれかはわかりますね?) ・BDE アドミニストレーターはコントロールパネルにありますか?それは起動できますか? この二つがクリアされていれば、問題は BDE インストーラーではなく(おそらく)データベースの Alias が定義されていないだけ。でしょう。 とりあえず、ここまで確認を
>>154 レスありがとうございます。
>展開後の BDE ファイルがどれかはわかりますね?
がはっきりとは分からないのですが、実行ファイルはきちんと展開してあります。
あと、BDEもコンパネにあります。しかし、インストールしたいdatasourceは
表示されないです。
156 :
デフォルトの名無しさん :04/10/18 19:43:54
>function TCustomActionList.IsShortCut(var Message: TWMKey): Boolean; F5キーを押すとこのメソッドでエラーになるんですが、何でかな。 ショートカットキーは割り当ててないし。 ビジュアルコンポーネントをFreeした後にだけ発生します。
157 :
156 :04/10/18 19:55:59
エラーはEAccessVaiolationで、また、エラーが起きるときのself.nameは空っぽです。
158 :
156 :04/10/18 19:59:59
それと、F5キーを押すと、 >function TCustomActionList.IsShortCut(var Message: TWMKey): Boolean; 2回目でエラーが出ます。 エラーが出ない場合は5回ほど飛んできます。 self.nameに値が入ってる場合は、「ActionList1」です。
159 :
デフォルトの名無しさん :04/10/18 22:24:17
質問させて下さい。 あるアプリを起動させ、そのアプリのあるウィンドウが終了するのを待ちたいと思ってます。 アプリ自体の終了を待つならばWaitForSingleObjectでできるみたいですが、 そのアプリの特定のウィンドウの終了を待つにはどうしたら良いのでしょうか? 宜しくお願いします。
>>159 簡単にやるならウインドウハンドルが有効かどうかポーリングする。
一瞬の隙も見逃すわけに行かないなら
SetWindowLong関数を使ってウインドウプロシージャを書き換えてWM_CLOSEを拾う。
>>156 そのビジュアルコンポーネントのオーナーを
TCustomActionListのオーナーと同じものにすれば良いかと。
>>160 ありがとうございます。前者の方法でできました。
サンクス
>>161 正常に動作するときにTCustomActionListのオーナーみてたら、
Freeされるフレームが混ざってました。
でも、ActionListのOwner差し替えしてなさそうなんだけどな...
とりあえず、アドレス違反を起こすコンポーネントが特定できたので、
サイアクの事態は回避しました。
164 :
156 :04/10/19 10:50:17
ついでに知識として知っておきたいのですが、 ActionListによって、 >function TCustomActionList.IsShortCut(var Message: TWMKey): Boolean; がコールされるものとされないものと、どこで分かれるんでしょうか。 ソースをざっと見たところ、ショートカットは設定されてないし... いくらDelphiでも、アドレス違反エラーが出る場合の対処は(´・ω・`)ショボーン
IsShortCut はメニューアイテムに関連付けられた Action に対して、 フォーム等で押されたキーが TAction で処理されるべきかどうかを判定するための メソッド。 TForm (かその祖先クラス)のメッセージハンドラ近辺から読んでいくと呼び出している コードが見つかるだろう。
その「ビジュアルコンポーネント」が TActionlist を持っているのでは? あと、Free じゃなくて FreeAndNil を使ってみたら?
サンクス
>>165 なるほど、ショートカットを割り当ててるからコールされるんでなくてショートカットの割り当てを判定してるんですね。
じゃぁ、毎回コールされるのかな思って、幾つかあるフレームクラス(これらのCreate/Freeが繰り返される)を見直してみたら、アクションリストがあるのはアドレス違反起こすフレームにだけありました。
つまり、フレームクラスにアクションリスト貼り付けない方が良いのかな。
TFrame にメニューを貼るのは珍しいことではなく、よってアクションリストが貼りつくのも 問題ないと思うけど、頻繁に Create/Free? そいうコードはあまり経験ないなぁ。 多分、Free の方に何か問題があるのだと思うけど、ここから先はコードがないと何ともいえない。
メッセージでポストして遅延してFreeすれば大抵のFreeでのバグは回避される。 アクションとか使って、そのアクションのターゲット自体が破棄される時、 ターゲット自体にまだ実行されるコードが残っているとAVが発生する。 これは仕様だ。唯一の回避方法は正しい使い方をすること。 Releaseなんてのがあるのはそういった問題の回避のためなんだよね。
>>169 なるほど、参考になりました。
AVが発生するというより、
アクションリストが破棄されてるのにアクションリストのキーチェック処理がレジストされたまま、
みたいな感じなんで、もしかしたら今回の件は若干違うかもしれませんが。
テスト結果は今日明日にこのスレに報告致します。
TThreadを継承したオブジェクトで,Executeは完走しているのにWaitForから制御が戻りません。 故にデストラクタから制御が戻らず困ってるのですが,原因として何が考えられるでしょうか。
ちゃんとoverrideしているか?
procedure Execute; override; としています。純粋仮想なのでinheritedは書いていませんが。 デストラクタが呼ばれた時Terminatedを見てExecuteのループから抜けてるのは確認しています。
あ,書き込んだあとで気付いたけどデストラクタの方のことですよね。 オーバーライドして,基底のデストラクタも呼んでます。 TThread.Destroyの Terminate; if FCreateSuspended then Resume; WaitFor; この部分で止まってしまう訳なのです。
もう一度自分のコードを見直せ。 まさかデッドロックを引き起こす様なコードは書いてないだろうな? WaitFor中にはSynchronizeの処理が行われたりするのだが、その時待機状態になるコードがある場合そこで止まる可能性がある。 いづれにしても、自分でトレースすればわかることだ。
フラグで止まってるヨカーン。 オレの経験上w
原因 finalizationの中でスレッドを終了しようとした時,EndThreadが呼ばれてもスレッドが走行中のまま終了しなかった。 故にシグナル状態にならず,MsgWaitForMultipleObjectsのあたりのループをぐるぐるしてた。 対策 TThread派生オブジェクトのフィールドにExecute実行中かどうかを表すフラグを追加。 (イベントオブジェクトだとResetしてもWaitForSingleObjectが返ってこなかったから) finalizationではTerminateを呼んだ後そのフラグを監視。 実行中フラグが外れたらTerminateThread呼んだ後Free。 finalization中ではカーネルオブジェクトの扱いはやめた方がいいのかな。 お騒がせしました。
type TTestThread = class(TThread) protected procedure Execute; override; end; procedure TTestThread.Execute; begin Sleep(3000); end; var Thread: TTestThread; initialization Thread := TTestThread.Create(False); finalization Thread.Free; 現象を再現できない。バグの原因は違うところだと思う。もう一度自分のコードを見直せ。
すみません。質問させて下さい。 MessageDlgでボタン[mbYes,mbNo]を使用しているのですが、 ダイアログが表示された際にフォーカスが必ずmbYesに当たっているので これをデフォルトでmbNoにフォーカスを当てたいのですが、方法が分かりません. どなたかご教授ください。
CreateMessageDialog でダイアログを作成し、 FindChildControl で 'No' {No ボタンの Name} を取得して、SetFocusedControl で上のコント ロールを TWinControl にキャストしてフォーカ スし、 ShowModal で返り値を得る。 泥臭い方法の一つ。
VCL ソースコードを持っているのなら、MessageDlg 丸ごとコピーして好きに改造。 これが一番早い
>>179 TApplication.MessageBox使え。
flagにMB_DEFBUTTON2。
API直でもいいけど。
やっぱスマートな方法はあるもんだなぁ。 いつも感心するぜ。
>>178 失礼。説明が足りないばかりに話を長引かせてしまって。
解放するのはDLLファイルなのです。
ホストアプリとしてボタンを2個持つアプリケーションを作成,一方を
module := LoadLibrary('Project2.dll')
他方を
FreeLibrary(module);
を行うよう設定
DLL側はTThreadから派生するクラスTMyThreadでExecuteだけをオーバーライド
グローバルにMyThread: TMyThreadを確保してプロジェクトのbegin〜end;で生成
他は下に示すようなものを作って検証
procedure TMyThread.Execute;
begin
while not Terminated do
Sleep(100);
end;
initialization
finalization
if Mythread <> nil then
Mythread.Free;
結果同様の現象が起こりました
186 :
デフォルトの名無しさん :04/10/21 08:28:32
フォーム内でパネル1、パネル2 と分割し、パネル2 に Edit1 を配置しています。 実行すると、パネル2 からはみ出した、パネル1 内での位置っぽい感じで Edit1 が表示されます。 オブジェクトツリーでは Edit1 は間違いなくパネル2 の下にあります。 新たにパネル2 上に別の Edit2 を追加すると、そのように表示されるので、Edit1 が 何からおかしいようなのですが、その理由がわかりません。 何か思い当たることはあるでしょうか? コードで位置を変更したりはしていません。
187 :
デフォルトの名無しさん :04/10/21 09:15:42
ソースコード持っていないのですが、TPanelコンポーネントのCaption プロパティのWriteに使われているメソッドの書式を教えてください。
>>187 ご所望の Delphi のバージョンは?
>>187 ご所望の Delphi のバージョンは?
Delphi6 でも Doc ディレクトリに公開されているインターフェースのソースが公開されていますが
そちらは確認済みですよね?
190 :
デフォルトの名無しさん :04/10/21 11:32:45
MEMOコンポーネントに、URLリンクを貼ることは可能なのでしょうか? もしくは、代替で実現できるコンポーネントはあるのでしょうか? 初心者すぎてすみません・・・ Delphi6使用です。
ListView(vsReport) で行ごとや項目ごとに文字色を変えるにはどうしたらいいのでしょうか? VBのListItemsにはそんな感じのプロパティがあった気がするんですが Delphiでみあたりません、教えてください
>>187 こういうこと?
procedure TCustomPanel.SetText(const Value: TCaption);
>>188-189 答える気がないならレスしなくていいよ。ここはそういうスレだから。
>>193 はCLXだった。
procedure TControl.SetText(const Value: TCaption);
>>186 TPanel でフォームの領域分割をする場合はTPanet.Align を
片方のパネルを alBottom、alLeft、alRight、alTop のいづれか
もう片方を alClient とする。
196 :
デフォルトの名無しさん :04/10/21 12:19:07
>>192 レスありがとうございます。
どこで使えるのか探してみていますが、TEdit内で
「○○はここです \\サーバ名\フォルダ...」のように、
通常文字とリンクを混合させた場合でも、リンクははれるのでしょうか?
要は、コメント欄を作って、その中でファイルへのリンクを貼りたいのです。
クリックすると、ファイルが開くような・・・
Delphi5Proにて… ClientSocketのHostプロパティに無効なURLを入力すると OnErrorイベントが発生しないで 「'ASync Lookup' APIでWindows ソケットエラー:そのようなホストは不明です。(11001)」 というメッセージが表示されちゃうのはなんとかできないのでしょうか?
そんなバナナ
>>192 あ〜、DelphiはItemにそういう項目はなくてListViewのCanvasをそこでいじるんですね
解決しましたー、ありがとう
OnAdvancedCustomDrawItem あたりで変えれますよ。ヘルプくらい読めよ。
201 :
デフォルトの名無しさん :04/10/21 18:25:02
TEditでリンクを貼る方法が見つからない・・・ ヘルプとか参照してみたんですが分からないです・・・orz
>201 TRichEdit
TThread.OnTreminate のヘルプに > OnTerminate イベントハンドラは,メイン VCL スレッドのコンテキスト内で呼び出され, > VCL メソッドおよびプロパティを自由に呼び出せるようにします。 とありますが、これは Synchronize を使用したときのようにスレッドセーフでないオブジェクトも気にせず扱えるということですか?
TThread.DoTerminate; のコード見ろよw
このスレッドは、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。 Delphi使いが優しくコメントを返しますが、 お礼はDelphiの布教と初心者の救済をお願いします。
206 :
デフォルトの名無しさん :04/10/22 14:34:07
TFrameをダイアログにして表示する方法を教えて下さい。
207 :
デフォルトの名無しさん :04/10/22 14:46:45
Frame.Show; じゃ表示されないんだYO!
ダイアログフォームにはっつけて表示
209 :
デフォルトの名無しさん :04/10/22 15:29:56
FrameのScreenに対するRectのとり方教えて下さいでつ。
まったくここの奴らは使えないな。
やり手のDelユーザはもうめっきり少なくなったからね 回答の質のレベルダウンは目を覆うばかりだな。あちこちのBBSも同じ状況
212 :
デフォルトの名無しさん :04/10/22 19:36:44
Formが表示されたり消えたりするとき、 Form.ManualFloat(Rect) したくて、かつ、Formの位置を変えずに表示させたいんですが、 Rectには何を入れたら良いですか?
213 :
デフォルトの名無しさん :04/10/23 13:34:03
TStringsをStringで表示するにはどうすればいいのですか?
215 :
デフォルトの名無しさん :04/10/23 13:43:59
Delphiのプログラム中から指定のURLで新規にブラウザ(IE)を起動させたいのですが
WinExec('IEXPLORE.EXE' ,SW_SHOW);
ShellExecute(0, 'OPEN', Pchar('
http://www.yahoo.co.jp/ '),nil, nil, SW_SHOWNORMAL);
このようにやっていて一応目的は果たせているのですが、
環境によってはブラウザ起動後ホームに設定してあるページが1,2秒表示され、やっとyahooへ飛ぶといった挙動になってしまいます
HTMLのリンクをクリックした時のように最初からURLをセットした状態で新規に起動したいのですが、何か解決方法はありますでしょうか?
217 :
デフォルトの名無しさん :04/10/23 13:55:38
>>216 一行目を入れないとすでに開いているブラウザにURLをセットしてしまいます
新規に起動させたブラウザにyahooをセットしたいのです
ShellExecute(0,nil,nil,...で十分。明示はダサい。
そのurlにこだわるのは孫さんとこの雇われグラマ?あんまり世間に迷惑かけないでね。
224 :
初心者 :04/10/23 16:00:48
Delphiを使い始めて間もない者です。 テキストファイルに保存してある文字列を、 ComboBoxやMemoに読み込んで表示させたいのです。 テキストファイルの中身を、 a1,a2,a3,a4,a5,a6 b1,b2,b3,b4,b5,b6 c1,c2,c3,c4,c5,c6 と仮定して、 a1,b1,c1をComboBoxに a2,b2,c2をMemo1に a3,b3,c3をMemo2に ・・・ a6,b6,c6をMemo5に というふうに、コンマごとに区切って表示させたいんです。 さらに、ComboBoxで選ばれた文字に対応するデータをMemoに表示させたいんです。 例えば、 ComboBoxで、a1を選んだとすると、 Memo1はa2、Memo2はa3、Memo3はa4、Memo4はa5、Memo5はa6が、 とこんな感じで。 LoadFromFileメソッドを使うってのは分かるんですが、 イマイチ良く分からないんです・・・。 よろしくお願いします。
個人的には設計をやり直した方がいいと思うぞ。 そんな処理、かなり強引なコード書くしかないと思う
代案すら出さない代案厨乙
目的もわからないのに代案が出せるか
目的がわからないのに代案を提案したくせにw
マターリおしえてやれ
にるぽ
>>224 丸投げイクナイ
もう少しポイントを絞って質問しなよ
>>224 正直お勧めはしない
procedure TForm1.FormCreate(Sender: TObject);
const
TextFile = 'test.txt';
var
str : TStringList;
i,j,k : integer;
tmpstr,substr : string;
Control : array [0..5] of TWinControl;
begin
Control[0] := ComboBox1;
for i := 0 to 4 do
Control[i+1] := TWincontrol(FindComponent('Memo'+inttostr(i+1)));
str := TStringList.Create;
try
str.LoadFromFile(TextFile);
for i := 0 to str.Count-1 do
begin
tmpstr := str[i];
for j := 0 to 5 do
begin
k := pos(',',tmpstr);
if k = 0 then
k := Length(tmpstr)+1;
substr := Copy(tmpstr,1,k-1);
if Control[j] is TMemo then
TMemo(Control[j]).Lines.Add(substr)
else if Control[j] is TComboBox then
TComboBox(Control[j]).Items.Add(substr);
Delete(tmpstr,1,k);
end;
end; finally str.Free; end;
TStringListのCommaText使えばもっと簡単に出来ねえか?
CommaTextでやってみました。 procedure TForm1.FormCreate(Sender: TObject); const TextFile = 'test.txt'; var str,str2 : TStringList; i,j : integer; Control : array [0..5] of TWinControl; begin Control[0] := ComboBox1; for i := 0 to 4 do Control[i+1] := TWincontrol(FindComponent('Memo'+inttostr(i+1))); str := TStringList.Create; try str.LoadFromFile(TextFile); str2 := TStringList.Create; try for i := 0 to str.Count-1 do begin str2.Clear; str2.CommaText := str[i]; for j := Low(Control) to High(Control) do begin if Control[j] is TMemo then TMemo(Control[j]).Lines.Add(str2[j]) else if Control[j] is TComboBox then TComboBox(Control[j]).Items.Add(str2[j]); end;
end; finally str2.Free; end; finally str.Free; end; end;
コンボボックスのリストをセレクタとしてMemoの内容を切り替えるのだから、クラスやレコードの配列に保持しておくのだと思う。
そうそう、一回限りセットしても駄目
TStringGrid を使うのはどぉ?
TStringGridのRowsのCommaTextに入れて ColsのCommaTextで読み出すのが一番簡単かな
241 :
初心者 :04/10/24 01:33:14
返事が遅れて、すいません。 出掛けていたもので・・・。 質問の丸投げなんてとんでもないです。 ほんとスイマセン。 確かに強引なのは分かっているんですけど、 237でおっしゃっておられるように、 ComboBoxのリストをセレクタとしてMemoに表示させる内容を変更させるのが目的なんです。 教えていただいた方法で試してみます。 で、238でおっしゃっておられるように、 ComboBoxのリストのセレクタを変更させる毎に、 Memoに表示させる内容を変更させたいんですよね。 240でおっしゃっておられる方法ですれば、上手くいくのでしょうかね? 試してみたいと思います。 また行き詰まったら、質問してもいいでしょうかね? よろしくお願いします。
string型の二次元配列つくって、ファイルから読み込んで、代入する。 あとはどうとでもできる。既出の TStringList の CommaText の使い方を 覚えるのがポイント。
Form上にComboBox,Button,Memoを5個,StringGridをポトペタ。
Cドライブに
>>224 の内容をtest.txtいうテキストファイルを用意。
Buttonをダブルクリックしてイベントハンドラに以下を記述。
procedure TForm1.Button1Click(Sender: TObject);
var
SL,SL2: TStringList;
i: Integer;
begin
SL := TStringList.Create;
SL2 := TStringList.Create;
try
SL.LoadFromFile('c:\test.txt');
StringGrid1.RowCount := SL.Count;
SL2.CommaText := SL.Strings[0];
StringGrid1.ColCount := SL2.Count;
for i := 0 to SL.Count - 1 do
StringGrid1.Rows[i].CommaText := SL.Strings[i];
ComboBox1.Items.CommaText := StringGrid1.Cols[0].CommaText;
Memo1.Lines.Add(StringGrid1.Cols[1].CommaText);
Memo2.Lines.Add(StringGrid1.Cols[2].CommaText);
Memo3.Lines.Add(StringGrid1.Cols[3].CommaText);
Memo4.Lines.Add(StringGrid1.Cols[4].CommaText);
Memo5.Lines.Add(StringGrid1.Cols[5].CommaText);
finally
FreeAndNil(SL2);
FreeAndNil(SL);
end;
end;
続いてComboBox1をダブルクリックして以下を記述。 procedure TForm1.ComboBox1Change(Sender: TObject); begin Memo1.Lines.Add(StringGrid1.Cells[1,ComboBox1.ItemIndex]); Memo2.Lines.Add(StringGrid1.Cells[2,ComboBox1.ItemIndex]); Memo3.Lines.Add(StringGrid1.Cells[3,ComboBox1.ItemIndex]); Memo4.Lines.Add(StringGrid1.Cells[4,ComboBox1.ItemIndex]); Memo5.Lines.Add(StringGrid1.Cells[5,ComboBox1.ItemIndex]); end; あとは実行してみれ。
エラー処理やもっとスマートな記述方法については自分で考えれ
>>241
procedure Hoge(var X); こういう手続きを宣言したとき引数の型を調べるにはどうすればいいのでしょうか?
二次元配列にGUIコンポを使うのは最低
New Disposeは特殊で同等のものはユーザーは作れないと言ってみる
Move() とか TStream.Write とかなら、アドレスからポインタに変換してつくれそうだな。 New Dispose は難しそう。
>>248-250 ありがとうございました。
型によって一部の処理を変えたかったのですが素直にoverloadすることにします。
252 :
初心者 :04/10/24 18:00:31
教えていただいた皆さん、ありがとうございました。
このスレッドは、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。 Delphi使いが優しくコメントを返しますが、 お礼はDelphiの布教と初心者の救済をお願いします。
254 :
デフォルトの名無しさん :04/10/24 18:45:11
ファームを常に前に表示したいのですがどうすればよいのでしょうか?
FormStyleを一番下に
>>255 ・・・すいません。見逃してました。。
ありがとうございます。
どうでもいいが、ファーム違う。フォーム。
>>254 SetWindowPosを使った方法もあります。
こっちの方が強力です。
SetWindowPos、HWND_TOPMOST
あたりを検索してみてください。
FormStyleのだと一瞬フォームが消えるけど
>>258 だと消えないという違いもあるな。
>>251 recordなどの代わりにclassで実装するのも手だよ。
やたら前面に居座るフォームがあると、うざいんだよな。 初心者ほど使いたがるが。
はたして、そうかな?
>>261 禿同。ユーザの立場からはそういえるね。
265 :
デフォルトの名無しさん :04/10/25 13:36:39
TMemoなんかにWindows標準のポップアップメニューが付いてますよね。 そのポップアップメニューを差し替えるのではなくて、追加メニューしたい場合はどうしますか?
266 :
デフォルトの名無しさん :04/10/25 14:59:38
TSpeedButtonのGraphにTImageListのImageをセットする方法を教えて下さいでつ。
268 :
デフォルトの名無しさん :04/10/25 16:07:27
Visual Basicにてあるレーベルの上にカーソルを合わせた時にボタンコントロールを表示させたい のですが、どのイベントプロシージャを使えば良いですか?
OnMouseMove
270 :
268 :04/10/25 16:20:40
>>269 早い返事ありがとうございます。ついでにカーソルをはずした時のイベントプロシージャも
教えていただければ幸いです。
>>266 ImageList1.GetBitmap(0,SpeedButton1.Glyph);
フリーのDelphi 6.0を使ってプログラムの勉強中です。 練習でデスクトップのキャプチャーを作ってみたのですが、思うように動作しません。 bmp:=Tbitmap.Create; bmp.width:=screen.Width; bmp.height:=screen.Height; dc:=getdc(0); hide; sleep(500); {←※} bitblt(bmp.canvas.handle,0,0,bmp.width,bmp.height,dc,0,0,srccopy); show; フォームにボタンを貼り付け、 ボタンを押したら自分自身を隠してからキャプチャーしようと思ったのですが、 ※の行がないと、ウィンドウが消える前の状態がキャプチャーされてしまいます。 これだとマシンの処理速度によっては待ち時間が無駄になってしまうので、 もっとスマートに、hideの処理が終わったら次に進むようにするには どう書けばよいのでしょう?
273 :
デフォルトの名無しさん :04/10/25 17:28:40
よくスクリーンセーバーで画面の左上隅にマウスを持って行ったり緊急起動キーを 押したら自動的にスクリーンセーバーが立ち上がるソフトがありますよね。 あれって、タスクトレイにアイコンも無くてタスクバーにもアプリのタブが無いソフトが 時々ありますけど、ああいうのってどうやって作るのでしょうか? 参考になるサイトなどありましたら教えてください。
274 :
デフォルトの名無しさん :04/10/25 17:29:43
半角カナを全角カナへ変換する関数はありますか?
>>272 オレのところでは Sleep なくてもいいけどね。
かわりに
while IsWindowVisible(Handle) do;
とかしておけばいいんでは? API使うのはOSにききたいからだけど。
>>277 ありがとうございます。さっそく試してみたのですが、
残念ながらその方法ではダメでした。
どうやら、Hideメソッドが呼ばれると、まずVisibleプロパティをクリアしてから
デスクトップを再描画しているみたいです。
Slot 1のセレロン300という化石のようなマシンなので、ものすごく遅いんです。
ウィンドウも上下左右の枠を順番に描画しているのがわかるぐらいなのです。
Application.ProcessMessages または PostMessageして遅延させろ
>>278 Sleep なしでもうまくいく環境もあることからアプリ内のメッセージ処理の問題ではない。
デスクトップの再描画の速度の問題だから、アプリ内で本質的な遅延時間を決めることはで
きない、と思われ。タイマやSleepなどで逃げるしかない。
281 :
デフォルトの名無しさん :04/10/25 19:14:46
コンポーネントのParentを設定すると、Ownerも差し替えられるんでつか? なんか迷惑だな。
>>279-280 いただいたヒントでぐぐって調べてみたのですが、PostMessage等は
いったん別のプロセスに制御を渡して(?)、待ち時間を有効に使う手段のようですね。
つまり、GDIで再描画の完了を検出する方法はないということなのでしょうか?
あれ、勘違いでだったかも。 FormのParentがFreeされても、Formの実態はFreeされませんね。 Formの場合だけ???
今さらというか今日気付いたことなんですけど TEditってAlignmentプロパティ無いんですね。 意外でした・・。
VBのコレクションのようなことはできますか? (たとえば複数のTEDITを配列のように扱うなど)
今、Windowsから送られてくるMessageをきっかけに動くプログラムを改良中なんですけど あるメッセージが送られてきたときに特定のキーが押されているかどうかを調べるにはどうすればいいのでしょうか? ぶっちゃけて言うと、WM_LBUTTONDOWNを受け取ったときにShiftキーが押されているどうかを調べたいんですけど
すんません GetKeyStateを使ったらアホみたいに簡単にできました。 お騒がせしてすんません。
> コンポーネントのParentを設定すると、Ownerも差し替えられるんでつか? 何言ってるの? 例えば、Form1 の Panel1 に Button1 をのせたら Button1 の Owner は Form1、 Parent は Panel1。
> FormのParentがFreeされても、Formの実態はFreeされませんね。 TForm にはふつう parent はない。無理に設定すると、親が Free するとき ウィンドウは破棄されて、言語上のオブジェクトが生き残る、という珍妙な状況になる。
その状況で、はたしてオブジェクトは生きているのかな?
画面の再描画が必要になると、デスクトップや他のウィンドウにWM_PAINTとWM_NCPAINTが PostMessageで送られると思われるので、BitBlt実行時にはまだ WM_PAINTの処理が 終っていないのかも知れませんね。 RedrawWindow で強制的に再描画させる事は出来ないかな?
>>289 は TWinControl.Parentと親ハンドルを混同している。
>>241 一個分のデータ構造を自前で定義しておいて TComboBox の Items.Objects に
つっこんでおいたらどうですか?
データの部分は TStringList を使うとか、array[] of PChar へのポインタとか
お好みのものでどうぞ。
いずれの場合も、Items はデータ自身を所有しないので、自分で確保したものは
適切な方法で解放する必要があります。
>>289 Form には Owner があり、自動生成なら Application グローバル変数。
Application グローバル変数が廃棄されるときに Form も廃棄されます。
オブジェクトが存在しないとウィンドウは存在できないけど、オブジェクトが
存在するからといってウィンドウが存在するとは限りません。
>>293 289 です。そう、そのとおり。それを言っている。TForm の Owner はデフォルトで
Application であり、Parent はない。 SetParent(Handle) で無理矢理設定すると
Windows の仕組みによって、Parent が破棄されるとき Form のウィンドウは破棄され
るけど、インスタンスの破棄の権利はVCLの仕組みによって Owner が持っている。
>>291 > RedrawWindow で強制的に再描画させる事は出来ないかな?
いや、だから再描画をトリガすることはできるけど、一般にそれが終わったことを
検出するのが難しい、ということ。とくに他アプリでは。前面のウィンドウを最小化
したり、Hide したりするだけで自動的に再描画されるし。
>>292 >TWinControl.Parentと親ハンドルを混同している。
そうなの? Parent のウィンドウハンドルと、その「親ハンドル」とはどこが違うの?
配列型について質問させてください。 格納されるデータ数が同じだとしたら、次元を増やしても問題ないでしょうか? 配列内で同一の性質を持つデータ間で演算を行いたいのですが、 例えばデータを二次元配列で定義していると、条件判断文を相当な回数行わなければならなくて、 その条件事態を配列の数値で判断してしまえば(つまり性質を配列の数字で定義します) if文やらを使う必要は無くなるのですが、その場合五次元以上の配列になってしまいます。 単純に演算回数だけを見れば後者のほうが少ないのですが、 あまり配列を複雑にするのはマズイような気がしました。 分かりにいうえ、つまらなくて申し訳ないですが、どなたかアドバイス頂けると助かります。
すいません、少し説明が抜けました。配列はレコードで定義してます。 ですので、次元を下げた場合、レコードの中で性質を定義する変数が増えます。 条件判断文はそのプロパティを使用して行うということです。
if 文の数が多くなっても、配列の構造が単純なほうを選ぶと、バグの少ない、 メンテが楽な、そして、ロジックが見えやすいコードになると思います。
>>299 ありがとうございます。
やはり配列が複雑だとバグの危険性が伴うのですね。
三次元配列くらいなら、極端に条件判断が増えることもないので、ひとまずはそれで組んでみます。
>>219 いろいろありがとうございました。
なにぶん…いろいろあってレス返せない環境にいたもので反応遅れてすみませんでした
今後はきをつけます
配列を一気にクリアする方法ってないですか? 文字列は''、数値は0になるだけでいいんですが
すみません。 Delphiは複数インストールすることはできないのでしょうか、、 Delphi6において、Update Pack2を当てているとエラーがでるソースがあるので 当てているものと当てていないものと、二つ環境を作りたいのですが。。
ソースを修正すべきだろ
自分が作ったものではないのでまだあまり弄れないという状況なので。。 できればDelphiを複数用意したいのです。。(´Д`;
vmware体験版
>>305 それはUpdatePackを当てていないものならエラーはでない。という保証はあるの?
漏れの場合、OSをMeからXPにしたところ
ActiveXの取り込みを使ってるプロジェクトが、終了時に原因不明のエラーを吐く様になった。
わざわざOSのクリーンインストール(途中で致命的ミスがあったため結局こうするしかなくなった泣)から
UpdatePackの当てなおしやら、いろいろやりなおしたけど、結局解消しなかった。
今でも解消してないけどデバッグ・プログラミングには影響ないから我慢してそのまま使ってる。
コンソールアプリケーションでRandom関数使うと、 吐き出される乱数が整数なんです・・・ 実数の乱数を吐かせるにはRandG関数を使うのでしょうか? GUIだと範囲指定しなくても使えるけど、 コンソールだと範囲指定しれ!ってコンパイラさんに怒られるんですぅ('A`)
× Random() ○ Random
レベルが低くて申し訳ないと思うのですが質問させてください。 あるtxtファイルの、最後の行の内容を変数に代入して使いたいのですが、 どうすればいいでしょうか。 (a.txt) あいうえお かきくけこ さしすせそ というものがあったとして、 さしすせそを変数に入れたいということです。 書き込むときには、 TStringList.CreateしてLoadFromFileで読み込み、Add→SaveToFileとしています。 応用で、 (b.txt) あ,い,う,え,お か,き,く,け,こ さ,し,す,せ,そ という、各行が,区切りになっているものがあったとして、 さ,し,す,せ,そをそれぞれ別の変数に入れたいのですが これはどうでしょうか? これも最後の行だけでいいのですが。
>>296 知りたければVCLソースを読みなさい。
>>312 宿題ですか? ではヒントだけ。
ヘルプでTStringListとTStringsのプロパティーを全部見れば解かる。
>>313 VCLソースに「親ハンドル」の定義が書いてあるのか?
親ハンドルってなに? 親のハンドルなら Parent = TWinControl.Handle と同じじゃないの?
D6personal のヘルプ TControl.Parent Parent プロパティは,コントロールの親の名前を示します。 property Parent: TWinControl; これって、間違いだよな。「親の名前」が TWinControl なわけないし。 ヘルプ書いた人は、インスタンスと「インスタンス変数の名前」を混同してるな
広場、落ちてるな。このまま閉鎖ってことはないだろな、たのむよ、管理人さん・・・・
動的配列を扱っていて、 ●●●○○○○ ↓ ●△△●●○○ ということをやっています。 ○は空、●は既存データ、△は挿入したデータです。 データの数は数百から数千ほどを想定しています。 ●を移動するのに、二つ方法を考えています。 1、forで一つずつコピーする 2、データ挿入後SetLengthで切る どちらが高速ですか?またはもっとマシな方法ありますか?
List 関係のクラスを使うと自動的に insert できる
>>320 挿入や途中の要素の削除などをする場合は、動的配列は面倒だし、有効データの数も管理してくれない。
どんなデータかわからないけど、TObject の派生クラスにして、TObjectList を使うのが
おすすめ。インスタンス管理も自動化されるし。欠点は、いちいちコンストラクタを実行しなければ
ならないことと、データの入出力部分をキャストしなければならないこと。専用のリストクラスを
つくれば、どちらも解消される。ファイルアクセスのメソッドも作れるし。
>>321-322 現在、TList使ってますが、楽したいんじゃなくて速くしたいんです。
面倒でも高速な方法をとりたいということで考えてるところです。
要素が増えたり減ったりするたびにメモリを確保したり解放したりしない方法で
何とか速くできないかと思い、その一つのアイデアとして上のように想像してます。
>>320 System.Moveをつかうとよろし。
範囲チェックしてくれないから自分でいろいろ管理する必要があるけど
325 :
デフォルトの名無しさん :04/10/27 14:11:03
実行中、Formの右上の×で閉じた時 「はい」「いいえ」のダイアログをMessageDlgで出して 「いいえ」が選択された場合フォームは閉じないようにしたいのですがどうしたら良いですか? それとイベントのOnCloseとOnCloseQueryはどちらに書いたほうがよいですか?
>>323 >要素が増えたり減ったりするたびにメモリを確保したり解放したりしない方法
それなら、はじめから必要最大限の要素を作っておけば、並び替えは TList でも
TObjectList でもポインタだけだから高速なはず。動的配列のように、内容をすべて
コピーしなおすのはスピード重視なら愚の骨頂。
自分でポインタのリストを管理したいなら、ポインタの動的配列にしたらいいんでは。 自分で Move してずらすこともできるし。実体は別に確保する必要があるが。 それでも TList の方が使い勝手がいいと思うけど
328 :
デフォルトの名無しさん :04/10/27 15:32:28
USBに接続するバーコードリーダから読みとった値をプログラム内で 処理しようとしています。 このバーコードリーダはキーボードとして動作する為、読みとった値を あたかもキーボードから入力したかのごとくPCに送り込んできます。 そのため、バーコード内にキーコード外のデータ(漢字など)が含まれて いると、正しく値を読みとれません。 Keydownイベントで値を読みとろうとしてみたのですが、仮想キーコードに 変換済みの値しか読みとれず、上手くいきません。 キーコードが何であろうと関係なく送られてきたデータを読みとりたいの ですが、何か良い方法はないでしょうか?
329 :
デフォルトの名無しさん :04/10/27 15:38:55
>TCustomForm::FormStyle >実行時に FormStyle の値をなるべく変更しないでください。 とありますが、実行時にfsStayOnTopしたい場合はどうしますか?
「なるべく」なんだから、変更してもいいんでは
>仮想キーコードに変換済みの値しか読みとれず、上手くいきません。 うまくいかない例(漢字など)をあげてください。どのようにうまくいきませんか。
332 :
329 :04/10/27 15:51:47
変更しましたが、StayOnTopになりませんですた。
ごめんなさい、コーディングのバグですた。StayOnTopになりますた。
334 :
デフォルトの名無しさん :04/10/27 16:22:00
StayOnTopウィンドウの下に、エラーダイアログやShowMessageダイアログが隠れますが、回避する方法はありまつか?
335 :
334 :04/10/27 16:24:03
別ウィンドウのオープンをフックできれば...
337 :
334 :04/10/27 16:35:33
>>336 エラーメッセージウィンドウが出たときだけはStayOnTopをオフにしたいでつぅ
StayOnTopになっているウィンドウのハンドルを指定してMesssageBox APIでメッセージを表示。
339 :
デフォルトの名無しさん :04/10/27 18:35:04
1つのPopupMenuを複数のコンポに割り当てて、 PopupMenuのクリックイベントでどのコンポで発生したのか判断で期末か?
340 :
デフォルトの名無しさん :04/10/27 19:37:13
TMemoのタブ幅はどうやって設定しますか?
>>325 OnCloseQueryをヘルプで検索して説明をよく読めば
あなたの疑問は解決するだろう
>>325 procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose := MessageDlg('閉じる?', mtConfirmation, [mbYes, mbNo], 0) = mrYes;
end;
>>339 PopupComponentってのがそれな希ガス
>320 インデックスによる参照がいらないなら、 リンクリストを自作すると移動が不要なので理論上は最速。 >329,334 正しくはNormalizeTopMostsとRestoreTopMostsを使う。 エラーってのが例外の事ならApplication.OnExceptionに ShowExceptionをNormalizeTopMostsとRestoreTopMostsで挟んだ 自作の例外ハンドラを指定する。
> リンクリストを自作すると移動が不要なので理論上は最速。 それは、削除や挿入はそうですけど、たとえば1000番目の項目にアクセスするときは リンクを辿って行かなければならないでしょ。
じゃあ好きなようにしたら?
TApplication.NormalizeTopMosts NormalizeTopMosts メソッドは,一番上のフォームとして指定した フォーム(FormStyle が fsStayOnTop のフォーム)の上に別のフ ォームを重ねて表示できるようにします。 だから、とにかく fsStayOnTop をフォームに設定するところは同じなんでは?
>たとえば1000番目の項目にアクセスするときは いや、1000番目に挿入するときも削除するときもそう。追加するときは大変。 リンクリストはシークエンシャルアクセス以外は使い道なさそう。そもそもインデックス でアクセス出来なければ、挿入や削除もあんまり意味ないし
配列でって前提で話してるんだから代案不要
そんなことはないだろ。 >またはもっとマシな方法ありますか?
挿入するのに配列つかって全部実体コピーして後ろにずらすのはアホだけだろ まっ、ポインタと同じサイズのintegerなんかの配列だったらそれでもいいけど。
>>341-342 ありがとうございます
なかなかレスがつかなかったのでくだすれにすらふさわしくないくだらない質問だったのかと思って過去ログ漁ってたら同じような質問があって解決しました
>>350 配列というランダムアクセスがO(1), 挿入・削除がO(n)なデータ構造選んでるんだから
そこを覆すような代案するなんてアホだろ。
オーダー変えずにオーバーヘッドの削減する方法を聞いてるんだろ。
> オーダー変えずにオーバーヘッドの削減する方法を聞いてるんだろ。 で回答は?
> オーダー変えずにオーバーヘッドの削減する方法を聞いてるんだろ。 TList も TObjectList も同じオーダー。実体コピーかポインタコピーかの違い。
TObjectListってAssignを使って実体コピーしてたの? 知らなかった。
>>289-294 Parent は GetParent(Form.Handle) で得られるウィンドウの事で、
Free は DestroyWindow の事だったのか!
それなら正しい。
>>356 違う。TList も TObjectList も挿入・削除ではポインタコピー。
配列なら実体コピーだろ、て意味。
ちょっとでも速くしたいのなら、思い付いたやり方を全部測定するべき。
360 :
334 :04/10/28 08:43:22
サンクスでつ
>>347 ShowModalなウィンドウが開く前後をトラップというか監視できれば、
>Application->NormalizeTopMosts();
>Application->MessageBox("This should be on top.", "Look", MB_OK);
>Application->RestoreTopMosts();
で回避できますね。
FormクラスとApplicationクラス調べてみまつ。
361 :
334 :04/10/28 08:51:50
やっぱ、ShowModalに色々種類があるので、 >Application->ShowException(E); の前後で、NormalizeTopMosts/RestoreTopMostsしてみまつ。
362 :
334 :04/10/28 09:56:49
テストプログラム作っててわかったんですが、 MainFormの場合はShowModalやエラーダイアログがTopMostウィンドウより上に来てくれますね。 その時点のMainFormみたいなのを設定できないんだろうか。 NormalizeTopMostsの中のソース見ましたが、ちょっと追い難いでつ。
363 :
デフォルトの名無しさん :04/10/28 10:31:53
FormParent: TFormの中で、 >FormChild.Parent := FormParent; >FormChild.Show; とすると、フォームの中にフォームが入りますが、 FormChild上のMomoコンポーネントがマウス受け付けません。 タブキーでFocusがくるとキーボードは受け付ける、みたいな。 どうすれば普通に動作しますか?
MDIにする
やっぱMDI以外では無理で塚。
366 :
334 :04/10/28 11:33:03
他ダイアログのShowModalメソッドコールをイベントで受け取れないでしょうか?
ShowModal を呼ぶ前にフラグ立てるなり、メソッドを呼ぶなり、好きにできるでしょ
イベントにしたいなら、PostMessage() で適当にメッセージ投げるとか
369 :
334 :04/10/28 11:43:05
自分で呼ぶShowModalじゃなくて、エラーダイアログ等のイベントを取りたいで津。
TApplication.OnException OnException イベントは,アプリケーション内で処理されない例外が生成されたときに発生します。
>>334 fsStayOnTop を使いたい気持ちはわかるけど、君みたいなプログラマがたくさんいて、
他のアプリでも同じようなことしてたら、君のフォームが最前面にくる保証はないよ。
372 :
334 :04/10/28 13:12:17
>>371 他アプリじゃなくて、自アプリ内でつ。
フォームが変わる度に、それらについてくる付箋紙みたいな画面、みたいな。
373 :
372 :04/10/28 13:49:37
MDIにすると、チャイルド画面が親画面と親画面のコントロールの間に挟まれてへんなんなっちゃうし。
374 :
372 :04/10/28 13:50:17
↑ 334の間違いでつ。
DLLで他のプロセスをフックしたフックプロシージャをブレークポイントに設定しても止まってくれません。 他のプロセスのフックプロシージャを止めるのは無理なのでしょうか?
いいえ
>>376 レスありがとうございます。
やりかたをおしえてもらえないでしょうか?
>親画面のコントロール MDIの親フォームにメニューとステータスバー以外のコントロールをおくのは間違い
379 :
334 :04/10/28 15:54:10
NormalizeTopMostsもNormalizeAllTopMosts効かないけどなんでだろ。 >ChildForm.Parent := ParentForm; >ChildForm.ManualFloat(Rect); >ChildForm.Show(); みたいなことしてまして、ManualFloatでParentがNilになってます。 parentがnilのFormだと駄目なんかな?
381 :
デフォルトの名無しさん :04/10/28 16:20:55
ShowMessageしたとき、Disableなのに、Enabledを見るとTrueになりますでつ。 正しく判断する方法はありますか? Win32APIのIsWindowEnabledでも駄目ですた。
>>380 TCustomListBoxを継承して作ればいいんじゃないのかな。
実装方法はTCheckListBoxが参考になるとおもう。
383 :
デフォルトの名無しさん :04/10/28 17:29:44
重なったウィンドウをMoveして重ならなくするライブラリとかコードは無いで塚?
最大化してたり、スクリーンのサイズが実行環境によって違うし。
ここで聞いていいのかな? 「Delphi オブジェクト指向プログラミング」技術評論者からでていた本ですが 他に同等のおすすめ本ありませんか? 去年復刊したときに買い逃した
なさそう。Delphi本自体が少ないし。
この本、去年復刊される前はヤフオクとかですごい高値(一万以上とか)で出品 されてたよな。「人の足下見やがって...」と出品者を呪ったもんだ。 復刊されたから俺でも入手できた訳だが、復刊.com と (このスレにも多数いるで あろう)賛同者の皆様方には、ほんと感謝してる。ありがとう。
>>381 VCLソースのShowModalを見なさい。
390 :
224 :04/10/29 00:57:35
前日はいろいろとありがとうございました。 で、実行してみたのですが、どうも上手くいきません。 テキストファイルに入っている文字列は、スペースを含むものがあるのですが、 スペースで言葉が区切られてしまいます。 例えば、 a b,のような文字列があるとすると、a bを一つの文字で扱いたいのに、 aとbが区切られてMemoに表示されてしまいます。 aがMemo1に、bがMemo2にと言う感じです。 ComboBoxにも同じ現象が起きています。 さらに、ComboBoxで選んだ文字列に関連する文字列だけが Memoに表示されるのではなく、全て表示されてしまいます。 テキストファイルを前回と同じで a1,a2,a3,a4,a5,a6 b1,b2,b3,b4,b5,b6 c1,c2,c3,c4,c5,c6 と仮定して、 ComboBoxでa1をえらんだところ、 Memo1にa2,b2,c2を Memo2にa3,b3,c3を ・・・ Memo5にa6,b6,c6を と全て表示されてしまうんです。 なぜでしょう? お手数ですが、またご教授願います。
前にも回答したけど、表示するのと文字列を保持する配列を分離すること。 配列に代入出来さえすると、なんでもできる。それから、TStringList の CommaText は空白も区切りにするから、"" で囲むなどの工夫が必要。
392 :
デフォルトの名無しさん :04/10/29 09:21:07
>>389 ShowModalん中で無限ループでメッセージ読み続けてるだけで、
親フォームには何にも通知されないんだね。
親フォームって何のこと? > 無限ループでメッセージ読み続けてるだけで、 モーダルループっていう。 自分以外はちゃんと EnableWindow( ,false) にされてるでしょ モーダルダイアログが TCustomForm の派生クラスなら、Screen.ActiveCustomForm の FormState に fsModal が入ってるから分かる
394 :
デフォルトの名無しさん :04/10/29 10:35:27
ウィンドウハンドルで、それが自分のアプリ内のウィンドウかどうか判断できましたっけ?
395 :
224 :04/10/29 10:45:41
テキストデータの文字列のスペース部分は、アンダースコアを入れることにします。 また、ご教授いただいた通り、テキストファイルから取り出すのに使用した配列から、 さらに必要な部分だけを取り出して保存させる別配列も作成してみます。 ありがとうございました。
396 :
デフォルトの名無しさん :04/10/29 10:57:25
>>393 にしては、他ウィンドウのEnabledを見てみたらtrueなんだけど?
397 :
デフォルトの名無しさん :04/10/29 11:14:30
>fsStayOnTop を使いたい気持ちはわかるけど、君みたいなプログラマがたくさんいて、 fsStayOnTopを使わずに、自アプリ内でいつもトップウィンドウにする方法教えて下さいでつ。
試したわけでもないが、FormのOnActivateでSetWindowPosしてZオーダー変えれば?
>>394 EnumThreadWindows で列挙した中に入ってるかどうか。
あるいは、もっと簡単に GetWindowThreadProcessId を使って ThreadID か
ProcessID が Application.Handle のそれと一致するかどうかでわかる
>>393 >他ウィンドウのEnabledを見てみたらtrueなんだけど?
いまソースが見られないところにいるんだけど
VCL のプロパティーに EnableWindow API の結果が反映されてないだけでは?
IsWindowEnabled API だとどうなる?
>>398 >FormのOnActivateでSetWindowPosしてZオーダー変えれば?
TScreen.OnActiveFormChange イベントのほうがいいと思う
>>382 ありがとうございます。ちなみにそれは自分でコンポーネントを作る必要があると
解釈してよろしいのでしょうか?
継承とか使わないところは調べていないのでイマイチ意味がわかりませんが、
もう少し自分で勉強してみます。ありがとうございました。
P.S.レス遅くなってすみませんでした。
403 :
デフォルトの名無しさん :04/10/29 13:22:21
アプリケーションを起動するとすでに起動されているかどうかをチェックして 起動されていなければそのまま実行し、 起動されていればParamStrを渡して終了というのをやりたいんですが、 どうやればいいのでしょうか?
mutex in google
サンクス
>>400 勘違いしてたけど、APIだとfalseになってる。これで判定しやすくなった。
>VCL のプロパティーに EnableWindow API の結果が反映されてない ということは、イベントハンドラとかメソッドは期待できないんだな。 変更を監視しとかなきゃならんのか。Timerしかないんか。
Delphiで作ったコントロールをOCXにコンパイルしたいのですが、 やさしく教えてくれるサイトとかありませんか? ちなみにTCustomControl派生です。
410 :
405 :04/10/29 16:01:06
>TScreen.OnActiveFormChange イベントのほうがいいと思う TApplicationEventsアイコンみたく、Screenアイコンは無いんでつか?
411 :
デフォルトの名無しさん :04/10/29 16:31:16
GetActiveWindowでアクティブなウィンドウのハンドルを取ったとして、 どうやったらVCLオブジェクトを参照できるんでしょうか。
>>410 ないから、型を調べて Form1 のメソッドにして代入する。
TForm.Handle全検索
>>411 >GetActiveWindowでアクティブなウィンドウのハンドルを取ったとして
Screen.ActiveCustomForm.Handle と比較して一致したら好きにキャストしてつかう。
一致しなかったら、VCL のフォームじゃなく、API やコモンダイアログのウィンドウだから
VCLオブジェクトとウィンドウは無関係かもしれない
>TApplicationEventsアイコンみたく、 アイコンって・・・・ コンポーネントだろ。
>Screenアイコンは無いんでつか? なんか馬鹿っぽくて、教えた句ねー
サンクス
>>412-414 GetActiveWindowをやめて、Screen.ActiveCustomFormを使い待つ。
420 :
デフォルトの名無しさん :04/10/30 03:08:35
DelphiでDAOの使い方書いてあるサイトとかないでしょうか? コンポーネント使わずCreateOleObjectでから始めたいのですが
TPaint を使って描画をしているのですが、激しくちらついてしまいます。 OnPaint イベントで Paint.Canvas に描き込むだけでは駄目なのでしょうか?
×TPaint ○TPaintBox です。 すみません。
つたない知識ですが
>>421 Refreshメソッドは×
あれは背景色で塗りつぶしたあとPaintをメソッドを呼ぶからどうしてもちらつく
プロパティでcsOpaqueを追加すると領域をクリアしないでベタッと描画する
ただし領域全体を塗りつぶさない場合じゃない前の色のがゴミとなって残るので使えない
TPaintBox.OnPaint だけで描画してちらつくことはないですよ。移動させない限り。
>>395 =224
>テキストデータの文字列のスペース部分は、アンダースコアを入れることにします。
スペースを生かすために "" で囲むのは簡単だよ。
こんな感じ。
procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
sl:TStringList;
begin
s := 'a b,c d,efg h,i j,klm';
sl := TStringList.Create;
try
sl.CommaText := '"' + StringReplace(s,',','","',[rfReplaceAll]) + '"';
Memo1.Lines.Assign(sl);
finally
sl.Free;
end;
end;
やはり無理なのでしょうか?
>>427 これだけわかれば十分です
ありがとうございました
429 :
デフォルトの名無しさん :04/10/31 02:20:41
>>187 さんでも書かれているTPanelのCaption(正確にはTControl.Captionですかね)の
プロパティのアクセスメソッドの詳細を知りたいのですけど、???の部分のメソッド名とプ
ロトタイプをどなたか教えてください。
バージョンはDelphi6 Personalです。
property Caption: TCaption read ??? write ??? ;
TControl = class(TComponent) property Caption: TCaption read GetText write SetText stored IsCaptionStored; つうか*.intで調べろ。
>>430 controls.int の記述?
パーソ版には無いっぽい。
delphiでXML操作にTXMLDocumentを使ってるのですが、xpathを利用する方法はないですか? 特定のパスの集合をとってきたいのですが。
433 :
デフォルトの名無しさん :04/10/31 15:24:16
学生なのですがDelphi6Personalにはまりました それでDelphi8のアカデミック版を購入しようと思っているのですが見当たりません どこに行けば購入できるのでしょうか?
usesに書いたユニット名にマウスカーソルをあわせたとき出るヒントに、 最後にカッコ数字がでるけど、何を表してるの? Windows.pas (12)っていうやつ
unit 宣言の行番号。 unit Windows; とかの。
437 :
デフォルトの名無しさん :04/10/31 22:52:44
ラベルのCaptionに改行を入れたいのですが、 コードを書いて入れるしか無いのですか?(プロパティエディタとかから入れる事は出来ないのですか?)
440 :
デフォルトの名無しさん :04/10/31 23:58:04
タスクトレイに NID : TNotifyIconData; NID.cbSize :=Sizeof(TNotifyIconData); NID.uID := 1; NID.hIcon := Application.Icon.Handle; NID.Wnd :=Form1.Handle; NID.szTip :='Test'; NID.uCallbackMessage :=WM_USER + 100; NID.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP ; Shell_NotifyIcon(NIM_ADD, @NID); としてうまくタスクトレイに入ったのですが そのアイコン上で右クリックしても タスクバーを右クリックしたようなメニューがたまに出て 反応が悪いんです 左クリックの反応はちゃんと出るんですが おそらくタスクバー上で左クリックしても何もならないからたまたまかなっと思っております これってどうやったらなおるんですかね? クリックしたときの処理は SetForegroundWindow(Handle); GetCursorPos(Point); if (Msg.wParam = WM_LBUTTONDOWN) then PopupMenu1.Popup(Point.x, Point.y) else if(Msg.wParam = WM_RBUTTONDOWN) then PopupMenu2.Popup(Point.x, Point.y); です
441 :
デフォルトの名無しさん :04/11/01 00:27:43
>>440 漏れのプログラムで動いている同じようなコード
procedure TForm1.WndProc(var Message: TMessage);
begin
case Message.Msg of
WM_LBUTTONDOWN:
PopupMenu1.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
WM_RBUTTONDOWN:
PopupMenu2.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
end;
inherited;
end;
>> case Message.Msg of じゃなくて if Message.Msg = WM_USER + 100 then case Message.LParam of だろな、この場合。
>>440 > if (Msg.wParam = WM_LBUTTONDOWN) then
wParam と lParam を間違えてるよ。
> procedure宣言の部分はどうしてるんですか? WndProc の override でしょ。 WM_USER+100 なら procedure(var Msg:TMessage);message WM_USER+100; を TForm1 のメソッドにするのでは? > lParamにするとメニューが出なくなりました・・・。 MSDN の NOTIFYICONDATA Structure のところでは The wParam parameter of the message contains the identifier of the taskbar icon in which the event occurred. The lParam parameter holds the mouse or keyboard message associated with the event. だから、メッセージID は LParam だよ。
>>446 ん〜やってみましたが
依然変わらずですねぇ
メニュー出す処理自体は
TMsg型で受けてるのでwParamなのでいいと思うんですが
ポップアップメニューを出してから
他の部分をクリックするとメニューが消えるように
SetForegroundWindow(Handle);
をやってまして
(
>>440 で書いてますけど)
それをコメントにすると
誤反応がなくなりましたので
もしかしたらSetForegroundWindow(Handle);の部分が悪いのかな?っと思ったり・・・。
>>442 さんは
SetForegroundWindow(Handle);
を書いても誤反応とかしないですか?
フォームの再描画無理やりとめるのってどうやるの?
>433 ここのところのBorland製品は、ライセンスがけちで、 アカデミック版に関してはDelphi7以降、プログラミング学習用途以外の禁止を 利用規程で明確に記している。 で、MSのVisual Studio系とは違ってアカデミック版では商用利用は確実にできないし、 下手するとフリーソフト公開も危ういライセンスなので気を付けろ。
>>447 >TMsg型で受けてるのでwParamなのでいいと思うんですが
ソースは?
>>447 原理がわかってないんだろ?
それ用のコンポがいっぱいあるから、DLして使ったほうがいい
>>452 それ、メッセージハンドラ で TMsg 型で受け取ってるのが間違いのもと。
TMessage 型で受け取るべき。そうするとドキュメントと一致する。
TMessage 型の lParam の領域が TMsg 型の wParam の領域に相当してる。
ウィンドウメッセージを受け取るときは TMessage 型にするように。
454 :
デフォルトの名無しさん :04/11/01 14:08:12
delphiでp2pソフトって作れますか?
456 :
デフォルトの名無しさん :04/11/01 14:12:48
Share(仮称)はDelphi7製
>>433 8は.NET用だぞ。ProfessionalにはDel7Studioもついてるけどマニュアルは無い。
来月Delphi 2005も出るしな
いまからDel8買うのは狂気の沙汰。
460 :
デフォルトの名無しさん :04/11/01 20:14:36
今Delphi 8を買えば無償でDelphi 2005にアップグレードできる。
461 :
デフォルトの名無しさん :04/11/01 20:38:48
Del8Pro買えば同封されているDel7でネイティブアプリが作れて、Del8で.NETアプリや既存アプリ(プロジェクト)の.NET化ができるということで合っていますよね? 2005のことは全く知らないけどどうなるんでしょう?
462 :
デフォルトの名無しさん :04/11/01 20:40:07
ny1はVC++でny2はBCBだっけか?
PageControlで作ったタブを右クリックでも切り替わるようにしたいのですがどうしたら良いのでしょうか?
>>463 こんな感じ
uses
CommCtrl;
procedure TForm1.PageControl1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
hti:TTCHitTestInfo;
ret:integer;
begin
if Button = mbRight then begin
hti.pt := Point(X,Y);
ret := TabCtrl_HitTest(PageControl1.Handle,@hti);
if ret <> -1 then
PageControl1.ActivePage := PageControl1.Pages[ret];
end;
end;
466 :
463 :04/11/02 01:02:34
>>464 ソースまでつけてもらってありがとうございます
明日試してみます
>>453 TMessage型に変更しましたが変わりませんでした
しかし開発環境はWinXP(SP2)なのですが
Win2000(SP4)上でコンパイルしたプログラムで確かめると
誤動作をしなくなりました
しかし同じプログラムをWinXP(SP2)上で実行すると
やはり誤動作を確認できました
もうちょっと頑張ってみます・・・。
インラインアセンブラでMMX使うと浮動小数点のエラ−が出ます。 なにか宣言しないと使えないんでしたっけ? DELPHIは6、CPUは当然MMX有効。
>>468 自己レス
emmsを書き忘れてました・・・
別な質問ですが、BITMAPはSCANLINEで調べるとY方向が連続してない
ようなのですが、これをきれいにメモリ上に連続した状態にする方法はありませんでしょうか。
for文でY方向のSCANLINEをやると遅くなるので、インラインアセンブラ内の
演算だけでアドレスを計算したいのですが・・・
>>469 Windowsのビットマップはメモリ内だと上下がひっくり返って格納されてる。
左下ピクセルのアドレスを先頭にw*bpp*hバイトのサイズで連続した領域になってたはず。
ビットマップの一部だけを処理するならScanline[y]を事前に配列に突っ込んでキャッシュしておく方法もあり。
>>468 もっとMMXを勉強しろ。それはMMXの仕様を知っていない証拠だ。
>>468 FPUレジスタとMMXレジスタは共用です
>>469 ビットマップのサイズを8の倍数にしる。
VBAでいうところの、 On Error Resume Next にあたる命令ってある?
ない。例外処理使え。
>>387 遅レスになってしまったがそこでなんとか買えました
情報thx
Delphiのデフォルトアイコンって、どのファイルを参照すればいいの? 一度変えたものの元に戻そうと思ったらファイルがどれだかわからなくなっちゃった。
TStringGridのコンポーネントを作っているのですが、 ColCountを変更したときに、ある動きをさせたいと思っています。 ところが、VCLでColCountプロパティのSetColCountメソッドが privateになっているので、overrideすることができません。 ColCountが変更されたことを取得するイベントもみあたらないよう なのですが、列数を変更された場合に処理を行うにはどうすれば いいでしょうか?
>>480 TCustomGrid.SizeChangedをオーバーライド
>>481 おお、こんなのあるんすね。
ちとみてみます。また、あとで報告します。
>>481 バッチリです。できました。ありがとうございました。
しかし、SizeChangedて・・・、てっきりコンポの幅かと思って見過ごしてました。
今度からは引数もちゃんとみまつ・・・・
またコイツかぁ
Delphiでボタンをクリックすると僕の口座にお金が振り込まれるようなソフトって出来ないでしょうか。
デバッグ中は二重起動防止しない、ミューテクスも作らない、 単独動作中は二重起動防止する、という動作をさせて楽したいのですが、 アプリの側からデバッガ接続の有無を知るにはどうしますか?
できるよ。Button1Click にそのようなコードを書くだけ
>>486 function IsDebuggerPresent:bool; stdcall; external 'kernel32.dll' name 'IsDebuggerPresent';
procedure TForm1.Button1Click(Sender: TObject);
begin
if IsDebuggerPresent then
ShowMessage('Debugger is Present')
else
ShowMessage('Debugger is not Present');
end;
>>488 ありがとうございます。
Windows.pasにはなくて、宣言しなきゃいけないみたいですね。
DebugHook
>>489 Win95 では使えない。VCL に相当するシンボル定数がありそうだけどしらない。
リリース版では、宣言消して
const
IsDebuggerPresent = false;
みたいにしておけば完璧かな
492 :
デフォルトの名無しさん :04/11/05 15:22:27
>432 >delphiでXML操作にTXMLDocumentを使ってるのですが、xpathを利用する方法はないですか? >特定のパスの集合をとってきたいのですが。 ヘルプ見てもないような感じですね。。 自分もこの機能がほしかったのですが、、 しょうがないからまたMSのパーサにまたお世話になるか、、
propertyのdefaultに文字を指定する方法を教えてください
StringGridの行をタブ区切りテキストにして クリップボードにコピーしたいんですが、 タブ区切りテキストの作り方がよくわからなくて・・・ 何を挿入すればタブになるんですか?
昨日2005のup案内のハガキ来たけど悩むなぁ。。。
>>494 タブじゃないのか?
VK_TAB、またはChar(9)、または#9
>>496 仮想キーコードで良かったのですね。
早速やってみます。ありがとう。
> 仮想キーコードで良かったのですね。 えっと、普通文字列のなかに挿入するときは Char(9)、または#9 の方をつかいますよ。
499 :
デフォルトの名無しさん :04/11/05 21:42:13
>>493 ヘルプくらい嫁
>default 指令と nodefault 指令は,集合の基本型の上限と下限が 0 〜 31 の範囲の順序値である順序型と集合型のみサポートしています。
つまり不可能
>>499 エエー
VCLだとキャプションとか表示されてるのに・・・・・
無理なのかぁぁ さんくす
Caption にはデフォルトはないでしょ。dfm に必ず保存されるし。 コンストラクタで設定してるだけじゃないの
ってかIDEが設定してるのか。動的につくると設定されないし、Button1 とか。
>>495 エディタとかinline展開とか小技は効いている。
個人的にはローカルで履歴が持ててDiff取れるのがいい。
(プロジェクトごとではないような気がしたが半分寝てたので)
で、半分寝てたのでx86-64(EM64T)に対応したかどうか聞き忘れた。
どうだったか教えてエロイ人!
>個人的にはローカルで履歴が持ててDiff取れるのがいい。 これプロジェクトの管理機能としてはかなりお粗末だよな。 旧IDEでも外部ツールのやりくりで簡単に実現できるレベル。
個人の趣味で適当に作るツールまで外部ツールを使えと
拡張子に番号付けする程度かよ
個人の趣味で適当に作るツールには履歴なんかいらんだろ
つまり金出して、重いIDE使いたくもないのにVerUpする価値はない
> で、半分寝てたのでx86-64(EM64T)に対応したかどうか聞き忘れた。 してない。
おんめら、そげな話題わ談話室でやってけろ
>>507 Explorerでプロジェクトフォルダごとバックアップとって
WinDiffにSendToで渡して比較するのはめちゃ便利だぞ。
>>510 枯れ木も山のにぎわい。近頃ここすたれすぎだから景気づけ。
このスレッドは、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。 Delphi使いが優しくコメントを返しますが、 お礼はDelphiの布教と初心者の救済をお願いします。
超低レベルDelphiユーザの在庫僅少ってことだ
>>512 >>514 たしかに初心者レベルの質問がいたるところで激減してる・・・・・・
なんか地殻変動があったのかな?
Delphi入門者が減ったのか? みんなGoogle使いがうまくなったのかな・・・・・
入門者が減ったんではなく、初心者がいなくなっただけ。こだわりがない分、 沈みかけた船から逃げ出すのも早いってことだ
ネガティブ思考は禿るよ
現実をみなきゃ。戦わなきゃ。 > アポジカ 禿対策
AOwnerってどうして必要なんでしょ? Parent Windowだけあればいい気がします。 何にも考えないで常にCreate(Self)って書いてますが、 Selfじゃなければなにか問題あるのかと。
AOwner のほうは解放の責任も負ってくれるんじゃない?
perl、php、delでcgiを作ったらどれが一番実行速度が早いの? 当然、Windows上のwebサーバーで実行するとして。
速度で言ったらコンパイラが速いだろ。
mod_perl, mod_php > Delphi > perl, PHP DelでApacheモジュール作れるならそれが最速
あるコンポを作っていて、そのconstructorで以下をすると、 コントロール''は親ウィンドウを持っていますってエラーになるんだけどなぜ?? Formatを指定しなければ、エラーにならず、FormのOnCreateに書いても エラーにならないのに!! fDateTimePicker := TDateTimePicker.Create(Self); fDateTimePicker.Parent := Self; fDateTimePicker.Format := 'yyyy';
constructorの時点でまだWindowハンドルが割り当てられていない。 ハンドルが割り当てられていないとParentになれない。 割り当てられているかどうかはHandleAllocatedで確認できる。 CreateHandleをオーバーライドしてブレークポイントを置いてみればわかりやすい。
98系のpcしかないんだけどプロ版どれ買えば良い?
PC買え
4文字かよ
パーソナルコンピューターをお買いあげになってくださいませ
7買ったら駄目なああああああああああああん?
PC買うのが正解だろ
delphi7買ってC#は他でやろうと思ったんだけど
学生ならJ、C++、C#、VB全部で5kだよ ただし.net 2003だけど と布教してみる
いや、だから98系のPCで今から始めるのは駄目。 まず、PC買え。
98系ってのはWin98系だよね? まさかPC98じゃないよね?
いくらなんでもそれはないだろ・・・
>>534 Del2005カエヨ Win32、.netデツカエルシ、.netナラC#モツカエル
PC-9801VM21しかないんですがどれを買えばいいのでしょうか?
TurboPascal
つーか、ただでさえ安定しないDelphiで開発し、 ブルーバック出したくないならNT系買え。
543 :
デフォルトの名無しさん :04/11/09 01:33:32
Delphi オブジェクト指向プログラミング ってオブジェクト指向を学ぶもの?それともDelphiを学ぶもの? オブジェクト指向については他の専門書籍あったよね?
Delphiにおけるオブジェクト指向を学ぶもの。 あの本がでた当時、ポインタを意識しなくていいけど、 そのかわりに、クラス変数がデフォルトで参照渡しな、オブジェクト指向言語が 他にあんまりなかったので、あの本は有用だったと思うよ。 今読んでも、Delphiのオブジェクト指向の知識は、JAVAやC#にかなり流用できるしね。
あ、でもやっぱり、オブジェクト志向の習得には、本読むだけじゃだめで、 基本的な知識を本読んで得た後、 上手く書かれた他言語のオブジェクト指向を取り込んだソースコードを Delphiなりなんなりに移植してみるのが、一番勉強になると思う。
OOPL なら Java から入門しれ ただだし 本もいっぱいある
Delphi はOOPLとしては中途半端。グローバル変数やら、ただの関数やらがあって 手続き型言語との中間。Java や C# のような言語が入門にはいいだろう。
> Java や C# のような言語が入門にはいいだろう。 当分死滅しないしな
確かに他の言語のこととかもわかるようになってくると 中途半端間は否めないな・・ 今ではDelphiの中途半端感に慣れてしまったのでDelphiが一番使いやすいけど これからプログラミングを学んでいくなら 完全OOPL型の言語の方が学びなおす手間がかからなくていいかもね
>>542 安定しないのはおまえが組んだプログラムだけだろ(大爆笑)
まあ、Delphi本にしろ、他の言語にしろ、 オブジェクト指向に関しては、 塚越本は、なかなかいいよ。
いくらなんでも内容古すぎ
ホットキーが押されたらフォームを最前面に表示したいのですが どのようにすればよいでしょうか? サンプルなどあったら教えてください。よろしくです。
>>553 CTRL+A
public
id:ATOM;
procedure WMHotkey(var Msg:TWMHotkey);message WM_HOTKEY;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
id := GlobalAddAtom('HogeHogeHotkey');
RegisterHotkey(Handle,id,MOD_CONTROL,Ord('A'));
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
UnregisterHotKey(Handle,id);
GlobalDeleteAtom(id);
end;
つづき procedure TForm1.WMHotkey(var Msg: TWMHotkey); var ThreadID1,ThreadID2: DWORD; begin if Msg.HotKey = id then begin ThreadID1 := GetWindowThreadProcessId(GetForegroundWindow,nil); ThreadID2 := GetCurrentThreadId; AttachThreadInput(ThreadID2,ThreadID1,true); SetForegroundWindow(Handle); AttachThreadInput(ThreadID2,ThreadID1,false); BringWindowToTop(Handle); end; end;
556 :
デフォルトの名無しさん :04/11/09 18:47:12
for構文の処理なんですが、 Memo1〜Memo8までを対象とした処理を書くときに、 var i:integer; begin for i:=1 to 8 do begin {処理内容} end; end; となりますよね? このときに、MemoiもMemo[i]もコンパイルされないんですが、 どういう表記をすればコンパイルされますか?
FindComponent('Memo'+IntToStr(i)) as TMemo
ColorBoxの表記を日本語ではなく英語にすることはできないでしょうか?(´Д`;
>>554 すぺしゃるさんくす。
後ほど試して見ます。
560 :
556 :04/11/09 19:32:23
Memo1.Textや、 Memo1.Color:=clRed を557さんの方法でやると、エラーが出ます。 FindComponent('Memo'+IntToStr(i)) as TMemo.Textや, FindComponent('Memo'+IntToStr(i)) as TMemo.Color:=clRedは、 コンパイルされません。 どうすれば良いですか??? ほんとくだらない質問ですいません;;
>>560 おぬし、OOPの勉強しなおし
FindComponent('Memo'+IntToStr(i)) as TMemo までが TMemo のインスタンス
だから
(FindComponent('Memo'+IntToStr(i)) as TMemo).Text := 'おぬし、OOPの勉強しなおし';
な感じ
562 :
556 :04/11/09 19:41:30
はい、勉強しなおしますw
563 :
デフォルトの名無しさん :04/11/09 22:03:46
delphiで作ったソフトがメモリーリークを起こしているみたいなのですが、 本当にメモリーリークを起こしているか確認するソフトは無いでしょうか?
標準でついてるユニットから使わない部分を削除すれば実行形式ファイルは小さくなりますか? たとえばuses FileCtrl;としてもSelectDirectory()しか使わない場合、他の関数を残しておくと何か無駄が生じたりしませんか?
>>564 unitのinitialization/finalization部分にコードが記述されてるユニットはusesするだけで
強制的に一定のコードがリンクされる。
記述されてないユニットは明示的に使っていない関数・変数・クラスは削除される。
>>566 お答えありがとうございます。よくわかりました。あまり気にしないことにします。
568 :
デフォルトの名無しさん :04/11/10 03:01:40
>>568 「再び表示しようとすると」って、Refresh のこと? 動的に書き込んだ内容は
表示してるだけでどこにもドキュメントがないので Refresh したら、書き込む
前の空白が表示されるんでは
570 :
デフォルトの名無しさん :04/11/10 22:25:00
ここは低レベルなDelphoiですね。
超初心者用ってスレ見に来るくらいだから低レベルで当たり前。 もちろん答えてる側のレベルの話だよな。
>>569 いえ、新しくHTMLを作成しそれを表示した場合です。
言い換えますと
>>568 の方法では一度表示したら内容を変更することができません。
(直接 HTML を表示するのではなく一度htmlファイルを作りそれを表示した場合はうまくいきます。)
詳細忘れたけどなんかのイベントハンドラで再度HTML書き込めばいいんじゃないの。
ページプロデューサーで透過タグを複数使いたい時って、 どうすれば良いんでしょうか? ヘルプ読むと、ページプロデューサーからページプロデューサーへ、 コンテンツを引き継ぐことが出来るようなことは書いてあるんですが、 分からん。
575 :
デフォルトの名無しさん :04/11/11 11:22:32
571 名前:デフォルトの名無しさん [sage] 投稿日:04/11/10 22:35:56 超初心者用ってスレ見に来るくらいだから低レベルで当たり前。 もちろん答えてる側のレベルの話だよな。
>>565 563ではないけど、MemCheckでSystemユニットやらGraphicsユニットでリーク出る。
なにを信じればいいのかわからん。
使い方間違ってるかパッチ当ててないか新種のバグを発見したか放置されてるバグのどれかだな。
readすげーなw memoにいったん書き出してから保存だと死ねたけどread,readlnなら一瞬だなw
なぜにmemoと比較するか
ListBoxで選択された内容をボタンを押したときにクリップボードに格納したいのですがどうしたらいいでしょうか?
はじめのうちは意味不明な事をするものさ
>>582 ありがとうございます
さっき検索していたときの一番にそこに辿りついたのですが見逃してました
584 :
デフォルトの名無しさん :04/11/11 22:18:25
delphiXの使い方を解説しているサイトってありませんか? インストールしてサンプル読んだけど、さっぱり使い方がわかりませぬ。
書籍があったような。
iniファイルが64KBを超えたらどうなってしまうのですか?
>>586 俺も知りたいので5分で試して報告しなさい。
現状でDelphiX使用する場合の優位点って、 Direct Drawだけかな?
何と比べた優位?
恐らくQuadruple D
そうだな、例えばQD3系に関してならDirectDrawだろうし、 WDirectXなら日本語対応だろうし、 QD2に対してなら、Inside DirectXの存在かね、優位な点って。 UnDelphiXがあんまり盛り上がって無さそうなのが気がかりだな。
Inside DelphiXの誤りね。スマソ。
>>586 500KBのIniファイルつくって試したが別に問題なく読み書きできた。
>>573 すいません、もうちょっとヒントいただけないでしょうか。
一通り試してみたのですがイベントハンドラで再度HTML書き込むだけではうまくいきませんでした。
>>596 余計なお世話かもしれんが、「なぜ再表示する必要があるのか」を書くと
もちっとレス付くかも。
>>597 2ちゃんねる専用ブラウザを作っているのですが一度スレを表示した後
別のスレを表示したいからです。
んん?「Navigate」ではダメな理由は?
>>599 一度、HDDにファイルを作らないといけないから。
んんん??? ソレは「何か処理して動的に表示するから」ってこと?
うまくいきました! about:blankを表示 → OnNavigateComplete2でHTMLを書き込み とすることで何度でも表示できるようになりました。 about:blank以外ではうまくいったりいかなかったりすることがありました。 ありがとうございました。
IE系2chブラは飽和状態で需要なし。
p2以外は雑魚
TFormのonCreateイベントについて質問です ヘルプを見るとonCreateはFormが作成される'とき'呼ばれるとあります ということはonCreateイベント内ではForm内のコンポーネント (ボタン、ラベル等)の実体がないこともあるのでしょうか? だとするとonCreateイベント内でコンポーネントのプロパティを 変更するような処理はEAccessViolationを引き起こす恐れがあるので onShowイベント内で記述した方がいいですか?
いいえ
>>606 OldCreateOrderがtrueだとそうなる。
falseだとAfterConstructionで呼ばれるから貼ったコンポーネントはできあがってる。
>>608 ありがとうございます
TCustomForm.OldCreateOrderをヘルプで調べて
より理解が深まりますた
便乗質問なんですが
Formのコンストラクタをオーバーロードした時には
inherited Create(AOwner);と継承元コンストラクタを呼び出す必要があり
それによってonCreate→オーバーロードしたコンストラクタ
という順番で呼ばれるのでしょうか
Window生成やイベント発生のタイミングなど、 深く追い求めるならどうしてもVCLソースが必要になる。 Pro版以上買って読め。
TPageControlのTabSheetにTWebBrowserを貼り付けて あるページを表示しました。 その中の「ウィンドウを閉じる」ボタンを押したら TWebBrowserが消えてしまいました。 TWebBrowserが消えたらTabSheetも消したいのですが どのイベントを拾えばいいのでしょうか?
デスクトップでマウスをクリックしながら動かすと矩形領域ができるじゃないですか。 あれをDelphiでやるにはどうしたらいいですか?
613 :
デフォルトの名無しさん :04/11/12 19:49:50
機能は、同等でTMOStringGridよりよさげなグリッドコントロールはありませんか? //TStringGridEXは× フォーカス周りでバグがあって使いにくいのです。 バグの修正は今試みているのですが、なんとも・・・
> クリックしながら動かす > クリックしながら動かす > クリックしながら動かす
いつものダメ回答者は今日は元気ないね
>>613 機能が同等なら何を以って「良い」とするのか
617 :
デフォルトの名無しさん :04/11/12 19:55:15
困ったことがあり、質問があります。 自分でコンポーネントを作成中なのですが、コンポーネントをパレットから フォームに追加してコンパイルすると、コンポーネントのユニットがUSES節 に追加されますが、コンポーネントのユニットだけではなく、特定のユニット (ComCtrlsとか)も同時に自動的に追加されるようにしたいのですが、どう すればいいでしょうか?
>>616 ぶっちゃけ、バグ直して欲しいだけです。
おなじようなの、ないですかねぇ
元がバグってやがった あーあ
620 :
デフォルトの名無しさん :04/11/12 20:10:17
Delphi で inline 関数を定義することはできないのですか?
>611 WindowClosing Event
>>586 調べてみたところではWin9x系でWindows APIで読み書きする場合は
64kBを超えるとうまく動作しないという情報もあるようです.
TIniFileは内部で上記APIを呼び出していますのでこの制限を受けると思われますが,
TMemIniFileではこれは使われず,自力で読み書きしているのでこの制限を受けません.
要はTMemIniFileを使えばOK.
>>612 クリック:押した直後にその場で離す
ドラッグ:押しっぱなし
たとえばペイントツールでドラッグによって画像の処理範囲を指定する場合は,
一般的なやり方は知りませんが,
私はキャンバスに直接点線の矩形を描画したり消したりしています.
(キャンバスのDrawFocusRectメソッドで描画すると消すのが楽でしょう.)
>>617 publishedなプロパティに影響される。
例えばTFont型のFontプロパティが公開されていれば、
TFontを定義してあるGraphicsユニットも自動で追加される。
ComCtrlsが追加されると言うことは、
ComCtrlsで定義された型がpublishedなプロパティにあるはず。
627 :
617 :04/11/13 06:06:25
>>625 さん
>ComCtrlsが追加されると言うことは、
>ComCtrlsで定義された型がpublishedなプロパティにあるはず。
試してみたのですけど、>ComCtrlsは追加されず無理でした。
因みに、新規作成してプロジェクトを起動したときに、初めからUSES
節にあるGraphicsを削除してからFontプロパティがあるTLabelを追加し
てコンパイルしても、Graphicsユニットは追加されませんでした。
628 :
デフォルトの名無しさん :04/11/13 09:48:07
SQL Server 2000の一時テーブルをTTableで使いたいのですが グローバル一時テーブルはOK、ローカル一時テーブルでは Open時に無いと言われてしまう。 一時テーブルはOpen直前のTQueryで CREATE TABLE #TableA ・・・ してます。
629 :
デフォルトの名無しさん :04/11/13 10:36:52
>>628 ふーん、それで?
学校の宿題は先生に聞いた方が早いよ。
以上。
630 :
デフォルトの名無しさん :04/11/13 11:01:23
>>629 わからなかったら書かなきゃいいのに。w
超初心者が見るスレだからそんな物だということで
>>628 セッションが終了しているか、別セッションで使用しようとしてません?
633 :
デフォルトの名無しさん :04/11/13 14:45:52
>>632 どうもです。
こんな感じで直後にOpenしてます。
もちろんTDataBaseも同じです。
Query1.ExecSQL; [CREATE TABLE #TableA (aaa int null)]
Table1.Open; [Table1.TableName:#TableA]
Query1.Open (SELECT * FROM #TableA) だと問題なしです。
Commitしてみたら?
635 :
デフォルトの名無しさん :04/11/13 15:23:53
と言う事はTable1とQuery1は別のセッションに続しているとみるのが妥当。 てかなんでTQueryじゃ駄目なの?
ステータスバーを付けるとでてくる、 右下の//←こんなようなウィンドウサイズを変える部分が描画できるコンポーネントってないですか? どっかで見かけたような気がするんですが。
638 :
デフォルトの名無しさん :04/11/13 16:34:53
>>636 複雑な処理でのワークファイルに使いたいのでTTableじゃないとダメなんです。
勘違いしてグローバル一時ファイルで作りまくってしまい、本番前テストしたら
他のユーザーとぶつかってしまい慌てているところです。w
ローカルの寿命:作ったユーザーのセッションが切れるまで。
グローバルの寿命:使っているユーザーのセッションが切れるまで。
TDataBaseを使ってセッションも明確にしているのに
グローバルができてローカルができないのは?です。
641 :
デフォルトの名無しさん :04/11/13 16:47:07
TQueryを使ってファイル名を動的に変更してテーブルを 作りたいんですけど下記の方法ではダメでした。 何故なんでしょう? Query1.ParamByName('TableName').AsString := 'Table1'; Query1.ExecSQL;・・・・CREATE TABLE :TableName (Field1 varchar(1) null)
MainMenuの(&T)とかを表示しないようにするにはどうしたら良いですか? キャプションに(&T)とつけなくても実行すると勝手についてしまうので・・・
AutoHotKeysをFalseにしろ
! 適当なこと言ってごめんなさい
>>644 それだと「_」だけ残りました
>>645 AutoHotKeysのプロパティはmaParent,maManual,maAutomaticでどれを選んでも変化ありませんでした
>>647 そんなはずはない.
大元の TMenu.AutoHotKeys を maManual に設定すれば勝手にホットキーが付加されることはない.
>>648 あ、大元をmaManualにしていませんでした
できました、ありがとうございました
>>638 ログを採取するかSQLモニタで投げられるSQLを監視してみたら。
>>641 テーブル名はリテラルじゃないからねえ・・・素直にクライアント側でSQLを編集すれ。
651 :
初心者 :04/11/13 18:40:08
あの質問なんですけど、テキストファイルの拡張子がdatとなっているのですが、 変なプログラムに関連付けてしまって、テキストが見れなくなってしまいました。 もとのテキストを見るには、どのプログラムから開けばいいですか?
notepad
653 :
初心者 :04/11/13 18:50:09
ありがとうございまつ。
Delphiっていうより、Windows の初心者だな。
Delphi6Personalでいわゆる「XPスタイルのボタン」を使うにはどうすればいいですか? それとも無理?
>>656 マニフェストファイルを自動生成するソフトを使って
なんとか目的は達成できました。
ちょっと自分のイメージと違ったけど
658 :
デフォルトの名無しさん :04/11/13 22:51:19
ファイルの指定した場所から指定された終わりの場所までの内容をbit反転したいのですが、 どのようにしたらいいのでしょうか?
>>658 ファイルをメモリに読み込んで反転したい場所をNOTしてまたファイルに書き込む。
assignfile, reset, seel, read, write Win32APIのメモリマップファイル使っても簡単。
>>659 notじゃなく、$ffffとのxorだろ
not でOK。
そうか? 少なくともnotじゃないと思うぞ
664 :
デフォルトの名無しさん :04/11/14 02:08:07
とりあえずつくってみてれば?
xor は別のビットパターンとの演算だからnotでいいよ。 00110101 ↓not↑ 11001010 01110011 xor ↑ 10111001 ↓ xor 11001010
ていうかどっからxorが出てくるんだ?
恐らく勘違いだろ。 A := B xor $FFFF; も A := not B; も結果的には一緒だが。
たのむからデルファイ以前にビット演算ぐらいまともにしてくれ
面倒なことやってないで言いたい事があるならはっきり言いなさい。
>>661 わざわざひねくれるのはなぜ?
普通に反転ならnotだろ
delは型でビット演算用のnotと論理演算用のnotを使い分けます。
で?
サンプルプログラムをUPしてみようか?
まぁ勝手にがんばっておくれ
レベル低すぎ プログラム以前
658もこれ以上なにも無いようだからこの話題はこれにて終了。
質問よろしいかしら。 TMedeaPlayerを扱うような感じで、Flashを組み込みたいと思っているのですが、 できるのでしょうか。できるとしたら、どのようにすればよろしいのでしょうか。
アクチヴXコントロールの取り込み
>>677 変な口調。(w
それはさておき、TShockwaveFlashをタイプライブラリ取り込みする。
100個くらいあるテキストファイルの各一行目だけを取得するには、 どうするのが効率的な処理なのでしょうか? 現在はとりあえずStringListでファイルを読み込み、 Strings[0]で読み込んでいますが、非常に非効率的な気がします
AssignFile, Reset, Readln
このスレッドは、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。 Delphi使いが優しくコメントを返しますが、 お礼はDelphiの布教と初心者の救済をお願いします。
>>681 ありがとうございます
それでやってみます
>>622 遅レス申し訳ありません。
ShDocVwだとだめなんですね。
ActiveXのインストールでShDocVw_TLBを作ってusesを変えたら
CTRL+SPACEで選べるようになりました。
ヒントをいただき大変助かりました。ありがとうございました。
ファイル読み込みはread 書き込みはwrite
ファイルもフォルダも選択できるダイアログってありますか?
あ、同時にではなく、例えばフォルダを選択すればフォルダ、ファイルを選択すればファイル、という動作とか。
>>687 OpenDialogでFileNameを'(フォルダの選択)'にしといて
ExtractFilePathでパス(フォルダ名)を取得とかやったことはある。
ファイル選びたければ選べるし。
>>688 さん早速にありがとうございます。
なるほど!それは思いつきませんでした。やってみます。
IBDataSetの使い方を教えてほしいのですが、 取得したレコードの項目を更新したいのです。 IBDataSetのプロパティに SelectSQL には SELECT文 ModifySQL には UPDATE文 設定していた場合、 このUPDATE文を実行する方法はどのようにしたらいいのでしょうか? 環境はFirebird1.5 Delphi7です。
>>690 よーわからんが、
CasheUpdatesをTrueにして
OnAfterPostイベントで
ApplyUpdatesして、トランザクションのCommitRetainingを実行汁。
>>691 さん、ありがとうございます。
CasheUpdatesをTrueにしていませんでした。
へ〜っ。すげぇ 確かに「ショートカットの作成」の「参照」ってファイルもフォルダも選べるな。 想像もしてみなかった。
>>693 さんありがとうございます。
おおー、これも面白いですね。
おもしろいつーか、ピンポイント的にファイル選ぶときは、TOpenDialog より便利かも
697 :
デフォルトの名無しさん :04/11/17 00:06:42
C++オンリー(と少しだけJava)でしたが、Delphi始めてみようと思ってます。 Delphiの欠点って何ですか?
スルーよろ。
欠点を認めない信者
ここの人間
その欠点ってのは具体的になに?
Delphiの欠点って何ですか?
しょぼい最適化
変な言語。
chromeみたいに変数宣言できればいいのに
将来性
厨が多い事
定期的に煽られること
信者がくさいこと
すいません、質問です。 あるコントロール(例えばパネル)にマウスポインタが入ってきた、 もしくは出て行った事を感知するにはどうすれば良いのでしょうか。
CM_MOUSEENTER
出ていったもあったか。 CM_MOUSELEAVE
>>712 ,713
速レスありがとうございます。
ぐぐって調べつついろいろ試したいと思います。
というか、質問する前に検索するの忘れてました。すみません。
オブジェクトインスペクタのコンポはパーソにはないんですか?
全バージョンにありません
DelphiはDelphiじゃ作れないんですか?
Delphiの中の人はDelphiです
>>717 BorlandのDelphiはDelphi自身でできています
BorlandのDelphi2005の一部はMSのC#コンパイラをつかってつくられています
つくれるかどうかと、標準のコンポでついてくるかどうか、は関係ない
.NETアプリはすべてMSのJITコンパイラでコンパイルされる
C# コード → MSIL へ変換する csc.exe はコンパイラではないと?
そういった高度な議論はフサスレで
DelphiはDelphiで作られてるってよく聞くけど・・・ 最初のDelphiは何で作られたの?
初心者激減
Delphiは信者の愛でできてます。
Delphiなど存在しない!
半分はやさしさで出来てるらしいぞ。
タスクバー上のタスクウィンドウ?を右クリックしたときに出るメニューを変えたい・編集したいときは なにをいじればよいのでしょうか?
>>725 IDEがDelphi製、dcc32はDelとは別の言語らしい。
>>730 「Delphi システムメニュー」でぐぐれ
TFileStreamの使い方で質問します type TRec = record tree:TTreeNodes; files: string; end; var fst:TFileStream; rec:Trec; この前提の元 Rec.tree := TreeView1.Items; Rec.files := 'aaaaaa'; fst := TFileStream.Create(ExtractFileDir( Application.ExeName ) +'\aa.txt', fmCreate); fst.Write(Rec,sizeof(Rec)); fst.Free; と実行したのですが出力されたファイルはたった8バイトのサイズでした どこが悪いのでしょうか?
>733 そりゃ、TTreeNodesもstringもポインタ保持だからだろう。 参照型変数と値型変数で調べてみな。 他の言語のリファレンスが多いと思うが、それでも勉強になるだろう。
ちょっとかみ砕いてやると、 用は、おまいさんのしたいことをするためには、 値型変数じゃなきゃいけないんよ。バッファは。 だから、stringはchar配列に、TTreeNodesは各メンバーをintegerとかchar配列にして Filestreameで書き込んでみな
>type >TRec = record >tree:TTreeNodes; >files: string; >end; こういった複合型のデータをファイルに読み書きするには recordではなくclass(TComponent)にして TStream.Read/WriteCompoenentすればいいんだけど ちょっと難しいかも。まあ調べてみなよ。
お尋ねします。イメージコンポーネントにピクセル単位で色を付けたいのですがうまくいきません。 TThreadを利用して次の方法で描画を試みているのですがどこか間違っているでしょうか。 Form1.Image1.Canvas.Pixels[x, y] := $00000000; //右辺は任意のCardinal値。
>>737 Canvas プロパティは,Picture プロパティが TBitmap オブジェクトを表しているときのみ有効です。
Picture プロパティが TBitmap以外のほかのグラフィックイメージを表しているときに
Canvas プロパティを読み出そうとすると,TImage は EInvalidOperation 例外を生成します。
>>738 ありがとうございます。TBitmap.Createを試みます。
740 :
デフォルトの名無しさん :04/11/18 13:46:12
巨大なビットマップをBeginDoc/EndDocで連続印刷してると、 印刷されなくなってしまい、PCを再起動しないと回復しなくなります。 こんな症状はどうやって回避すれば良いでしょうか?
741 :
740 :04/11/18 14:01:39
742 :
デフォルトの名無しさん :04/11/18 14:08:55
Delphi 2005とVB 2005でどっちが優秀なんですか?
743 :
デフォルトの名無しさん :04/11/18 14:15:04
どなたかDelphiに詳しくて下らない質問に一丁答えてあげようか って人お願いすます。 Delphi2005でC#を使ってMDIアプリケーションを作れるでしょうか? それと、DBCtrlGridはC#で使えるでしょうか? それが出来ればDBのフロントエンドに使おうとおもってます。
745 :
デフォルトの名無しさん :04/11/18 14:45:01
>>744 そうですか。ボーランドのHPを見ても詳しいことが分かりません。
といって会員登録してまで資料を見るのもなんだし...。
困ったな...。
OnIdleすげーなwwwwwwwwwww 5000fpsキターちっこい円の描画だけどwwwwwwwwww CPU死ぬけどwwwwwwww
sleep使うとCPUしなねぇええwwwwwwwwwwwww
>743 Delphi2005のC#でできることは、VC#でも殆ど出来ることなんだから、 既存のVC#文献や.NET Framework SDKのドキュメントを読め。
既存のC#と既存のDelphiをまとめて起動するが、 同時にはどれか一つしか使えないのがDelphi2005なわけで、 当然C#からDelphi機能は使えないし、DelphiからもC#機能は使えない。 VSと一緒だね。
質問させて下さい サイズ変更可能なタイトルバーなしのフォームを作りたく思い、 検索してサンプルなども見つかって動作するのですが、不満な点があります。 探したところCreateParamsをoverrideしてWS_THICKFRAMEを指定してあげる方法しか 見つからなかったのですが、これだと当然ながらフォームの縁に太い線が出来てしまいます。 出来れば縁がないものを作りたいのですが、良い方法がありますでしょうか? ※BorderStyleでbsNoneにしたときのような外観にしたいのです。
751 :
デフォルトの名無しさん :04/11/18 17:13:39
>>748 >>749 有難うございます。
どうも私はDelphiでコーディングする時にObjectPascalの
代りにC#が使えると勘違いしてました。
単にC#BuilderとDelphiの機能が合体しただけなんですね。
お騒がせして済みませんでした。
753 :
デフォルトの名無しさん :04/11/18 18:30:30
754 :
デフォルトの名無しさん :04/11/18 18:33:45
Printer.PageWidth とは、紙全体でつか? マージンを除いた範囲で塚?
>>754 印刷可能領域の幅。
てか試せばわかるだろうに・・・
>>753 特定のOS固有の問題なのか特定のマシン固有の問題なのか
Delphiアプリの問題なのかの切り分けはできてるのか?
757 :
デフォルトの名無しさん :04/11/18 18:53:04
サンクス
>>755 いや、紙全体と思ってプログラム作ったら、印刷可能領域の幅のように印刷されたんです。
で、そう理解してプログラムして、あるプリンタだとマージンが0になったりしたらアウトだし、
念のため確認させて貰わないと怖かったんで津。
TDataSetにデータベースから取得したデータをいれてるんですが、 これを他のTDataSetの変数にコピーするって可能ですか? たとえば、TStringList.Assign()のように。 デストラクタとコンストラクタの関係で、データの中身だけをコピー したいのですが、そういう関数ってあるのでしょうか?
761 :
デフォルトの名無しさん :04/11/18 20:23:18
Delphier と VBer(+.NETによるOO能力) ってどちらが優秀なんですか?
とりあえずDelphier代表として中村タンを推してみようか
webアプリケーションデバッガでCGIのテストをすると、 ブラウザに「404ファイル未検出」って出ます。 環境はXP SP2です。 2000 sp4だとデバッグ出来ます。 おおざっぱな質問で申し訳ないですが、どなたかヒント下さい。 webアプリケーションデバッガ自体の設定は何も変えていません。 よろしくお願いします。
> 環境はXP SP2です。 ......
ドラッグして並べ替え出来るメニューって実現出来ませんか?
出来る。 がんばれ。
描画のちらつきおさえるのってDoubleBuffered以外にどんなのがあるの?
何の描画?
VSYNC同期。
VSYNCで垂直同期だから、同期は不要だった。
>>756 >>741 のリンク先の中村拓男氏の本によるとWindowsでは
巨大なビットマップの拡大縮小,さらにそれが印刷と絡むとかなり厄介みたいです.
で,それを回避したのがTBigBitmapみたい.
773 :
デフォルトの名無しさん :04/11/19 08:46:02
TBigBitmap使ってる人いまつか? TBitmapをそれに置き換えたいのでつが、クラス宣言差し替えるだけ?
特殊なプロパティやメソッドを使っていなければ置き換えだけで行けると思います. ・uses節にユニット名を追加 BigBitmap ・変数宣言 FNantokaBitmap: TBitmap → FNantokaBitmap: TBigBitmap ・実体(インスタンス)を生成しているところ.FNantokaBitmap := TBitmap.Create → FNantokaBitmap := TBigBitmap.Create
775 :
デフォルトの名無しさん :04/11/19 10:36:52
>プリンタにビットマップを印刷するには、以下のことを守る必要があります >DIBの拡大は4倍以下にとどめ、それ以上の拡大が必要な場合は、Scanlineプロパティなどを使ってアプリケーション側で拡大処理を行う。 単純にTBitmap上で拡大して、それをStretchDIBitsすれば無問題なんかな???
Timerがこわれた・・・10倍!????? 10000で1秒だよorz
777 :
デフォルトの名無しさん :04/11/19 15:13:23
StringにNULL入りバイナリデータを入れる方法教えて下さい。
SetLength(s, 100); s[10] := #0; move(PChar(s), p, 100);
779 :
デフォルトの名無しさん :04/11/19 15:24:35
サンクス
>>778 BCBの場合はどうなりまつか?
>>779 めんどくさくなるだけだからやめておけ。
char配列では出来ない理由でもあるのか?
ファイルがあろうとなかろうと強制的にフォルダを削除する命令はありませんか?
ない
ないのか_| ̄|○ 中のファイルを削除しようとするといつも削除失敗するわけですが・・・ 属性や使用中の問題はないはずなんですが、なんでだ・・・
>>785 うまくいきました。ありがとうございました。
787 :
デフォルトの名無しさん :04/11/20 09:48:09
既出かもしれませんが、検索してもでてこなかったので、書きます。 TShellListViewで、 '*.txt'のように拡張子で限定して表示させたのですが、どのプロパティに設定すればいいのでしょうか。 オブジェクトインスペクタを見ても該当のプロパティが見当たりません。 ソースを解析するしかないのでしょうか。 直接の情報でなくても、このサイトに詳しい情報があるということでもかまいませんので、よろしくお願いします。
意味がわからない
789 :
787 :04/11/20 14:58:31
すみません。書き方が不十分でした。 たとえば、ファイルリストボックスだと、MASKというプロパティがあって、その値は、デフォルトで’*.*'になっています。 これを FileListBox1.Mask := '*.txt' と記述すると、拡張子がTXTのファイルだけが表示されます。これをTShellListViewでも行いたいのです。 よろしくお願いします。
>>787 OnAddFolder イベントで ファイル名により CanAdd 引数を False にする
SetFocusを実行しても、適応されない時があります。 timer を使ってやると必ず実行されるのですが・・・
792 :
787 :04/11/20 19:25:11
>>790 ありがとうございます。早速試してみます。
793 :
デフォルトの名無しさん :04/11/20 21:57:35
>>791 タイマーを使うと確実にできるけど、使わないとできないというなら、
考えられるのは、SetFocusの次のコードで意図せずにフォーカスを
動かしてしまっている場合だけど、具体的なことがわからないので
これ以上は答えられない。
もう少し詳しく書いて。できれば当該個所のコードを書いてもらったほうがいい。
delphiのエディタって16色しかつかえないの?
795 :
デフォルトの名無しさん :04/11/20 23:01:05
>>794 エディタって統合環境のこと?16色あれば十分だと思うが。8色でもいいくらいだ。
残念ながら使えないっぽい。
画面のプロパティでシステムカラー変えれば?背景色だけは変えられたよ。
できないならできないとはっきりいえばいいのに。 そんなに負けを認めたくないの?
そんなに勝ちにこだわりたいの?一体何と競ってるの?
イメージエディタのことじゃね?
801 :
デフォルトの名無しさん :04/11/20 23:49:53
イメージエディタなら256色使えるぞ。
イメージエディタでもフォームエディタでもなく、コードエディタの話だろ? [デフォルトを使用]にチェックを入れた項目はWindowsのシステム色と同じになる。
フォーム本体は表示しつつ、タスクバーには非表示にしたい。 ということは出来ますか?
Application のウィンドウを消すんじゃなかったかな
キー入力があったかなかったかだけを取得するには どうやるのが一番簡単でしょう。大昔のIOポートをずっと見てる みたいなイメージなのですが。 入力の内容には全く用はなく、他のアプリへの入力も感知したいのですが。
キーロガー? ぁゃιぃ。
ちちちちがいます スクリーンセーバーみたいに長いこと入力がないと 動くようなプログラム書きたいんです。
じゃあ、いっそのことスクリーンセイバー形式にしてしまったら。
意外と難しそう。 システムフックか、GetAsyncKeyStateで全キーを頻繁に調べる。
あ、そうかそっちでいいんだ。<アイドル状態
犯罪を幇助するとその人も罪になるからアホな真似だけはしないように。
>>810 マウスでやってるんですが、それだとキーボードだけでやってる間に起動しちゃうんです。
参考にさせていただきます。
>>812 だから違いますって_| ̄|○
WM_KEYDOWN というのを使えないでしょうか。 なんだかよくわかってませんが・・・
つかえないだろ。システムレベルなんだから
つくったexe起動したら5000kぐらいメモリ使ってるんだけど いったん最小化してから元のサイズに戻すと半分以下になるよ なんで?
そういうもん。気にするな
>>794 レジストリエディタでいじれば…と思ったら,
Delphi 5は0〜15の値で記録してた(´・ω・`).
DWORD値を使って4ビットの値なんか書き込むなよなぁ.
システムの文字色と背景色を使うオプションで何とかするしかないようです.
(Delphi 7は違うらしいのですが持っていないので未確認)
>>814 WM_KEYDOWNを,どうしたいのですか?
やりたいことを具体的に書いた方がレスはつきやすいですよ.
ちなみにDelphiで使えます.
>>804 ありがとうございます、
Application のウィンドウを消すとは具体的にはどうすればいいですか?
>>819 ShowWindow(Application.Handle,SW_HIDE);
なんかもう本当にキーロガー作るのが目的だったんじゃないかと思えてくるな
TWebBrowserのPaintToメゾットを使いたいんだけど上手くいかないです。 ヘルプ読むとPaintToメゾット使う前にキャンバスをロックしろって書いてあるけど TWebBrowserにはそんなメゾット無いみたいだし…。 分かる方いませんか?
(´-`)。o ○ (ツッコミ入れるべきかなぁ… それとも濁点付いてんのが正しいのかなぁ…)
(´-`)。o ○ (って、見直してみたら「ト」に濁点付いて無いし…)
広げて済まない。
本当済まない。
が、
>>828 その中に「メゾット」ってタイトルで、ファイル名に「mezotto.html」と
付けてるのが…。
ああああああ。
>>824 早めに訂正してくれ。済まんな。
method だから、イタリア語読みとかすると、メゾットになるのだろうか。 そういや はじめてのObject Pascalプログラミング テクニカルマスターシリーズ って本で、英単語系のふりがなが、一般的なものとめちゃくちゃかけはなれて 笑ってしまった記憶があるなあ。
キノコメゾット
>>830 の本
ChangeFileExt (チェンジファイルエクステンション)、
WriteLn (ライトライン) …てことか?まぁ確かに。
でも俺はあの本で "Width" の読みを知ったよ。10年以上「ワイズ」と読んできたが
「ウィドス」が正しいのな。 ハァ?と思って辞書を引いたら _| ̄|○
更に話がそれるが、プログラミング入門書には Procedure と 引数 の読み方
ぐらいは書く事にしておいても良いと思うんだが。 ぷろせでゅあ〜 マンセー♪
>832 俺が一番笑ったのが、そのプロセデュアーなんだけど。 記憶違いじゃなかったら、確かあの青い本もそう書いてあったよね? 一応 dictionary.goo.ne.jp/search.php?kind=ej&MT=procedure で確認したが、多分プロシージャが普通だよなあ。
いや、プラシージャかな。自己レスすまん。 ネイティブな人の発音を聞いてみたいやね。
ニッポンジンには「てつづき」でよかんべぇ。
↓次の質問か、
>>824 の続きか
プロシージャ の検索結果のうち 日本語のページ 約 90,900 件中 1 - 100 件目 (0.39 秒) プラシージャに該当するページが見つかりませんでした。 "プラシージャ"を含むページは見つかりませんでした。
プロセデュアー の検索結果のうち 日本語のページ 約 5 件中 1 - 4 件目 (0.29 秒) てつづき の検索結果のうち 日本語のページ 約 3,580 件中 1 - 30 件目 (0.35 秒)
Procedureは、たぶん「プラージャー」が英語の発音に一番近そう。 「プロセデュア」というのは、経営学の方面でよく使われる読み方。 世間一般には、プロセデュアのほうがとおりがよさそう。
ちょうどいいから聞くけどinheritedてなんて読めばいいの? インハリテッドって読んでるけどちょっと違う気がする
インハーライテッド。
842 :
デフォルトの名無しさん :04/11/22 10:07:28
うわ!ずっとメゾットだと思ってました。 メソッドでしたか…。道理でATOKが一発で変換してくれないわけだ…。 失礼しました。
844 :
デフォルトの名無しさん :04/11/22 12:50:00
>>839 インヘリテッド
Heritec -> ヘリテック
辞書引けよ。
RichEditで折り返し文字数を設定できますか? どこかの掲示板にSendMessageで出来ると書いてあったので調べたんですが、 全くわかりませんでした。漏れの目が節穴なのは承知ですが、どなたかご教示ください。
incとdecは? 俺はインクリメント、デクリメントと心で読んで打っている。 でもインクリーズ、デクリーズかもしれないので人には言えずにいた。
radioGroupのItemsの1項目内の文字列を 改行コード等で区切って2行で表示するとかいうことはできますでしょうか?
>>848 procedure TForm1.Button1Click(Sender: TObject);
var
hRadio:HWND;
ctrl:TControl;
Style:LongInt;
s:string;
begin
hRadio := TWinControl(RadioGroup1.Controls[0]).Handle;
Style := GetWindowLong(hRadio,GWL_STYLE);
SetWindowLong(hRadio,GWL_STYLE,Style or BS_MULTILINE);
s := '1111111111'+#13#10+'22222222';
SetWindowText(hRadio,PChar(s));
end;
sLineBreak使え
Kylix 使う予定なし
DelphiでJava作れるの?
そりゃ Windows 上の Java VM ならつくれるだろうさ。可不可だけならね。
どうもです。 やはりプロパティ上ではなく、コードでなんとかしろということですね。
procedureとかfunction宣言してなんかキー押したら実現部にコードのテンプレート自動生成されるってホント? ホンとならやり方教えて♪
プロ版以上なら右クリック→定義の補完
申し訳ありませんが上級スレの方でも聞かせて頂きます。
859 :
デフォルトの名無しさん :04/11/22 20:59:02
Shift + Ctrl + C
”超”初心者はDelphiの勉強よりもコンポの勉強をしたがっている。 コンポで出来るか出来ないかが重要で、出来ないことはあきらめる。 コンポで出来ないことはDelphiでは出来ないことになる。
>>860 ふーむ、そうだね。背後にある原理とかは興味がないんだね。残念。
863 :
デフォルトの名無しさん :04/11/22 23:12:09
エディットボックスにファイル名を入力させたいのですが・・・。 ファイル名には特定の文字が使用できませんよね。[*]とか[:]とか[?]とか・・。 で、エディットボックスのKeyPressイベントで入力制限をしているのですけど、 コピペされたとき、どんな文字でも入ってしまいます。 もし、コピペする文字に無効な文字が入っていたらコピペ不可! という処理をしたいのですが、どうすればよいのでしょうか?
>>833 & >>ALL
すまん、俺の書き方がまずかった。
>>830 の本に『プロセデュアー』と書いてあった
訳ではない(表記は「手続き」、読み仮名はなし)。正しい読みを知るまで *俺は*
「プロセ…」と読んでしまっていたぞ、というだけの話。 <だから読みも欲しい、と。
スレ違いを更に広げてしまい、スマンかった。
>>863 コピペ処理を自分で書き直せば良い。
TMainMenuをフォームに置いて「貼り付け」メニューを作成。
キーボードショートカットはCtrl+Vに設定。
procedure TForm1.Paste1Click(Sender: TObject)の中で貼り付けされる前のクリップボードの中を検閲。
クリップボードについてはヘルプのTClipboardの項のプロパティとかメソッドとかを色々調べること。
MaskEditじゃあるまいし、完璧に余計な文字が入るのを防ぐコードを書くより アクション時に不正な文字がないかチェックした方が早いんとちゃう?
>>863 こんな。usesは自分で調べて追加してな。
procedure TForm1.Paste1Click(Sender: TObject)
var
str: String;
begin
if Clipboard.HasFormat(CF_TEXT) then
str := Clipboard.AsText
else
Exit;
if AnsiPos(str, '*') > 0 then
Exit
else if AnsiPos(str, ':') > then
Exit
else if AnsiPos(str, '?') > 0 then
Exit
else
Memo1.SelText := str;
end;
>>866 同意。実際はWin32APIに頼るのが一番確実。
未来永劫ドライブレター付のFAT/NTFSでアプリが動くとは限らないし。
OnChangeとかなかったっけ?
結局コンポのプロパティーではできないと・・・・・・
コンポのプロパティーではできないことを工夫してできるようにすることがプログラミングの面白さだと思うそ。
つか、[*]とか[:]とか[?]とかだけ入力不可能なエディットボックスって見たことあるか? もしあったとしてもかえって使いにくいと思うが
とかいいながらこの前の「ファイルもフォルダも選択できるダイアログ」に驚いてた奴>872
>>864 あれ? と思ったので、今日あの本を買ってみた。
(以前読んだときは会社の備品だったので)
……どこにもプロセドゥアーなんて無かった。著者さん、すまんす。
どこでこんな記憶が入り込んだんだろう。
┃━┏┃。oO(……でも、exitはイグザットじゃないと思う)
スレ違いスマソ。
876 :
デフォルトの名無しさん :04/11/23 00:03:09
みなさんありがとうござーます。
確かに、[*]とか[:]とか[?]とかだけ入力不可能なエディットボックスて見たことありません。
けど、winXPでエキスプローラ起動して、新規ファイルを作成して名前を変更しようとして[*]をペーストするとペーストされませんよね。
で、ちょっと作ってみたくなったんです。
>>865 さんと
>>867 さんの方法で、いろいろさぐってみます。ありがとうございました。
ありがとうござーます ありがとうござーます ありがとうござーます ありがとうござーます
>winXPでエキスプローラ起動して、新規ファイルを作成して名前を変更しようとして[*]をペーストするとペーストされませんよね。 !・・・OTZ これからはもう少し謙虚に生きようと思います。
スズキメソードと言いますから、メソードでしょ。
880 :
デフォルトの名無しさん :04/11/23 04:57:27
エキスプローラなのか エクスプローラだと思ってた
マジで悩んでるんだけどFalseってなんて発音するのが正しいの?
ふぁるす?
>>883 うぉぉぉサンクス。
自分の発音とも職場の発音とも違うぜ〜
でも現場ではふぁるすといわなければ通じない罠。。。
うちの職場では ふぉーるす って発音するな。
887 :
デフォルトの名無しさん :04/11/23 06:55:41
>>881 「フォルス」だけど、「ル」は、はっきり聞こえない。
888 :
デフォルトの名無しさん :04/11/23 07:39:02
そこでバルスですよ
日本では「ウソ」「ホント」で統一すべき。
「真」「偽」でええやん。 発音記号風に書くと"tru:", "fo:ls" な。
のっととぅるぅだろ?
うわintegerよりrealの方が精度いいんだなw 入力はintegerでも計算するときはrealの変数に代入してから計算したほうがいいの?
用途次第。スクリーン上の真ん中の座標を算出するのにわざわざRealに変換する奴はいない。
>>895 そのかわり計算速度が遅いよ。メモリも余計に喰うよ。
精度がいいというか、表現できる幅が広いわけですよ。 試しに、今のDelphiなら、 自分で$7FFFFFFFに1を足すコードを書くとよくわかる。 integerは、OSやCPUといった環境ごとで、一番速度が速くなるように 使用バイト長が変わるんだけど、(現在のWindows環境だとほぼ4バイト長) 将来それが問題になる可能性もあるところでは、 4バイト長固定のlongintを使った方がいいよ。
Win64でもsizeof(int)は4
>899 10年後くらいには、integerは8バイト長とかになってるのかなー? というかDelphi自体が無くなっていませんように。
うぁぁああおもしれえぇえええ 10億回計算してみたよ GetTickCountで時間計ってみたよ 単位はミリ秒 初期値 a:=1 real integer a:=a+1 13389 2103 a:=a-1 13259 2143 a:=a*1 15411 2644 a:=a/1 19448 2114 a:=a div 1
整数が速いのは常識なんだが、お前は何を言いたいんだ?
>>901 どうせならIntegerとCardinalで比べれば面白いのに。
realのほうが時間かかるってのをただ数値として出した ということだろう 何を言いたいとか意味のわからない質問されても困るねぇ
最近は裏が白いチラシが少なくてのう。
S はなんの型かな? ハンドラ全体を見ないと誰にもワカラン
いまなら StringReplace() で一発でできる
function TabSpace(S: string; TabSize: Integer): string; begin result := StringReplace(s,#9,StringOfChar(' ',TabSize),[rfReplaceAll]); end;
>>910 それだけじゃダメだろ
\tX\tXX\tXXX\tXXXX\t
でそれぞれ展開するサイズが違う。
英語の読みはGooなりエキサイトなどで確認するのがよさそうですね.
>>847 私は単純に「いんく」「でっく」って読んでますが,
動詞ならincrease/decrease,でも名詞ならincrement/decrementかな?
意味的にはどちらでも合っているから大丈夫だと思います.
あっ、そうか。そうだね。(TabSize の整数倍)+1にそろえるわけね。 ところで過去ログどおりに動作するね。Pos は AnsiPos を使うべきだと思うけど。 procedure TForm1.Button1Click(Sender: TObject); var s:string; begin s := #9'1'#9'22'#9'333'#9'4444'#9'55555'#9'666666'; s := TabSpace(s,4); Memo1.Lines.Add(s); end;
substrが#9だから結果として無問題>Pos ただ他人に余計な突っ込みと不安を生まないために AnsiPosにするというのもひとつの見識では歩けど。
> substrが#9だから結果として無問題>Pos なるほど。二バイト文字の二バイト目に #9 が来ることはないのね。ありがとう。
お、面白い。 俺も無駄にタブ展開してみようかな。
MDBからデータを読んでExcelファイルに書き込むPGを組んでるんですが、 書き込んだセルの文字色を変えるのは可能でしょうか?
918 :
デフォルトの名無しさん :04/11/24 12:08:42
セルのフォントオブジェクトのカラープロパティをいじる
>>918 XlsApp.Cells.Font.color で合ってますか?
ちなみに設定値はどうなりますでしょうか。
920 :
デフォルトの名無しさん :04/11/24 16:08:41
インデックスでセルを指定する必要があるんじゃないかな。 Cellsでは、レンジオブジェクトが参照できないのでは。
とりあえず、単一のセルだけでも文字色を変える方法を知りたいです。 PGが冗長って言うか、面倒になっても構わないので……
922 :
デフォルトの名無しさん :04/11/24 21:58:58
アクティブウインドウにkeybd_event()を使って「,」(カンマ)を 送りたいのですが、 keybd_event(44, 0, 0, 0); とやっても出来ません。 アルファベットやスペースなんかはできるんですが、 どうやってら出来るんでしょうか?
924 :
922 :04/11/25 07:14:51
>>923 返答ありがとうございます。
それも駄目でした。
今、Excelのセルに入力したX,Y座標の値を読み取って、
CADソフトに自動的に線を書くソフトを作ってます。
ALT(VK_MENU)、ENTER(VK_RETURN)、数値を
CADソフトに送ることは出来ているんですが
唯一カンマを送ることが出来ません…
CADソフトはカンマを受け取れるようになってるの?
Delphi6(無料) をダウンロードして使ってみました。 マニュアルが微妙なんですが、製品版はどうなんでしょうか?
927 :
デフォルトの名無しさん :04/11/25 11:08:29
a,b,c,を入力しaX²+bX+cの解を計算。 二次方程式を判別するプログラムおねがいします
いやです
このスレッドは、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。 Delphi使いが優しくコメントを返しますが、 お礼はDelphiの布教と初心者の救済をお願いします。
根の公式に代入するだけ。複素数かどうかも判断できる。 プログラミングの要素としてはくだらなすぎ
=0 が抜けてるから解はない、が正解
932 :
シスシス :04/11/25 12:02:39
文字列のAND検索はどうすればいいの?(VB.NET)
すれ違い
934 :
922 :04/11/25 12:33:30
925 受け付けます。もともとX、Y座標をカンマで区切るので。 試しにメモ帳でやってみても、カンマは送れないです。 とりあえず、他の方法も考えてみます。 一応、環境は Win2000 Delphi7Pro
44 は VK_SNAPSHOT だね。コンマのほかにも中括弧とかコロンとかどうやるのかな?
>>926 クイックスタート、言語ガイド、開発者ガイドのPDFのことなら全く同じ。
937 :
デフォルトの名無しさん :04/11/25 15:33:05
AnsiPosとかで文字列内の最後部にある位置を知りたいんですけど方法ありますか? abcabcで二つ目(一番後ろ)のaの位置を取得したいっす AnsiPosだと1しか返ってこないけど、他に関数とか用意されてるんでしょうか? 一応、先頭が見つかるごとに検索開始位置をずらしてやってみたりしたんですけど文字数が多いととてつもなく時間食ってしまいます
StrRScan
訂正:AnsiRScan
940 :
デフォルトの名無しさん :04/11/25 15:40:54
StringGrid1.Rows[StringGrid1.Row].Delimiter:=#9; Text:=StringGrid1.Rows[StringGrid1.Row].DelimitedText; とやると、セルの内容に半角スペースが含まれるときに、そこが ダブルコーテーションで囲まれちゃうんですが、これをしないように する方法はありますか?
>>941 QuoteChar := ''でいけるかも
>>942 即レスありがとうです。やってみたんですが、
QouteChar:=''だと、StringとCharに互換性がないと言われます。
#0ではエラーが出ました。
procedure TForm1.FormCreate(Sender: TObject); var i: Integer; begin i := -1; if i in [-1, 0] then ShowMessage(''); end; コンパイルエラーが出るのは何故ですか?
>>944 集合型は負数の指定は不可。
InRange使え。
文字をS-JISからEUCに変換したいのですが、 HenkanJ.pasの使い方を教えていただけないでしょうか。 len := Length(Line); for ch := 1 to len do begin moji := SJisToEUC(ord(Line[ch])); mojis := mojis + chr(moji); end; 何故かデータが難しい漢字ばかりになってしまいます。
レイブレポートの使い方を教えてくれる学校とかないですか?
がっこう・・・
>>949 凄い助かった。ありがとう。
後から二バイトの判断には気づいたんだが、
その後の処理がめちゃくちゃだった。
これで家に帰れる。
Delphi2005トライアルで作ったソフトは配布してもいいですか?
Delphi2005トライアルの規約をお読みください
953 :
922 :04/11/25 21:10:47
これでカンマを送ることが出来ました。
keybd_event(188, 0, 0, 0);
お騒がせしました。
>>935 コロンは「186」
中括弧は不明です。
>>953 ありがとう。こっちでも試してみた。virtual-key code が Windows.pas で未定義な 166 から 228 の間で
keybd_event(Code, 0, 0, 0);
keybd_event(Code, 0, KEYEVENTF_KEYUP, 0);
で意味ある「文字」を送れるのは
186 : :
187 : ;
188 : ,
189 : -
190 : .
191 : /
192 : @
219 : [
220 : \
221 : ]
222 : ^
226 : \
228 : 00 (?)
たとえばキーボードを見ると { は shift + [ だから
keybd_event(VK_SHIFT, 0, 0, 0);
keybd_event(219, 0, 0, 0);
keybd_event(219, 0, KEYEVENTF_KEYUP, 0);
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
でOK。以下おなじ。
955 :
922 :04/11/25 22:13:22
WM_CHARでも送っとけ
keybd_event() のとこを話すと必ず一人は現れるね > WM_CHAR
>>922 カンマとかのキーコードはキーボードレイアウトによって変わる。
VkKeyScanを使えば、任意の文字に対応する仮想キーコードと修飾キーを調べられるよ。
>>958 >>922 じゃないけど試してみた。ありがとう。
function GetVirtualKey(ch:Char):string;
var
ret: word;
func,code: byte;
begin
ret := VkKeyScan(ch);
func := HIBYTE(ret);
code := LOBYTE(ret);
if (func = $FF) and (code = $FF) then
begin
result := 'not found';
exit;
end;
result := '';
if (func and $01 <> 0) then result := 'SHIFT + ';
if (func and $02 <> 0) then result := result + 'CTRL + ';
if (func and $04 <> 0) then result := result + 'ALT + ';
result := result + IntToStr(code);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.Add(GetVirtualKey('a'));
Memo1.Lines.Add(GetVirtualKey('A'));
Memo1.Lines.Add(GetVirtualKey(','));
Memo1.Lines.Add(GetVirtualKey('['));
Memo1.Lines.Add(GetVirtualKey('{'));
end;
つづき 結果 65 SHIFT + 65 188 219 SHIFT + 219 うまくいった!
実際に使うときは文字列じゃなくて、結果をフラグと数値にして keybd_event() を SHIFT を押すかどうかなどを判断するようにコードを書けばいいね。
やってみた function KeybrdEvent(ch: Char; CtrlCode:Boolean=false):Boolean; var ret: word; func,code: byte; fShift,fCtrl,fAlt:Boolean; begin result := false; if CtrlCode then begin keybd_event(byte(ch), 0, 0, 0); keybd_event(byte(ch), 0, KEYEVENTF_KEYUP, 0); end else begin ret := VkKeyScan(ch); func := HIBYTE(ret); code := LOBYTE(ret); if (func = $FF) and (code = $FF) then exit; fShift := (func and $01 <> 0); fCtrl := (func and $02 <> 0); fAlt := (func and $04 <> 0);
つづき if fShift then keybd_event(VK_SHIFT, 0, 0, 0); if fCtrl then keybd_event(VK_CONTROL, 0, 0, 0); if fAlt then keybd_event(VK_MENU, 0, 0, 0); keybd_event(code, 0, 0, 0); keybd_event(code, 0, KEYEVENTF_KEYUP, 0); if FAlt then keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0); if FCtrl then keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0); if FShift then keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); end; result := true; end; procedure TForm1.SpeedButton1Click(Sender: TObject); begin KeybrdEvent('D'); KeybrdEvent('e'); KeybrdEvent('l'); KeybrdEvent('p'); KeybrdEvent('h'); KeybrdEvent('i'); KeybrdEvent(Char(VK_RETURN),true); KeybrdEvent('@'); KeybrdEvent('<'); KeybrdEvent('|'); KeybrdEvent('8'); KeybrdEvent('_'); KeybrdEvent(Char(VK_LEFT),true); KeybrdEvent(Char(VK_LEFT),true); end;
結果 Delphi @<|8_ となって、期待通りキャレットが8の前に来る
D6パソナルで作ったexeを配布したらどうなるとですか?
対価を得なければいいんじゃないの。フリーソフトなら。
あわわ、overload を使った方がきれいだね。 function KeybrdEvent(VKey: Byte):Boolean;overload; begin keybd_event(VKey, 0, 0, 0); keybd_event(VKey, 0, KEYEVENTF_KEYUP, 0); end; function KeybrdEvent(ch: Char):Boolean;overload; var ret: word; func,code: byte; fShift,fCtrl,fAlt:Boolean; begin result := false; ret := VkKeyScan(ch); 省略 end; procedure TForm1.SpeedButton1Click(Sender: TObject); begin KeybrdEvent('D'); KeybrdEvent('e'); KeybrdEvent('l'); KeybrdEvent('p'); KeybrdEvent('h'); KeybrdEvent('i'); KeybrdEvent(VK_RETURN); // 見かけ上同じに書ける KeybrdEvent('@'); 以下略
968 :
デフォルトの名無しさん :04/11/26 04:40:49
Server/Clientプログラムで、Serverに接続した際にパスワード認証を行いたいのですが、 どのように書けば良いでしょうか。
下のようなテキストファイルがあるとき、 文字列 name から adress までに含まれる 文章1だけ指定するにはどうしたらいいんでしょうか? name 文章1 adress 文章2 proffile 文章3 end
sl := TStringList.Create; sl.LoadFromFile('foo.txt'); idx1 := sl.IndexOf('name'); idx2 := sl.IndexOf('address'); for i := idx1+1 to idx2-1 do Writeln(sl[i]);
AnsiPosでnameの位置とadressの位置を見つけて引き算する。 あとはCopyで文章1を抜き出す。
972 :
デフォルトの名無しさん :04/11/26 18:17:58
>>970 さん
>>971 さん
素早い回答ありがとうございます。
今から試してみたいと思います。
では・・
このスレでさえレベルの違う自分が嫌になってきたorz
ttp://hp.vector.co.jp/authors/VA015669/ ここのUIDHTMLEdっていうのをインストールしようとしたんですが、
どうもActiveXの初期化(?)の部分でエラーがでます。
未定義の識別子 action.UIEditon みたいな感じのです。
必要なコンポーネントはインストールしたんですけど全く駄目でした。
サポートもHPも死んでるみたいなので、どなたか対処法をご存じの方、
ご教示下さい。
>>973 同一人物では?
同一人物じゃないだろ。970は文字列単位で、971は文字単位で抜き出す方法。 前者が正解に近い
簡単なシミュレーションを作りたいと思っています。 それにあたって、 プログラム内で、○日目○時○分という形で、 独自の時間を動かしたいのです。 現実の1秒=プログラム内の1秒ではなく、 速度を早めたりできるようにしたい。 今の知識で思いついたのは、 day,time,minuteという3つの変数をIntegerで定義して、 Timerコンポーネントの中に、 time=23 minute=59 なら time=0 minute=0 day+1 time=23 でなく minute=59 なら minute=0 time+1 それ以外なら minute+1 というような内容を書き込んで 時間を経過させていくというものです。 Timer.intervalによって速度も変えられますよね。 ただどうも原始的というかスマートではないですよね。 他にこういう時の定石みたいなものがあるのではと思ったんですが、 何かないでしょうか。
>>977 TDateTime型とIncSecond関数とかどうよ?
PAnsicharの変数をstringに変更するにはどうしたらいいですか?
>>978 難しそうで諦めたんですが
もう一度見てみます。
>>979 PAnsiCharが指す文字をString型に代入するという意味なら
a: PAnsiChar;
b: String;
b := a^;
>>980 独自の時間を秒単位で持つ変数をtとすると
second := t mod 60;
minute := t div 60 mod 60;
hour := t div 3600 mod 24;
day := t div 86400;
984 :
デフォルトの名無しさん :04/11/27 01:43:46
TMyRec = record aa : string[10]; bb : Integer; cc : Boolean; end; こんな型で宣言時に値をつめたいと思っているのですが、 どうもうまくいきません。よろしくお願いいたします。 var MyRec : array [0..0] of TMyRec = ( (aa:'テスト'),(bb:0),(cc:True) ); こんな風にすると、要素数が異なるって怒られます
MyRec : array [0..0] of TMyRec = ((aa:'テスト';bb:0;cc:True));
987 :
デフォルトの名無しさん :04/11/27 01:59:52
あれ? 同じ引数を取る、別の型を返す同じ名前のfunctionって作れなかったっけ? オーバーロードしようとしたら怒られたんだけど function GetInput(const Prompt: string): string; overload; function GetInput(const Prompt: string): integer; overload;
無理だよ。 SetInput(GetInput('xxx')); でSetInputがoverloadされてたらあいまいさを解決できないから。