[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 08/13 11:51 / Filesize : 238 KB / Number-of Response : 924
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前: ◆XcB18Bks.Y mailto:sage [2008/03/12(水) 21:09:39 ]
Delphi(デルファイ)について、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を
勇気を持って書き込むスレッドです。
Delphi使いが優しくコメントを返しますが
お礼はDelphiの布教と初心者の救済をお願いします。

<前スレ>
くだすれDelphi(超初心者用)その45
pc11.2ch.net/test/read.cgi/tech/1198802907/

<過去スレ>
DelWiki避難所(Delphi 関連の過去スレッド)
delwiki.info/?Delphi%20%B4%D8%CF%A2%A4%CE%B2%E1%B5%EE%A5%B9%A5%EC%A5%C3%A5%C9


2 名前: ◆XcB18Bks.Y mailto:sage [2008/03/12(水) 21:10:09 ]
<関連スレ>
【Delphi】 Indyコンポーネント 【C++Builder】
pc11.2ch.net/test/read.cgi/tech/1093654251/
Delphi初心者のための寺子屋
pc11.2ch.net/test/read.cgi/tech/1132756268/
delphiで作った有名ソフトって何があるの?
pc11.2ch.net/test/read.cgi/tech/1135654787/
Delphi持ってるならGLSceneを使え
pc11.2ch.net/test/read.cgi/tech/1163269079/
【Delphi互換!?】FreePascal【GPL】
pc11.2ch.net/test/read.cgi/tech/1137051510/

【Delphi】 ゲームつくるぞ(゚Д゚)ゴルァ 2【Delphi】
pc11.2ch.net/test/read.cgi/gamedev/1097836469/
Delphiでアクションゲームが作りたい!! Part2
pc11.2ch.net/test/read.cgi/gamedev/1027482533/
ネットワークゲーム作成のお勉強(Delphi専用スレ)
pc11.2ch.net/test/read.cgi/gamedev/1028278884/
delphiでMMO
pc11.2ch.net/test/read.cgi/gamedev/1072515100/


3 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 21:17:05 ]
>>1乙です

前スレの991ですが引き続きよろしくお願いします

991 名前:デフォルトの名無しさん[sage] 投稿日:2008/03/12(水) 16:55:10
現在勉強の一環としてVCLを使わずにAPIだけでプログラムを書いているのですが、
IEコンポーネントのブラウザは作成可能でしょうか?
CreateWindowで「AtlAxWin」と「Shell.Explorer.2」を指定してみたのですが作成されていないのかフォームは灰色のままです
また、Navigateの方法も教えてくださると光栄です

4 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 21:53:20 ]
>>3
Delphi固有の問題ではないような。

5 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 23:13:06 ]
>>3
そりゃ可能でしょう。
VCLで作れるなら、VCLのソース見ればいいだけ。

>前スレ989
> Delphiには未来があるんでしょうか?
未来は自分で作るもの。

>990
> 実行時パッケージを使用してコンパイルしたいのですが、
>特定のpasファイルだけは静的リンクするにはどうしたらできますか?
ユニット名を変えれば出来る。 変えずにできるかどうかはやってみて。
でも、パッケージ内のユニットを実行時に置き換えることは出来ないと思うよ。





6 名前:デフォルトの名無しさん [2008/03/13(木) 09:41:14 ]
DelphiのADOQueryでSQLServerへ以下のことをしています。
・Select文を投げる
・Query内をループし帳票へ書き出す

最近帳票が遅いと言われたので、SQLServerのテーブルへインデックスを貼ったところ速度が速くなったのですが、
なぜか「Select文の実行」時間ではなく「Query内を参照し書き出す」時間のほうが早くなっていました。
インデックスでQueryに結果を格納した後の参照時間も変わるものなのでしょうか?

7 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 10:05:16 ]
変わるよ。
たいてい?のデータベースはSELECT文を実行して、最初の数行が決定された
段階でクライアント側に応答を返す。で、クライアント側がカーソルを
使ってフェッチしながら、その裏でデータベースサーバーは続きの行を一生懸命
求めている。つまり、君の言う「Select文の実行」時間とは、サーバーから
応答が返ってきた時間であって、サーバー側ではまだ処理は終わってないんだよ。

8 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 10:19:54 ]
後、文章から判断するとCursorLocationプロパティがclUseServerのサーバーカーソル使ってそうだね。
サーバーカーソルならデータベースのカーソルと同じと考えていいけど、
clUseClientのクライアントカーソルに設定すると、ADOがSELECT文を実行し、
すべての行をクライアントのメモリをフェッチするまで、応答を返さないから
君の測定もまた変わる。その変わり、君の言う「Query内を参照し書き出す」時間
はインデックあろうとなかろうと、返される行数が同じならほぼ一定時間になると思う。




9 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 10:28:03 ]
いや、クライアントカーソルの時「Query内を参照し書き出す」時間が一定になると
書いたが嘘かもしれん。むしろ、嘘っぽいかも。

10 名前:6 mailto:sage [2008/03/13(木) 13:31:32 ]
>>7-9
CursorLocationプロパティはclUseClientになってました。
予想外のところが速くなって混乱していたので、レスみて納得しました。
ありがとうございます。



11 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 14:29:34 ]
>フォームからマウスが外れた時に、
>ある処理(例えばbeep)を行いたいのですが、
>どう記述すればいいでしょうか?
SetCaptureControl/ReleaseCaptureを使ってみては?
OnMouseMoveでSetCpatureControlを使用するならフラグで多重起動
させないように管理する必要性があるけど。

12 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 15:18:19 ]
Delphi の
 TFoo<T,S> = class
  ...
 end;
 TFooInt<R> = TFoo<R,Integer>;
の TFooInt<R> って、C++ の template だとどういう風に宣言するの?


13 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 17:58:32 ]
PascalってもしかしてCのreturnに相当する処理って無い?
途中で抜けるのって出来ないとか?

14 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 18:15:15 ]
>>13
Exit Break Continue Abort

15 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 19:37:10 ]
マウスの検出は↓で出来る
procedure CMMouseEnter(var Msg: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Msg: TMessage); message CM_MOUSELEAVE;


16 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 15:05:08 ]
>>13
抜けるだけなら可能だが、Resultにぶち込んでからExitしなけりゃならない

そんな話題が前スレにもありました

17 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 17:34:37 ]
C++で作られたDLLファイルをDelphiで使用したいのですが、
C++で次のように定義されている関数は、Delphiでどう定義すればいいですか?

int Test(const char *str1, int &a, int* a, char** msg, int* len);

char** が特にどうしていいのかわかりません。
どうかお願いします。

18 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 18:42:54 ]
char** は PPChar。 (PPChar = ^PChar)
呼び出し規約も合わせるように。

19 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 21:48:55 ]
EditでCtl3DプロパティをFalseにすると外枠が立体的ではなく平面的になりますが
Comboboxの場合はCtl3DをFalseにしても外観が変わりません。
ComboBoxを平面的な表示にすることはできますか?
Delphi4です。よろしくお願いします。

20 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 23:59:12 ]
フラットComboboxみたいのを昔どこかでみたことがあるなあ



21 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 00:44:32 ]
>>19
これは?
ttp://www2.big.or.jp/~osamu/Delphi/delphi-browse.cgi?index=078807

22 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 02:06:50 ]
こことか
ttp://www29.atwiki.jp/katochin/pages/22.html

23 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 08:06:31 ]
バグだらけのDelphi4よく使ってんな

24 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 11:35:06 ]
>>23
どのバージョンもバグだらけ
qc.borland.com/wc/qcmain.aspx?da=1
ここを見て
Msより潔い

25 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 12:17:23 ]
>>24
そりゃバグのないソフトなんて皆無だし。
Del3とDel5〜Del7はよいと思うよ。

26 名前:19 mailto:sage [2008/03/15(土) 15:51:05 ]
>>21
>>22
情報ありがとうございます。
でも面倒なので逆にすべて3Dで統一しようとおもいます・・・

27 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 17:06:32 ]
Delphi7ですが、最近割りと大きなプログラムを扱うようになりまして、
VCLもIndyやらサードパーティのものやらがたっぷり入っていまして、
コンパイルに10分くらい掛かってしまい、やる気を無くしています。

これはPCのスペックを上げねばと思うのですが、現在はCeleronの600MHzで
512MBのメモリですが、どの程度にすればいいものでしょうか。
(自作PCで、HDDなどはそのまま使いたいと思っています)

28 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 17:20:24 ]
俺Del5Entだけどセレ500MHz、RAM128MBでコンパイル一瞬だよ

29 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 18:44:04 ]
Delphiのバグが突出して多いのは、有名な話だよ。


30 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 18:51:45 ]
>>27
OSによる。 
コンパイルって再構築?
タスクマネージャで開きメモリやCPUの使用率調べる。



31 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 20:01:06 ]
OSはWindows XP Home です。タスクマネージャではDelphi32.exeが100%です。
メモリの使用率は見方が分かりませんでした。(情けない、スミマセン)

ちょっと調べてみてCPの良い感じのAMDのにしようかと思っています。

32 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 21:42:18 ]
再構築にしても、10分はかかりすぎ。 
XPHomeで512MBなら十分。 チューンアップしていなくても、200MBぐらい空いているはず。
メモリが足りないときは、HDにガーッってアクセスするから分かる。

考えられる原因は、
他に重たいアプリが動いている。 ウィルスかも。
HDが壊れている。 エラーチェックしよう。

コンパイル状況ウィンドウはどう? プロジェクトに関係なく遅いの?
コンポーネントを沢山インストールしてから遅いの?

33 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 21:47:08 ]
大きいプログラムをフルビルドするならそのくらいはかかるんじゃね?
その場合、それ以上早くするのは CPU 上げるしか方法はないと思う。

34 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 01:18:38 ]
>>31-32
ウイルスという線もあるけれど、ウイルス対策ソフトがネックになることも多々あるよ。

35 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 08:44:34 ]
>>27
毎回フルビルドしてんの?
それかincludeしてるファイルを頻繁に更新するとか?


36 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 10:22:53 ]
皆様色々なレスありがとうございます。
ウィルス関連ですが、ウィルスバスター2007です。検知はされませんでした。
それから10分というのは再構築の場合です。
また、他の人から引き継いだ(コピーした)ものです。
足りないVCLはインストールしたのですが、その後も他の軽めの
プロジェクトなら数秒で終わります。
近いうちにCPU換装しようかと思ってます。マザーとメモリもか…

37 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 13:04:52 ]
>>36
換装よりももう一台追加した方がいいと思うぞ

38 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 13:50:22 ]
>27
いまどきのPCにしたほうがいいとは思うけど、どうしてもというならまずメモリを上限(3GB)まで増設。
次にCPUを交換。あとはIDEがATA66だったりしたら増設ボードでATA100/133に。

39 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 15:30:51 ]
>>38
既に最大である512Mなのでわ?
自作PCどころかPCについて詳しく無いみたいなんだけど、メモリやCPUは
世代が変わると互換性が無くなるし、古い世代のパーツを中古で手に入れよう
と思った場合、現行品に比べて遥かに高くつきますよ

40 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 17:18:26 ]
dfmファイルがテキスト形式で、画像データや音データがどっさり入っている場合、
dfmファイルがべらぼうなサイズになるから、コンパイルが遅くなるかも。



41 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 18:21:26 ]
ATA66→ATA100/133って…なかなかひどいアドバイスだ。

42 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 18:41:39 ]
ちょっとDelphiの技術的な話からずれてきたので恐縮してます。
が、もうだめです。イラっときてキーボード叩き壊しそう。ちょっと修正して
確認ってときに数分… 昔の汎用機のTSSでのコンパイルじゃあるまいし。
明日CPU、メモリ、マザー買ってくる。それから最近はS-ATAが主流らしくて
PCIもExpress何とからしくて(もう昔の人みたいす)、色々変換のパーツも
買わないといけないみたい… HDDはVCLインストールなどなどが死ぬほど
面倒そうなので使いまわしたいです。ちなみに現在のマザーはASUS CUSL2です。
レスくれた方々、本当にありがとうございました。

43 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 18:45:57 ]
ちょっと待て。CPUやマザーボード換えてOSの再インストールなしでいけると思ってる?
悪いこといわんから普通に1台組み立てて環境も全部入れなおせ。

44 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 19:05:35 ]
それが再インストールなしでも結構いけたりする。
再インストールは覚悟して不具合出るまで様子見もあり、と無責任なことを言ってみる。

45 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 19:08:44 ]
あれ?
俺開くスレ間違えた?

46 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 19:13:51 ]
Cele600というのが泣けるねw

特殊ハードを使ってないのなら、一式組み立てて
OSまでインストールしてから、VMWareComverterで
古いHDDの内容を丸ごと吸い上げて、それを
VMWarePlayerで動かしても多分5倍は速いw

47 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 19:15:33 ]
>>45
dephi超初心者の自作スレになりました。
シングルコア→デュアルコアにしたら射精した。

48 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 21:24:11 ]
それよりも毎回フルビルドすんのはなんでかという点に誰か突っ込めよ

49 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 21:50:56 ]
>>47
良く分からないけど把握した

>>48
>>35で突っ込んでるぜ

50 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 22:11:05 ]
ややこしいデータを表示するためにVirtualListViewというものを初めて使ってみたのですが
CheckboxesをTrueにしてもボックスが描画されません
自分でCanvasに描くものなのでしょうか?



51 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 22:23:31 ]
XPスタイルでステータスバーが凹んでいる(?)ように見えないのですが
何か設定がいるのでしょうか?
クラシックスタイルでは普通です・・・

52 名前: ◆XcB18Bks.Y mailto:sage [2008/03/17(月) 00:15:46 ]
>>31
コンパイル前からCPU使用率が100%ということですか?
Delphi 7は使ったことはありませんがもしかしたら統合環境のバグかもしれません。
(Delphi 5のときはCPU使用率が100%になる不具合が複数あって結構悩まされました)
ともあれ遅い理由が本当にマシンパワーなのかきちんと検証した方が良いと思います。

(そしてマシンに手を付けるなら今ならすべて一新した方が高速で安いです)

>>46
Celeron 600MHzというCPU自体はそんなに遅くないのではないかと思います。
当時のHDDの方がボトルネックだったかもしれません。
(Celeron Mが630MHzで稼働するEee PCだとTurbo Delphi Explorerの起動するのは結構早いです)

>>50
仮想リストビューだとチェックボックスがうまく使えないみたいです。
リストビューの代わりにヘッダーコンポとチェックリストボックスの組み合わせなどを
検討してみてください。


53 名前:50 mailto:sage [2008/03/17(月) 00:44:32 ]
>>52
ありがとうございます
やはりダメなんですね
作り直しは厳しいですが考えてみます

54 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 16:59:38 ]
継承元のフォームForm1上のコンポーネントにTCollection型のプロパティがあり、
それを継承したフォームForm2上でそのTCollection型プロパティをいじると、
実行時にそのForm2のTCollection型プロパティはどうリソースから読み込まれるのでしょうか??
Form1のプロパティ値を読み込み、そのコレクション要素を「すべてクリア」して、
Form2のプロパティ値が読み込まれる??
TReaderのソース見たけど理解が追いつきません。



55 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 18:16:38 ]
クラスと実体とがごっちゃのような

56 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 18:45:57 ]
ブレークポイントを設定して確認したほうがいい。

57 名前:|Д゚彡 ◆A6VzDeLphI mailto:sage [2008/03/17(月) 19:41:19 ]
・・・・・・・・・・・・・・・・

hpcgi1.nifty.com/MADIA/DelphiBBS/wwwlng.cgi?print+200803/08030018.txt


58 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 22:39:45 ]
全部止めるとはまた豪快なw

59 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 23:27:45 ]
コンパイル中にウィルスバスターのCPU使用率が上がってるのか?
タスクマネージャ見てれば解るぞ。

60 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 01:51:32 ]
>>54
継承の下位クラスで public プロパティーをいじると、それが実行時直後に
反映されるのは、どんなコンポでもいっしょ。TForm2 が TForm1 を継承してる
からといって、TForm1 のインスタンスがいったん読みこまれるわけじゃないから、
質問自体が無意味。



61 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 05:55:46 ]
>>60
うーん。
>>TForm1 のインスタンスがいったん読みこまれるわけじゃないから
質問ではTForm1のインスタンスが生成されるとは一言も言ってません。
継承フォーム作成すると、派生フォームでは、変更したpublishedなプロパティだけが
差分情報としてフォームファイル(*.dfm)に記録されるんですよね?
そして実行時には、RTTIから継承フォームのプロパティを読み込んだ後に、派生フォームの差分情報だけがプロパティ
に再設定されるんですよね?で、TCollection型の場合は、どうなるのかな?という質問です。


62 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 05:58:12 ]
54=60です。
>>54ではしっかり実体とクラス使い分けませんでした。すみません(>>55)。

63 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 06:03:57 ]
and すみません(>>60)。

64 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 06:14:05 ]
Edit1、Edit2、Edit3…のように連続した名前の物を
ループ処理でTObjectListに突っ込む事はできませんかね?

65 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 07:47:20 ]
できます

66 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 08:11:54 ]
コンポの名前とは限らないぜ

67 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 08:49:40 ]
DelWiki - Tips/添字を使ってコントロールを処理する
delwiki.info/?Tips%2F%C5%BA%BB%FA%A4%F2%BB%C8%A4%C3%A4%C6%A5%B3%A5%F3%A5%C8%A5%ED%A1%BC%A5%EB%A4%F2%BD%E8%CD%FD%A4%B9%A4%EB

68 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 15:57:29 ]
>>67
おお!ドンピシャリだ。どうもありがとうございます

69 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 06:48:25 ]
ボタン押したりメニューの設定を選んだりすると
それ用の別ウィンドウが出るようにするにはどうしたらいいんでしょうか?

70 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 08:20:09 ]
ファイルメニューの新規作成で、それ用のフォームを作る。
アプリ起動時に自動作成してる場合、
モーダルダイアログなら、Form2.ShowModal;
ウィンドウなら、Form2.Show;
自動生成していないなら、事前にCreateする必要がある。
閉じたときどうするかも決める。



71 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 12:29:04 ]
type
    TTask = class(TAction)
        property OnBeforeExecute;
        property OnAfterExecute;
        ...その他いろいろ..
    end;
   
    TTaskList = class
        Items: TObjectList;
       
        procedure Add(Task: TAction; RemoveOldTask: Boolean = False; DelayMSec: Integer = 0; RepeatCount: Integer = 1);
        function Exist(Task: TTask): Boolean;
        procedure Remove(Task: TTask);
        procedure Execute;
    end;

procedure TForm1.Button1Click;
begin
    TaskList.Add(ActionLoadData);
    TaskList.Add(ActionProcessData);
    TaskList.Add(ActionPrintData);
end;

procedure TForm1.ApplicationIdle;
begin
    TaskList.Execute; // 登録タスクをひとつ実行
end;

みたいなタスク(アクション)スケジューラを導入したらスパゲッティなイベントの流れがとてもシンプルになった。
今まではイベントハンドラ中からイベントハンドラを呼び出して更にApplication.ProcessMessagesが他のもの呼び出して・・・と依存関係やタイミングに起因するバグの温床になってたのがかなり減りそうな予感。
こういうクラスって既によく練られたものがどこかにあったりする?
Executeイベントハンドラをサブスレッドで実行できるTaskとか作ったらかなり便利になりそうだな。

72 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 12:42:00 ]
>今までは...バグの温床になってた
この部分の改善方法が分からないようじゃ何使ってもバグだらけでしょう

73 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 14:14:43 ]
はははは、こりゃセンスなさすぎだ

74 名前:デフォルトの名無しさん [2008/03/20(木) 14:37:34 ]
よろしくお願いします。

Form1でメタファイルの元データを作って
Form2上のPaintBox上に表示するとともに
meta.wmfという名前で保存しています。
うまくできていれば、Form2上のボタンを押して
meta.wmfを読み込んで印刷させたいのですが、
procedure TForm2.Button2Click(Sender: TObject);
var
Print_MF:TMetafile;
begin
Print_MF:=TMetaFile.create;
Try
Print_MF.LoadFromFile('d:\gazou\meta2.wmf');
Printer.BeginDoc;
Printer.Canvas.StretchDraw(Rect(10,10,3000,3400),Print_MF);
Finally
Print_MF.free
end;
close;
end;
としても、すぐには印刷されず、Form1も閉じないと印刷できません。
Form1を閉じずにForm2だけ閉じたら印刷するようにするにはどうしたら
いいでしょうか??


75 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 14:52:05 ]
EndDoc

76 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 15:56:02 ]
>>71
久しぶりに将来有望そうな奴を見た。

77 名前:デフォルトの名無しさん [2008/03/20(木) 17:32:19 ]
> 75
ありがとうございました。
Printer.endDoc
で無事印刷されました..

78 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 18:07:00 ]
>>70
できました!どうもありがとうございます

79 名前:デフォルトの名無しさん [2008/03/22(土) 01:58:26 ]
よろしくお願いします。
TMemoやTRichEditで[CTRL]+[I]キーを押すと、タブ文字が挿入されますが、
この操作を無効にするにはどうすればいいでしょうか?


80 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 02:43:20 ]
キーダウンメッセージ捕まえてCtrl+Iだったときはデフォルトハンドラに渡さなければいいんじゃね?



81 名前:79 mailto:sage [2008/03/22(土) 03:51:12 ]
>>80
ありがとうございます。
今回は、キーダウンのメッセージをKeyPress内で捕まえればいいことがわかりました。

ただ、今度はKeyPress内で[CTRL]+[I]の同時押しを判断する方法が分かりません。
どうすればいいでしょうか?

procedure TMemoEX.keyPress(var key: Char);
begin
 if ((getAsyncKeyState(VK_CONTROL) and $8000) <> 0) then//CTRLキー判断
  if (key = 'i') or (key = 'I') then
   key := #0;//↑これだと上手くいかない
end;

82 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 10:31:34 ]
>>81
Delphi2の記憶で申し訳ないが、
KeyDownには、KeyPressにはないShiftStateがあって
ssCtrlみたいなのを見ればよかったような。

83 名前: ◆XcB18Bks.Y mailto:sage [2008/03/22(土) 11:58:06 ]
>>82
私もそれで行けるかなと思ったのですが念のためにテストしてみたら駄目でした。
もし単にタブ文字入力を禁止したいのでしたら
単にタブ文字かどうかを調べてもしそうなら文字を消すようにすればいいと思います。

procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
 //// タブ文字が入力されたら取り消す ////
 if Key = #9 then // 9はタブを示す文字コード
 begin
  Key := #0; // #0を代入すると文字入力がキャンセルされる(らしい)
  Beep; // 取り消しとは関係ないけど「おっと、ここではタブキーは無効なんだぜ」とユーザーに伝える
 end;
end;

そうではなくてもし

 [Ctrl]+[I]によるタブ文字入力を禁止したいが[Tab]キーによる入力は許可したい

というのでしたらすいませんがちょっとわかりません。


84 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 13:55:01 ]
つダミーAction作成

85 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 16:38:48 ]
FormのOnShortcutで if (Ctrl+Iだったら) then Handled:= trueにするとか

86 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 20:35:56 ]
>>83
Delphi2で申し訳ないが、
たしかに素直にやろうとしてもだめだった。
で、スマートじゃないのと
winのバージョンでタイミングの問題が気になるが
FlagをたててKeyDownでssCtrlを見ておいて、
KeyPressで
if Flag and (Key = #9) then
としたら、いちおう↓これもできた。
> [Ctrl]+[I]によるタブ文字入力を禁止したいが[Tab]キーによる入力は許可したい

87 名前:デフォルトの名無しさん [2008/03/23(日) 15:42:06 ]
Delphi 7ですが、コンボボックスにキーボード入力がわかりません。
itemになかった場合はキーボード入力したいのですが、Styleを
csOwerDrawVaiableとかいろいろ変更してもキー入力できないか
EaccessVilationがでます。今は、itemに項目があってそれを選択する
にはOnChange イベントで取り出しています。よろしくお願いします。


88 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 16:22:19 ]
まずcsDropDownでダメだったことを詳細に書いて。

89 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 16:22:32 ]
AutoCompleteはFalse、StyleはデフォルトのcsDropDownに。OnChangeで処理ってのはユーザ入力を
許してる状況ではどうなんだろ?

90 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 16:29:05 ]
入力化なコンボボックスってかっこ悪い



91 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 16:51:28 ]
考え方が逆だ。入力するものが選択可能なエディットだと。

92 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 16:56:20 ]
>>87
Comboboxをただ貼り付けただけでその動作になってると思うんだけど
デフォルトの動作から具体的にどう変えたいって事?

93 名前:デフォルトの名無しさん [2008/03/23(日) 19:23:57 ]
皆様、ありがとうございました。
OnChangeで
Case ComboBox1.itemindex of
  1:
  2:
とかしていたのですが、キーボード入力をするとここのところでエラーになる
ようでした。しょうがないので、ComboBox1.textの値で分岐させることに
したら解決?しました。お騒がせしました。
でも、この方法しかないのでしょうか?後学のためにどなたかキーボード
入力も許すとき、どういう方法で選択されたのを知るのが常套手段なのか
教えてくださいませんか?


94 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 20:00:12 ]
>>93
そのコードだけではエラーになるところが見当たらない
大方-1を考慮してないだけとかそんなだと思うが

95 名前:デフォルトの名無しさん [2008/03/23(日) 20:39:44 ]
Vistaのデスクトップは、ctrl+マウスホイールでアイコンの大きさを
自由に変えられるけど、DelphiのListView で同じ様な表現をするには
どうしたらいいんでしょうか?

96 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 21:20:58 ]
>93
ItemIndexは0から始まる。該当アイテムがなければ-1だ。というか >91 だ。

97 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 21:33:43 ]
>>93
いまいちよくわかってないんだけど

idx := ComboBox1.Items.IndexOf(ComboBox1.Text);
ってやればTextがItemsの何番目かがわかる。-1ならそれ以外。

98 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 22:36:31 ]
>>87
onchange呼ばないでonselectでやれ。
それでキー入力はできるだろ


99 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 15:58:32 ]
delphiで簡単にRSSやAtomフィード作るコンポってありますか?

100 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 20:24:53 ]
MSXML



101 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 21:08:47 ]
ミリ秒を時間とか分とか秒とか込みで文字列化する関数ないですか?

102 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 21:12:13 ]
FormatDate






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<238KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef