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

このエントリーをはてなブックマークに追加
1 ◆XcB18Bks.Y
Delphi(デルファイ)について、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を
勇気を持って書き込むスレッドです。
Delphi使いが優しくコメントを返しますが
お礼はDelphiの布教と初心者の救済をお願いします。

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

<過去スレ>
DelWiki避難所(Delphi 関連の過去スレッド)
http://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 :2008/03/12(水) 21:10:09
<関連スレ>
【Delphi】 Indyコンポーネント 【C++Builder】
http://pc11.2ch.net/test/read.cgi/tech/1093654251/
Delphi初心者のための寺子屋
http://pc11.2ch.net/test/read.cgi/tech/1132756268/
delphiで作った有名ソフトって何があるの?
http://pc11.2ch.net/test/read.cgi/tech/1135654787/
Delphi持ってるならGLSceneを使え
http://pc11.2ch.net/test/read.cgi/tech/1163269079/
【Delphi互換!?】FreePascal【GPL】
http://pc11.2ch.net/test/read.cgi/tech/1137051510/

【Delphi】 ゲームつくるぞ(゚Д゚)ゴルァ 2【Delphi】
http://pc11.2ch.net/test/read.cgi/gamedev/1097836469/
Delphiでアクションゲームが作りたい!! Part2
http://pc11.2ch.net/test/read.cgi/gamedev/1027482533/
ネットワークゲーム作成のお勉強(Delphi専用スレ)
http://pc11.2ch.net/test/read.cgi/gamedev/1028278884/
delphiでMMO
http://pc11.2ch.net/test/read.cgi/gamedev/1072515100/
3デフォルトの名無しさん: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デフォルトの名無しさん:2008/03/12(水) 21:53:20
>>3
Delphi固有の問題ではないような。
5デフォルトの名無しさん: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デフォルトの名無しさん:2008/03/13(木) 10:05:16
変わるよ。
たいてい?のデータベースはSELECT文を実行して、最初の数行が決定された
段階でクライアント側に応答を返す。で、クライアント側がカーソルを
使ってフェッチしながら、その裏でデータベースサーバーは続きの行を一生懸命
求めている。つまり、君の言う「Select文の実行」時間とは、サーバーから
応答が返ってきた時間であって、サーバー側ではまだ処理は終わってないんだよ。
8デフォルトの名無しさん:2008/03/13(木) 10:19:54
後、文章から判断するとCursorLocationプロパティがclUseServerのサーバーカーソル使ってそうだね。
サーバーカーソルならデータベースのカーソルと同じと考えていいけど、
clUseClientのクライアントカーソルに設定すると、ADOがSELECT文を実行し、
すべての行をクライアントのメモリをフェッチするまで、応答を返さないから
君の測定もまた変わる。その変わり、君の言う「Query内を参照し書き出す」時間
はインデックあろうとなかろうと、返される行数が同じならほぼ一定時間になると思う。


9デフォルトの名無しさん:2008/03/13(木) 10:28:03
いや、クライアントカーソルの時「Query内を参照し書き出す」時間が一定になると
書いたが嘘かもしれん。むしろ、嘘っぽいかも。
106:2008/03/13(木) 13:31:32
>>7-9
CursorLocationプロパティはclUseClientになってました。
予想外のところが速くなって混乱していたので、レスみて納得しました。
ありがとうございます。
11デフォルトの名無しさん:2008/03/13(木) 14:29:34
>フォームからマウスが外れた時に、
>ある処理(例えばbeep)を行いたいのですが、
>どう記述すればいいでしょうか?
SetCaptureControl/ReleaseCaptureを使ってみては?
OnMouseMoveでSetCpatureControlを使用するならフラグで多重起動
させないように管理する必要性があるけど。
12デフォルトの名無しさん:2008/03/13(木) 15:18:19
Delphi の
 TFoo<T,S> = class
  ...
 end;
 TFooInt<R> = TFoo<R,Integer>;
の TFooInt<R> って、C++ の template だとどういう風に宣言するの?
13デフォルトの名無しさん:2008/03/13(木) 17:58:32
PascalってもしかしてCのreturnに相当する処理って無い?
途中で抜けるのって出来ないとか?
14デフォルトの名無しさん:2008/03/13(木) 18:15:15
>>13
Exit Break Continue Abort
15デフォルトの名無しさん:2008/03/13(木) 19:37:10
マウスの検出は↓で出来る
procedure CMMouseEnter(var Msg: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Msg: TMessage); message CM_MOUSELEAVE;
16デフォルトの名無しさん:2008/03/14(金) 15:05:08
>>13
抜けるだけなら可能だが、Resultにぶち込んでからExitしなけりゃならない

そんな話題が前スレにもありました
17デフォルトの名無しさん: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デフォルトの名無しさん:2008/03/14(金) 18:42:54
char** は PPChar。 (PPChar = ^PChar)
呼び出し規約も合わせるように。
19デフォルトの名無しさん:2008/03/14(金) 21:48:55
EditでCtl3DプロパティをFalseにすると外枠が立体的ではなく平面的になりますが
Comboboxの場合はCtl3DをFalseにしても外観が変わりません。
ComboBoxを平面的な表示にすることはできますか?
Delphi4です。よろしくお願いします。
20デフォルトの名無しさん:2008/03/14(金) 23:59:12
フラットComboboxみたいのを昔どこかでみたことがあるなあ
21デフォルトの名無しさん:2008/03/15(土) 00:44:32
22デフォルトの名無しさん:2008/03/15(土) 02:06:50
23デフォルトの名無しさん:2008/03/15(土) 08:06:31
バグだらけのDelphi4よく使ってんな
24デフォルトの名無しさん:2008/03/15(土) 11:35:06
>>23
どのバージョンもバグだらけ
http://qc.borland.com/wc/qcmain.aspx?da=1
ここを見て
Msより潔い
25デフォルトの名無しさん:2008/03/15(土) 12:17:23
>>24
そりゃバグのないソフトなんて皆無だし。
Del3とDel5〜Del7はよいと思うよ。
2619:2008/03/15(土) 15:51:05
>>21
>>22
情報ありがとうございます。
でも面倒なので逆にすべて3Dで統一しようとおもいます・・・
27デフォルトの名無しさん:2008/03/15(土) 17:06:32
Delphi7ですが、最近割りと大きなプログラムを扱うようになりまして、
VCLもIndyやらサードパーティのものやらがたっぷり入っていまして、
コンパイルに10分くらい掛かってしまい、やる気を無くしています。

これはPCのスペックを上げねばと思うのですが、現在はCeleronの600MHzで
512MBのメモリですが、どの程度にすればいいものでしょうか。
(自作PCで、HDDなどはそのまま使いたいと思っています)
28デフォルトの名無しさん:2008/03/15(土) 17:20:24
俺Del5Entだけどセレ500MHz、RAM128MBでコンパイル一瞬だよ
29デフォルトの名無しさん:2008/03/15(土) 18:44:04
Delphiのバグが突出して多いのは、有名な話だよ。
30デフォルトの名無しさん:2008/03/15(土) 18:51:45
>>27
OSによる。 
コンパイルって再構築?
タスクマネージャで開きメモリやCPUの使用率調べる。
31デフォルトの名無しさん:2008/03/15(土) 20:01:06
OSはWindows XP Home です。タスクマネージャではDelphi32.exeが100%です。
メモリの使用率は見方が分かりませんでした。(情けない、スミマセン)

ちょっと調べてみてCPの良い感じのAMDのにしようかと思っています。
32デフォルトの名無しさん:2008/03/15(土) 21:42:18
再構築にしても、10分はかかりすぎ。 
XPHomeで512MBなら十分。 チューンアップしていなくても、200MBぐらい空いているはず。
メモリが足りないときは、HDにガーッってアクセスするから分かる。

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

コンパイル状況ウィンドウはどう? プロジェクトに関係なく遅いの?
コンポーネントを沢山インストールしてから遅いの?
33デフォルトの名無しさん:2008/03/15(土) 21:47:08
大きいプログラムをフルビルドするならそのくらいはかかるんじゃね?
その場合、それ以上早くするのは CPU 上げるしか方法はないと思う。
34デフォルトの名無しさん:2008/03/16(日) 01:18:38
>>31-32
ウイルスという線もあるけれど、ウイルス対策ソフトがネックになることも多々あるよ。
35デフォルトの名無しさん:2008/03/16(日) 08:44:34
>>27
毎回フルビルドしてんの?
それかincludeしてるファイルを頻繁に更新するとか?
36デフォルトの名無しさん:2008/03/16(日) 10:22:53
皆様色々なレスありがとうございます。
ウィルス関連ですが、ウィルスバスター2007です。検知はされませんでした。
それから10分というのは再構築の場合です。
また、他の人から引き継いだ(コピーした)ものです。
足りないVCLはインストールしたのですが、その後も他の軽めの
プロジェクトなら数秒で終わります。
近いうちにCPU換装しようかと思ってます。マザーとメモリもか…
37デフォルトの名無しさん:2008/03/16(日) 13:04:52
>>36
換装よりももう一台追加した方がいいと思うぞ
38デフォルトの名無しさん:2008/03/16(日) 13:50:22
>27
いまどきのPCにしたほうがいいとは思うけど、どうしてもというならまずメモリを上限(3GB)まで増設。
次にCPUを交換。あとはIDEがATA66だったりしたら増設ボードでATA100/133に。
39デフォルトの名無しさん:2008/03/16(日) 15:30:51
>>38
既に最大である512Mなのでわ?
自作PCどころかPCについて詳しく無いみたいなんだけど、メモリやCPUは
世代が変わると互換性が無くなるし、古い世代のパーツを中古で手に入れよう
と思った場合、現行品に比べて遥かに高くつきますよ
40デフォルトの名無しさん:2008/03/16(日) 17:18:26
dfmファイルがテキスト形式で、画像データや音データがどっさり入っている場合、
dfmファイルがべらぼうなサイズになるから、コンパイルが遅くなるかも。
41デフォルトの名無しさん:2008/03/16(日) 18:21:26
ATA66→ATA100/133って…なかなかひどいアドバイスだ。
42デフォルトの名無しさん:2008/03/16(日) 18:41:39
ちょっとDelphiの技術的な話からずれてきたので恐縮してます。
が、もうだめです。イラっときてキーボード叩き壊しそう。ちょっと修正して
確認ってときに数分… 昔の汎用機のTSSでのコンパイルじゃあるまいし。
明日CPU、メモリ、マザー買ってくる。それから最近はS-ATAが主流らしくて
PCIもExpress何とからしくて(もう昔の人みたいす)、色々変換のパーツも
買わないといけないみたい… HDDはVCLインストールなどなどが死ぬほど
面倒そうなので使いまわしたいです。ちなみに現在のマザーはASUS CUSL2です。
レスくれた方々、本当にありがとうございました。
43デフォルトの名無しさん:2008/03/16(日) 18:45:57
ちょっと待て。CPUやマザーボード換えてOSの再インストールなしでいけると思ってる?
悪いこといわんから普通に1台組み立てて環境も全部入れなおせ。
44デフォルトの名無しさん:2008/03/16(日) 19:05:35
それが再インストールなしでも結構いけたりする。
再インストールは覚悟して不具合出るまで様子見もあり、と無責任なことを言ってみる。
45デフォルトの名無しさん:2008/03/16(日) 19:08:44
あれ?
俺開くスレ間違えた?
46デフォルトの名無しさん:2008/03/16(日) 19:13:51
Cele600というのが泣けるねw

特殊ハードを使ってないのなら、一式組み立てて
OSまでインストールしてから、VMWareComverterで
古いHDDの内容を丸ごと吸い上げて、それを
VMWarePlayerで動かしても多分5倍は速いw
47デフォルトの名無しさん:2008/03/16(日) 19:15:33
>>45
dephi超初心者の自作スレになりました。
シングルコア→デュアルコアにしたら射精した。
48デフォルトの名無しさん:2008/03/16(日) 21:24:11
それよりも毎回フルビルドすんのはなんでかという点に誰か突っ込めよ
49デフォルトの名無しさん:2008/03/16(日) 21:50:56
>>47
良く分からないけど把握した

>>48
>>35で突っ込んでるぜ
50デフォルトの名無しさん:2008/03/16(日) 22:11:05
ややこしいデータを表示するためにVirtualListViewというものを初めて使ってみたのですが
CheckboxesをTrueにしてもボックスが描画されません
自分でCanvasに描くものなのでしょうか?
51デフォルトの名無しさん:2008/03/16(日) 22:23:31
XPスタイルでステータスバーが凹んでいる(?)ように見えないのですが
何か設定がいるのでしょうか?
クラシックスタイルでは普通です・・・
52 ◆XcB18Bks.Y :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
仮想リストビューだとチェックボックスがうまく使えないみたいです。
リストビューの代わりにヘッダーコンポとチェックリストボックスの組み合わせなどを
検討してみてください。
5350:2008/03/17(月) 00:44:32
>>52
ありがとうございます
やはりダメなんですね
作り直しは厳しいですが考えてみます
54デフォルトの名無しさん:2008/03/17(月) 16:59:38
継承元のフォームForm1上のコンポーネントにTCollection型のプロパティがあり、
それを継承したフォームForm2上でそのTCollection型プロパティをいじると、
実行時にそのForm2のTCollection型プロパティはどうリソースから読み込まれるのでしょうか??
Form1のプロパティ値を読み込み、そのコレクション要素を「すべてクリア」して、
Form2のプロパティ値が読み込まれる??
TReaderのソース見たけど理解が追いつきません。

55デフォルトの名無しさん:2008/03/17(月) 18:16:38
クラスと実体とがごっちゃのような
56デフォルトの名無しさん:2008/03/17(月) 18:45:57
ブレークポイントを設定して確認したほうがいい。
57|Д゚彡 ◆A6VzDeLphI :2008/03/17(月) 19:41:19
・・・・・・・・・・・・・・・・

http://hpcgi1.nifty.com/MADIA/DelphiBBS/wwwlng.cgi?print+200803/08030018.txt
58デフォルトの名無しさん:2008/03/17(月) 22:39:45
全部止めるとはまた豪快なw
59デフォルトの名無しさん:2008/03/17(月) 23:27:45
コンパイル中にウィルスバスターのCPU使用率が上がってるのか?
タスクマネージャ見てれば解るぞ。
60デフォルトの名無しさん:2008/03/18(火) 01:51:32
>>54
継承の下位クラスで public プロパティーをいじると、それが実行時直後に
反映されるのは、どんなコンポでもいっしょ。TForm2 が TForm1 を継承してる
からといって、TForm1 のインスタンスがいったん読みこまれるわけじゃないから、
質問自体が無意味。
61デフォルトの名無しさん:2008/03/18(火) 05:55:46
>>60
うーん。
>>TForm1 のインスタンスがいったん読みこまれるわけじゃないから
質問ではTForm1のインスタンスが生成されるとは一言も言ってません。
継承フォーム作成すると、派生フォームでは、変更したpublishedなプロパティだけが
差分情報としてフォームファイル(*.dfm)に記録されるんですよね?
そして実行時には、RTTIから継承フォームのプロパティを読み込んだ後に、派生フォームの差分情報だけがプロパティ
に再設定されるんですよね?で、TCollection型の場合は、どうなるのかな?という質問です。
62デフォルトの名無しさん:2008/03/18(火) 05:58:12
54=60です。
>>54ではしっかり実体とクラス使い分けませんでした。すみません(>>55)。
63デフォルトの名無しさん:2008/03/18(火) 06:03:57
and すみません(>>60)。
64デフォルトの名無しさん:2008/03/19(水) 06:14:05
Edit1、Edit2、Edit3…のように連続した名前の物を
ループ処理でTObjectListに突っ込む事はできませんかね?
65デフォルトの名無しさん:2008/03/19(水) 07:47:20
できます
66デフォルトの名無しさん:2008/03/19(水) 08:11:54
コンポの名前とは限らないぜ
67デフォルトの名無しさん:2008/03/19(水) 08:49:40
68デフォルトの名無しさん:2008/03/19(水) 15:57:29
>>67
おお!ドンピシャリだ。どうもありがとうございます
69デフォルトの名無しさん:2008/03/20(木) 06:48:25
ボタン押したりメニューの設定を選んだりすると
それ用の別ウィンドウが出るようにするにはどうしたらいいんでしょうか?
70デフォルトの名無しさん:2008/03/20(木) 08:20:09
ファイルメニューの新規作成で、それ用のフォームを作る。
アプリ起動時に自動作成してる場合、
モーダルダイアログなら、Form2.ShowModal;
ウィンドウなら、Form2.Show;
自動生成していないなら、事前にCreateする必要がある。
閉じたときどうするかも決める。
71デフォルトの名無しさん: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デフォルトの名無しさん:2008/03/20(木) 12:42:00
>今までは...バグの温床になってた
この部分の改善方法が分からないようじゃ何使ってもバグだらけでしょう
73デフォルトの名無しさん: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デフォルトの名無しさん:2008/03/20(木) 14:52:05
EndDoc
76デフォルトの名無しさん:2008/03/20(木) 15:56:02
>>71
久しぶりに将来有望そうな奴を見た。
77デフォルトの名無しさん:2008/03/20(木) 17:32:19
> 75
ありがとうございました。
Printer.endDoc
で無事印刷されました..
78デフォルトの名無しさん:2008/03/20(木) 18:07:00
>>70
できました!どうもありがとうございます
79デフォルトの名無しさん:2008/03/22(土) 01:58:26
よろしくお願いします。
TMemoやTRichEditで[CTRL]+[I]キーを押すと、タブ文字が挿入されますが、
この操作を無効にするにはどうすればいいでしょうか?
80デフォルトの名無しさん:2008/03/22(土) 02:43:20
キーダウンメッセージ捕まえてCtrl+Iだったときはデフォルトハンドラに渡さなければいいんじゃね?
8179: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デフォルトの名無しさん:2008/03/22(土) 10:31:34
>>81
Delphi2の記憶で申し訳ないが、
KeyDownには、KeyPressにはないShiftStateがあって
ssCtrlみたいなのを見ればよかったような。
83 ◆XcB18Bks.Y :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デフォルトの名無しさん:2008/03/22(土) 13:55:01
つダミーAction作成
85デフォルトの名無しさん:2008/03/22(土) 16:38:48
FormのOnShortcutで if (Ctrl+Iだったら) then Handled:= trueにするとか
86デフォルトの名無しさん: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デフォルトの名無しさん:2008/03/23(日) 16:22:19
まずcsDropDownでダメだったことを詳細に書いて。
89デフォルトの名無しさん:2008/03/23(日) 16:22:32
AutoCompleteはFalse、StyleはデフォルトのcsDropDownに。OnChangeで処理ってのはユーザ入力を
許してる状況ではどうなんだろ?
90デフォルトの名無しさん:2008/03/23(日) 16:29:05
入力化なコンボボックスってかっこ悪い
91デフォルトの名無しさん:2008/03/23(日) 16:51:28
考え方が逆だ。入力するものが選択可能なエディットだと。
92デフォルトの名無しさん: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デフォルトの名無しさん:2008/03/23(日) 20:00:12
>>93
そのコードだけではエラーになるところが見当たらない
大方-1を考慮してないだけとかそんなだと思うが
95デフォルトの名無しさん:2008/03/23(日) 20:39:44
Vistaのデスクトップは、ctrl+マウスホイールでアイコンの大きさを
自由に変えられるけど、DelphiのListView で同じ様な表現をするには
どうしたらいいんでしょうか?
96デフォルトの名無しさん:2008/03/23(日) 21:20:58
>93
ItemIndexは0から始まる。該当アイテムがなければ-1だ。というか >91 だ。
97デフォルトの名無しさん:2008/03/23(日) 21:33:43
>>93
いまいちよくわかってないんだけど

idx := ComboBox1.Items.IndexOf(ComboBox1.Text);
ってやればTextがItemsの何番目かがわかる。-1ならそれ以外。
98デフォルトの名無しさん:2008/03/23(日) 22:36:31
>>87
onchange呼ばないでonselectでやれ。
それでキー入力はできるだろ
99デフォルトの名無しさん:2008/03/25(火) 15:58:32
delphiで簡単にRSSやAtomフィード作るコンポってありますか?
100デフォルトの名無しさん:2008/03/25(火) 20:24:53
MSXML
101デフォルトの名無しさん:2008/03/25(火) 21:08:47
ミリ秒を時間とか分とか秒とか込みで文字列化する関数ないですか?
102デフォルトの名無しさん:2008/03/25(火) 21:12:13
FormatDate
103デフォルトの名無しさん:2008/03/25(火) 22:48:48
TPageControlの枠を消すにはどうしたらいいんでしょうか?
104デフォルトの名無しさん:2008/03/25(火) 22:52:00
PageControl1.Style := tsButtons;
105デフォルトの名無しさん:2008/03/25(火) 23:00:04
それだと無駄な余白が出来るから
PageControl1.Visible := Falseにして
表示用にTabControl1配置してHeight := 20くらいにして
その下にPanel配置してタブの切り替えのタイミングでで
TabSheet.Parent := Panel1;
TabSheet.Align := aliClient;

と面倒なことをやると枠も余白も消せる。
106デフォルトの名無しさん:2008/03/26(水) 00:57:42
StringGrid := [goRowSelect, goRangeSelect] として、
1〜3行目を選択後に2行目をクリックすると、選択行は2行目のみとなります
これを選択範囲内をクリックした場合、新たに選択せず
選択範囲を維持するというふうにするにはどうすればいいでしょうか?
107デフォルトの名無しさん:2008/03/26(水) 13:24:09
GetIndex('漢a字', 1) => 1
GetIndex('漢a字', 3) => 4
というような関数ありますか?
108デフォルトの名無しさん:2008/03/26(水) 13:33:28
>>107
読解力のない俺はアフォなのか・・・
109デフォルトの名無しさん:2008/03/26(水) 13:44:21
俺もだ。すまん、アフォでごめん。
110デフォルトの名無しさん:2008/03/26(水) 16:04:27
アフォな俺にはこれぐらいしか…
function GetIndex(s: String; i: Integer): Integer;
begin
Result := Length(AnsiLeftStr(s, i - 1)) + 1;
end;
111デフォルトの名無しさん:2008/03/26(水) 16:52:30
2バイトで考えた文字数目が1バイトで考えた時に何バイト字目になるかを返す関数ということでFA?
112デフォルトの名無しさん:2008/03/26(水) 16:53:19
function GetIndex(Str:String; Index:Integer):Integer;
begin
if Str='漢a字' then
begin
 if Index=1 then
  Result:=1
 else
  Result:=4;
end else
 Result:=0;
end;

俺って天才かも!
113デフォルトの名無しさん:2008/03/26(水) 17:21:06
こうか?

function GetIndex( ws: WideString; index: Integer): Integer;
begin
Result:= Length(String(WideString(copy(ws, 1, index-1))))+1;
end;
114デフォルトの名無しさん:2008/03/26(水) 17:35:05
>>107
俺は読めたよ

function GetIndex(test:string;num:integer):integer;
begin
if test = '漢a字' then
begin
if num = 1 then result := 1;
if num = 3 then result := 4;
end;
end;

後は自分で工夫してくれ
115デフォルトの名無しさん:2008/03/26(水) 17:47:45
> 97様、98様
お返事ありがとうございました。試してみたいのですが、来週まで
時間がとれそうもないので、まずはお礼だけさせてください。
また、よろしくお願いします。
116デフォルトの名無しさん:2008/03/26(水) 19:54:12
StringList遅すぎる…
Capacity多めに設定したらそこそこ改善されたけどまだまだ遅い。
Clear, Add, Stringsの列挙くらいしかやらないんだけど代替ライブラリはないものか。
MemoryStreamでも使うか。
117デフォルトの名無しさん:2008/03/26(水) 21:20:57
遅いコード晒せ
118デフォルトの名無しさん:2008/03/26(水) 21:26:48
MemoryStreamを引き合いに出している時点で明らかに使い方が間違っている
119デフォルトの名無しさん:2008/03/26(水) 21:47:26
FastMM使ってなかったら、>>116はメモリマネージャ交換した方がよさそうだな。
120デフォルトの名無しさん:2008/03/26(水) 21:49:55
FastMM って3年前からだよ。それまでStringListって遅かったのか?
121デフォルトの名無しさん:2008/03/26(水) 21:49:57
ほんとにClear,Add,Stringsだけしか使ってない?それで遅いって、100万件ぐらい
データ突っ込んでのかな。
122デフォルトの名無しさん:2008/03/27(木) 03:42:15
TMemoでしたって落ち?
123デフォルトの名無しさん:2008/03/27(木) 08:18:10
自分の無能さをライブラリのせいにするな
124デフォルトの名無しさん:2008/03/27(木) 09:03:40
配列の宣言にpackedがついている場合を見かけますが、これ何か意味あるんですか?
125デフォルトの名無しさん:2008/03/27(木) 09:07:08
メジャーになれなかった理由の一つがまさにこういった事。
比較的多用しそうな事がいまいちで滅多に使わなそうな事がすげー便利。
126デフォルトの名無しさん:2008/03/27(木) 09:29:16
>>124
たとえば3バイトのメンバーを持つ構造体の配列とか?
127124:2008/03/27(木) 09:36:45
>>126

type
 THoge = packed record
  A: array[0..2] of Byte;
 end; // 3バイトの要素を持つ構造体

 THogeArray = array[0..9] of THoge;
 TPackedHogeArray = packed array[0..9] of THoge;
begin
 WriteLn(SizeOf(THoge)); // 3
 WriteLn(SizeOf(THogeArray)); // 30
 WriteLn(SizeOf(TPackedHogeArray)); // 30
end;

違いが分からないんです。
128デフォルトの名無しさん:2008/03/27(木) 09:46:15
配列についているんじゃなくて、構造体についているのよ。
packedをつけないと、アライメントされるかどうかはコンパイルオプションによる。
常にpackedつけておけばOK。

>>127
packedを外してコンパイルしてみ。
129124:2008/03/27(木) 09:50:48
>>128
> packedを外してコンパイルしてみ。

TPackedHogeArrayのpackedをですか?
130124:2008/03/27(木) 09:54:58
THogeとTPackedHogeArrayのpackedを外してみましたが、
出力は変わりませんでした。
ちなみにコンパイラオプションは{$A8}です。
131デフォルトの名無しさん:2008/03/27(木) 09:55:01
>>129
何が起こるか想像がつかないなら、やってみる価値はある。
132131:2008/03/27(木) 10:57:08
ごめん、勘違いしてた。
混ざらないと駄目みたい。 そうなると、packed配列は意味ありませんね。

procedure TForm1.Button1Click(Sender: TObject);
type
 THoge1 = record
  A: Byte;
  B: Byte;
  C: Byte;
 end;
 THoge2 = record
  A: Byte;
  B: Byte;
  C: Byte;
  D: Word;
 end;
begin
 Caption := Format('%d, %d', [SizeOf(THoge1), SizeOf(THoge2)]);
end;
133124:2008/03/27(木) 11:16:28
ありがとうございます。
構造体のメンバのアラインメントは他の言語にもあるのでわかるのですが、配列のpackedは謎です。
VCLのソースの中でも配列の宣言にpackedがついていたりいなかったりで、
何か使い分けがされているような気もするのですが、挙動の違いが分からないので釈然としません。
とりあえずつけておけば問題はなさそうですが・・・
134デフォルトの名無しさん:2008/03/27(木) 11:52:13
>>133
Delphiでしか使わないなら気にしない。
135デフォルトの名無しさん:2008/03/27(木) 15:14:18
Vista対応ってしとく必要あんのかな
136デフォルトの名無しさん:2008/03/27(木) 16:52:40
TTabControlで質問です。

タブを選択した時に、その番号に関連付けられてるオブジェクトが
条件を満たさないときはそのタブを選択させないようにするにはどうすればいいんでしょうか?

OnChangingイベントでいけるかと思ったんですが
これから選択しようとしているタブ番号の取得方法がわかりません。
クリックの時はマウス座標を取得する事でどうにか出来ない事もないんですが、
キーボードの時に詰まってしまいます。
137デフォルトの名無しさん:2008/03/27(木) 20:51:54
Delphiクイックリファレンスによると配列のpackedは標準Pascalとの互換性のためで
Delphiでは何の意味もないそうです
138デフォルトの名無しさん:2008/03/27(木) 21:50:08
StrToIntをAPIで書くとしたらどうなるんですかね?
SysUtilsはあまり使いたくない性分です・・・
139デフォルトの名無しさん:2008/03/27(木) 21:52:42
どう考えても意味不明だろ、それ。
140デフォルトの名無しさん:2008/03/27(木) 21:57:55
>>138
APIは知らんけどSystem.Val

しかしこのスレ無内容な一行レスばっかりだな。彼らは一体何がしたいのか。
141デフォルトの名無しさん:2008/03/27(木) 22:07:38
>>140
こんな関数があるとは・・・
勉強になります
ありがとうございます
142デフォルトの名無しさん:2008/03/27(木) 22:12:26
関数ではなくて手続きでしたね、すみません
143デフォルトの名無しさん:2008/03/27(木) 23:06:08
いやだってSysUtilsは使いたくないって意味不明じゃん。ValもStrToIntも変わらないでしょ。
144|Д゚彡 ◆A6VzDeLphI :2008/03/28(金) 02:16:29
>>107
CharToByteIndex

なんだって。
145デフォルトの名無しさん:2008/03/28(金) 05:27:30
1文字目は1バイト目から始まり、
3文字目は4バイト目から始まるって意味か。

>>138
こんなんでどうだ?(未チェック) 16進数が必要なら自分でやって。

function StrToInt(const Str: string): Integer;
var
 I: Integer;
 P: PChar;
 Minus: Boolean;
begin
 Result := 0;
 Minus := False;
 P := PChar(Str);
 if P^ in ['+', '-'] then
 begin
  Minus := P^ = '-';
  Inc(P);
 end;
 while P^ <> #0 do
 begin
  if not (P^ in ['0'..'9']) then raise Exception.Create('変換エラー'); // EConvertみたいなのあったかも。
  Result := Result * 10 + Ord(P^) - Ord('0');
  Inc(P);
 end;
 if Minus then Result := Result * -1;
end;
146デフォルトの名無しさん:2008/03/28(金) 06:05:11
Result := Result * 10 + Ord(P^) - Ord('0');
ここおかしくない?
147デフォルトの名無しさん:2008/03/28(金) 06:05:56
やべ、スレあげちまった。
148デフォルトの名無しさん:2008/03/28(金) 07:09:17
123の場合、
Result := 0 * 10 + '1' - '0' → 1
Result := 1 * 10 + '2' - '0' → 12
Result := 12 * 10 + '3' - '0' → 123
であってると思うけど。
149デフォルトの名無しさん:2008/03/28(金) 07:43:32
ああ、あってるね。ごめんなさい。
150デフォルトの名無しさん:2008/03/28(金) 09:51:44
+,-,#0の一文字だけのとき、0になるわ。
151デフォルトの名無しさん:2008/03/28(金) 10:01:22
http://delwiki.info/?%A5%B3%A1%BC%A5%C9%C1%D2%B8%CB%2F%BF%F4%C3%CD%A4%E4CSV%A4%CE%BC%E8%A4%EA%BD%D0%A4%B7
この GetInteger10を呼び出してる GetIntegerみたいに好みの仕様を追加したらいいんじゃないの?
152デフォルトの名無しさん:2008/03/28(金) 15:17:15
TreeViewで特定の項目だけVisible:=Falseにできますか?
または代わりの方法があれば教えてください。
153デフォルトの名無しさん:2008/03/28(金) 17:15:01
Canvasにウィンドウ右上の_ □ ×ボタンをレンダリングする方法ないですか?
ビットマップで用意するとテーマの変更に追従できないので。

>>152
たぶん無理。Add/Deleteするしか。
154デフォルトの名無しさん:2008/03/29(土) 00:26:03
>>153
WinAPIのDrawFrameControl
155デフォルトの名無しさん:2008/03/29(土) 10:18:18
DrawFrameControlってテーマに対応してるの?
156デフォルトの名無しさん:2008/03/29(土) 10:37:32
Win32APIだし、内部的にそれらのAPI使ってWindowsはウィンドウ描画してるんじゃ?

てか、それぐらい自分で試せるだろ。
157デフォルトの名無しさん:2008/03/29(土) 10:39:03
いや、テーマAPI別にあるから対応してねぇかも。
158デフォルトの名無しさん:2008/03/29(土) 10:45:44
Win32のスレで聞きな。そっちの方が知ってる人多いと思う。
159デフォルトの名無しさん:2008/03/29(土) 13:26:10
TRegExprでtr演算子の置換をするにはどうすればいいですか?
たとえば「tr/abc/ABC/」見たいなのです
英語とか良く分からないしググッても出ないし・・・
よろしくお願いします
160159:2008/03/29(土) 14:48:57
今頃ですがTRegExprでなくてもDLLを使わないようなものでなければ大丈夫です
161デフォルトの名無しさん:2008/03/29(土) 15:53:24
162デフォルトの名無しさん:2008/03/29(土) 17:47:55
鬼車ベースのライブラリってないの?
163159:2008/03/29(土) 17:54:41
>>161
> TRegExprの使い方
これを読んでみて分かりませんでした・・・
何かサンプルをいただけないでしょうか
164デフォルトの名無しさん:2008/03/29(土) 18:08:56
165デフォルトの名無しさん:2008/03/30(日) 02:33:50
DirectoryListBox で、今選んでいるフォルダの深さが何階層目かを知る方法ってありますか?
166デフォルトの名無しさん:2008/03/30(日) 02:40:05
それ16ビットUIの名残り。使わない方がいいよ。
167デフォルトの名無しさん:2008/03/30(日) 03:00:55
>>166
そうですか、今後なるべく使わない様にします。
じゃあ、変数に入ってるパスが何階層目かを知る方法ってありますか?
168デフォルトの名無しさん:2008/03/30(日) 04:05:07
デリミタの数を数えるとか
169|Д゚彡 ◆A6VzDeLphI :2008/03/30(日) 04:23:47
170デフォルトの名無しさん:2008/03/30(日) 06:13:30
StringReplaceで\を\_にでも変換して、
長さの差を取れば\の数は分かるんじゃないのか?
171デフォルトの名無しさん:2008/03/30(日) 06:19:44
\の数だけだとUNCパスで誤動作するんじゃね?
172デフォルトの名無しさん:2008/03/30(日) 09:42:07
はぁ・・・Del7買ってから出来たものはボタンクリックして画像表示
それから2Dのスクロールと3Dモデルの回転のみ・・・

変数宣言めんどくせー
コンパイラ時に自動作成して後で修正させるようにしてくれりゃいいのに
173167:2008/03/30(日) 10:01:31
>>168-171
やはり文字系で処理するしかないですか
なんかディレクトリの命令であるかなと思ったんで
すいませんでした、なんとかやってみます
ありがとうございましたw
174デフォルトの名無しさん:2008/03/30(日) 10:03:40
ExtractFileDriveしてExcludeTrailingPathDelimiterしつつExtractFilePathできる回数を数える
175167:2008/03/30(日) 11:19:06
>>174
あっ、そういう方法でも出来るんですね
なんか出来そうな感じがしてきました
試しにやってみます、ありがとうございましたw
176|Д゚彡 ◆A6VzDeLphI :2008/03/30(日) 12:03:39
作ってます。
http://delfusa.main.jp/delfusafloor/opensource/delfusalibrary/20070828160200/FileNameUnit/FileNameUnit.pas.txt

function PathLevel(Path: String): Integer;
procedure testPathLevel;

ご参考ください。

こういうのって、つくづく、実装よりも
テストコードが大事って思う。
177デフォルトの名無しさん:2008/03/30(日) 12:06:29
>172
そういうのが苦手な人にはDelphiは向かないのかも。Delphi2007ならリファクタリングで変数宣言を
追加する機能もあるけど、ちょっと違うな。昔のVBなら変数宣言不要なモード(Option)もあった気が。
178デフォルトの名無しさん:2008/03/30(日) 12:55:00
>>177
というかコンパイラって手抜きで進歩無さ杉
変数宣言なんか同じソース上に表示させる意味もなく、プロパティのように別窓か別ファイルでソート可能な表形式で管理・表示でいい
179デフォルトの名無しさん:2008/03/30(日) 13:11:59
BASICでもやってろ
180デフォルトの名無しさん:2008/03/30(日) 13:54:06
そもそもプログラミングに向いてない。
181167:2008/03/30(日) 14:15:03
>>176
WordDecompose.pas 頂きました
色々参考にさせていただきます、ありがとうございましたw
182デフォルトの名無しさん:2008/03/30(日) 16:20:24
ありとあらゆる変数をグローバル変数で宣言しておいたらどうだろう?
183デフォルトの名無しさん:2008/03/30(日) 18:47:34
>>178
IDEの恩恵しか受けたことないとこういう風に育つのか
184デフォルトの名無しさん:2008/03/30(日) 19:10:06
いや、何となくわかる。変数宣言のUI。でもソース上に書くってのに
慣れてるしプログラム書いてるって感じするし、よくよく考えてみると
GUI にするのってローカルだとかナンだとか面倒そうじゃん
185デフォルトの名無しさん:2008/03/30(日) 20:35:28
妄想するだけでで宣言文を書けたらいいのにね。
それは冗談として、アドインで作れないの?
186デフォルトの名無しさん:2008/03/31(月) 00:25:08
GUIで表示や追加くらいなら作れると思うが、
そんなので喜ぶのは初心者だけだし、
そういうのを作れるレベルの人は逆に生産性下がって不要なので
結果として誰も作らないってことになってるんじゃないかと
187デフォルトの名無しさん:2008/03/31(月) 00:39:57
SpeedButtonみたいなのがいくつか5個くらい並んでて、一つは常にへっこんでて、一つを押すと他の全部が上がるってタイプのボタンはどうやってるんですか?
188デフォルトの名無しさん:2008/03/31(月) 00:48:22
SpeedButtonをグループ化するんだ
189デフォルトの名無しさん:2008/03/31(月) 00:54:37
できました。
どうもありがとう!
190デフォルトの名無しさん:2008/03/31(月) 10:50:14
データベースでBlobに入っているバイナリファイルを少しずつダウンロード
したいのですが、良い方法はないでしょうか?
現在TBlobStream.CreateでそのStreamから少しずつ読み込んでいるのですが、
Createメソッドを実行した時点ですべてのデータを読み込んでいるようです。
要は少しずつReadしてプログレスバーにその状況を表示したいのです。
上の方法だとCreateを呼んだところでプログラムが一次停止したようになってしまいます。
191デフォルトの名無しさん:2008/03/31(月) 12:19:44
それについて深く考えたことない事を始めに断っておくけど、
昔調べた記憶と今、ちょっとソース見た感じだと、少なくとも新しい独自のBlobStreamクラスと
それを返すようにADOならTCustomADODataSet,dbExpressならTCustomSQLDataSetの
CreateBlobStreamメソッドをオーバーライドして独自BlobStreamを返すようにしないと
厳しそうだな。
192デフォルトの名無しさん:2008/03/31(月) 12:22:49
まぁ、読み込むBlobの最大サイズは設定できるようだから、それを設定して、
一次停止したようになるのを避けることはできる。根本的な解決ではないが。
それが嫌なら上記の方法以外ぱっと思いつかない。
193デフォルトの名無しさん:2008/03/31(月) 17:29:09
d6perなんですがdialog.pasがC:\Program Files\Borland\Delphi6\Source\Vclに存在しません・・・
ちょっと修正したい箇所があるのですが誰かうpしていただけないでしょうか?
194デフォルトの名無しさん:2008/03/31(月) 19:37:21
そのためのプロ版だ。プロ買え。
195デフォルトの名無しさん:2008/03/31(月) 20:49:51
DBGrid1のOnDrawColumnCellで、DBGrid1の上にUpDownを描くやり方で、UpDownでフィールドの値を変えることにチャレンジしています。

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin

 // DBGridをFColorDBGrid1とFColorDBGrid2の縞々にする。
 if not (gdSelected in State) then
 begin
  if Table1.RecNo mod 2=0 then
  begin
   DBGrid1.Canvas.Brush.Color := FColorDBGrid1;
   DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
  end else
  begin
   DBGrid1.Canvas.Brush.Color := FColorDBGrid2;
   DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); 
  end;
 end;
196つづき@:2008/03/31(月) 20:50:48
 // UpDownの描画
 fView := False;
 if gdSelected in State then with DBGrid1 do
 if SelectedField is TIntegerField then
 with TIntegerField(SelectedField) do
 begin

 if Table1.Active then
  updownDBGridInt.Position := Table1.FieldByName('Int').AsInteger;
  fView := true;
 end;
 updownDBGridInt.Visible := fView;
 if updownDBGridInt.Visible then
 if not CompareMem(@oldRect, @Rect, Sizeof(Rect)) then
  with Rect do begin
  updownDBGridInt.Top := Top;
  updownDBGridInt.Left := Left;
  updownDBGridInt.Height := Bottom - Top;
 end;
end;
197つづきA:2008/03/31(月) 20:51:36
// updownDBGridIntのOnChangingEx
procedure TForm1.updownDBGridIntChangingEx(Sender: TObject;
var AllowChange: Boolean; NewValue: Smallint;
Direction: TUpDownDirection);
begin

 if (Table1.Active=true) and (0<Table1.RecordCount) then
 begin
  if not fView then exit;
  AllowChange := DBGrid1.SelectedField.CanModify;
  if AllowChange then
  begin 
  with DBGrid1 do
   if SelectedField is TIntegerField then with TIntegerField(SelectedField) do
   begin

   //Table1.DisableControls;
   Table1.Edit;
   Table1.FieldByName('Int').AsInteger := updownDBGridInt.Position;
   Table1.Post;

   DBGrid1.Refresh;
   //Table1.EnableControls;

   end;
  end;
end;
end;

こうすると、Tableにフィルターをかけてないときは、値の増減ができ、うまくいくのですが、フィルターをかけた場合、UpDownを増減すると、カレントレコードが先頭にいったり、最後にいったり(updownDBGridIntもそれにあわせて移動します)増減できなくなってしまいます。
一般的な話でなくて申し訳ないですが、原因のわかる方いらっしゃいませんか?
198デフォルトの名無しさん:2008/04/01(火) 13:03:38
writelnで出力した文字列を
一段上に戻って再度上書きして
進行状況を表示したいんですがどうやればいいですか?
199デフォルトの名無しさん:2008/04/01(火) 13:07:49
戻るくらいなら最初から改行するなよ
200ななしへたぐらま ◆XcB18Bks.Y :2008/04/01(火) 13:44:59
Writelnの代わりにWriteで書いてバックスペース(#8)?
201デフォルトの名無しさん:2008/04/01(火) 16:35:05
http://dn.codegear.com/article/33747を参考に自分のソフトをVistaに対応させようと思ったのですが
ShowModalのところで詰まってしまいました
FormのプロパティにPopupParentが存在しないのです
どうすればいいのでしょうか?
202デフォルトの名無しさん:2008/04/01(火) 19:57:44
>>201 TurboDelphi使え
203デフォルトの名無しさん:2008/04/01(火) 20:50:47
APIなどで代替出来ないのでしょうか
204デフォルトの名無しさん:2008/04/01(火) 21:59:02
TurboDelphi(ソース付き)をダウンロードしてPopupParentの実装を調べればいいんじゃね?
205デフォルトの名無しさん:2008/04/01(火) 22:01:20
>>195
無関係な行を全部削除してくれんかね。
206195:2008/04/01(火) 23:52:21
すみません。

// DBGridをFColorDBGrid1とFColorDBGrid2の縞々にする。

以下の1ブロックは必要ないですね。

削除したのを1から載せるとまたクドくなるのでこれで許してくれませんか?
207デフォルトの名無しさん:2008/04/02(水) 01:43:01
ぜんぜんわからんわ。
UpDownコントロールをDBGridのセルの上に置いて、値を変えられるようにしたいみたいだけど。
withで間違えているのかな。
208201:2008/04/02(水) 06:22:50
209195:2008/04/02(水) 09:05:58
FilterをONにしなければ、いけるんですが、もう少しいじってみます。
210デフォルトの名無しさん:2008/04/02(水) 20:25:55
if a and b then

という場合必ずaから評価される保証はありますか?
211デフォルトの名無しさん:2008/04/02(水) 21:09:24
はいえ

マジレスすると完全評価にした場合のことは知らん
212195:2008/04/03(木) 16:34:43
StringList1: TStringList;

が持っている情報量をbyteで知るにはどうしたらいいんでしょうか?
213 ◆XcB18Bks.Y :2008/04/03(木) 16:37:03
言語ガイドの記述を読むと完全評価の場合は評価順序に関する記述はありませんね。

>>210
Delphiでは論理演算子andやorでつながった式については
デフォルトではショートサーキット評価といって
左から順に評価して式全体の値が確定した時点でそこで評価を打ち切ってしまいます。

> if a and b then
だとaの値がFalseなら式全体の値はbの値に関係なくFalseになりますからここで評価を打ち切ります。
つまりbの評価は行われません。

完全評価でコンパイルさせるとすべてを評価することが保証されますが
順序に関する記述が一切無いので記述と異なる順序で評価される可能性があります。
214デフォルトの名無しさん:2008/04/03(木) 17:59:30
>>212
Createの前後でメモリを空き容量を数えるww
215デフォルトの名無しさん:2008/04/03(木) 18:14:12
>>212
Length(StringList.Text) + StringList.InstanceSize とか
216212:2008/04/03(木) 18:54:09
ごめんなさい、説明不足でした。
もってるTextの情報量だけ欲しくて、だから、単にLength(StringList1.Text)+1でいいですよね?
217デフォルトの名無しさん:2008/04/03(木) 20:21:46
以前このスレで、画面の切り替えにPageControlを使うアイデアがありました。
ワタシ今までずっと、たくさんのフォームを作って画面切り替えをしてきたの
ですが、今回、PageControl方式でやってみました。最初は良かったのですが、
ページが増えるにつれメインフォームに無茶苦茶たくさんのコンポーネントと
そのイベントなどが集中してしまい、かなり混乱してきています。
皆様はどのように整理してやってるのでしょうか。
218デフォルトの名無しさん:2008/04/03(木) 20:30:06
まさにそのためにFrameが用意されている。
Panelのような感じでフォームに貼り付けられて
設計時には個々の独立したフォームのように扱えるから綺麗にコードがばらせる。
ListBox/ListViewなんかのわりに処理がたくさん入るようなコンポーネント単位で独立させていってもいいし。
219デフォルトの名無しさん:2008/04/03(木) 20:48:07
フレームは以前チャレンジしたことがありまして、ただそのときは設計時に
貼り付けた先を更新してしまってdfmファイルを直して戻したり、イベント
関連で不都合があったり、何やかやで結構痛いめにあった記憶がありまして
(すっかり忘れてますが…)避けてきたのですが、うまく使えば画面切り替え
には一番使えるモノなのかですか。あぁ結構アタマ混乱気味です。
220デフォルトの名無しさん:2008/04/03(木) 20:55:57
別フォームで設計しておいて、そのフォームに貼り付けたコンポーネントの
全部のオーナを変更してしまうとか

フォームのままManualDockで貼り付けてしまうとか
221デフォルトの名無しさん:2008/04/03(木) 21:11:43
>>219
そういえば設計時に埋め込むと
>ただそのときは設計時に
>貼り付けた先を更新してしまってdfmファイルを直して戻したり
に絡んだエラーだか警告だかのダイアログがでまくってたような。

なので自分は設計時には埋め込まずFormCreateで
Frame1 := TFrame1.Create(Panel1);
Frame1.Parent := Panel1;
Frame1.Align := alClient;
と動的に作るようにしてる。

あとFormのOnCreate/OnDestroy/OnShow/OnHide
に相当するイベントハンドラがないのも不便なので
TFrameを継承して
DoCreate/DoDestroy/DoShow/DoHide
といったイベントハンドラもどきのvirtual procedureを持ったTFrameExを作って
更に子にFrameExのインスタンスがあったらそのもどきのメソッドを
適切なタイミングで呼び出すをTFormExもつくって使ってる。

言われてみればだいぶクセのある機能ではあるなぁw
それでも他にいい代替案がないんでずっとこの方式。
動的にタブを生成廃棄するメモやブラウザタイプのアプリを作るときにもかなり自然に使えるしね。

自分的には他にイベント関連等目立った問題はあまりないと思う。
222デフォルトの名無しさん:2008/04/03(木) 22:21:55
十分めんどくさいなぁ、それ。しかし、そんな感じになるんだろうなぁ。
223デフォルトの名無しさん:2008/04/03(木) 23:27:28
>216
いいけど、いいのか?Textプロパティを参照するとStrings[]の内容をCR+LF付で連結した文字列が
一時的にだが生成されるんだけど。それにCR+LFの分が計算に入ってるけど?
それにStrings[]に同一内容同一起源のデータがあると同一の領域に格納されていてデータサイズとしては
1つ分しか消費していない、という状況をどう考えるか、とか。
要は無理ってことだが。
224デフォルトの名無しさん:2008/04/04(金) 07:20:49
TBitmap.PixelFormat に pfDevice をセットしたら、自動的に HandleType は bmDDB になるのだろうか?
TBitmap.PixelFormat に pf24bit をセットしたら、自動的に HandleType は bmDIB になるのだろうか?
TBitmap.HandleType に bmDDB  をセットしたら、自動的に PixelFormat は pfDevice になるのだろうか?
TBitmap.HandleType に bmDIB  をセットしたら、自動的に PixelFormat は pf24bit になるのだろうか?
225最初のひとつだけYESみたいだが?:2008/04/04(金) 07:35:14
ソース嫁。
226デフォルトの名無しさん:2008/04/04(金) 08:03:46
227デフォルトの名無しさん:2008/04/04(金) 09:04:34
ごめん>>220はオーナーじゃなくて親だった。

procedure SetParentFromForm(dst,src:TWinControl );
var i:Integer;
begin
for i:=src.ControlCount-1 Downto 0 do
src.Controls[i].Parent:=dst;
end;

という関数を作って、
SetParentFromForm(Panel1,Form2);
のように行う
切り替える時は、
SetParentFromForm(Form2,Panel1);
として戻してやる。

オーナーが切り替わってるだけだから、ボタン類は元のフォームのイベントとして呼ばれる
228デフォルトの名無しさん:2008/04/04(金) 14:44:17
String型の''やポインタ型のnilに相当するChar型の表現ってありますか?

例えば、String型の変数であるstrに'ABC'という文字列が入っていたとして、
一文字削って'AB'としたい場合、

 str[3] := ''; // これではエラーになりますが…

のようにしたいです。
229デフォルトの名無しさん:2008/04/04(金) 14:50:01
SetLength(str, 2)
str := Copy(str, 1, 2)

str[3] := #0 or Chr(0)
が直接の回答だけどおそらく望んでいる動作とは異なり
'AB'#0
という3文字の文字列になってしまう。
PCharに渡すなら問題ないけど。
230デフォルトの名無しさん:2008/04/04(金) 15:02:55
その他
str := LeftStr(str, 2);
Delete(str, 3, 1);
231228:2008/04/04(金) 15:03:14
>>229
素早いご回答をありがとうございます。

実は、str[1]に空文字を代入して'ABC'→'BC'とするなど、
色々できたらと思ったのですが、
やはりString型として処理した方がよさそうですね。
(そもそもString型の中身について理解していないのが問題ですが...)
232デフォルトの名無しさん:2008/04/04(金) 15:12:25
それなら delete(str,1,1) でいいと思うけどな


c言語の文字列はゼロ値終端で扱われる。 
pascalの文字列は 構造体になっていて文字のサイズ情報を持っている。
だから値#0を含む文字も含む事が出来る。

DelphiはC言語との連携が楽なように、PCharとpascal文字列の型変換が出来るように工夫されている
たとえば s:=PChar(s); と書くと、sの中から#0までの長さに自動調整される。

だから delete(str,1,1)を str :=PChar(str)+1 ; と書くことも出来る
233228:2008/04/04(金) 16:01:13
>>232
delete関数、知りませんでした…。
その他もとても勉強になります。ありがとうございました。m(__)m
234デフォルトの名無しさん:2008/04/04(金) 16:13:39
こんにちは、Delphiのインラインアセンブラについて質問があります。

Python for Delphi(P4D)のコンポーネントのソースを見ているのですが、

> mov eax, Self
> mov eax, [eax].DLL_PyArg_ParseTuple

の [eax].DLL_PyArg_ParseTuple とはどういう意味なのでしょうか?

eax + DLL_PyArg_ParseTuple
であってますでしょうか
235デフォルトの名無しさん:2008/04/04(金) 18:11:10
>>234
はいな

const hoge=3;
mov eax, [eax].hoge は mov eax, [eax+3] と同じ

そういう時は、実行して、そこで止めてCPU窓を開くと逆アセ表示するからわかるよ
236デフォルトの名無しさん:2008/04/04(金) 21:24:48
StretchDrawで画像を縮小するとかなり画像が劣化するのですが、
たとえば、1/2とか特定の縮小率にすればいいとか何かいい方法は
ないでしょうか?
Tbitmapを印刷するのに、StretchDLBitsを使う方法はDelphi Tipsで見つけたの
ですが、画面上でも使えますか?
237デフォルトの名無しさん:2008/04/04(金) 22:36:31
238デフォルトの名無しさん:2008/04/04(金) 23:53:45
こんばんは、旧バージョンについて教えてください。
サンプルでDelPhi5のソース等をもらったのですが
DelPhi5 というのはもう手に入らないのでしょうか?
現在提供されている無償版が6で5とは互換性がないと
どこかに書いてあったのでDelPhi5を手に入れる方法を
ご存知なら情報をお願いします。
239デフォルトの名無しさん:2008/04/05(土) 00:25:14
>>235
レスサンクス!

> そういう時は、実行して、そこで止めてCPU窓を開くと逆アセ表示するからわかるよ
おお!その手があったか
240デフォルトの名無しさん:2008/04/05(土) 00:25:55
>>236
DHGL
>237

Delphiな小技:画像の拡大と縮小(画質重視)
http://delphi.livedoor.biz/archives/50602241.html

Delphiな小技:バイキュービック(Bicubic)法による拡大と縮小
http://delphi.livedoor.biz/archives/50610022.html

きれいな拡大・縮小〜Bilinear法の解説〜
http://www.geocities.jp/asumaroyuumaro/program/tips/Bilinear.html

きれいな拡大・縮小その2〜Bicubic法の解説〜
http://www.geocities.jp/asumaroyuumaro/program/tips/BiCubic.html

Delphi(Graphics) : Resize 1. Bilinear
http://junki.lix.jp/delphigr/041Resize1.htm

Delphi(Graphics) : Resize 2. Bilinear vs Bicubic
http://junki.lix.jp/delphigr/042Resize2.htm

Delphi(Graphics) : Resize 3. Interpolations
http://junki.lix.jp/delphigr/044Resize3.htm

Delphi(Graphics) : [GDI+] Resizing Images
http://junki.lix.jp/gdiplus/005ResizeImages.htm

>>238
Delphiの無償版はDelphi6とTurbo Delphiしかないと思う。
Delphi6でコンパイルしてみて、警告やらエラーが出たらソースを修正すればよし。
241デフォルトの名無しさん:2008/04/05(土) 00:26:52
>>238
Delphi5のソースは大体、上のバージョンで通るから大丈夫。
通らなかったら、ここに聞きに来な
242デフォルトの名無しさん:2008/04/05(土) 00:52:42
>>240-241
ありがとうございます。6でコンパイルしてみます。
エラーがどうしても解消できなかったら
また質問に来るのでよろしくお願いします。
243デフォルトの名無しさん:2008/04/05(土) 05:59:25
> 237,240
ありがとうございました。さっそく、DHGLを試してみます。
Delphi Graphic Secretsはどこでも販売してなくて
Amazonでは中古を9800円で販売していましたが、今、みたら
4000円だったのでさっそく購入してみます。
もしDHGLがうまくいかなかったら、ご紹介いただいたGDI+も
挑戦してみたいと思います。
本当にありがとうございました。
244デフォルトの名無しさん:2008/04/05(土) 06:13:45
きれいに画像を縮小したいだけだったら、DHGLを使うのに本を買う必要はないです。
245デフォルトの名無しさん:2008/04/05(土) 15:18:51
ボタンクリックで即休止状態にしたいです。

新規プロジェクト(VCL Formアプリケーション)のフォームに配置したボタンに

procedure TForm1.Button1Click(Sender: TObject);
begin
SetSystemPowerState(False,True)
end;

と書いてコンパイルしただけでは、実行してボタンクリックしても
見た目は無反応でした。何かコードが不足しているのでしょうか・・・?

Windows XP SP2です。
ご存じの方いらっしゃいましたら、
すみませんが、よろしくお願いいたします。
246デフォルトの名無しさん:2008/04/05(土) 16:11:20
>245
ttp://msdn2.microsoft.com/en-us/library/aa373206(VS.85).aspx

Remarks

The calling process must have the SE_SHUTDOWN_NAME privilege. To enable
the SE_SHUTDOWN_NAME privilege, use the AdjustTokenPrivileges function.
For more information, see Changing Privileges in a Token.

247デフォルトの名無しさん:2008/04/05(土) 18:22:17
>>243
ttp://hp.vector.co.jp/authors/VA015850/delphi/lib/
かなり出遅れたけど上記の nstretchf はどう?
248デフォルトの名無しさん:2008/04/05(土) 21:00:23
delphi経験一週間の者です。

配列を2つ作って、
両者の要素をコピーし合いたいんですが、
上手くいきません。

値のコピーをしたいのですが、
アドレスがコピーされてる模様。

Delphi7で、配列の値をコピーする
方法をご教示ください。
249デフォルトの名無しさん:2008/04/05(土) 21:02:26
配列に値入れてコピーしたらアドレスになるってどういう事?意味がわからない
250デフォルトの名無しさん:2008/04/05(土) 22:32:28
なぜ、うまくいかないコードを示さないのだろう?
251デフォルトの名無しさん:2008/04/06(日) 01:04:39
>>248
b := a; // アドレスのコピー
b := Copy(a, 0, Length(a)); // 値のコピー
SetLength(b, Length(a)); Move(a[0], b[0], SizeOf({要素の型}) * Length(a)); // 値のコピー

文字列の場合は t := s; とすると、s の文字列をコピーした振りをしてくれる(COW: Copy-On-Write)。
252245:2008/04/06(日) 01:35:00
レスありがとうございます。
http://homepage1.nifty.com/MADIA/delphi/delphi_bbs/200404/200404_04040006.html
で示されてるサンプルコードでも期待した結果を得られなかったのですが、
休止状態にするには、
ボタンのプロシージャにはどのように書けばいいのでしょうorz
すみません、よろしくお願いいたします
253デフォルトの名無しさん:2008/04/06(日) 04:32:50
なんで246を読んで試さないの?
254デフォルトの名無しさん:2008/04/06(日) 10:03:16
面倒だからです
255デフォルトの名無しさん:2008/04/06(日) 10:13:23
246のサンプルが252じゃねの
256デフォルトの名無しさん:2008/04/06(日) 13:09:07
>252
ん〜そこのサンプルソースでうまくいかないのであれば、それぞれの関数の戻値をチェックしてエラーが起きていないか、
そのときのGetLastErrorの値はどうなっているか、あたりを調べてみて。Win32Check関数とかお勧め。
それとこの手の質問をするときはうまくいかない環境のOSやバージョン、他のOSでの状況なども明示すること。
257デフォルトの名無しさん:2008/04/06(日) 13:27:42
XP SP2ゆうてるじゃん
258デフォルトの名無しさん:2008/04/06(日) 18:47:46
> 247
ありがとうございました。DHGLでうまくいったので、今のところは
必要ないのですが、いきずまったら試してみます。
ありがとうございました。
259デフォルトの名無しさん:2008/04/07(月) 11:48:11
TDdeClientItemのOnChangeイベントって
頻繁に更新するデータとか、複数のデータに対しては
正確に動かないんでしょうか?

http://qc.borland.com/wc/qcmain.aspx?d=51614
http://homepage1.nifty.com/MADIA/delphi/delphi_bbs/200512/200512_05120125.html

これに書いてあるのと全く同じ症状が起きて困ってます。
OpenOfficeとかC#のDDE通信だときっちり動いているのに
Delphiで作ったアプリだと明らかにデータ更新が遅延したり、
中には全く反応しないitemがあったりします。
260デフォルトの名無しさん:2008/04/07(月) 12:49:15
いつも、いつもすみませんが、教えてください。

RadioGroup1で 例えば、0:犬 1:豚とあり、初期に0:犬をマークしているようになっていると
します。で、豚を選択したときは、RadioGroup1で、OnEnterでイベントを検出して
Procedure TFrom1.RadioGroup1Eneter(Sender:TObject)
    begin Label1.caption:='pig'; end;
でうまくLabelにpigを出せるのですが、
RadioGroup1で0:犬、1:豚、2:魚として初期に0:犬をマークしているとします。
で、豚か魚をマークした時に
Procedure TForm1.RadioGroupEvent(sender:TObject)
    Case Radiogroup1.ItemIndex of
1:label1.caption:='pig';
2:label1.caption:='fish';
end;end;
ではLabelに何も表示されません。何かいい知恵はないでしょうか?
261デフォルトの名無しさん:2008/04/07(月) 13:11:41
OnClick
262デフォルトの名無しさん:2008/04/07(月) 13:45:16
あれー、OnClickは試して駄目だったのですが
今するとちゃんとできます。なぜだんたんだろう??
なにはともわれありがとうございました。
263デフォルトの名無しさん:2008/04/07(月) 17:24:25
ComboBoxのドロップダウンの長さを長くするにはどうすればいいんでしょうか?
264デフォルトの名無しさん:2008/04/07(月) 17:55:51
DropDownCount
265デフォルトの名無しさん:2008/04/07(月) 19:12:29
>>264

ありがとです♪
266デフォルトの名無しさん:2008/04/07(月) 19:17:28
今度からはヘルプ読もうねボク
267 ◆XcB18Bks.Y :2008/04/07(月) 19:32:51
>>221
フレームにOnCreateやOnDestroyはありませんが
コンストラクタやデストラクタをオーバーライドすればたいていのことはできると思います。
(この方法はDelphi 4(5かも)以降のフォームやデータモジュールでも使えます)

ただ各画面に共通する機能は1カ所に書く方がよいので
私も共通の基本フレームクラスを作って各画面のフレームはそこから派生させています。

画面がいくつもあるアプリなんか作ってしまうとフレームのありがたさが身にしみてきます。
268デフォルトの名無しさん:2008/04/07(月) 20:37:58
>>267
む〜そんなんですか。画面たくさんのアプリじゃあ、フレームなのかな。
PageContorolじゃ無理あるかも(以前に質問したモノですが)
どう実装するか全然ピンと来ないですが、参考となるサイトか参考書など
ありましたら教えてもらえますでしょうか。
269デフォルトの名無しさん:2008/04/08(火) 01:07:43
>>268
以前作った検証用のサンプルを継承に依存しないように書き直して
TurboDelphi用にしたサンプルとメモ書き。
中見ればわかるけど全然大したことないよ。インターフェースは好きなように書き換えちゃって。
http://delwiki.info/?%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B

delwikiはまたphpのに戻ったのか。
270デフォルトの名無しさん:2008/04/08(火) 09:18:52
ComboBoxのドロップダウンの幅を広くするにはどうすればいいんでしょうか?
271デフォルトの名無しさん:2008/04/08(火) 10:18:05
CB_SETDROPPEDWIDTH を窓ハンドルに送ってやる。

こんな感じ
ComboBox1.Perform(CB_SETDROPPEDWIDTH,300,0);
272デフォルトの名無しさん:2008/04/08(火) 10:28:22
>>268
普通にフォームに書いて設計しておくのではどうして駄目なの?
似たような配置で画面遷移で一部だけ変わるような場合も
フォームの継承使えば簡単だし
273デフォルトの名無しさん:2008/04/08(火) 13:00:32
パラレルポートからパルスを出力したいのですが
どうすれば可能でしょうか。
パルス幅の設定とON、OFFスイッチを設け
ONしている間だけ設定値のパルス幅で出力し続けるという
感じで行きたいのですが。。。
274デフォルトの名無しさん:2008/04/08(火) 14:02:57
パラレルポートってUSBの先にあるやつじゃなくて、パソコン附属の奴だよね?

1、I/O命令を使えるようにする。
 giveioとかGWIOPMとか
Delwikiに書いてあったんだけど消えてる。 
 キャッシュは
http://72.14.235.104/search?q=cache:rkGsmNRbmEcJ:delwiki.info/コンポーネント/GWIOPM(I/Oポートを直接叩く)

2、I/O命令をasmで呼び出すか、関数にして呼び出す

3、時間制御については、精度の保持はパソコンなので難しい
275デフォルトの名無しさん:2008/04/08(火) 16:40:00
>>274
ありがとうございます。
時間制御ですが、ひとまずプログラム上でお約束できれば
良しとしようと思います。
マイクロ秒タイマーのコンポーネントとか使ってみよう
276デフォルトの名無しさん:2008/04/08(火) 17:50:28
コレ結構簡単
ttp://www.seya.org/cs/driverlinx.html
277デフォルトの名無しさん:2008/04/09(水) 11:12:43
TMemoベース(でなくてもいいけど)のコマンドプロンプトのコンポーネントってないですか?
cmdなり任意のコマンドラインツールを対話的に実行できるものです。
278デフォルトの名無しさん:2008/04/09(水) 11:22:20
コマンドプロンプトを使った方が遥かに楽な気がする
279デフォルトの名無しさん:2008/04/10(木) 02:58:38
自分のアプリに埋め込みたいんだろ
280デフォルトの名無しさん:2008/04/10(木) 03:10:38
メモ帳で、Enterを押したらその行を解析して実行するのはどぉ?
281デフォルトの名無しさん:2008/04/10(木) 03:29:39
改行は?
282デフォルトの名無しさん:2008/04/10(木) 07:57:39
失礼します。
iniファイルを実行ファイルのフォルダじゃなくて、
ホームディレクトリに置きたいのですが、
どうすればよいのでしょうか。今は下のコードです。

IniFile := TIniFile.Create(extractFilePath(paramstr(0))+'test.ini');

実行ファイルは同じだけど、iniは各個人で持ちたい。
283デフォルトの名無しさん:2008/04/10(木) 08:37:53
マイドキュメントのフォルダの事なら
http://support.microsoft.com/kb/194702/ja
つまり
uses shlobj ; の. SHGetSpecialFolderPath CSIDL_PERSONAL

レジストリ でもアクセス出来る
http://support.microsoft.com/kb/310746/ja


でも、実行ファイルのあるフォルダにユーザー命のフォルダを掘ってアクセスする方がいいと思うよ。
ユーザー名は GetUserName/ GetUserNameEx で取れる
284デフォルトの名無しさん:2008/04/10(木) 09:00:10
>>282
function GetMyIniFolderName: string;
var
uName: string;
nSize: DWORD;
begin
nSize := 4000;
SetLength(uName, nSize + 4);
if GetUserName( PChar(uName), nSize) then begin
SetLength(uName,nSize-1);
end else uName := 'non';
Result := ChangeFileExt(paramstr(0) ,'' )+ '@'+uName+'.ini';
end;

実行ファイルのフォルダで "実行ファイル名@ユーザー名.ini" という感じで作る

IniFile := TIniFile.Create( GetMyIniFolderName() );
285デフォルトの名無しさん:2008/04/10(木) 09:38:50
GetEnvironmentVariableで環境変数取る手もあるな。

APPDATA=C:\Documents and Settings\UserName\Application Data
USERPROFILE=C:\Documents and Settings\UserName

>>283のマイドキュメント/AppName/AppName.iniあたりに作るのが最も無難。

>>283
>でも、実行ファイルのあるフォルダにユーザー命のフォルダを掘ってアクセスする方がいいと思うよ。
小物フリーウェアではお手軽便利なやり方で長年使われてたけど、あまりよいやり方じゃないよ。
これが横行したのがPowerUser常用が強要されてXPのセキュリティがグダグダになった一因だし。
一長一短にしても今更推奨はできない。
286デフォルトの名無しさん:2008/04/10(木) 09:45:08
とりあえず実行ファイルのフォルダに作ってみて作れなかったらマイドキュメントでいいと思うけどな
287デフォルトの名無しさん:2008/04/10(木) 09:48:20
2つのStringListを同期させるにはどうすればいいんでしょう
たとえばStringListをソートした時にStringListBをAと同じように並べ替えたいのです
288デフォルトの名無しさん:2008/04/10(木) 09:57:02
Textを全部コピーしたら。代入じゃなく。
289デフォルトの名無しさん:2008/04/10(木) 09:58:28
中身は違うものなんだよね?
Objects の方にインデックスかポインタを無理やり入れておいたらどう?
290デフォルトの名無しさん:2008/04/10(木) 10:08:22
>>288,289
ありがとうございます

>288
2つのStringListは全く違うものなので使えなさそうです

>>289
Objectsというプロパティに触ったことがないのでよく分かりません
もう少し詳しくお願いできますか?
291287:2008/04/10(木) 10:43:59
>>289の通りにやってみたらできました!
ありがとうございました
292デフォルトの名無しさん:2008/04/10(木) 11:10:17
synapse の imap クライアントを使って、gmail (imap有効済) に imap で接続しようとしていますが
接続に失敗(エラー: 10091)してしまいます
設定など足りないところがありますでしょうか?

uses imapsend;
-------------------
    with TIMAPSend.Create do
    try
        TargetHost := 'imap.gmail.com';
        TargetPort := '993';

        UserName := '***@gmail.com';
        Password := '***';

        Timeout := 5000;
        FullSSL := True;

        if Login then begin
            Caption := 'OK';
            Logout;
        end else begin
            Caption := 'NG';
        end;
    finally
        Free;
    end;
-------------------
293デフォルトの名無しさん:2008/04/10(木) 11:16:21
ComboBoxでドロップダウンした時だけ違う文字列を表示できる?
294デフォルトの名無しさん:2008/04/10(木) 11:19:04
OnDropDownで
combobox.items.commatext := 'a,b,c';
って話か?
295293:2008/04/10(木) 11:35:11
>>294
ドロップダウン閉じた時にどうやって元に戻せばいい?
296292:2008/04/10(木) 14:48:11
自己解決しました
synapse の imap クライアントは、ソースを追ってみると SSLが実装されてないような...

Indy の TIdIMAP4 の IOHandler に TIdSSLIOHandlerSocketOpenSSL を入れて、
UseTLS := utUseImplicitTLS 、下記のコードで接続OKでした

-------------
    with IdIMAP41 do begin
        Host := 'imap.gmail.com';
        Port := 993;
        ConnectTimeout := 3000;

        Username := '***@gmail.com';
        Password := '***';

        if Connect then begin
            Caption := 'OK';

            Disconnect;
        end else begin
            Caption := 'NG';
        end;
    end;
-------------
297デフォルトの名無しさん:2008/04/10(木) 16:48:17
DateTimeToStrについて教えて下さい。

DateTimeToStrは、ロケールを意識して文字列にしてくれますが、
グリニッジ標準の文字を取得するにはどうすればよいのでしょう?

さらに、夏時間とか絡んでくると、わけわからなくなりますが、
夏時間とかいうのもVCLのどこかに規定されているのでしょうか?
298ななしへたぐらま ◆XcB18Bks.Y :2008/04/10(木) 18:40:58
>>282
普通のアプリと同じように「ローカルアプリケーションフォルダ」に入れるのがよいのではないでしょうか。
usesにShlObjを追加して…

{ 現在のユーザーアカウントの「ローカルアプリケーションフォルダ」のパスを返す.}
function GetLocalAppDataPath: string;
var buf: array [0..MAX_PATH] of char;
begin
 SHGetSpecialFolderPath(0, buf, CSIDL_LOCAL_APPDATA, False);
 Result := buf;
end;
{ 現在のユーザーアカウント名を返す.}
function GetCurrentUserName: string;
var
 buf: array [0..MAX_PATH] of char;
 size: dword;
begin
 size := MAX_PATH;
 GetUserName(buf, size);
 Result := buf;
end;
{ 実行例 }
procedure TForm1.ShowAppDataPathActionExecute(Sender: TObject);
var Path: string;
begin
 if LabeledEdit_CompanyName.Text = '' then raise Exception.Create('社名はちゃんと入れろよ!');
 if LabeledEdit_AppName.Text = '' then raise Exception.Create('アプリ名もちゃんと入れろよ!');
 Path := GetLocalAppDataPath + '\' + LabeledEdit_CompanyName.Text + '\' + LabeledEdit_AppName.Text;
 ShowMessageFmt('このパソコンの場合,ユーザー%sの設定ファイルは'#13#13'%s'#13#13'の下に保存すべきじゃ',
  [GetCurrentUserName, Path]);
end;
299デフォルトの名無しさん:2008/04/10(木) 18:49:07
・ショートカットキーで起動
・ショートカットを登録

このような単純な機能を持つデスクトップランチャーを、Delphiノータッチの人間が作ろうとしたらどれ位時間がかかりますか?
作成に掛かる時間…というよりも、ランチャー作成自体の難易度がどのようなものか教えていただけると幸いです

C、Java、アセンブラは初歩を嗜んだ程度です
300297:2008/04/10(木) 18:49:15
ヘルプ検索してみましたが、
Delphiってグリニッジ時間の文字列を作りだすメソッド無いんですね。
301デフォルトの名無しさん:2008/04/10(木) 23:09:45
>>299
Delphiはじめて二番目に作ったのがランチャだった
確か一日一〜二時間やって一ヶ月くらいで使えるものにはなったと思う
その後使い込んでいくウチにバグ取りや機能追加で現在に至る
人に配れるレベルになったのは半年目くらいか(配っとらんが)
おれはCもなんも知らない状態で入門書とBBSフォーラムの情報だけだった
いまはグーグル先生もいるし質問先もたくさんあるから
あとはモチベーション次第なんぢゃね?
302デフォルトの名無しさん:2008/04/10(木) 23:12:03
>>293
オーナードロー
303301:2008/04/10(木) 23:15:33
>>299
C#の初心者すれでもマルチポストしたのか
Delphiやってみたいってわけではなかったんだ
●rz
304282:2008/04/10(木) 23:28:47
遅レスすみません。
>298のコードを使わせていただきました。

いくつかアイデアをもらって心に感じるものがありました。
ありがとう。
305デフォルトの名無しさん:2008/04/11(金) 01:13:54
>300
日付時刻の扱いについて。TDateTime型はローカル、DST、UTC等の配慮は含まれていない。
よってこれらの配慮を要する場合はTSystemTime構造体を使用してGetLocalTimeまたは
GetSystemTime(いずれもWin32API)で取得し、これをSystemTimeToDateTimeで
TDateTimeに変換して使用する必要がある。またDSTについてはWindowsの実装がナニなので
(基本的に今現在のDSTの適用状況しか信用できず、たとえば数年前の特定の日付における
DSTの適用状況はわからない)、自前で実装する必要がある。
306300:2008/04/11(金) 09:10:00
thx!>>305

現在の時間だけで良いので、OKです。
つまり、グリニッジ時間を知りたければ、TDateTimeは使えなくて、Win32に頼るってことですね。
307デフォルトの名無しさん:2008/04/12(土) 00:05:32
Delphiを勉強するにあたってお勧めの本を教えてください
C, C++, Javaで開発をしたことがあります
308デフォルトの名無しさん:2008/04/12(土) 00:41:29
>>309
もちつけ
309デフォルトの名無しさん:2008/04/12(土) 00:54:13
ぺったん。ぺったん。
310デフォルトの名無しさん:2008/04/12(土) 01:07:19
つるぺったん。
311デフォルトの名無しさん:2008/04/12(土) 02:11:57
>>301>>303
あ、いや、C#スレでDelphiをオススメされたんでこっち来ました
ありがとうございます。半年ならちょっとやってみたいです
この言語で作ってみたいと思ってます

近場の書店巡ってもCだのJavaだのHTMLだのの教本しか置いて無かったです
Amazonを見てみたら評価の高い教本はあるものの、中古で異常な価格のモノばかりでした
何か初心者オススメの本は無いですか?
Webで資料もみますが、とりあえず1冊は教本を持っておきたいと考えています
312デフォルトの名無しさん:2008/04/12(土) 02:17:08
今から始めるなら迷うまでもなくC#だろ・・・
313デフォルトの名無しさん:2008/04/12(土) 02:37:53
>>311
マニュアルの文法書。
314デフォルトの名無しさん:2008/04/12(土) 08:07:21
>>311
IDEから文法までのを一通り説明してあるやつで
Turbo Delphiか2005用のを買っといたら。
Delphi 2005 プログラミングテクニック Vol.1入門編が無難な感じ。
シリーズ化されてて興味のある分野のものを買いたせるし。
315デフォルトの名無しさん:2008/04/12(土) 11:08:06
Turbo Delphi無料版でアプリを作りたいのですが、
ソースを難読化するツールってありますか?
316デフォルトの名無しさん:2008/04/12(土) 11:32:27
しんぱいしなくても>>315のソースはきっと読みづらい。
317デフォルトの名無しさん:2008/04/12(土) 13:13:12
.NETならともかくWin32でビルドしたら
逆アセンブルしか手がないからそんなに心配することもない。
318315:2008/04/12(土) 14:21:40
>>316
コメントでバレそうです。

>>317
DEDEなるデコンパイルソフトがあるらしいのですが、大丈夫でしょうか?
319デフォルトの名無しさん:2008/04/12(土) 14:29:26
コメント・・
320デフォルトの名無しさん:2008/04/12(土) 14:32:01
>>315
まずはどういう動機でどういうレベルの誰から何を守りたいのかをはっきりさせよう。
321デフォルトの名無しさん:2008/04/12(土) 14:59:30
フォームに乗せなきゃソース見れないだろ
322315:2008/04/12(土) 15:26:27
>>320
例えば姓名判断や競馬の予想のような、
条件を入力すると、ある専門知識に基づいた計算結果が返ってくるソフトを考えています。
バレたくないのは、その結果を算出する際のアルゴリズムやデータです。

すぐに解析されてしまうということは、
せっかく苦労してアルゴリズムやデータを作成しても、
簡単にコピー(改良版)が作られる可能性があるわけですから、躊躇しています。
323デフォルトの名無しさん:2008/04/12(土) 15:45:32
dedeで生成したソースを読めるような奴はそうそういないと思うが、もしいたら諦めるしかない
なんか特殊な方法で圧縮するとかそんな感じにしなきゃ無理な気がする
まぁその前に>>315が作るツールにそこまでしてソースを見るほどの価値があるかどうかの方が重要だが
324デフォルトの名無しさん:2008/04/12(土) 16:00:01
一応antiDeDeとかもあるけどね
FindWindowでDeDeにWM_CLOSE投げるだけだけど
325315:2008/04/12(土) 16:30:52
>>323
>dedeで生成したソースを読めるような奴はそうそういないと思うが、もしいたら諦めるしかない

実はdedeの詳細を分かっていなかったのですが、それなら安心です。
シェアウェア作家や商用アプリを作ってる方も、
特に気にしていないということですかね。

>>324
ありがとうございます。参考になります。
326デフォルトの名無しさん:2008/04/12(土) 17:19:04
http://www.moonlight.gr.jp/~el/delphi/bedit/step2.htmlの真ん中のを参考にして
バイナリを読み込んでみたんですけど、かなり時間が掛かってしまいます
どうすれば読み込み時間を短縮できるでしょうか?
327デフォルトの名無しさん:2008/04/12(土) 17:26:40
遅いのは1byteずつ読んでいるから。

ある程度の大きさのバッファを用意して、
ReadではなくBlockReadでバッファ長のバイト数を読み込むようにする。

「BlockRead」をヘルプで引くかで、ゴーグレッドれば、サンプルが出てくる。
328デフォルトの名無しさん:2008/04/12(土) 18:10:46
生成した8個のTShapeのVisibleをFalseにしたりTrueにしたりするところで
とても時間が掛かっている(1秒くらい)のですが、原因がさっぱり分かりません。
このような問題が出た方いますか。
329デフォルトの名無しさん:2008/04/12(土) 18:20:45
再現するコード晒せ
330デフォルトの名無しさん:2008/04/12(土) 18:47:02
TShapeなんて使ったことないけど
他のコントロールの再描画が発生して重いイベントハンドラが呼ばれているのかも。
プロジェクトオプションのコンパイラのデバッグ版DCUにチェックして再構築して
再描画中に固まるタイミングで一時停止してみたら。
331デフォルトの名無しさん:2008/04/12(土) 19:21:44
>>329 普通に新規で最低限のコードだと再現しないんです。
>>330 ありがとうございます。一時停止はタイミングが難しくてなかなか
思うようにいかないし何回もやってるうちにWindowsが固まるし…
再描画の他のコントロールのイベントは見てなかったのでチェックしてみます。
332デフォルトの名無しさん:2008/04/12(土) 20:17:28
DICOMをDelphiで勉強しようと思ってopen sourceであるezDICOMを見ているので
すが、childwin.pasで
const
gMouseDown : boolean = false;
とあり、その以降で
   gMouseDown := true;
となっていて、エラーがでて代入できない左辺値ですと表示されます。
constだからそういうエラーになるのですか?もしそうなら
あまり当てにしてはならないコードと判断すべきなのでしょうか?
333デフォルトの名無しさん:2008/04/12(土) 20:31:26
328ですが、やっぱり分からないです。描画関連のイベントでデバッグ用の
TMemoに出力するようにしたのですが、Visible := True; の前には表示
されません。困ったです。デバッグの良いアイデアか疑うべき点など
ありますでしょうか。
334デフォルトの名無しさん:2008/04/12(土) 20:51:35
>332
constへの代入はコンパイルオプションにより可能なこともある。
335デフォルトの名無しさん:2008/04/12(土) 20:53:18
いやだからソースどっかにあげろよ
336デフォルトの名無しさん:2008/04/12(土) 20:53:51
>333
TShapeやTLabelのようなグラフィックコントロールの描画はコンテナの描画から呼び出される。
というわけでコンテナのPaintを起点に追うと何かわかるかも。
337デフォルトの名無しさん:2008/04/12(土) 21:00:06
Delphiはいい加減標準でプロファイラつけろよな
338デフォルトの名無しさん:2008/04/12(土) 21:13:25
>>333
プロジェクトのバックアップとってデバッグ用のコード仕込みまくって
いじりまくってブレーク張りまくって根性でステップ実行しまくる。
339デフォルトの名無しさん:2008/04/12(土) 21:29:28
332ですが
>334
コンパイルオプションですね。探してみます。
>335
私への返事と解釈して↓のstandaloneのところですが
ttp://www.sph.sc.edu/comd/rorden/ezdicom.html
340 ◆XcB18Bks.Y :2008/04/12(土) 22:16:42
>>332
「型付き定数への代入」というやつです。
初期のDelphiコンパイラではデフォルトで有効になっていたのですが
途中からデフォルトで無効になりました。

プロジェクト設定の「コンパイラ」設定で有効にするのが手っ取り早い対処法ですが
型付き定数限定とはいえ定数の値を任意に変えられてしまうのはバグの元ですから避けるべきです。
(デフォルトが禁止になったのもバグ回避と思われます)
そのソースファイルの先頭に「型付き定数への代入」を有効にするコンパイラ指令 {$J+} を埋め込むのが良いでしょう。
341デフォルトの名無しさん:2008/04/12(土) 23:11:55
>>327
ものすごく遅くなってしまいましたがやってみます
ありがとうございました
342デフォルトの名無しさん:2008/04/13(日) 00:05:13
>>315
誰もおまい見たいなレベルの実行ファイルを解析したりしないよw
343デフォルトの名無しさん:2008/04/13(日) 07:26:17
> 340
ありがとうございました。おかげさまで無事、コンパイルでき動くようになりました。
これで解析がはかどります。本当にありがとうございました。
344デフォルトの名無しさん:2008/04/13(日) 11:21:33
>>342
「ある専門知識に基づいた計算結果」を求めてダウンロードするってことは、
少なくともその内容に関心があるってことでしょ
コーディングの巧拙は関係なし

まあ専門知識を持たないおまいには分からないだろうけどw
345デフォルトの名無しさん:2008/04/13(日) 11:46:30
>>315
CGIにしたらどう? サーバ側で計算すればいい。
346デフォルトの名無しさん:2008/04/13(日) 13:15:45
>345
サーバーをハッキングされる可能性があるのでは?
347デフォルトの名無しさん:2008/04/13(日) 13:23:00
まだ引っ張るの?
348デフォルトの名無しさん:2008/04/13(日) 15:14:53
SJIS最速の正規表現ライブラリってどれ?
349デフォルトの名無しさん:2008/04/13(日) 15:23:29
鬼車をobjのLinkで使う。。。とかかな?
WinAPI使ってないから改造しないと曖昧検索(同形異区の文字や
全角大小文字の一致とか、)の挙動がWSHとかと違うと思ったけど
350デフォルトの名無しさん:2008/04/14(月) 01:41:08
>>346
泥棒にPC盗まれる可能性も考えれば、
アルゴリズムは暗記して、そのつど出向いて計算してあげたらよさそう。
351デフォルトの名無しさん:2008/04/14(月) 11:10:07
定数を
const
HAIRETU: Array[0..10] of String = ('a','b','c','d','e','f','g','h','i','j','k');
HAIRETU: Array[100..110] of String = ('z','y','x','w','v','u','t','s','r','q','p');
のように離れて宣言することは出来るのでしょうか?
352デフォルトの名無しさん:2008/04/14(月) 11:50:35
別unitに分けるなら出来るよ。
アクセスするときは ユニット名.HAIRETU[4] のようにアクセスする。
353デフォルトの名無しさん:2008/04/14(月) 12:22:47
無理
354351:2008/04/14(月) 18:52:37
遅くなりましたがありがとうございました
変数でやる時には配列に一気に追加する方法はあるのでしょうか?
355デフォルトの名無しさん:2008/04/14(月) 20:11:58
Delphiに疎な配列がないのできれいに書くのは難しい。

const
    HAIRETU: array[0..110] of PChar =
        ('a','b','c','d','e','f','g','h','i','j','k',
        nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
        nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
        nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
        nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
        nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
        nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
        nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
        nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
        nil, nil, nil, nil, nil, nil, nil, nil, nil,
        'z','y','x','w','v','u','t','s','r','q','p');

if HAIRETU[4] <> nil then ShowMessage(HAIRETU[4]);


const HAIRETU: array [0..2] of record n: Integer; v: String; end = (
        (n:0; v:'a'), (n:1; v:'b'), (n:100; v:'z') );
for i := 0 to 2 do if HAIRETU[i].n = 1 then ShowMessage(HAIRETU[i].v);


HAIRETU := TStringList.Create;
HAIRETU.Values['0'] = 'a';
HAIRETU.Values['1'] = 'b';
HAIRETU.Values['100'] = 'z';
ShowMessage(Hairetu.Values['0'])
356デフォルトの名無しさん:2008/04/15(火) 09:27:19
関数を作ってみた

procedure StrToArray(var Hairetu: array of string; Start: Integer; Args: array of string);
    var I: Integer;
begin
    I := Length(Args) -1;

    while (I >= 0) do begin
        Hairetu[I + Start] := Args[I];
        Dec(I);
    end;
end;

// ----------------- //

StrToArray(HAIRETU,    0, ['a','b','c','d','e','f','g','h','i','j','k']);
StrToArray(HAIRETU, 100, ['z','y','x','w','v','u','t','s','r','q','p']);
357デフォルトの名無しさん:2008/04/15(火) 14:18:16
IMEのON、Offの仕方。
IMEの現在の状態を監視するには、なんと入力すればいいか教えてください。

ネット検索したんですが、使い方がよくわかりませんでした。
358デフォルトの名無しさん:2008/04/15(火) 14:28:00
ImmなんちゃらってAPIだったっけかな
359デフォルトの名無しさん:2008/04/15(火) 14:46:32
>>358
ありがとうございます。
それの具体的な使い方がわからなくて・・・。
360デフォルトの名無しさん:2008/04/15(火) 14:53:10
私なんて、現在IMEがONかどうかを調べることすら出来なかったよ!。
361デフォルトの名無しさん:2008/04/15(火) 15:31:20
Delphiに直接関係はないな。

ttp://m--takahashi.com/bbs/pastlog/A0600/A0534.html
362デフォルトの名無しさん:2008/04/15(火) 18:37:32
Delphi5で商用利用できるフリーのXMLのクラスライブラリってないかな?
363デフォルトの名無しさん:2008/04/15(火) 19:10:32
Delphi Personal version6 を使ってるんですが
自分で作ったソフトを公開する時に気をつけることってありますか
コンパイラオプションを変えたりとか、そういう事するもんなんでしょうか?
364デフォルトの名無しさん:2008/04/15(火) 22:10:16
Xp スタイルに対応したか? Vista 対策はOK? くらいかな。
365デフォルトの名無しさん:2008/04/15(火) 23:23:39
>357
ImeModeプロパティじゃだめなん?
366デフォルトの名無しさん:2008/04/15(火) 23:45:49
皆さんエディタとか何使ってますか。
beginとendを強調表示とかしてくれるエディタとかありませんかね。
367デフォルトの名無しさん:2008/04/15(火) 23:48:47
サクラエディタとか。
368デフォルトの名無しさん:2008/04/15(火) 23:49:24
EmEditor は、Delphi の予約語を強調表示できるよ。
369デフォルトの名無しさん:2008/04/15(火) 23:50:09
IDEか秀丸だな。
370デフォルトの名無しさん:2008/04/16(水) 00:04:37
すみません、質問です。
TWebBrowser で表示しているWebページの高さを
OleObject.document.body.scrollheight から取得しているのですが、
どうも正確な値がとれていない時があるようです。

うまくいく場合のあるのですが、
Google 検索結果ページでの、scrollheight の値が
明らかにこっちが想定している値と違うのです。

何か心当たりがある方いらっしゃいましたら、
教えていただけたら助かります!
#スクロールバー分は考慮してます。
371デフォルトの名無しさん:2008/04/16(水) 09:07:56
>>370
ブラウザ内部のサイズより、HTML描画された内容が小さい場合とか?
372デフォルトの名無しさん:2008/04/16(水) 09:21:58
メインメニュー・コンポーネントについて質問です。

大見出し
├小見出し1
├小見出し2
├小見出し3
・・・

という構成のメニューがあったとして、
小見出しを「配列」で一括管理することはできるのでしょうか?

各小見出しのオブジェクトインスペクタのname項目では、N1、N2、N3...
などとなっているので、配列名にすることができません。
(このままだと、「全てのチェックボックスを外す」などの記述が大変です)

よろしくお願いします。
373デフォルトの名無しさん:2008/04/16(水) 09:24:08
TStringList.SaveToFileで文字コードをUTF-8で保存したいのですが
どうすればいいでしょうか?htmlファイルを生成しています。

WinXP+Delphi7Pro
374デフォルトの名無しさん:2008/04/16(水) 10:13:17
delphiで通販サイトみたいなの作ってみようと思うんだけど
何か最低限これはみとけみたいなサイトあります?
375デフォルトの名無しさん:2008/04/16(水) 10:18:16
>>372
大見出し(MenuItem1)から小見出し操作するなら
for i := 0 to MenuItem1.count - 1 do
begin
MenuItem1.Items[i].checked := false;
end;

メインメニュー(MainMenu1)から大見出し(例としてメインメニューの一番目)を指定して
小見出しを操作したいなら
for i := 0 to MainMenu1.Items[0].count - 1 do
begin
MainMenu1.Items[0].Items[i].checked := false;
end;

でいけると思う。
376デフォルトの名無しさん:2008/04/16(水) 10:18:24
Delphiでウェブアプリなんだー。
ちょ、マイナーだね。

ウェブで無償配布ツールものとかドライバ設定系デスクトップアプリでは、某アイコンを良く見るけどね。
377デフォルトの名無しさん:2008/04/16(水) 10:25:02
>>373
UTF8Encode
378372:2008/04/16(水) 10:34:44
>>375
ありがとうございます!とても助かりました。
379デフォルトの名無しさん:2008/04/16(水) 10:40:52
>>373って
for i := 0 to Memo1.Lines.Count-1 do Writeln(f, WideString(Memo1.Lines[i]));
ってやるだけじゃだめなん?WideStringとUTF8って別もの?
そこらへんいまだに全く把握してないんだけど
どこかにアホグラマ向けの解説サイトとかないのかな。
380デフォルトの名無しさん:2008/04/16(水) 10:52:30
別物。
381デフォルトの名無しさん:2008/04/16(水) 11:21:33
>>376
htmlやcss、DB何かも飽きるほど使った事あるからいけるかなぁとか
思ったりしてるんだけどセキュリティ関連がよくわかんないのよねぇ

SQLインジェクションやクロスサイト云々とかそういうのはわかるけど
何か他にもいろいろありそうで怖い

Webアプリって今はjavaなんかがメジャーなのかな?
382デフォルトの名無しさん:2008/04/16(水) 15:43:07
DephiFのIDEモードってどうやるんだっけ。
他のウィンドウが見えるSDIになっててやりづれぇ
383デフォルトの名無しさん:2008/04/16(水) 15:58:47
>>364
ありがとうございます。
Vista対策は全くしてませんので、その事を記載することにします
384デフォルトの名無しさん:2008/04/16(水) 16:12:23
Vistaなんて使う方が悪いぐらいに書いとけ
385デフォルトの名無しさん:2008/04/16(水) 16:13:13
>>381
phpとかスクリプトが多いんじゃね
386デフォルトの名無しさん:2008/04/17(木) 13:37:09
質問です。
フォーカスが当たっているかコントロールは
どうやって調べればいいんでしょうか?
387デフォルトの名無しさん:2008/04/17(木) 15:47:11
つ TCustomForm.ActiveControl
388デフォルトの名無しさん:2008/04/17(木) 19:09:49
>>381
HTML、DB飽きるほどやってるなら、セキュリティ云々の前に、
未だに、Unicodeにまともに対応してない、Delphiを使うなんて論外だと思うが・・

389デフォルトの名無しさん:2008/04/17(木) 19:58:55
Delphi.NETなら使えるんだろ。
.NETの便利クラスパクって来るのも疲れたし
マシン買い換えたらDelphi.Net触り始めてみたくはある。
ぼろマシンのネイティブアプリよりよっぽど速そうだw
C#のフォーム周りはどうも微妙すぎるし。
390デフォルトの名無しさん:2008/04/17(木) 20:06:05
微妙って、.NET Framework使ってたら言語が違っても同じでないの?
391デフォルトの名無しさん:2008/04/17(木) 20:22:49
クラスライブラリが違う。
392デフォルトの名無しさん:2008/04/17(木) 21:04:42
ぼろマシンで走る.NETは遅いと思う
393デフォルトの名無しさん:2008/04/17(木) 22:53:08
Delphi.NETは最悪の選択
394デフォルトの名無しさん:2008/04/17(木) 23:34:25
>>387
ありがとうございます。できました
395370:2008/04/18(金) 00:33:33
>>371
レスありがとうございます。

うまくいくページとうまくいかないページがある原因がよくわかりません。。
(yahoo とかだったら、うまくいくんですが)
しかも scrollwidth はうまくとれてたりするので、
さらに意味がわからないことになってます。。
396デフォルトの名無しさん:2008/04/18(金) 01:40:53
>>374
「webアプリセキュリティ対策入門」って書籍。
サウンドハウスみたいに単純な穴つかれて個人情報漏らさないように気をつけてね。

Delphiって文字が悪い記事で新聞に載らないようにしてくださいw
397デフォルトの名無しさん:2008/04/18(金) 01:42:34
>>389
ただでさえDelphiは未来がないのに、その中でロードマップで切り捨てられることが決定している
Delphi.NETは選択肢としてありえないよ。

俺ならchrome joyrideをつかう。それならC#でいいけどな
398デフォルトの名無しさん:2008/04/18(金) 08:06:40
.NET起動遅すぎ
399デフォルトの名無しさん:2008/04/18(金) 09:33:28
動作条件に.netが入ってる時点でDLする気失せる
400デフォルトの名無しさん:2008/04/18(金) 10:06:10
最近のDelphiと一緒だな。J#まで必要だし。
401デフォルトの名無しさん:2008/04/18(金) 11:06:10
未だに.NETの起動がどうのなんて言ってるボロマシン使ってる可哀そうな方々は
一生DEL7SJISWIN32で頑張ってなよ。
今時C2Dマシンなんて2,3万で組めるのにw
402デフォルトの名無しさん:2008/04/18(金) 11:19:19
このやり取りも無断リンク論並に飽きたので
もう勘弁してほしい
403デフォルトの名無しさん:2008/04/18(金) 11:48:20
デバッグの値の文字列を全部取得する方法っってありませんか。
文字列が長いと、「...」ってのが最後に入ってそこで終わってしまいます。
404デフォルトの名無しさん:2008/04/18(金) 13:56:07
PageControl単位でマウスカーソルの出入りを監視するのってどうやればいいですか。
MouseOverだとその上に乗ってる全コントロールのMouseOverでチェックしないとうまくいかないし
それをやったところで結局正確には取れないです。

405デフォルトの名無しさん:2008/04/18(金) 15:04:21
>>403
procedure dbgPrint(s:string);
begin
  with TFileStream.Create('dbg.txt',fmCreate) do try
  Write(PChar(s)^, length(s));
  finally free end;
end;

みたいな関数を作っておいて、
実行されない場所で呼び出しておく(そうでないと実行ファイルにリンクされない)

デバッグ時に Ctrl+F7 で 評価/変更 窓を開いて
dbgPrint( 変数名 ) と打って 評価(V) で dbg.txt というファイルに中身か書き出せる
406デフォルトの名無しさん:2008/04/18(金) 15:06:44
>>404
CM_MOUSEENTER/CM_MOUSELEAVE を使うのでは駄目?
407 ◆XcB18Bks.Y :2008/04/18(金) 16:18:16
>>406
最近のバージョンではOnMouseEnter, OnMouseLeave イベントとして実装されていますね。

>>379
おおざっぱに言いますとこんな感じです。

・WideString…全部の文字が2バイト
・UTF-8…英数コードが1バイト(しかもこれらのほぼすべての文字コードがANSI文字列同じ)、
      漢字やかななどが3バイト
408デフォルトの名無しさん:2008/04/18(金) 22:54:38
ユニコードが使えるエディタを作りたいのですが、良い方法はありませんか?
こちらの環境は Delphi 5 Pro です。
409デフォルトの名無しさん:2008/04/18(金) 23:00:38
SynEdit unicode editionを使う
410デフォルトの名無しさん:2008/04/18(金) 23:02:28
>>409
多謝!
411デフォルトの名無しさん:2008/04/18(金) 23:40:25
stringの長さだけを初期化する方法でSetLength(s, len)ってやるのと
SetString(s, nil, len)ってやる方法の二つがあるみたいですが、
この二つの差って何かありますか?
412デフォルトの名無しさん:2008/04/20(日) 19:09:13 BE:626494-PLT(12660)
総合アーカイバコンポで書庫内ファイルの削除したいんだけど、
RemoveItemsメソッドの使い方教えてください
↓こんな感じで動かすと書庫本体が削除されちゃうのですが…

 DelList := TStringList.Create();
 Arc := TArchiveFile.Create(Application);

 DelList に書庫内ファイル名を突っ込む←この書庫内ファイルを削除したい

 try
  Arc.FileName := "書庫本体までのフルパス";
  Arc.Options.jso := 1; // 共有エラーの場合に処理を続行
  Arc.Options.n  := 1; // 経過非表示にする
  Arc.RemoveItems(Application.Handle, nil,'', [DelList]);
 finally
  Arc.Free;
  DelList.Free();
 end;
413デフォルトの名無しさん:2008/04/21(月) 00:35:09
>>411
SetStringで長さを設定する人を見たことが無い。
違いが気になるなら、ソース見て。

>>412
ここ見ると、追加・削除をサポートしていない形式があるみたいだけど、大丈夫?
ttp://www.geocities.jp/norg1964/cmarc/

あと、TArchiveFile.Createで例外が生成されると、DelList.Freeは実行されない。
414デフォルトの名無しさん:2008/04/21(月) 01:15:14
>>411
SetLengthはメモリを再確保した後に内容のコピーをするような分岐がありますが、
SetStringでnilを指定した場合1つの分岐だけで即座に新しい領域が割り当てられます。
なのでSetStringの方が若干速いです。

>>413
SetLengthとSetStringはともに組み込みの手続きであり、ソース上にそのものの実装は存在しません。
場合によって別々の内部手続きが呼び出されます。この場合はLStrSetLengthとLStrFromPCharLenです。
これを初心者がソースを見て判断するのは酷でしょう。
それにSetStringで長さを設定するのはVCL内に多く見られます。
実際どうなってるか知りもしないのにそのような発言をするのはよくないんじゃないかと。
415デフォルトの名無しさん:2008/04/21(月) 01:15:25 BE:209243-PLT(12660)
>>413
レスありがと
形式はzipだからおkだと思うんだ…
何か書き方が悪いのか何なのか
それとcreateもtryの内側に入れることにしようと思います><
416デフォルトの名無しさん:2008/04/21(月) 01:52:53
Createをtryの内側に入れると、今度はCreateの例外で
ArcもDelListも代入前に使われちゃう。
417デフォルトの名無しさん:2008/04/21(月) 12:31:04
>>415-516
nilで初期化しておけばおk
418デフォルトの名無しさん:2008/04/21(月) 13:25:31
みんなー、>>516まで入りたい放題だぞー
419デフォルトの名無しさん:2008/04/21(月) 16:51:44
Delphi.NET(2005)で質問です。

TStringGridの内容を帳票として成型して
プレビュー画面を表示した後、印刷したいのですが
一体どうすれば良いのでしょうか。
420デフォルトの名無しさん:2008/04/21(月) 22:35:32
Excelでフォーマットを好きなように作り、プログラムからグリッドの内容をセルに流し込み、印刷で。
421デフォルトの名無しさん:2008/04/22(火) 00:50:35
ユーザにそこまでやらせるのはひどいアプリだなぁ
422デフォルトの名無しさん:2008/04/22(火) 00:52:49
2005で、かつ Delphi.NET 使ってる時点で論外
423デフォルトの名無しさん:2008/04/22(火) 00:53:51
>>422
.NetとFirebirdでWebアプリ作ってる俺に謝れ!
424デフォルトの名無しさん:2008/04/22(火) 13:12:50
ClientDataSetに放り込んでQuickReportとかは?
425デフォルトの名無しさん:2008/04/22(火) 21:30:31 BE:975078-PLT(12660)
>>412分かる人いないかな?
426デフォルトの名無しさん:2008/04/22(火) 23:17:35
>>425
私なら直接DLLの関数を呼び出す。
427デフォルトの名無しさん:2008/04/23(水) 12:43:14
turbo DelphiでMSSQLのデータを表示したいのですが
知り合いにできない、と言われました。
プログラムそのものが初めてでこれからやろうとしていたので本当なのかどうかがわかりません。
本当にできないのですか?
428デフォルトの名無しさん:2008/04/23(水) 13:06:11
>>427
普通にできる
429デフォルトの名無しさん:2008/04/23(水) 14:20:06
>>428
ありがとうございます。これから頑張って覚えてやってみます。
友人には間違いを伝えておきます。
430デフォルトの名無しさん:2008/04/23(水) 15:17:50
>>425
確かにzipでやってみたらファイルが消えた。
lhaならできたけどzipじゃないとだめなの?
431デフォルトの名無しさん:2008/04/23(水) 15:25:14
>>426
日本語でおk
432デフォルトの名無しさん:2008/04/23(水) 19:38:35 BE:557748-PLT(12660)
>>426
DLL直だとコンポーネント使ってる意味が無いというか…
最悪それに挑戦することになりそうです。

>>430
zipで出来ないとうまくないですねー
何とかならないものかしら
433デフォルトの名無しさん:2008/04/23(水) 20:16:08
以前かなり前、TShapeの表示/非表示の切り替えが異常に遅いって
書いたモノですが、ようやく原因が分かりました。\(^o^)/
TShapeを表示させているフォームのAutoScrollをFalseにしたら、
劇的に速くなりました。良かった。これでGWは何日か休めそう
434デフォルトの名無しさん:2008/04/24(木) 03:03:11
>>432
ZIP32.pasのMainEntry2の中でコマンド実行する前に
DeleteFile( ArchiveFileName )でファイル消されてる。
それコメントアウトするとちゃんと処理できたけど、追加のとき
エラー回避のために必要みたいなコメントあるから、ファイルを
消すときだけ処理を飛ばすようにした方が安全かも。
435デフォルトの名無しさん:2008/04/24(木) 06:59:21
TMenuBarやTToolBarを使ってメニューを移動できるようにすると
メニューにマウスを乗っけるとボタンみたいになってしまうのですが
これを防ぐにはどうすればいいのでしょうか?
436デフォルトの名無しさん:2008/04/24(木) 10:56:39
DelphianWorldって亡くなりました?
437デフォルトの名無しさん:2008/04/24(木) 17:08:52
文字列型変数のアドレスを取る手続きFooがあるのですが、
その手続き内で文字列のサイズと内容をセットしたいのですが、どうすれば
いいでしょうか?
呼び出し元は
var AResult: string;
begin
 Foo(@AResult);
end;
です。
procedure Foo(P: Pointer);
begin
 // ここで文字列のサイズと内容を設定したい。
end;
438デフォルトの名無しさん:2008/04/24(木) 20:25:22
短い文字列型を使う。
439デフォルトの名無しさん:2008/04/24(木) 20:31:25
DelphiMLって今生きてるの?
4月8日からメールが流れて来ないんだが
440デフォルトの名無しさん:2008/04/24(木) 20:48:01
437です。
>>438
呼び出し元の方は変更できませんので、呼び出し先の方でなんとかしたいです。

で、とりあえず、色々やってみたのですが、
procedure Foo(P: Pointer);
begin
 Pointer(P^) := Pointer(StrNew('あいうえお'));
end;
でやると一応動いているようには見えますが、StrNewの方で参照カウントが設定
されていないので、ちょっと不安です。
呼び出し元がWideStringで
procedure Foo(P: Pointer);
begin
 Pointer(P^) := Pointer(WStrNew('あいうえお'));
end;
でやるとHeapがどうたらというエラーでコケマス。


441デフォルトの名無しさん:2008/04/24(木) 20:53:33
ぶっちゃけ

procedure Foo(var s: string);
begin
 s := 'あいうえお';
end;

これでいいじゃんと思うのは俺だけ?
442デフォルトの名無しさん:2008/04/24(木) 21:11:37 BE:1409999-PLT(12660)
>>434
なるほど、ちょっとそのへんいじってみます。
貴重な情報ありがとうございます。
443デフォルトの名無しさん:2008/04/24(木) 21:12:07
procedure Foo(ps: PWideString);
begin
 ps^ := 'あいうえお';
end;

呼出元がポインタで渡してるみたいだし俺ならこうするかな
444デフォルトの名無しさん:2008/04/24(木) 22:32:32
>>439
生きてるけど、人がいなくなって瀕死状態なのかと
445デフォルトの名無しさん:2008/04/24(木) 22:40:29
同じモジュールなら、PString(P)^ := ?? でいけそうですが。
string=WideStringなら、 >443と同じですけど。
446デフォルトの名無しさん:2008/04/24(木) 23:09:55
>>445
日本語でおk
つかおまいのこれ(>>440)はどこでStrDisposeするんだ?
どっかにリストでももってそこで管理する気か?
447デフォルトの名無しさん:2008/04/24(木) 23:45:37
>>434
オイラからもありがとう
とりあえずこうしといた
if Pos('-d',_lpszCmdLine)=0 then
DeleteFile( ArchiveFileName );
448デフォルトの名無しさん:2008/04/24(木) 23:47:09
とりあえず、445<>440だ。
449デフォルトの名無しさん:2008/04/25(金) 00:05:17
Delphian Worldは消滅したみたい。Delphi-MLは開店休業。みんなFTにいるんじゃない?
450デフォルトの名無しさん:2008/04/25(金) 01:11:53
>Delphi-MLは開店休業。みんなFTにいるんじゃない?

へっ? Delphi-ML ってメンバーが10人あまりなんか?
それは・・・瀕死状態なんでは?
451デフォルトの名無しさん:2008/04/25(金) 04:31:23
FT?
452デフォルトの名無しさん:2008/04/25(金) 07:49:08
>>440です。みなさん、ありがとうございました。
>>443,>>445さんの方法でうまくいきました。
procedure Foo(P: Pointer);
begin
 PWideString(P)^ := 'あいうえお';
end;
PStringまたは,PWideStringにキャストすれば良かったのですね。
>>441
実際のFooは仮想クラスのメソッドで派生クラスでオーバーライドしているため、
インターフェースを変える事ができません。
>>446
文字列のための動的なメモリの割り当ては、呼び出し先(この場合Foo)で行っていますが、
呼び出し元のAResultの変数が破棄される時(この場合、スコープから外れた時)に、割り当てられたメモリは自動的に
解放されると思います(たぶん)。
453デフォルトの名無しさん:2008/04/25(金) 08:47:53
質問します。よろしくお願いします。
var pArray: PInteger;
として
GetMem(pArray,100);
pArray[0]:=12;
とかすると、配列型が必要ですとエラーが出ます。
Integerのポインタを配列としてアクセスするにはどうすれば良いでしょうか。
454デフォルトの名無しさん:2008/04/25(金) 09:20:46
PIntegerArrayにキャスト。
PIntegerArray(pArray)[0]:=12;

455デフォルトの名無しさん:2008/04/25(金) 09:31:14
フォルダのパスから、そのフォルダの中にあるファイルのパスを所得するにはとうしたらいいのでしょうか?
456453:2008/04/25(金) 09:37:41
>>454
うまくいきました。ありがとうございます。
457デフォルトの名無しさん:2008/04/25(金) 09:39:00
.NET だと使えないけど absolute という便利な構文がある。

type AInteger = array [0..$ffff] of integer;
var
pInteger: ^Integer;
pArray: ^AInteger absolute pInteger;

とやれば いちいちキャストしなくても pIntegerの別名が pArrayになるんで

 pArray^[0] := 12;

と書けるよ
458デフォルトの名無しさん:2008/04/25(金) 09:45:18
>>455 意味が判らないけど
FindFirst,FindNext,FindClose
か windows API の FindFirstFile FindNextFile FindClose
の事かな?

459455:2008/04/25(金) 09:57:04
>>458
レスありがとうございます。
フォルダをフォームにD&Dしたとき
そのフォルダの中のファイルのパスがほしいという事です。
460デフォルトの名無しさん:2008/04/25(金) 10:02:26
D&D の方が判らないの?
FindFirst,FindNext,FindClose の使い方が判らないの?
461デフォルトの名無しさん:2008/04/25(金) 10:06:22
他に COM を使う方法があるよ。 やり方は
CreateOleObject('Scripting.FileSystemObject') で検索すればいいと思う
462455:2008/04/25(金) 10:11:50
>>460
FindFirstでいけそうです。ありがとうございました。
463デフォルトの名無しさん:2008/04/25(金) 13:27:08
>>453の件で便乗質問です。
私はいつも以下のようにしていますが、何かプログラム上の問題はありますか?
var
P: PIntegerArray;
i: Integer;
begin
GetMem(P,SizeOf(Integer)*10); // Integer10個分の領域確保
try
for i := 0 to 9 do
begin
P[i] := i*10000; // 順番に0,10000,20000,....90000を代入
ShowMessage(Format('P[%d] = %d',[i,P[i]]));
end;
finally
FreeMem(P); // 領域解放
end;
464デフォルトの名無しさん:2008/04/25(金) 13:59:49
>>452
P は AnsiString型変数へのポインタをPWideString型へキャストすると、おかしくなると思うよ。
AResultは常にWideString型なの?

>>463
問題ない。
465デフォルトの名無しさん:2008/04/25(金) 14:05:51
問題ないけど、この使い方なら 動的配列使えばいいのにって思うな。
466デフォルトの名無しさん:2008/04/25(金) 14:06:29
いまどきなら動的配列じゃね?
467463:2008/04/25(金) 14:17:19
>>464-466
ありがとうございます。確かに動的配列でいけました。
var
A: array of Integer;
i: Integer;
begin
SetLength(A,10);
for i := 0 to 9 do
begin
A[i] := i*10000;
ShowMessage(Format('A[%d] = %d',[i,A[i]]));
end;
468デフォルトの名無しさん:2008/04/25(金) 20:33:15
フォルダのリネームって一行ぐらいじゃできないの?
469デフォルトの名無しさん:2008/04/25(金) 20:58:09
RenameFile で出来ると思うけど?
ただ、誰かが使ってたら駄目だよ。

もしかして、自分自身が使ってるんじゃないの?
カレントフォルダを変更してみたら?
470デフォルトの名無しさん:2008/04/25(金) 21:03:42
とりあえず試してみたら? 
if not RenameFile( oldName ,NewName ) then ShowMessage( SysErrorMessage( GetLastError())) ;
471デフォルトの名無しさん:2008/04/25(金) 21:40:56
動的配列…
むかーし、なにもかもをTStringGridで処理してた時期を思い出した(涙
472デフォルトの名無しさん:2008/04/25(金) 22:04:03
それはひどすぎ。動的配列がなかったときは、配列のポインタを使ったもんだ。>>463 のように。
473468:2008/04/25(金) 23:51:18
>>469-470
ありがとう
チョット酒飲みいってたw
474デフォルトの名無しさん:2008/04/26(土) 03:04:25
CloseQueryでFalseしてMinimizeする常駐アプリが立ち上がってると
シャットダウンできないんだけどどうやってシャットダウンなりログアウトに対応すればいいの?
475デフォルトの名無しさん:2008/04/26(土) 03:47:34
WM_QUERYENDSESSIONで何とかしてみるとか
476デフォルトの名無しさん:2008/04/26(土) 07:57:20
演算結果の型についての質問です。
var
 A: Integer;
begin
 A := MaxInt;
 if A + 1 > MaxInt then
  // ほにゃらら
を実行すると、if文の条件式が偽となります。
Delphiのマニュアルを見るとオペランドがInt64でない場合は、演算結果はInteger型に
なるとのことで、if文の条件式が偽になることは納得しました。
で、if文の条件式を A + Longword(1) とすると、今度は条件式が真になります。
A + Longword(1)の型は一体何になってるのでしょうか?
477デフォルトの名無しさん:2008/04/26(土) 08:01:11
符号無し整数の演算結果は一時的にInt64になるんじゃなかったか
478デフォルトの名無しさん:2008/04/26(土) 10:59:35
型名を知りたかったらrecord型やSelfに突っ込んでエラー起こしてみるのが手っ取り早い。

var
 A: Integer;
 rec: record dum: Integer; end;
begin
 rec := LongWord(1);
  [エラー] 'Record' と 'Cardinal' には互換性がありません

 Self := A + LongWord(1);
  [警告] 符号付型と符号無し型の演算により、オペランドが拡張されまし
  [エラー] 'TForm1' と 'Int64' には互換性がありません
479デフォルトの名無しさん:2008/04/26(土) 11:53:43
RadioGroupのアイテムを一つだけ無効にすることってできますでしょうか?
480デフォルトの名無しさん:2008/04/26(土) 11:59:05
>>477,>>478
ありがとうございます。試してみます。
481デフォルトの名無しさん:2008/04/26(土) 12:21:27
482479:2008/04/26(土) 12:31:31
>>481
ありがとう
483デフォルトの名無しさん:2008/04/26(土) 19:02:08
>>474
アイコンの通知を受け取るためにAllocateHWndで定義したメッセージ処理メソッドで
処理したかったメッセージ以外はWin32APIのDefWindowProcIに投げるようにする。
484デフォルトの名無しさん:2008/04/27(日) 02:17:08
>>476
そういうことを気にしなくてもいいコードを書くべき。
485デフォルトの名無しさん:2008/04/27(日) 15:40:11 BE:487474-PLT(12660)
フリーのDelphi6でADO使いたいのですが、
ActiveXの取り込みの一覧に、Microsoft ActiveX Data Objectsがありません
また、Microsoft ADO Data Control 6.0っていうものをインストールしようとすると、
再構築時に、MSAdodcLib_TLB.pasで「'Error'は型ではありません」と再構築出来ません
どうしたらADO使えるようになりますか?
486デフォルトの名無しさん:2008/04/27(日) 15:40:29
>>484
ここは超初心者用スレだから、そんな難しいこと言われても無理。
487デフォルトの名無しさん:2008/04/27(日) 15:43:01
そもそも会話が成立してないからスルーで桶
488デフォルトの名無しさん:2008/04/27(日) 16:25:37
>>485
Turboが嫌なら金払え
489デフォルトの名無しさん:2008/04/27(日) 16:48:17
金なんか払わんよ
490デフォルトの名無しさん:2008/04/27(日) 17:39:17 BE:209243-PLT(12660)
>>488
フリーだとADO使えないの?
491デフォルトの名無しさん:2008/04/27(日) 18:09:02
Delphi6だと、DataSet系ついてないと思った。
492デフォルトの名無しさん:2008/04/27(日) 20:57:16
ADOIntf.pasついてないのか?
493デフォルトの名無しさん:2008/04/28(月) 11:53:30
TurboDelphi用のQuickReportは無いのですか?
いくら探しても…
494デフォルトの名無しさん:2008/04/28(月) 12:18:29
バンドル版じゃなくて商品版はあるんじゃね?
495 ◆XcB18Bks.Y :2008/04/28(月) 17:36:06
>>485
Turbo Delphi Explorerを導入される方が早いと思います。
統合開発環境が.NETベースなのでインストールが面倒なのがなんですが。
496デフォルトの名無しさん:2008/04/28(月) 17:42:15
Turboでコンポーネントインスコ出来たらいいんだけどなあ・・・
497デフォルトの名無しさん:2008/04/28(月) 17:48:57
買えよ
498番組の途中ですが名無しです:2008/04/28(月) 17:54:51 BE:626494-PLT(12660)
>>495
ちょっと悩みましたが、TurboDelphiを導入してみようと思います
ありがとうございました
499デフォルトの名無しさん:2008/04/28(月) 19:03:35
htmlのプレビューを、IEエンジンのように時間を掛けずに表示する方法はありますか?
THogeTextViewが一番いいと思うのですが、どう使えばいいのか分かりません・・・
500デフォルトの名無しさん:2008/04/28(月) 23:11:41
Turbo Delphi無料版で、リソースファイル(.res)を作りたいのですが、
どうすればいいでしょうか?

あるサイトで
「rcファイルを作成し、プロジェクトに追加し、コンパイルすれば、
自動的にresファイルが生成される」と書かれていたのですが、その通りに実行すると、

 [Pascalエラー] E1026 ファイル'〜〜.res'が見つかりません

というエラーになってしまいます。

よろしくお願いします。
501デフォルトの名無しさん:2008/04/28(月) 23:30:24
外部のプロセスから出力されたOutputDebugStringの文字列を取得するコンポってないですか
502デフォルトの名無しさん:2008/04/29(火) 04:48:56
503デフォルトの名無しさん:2008/04/29(火) 06:04:01
>>500
brcc32 hoge.rc

で、rcファイルをコンパイルしてみるとか。
504デフォルトの名無しさん:2008/04/29(火) 11:07:28
505デフォルトの名無しさん:2008/04/29(火) 11:25:47
504補足
プロジェクトにrcファイルを追加したら、
一旦「ファイル→全て閉じる」してから再度プロジェクトを開いてください。
これでコンパイル出来ると思います。

これってTurboDelphi無料版のバグかな?
506わかな:2008/04/30(水) 00:31:31
CのオブジェクトファイルファイルをDelphiでリンクするやり方教えて!
507デフォルトの名無しさん:2008/04/30(水) 00:43:32
{$L XYZ.obj}
508わかな:2008/04/30(水) 01:07:55
>>507
ありがとうヽ(*^。^*)ノ
509500:2008/04/30(水) 09:09:26
>>502-505
返事が遅れてすみません。>>503さんの方法で上手くいきました。

>>502 DLして試しましたが、よく分かりませんでした・・・
>>504-505 ご丁寧にありがとうございました。今後の参考にさせていただきます。
510デフォルトの名無しさん:2008/04/30(水) 17:14:21
LeadBytesってLeadByteTable: array[#0..#255] of Booleanにした方がよっぽど速いな
511デフォルトの名無しさん:2008/05/01(木) 20:44:33
Delphi2008はリリースされないの?
512デフォルトの名無しさん:2008/05/01(木) 20:50:37
Delphi2008でググればいろいろ出てくるぜ
513デフォルトの名無しさん:2008/05/01(木) 21:23:38 BE:174252-PLT(12660)
TurboDelphi入れてみたけどコンパイル遅くなったのは何で?
514デフォルトの名無しさん:2008/05/01(木) 22:43:44
そりゃそうだろう。 Windowsだって、XPからVistaにすると遅くなる。
515デフォルトの名無しさん:2008/05/01(木) 22:44:49
なるほど
516デフォルトの名無しさん:2008/05/01(木) 22:59:27 BE:469793-PLT(12660)
>>514
うん。なるほど
MS-Access入って無い環境でもmdb+ADOのアプリって動く?
517デフォルトの名無しさん:2008/05/01(木) 23:38:58
>そりゃそうだろう。 Windowsだって、XPからVistaにすると遅くなる。

そしてVistaは誰にも嫌われる、と。
確かにDelphiの最新バージョンと一緒なんだな。
518デフォルトの名無しさん:2008/05/02(金) 07:39:53
ウンコPCは窓から捨てろよ
519デフォルトの名無しさん:2008/05/02(金) 07:48:33
【Borland】CodeGearオッチャ その8【(ノ∀`)アチャー】
http://pc11.2ch.net/test/read.cgi/tech/1204612467/
520デフォルトの名無しさん:2008/05/02(金) 09:20:39
TurboDelphiとTurboDelphi.NETって共存できないの?
521デフォルトの名無しさん:2008/05/02(金) 09:57:12
>>520
できますん
522デフォルトの名無しさん:2008/05/02(金) 15:50:42
TDateTimeからUTCの時間(文字列、もしくは、年、月、日の数値)を取得する方法教えてくださいでつorz
523デフォルトの名無しさん:2008/05/02(金) 17:11:00
524デフォルトの名無しさん:2008/05/02(金) 18:03:04
ちょっと疑問なんですが、
Nowでとった時間をTQueryなんかでAsDateTimeで設定したとしたら、
UTCとして登録されるのかな?
もしかして、localtimeとして登録されちゃう?
525524:2008/05/02(金) 18:15:39
あれ?

テストしてみたら、localtimeがRDBに入ってるみたいだけど、そうなの?

これだと、登録した場所によって、時間の前後が変わっちゃうんだね。
526524:2008/05/02(金) 18:27:43
具体的には、

1.日本でNowで日時を取得
2.RDB(Firebird)のTIMESTAMP項目に、AsDateTimeで設定
3.アプリを例えばグリニッジで実行したら

このとき、1と3の日付文字列は同じになるのでしょうか?異なるのでしょうか?
527524:2008/05/02(金) 18:30:17
自分の予想としては、
DateTimeToStrはローカルタイム変換はせずローカルタイムjのみ入力可で、
RDBにはローカルタイムで登録されてるので、
同じ日付文字列になると思うのですが。。。
528デフォルトの名無しさん:2008/05/02(金) 19:06:49
もうちょっともちけつ
529524:2008/05/02(金) 19:18:36
ラジャ!

知りたいのは以下の内容です。

質問1:
RDBに日付を登録するときはローカルタイムで良いのでしょうか?
それともUTCの方が良いのでしょうか?
どちらが良いともいえない場合、どちらが一般的でしょうか?

質問2:
Nowで取得してAsDateTimeでRDBのTIMESTAMP項目に登録すると、
ローカルタイムが登録されるのでしょうか?

質問3:
上記の通り登録したRDBのTIMESTAMP項目をAsDateTimeで取ってきて、
DateTimeToStrした場合、
ロケールがどこに設定されたとしても、”日、時、分”は同じものとなるのでしょうか?
530デフォルトの名無しさん:2008/05/02(金) 21:10:45
こんばんは。
電卓のプログラム(OSに搭載されている)の3のボタンを9っていう数字に変えたいんですけど、
//電卓のウィンドウハンドルを取得
hcal :=FindWindow(nil, '電卓');
h5 :=FindWindowEx(hcal, 0, nil, '3');
if h5 <>0 then
begin
SetWindowText(h5, '9');

Sleep(100);

end;

うまくいかないのですが、どうしたらよいでしょうか?
ご教授おねがいします。

531デフォルトの名無しさん:2008/05/02(金) 22:35:49
>>524
>>質問2,3
ADO,DBExpress何を使ってるかしらんが、基本的にドライバ次第。
ひねくれた?ドライバでなければ、TimeStamp値として渡した日付時刻がそのまま
登録される。勝手に変換したりはしないと思う。渡す日付時刻をどう解釈するかは
アプリ次第。
532デフォルトの名無しさん:2008/05/02(金) 22:58:27
>>510
集合はビット演算が入るから、配列より遅くなる。 でも、メモリ消費は1/8だよ。

>>530
MSDNには、下記のようにある。
>ほかのプロセス内のコントロールのテキストを設定するには、
>SetWindowText 関数を呼び出すのではなく、直接 WM_SETTEXT メッセージを送ります。
533デフォルトの名無しさん:2008/05/03(土) 00:07:54
TStringListのDelimiterに<>などの2文字以上の文字を設定するにはどうすればいいのでしょうか
置換で代替できるとは思うのですが格好よくないので使いたくありません・・・
534デフォルトの名無しさん:2008/05/03(土) 00:16:35
>>533
無理
SetDelimitedTextルーチンをぱくって自分で書くしか。
単純な置換だと""の中まで変えちゃうから要注意。
535デフォルトの名無しさん:2008/05/03(土) 02:02:47
>>533
具体的に1文字で何ができないのかを言った方が、解決すると思う
536デフォルトの名無しさん:2008/05/03(土) 02:16:34
537デフォルトの名無しさん:2008/05/03(土) 02:19:48
>>535
すみません、リロード忘れてました
2chのDATを扱いたいので・・・
一応<だけでやってもいいとは思いますが面倒なので・・・
538デフォルトの名無しさん:2008/05/03(土) 02:22:34
>>537
TRegExpおすすめ
というかdat処理ならこういうの入れないとめんどくさくて無理
539デフォルトの名無しさん:2008/05/03(土) 02:27:38
>>538
なるほど、正規表現の手がありましたか
確かに分かりやすそうです
ありがたく使わせてもらいます
540デフォルトの名無しさん:2008/05/03(土) 08:39:07
>>532
情報ありがと。
けどメッセージ飛ばしたけど、書き換えできなかった・・・。
もう手はないかな?
541デフォルトの名無しさん:2008/05/03(土) 09:25:51
特定のウィンドウにキーを送るのではなく
グローバルホットキー、例えばCtrl+Alt+G
を発動させるコードってどう書くんですか
542|Д゚彡 ◆A6VzDeLphI :2008/05/03(土) 14:56:30
Ctrl/Shift/Alt/Winキーを受け付けるWindowsのHotKeyを登録・処理する
http://delfusa.main.jp/delfusafloor/technic/technic/049_HotKeyRegistration.html
543デフォルトの名無しさん:2008/05/03(土) 15:29:58
HotKeyを受け取って自分で処理したいのではなく
その逆にどこかのアプリで登録済みのHotKeyを
呼び出してそのアプリの機能を呼び出したいということです。
その際直接そのアプリを指定しないでキーボード操作のみの形でやりたいです。
544|Д゚彡 ◆A6VzDeLphI :2008/05/03(土) 15:46:31
key_eventで、キーをおしたことにすればいいんじゃないのかな?

特定のアプリ専用なら
俺なら、ウィンドウ列挙してそのアプリを前面にもってきてから
アクセラレータキーを送るとか、
そうするなあ。

545デフォルトの名無しさん:2008/05/03(土) 16:30:05
SetWindowsHookEx をやりたいって事のようだけど
コレは色々悪さ出来るからな。 
どっちにしても自前で解決して欲しい所。
546デフォルトの名無しさん:2008/05/03(土) 16:59:03
全部の窓からWM_GETHOTKEYで 設定されてるキーを調べて
その窓に対してコマンドを送ればいいんじゃないの?
547デフォルトの名無しさん:2008/05/03(土) 20:42:59
普通に key_event 6回だろ。
548デフォルトの名無しさん:2008/05/04(日) 09:36:12
>>545
とりあえずマウスのフックとキーボードが押されたときに反応する(フックっていうのか?)のはできるんだけど、
電卓の例の場合はどういう種類のフック使うんでしょうか?
549デフォルトの名無しさん:2008/05/04(日) 10:30:30
>>548
Delphi関係ないからAPIスレで聞け
Win32API質問箱 Build65
http://pc11.2ch.net/test/read.cgi/tech/1208847084/
550デフォルトの名無しさん:2008/05/04(日) 19:11:50
フォームではなく、特定のコンポーネントにファイルをD&Dして
受け取らせるにはどうやったらいいのでしょうか?
551デフォルトの名無しさん:2008/05/04(日) 19:19:50
フォームならできるのにコンポーネントだとできない理由は?
552デフォルトの名無しさん:2008/05/04(日) 20:51:09 BE:974887-PLT(12660)
ウインドウハンドル持ってないコンポはダメじゃなかったっけ?
553デフォルトの名無しさん:2008/05/04(日) 21:47:52
>>552
TGraphicControl派生コンポはTPanel置いてその中に置けばおk
554デフォルトの名無しさん:2008/05/04(日) 22:00:58 BE:174825-PLT(12660)
>>553
なるほど
じゃあ、アプリケーションメッセージで
if (Msg.message = WM_DROPFILES) and (Msg.hwnd = Panel1.Handle) then
こんな感じで振り分ければおkじゃね?>>>550

※FormCreateの中に↓を入れておくこと
DragAcceptFiles(Panel1.Handle, True);
Application.OnMessage := AppMessage;
555デフォルトの名無しさん:2008/05/04(日) 22:02:52 BE:626494-PLT(12660)
実際、ppMessageはこんなかんじ

procedure TFrom1.AppMessage(var Msg: TMsg; var Handled: Boolean);
begin
 if (Msg.message = WM_DROPFILES) and (Msg.hwnd = Panel1.Handle) then begin
  SetForegroundWindow(From1.Handle);
  SendMessage(Handle, WM_DROPFILES, Msg.wParam, Msg.lParam);
  Handled := True;
 end;
end;
556デフォルトの名無しさん:2008/05/04(日) 22:04:39 BE:609375-PLT(12660)
そんで更にこんな感じ

procedure TFrom1.DropFiles(var Msg:TWMDROPFILES);
const
  NameMax = 1024;
var
  DropFileCount: Integer;
  FileNameA : array[0..(NameMax + 10)] of Char;
  TempStr:String;
begin
  DropFileCount := DragQueryFile(Msg.Drop, $FFFFFFFF, nil, 0);
  DragQueryFile(Msg.Drop, 0, FileNameA, NameMax);
  //お好きな処理//


  DragFinish(Msg.Drop);
end;
557550:2008/05/04(日) 22:51:03
みなさんありがとうございます
早速やってみますね
558デフォルトの名無しさん:2008/05/04(日) 23:16:23
DragQueryPointでその位置にあるコントロールを取得しては?
559デフォルトの名無しさん:2008/05/05(月) 09:30:28
いつも助かっています。
Open SourceのでかいDelphiで書かれたソフトがあり、それで
勉強しようと思っています。CTRL−Cや’;’を押してどういう処理が
されているのかをとりあえず見たいのですが、どういう文字の検索を
すれば該当部分のコードを見れるでしょうか?
OnKeyで探したのですが、それらしき処理をしている所には飛んで
いかなかったのですが。
560デフォルトの名無しさん:2008/05/05(月) 09:38:27
実行させてみるのが一番いいと思うよ。
OnKeyって事はコンソールアプリじゃなくて GUI アプリなんだろ?

windowsGUIならイベントは全部 TAplicatioの OnMessage でひっかけられるから
この中で キーイベントを IF 文入れて ブレークポイントかけられるようにして
トレースしてゆけばいい
561デフォルトの名無しさん:2008/05/05(月) 10:43:29
もしTActionのショートカットに入ってたらソース上には現れない
フォームを右クリックしてエディタで表示して例えば「;」なら「187」って
いう生数字を探せば見つかる
562デフォルトの名無しさん:2008/05/05(月) 13:35:59
お返事ありがとうございました。
> 560
あまりよくわかっていませんが、FormCreateに
Applicaton.OnMessage:= AppMessage;
を入れて
Precedure TMainFrom.AppMessage(...)
var dummy:integer;
begin
  If msg.message=WM_Keydown then
  dummy:=1;
end;
でdummy:=1に赤線(ブレーク)をしてみましたが、そこで
止まってくれません...こういう意味ではない??

>561
187という生数字を探しましたが、ありませんでした...

MenuにもCTRL-Cのショートカットは登録してないですし
http://www.sph.sc.edu/comd/rorden/ezdicom.html
なのですが...
563デフォルトの名無しさん:2008/05/05(月) 14:06:49
MDIChildってフォームのメニューに"Ctrl+C"と";"のショートカットが割り当てられた項目あるけど違うのけ?
564デフォルトの名無しさん:2008/05/05(月) 14:43:09
あ、ありがとうございました。元Sourceをみていただいて
とても感謝しています。
Childwin.dfmの中を見ればいいんですね。
*.pasの中だけ、187の検索をしていました。
これをみると、Copyはshortcut16451とありますが、これは
CTRL+Cでいいんですよね..??
本当にありがとうございました。
565デフォルトの名無しさん:2008/05/05(月) 15:10:46
> これをみると、Copyはshortcut16451とありますが、これは CTRL+Cでいいんですよね..??

そう
566デフォルトの名無しさん:2008/05/06(火) 08:18:38
お前ら、SpTBXLibの2.0が出てますよ
ttp://club.telepolis.com/silverpointdev/index.htm
2.0からTBXが不要になりました
567デフォルトの名無しさん:2008/05/06(火) 11:44:46
SetLength(S, $7FFFFFFF)とやるとAccessViolationが
でます。Delphiは境界テスト?もろくに行われていない製品なのでしょうか?
SetLength(S, $7FFFFFFF - 10)でやっと「メモリ不足」というエラーがでます(これは
別にいいんですが)。10というのはどっからきてるんでしょうね。参照カウンタと長さ用の領域に
8バイト、終端文字に1バイト、あと?

568デフォルトの名無しさん:2008/05/06(火) 11:48:42
Delphiは境界テスト?もろくに行われていない製品なのでしょうか?
Delphiは境界テスト?もろくに行われていない製品なのでしょうか?
Delphiは境界テスト?もろくに行われていない製品なのでしょうか?
569Delフサギコ ◆A6VzDeLphI :2008/05/06(火) 13:05:03
|,,∧    
|゚Д゚彡  
|⊂ミ   
>>567さん
ほんとうだ。。よく気がついたね。
570デフォルトの名無しさん:2008/05/06(火) 13:46:54
あるいはメモリマネージャ側のエラーかもな
571デフォルトの名無しさん:2008/05/06(火) 13:55:56
今試せないけど、データ型が大きすぎとかでそんなエラーになるとオモッタなあ。違うの?Sがなんだか知らんが
572デフォルトの名無しさん:2008/05/06(火) 14:36:26
型が大きすぎでAccessViolationはねーよw
573デフォルトの名無しさん:2008/05/06(火) 15:44:02
ソース見ればアクセス違反が出るまでの経緯が分かるけど、単にチェック不足だな。
要求メモリ量が負になっても気にせず続行する男気あふれるコードだ。
574デフォルトの名無しさん:2008/05/06(火) 18:33:32
TSaveDialogでOptionsのofShowHelpをTrueにするとヘルプボタンが表示されますが
どのイベントでひろえば良いのでしょうか。
575デフォルトの名無しさん:2008/05/06(火) 21:14:47
WM_HELPを拾えばいいんでない?
576デフォルトの名無しさん:2008/05/06(火) 23:15:22
質問です^^
デルファイ7使ってるんですが
「元に戻す」(アンドゥ)ってどうやるんでしたっけ
先日分からなくて諦めました
3作業前に戻るとか出来ないんですかね^^;;;;;;
577デフォルトの名無しさん:2008/05/06(火) 23:17:48
7では無理
578デフォルトの名無しさん:2008/05/06(火) 23:35:45
>>577

まじでぇえええええ^^
あり;;
579デフォルトの名無しさん:2008/05/07(水) 09:30:11
>>575
ダイアログを表示しているフォームのOnHelpでも、TApplicationのOnmessage
でMsg.messageをWM_HELPで判定しても
procedure WMHelp(var msg: TMSG); message WM_HELP;をprivateで宣言して
やってもひろえていないようです。どうして?
580デフォルトの名無しさん:2008/05/07(水) 11:21:00
>>579
TApplication.HandleにRegisterWindowMessage(HELPMSGSTRING)で送られてるみたいだが
581デフォルトの名無しさん:2008/05/07(水) 16:08:54
>>580
ありがとう。でも分からなかったです。とほほ
582デフォルトの名無しさん:2008/05/07(水) 17:25:29
>>581
WinspectorとかでTApplicationの持つウィンドウのメッセージ監視すれば引っかかるはずだよ。
TApplication.OnMessageでは引っかからないからTApplicationのウィンドウをサブクラス化しないと受け取れないかも。
583デフォルトの名無しさん:2008/05/07(水) 20:07:13
というかダイアログのHelpContextを設定しておけば
Application.HelpFileで指定しといたヘルプ
(の該当するトピック)を開いてくれるんだが。
それ以外のことをやりたいわけ?
584デフォルトの名無しさん:2008/05/08(木) 07:27:53
TApplicationのウィンドウプロシージャーなら、Application.HookMainWindowでOK.
WM_COMMANDもどこかのウィンドウに送られている。(ダイアログのトップレベルのウィンドウかも)
585デフォルトの名無しさん:2008/05/08(木) 08:10:53
色々ありがとうございます。ちなみにHTMLヘルプなもんで…HelpContextでは
うまくいきませんでした。それから Application.HookMainWindow も少しだけ
試したんですが。もう少し気合入れて調べてみます。
586デフォルトの名無しさん:2008/05/08(木) 22:12:24
TBXを配布しているサイトが見れないのですが、TBXを再配布しているサイトはないのでしょうか?
587デフォルトの名無しさん:2008/05/08(木) 22:34:11
微妙にバージョン違い?
ttp://www.torry.net/pages.php?id=16#7246
588デフォルトの名無しさん:2008/05/08(木) 22:54:06
ありがとうございます
使ってみます
589デフォルトの名無しさん:2008/05/09(金) 02:44:36
type TSettings = class
published
 property Min: Integer;
 property Max: Integer;
 property Text: String;
 property Switch: Boolean;
end;

といったプロパティをINIファイルに自動的に読み書きさせるコードのサンプルってないのかな。
WriteComponentだとプロパティの追加削除ですぐ例外吐くから使えない。
590デフォルトの名無しさん:2008/05/09(金) 03:55:41
そのWriteComponent内で呼ばれるTWriterのコードでも見たら?
まさにそのものをやってるメソッドがあるから
591デフォルトの名無しさん:2008/05/09(金) 04:46:57
TPersistentから継承しなくても良かったっけ?
592デフォルトの名無しさん:2008/05/09(金) 05:04:16
誰か例のTGifImageの脆弱性なおしておくれ
593デフォルトの名無しさん:2008/05/09(金) 08:06:58
JaneStyleはTGifImageを修正してるみたいですね
594デフォルトの名無しさん:2008/05/09(金) 09:37:06
gifimage.pasの5992行から

while (code >= ClearCode) do
begin
//ここから
if UINT(Source) > UINT(@stack[High(stack)]) then
begin
Dec(Source);
Result := Source^;
Exit;
end;
//ここまで
Source^ := table1[code];

検証お願いします
595デフォルトの名無しさん:2008/05/09(金) 11:04:57
>>594
行けたぜGJ!
でも俺の場合5873行なんだがこれはバージョンの違い?
一応2.2なんだが・・・
596Zzz:2008/05/09(金) 11:24:39
質問お願いします
Delphi7なんですけど
(最大化最小化閉じるボタンを非表示などをした)Formを
同プロジェクト内の別のFormでも使いたくFormごとコピーして
使用したいのですがコピーやり方がわかりません
どうやれば実現できるのでしょうか???
597デフォルトの名無しさん:2008/05/09(金) 11:37:16
ExplorerでForm1.pas/.dfmをForm2.*にコピー&リネームして
ファイル内のユニット名、クラス名、Nameプロパティ名を調整。

フォーム上のコンポーネントやプロパティの設定は.dfm
イベントハンドラ等のコードは.pasにあるから適当に切り貼りしてもいいかも。

名前をつけて保存でForm2とかやっちゃうとForm1が破棄されForm2を使い出すからわけわかってないと悲惨なことに。

IDEでは使いまわし支援でリポジトリなるものをサポートしているけどほとんど使ったことない。
活用してる人っているのかね。

なんにしてもプロジェクト全体のバックアップをしてから試したほうがいいかもね。
598Zzz:2008/05/09(金) 11:40:36
やはり意外と、つらそうな道のりですね
了解しました
地味に作成しようと思います
リポジトリの使用方法も忘れてつつあるので・・・
ありがとうございました
599デフォルトの名無しさん:2008/05/09(金) 11:40:40
うちは5846行目だった

TGIFSubImgae.Decompressプロシージャ内のNextLZW関数内だよね?
600デフォルトの名無しさん:2008/05/09(金) 12:45:27
ver2.2のNextLZWの中です

ASSERT(Code < TableSize, 'Code too large');
while (code >= ClearCode) do
begin
//ここから
if UINT(Source) > UINT(@stack[High(stack)]) then
begin
Dec(Source);
Result := Source^;
Exit;
end;
//ここまで
Source^ := table1[code];
Inc(Source);
if (code = table0[code]) then
Error(sDecodeCircular);
code := table0[code];
ASSERT(Code < TableSize, 'Code too large');
end;
601デフォルトの名無しさん:2008/05/09(金) 13:17:57
>>596
継承して使うと似たようなフォームで少しだけ違うような場合に便利だよ
ファイル⇒新規作成⇒その他 で出たダイアログのタブの今のプロジェクト内から Form1を選んで
下の ・継承 を確認して [OK]
602Zzz:2008/05/09(金) 16:50:32
たびたびすいません
質問です
リストボックスやコンボックスのItems欄に選択「文字」を追加する
方法が分かりません
・・・と書くとItem addとか思われると思いますが、もう一歩進んで
その追加したを随時に追加し、且つ保存したいのです
プログラムを終了させる、プログラムを起動させる
「追加したデータが消えてる(涙・・・」
どうやれば保存できるのでしょうか
最終的には、マイナーなコンポーネントに対し保存したいのですが
基本のリストボックスやコンボックスのやり方を教授していただければ
自分で考えますので(当たり前ですけど)ヒントの程お願い致します
603デフォルトの名無しさん:2008/05/09(金) 17:09:42
終了時にファイルに保存して起動時にファイルから読み込む。
604Zzz:2008/05/09(金) 17:23:32
>>603 おしい
それも一つの手ではあるんですが、最終的にコンポーネントの
Items欄に追加したいのでItems欄に保存する方法はないのかと
言うのを知りたいのです
605デフォルトの名無しさん:2008/05/09(金) 17:31:18
質問する前に日本語を勉強する
606デフォルトの名無しさん:2008/05/09(金) 17:41:48
いまいちよくわからないがexeのどこかに保存されているであろうItemsのデフォルト値に対して保存・読み出ししたいってことか?
もしそうなら、コンパイルする度に値が吹き飛ぶぞw
607デフォルトの名無しさん:2008/05/09(金) 18:42:09
そういうことができるなら ini ファイルはいらんがな・・
608デフォルトの名無しさん:2008/05/09(金) 18:57:18
リソースを書き換えたいのか? 出来るだろうが、なんでiniファイルは駄目なんだ?
609デフォルトの名無しさん:2008/05/09(金) 21:18:12
少なくともコード書いて試して 603 に対して「おしい」とかいってるのか?
const
  DatEx='.dat';
var
  ListDat:string;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ListBox1.Items.Add(Edit1.Text);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ListDat:=ChangeFileExt(Application.ExeName,DatEx);
  if FileExists(ListDat) then
    ListBox1.Items.LoadFromFile(ListDat);
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  ListBox1.Items.SaveToFile(ListDat);
end;
ちなみにみんなの言っている「日本語でおk」は
「Items欄に保存」ってのがわからんってことだぞ
610Zzz:2008/05/09(金) 23:16:25
>>609
むむー
ListBox1.Items.SaveToFile(ListDat); で行けるかも

えっと
Items欄に保存ってゆうのは・・・・・・
コンボボックスとかは、選択肢をItems.Addしなくても事前に入れて置けるじゃないですか(うろ覚えすまん)
あれってPgで、あるボタンを押した時のイベントでItems.Addして追加しても、
Pg終了して、再度Pg再開してコンボボックスの中見ると消えてるじゃないですか(あたりまえですけど)
つまり、そのItems欄の中にデータを残しておきたい訳です

(↓コンボの中)
にんじん
だいこん
トマト

↓(いもを追加)

(↓コンボの中)
にんじん
だいこん
トマト
いも

↓(システム落として再起動)

(↓コンボの中)
にんじん
だいこん
トマト

(がーん いもは・・・・・)
611デフォルトの名無しさん:2008/05/10(土) 00:01:24 BE:348454-PLT(12660)
iniかレジストリ使うのが普通じゃね?
612デフォルトの名無しさん:2008/05/10(土) 00:55:11
自分で言ってるけど消えるのは当たり前なんです
そういうのは外部のファイルに記録しておいて
再開したときに読み込むのがいいと思います
613デフォルトの名無しさん:2008/05/10(土) 07:42:56
だから、設計時に追加した情報は、コンパイルするとリソースとしてexeに含まれるの。
614デフォルトの名無しさん:2008/05/10(土) 10:03:01
TIniFile使ってやるのが一般的じゃね?
>>610の気持ちもわからんではないが・・・逆にIDEで初期値を入れられるだけでも便利と思え!

ListBox1.Items.Commatext:=ReadString('ListBox1','Items','');

WriteString(ListBox1','Items',ListBox1.Items.CommaText);

615デフォルトの名無しさん:2008/05/10(土) 10:27:37
dfmファイルを外部に持たせればOK.
616デフォルトの名無しさん:2008/05/10(土) 11:28:00
    彡川三三三ミ
   川出 ::::::⌒ ⌒ヽ  パクリ星からやってきたお!
  出川::::::::ー●-●-)
 ..川(6|::::::::  ( 。。)) パクリ星の王子様の◆Style/kK.sだお!
 出川;;;::∴ ノ  3  ノ  
   ノ\_;;;;;;;;;;;;;;;;ノ   Janeスレ荒らしてるヒキコモリだから友達できないお!
  ( *  ヽー--'ヽ )
  (∵ ;)  ゚ ノヽ  ゚ ):) チンポは極小で包茎だお!!ちなみに童貞だお!!
  (: ・ )--―'⌒ー--`,_)
  (___)ーニ三三ニ-)
  (∴ ー' ̄⌒ヽωニЗ 好きなものは他人のソースとオナニーとwarezだお!!
   `l ・  . /メ /
    ヽ ∵  /~- /.    今日もたくさんソースパクリまくるお!!
    (__)))))_)))))
617デフォルトの名無しさん:2008/05/10(土) 14:33:41
>>566
おー、Sliverpoint乙
618デフォルトの名無しさん:2008/05/10(土) 15:14:34
>>587
今頃で申し訳ないんですがエラーが出てインストール出来ません・・・
d6perだからですかね?proだとインストールできるんでしょうか
619デフォルトの名無しさん:2008/05/10(土) 16:15:29
>>618
alpha版はdel7から対応だったように思う
2.1beta1↓
ttp://www.fileup.org/fup183413.zip.html
TB2Kのパッチは自分で探してね
620デフォルトの名無しさん:2008/05/10(土) 16:15:47
>>619
passはtbx
621デフォルトの名無しさん:2008/05/10(土) 16:22:52
>>619-620
わざわざうpしていただいてありがとうございます!
インストールしてみます
622デフォルトの名無しさん:2008/05/10(土) 16:46:04
インストールできました!
ありがとうございました!
623デフォルトの名無しさん:2008/05/10(土) 18:24:43
インストールできたのはいいんですがメニューがボタンのようになってしまいます・・・
これじゃ当初の目的が達成できないのですが、どのようにすれば普通のメニューのように出来るのでしょうか
624デフォルトの名無しさん:2008/05/10(土) 18:28:59
すみません、自己解決しました・・・
625デフォルトの名無しさん:2008/05/10(土) 18:30:40
わけわかんねー事言ってんじゃねぇよタコ
小学生からやりなおせ
626デフォルトの名無しさん:2008/05/10(土) 19:07:00
今小学5年生です・・・・
627デフォルトの名無しさん:2008/05/10(土) 19:15:49
「相撲」って人気有るんだな
映画化されて・・・と思った・・・おれは小学生からやり直すべき?
628デフォルトの名無しさん:2008/05/10(土) 19:17:12
相模だろw
629デフォルトの名無しさん:2008/05/10(土) 19:18:37
意味の解らない俺はどれからやり直せばいいんだ?
630デフォルトの名無しさん:2008/05/10(土) 20:02:46
アセンブラからだろ とーぜん
631デフォルトの名無しさん:2008/05/10(土) 20:30:43
精子から
632デフォルトの名無しさん:2008/05/10(土) 20:42:11
Office2007でコンテキストメニューを表示したとき
その上にツールバーも一緒に表示するUIが何気に便利なんだけど
あれどうやって実現するんだろう。
633デフォルトの名無しさん:2008/05/10(土) 21:24:25
実現も何も・・ただそういうウィンドウを表示してるだけだよ。
634デフォルトの名無しさん:2008/05/11(日) 03:52:32
うまく言えないんですがエスケープシーケンスのある文字列を変換するにはどうすればいいんでしょうか
たとえばabc\ndefという文字列があった時に
abc#10def(#10はもちろん文字列としてではなく)に変換するみたいなのです
635デフォルトの名無しさん:2008/05/11(日) 03:56:24
お願いします。APIを使ったプログラムに不自由してるくらいの実力の者です。

http://d.hatena.ne.jp/Wacky/20080114/1200315830
ここのサイトの通りにTMemoに検索をつけてみたんですが、検索方向が下向きに検索できるのですが、上向きには検索できません。
どうすればできるようになるのでしょうか?

ちなみに環境はWindowsXPHome,Delphi5Proです。
636デフォルトの名無しさん:2008/05/11(日) 05:17:38
>>634
つStringReplace

>>635
TFindDialog.OptionsにfrDownが設定されているかを確認して
自分で切り替える必要があります
637634:2008/05/11(日) 05:27:03
>>636
一応\nだけではなくて\tとか漢字とかもエスケープされてるようなので使えないです・・・
638デフォルトの名無しさん:2008/05/11(日) 07:56:46
>>637
つ正規表現 TRegExp
639デフォルトの名無しさん:2008/05/11(日) 08:09:33
function DecodeEscStr(const s: string): string;
var i: integer;
begin
 Result := ''; i := 1;
 while i <= length(s) do
  if s[i] in LeadBytes then
  begin Result := Result + copy(s, i, 2); inc(i, 2);
  end else begin
   if s[i] = '\' then
   begin  inc(i); case s[i] of
     'x':try
       Result := Result + char(StrToInt('$' + s[i + 1] + s[i + 2]));
       inc(i, 2);
      except end;
     'b': Result := Result + #$08;
     'a': Result := Result + #$07;
     'f': Result := Result + #$0C;
     'r': Result := Result + #$0D;
     't': Result := Result + #$09;
     'v': Result := Result + #$0B;
     'n': Result := Result + #13 + #10;
     else Result := Result + s[i];
    end;
    inc(i);
   end else begin
    Result := Result + s[i]; inc(i);
   end;
  end;
end;
640デフォルトの名無しさん:2008/05/11(日) 08:11:02
>>634 はもしかして C言語スタイルの \ エスケープでエンコードされた
文字をデコードしたいって事じゃないかと思ってサンプルコードを書いてみた
641634:2008/05/11(日) 08:27:34
>>638
TRegExpは何だかさっぱりであまり使ってません・・・

>>639,640
ありがとうございます
元のプログラムはCのようなのですがそれの仕様が良く分からないもので・・・
一応「テスト」という文字が「\83e\83X\83g」になるということは分かってます
642デフォルトの名無しさん:2008/05/11(日) 09:08:54
それは独自仕様って事だね。
     'x':try
       Result := Result + char(StrToInt('$' + s[i + 1] + s[i + 2]));
       inc(i, 2);
      except end;

この部分を

     '0'..'9' , 'A'..'F':try
       Result := Result + char(StrToInt('$' + s[i ] + s[i + 1]));
       inc(i);
      except end;

とすれば、その部分には対応すると思うけど、他にも違いがありそうだね。
仕様が判ってるのはあなただけだから、自分でやってね
643634:2008/05/11(日) 09:26:00
>>642
それで出来たようです!
ご迷惑かけました!
そしてありがとうございました!
644デフォルトの名無しさん:2008/05/11(日) 12:15:59
フォームのボタンなどのキャプションに付けるアクセラレータって言うんでしょうか
(&A)みたいにするとAltキーとAを一緒に押すとクリックされるやつですが、
コントロールが多くなってくると、どれが使われていないのか探すのが大変です。
便利なワザみたいなの、ありませんでしょうか。
645デフォルトの名無しさん:2008/05/11(日) 12:40:14
ActionList
646デフォルトの名無しさん:2008/05/11(日) 13:24:12
適当に書いてみたが何気に便利かも・・・
表示をまともにしてコマンドラインツールにして外部ツールとして実行できると使い物になりそう。
オープンダイアログで調べたいフォームのdfmファイルを指定するとこんな感じで出る。
C: Caption = '&ClickMe!'
C: Caption = 'Button1(&C)'
F: Caption = #12501#12449#12452#12523'(&F)'
R: Caption = '&Run'
X: Caption = #32066#20102'(&X)'
procedure TForm1.Button1Click(Sender: TObject);
var
    dfm, res: TStringList;
    i, idx: Integer;
begin
    OpenDialog1.InitialDir := ExtractFilePath(ParamStr(0));
    if not OpenDialog1.Execute then Exit;
    dfm:= TStringList.Create;
    res := TStringList.Create;
    try
        dfm.LoadFromFile(OpenDialog1.FileName);
        for i := 0 to dfm.Count-1 do
        begin
            idx := AnsiPos('&', dfm[i]);
            if idx > 0 then
                res.Add(UpperCase(dfm[i][idx+1]) + ':' + dfm[i]);
        end;
        res.Sort;
        ShowMessage(res.Text);
    finally
        dfm.Free;
        res.Free;
    end;
end;
647デフォルトの名無しさん:2008/05/11(日) 18:17:09
質問です。

TMemo に長いテキストを読み込ませたいのですが LoadFromFile で一気に読み込むと一瞬フリーズしたようになります。
そこで、スクロールに合わせて小分けに読み込むようにしたいのですが何か良い方法はありませんか?
648デフォルトの名無しさん:2008/05/11(日) 18:50:47
>>647
マルチスレッド
649デフォルトの名無しさん:2008/05/11(日) 19:08:34
>>648
お答えありがとうございます。
ですが、メモリを節約して小分けに読み込み表示してスクロールバーの振る舞いはファイルサイズに合ったものにしたいのですが、どうにかなりませんか?
650デフォルトの名無しさん:2008/05/11(日) 19:23:38
はなっからスクロールバーを適正サイズにしたいってこと?そりゃ無理。どれだけの行数があるのかは
読み込んでみないとわからないっしょ?
651デフォルトの名無しさん:2008/05/11(日) 19:26:12
>>650
確かにそうですね。妥協することにします。

>>647 終了です。ご回答くださった方ありがとうございました。
652デフォルトの名無しさん:2008/05/12(月) 07:36:01
TStringListにいったん読み込めばいい。
653デフォルトの名無しさん:2008/05/12(月) 15:29:15
複数キー入力を検出するにはどうすればよいでしょうか?
Ctrl+Alt+Delとかのことです。
よろしくお願いします。
654デフォルトの名無しさん:2008/05/12(月) 15:31:32
そんな無作法なツールは死ねばいい
655デフォルトの名無しさん:2008/05/12(月) 16:01:57
>>653
TShiftState
656デフォルトの名無しさん:2008/05/12(月) 23:00:01
>653
検出はいいけど、何をしたいのか具体的に書いたほうがいいと思うが。

ちなみにCtrl+Alt+Delは捕捉できないので念のため。
657デフォルトの名無しさん:2008/05/12(月) 23:01:57
BBS へ行ったと思われ
658デフォルトの名無しさん:2008/05/12(月) 23:42:30
TMemo でスクロールせずに表示できる行数を知るには ClientHeight を Font.Height で割れば良いのでしょうか?
659デフォルトの名無しさん:2008/05/13(火) 00:07:26
1分で確かめられる事をわざわざ聞きにくるな
660デフォルトの名無しさん:2008/05/13(火) 02:25:24
1分使って自分で確かめるくらいなら2分使って質問を投げる勇気を私はもちたい。
661デフォルトの名無しさん:2008/05/13(火) 03:02:10
:::::::::::.: .:. . ∧_∧ . . . .: ::::::::
:::::::: :.: . . /彡ミ゛ヽ;)ヽ、. ::: : ::
::::::: :.: . . / :::/:: ヽ、ヽ、i . .:: :.: :::
 ̄ ̄ ̄(_,ノ  ̄ ̄ヽ、_ノ ̄
662635:2008/05/13(火) 12:49:06
>>636
ありがとうございます。帰ってやってみます。
663デフォルトの名無しさん:2008/05/13(火) 21:40:18
これからDelphiをはじめる初心者ですが
TurboDelphi用の初心者向け参考書はありますか?
お勧めがあれば教えて下さい。
664デフォルトの名無しさん:2008/05/13(火) 21:50:23
>>594
>>595
>>599

melander ってしらないうちにオンラインにカムバックしてたのね
http://melander.dk/delphi/gifimage/

ここで各種 Delphi のバージョンアップ対応のメンテ版を公開していたので
同じ 2.2 でもバージョン違いが存在する
http://www.tolderlund.eu/delphi/

で、そもそも TGIFImage は CodeGear に寄贈されて最新版の3.0は Delphi 2007 に同梱と
665デフォルトの名無しさん:2008/05/13(火) 23:38:58
>>664
D2007のTGIFImage3も>>594のはバグってる
でも他のInterlaceなGifの問題は直ってたりするけど
http://www2.ttcn.ne.jp/~honkawa/images/2770.gif
666デフォルトの名無しさん:2008/05/14(水) 02:11:31
(;^ω^)今更ながらtypeとポインタが便利な事に気付いたwwww今まで時間無駄にしてたわwwwwwww
667デフォルトの名無しさん:2008/05/14(水) 05:23:00
で、TGIFImage の開発元にフィードバックしたいのだが。

で、いくつか問題起こす gif を見ましたが、なんつーか児童ポルノに厳しい国でも
レポートできるようなアニメーション GIF で再現できない物ですかねぇ
668デフォルトの名無しさん:2008/05/14(水) 09:45:09
var
Attr: Cardinal;
dv: string;


Attr:= GetFileAttributes(pchar(dv));
if (Attr and FILE_ATTRIBUTE_COMPRESSED) <> 0 then
begin
MessageDlg('Compressed.', mtError, [MBOK], 0);
end;
if (Attr and FILE_ATTRIBUTE_ENCRYPTED) <> 0 then
begin
MessageDlg('Encrypted.', mtError, [MBOK], 0);
end;

dv はドライブ名 C:\ or D:\

これで9x系のドライブスペースとNT系の圧縮フォルダとプロの
暗号化されたやつを判定できますか?
669デフォルトの名無しさん:2008/05/14(水) 14:03:27
ウィンドウハンドルを指定してそのウィンドウのキャプチャをCanvasに描くのってどうやるの?
670デフォルトの名無しさん:2008/05/14(水) 16:52:05
ランダムな2バイト文字を生成するにはどうすればいいんでしょうか
671デフォルトの名無しさん:2008/05/14(水) 17:27:16
'ランダム'


お約束すぎた?
672デフォルトの名無しさん:2008/05/14(水) 21:06:49
>>669
GetWindowRect(ハンドル,Rect);
GetDC
673デフォルトの名無しさん:2008/05/15(木) 13:49:45
calendarExと言うdelphiのカレンダーコンポーネント使ってるんですけど
Appendで特別な祭日(2008/5/6)の追加できたんですけど削除の仕方がわかりません^^;
どうやればいいのでしょう
すれ違いだと思いますが罠にもすがる思いで質問します 
674デフォルトの名無しさん:2008/05/15(木) 14:18:30
罠にすがられたいという事なんで レスしてみる

calendarEx と言われても、誰もが付けそうな名前なんで判らん。
とりあえず一番簡単なのは、Createをメソッドとして読んで
再度 設定しなおしたら駄目?
レジストリやファイルに保存してないならだけどさ
675デフォルトの名無しさん:2008/05/15(木) 15:30:39
罠???
糸・・・藁だ 藁
なるほどその手もありましたか
このソフトなんか10年くらいの前のソフトらしく四苦八苦してます
ヒントくれてありがとうございます ;;
676デフォルトの名無しさん:2008/05/15(木) 15:51:13
>>670
全2二バイト文字を抽出しておいて、そこからランダムに選んだらどうだろう。
677デフォルトの名無しさん:2008/05/15(木) 20:20:00
うーん、2バイト文字ってのも良く分からないけど
何でランダムに抽出したいのか、その使い道が気になるにょ
678デフォルトの名無しさん:2008/05/16(金) 19:09:21
>>670
文字コードにもよるが、SJISのランダムな日本語を得たいのかな?
 
679670:2008/05/16(金) 19:55:14
>>676
それだけでかなりの時間がかかりそうですですね

>>677
色々です、色々

>>678
そうです、SJISです
680デフォルトの名無しさん:2008/05/16(金) 22:17:52
結果はファイルにでもキャッシュしておけばいい。
SJISに割り当てられている全文字合わせても20KBくらいだし。
681デフォルトの名無しさん:2008/05/17(土) 01:28:40
無効な文字なら、アウトラインを取得できないかもしれないから、
それ使って判断できるかも。
682デフォルトの名無しさん:2008/05/17(土) 11:41:06
ListViewのMultiSelect=Trueの状態で
ボタンを押すと選択行を1段下げる処理をしたいのですが
<<2のところで「EAccessViolation クラスの例外」と出てしまいます
また<<2だけの処理だと複数行選択してしまいます

with ListView do begin
Items[Selected.Index].Selected := False;  //<<1
Items[Selected.Index + 1].Selected := True; //<<2
end;

他にもMultiSelectをFlaseにしてから
リストをClearSelectionしてからなど試しましたが
同じようにエラーが出てしまいます
何かよい方法はないでしょうか?
683番組の途中ですが名無しです:2008/05/17(土) 11:59:35
>>682
>選択行を1段下げる
MultiSelectだと飛び飛びで選択している場合もあるけど
その場合は?
684デフォルトの名無しさん:2008/05/17(土) 12:13:48
>>682
var
 hoge:integer;
begin
 if listview1.itemindex<0 then exit;
 hoge:=listview1.ItemIndex+1;
 listview1.ClearSelection;
 listview1.Items[hoge].Selected:=true;
 listview1.Items[hoge].focused:=true;
 listview1.SetFocus;
end;

こういう事?
MakeVisibleや行数を超える場合は知らない
685デフォルトの名無しさん:2008/05/17(土) 14:06:00
>>682
<<1でTListItem.SelectedをFalseにしているのだから
<<2のTListView.Selectedはnilになってる
686682:2008/05/17(土) 14:58:57
>>683
>>684
>>685
あ!なるほど
こんな感じで実装したら思ったようにいきました。
ありがとうございます!助かりました。

procedure TMainForm.ListMove(Next: Boolean);
var i, idx: Integer;
begin
if Next then i := 1
else i := -1;
with ListView do begin
idx := Selected.Index;
ClearSelection;
Items[idx].Selected := False;
Items[idx + i].Selected := True;
Items[idx + i].Focused := True;
end;
end;
687デフォルトの名無しさん:2008/05/17(土) 15:16:38
マルチセレクトでないなら
ListView.ItemIndex := ListView.ItemIndex + 1
でいいんじゃない?
688デフォルトの名無しさん:2008/05/18(日) 17:56:34
指定した文字列がファイルとして作成できるか確認する方法はありますか?
例えばC:\Delphi.txtを渡すとTrue、C:\Delphi\を渡すとFalseを返す、などということです
689デフォルトの名無しさん:2008/05/18(日) 18:06:56
ListViewについて質問です。
二つのカラムを作成し(A、B)、カラムAの1番目に文字列'1-1'、カラムBの1番目に文字列'1-2'、
カラムAの2番目に文字列'2-1'、カラムBの2番目に文字列'2-2'という形でリストを作成したいのですがどうすればいいでしょうか?
よろしくお願いします。
690デフォルトの名無しさん:2008/05/18(日) 18:17:14
>>688
ヘルプでFileCreate検索しろ

>>689
ListViewの扱い方をまず学べ
691デフォルトの名無しさん:2008/05/18(日) 18:21:32 BE:261735-PLT(12660)
>>689
var
  TestColumn: TListColumn;
begin
  with ListView1 do begin
    TestColumn := Columns.Add;
    TestColumn.Caption := 'A';
    TestColumn.Width := 100;
    TestColumn := Columns.Add;
    TestColumn.Caption := 'B';
    TestColumn.Width := 100;
    with Items.Add() do begin
      Caption := '1-1';
      SubItems.Add('2-1')
    end;
    with Items.Add() do begin
      Caption := '1-2';
      SubItems.Add('2-2')
    end;
  end;
end;
692デフォルトの名無しさん:2008/05/18(日) 18:24:22
>>688
字面の正しさは正規表現でチェック
'^([a-zA-Z]\:)|(\\)(\\{1}|((\\{1})[^\\]([^/:*?<>"|]*(?<!\[\])))+)$'

ディレクトリが存在してるか、アクセス権があるか等々で失敗する要因が他にもあるから
あまりがんばらずに、実際に書き込んでみてから例外拾って対応するのが定石。

>>689
for i := 1 to 2 do
 with ListView1.Items.Add do
 begin
  Caption := Format('%d-1', [i]);
  SubItems.Add(Format('%d-2', [i]);
 end;
693デフォルトの名無しさん:2008/05/18(日) 18:30:13
>>690,692
FileCreateで行けるようですね、ありがとうございました
694デフォルトの名無しさん:2008/05/18(日) 18:39:52
>>690
色々なサイトを回ったのですがSubItemの使い方について書いてあるところが見つかりませんでした。

>>691-692
ありがとうございます。
しかし、そのとおり実行してみるとカラムAの1番目に'1-1'、3番目に'2-1'
カラムBの2番目に'1-2'、4番目に'2-2'と表示され、
カラムAの2,4番目は空欄、カラムBの1,3番目も空欄、というようになります。
どうすれば1番目と2番目とで納められるでしょうか?
695デフォルトの名無しさん:2008/05/18(日) 18:48:41
本当にすみません。
>>692さんのコードでできました。お騒がせいたしました。

また、答えてくださった方ありがとうございました。
696デフォルトの名無しさん:2008/05/18(日) 18:56:07
>>691さんのコードもできました。
変に打ち間違えていたようです。
すみませんでした。
697デフォルトの名無しさん:2008/05/20(火) 06:08:00
>>696
うるせ馬鹿
死んで詫びろ
698デフォルトの名無しさん:2008/05/20(火) 06:10:06
>>690
お前も死ね
699デフォルトの名無しさん:2008/05/20(火) 17:44:20
ActionListをダブルクリックすると編集ウィンドウが開きますが、
この位置や大きさをプロジェクト単位で覚えさせとくってできます?
700デフォルトの名無しさん:2008/05/21(水) 00:32:41
知らぬ間にPngDelphi氏んでたのね
http://www.codeplex.com/PNGImage
701デフォルトの名無しさん:2008/05/21(水) 07:14:42
>>699
フリーウェアでそんなのがありそうだな。
ソフトウェア板行って聞いてみたら。
702デフォルトの名無しさん:2008/05/21(水) 11:04:56
Memo1.Lines.LoadFromFile(FileName);
とかでEUCのテキストを読み込むと文字化けしますが
これを読めるように表示することってできるのでしょうか?
テキストエディタだと見た目はeucで読み込んで表示し
保存もeucのまましてるように見えるけどあれは
内部でシフトJISに変換して表示して、保存時は再度eucに変換してるだけなんでしょうか?
703デフォルトの名無しさん:2008/05/21(水) 11:35:28
TMemoryStreamで読み込んで
nkf32.dllで変換して
Memo1.Lines.LoadFromStream
704:2008/05/21(水) 11:52:01
正整数Nを読み込み、x^2≦N<(x+1)^2となる整数x、つまり√Nの近似値を求めるプログラムを、
sqrtなどの標準関数を使わないで作りなさいという問題なんですが。。。
わかりません。教えてもらえませんか?PASCALでやっているんですが。
705702:2008/05/21(水) 11:54:14
>>703
やはりnkf32.dll等で自動判別して読み込んでsjisで表示するんですね
ありがとうございます
706デフォルトの名無しさん:2008/05/21(水) 12:04:07
>>704
良く知られた方法は 奇数を順に累計していったらという方法
function iSqr(n:Integer):Integer;
var i,sum:Integer;
begin
sum:=0;
for i:=0 to $B505 div 2 do begin
sum:=sum+1+i*2;
if sum>n then begin Result:=i;exit;end;
end;
Result:=i;
end;

大きな数字で速度がある程度必要ならバイナリー法(2分検索を行う)
さらに浮動小数点等で速度が必要ならニュートン法
707デフォルトの名無しさん:2008/05/21(水) 12:05:02
あ  div 2 は 不要だ。
708デフォルトの名無しさん:2008/05/21(水) 14:20:05
助けてください。

Form3で

procedure TForm3.FormCreate(Sender: TObject);
begin
IniFile := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));
try
pass := IniFile.Readinteger('pass', 'Pno',0);

finally
IniFile.Free;
end;

edit1.text:=inttostr(pass);
end;

んでForm1で
procedure TForm1.N1Click(Sender: TObject);
begin
Form3.ShowModal;
end;

しても
Form3のEdit1にiniのPnoデータ表示されません(;;
709デフォルトの名無しさん:2008/05/21(水) 14:50:47
わざわざForm3のOnCreateを使ってiniを読む理由は?
710デフォルトの名無しさん:2008/05/21(水) 14:54:04
>>708 何が表示されるの?
もしかして Edit1 って文字のまま? だとしたら例外が出てるんじゃないの?
711デフォルトの名無しさん:2008/05/21(水) 15:12:04
>>709
Form3(バージョン情報の画面)に
シリアルb入力してiniファイルを作成してます。
んで次回起動時にForm3を開くと
iniファイルを読んでシリアルb表示させたいんです。

712デフォルトの名無しさん:2008/05/21(水) 15:15:40
>>710
シリアルbニして数値を表示させています。
一度入力すれば問題ないのですが
起動一発目の読み込みがうまくいきません(;;
713デフォルトの名無しさん:2008/05/21(水) 15:16:52
コピペした部分のコードにはおかしいところはなさそうな気がする。
edit1.text:=inttostr(pass);
の下に
ShowMessage(Format('edit1.text=''%s'', pass=%d', [edit1.text, pass]));
って行を入れてメッセージダイアログが表示され、更に値が望んだものかどうかをチェックしてみたら。
714デフォルトの名無しさん:2008/05/21(水) 15:22:28
>>713
ダイアログ表示せず・・・
FormCreate走ってないようです
orz
715デフォルトの名無しさん:2008/05/21(水) 16:03:00
>>714
プロジェクトのオプションでForm3を自動作成の対象から外して
Form1のボタンイベントを↓に変えて実行したらどうなる?

procedure TForm1.N1Click(Sender: TObject);
begin
Form3 := TForm3.Create(nil);
Form3.ShowModal;
Form3.Free();
end;

716デフォルトの名無しさん:2008/05/21(水) 16:53:00
メニューアイテムにビットマップを動的に割り付けようと
下記のようなコードを書いたのですが、反応がありません(エラーも出ない)

New1.Bitmap.LoadFromFile('C:\hogehoge\new.bmp');

設計時にオブジェクトインスペクタから、あらかじめ bitmapを割り当てていた場合は、
その画像と入れ替わりに、ビットマップが更新されます

インスタンスがないのかと

New1.Bitmap := TBitmap.Create;
New1.Bitmap.LoadFromFile('C:\hogehoge\new.bmp');

もやってみましたが、結果は同じでした
ビットマップ読み込み後に、アップデート処理などが必要なのでしょうか?
717:2008/05/21(水) 17:34:29
>>706 $B505ってなんですか?すみません。なにもわからないもんで・・・
718デフォルトの名無しさん:2008/05/21(水) 18:35:45
>>716
新しいTBitmapオブジェクトを作ってTMenuItem.Bitmapに代入するとうまくいくよ
NewBitmap := TBitmap.Create;
NewBitmap.LoadFromFile('....');
New1.Bitmap := NewBitmap;
NewBitmap.Free; // 解放を忘れずに
719デフォルトの名無しさん:2008/05/21(水) 18:53:15
>>716
New1.Bitmap.LoadFromFile('C:\hogehoge\new.bmp');
New1.Bitmap.Canvas.Refresh;
720デフォルトの名無しさん:2008/05/21(水) 19:22:32
copy関数で何文字目とか文字数とかの設定は
関数にできないんでしょうか?
721デフォルトの名無しさん:2008/05/21(水) 19:26:32
日本語でry
722デフォルトの名無しさん:2008/05/21(水) 19:41:31
>>720
こういうこと?

function TForm1.CopyEx(S:String; Idx, Cnt:Integer):String;
begin
  Result := Copy(S,Idx,Cnt);
end;
723デフォルトの名無しさん:2008/05/21(水) 20:23:11
>>722
申し訳ないです。
関数にできないんでしょうか?
は変数にできないんでしょうか?
の間違いです。
724デフォルトの名無しさん:2008/05/21(水) 20:30:50
722に申し訳がるこた全くなし  つうか変数使えるでしょ?たぶん
725デフォルトの名無しさん:2008/05/21(水) 20:32:56
>>723
こういうこと?

var
  Idx,Cnt:Integer;
begin
  idx := 1;
  Cnt := 2;
  Edit2.Text := Copy(Edit1.Text, idx, Cnt);
end;
726デフォルトの名無しさん:2008/05/21(水) 20:45:03
>>725

a1 := edit1.text;
a2 := strtoint( a1 );

data := copy( Edit2.Text,a2,1 );

ここで悩んでます。
727デフォルトの名無しさん:2008/05/21(水) 20:49:51
はぁ?
728デフォルトの名無しさん:2008/05/21(水) 20:50:09
>>726
edit1.textに数字を入力すれば普通に動くと思う

↓またはこうする
a1 := edit1.text;
try
  a2 := strtoint( a1 );
finally
  a2 := 0;
end;

data := copy( Edit2.Text,a2,1 );
729デフォルトの名無しさん:2008/05/21(水) 20:54:58
a1 := edit1.text;
a2 := Length( a1 );

data := copy( Edit2.Text, a2, 1 );

こーゆーこと?
730デフォルトの名無しさん:2008/05/21(水) 21:16:39
いやあエスパーさんばっかいるなwww
731デフォルトの名無しさん:2008/05/21(水) 21:24:18
>>728
そこはexceptだろ
732デフォルトの名無しさん:2008/05/21(水) 21:26:00
>>731
細かいなw
733デフォルトの名無しさん:2008/05/21(水) 21:26:02
>>731
strtointdefで
734デフォルトの名無しさん:2008/05/21(水) 21:27:24
>>728
var
bno:string;
 keta:string;
k1,k2 : string;
kk1,kk2 : integer;
a1,a2 : string;

procedure TForm1.Button2Click(Sender: TObject);
begin
a1 := copy(bno,kk1,1);
a2 := copy(bno,kk2,1);

edit2.Text := a1+a2;
end;

procedure TForm1.Edit2Change(Sender: TObject);
begin
keta := edit2.text;
k1 := copy(keta,1,1);
kk1 := strtoint(k1);
k2 := copy(keta,2,1);
kk2 := strtoint(k2);
end;

コンパイルは通るのに実行するとエラーが出ます(涙)
735デフォルトの名無しさん:2008/05/21(水) 21:30:36
edit2でキー押したとたんに落ちたの?>>734
736デフォルトの名無しさん:2008/05/21(水) 21:32:51
とりあえず書き方がうざすぎる
737デフォルトの名無しさん:2008/05/21(水) 21:33:00
>>735
はい。
デバッガ例外通知が出たので
継続ってすると
”は整数ではありません
と怒られました。
738デフォルトの名無しさん:2008/05/21(水) 21:33:35
>>734
bnoには何が入ってるのよ
739デフォルトの名無しさん:2008/05/21(水) 21:34:50
>>738
ほかのEditから取り込んだ数値が入ってます。
740デフォルトの名無しさん:2008/05/21(水) 21:39:46
>>739
↓この行にブレークポイント置いてketaの中身をチェックしてみ
k1 := copy(keta,1,1);
741デフォルトの名無しさん:2008/05/21(水) 21:43:16
>>740
やってみます。
ありがとうございました
742デフォルトの名無しさん:2008/05/21(水) 21:45:58
とりあえず1度深呼吸してからヘルプのOnChangeを10000回ぐらい読んでこい>>741
743デフォルトの名無しさん:2008/05/21(水) 21:47:05
Edit&数値処理の基本
var
 n: Integer;
begin
 try
  n := IntToStr(Edit1.Text);
  ShowMessage(Format('%dの二倍は%d', [n, n * 2]));
 except
  ShowMessage(Edit1.Text + 'は数値ではない'); 
 end;
end;
744デフォルトの名無しさん:2008/05/21(水) 21:50:31
>>740
>>742
>>743

EditChangeに入れてた式を
ButtonClickに移動したらエラーが出なくなりました。

もっと勉強します
745デフォルトの名無しさん:2008/05/21(水) 21:51:48
例外がどこで起こってるかくらいてめぇで調べられないのかよ・・・
嘆かわしいのぅ
746デフォルトの名無しさん:2008/05/21(水) 21:54:31 BE:348454-PLT(12660)
>>744
頑張ってね
747デフォルトの名無しさん:2008/05/21(水) 22:56:18
IDEで挿入されるもの以外小文字で書いてる人よく見るけど見づらくないのかな
748デフォルトの名無しさん:2008/05/21(水) 23:16:44
大文字と小文字が区別されないという特徴をうまく使っていると思っている方々なんですよ、わかりません。
749デフォルトの名無しさん:2008/05/22(木) 04:34:37
TDateTimePickerのKindプロパティをdtkTimeにし、Formatプロパティに日付を表示するように設定した場合、
日付を編集し、その後に時刻を編集すると日付が元に戻ってしまうのですが、
OnChangeなどを監視するなどしか対策方法はないでしょうか
ヘルプには
「Format プロパティに日付フィールドのコードが含まれている場合には日付部分も編集できます。」
と書いてあるのに・・・
750716:2008/05/22(木) 10:04:22
>>718-719
ありがとうございました
751デフォルトの名無しさん:2008/05/22(木) 19:06:30
Delphi5, TStringGrid にデータ表示
1レコード1行の場合OnDrawCellイベントで

if Grid.Row = ARow then
begin
Grid.Canvas.Brush.Color := '紺色';
Grid.Canvas.Font.Color := '白色';
Grid.Canvas.FillRect(Rect);
end
else
begin
Grid.Canvas.Brush.Color := Grid.Color;
Grid.Canvas.Font.Color := Grid.Font.Color;
Grid.Canvas.FillRect(Rect);
end;

として、フォーカスが当たっているように見せています。

1レコード2行の場合はどうすればいいでしょうか?
Grid.Row が2の倍数で ARow = Grid.Row + 1
Grid.Row が2の倍数以外で ARow = Grid.Row - 1 の条件の時にも

背景・前景色を変更したけど、フォーカス色が残ってしまう場合があります。
OnDrawCell内で Grid.Repaint; を実行するとチラつきます。
Grid.Invalidate; だと さらに チラつきっぱなしです。

複数行フォーカスってどうやるんでしょうか?


752デフォルトの名無しさん:2008/05/22(木) 19:33:21
>>751
一行が二行に見えるように描画すればいい。
753デフォルトの名無しさん:2008/05/23(金) 10:53:01
Delphi過去ログ検索が見つからないのですが、
もしかして畳んでしまわれたのかな・・・?
http://leed.issp.u-tokyo.ac.jp/~takeuchi/delphi/nsearch.cgi
754デフォルトの名無しさん:2008/05/23(金) 11:16:34
>>753
みたいです。MLでも話題になっています
755デフォルトの名無しさん:2008/05/23(金) 15:10:14
Webサーバのあるディレクトリのファイル名の一覧を FindFirst, FindNext
みたいに HTTPで取得する方法ってあります?Delphi7 + Indy9 ですけど
756デフォルトの名無しさん:2008/05/23(金) 16:55:39
お前は行ったことの無い店の商品が分かるのか?
そういうことだ
でも店によっちゃホームページとかで公開してる場合もある
それと同じようにファイル一覧が見れるページもある
757デフォルトの名無しさん:2008/05/23(金) 17:56:19
出来たらCGIがスケスケで大問題だね
758デフォルトの名無しさん:2008/05/23(金) 17:56:57
>>753-754

MLにご本人からポストがありましたがWeb鯖が停止しているだけのようで。
閉鎖の予定は無いそうですよ。
759デフォルトの名無しさん:2008/05/23(金) 19:08:33
>>756 >>757
あ、自分のサーバーなんです。ユーザーに配るプログラムから、
特定のディレクトリのファイルを全部 GET でダウンロードできるように
したいと思いまして(そこに置くファイルは変化します)。
でも出来ないみたいなのかあ。
760デフォルトの名無しさん:2008/05/23(金) 19:12:38
>>759
それなら、ファイルの一覧を取得して返すCGIを置いといて、それにアクセスすればいいと思うよ
761デフォルトの名無しさん:2008/05/23(金) 19:31:11
自鯖ならFTPか何かで取得してもいいんじゃ?
762デフォルトの名無しさん:2008/05/23(金) 20:34:51
あ、そうか。CGI方式もFTPでもいけそうかあ。
ありがとう。FTPはパスワード変更しそうなんでCGIで検討してみます。
# 最初の質問、説明不足でスミマセンでした。
763デフォルトの名無しさん:2008/05/23(金) 23:13:48
TComboBoxでドロップダウンのアイテム選択しているとき、
DELキーを押したら選択アイテムをItemsからむ削除したいんだけど出来るかな?
ブラウザの検索履歴を消すイメージで
764デフォルトの名無しさん:2008/05/23(金) 23:18:07
そりゃできるだろ
765デフォルトの名無しさん:2008/05/23(金) 23:21:07
>>764
どーやるの?
766デフォルトの名無しさん:2008/05/23(金) 23:29:11
どこがわからないんだよ
767デフォルトの名無しさん:2008/05/23(金) 23:29:52
こいつのがんばり方が正直よくわからない
768デフォルトの名無しさん:2008/05/23(金) 23:55:45
TComboBoxでやるのは意外と大変かもよ。
ブラウザは独自のComboBoxもどきでしょうね。
769デフォルトの名無しさん:2008/05/24(土) 00:04:18
>>766
itemsの中身がペロッと出て、
そのペロッと出たリストを選んでいる状態で、
DELキーを押したときの処理なんだけど…
説明がヘタですまん
770デフォルトの名無しさん:2008/05/24(土) 00:08:32
ボタンイベントを監視してDELが押されたら現在選択中の番号取得してそこをリストから削除すりゃーいい話だろう
771デフォルトの名無しさん:2008/05/24(土) 00:12:22
ん?よくわからないんだがこれじゃだめなの?

procedure TForm1.ComboBox1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
var
 i:integer;
begin
 if key=VK_DELETE then
  for i:=0 to combobox1.Items.Count-1 do
   if combobox1.Text=combobox1.Items[i] then combobox1.Items.Delete(i);
end;

772デフォルトの名無しさん:2008/05/24(土) 00:15:18
あぁItemIndex使えばいいか
773デフォルトの名無しさん:2008/05/24(土) 00:18:20
keyPressだとうまく行かなかったけど、KeyDownならうまく行きそうだね
>>771
ありがとう
774デフォルトの名無しさん:2008/05/24(土) 00:36:26
たびたびすいません
>>771でうまくいったと思うんだけど、
ペロッと出してない状態でも、textにitemsと同じ文字列が入ってる状態で
DELキー押すとitemsから削除されちゃうのは、しょうがないですかね?
775デフォルトの名無しさん:2008/05/24(土) 00:39:13
>>774
DroppedDownは?
776デフォルトの名無しさん:2008/05/24(土) 00:43:24
>>775
それはイベントですか?
DroppedDownの意味がわからなくてすいません
777デフォルトの名無しさん:2008/05/24(土) 00:44:25
ヘルプは?
778デフォルトの名無しさん:2008/05/24(土) 00:47:27
>>777
ヘルプに乗ってました
↓こうしたらうまくいきました
助かりました!
if (ComboBox1.DroppedDown) and (key=VK_DELETE) then begin
779デフォルトの名無しさん:2008/05/24(土) 00:53:43
ループしてる時に固まることがあるのでUpdateWindowを毎回やってるのですが、それでも固まってしまいます
UpdateWindowよりも確実な方法はあるのでしょうか?
Application.ProcessMessageは遅い印象があるので使いたくないです
780デフォルトの名無しさん:2008/05/24(土) 00:56:39
>>779
スレッドに分ける
781デフォルトの名無しさん:2008/05/24(土) 01:05:51
>>780
なるほど、マルチスレッドにはあまりしたことがないので思いつきませんでした
ですがループで毎回メインフォーム弄ってたらそれも遅くなったりしませんかね?
782デフォルトの名無しさん:2008/05/24(土) 02:02:11
>779
> Application.ProcessMessageは遅い印象があるので使いたくないです
印象だけで排除するのはどうよ?つかたぶんその印象は間違っている。
783デフォルトの名無しさん:2008/05/24(土) 03:52:27
>>781
自分で考えてください
784デフォルトの名無しさん:2008/05/24(土) 07:08:07
>>779
・マルチスレッド化する
・Sleep();を入れる
マルチスレッドにしてもWait入れたりSleepしないと重くなるけどな
785デフォルトの名無しさん:2008/05/24(土) 08:37:59
特定のコンポーネントの表示を頻繁に行いたいなら
ListBox1.Items.Add('foo');
ListBox1.Repaint
みたいにすればいいし、ウィンドウのリサイズなんかの操作が固まるのを避けたいなら
Application.ProcessMessagesかスレッド使うしかない。
どうやるにしろ表示の更新は重いのには変わりない。
786デフォルトの名無しさん:2008/05/24(土) 08:39:45
ListViewならBeginUpdate / EndUpdateで大幅に高速化できるな
787デフォルトの名無しさん:2008/05/24(土) 15:08:40
Invalidateしないと、UpdateWindowだけでは更新しなかった気がするのですが。
788デフォルトの名無しさん:2008/05/24(土) 17:54:38
質問させてください。(2つに分けます。長くて申し訳ありません)

次のような宣言をされた DLL があります。(Microsoft Visual C++ 6.0)

typedef struct {
SOCKET fd; /* Socket Handle */
struct sockaddr_in m_lcd;
struct sockaddr_in m_para;
struct sockaddr_in m_serial;
timeval timeout;
int registered;
} PICNIC;

extern "C" {
__declspec(PICNIC_DLL) PICNIC *PN_open(char *ip, u_short lcd_port, u_short para_port, u_short serial_port);
__declspec(PICNIC_DLL) void PN_close(PICNIC *pn);
__declspec(PICNIC_DLL) int PN_setwhole(PICNIC *pn, int addr, int cn, ...);
}

つづく
789デフォルトの名無しさん:2008/05/24(土) 17:55:32
>>788 のつづき

この DLL にアクセスしたくて Delphi 7 でこのようにプログラムを書いてみましたが

uses WinSock

type
TPICNIC = record
fd: TSocket;
m_lcd: sockaddr_in;
m_para: sockaddr_in;
m_serial: sockaddr_in;
timeout: timeval;
registered: Integer;
end;

function PN_open(ip: PChar; lcd_port: Word; para_port: Word; serial_port: Word): TPICNIC; cdecl;
external 'PICNIC.DLL' name 'PN_open';
procedure PN_close(pn: TPICNIC); cdecl;
external 'PICNIC.DLL' name 'PN_close';
function PN_setwhole(pn: TPICNIC; addr: Integer; cn: Integer): Integer; cdecl;
external 'PICNIC.DLL' name 'PN_setwhole';

C での SOCKET 型が Delphi では TSocket と宣言すれば正しいのかわからないです。(Longint ?)
それと、PN_setwhole(PICNIC *pn, int addr, int cn, ...); の最後の「...」を
Delphi では、どのように記述すればいいのかわかりません。
どなたか教えていただけないでしょうか?
790デフォルトの名無しさん:2008/05/24(土) 19:02:15
少し書き間違ってました。
function PN_setwhole(pn: TPICNIC; addr: Integer; cn: Integer; arg: array of Integer): Integer; cdecl;
です。DLL 側のソースで
va_start(arg, cn);
for(i=0;i<cn;i++){
mask = va_arg(arg, int);
or = va_arg(arg, int);
frame[3+i*2] = mask;
frame[3+i*2+1] = or;
}
va_end(arg);
と記述されています。

791デフォルトの名無しさん:2008/05/24(土) 19:46:48
>>758
あせったわw

MLみたら、2chの書き込みまで引用されててひどい
誰だよ武内さん語ったの・・・いたずらにしてはひどい話だよ
792デフォルトの名無しさん:2008/05/24(土) 20:07:10
あれは、たかだか2chのソースでしかない話を引用した方も悪い
793デフォルトの名無しさん:2008/05/24(土) 20:17:59
くだらない筆問ですが
下記サイトで言語習得を目指そうと思います
全てを呼んだわけではありませんがサイトから抜粋

Delphiの
Object Pascal という言語をつかって、Windows 95/98/2000 が DLL
(ダイナミック・リンク・ライブラリ)として提供している
Win32 API (アプリケーション・プログラミング・インターフェース)という
関数群を呼び出してウィンドウズアプリケーションをつくる方法を解説しています

現在仕様しているソフトは無償版Turbo Delphiです
RAD環境などサイトとは異なる点がいくつかあると思いますが問題なく勉強していけるでしょうか?

これだけのボリュームと内容なので当事はかなり有名な人だったのでしょうね

ttp://homepage2.nifty.com/Mr_XRAY/Halbow/ShousaiIndex.html
794デフォルトの名無しさん:2008/05/24(土) 20:21:51
>>789
"..."は末尾にvarargsを付ける。詳しくはヘルプを読め
SOCKETはたぶん同じ。あとTPICNICをそのまま使うんじゃなくて
type
PPICNIC = ^TPICNIC
としてPPICNICを使わないとだめ(ポインタだから)
795デフォルトの名無しさん:2008/05/24(土) 20:45:52
実体を渡す事が多いようなら 参照にしてもいいと思うよ
 (var pn: TPICNIC;
みたいにさ
796デフォルトの名無しさん:2008/05/24(土) 21:18:38
ListViewに何万個ものアイテムを追加するとClearした時やフォーム自体を終了した時にものすごく時間がかかるのですが、
時間のかからないClearの方法はないでしょうか?
797デフォルトの名無しさん:2008/05/24(土) 21:45:26
仮想リストビュー使っとけ
めちゃ軽くなる
798デフォルトの名無しさん:2008/05/24(土) 21:56:23
TreeViewも標準で仮想にして欲しい
799デフォルトの名無しさん:2008/05/24(土) 22:12:19
>>797
ありがとうございます。助かりました!
800デフォルトの名無しさん:2008/05/24(土) 22:45:31
>>793
入門にはお勧めしない

勉強していくうちに言語仕様の勉強にはなるだろうが、
そのサイトでやっているのはDelphiで主に使われるライブラリ、VCLとは真逆の方向性だから。

ここに書いてあるように、Delphiの本流ではないのでいばらの道だよ
http://homepage2.nifty.com/Mr_XRAY/Halbow/Chap00.html#object
801デフォルトの名無しさん:2008/05/24(土) 22:50:52
>>794,795
とりあえず、794 さんの方法で試したところ、上手く行きました。
ありがとうございました。

特に varargs は存在そのものを知らなかったので
勉強になりました。
802デフォルトの名無しさん:2008/05/26(月) 00:04:22
CreateUpDownControlでアップダウンコントロールを
直前に作ったEditに関連付けて作ったのですが、
ウィンドウスタイルにUDS_ARROWKEYSを設定し、矢印キーで位置を移動したら
アップダウンコントロールが凹んだまま元に戻らないのですがこれは直せるのでしょうか?
アップダウンコントロールをクリックすれば元に戻るのですが・・・
また、C++で試したところ問題はなかったのですが、なぜDelphiでのみ症状が発生するのでしょうか?
803デフォルトの名無しさん:2008/05/26(月) 11:55:39
Webページの更新をチェックしたいんですが、サーバーにあるファイルの更新日時は
どうすれば取得できるのでしょうか?
804デフォルトの名無しさん:2008/05/26(月) 12:39:24
>>803
HEADリクエスト投げてLast-Modifiedでも見れば?
805デフォルトの名無しさん:2008/05/26(月) 13:18:49
>>804
出来ました!ありがとうございます。
806デフォルトの名無しさん:2008/05/27(火) 19:21:11
「'」を文字列で使いたい場合どうするんでしょう?
コードとして解釈されてしまいます。
807デフォルトの名無しさん:2008/05/27(火) 19:26:59
''''
808デフォルトの名無しさん:2008/05/27(火) 19:33:53
>>806
Chr(39)
809デフォルトの名無しさん:2008/05/27(火) 23:46:15
今から始めるなら Delphi6とTurbo Delphiどっちがいいですか?
810デフォルトの名無しさん:2008/05/27(火) 23:48:07
ガゼンDelphiだろ
811デフォルトの名無しさん:2008/05/28(水) 05:00:52
両方ともDelphiだろw
812デフォルトの名無しさん:2008/05/28(水) 07:20:01
TMediaPlayerコンポーネントを使ったソフトでmp3ファイルを開こうとすると
「指定されたファイル名拡張子からデバイスの種類を判断できません」
というエラーメッセージがでるという不具合報告がありました

ttp://d.hatena.ne.jp/tomoemon/20051031/p4
↑を読むと、DeviceTypeを明示的に指定する必要があるみたいなんですが
"MPEGVideo"に相当するTMPDeviceTypesの値はどれでしょう?
Delphi6を使っているのですが、もしかして対応してなかったりするのでしょうか?
813デフォルトの名無しさん:2008/05/28(水) 13:07:24
>>812
DeviceTypeはdtAutoSelectでmp3再生できたけど?(Del6)
書き込む前に自分で試してね
814デフォルトの名無しさん:2008/05/28(水) 13:46:59
dtAutoSelectでも、↓に拡張子とデバイスタイプを結びつけるキーが無いと>>812のエラーが出る。

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\Current Version\MCI Extensions (NT系)

不具合報告を送ってきた人の環境には、それが無いか別の値になってるのかもしれない。
ちなみにTMediaPlayerに"MPEGVideo"を指定するのはソースを見る限り無理だと思う。
815デフォルトの名無しさん:2008/05/28(水) 20:07:25
あ、オレのアプリ(Del7)のMediaPlayer使ったBGM機能もいつの間にか
mp3再生できなくなってる… wavで使ってきたから全然気が付かなかった。
開発時は再生できてたのに何でレジストリ変わっちゃったんだろ!?

それよりクレーム全然無いってのも、悲しいもんだね
816デフォルトの名無しさん:2008/05/28(水) 21:13:39
BCB使いだけどTMediaPlayerは使い勝手悪かったから、自分でDirectShow叩いてプレイヤーコンポ作っちゃったなぁ
IGraphBuilderインタフェース作成して、そこからコントロールとかビデオウィンドウとかの必要なインタフェース呼び出すだけだから
最低限の物なら50行も行かないと思う。
Delだとヘッダ使えないから面倒そうだけど。
817デフォルトの名無しさん:2008/05/28(水) 21:26:13
>>813
不具合報告がありましたってんだから環境によるものだろ
自分の環境が全てではないぞ
不具合報告にはOS書いてなかったのか?
95とかだったのでは?
818812:2008/05/28(水) 22:11:31
>>814
あやや、アプリ側で吸収してあげるのは無理っぽいですか
レジストリの値をいじってもらうのには抵抗ありますが致し方ないですな

>>815
反応ないと寂しいのは、あるある
無茶なクレームつけられるのは困るけど、
今回の人はきちんと対話ができる人だったんで
対応するほうもやる気がでます

>>817
いや、XP Proらしいっす
ただ、気になる点があるとすればMP3に関連付けられてるのが
Media Player Classicだってことでしょうか
もしかしたら、そのせいでレジストリにキーが登録されなかったのかも

レジストリの値をチェックしてもらう方向で対応してみようかと思います
皆様ありがとうございましたm(__)m
819デフォルトの名無しさん:2008/05/28(水) 22:20:35
820デフォルトの名無しさん:2008/06/01(日) 10:07:41
>>817
うるせ、バカ
821デフォルトの名無しさん:2008/06/01(日) 17:22:38
BDS2006 + Vistaのインストールに関する質問です。
http://bousyo.blog45.fc2.com/blog-entry-116.html
の手順に従ってインストールが完了しました。
(アップデートはまだです)

まずは、認証登録をしようとしたのですが、
インターネット経由では、「登録サーバーに接続できません。」で×
http://dn.codegear.com/article/33586
によると、プロクシのせいとかかれていますが、当方はプロクシが不要の環境です。

次に、webによる登録で登録を無事にすませ、
認証用テキストがかかれたメールを受取、
そのreg722.txtというファイルをホームフォルダ(.borlandの上位フォルダですよね?)
に突っ込みましたが、
「Borland Developer Studio for Windowsは動作を停止しました。
問題が発生ししたため、プログラムが正しく動作しなくなりました。
プログラムは閉じられ、解決策がある場合はWindowsから通知されます。プログラムの終了」
とダイアログが出て、まったく起動ができません。
管理者権限で実行しています。

大変困っております。
うまく起動する方法はありませんでしょうか?
822821:2008/06/01(日) 19:31:20
アップデート1、2と当てて、ホットフィックス全部当てたら起動しました。

実は、アップデート2が同じような落ち方をして、
うまくインストールできなかったのですが、
UAC切って、DEPも切ったら当てられました。

おさわがせしました。
ありがとうございました。
823デフォルトの名無しさん:2008/06/02(月) 20:08:31
あたらしいデルファイはでるんかい?
824デフォルトの名無しさん:2008/06/02(月) 21:04:25
で、出るふぁい!
825デフォルトの名無しさん:2008/06/03(火) 10:15:44
ボタンをクリックするたびに
1
2
4
8

・と2乗の数を表示させるプログラムを作りたいのですが、
{$R *.dfm}
var s: integer;
str: string;
procedure TForm1.Button1Click(Sender: TObject);
var i :integer;
begin

s :=1;
for i :=1 to 44444444 do s := i * 2;
str := IntToStr(s);
Memo1.Lines.Add(' = ' +str);
end;

end.
こんな風にしてやったら失敗しました。他にも試したのですが、ループ制御変数がどうとか出てできませんでした。
どなたか教えてください。
826デフォルトの名無しさん:2008/06/03(火) 10:27:05
DelphiのGUIプログラミングはプログラミングの仕方がちょっと独特だから最初は戸惑うかもな
type
    TForm1 = class(TForm)
        Button1: TButton;
        Memo1: TMemo;
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
private
        { Private 宣言 }
        num: Integer; // <- 変数はここ
    public
        { Public 宣言 }
    end;

implementation

procedure TForm1.FormCreate(Sender: TObject);
begin
    // 変数の初期値はここで設定
    num := 1;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
    // ボタンが押されるたびに呼び出される
    // なのでループを書く必要はない
    Memo1.Lines.Add(IntToStr(num));
    num := num * 2;
end;

end.
827デフォルトの名無しさん:2008/06/03(火) 11:14:03
>>826
ありがとうございます。
828デフォルトの名無しさん:2008/06/03(火) 15:49:25
DeviceIoControl(Handle, FSCTL_SET_SPARSE, nil, 0, nil, 0, BytesReturned, nil);

スパースファイルを作りたいんですけど
未定義の識別子 : 'FSCTL_SET_SPARSE'となります。
何をインクルードすればいいんでしょうか?
Delphi6 personal です。
829デフォルトの名無しさん:2008/06/03(火) 16:00:43
RTLには含まれていないので自分で定義してください。
830828:2008/06/03(火) 16:57:30
>>829
ども、わかりました。
831デフォルトの名無しさん:2008/06/03(火) 22:11:26
>>825
> 1
> 2
> 4
> 8
> ・
これは2乗ではないな、 1 を 起点に x2 していってるだけ

> ボタンをクリックするたびに
なら、ボタンクリックだけでいきなり44444444回もループしたらダメだろ?

Button1のTagプロパティに1をセットして、
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.Add(IntToStr(Button1.Tag));
Button1.Tag:=Button1.Tag*2;
end;
これでいいんではないか?
832デフォルトの名無しさん:2008/06/03(火) 23:10:46
2^0 = 1
2^1 = 2
2^2 = 4
2^3 = 8

1^2 = 1
2^2 = 4
3^2 = 8

の違いか。
833デフォルトの名無しさん:2008/06/03(火) 23:43:13
ぢゃ、こうか?
Button1のTagプロパティを0に戻して
Memo1.Lines.Add(FloatToStr(IntPower(2,Button1.Tag)));
Button1.Tag:=Button1.Tag+1;
834デフォルトの名無しさん:2008/06/04(水) 09:34:00
>>825
>for i :=1 to 44444444 do s := i * 2;

>>831 が
>なら、ボタンクリックだけでいきなり44444444回もループしたらダメだろ?

と、つっ込んではいるものの、なぜ「44444444」と記述したのか?
それを知りたい。
835デフォルトの名無しさん:2008/06/04(水) 10:41:03
825です
すいません。2のn乗でした。
444444としたのはとにかくどこまでも2倍ができるように作りたかったからです。
836デフォルトの名無しさん:2008/06/04(水) 11:03:00
それならforよりもwhileじゃね?
837デフォルトの名無しさん:2008/06/04(水) 11:13:03
forつかって書いてみなさい的な課題だったので・・・。
バリバリ初心者なのでわからないのですが・・・。
838デフォルトの名無しさん:2008/06/04(水) 11:30:05
なんだよその課題
教師アホすぎてワロタw
839834:2008/06/04(水) 11:53:59
>>835
とりあえず納得、ありがと。
840デフォルトの名無しさん:2008/06/04(水) 21:13:37
for でも while でも case でも if でも何でもいいじゃん
目の前の問題が解決できりゃ万々歳 でしょ?

とりあえず Delphi 実行できる環境があるんなら何でも試してみたら
いいじゃん。それで出来なかったらガンガン質問すりゃいいじゃん!

このスレ、結構ガンガン突っ込む人多いみたいだから安心だよ。
841デフォルトの名無しさん:2008/06/04(水) 21:39:52
ボタンをクリックするたびに、*2するんじゃないのか?
forの中で、キー入力待ちするの?
それとも、forで一気に*2していくのか? 見えないぞ。
842デフォルトの名無しさん:2008/06/04(水) 21:40:58
2レスで解決してるのに引っ張るねぇ
843825:2008/06/04(水) 22:28:29
先生が見せてた見本ではクリックするたびに2,4,8,16,とMemoに表示されていってました。
長引かせてしまいすいません;
プログラム板の人は親切な人が多いですね。
ありがとうございました。これからは授業ちゃんと聞きます。
課題は途中経過を書いて出します。
844デフォルトの名無しさん:2008/06/05(木) 03:17:04
こういうことじゃね?

procedure Form1.Button1Click(Sender: TObject);
var
i,j: Integer;
begin
j := 1; // 計算用変数jの初期値として1を入れておく
with Button1 do
begin
Tag := Tag + 1; // ボタンを押した回数をTagに記録
for i := 1 to Tag do// ボタンを押した回数分jに2を掛ける処理
j := j * 2;
end;
Memo1.Lines.Add(IntToStr(j));
end;
845デフォルトの名無しさん:2008/06/05(木) 15:56:11
これくらいでwith使うな
OnCreateでButton1.Tag = 1;
Button1.OnClickで
Button1.Tag = Button1.Tag * 2;
Memo1.Lines.Add(IntToStr(Button1.Tag));

又は
Button1.Tag = Button1.Tag + 1;
Memo1.Lines.Add(IntToStr(Math.Power(2,Button1.Tag)));
846デフォルトの名無しさん:2008/06/05(木) 18:09:56
>>826
でいいじゃん。
numはグローバル変数にして、
var
 num: Integer = 1;
のほうが楽かも。
847844:2008/06/05(木) 18:13:04
>>845
Button1のNameプロパティ変えたりすることを考えると、
どうしてもwith使ってしまう悪い癖は抜け切れそうに無い。
Form1のプロパティを参照したい時に面倒になるのは承知済み。
この場合、複数のボタンで使いまわし出来るよう
with TButton(Sender)の方が良かったけどね。

>>837に従って無理やりfor文を入れたけど、
for文を使わなくても良いのなら>>845でFA。
848デフォルトの名無しさん:2008/06/05(木) 19:52:52
すごい初心者で申し訳ないんのですが、
http://dn.codegear.com/jp/article/36347
ここを参考にデータベースでなんか作ってみたのですが
これをコンパイルしたときに、interbaseを起動していないとエラー落ちしてしまいます。
たとえばexeを配布するときにはどうしたいいのですかね。

すごくしょうもないこと言っていたらすいません。
849デフォルトの名無しさん:2008/06/05(木) 20:11:47
>>848
そりゃInterbaseに接続して処理するんだからしょうがない。
それと配布するとなるとインストール先にもInterbaseのライセンスが必要になる。

単一アプリケーションの内蔵データベースとしてしか使わないんであれば、Interbaseの代わりにEmbeded Firebirdの使用をおすすめ。
FirebirdはInterbase6.0互換だからVCLのInterbase接続コンポがそのままつかえる。
※IDEからデバッグ実行したときにカレントディレクトリとexeファイルのパスの違いで問題起きるので、
 アプリケーションの初期化のところでexeファイルの場所にSetCurrentDirectoryを使ってカレントディレクトリを変更しておくといい。
850デフォルトの名無しさん:2008/06/05(木) 21:35:19
A-Zの26人の人がいて、8人くらいでじゃんけんをしたとする。
その結果を書いたtxtがあって、
1.自分の勝率(自分はAとする)
2.自分のBに対する勝率
3.自分が相手にすると勝率が高い人TOP5
4.自分と一緒に勝つ確立が高い人TOP
を出力したいのですが、全然ナにやっていいかわからないで困っています。

1.テキストをTmemoに取り込んだ
2.勝った人の1人目をlistboxに出力してみた、うまくいかなかった
3.データベースは使い方がよくわからなかった
4.試合数だけ数えてみた:これはできた
5.やりたいことをするために何をすればいいのかわからなくなってきた
いまここ
851デフォルトの名無しさん:2008/06/05(木) 21:42:30
> うまくいかなかった
そのうまくいかなかった部分を言おうよ
852デフォルトの名無しさん:2008/06/05(木) 22:10:50
>>851
ReadInがうまく使えなかったw
853デフォルトの名無しさん:2008/06/05(木) 22:12:48
それじゃ誰にも答えてもらえないよ
さようなら
854デフォルトの名無しさん:2008/06/05(木) 23:02:58
>>850
文字列解析の課題かな。 txtファイルがどんなのかわからないと答えようがない。
csv形式なら、TStringList.CommaTextを使ってデータを切り分けれる。
855デフォルトの名無しさん:2008/06/05(木) 23:36:43
プログラム以前の問題でしょう。
やるべきことを整理して箇条書きにして、一歩一歩解決していくしかないでしょう。
質問が具体的じゃないと、具体的に回答できるはずもありません。
856デフォルトの名無しさん:2008/06/06(金) 00:44:00
txtをどっかにうpすれば誰かやってくれそうなもんだけどな
857デフォルトの名無しさん:2008/06/06(金) 01:43:47
書き方悪くてすいません。850です。
http://irsj.bestplaying.com/modules/result/
ここのページのhtmlを取得してやろうと思ったんですが、まずはテキストと思い、

39274 フリー@(´゚ω゚`)ナッツエレガント 2008/06/06 01:30
Win genzouzi(1648) satou(1717) Molt(1437) hujisan(1438)
Lose masa4_(1864) hyakusiki(1152) parusah(1610) against(1600)
Upload コメント (0)
こんな感じで出力されました。
これが一個のレコード?になります。なのでCSVではないです。

で、フローチャートを考えてみたのですが、それがまずわからなくて悩んでいます。

858デフォルトの名無しさん:2008/06/06(金) 03:12:34
>>855を1000回読んでから出直して来い
859デフォルトの名無しさん:2008/06/06(金) 20:44:15
何言ってんのかさっぱりわからんな
860デフォルトの名無しさん:2008/06/06(金) 22:25:14
htmlから必要なデータを抜き出したいのか。
StrPosを使って、'>Win<'を探す。
それ以降にある '</a>'を探す。 名前は >mog</a> となっているから、>から<まで抜き出す。
こんな感じでやればいいよ。
861デフォルトの名無しさん:2008/06/07(土) 10:11:55
>>859
お前がバカだからだよ
862デフォルトの名無しさん:2008/06/07(土) 13:16:05
俺ほどぢゃないだろ
863デフォルトの名無しさん:2008/06/07(土) 19:20:24
つうかこんなスレ、リキ入れて読んでられないからさ〜
酒のみながらみてるときもあるし…
できるだけわかり易い文章か母性本能くすぐりーの感じで書かないと
864デフォルトの名無しさん:2008/06/07(土) 22:15:08
>>863
MLでやれ
865デフォルトの名無しさん:2008/06/07(土) 23:31:06
質問です。
壁紙を手前に表示するソフトを作ろうと思っています。
そこで TForm と TImage を半透明にして常に手前に表示してマウスなどの入力は背後のウィンドウに渡すようにしたいのですがどうすればできますか?
866デフォルトの名無しさん:2008/06/07(土) 23:36:04
GetNextWindowで次にあるウィンドウ出して送ればいいと思う
867デフォルトの名無しさん:2008/06/08(日) 00:21:32
>>866
ありがとうございます。GetNextWindow を調べてみます。
868デフォルトの名無しさん:2008/06/08(日) 06:48:50
Delphiのフォームに画像はりつけて全画面かつ最前面表示して
後ろのExcelやExplorerを自然に操作するってことか。

フォームへのウィンドウメッセージをすべての他の適切なウィンドウに再送信しまくるなんて
かなり面倒なことをしないといけなさそうだな。たぶん挫折するだろう。

付箋紙のイメージ表示機能で我慢しておいた方がいいんじゃね。
869デフォルトの名無しさん:2008/06/08(日) 08:52:20
>>865
つ SetLayeredWindowAttributes
つ WS_EX_TRANSPARENT
870デフォルトの名無しさん:2008/06/08(日) 08:57:30
ここの人、親切。
でも「付箋紙のイメージ表示機能で我慢」になりそうです。
クリックすると逃げるようにして邪魔にならないようにしています。
でも多謝。
871デフォルトの名無しさん:2008/06/08(日) 13:48:56
delphi6なんだけど
ListViewでオーナーデータだとマルチセレクト出来ない?
出来ない場合出来るようにする方法とか教えてください
872デフォルトの名無しさん:2008/06/08(日) 23:00:30
TClientSocketでデータを数値として受け取るにはどうすればいいんでしょうか?
Ordで大丈夫なんでしょうか
873デフォルトの名無しさん:2008/06/08(日) 23:32:36
バイナリデータを受信したとき、ってこと?1バイトならOrdでいいかな。複数バイトならバイトオーダの考慮も
忘れずに。
874デフォルトの名無しさん:2008/06/08(日) 23:58:47
普通にテキスト化して送ったら
875デフォルトの名無しさん:2008/06/09(月) 23:29:59
TListViewからの派生クラスを書いているのですが、縦スクロールバー出現によるクライアントエリアの横サイズ変更に追従するには
どのメソッドで変更に追従する処理をすればよいのでしょうか?
派生クラスで実装するので、できればメソッドのオーバーライドで処理したいです。
876デフォルトの名無しさん:2008/06/10(火) 07:19:56
RGB0~255を三次元空間に見立てて
その中に数十個のピクセルをFormなりImageなりに表示するのを支援してくれる
ライブラリってないですか?
DirectXやOpenGLほどハイパフォーマンスで大げさなのじゃなくて
ちょっとしたグラフライブラリ程度のもので。
877デフォルトの名無しさん:2008/06/10(火) 13:53:10
いっていることがわからないのだが、ボクセルということだろうか
878デフォルトの名無しさん:2008/06/10(火) 14:25:41
色立体とかいう物を表示したいんじゃなかろうか。
879デフォルトの名無しさん:2008/06/10(火) 23:32:26
>>877
バカか?
880デフォルトの名無しさん:2008/06/10(火) 23:33:25
>>870
シナ人失せろ
881デフォルトの名無しさん:2008/06/10(火) 23:37:13
スマン
ど忘れして しかも ググッテも出てこない
範囲指定して字下げするのってどうやるんだっけ?
忘れちまった・・・・・
年だ・・・・
882デフォルトの名無しさん:2008/06/10(火) 23:44:14
>>881
Ctrl+Shift+I/U

フリーカーソル無効化してるならTab/Shift+Tabでもできる。
883デフォルトの名無しさん:2008/06/10(火) 23:58:55
>>882

やるね!!
まあああああああああああベラス!!
ありがとう!!

フリーカーソル?・・・・ググッタ!コンポーネントかぁ メモメモ

ついでに、選択したところ全て注釈にする方法わかりますか?
これも出来たはずなんだが・・・
884デフォルトの名無しさん:2008/06/11(水) 00:13:32
テプラ作った大切にするぉ
サンキュウ デルファイ マイスターズ
885デフォルトの名無しさん:2008/06/11(水) 09:34:41
>>879
バカっていうんなら、人にわかるように説明しろよ
886デフォルトの名無しさん:2008/06/11(水) 09:43:27
グラフライブラリって書いてあるじゃんw
887デフォルトの名無しさん:2008/06/11(水) 10:35:03
TChartって2次元までだっけか?
888デフォルトの名無しさん:2008/06/11(水) 13:39:59
>>883
選択状態にして選択範囲を右クリックしてみるといいよ。
ちなみに、Ctrl+/で出来る。
889デフォルトの名無しさん:2008/06/11(水) 14:29:00
TlistBoxを3つ並べてスクロールを同期させたいんだがどうすればいい?
890デフォルトの名無しさん:2008/06/11(水) 14:36:13
>>886
いやそこの前の話
891デフォルトの名無しさん:2008/06/11(水) 19:59:06
>>889
OnScrollで他もスクロールさせる。
892デフォルトの名無しさん:2008/06/11(水) 20:38:46
>>888

ふむふむ
ありがとう
テプラットきます
893デフォルトの名無しさん:2008/06/12(木) 12:31:07
>>888
それ、D7で出来ないみたい
あと、いつの間にか右クリックして「しおり」のテンキーの数字が効かなくなってるし
894デフォルトの名無しさん:2008/06/12(木) 21:33:02
>>893
うん
やってみた
ターボの方は出来るんですけれど
7はダメでした
報告ありがとう
でも 7でもやる方法があった様な気がするが
はて 勘違いかなあ
895デフォルトの名無しさん:2008/06/12(木) 23:12:29
MainMenuについて聞きたいんですが
項目の右側に勝手に(Z)と付くのはどうにか出来ませんか?
896デフォルトの名無しさん:2008/06/13(金) 00:38:15
>895
AutoHotKeysをmaManualに。
897デフォルトの名無しさん:2008/06/13(金) 00:50:17
>>896
ありがっとう!
898デフォルトの名無しさん:2008/06/13(金) 09:30:41
>>894
GExpertsのマクロでコメントアウトなどできた気がするよ
899デフォルトの名無しさん:2008/06/13(金) 10:59:51
http://homepage2.nifty.com/Mr_XRAY/Delphi/plSamples/790_ListView.htm#04
ここの通りにやってlistviewのカラムクリックでソートができたのですが
カラムをもう一回クリックしたら逆順ソートになるようにしたいのですが、どうしたらいいか教えてください。
900デフォルトの名無しさん:2008/06/13(金) 11:09:25
>>899
フラグでも立てて、Compareに-1掛ければいい。
901デフォルトの名無しさん:2008/06/13(金) 11:17:28
>>900
それはわかるんですけど、そのフラグがわからんのです。
そもそもcompareイベントの仕組みがよくわからなくてコピペしたのがいけないんですが・・w
902デフォルトの名無しさん:2008/06/13(金) 11:39:40
デバッガで追いかけろ
903デフォルトの名無しさん:2008/06/13(金) 11:46:29
前に書いたソートサンプル。適当に解読してくれ。

{ Private 宣言 }
ColumnToSort: Integer;
LastColumnToSort: Integer;
Ascending: Integer;

procedure TForm1.FormCreate(Sender: TObject);
begin
ColumnToSort := -1;
LastColumnToSort := -1;
end;

procedure TForm1.listviewColumnClick(Sender: TObject; Column: TListColumn);
begin
ColumnToSort := Column.Index;

if (Ascending > 0) and (ColumnToSort = LastColumnToSort) then
Ascending := -1
else
Ascending := 1;
LastColumnToSort := ColumnToSort;
listview.AlphaSort;
end;

procedure TForm1.listviewCompare(Sender: TObject; Item1, Item2: TListItem;
Data: Integer; var Compare: Integer);
begin
Compare := ( StrToInt(Item1.SubItems[ColumnToSort-1]) - StrToInt(Item2.SubItems[ColumnToSort-1]) ) * Ascending;
end;
904デフォルトの名無しさん:2008/06/13(金) 11:59:15
>>903
助かった。thx!
コピペでできてしまったので、次使うときのために解読しとくわ。
905デフォルトの名無しさん:2008/06/13(金) 13:44:41
コピペだけでアプリ一本作りそうな勢いだなww
906デフォルトの名無しさん:2008/06/13(金) 15:35:05
>>905
教科書はネットのみだからおのずとコピペが多くなってしまうのは仕方ない気がw
アプリはもうできてて今は改善している段階でふ。
907デフォルトの名無しさん:2008/06/14(土) 01:34:51
ifの条件が複数あるときはVBのようにandで繋ぐことは出来ないんでしょうか?
908デフォルトの名無しさん:2008/06/14(土) 01:38:27
そんなの入門サイトに乗ってそうだけどなあ
回答としては「出来る」よ
909デフォルトの名無しさん:2008/06/14(土) 16:33:57
listviewで表を作っているんですが
ある条件を満たしたときに画像を文字の後ろに付け足したいのですがどうすればいいですか?

column1,column2,・・・
名前,数学の点数,国語の点数,

で、数学の点数や国語の点数が80点を越えたときに
各々数学マーク.bmp、国語マーク.bmpを名前の後ろに付け足したいという意味です。
910デフォルトの名無しさん:2008/06/14(土) 17:20:45
>>907
自分で答えを書いているじゃないかw
911デフォルトの名無しさん:2008/06/14(土) 17:47:55
>>909
OwnerDrawするしかないと思う
912デフォルトの名無しさん:2008/06/14(土) 18:59:06
listviewのownerdrawか・・・激しく挫折しそうだ・・
913デフォルトの名無しさん:2008/06/14(土) 20:38:35
>>907-908
演算子の優先度がVBと違うからできないと思ったのかもしれないな
if (条件) and (条件) 〜
みたいに括弧で括らないといけないから
914 ◆XcB18Bks.Y :2008/06/15(日) 01:09:49
>>912
ListViewのOwnerDrawはOwnerDataを使っていなければそんなに難しくないと思います。
OwnerDataを使っているならHeaderコントロール+ListBoxマジオススメ。
915デフォルトの名無しさん:2008/06/15(日) 11:58:17
ListViewやListBoxの内容は直接編集出来ないんでしょうか?
916デフォルトの名無しさん:2008/06/15(日) 12:36:59
クリックしたときに、カーソル直下のセルに内容入れたTEdit生成して、TEditがフォーカス失ったらTEditの内容をセルに書き込めばいいと思うよ。
TStringGridで用が足りることも多いけどNE
917デフォルトの名無しさん:2008/06/15(日) 22:17:04
formcreateでiniファイルを読み込んで、listboxにiniの内容を書き出したいのですが
for do でループしようと思ったら、iniファイルのセクションの項目数をカウントする方法が思いつかずに
困っているのですが、これはどうしたらいいのでしょうか

逆にtxt形式にしてreadlnでuntil Eofとかしないとだめなのでしょうか。ご教授ください。
918デフォルトの名無しさん:2008/06/15(日) 22:43:28
>>917
ReadSections
919デフォルトの名無しさん:2008/06/15(日) 22:47:52
>>918
ありがとう
920デフォルトの名無しさん:2008/06/17(火) 08:04:52
>>919
自演おつ
921デフォルトの名無しさん:2008/06/18(水) 16:54:27
AnsiやUTF8の文字列をUTF32にエンコードするにはどうすればいいんでしょう?
WikipediaのUnicodeの項目を見るとUCS4とUTF32は互換性があるらしいですが、
WideStringToUCS4Stringでエンコードしても、UCS4StringをStringに正常にキャストする方法が見つからず、
UTF32かどうか確かめられません
よろしくお願いします
922デフォルトの名無しさん:2008/06/18(水) 18:44:59
WideStringToUCS4Stringがあれば、当然UCS4StringToWideStringもあるわけだけど、
直接Stringにしたいって事?
923921:2008/06/18(水) 19:30:09
すみません、自己解決しました
MBCSUtils(http://cc.codegear.com/item/25496)のAnsiStringToUtf8をしたあと、Utf8ToWideStringをしたら
望むとおりの結果がでました

>>922
そうです
UTF8にしたときは普通にStringとして取得できますが、WideStringToUCS4Stringだと
取得できないので、それを取得しようと思ったのです
924デフォルトの名無しさん:2008/06/19(木) 00:25:06
初心者です。教えて下さい。
「Borland Delphi 7 Professional」と
「Borland Delphi 7 Studio Professional」は
なにがどうちがうのですか?
925デフォルトの名無しさん:2008/06/19(木) 00:36:50
>>924
自分で調べろよ馬鹿。
926デフォルトの名無しさん:2008/06/19(木) 01:29:17
Studio は Kylix3 が付いているみたいだけど、
非Studioはどうなのか、検索しても良く分からないや。
927デフォルトの名無しさん:2008/06/19(木) 09:56:09
TMemoryStreamのオブジェクトを別のExeに渡したりできますか?
928デフォルトの名無しさん:2008/06/19(木) 11:25:48
やめとけ。MemoryStreamのデータ領域のアドレスとサイズを渡すようにするのが吉。
ん?他のexeってプロセス間通信ってこと?WM_COPYDATAかメモリマップドファイルで。
929927:2008/06/19(木) 11:31:35
巨大なメモリプールなので、2つ持ちたくないんです(><)
930デフォルトの名無しさん:2008/06/19(木) 11:33:42
ならmemmapfileだな。
MemoryStreamじゃなくてただのメモリの固まりとして共有するしかない。
931デフォルトの名無しさん:2008/06/19(木) 22:20:57
メモリマップファイルは、名前の通り、実態はファイルなんだけどね
932デフォルトの名無しさん:2008/06/19(木) 22:41:18
とは限らないよ。オプションによる。
http://itpro.nikkeibp.co.jp/article/COLUMN/20071107/286607/?P=4&ST=techskill

 メモリー・マップト・ファイルが,プロセス間の共有メモリーを実現できることはわかったが,
そのためにいちいちファイルを作成するのは面倒な話だ。
実は,CreateFileMappingの第1引数には,INVALID_HANDLE_VALUE
(ファイル・ハンドルの無効な値)を指定できるようにもなっている。
つまり,ファイルを指定せずに,ファイル・マッピング・オブジェクトを作れるのである。

 それではファイル・マッピングにならない,と思うかもしれないが,
マップするのがシステムのページング・ファイルになっただけと考えればよい。
これは結局のところ,VirtualAllocでコミットされたページと同じ状態なのである。
933デフォルトの名無しさん:2008/06/20(金) 17:30:36
Http := TIdHttp.Create
Memo.Lines.Text := Http.Get(URL)
これでcharset:EUC-JPのソースを取得すると化けるのですが解決方法あれば教えてください。
934デフォルトの名無しさん:2008/06/20(金) 17:58:00
EUCからSJISに変換する
ググればすぐ出てくる
935デフォルトの名無しさん:2008/06/20(金) 17:58:04
Shift-JISコードに変換
936933:2008/06/20(金) 22:14:26
EUC→ShiftJIS
ググった結果なんですが
1.変換テーブルみたいのを書く
2.NKF32で変換する
とでてきたわけですが

UTF8Decode(IdHttp1.Get(url));
こんな感じの簡単なIndyの関数的なものはないでしょうか?
937デフォルトの名無しさん:2008/06/20(金) 22:20:11
俺はTPzConv使ってる
938デフォルトの名無しさん:2008/06/20(金) 23:15:45
こちらもどうぞ。

jconvert.zip 1.6
http://www.geocities.jp/janeiyayo/files.html
939デフォルトの名無しさん:2008/06/21(土) 10:10:14
DelphiでUnicodeベースのアプリの作成ってどの程度現実的なんですか?
TNTを使うとコンポーネントだけでなくWindows, Classes, SysUtilsあたりの基本クラスの代替はだいたいそろっているんですか?
実際にDelphi製フリーウェアでそういうアプリも出ているんですかね。
940デフォルトの名無しさん:2008/06/21(土) 10:28:27
次期バージョンで対応する。それまでは完全対応ではなくコントロールごとの
一時しのぎだと。でないと、次期バージョンの価値がない。
941デフォルトの名無しさん:2008/06/21(土) 19:22:43
数年Delphiを使っていなかった者ですが、
Delphian worldをなくなってしまったのでしょうか?
コンポーネントが多数あり、便利に使っていたのですが。
942デフォルトの名無しさん:2008/06/21(土) 19:43:23
このスレを抽出してみたら?
俺は何とかWebArchiveで凌いでるけど・・・
943デフォルトの名無しさん:2008/06/21(土) 20:37:52
お返事とヒントどうも。
いろいろ探してみます。
944デフォルトの名無しさん:2008/06/21(土) 21:00:04
>>940
そうなのか?ウレシイ!
文字コードの対応は疲れる こんなことで時間とられたくない
なんかホントウにしんどい ってつくづく思ってた。
945デフォルトの名無しさん:2008/06/21(土) 21:03:14
Delphi2008かTiburonでググレカス
946デフォルトの名無しさん:2008/06/21(土) 21:29:19
Genericsまだ?
947デフォルトの名無しさん:2008/06/21(土) 21:40:59
Genericsと匿名メソッドもTiburonで。
948デフォルトの名無しさん:2008/06/21(土) 22:16:12
最新版のDelphi(無料)ってどれですか?
949デフォルトの名無しさん:2008/06/21(土) 22:22:53
Turbo Delphi
950デフォルトの名無しさん:2008/06/21(土) 22:30:16
>>949
ありがとうございます
早速勉強させていただきます
951デフォルトの名無しさん:2008/06/21(土) 23:57:41
>>950
うるせー馬鹿。
今度から自分で調べろ。
952デフォルトの名無しさん:2008/06/22(日) 00:52:13
pagecontrolであるタブを隠すことはできますか?

editbox使いまくってたらこんがらがってきたので、pagecontrolで整理しようと考えているんですが、
今まではvisibleでfalseにして隠していたのですが、tabsheet2に隠すとしてもタブが表示されてしまうと
何も表示されないタブが出現してしまうので困っています。

tabのvisibleをfalseにしても実行するとtrueに戻って表示されてしまうんですよね・・・
953デフォルトの名無しさん:2008/06/22(日) 01:03:19
tabvisible
954デフォルトの名無しさん:2008/06/22(日) 01:39:53
>>952
自演お疲れ
955デフォルトの名無しさん:2008/06/22(日) 02:13:58
tabcontrolにはtabvisibleがあるんですが
pagecontroleにはtabvisibleがなくて困ってるんです・・・
956デフォルトの名無しさん:2008/06/22(日) 02:26:34
すいません逆に考えてました。
自己解決sry
957デフォルトの名無しさん:2008/06/22(日) 03:10:52
Jane Doe Styleのスレッド本文の表示には何のコンポーネントを使っているのでしょうか?
958デフォルトの名無しさん:2008/06/22(日) 06:32:57
>>939
SpTBXLibとか使っているのがちらほら散見される。
使っている人は使っているという印象だな。
959デフォルトの名無しさん:2008/06/22(日) 06:34:18
>>957
つWinSpector
960デフォルトの名無しさん:2008/06/22(日) 08:08:52
無料だしDelphi始めてみようと思って、一番新しそうな2007を
入れてみようと思ったが有償じゃねーか!!!
結局何をインストールすりゃいいんだよ!
961デフォルトの名無しさん:2008/06/22(日) 08:34:43
960
ターボデルファイ
962デフォルトの名無しさん:2008/06/22(日) 08:35:24
考えてみたらデルファイって毎年VerUpしてねえ?
963デフォルトの名無しさん:2008/06/22(日) 10:17:57
ここ数年は「お布施」でしたよ。D7 で十分。
964デフォルトの名無しさん:2008/06/22(日) 12:18:59
>>957
JaneLovelyで使われてたもの。名前はTMDITextView

StyleはLovelyベースてゆうかパクリ版。Lovelyのソースが今公開されてるのかは知らん。
なければOpenJaneDoeのTHogeTextView使え
965960:2008/06/22(日) 12:19:54
>>963
おk、D7ってやつを入れてみるぜ
966デフォルトの名無しさん:2008/06/22(日) 12:32:27
Delphi7? どこで手に入れるんだ?
967デフォルトの名無しさん:2008/06/22(日) 12:33:23
>>964
mjk!!
LovelyのソースみてみたけどTHogeTextViewじゃなかったのか・・・orz

>>965
まあちょっと前くらい嫁って話なんですけどね
968デフォルトの名無しさん:2008/06/22(日) 12:45:09
ってTMDITextViewはTHogeTextView継承やん・・・
969デフォルトの名無しさん:2008/06/22(日) 13:13:32
>>968
当たり前だろ、この馬鹿。
970デフォルトの名無しさん:2008/06/22(日) 13:17:15
なんか変なのが湧いてるが、
> 無料だし
そういうかたはVSへどうぞ。
971デフォルトの名無しさん:2008/06/22(日) 13:37:00
>>959>>964
ありがとうございました!
972デフォルトの名無しさん:2008/06/22(日) 13:45:22
無料だからいいっていうなら、Visual Stuidoをお勧めしておくぞ。
さすがに今は・・・
973デフォルトの名無しさん:2008/06/22(日) 14:57:24
ふじさんwwwwwww
974デフォルトの名無しさん:2008/06/22(日) 18:23:03
あ、無料じゃないのね・・・
すまん、調査不足。
VBに挑戦してみるわ
何回もすまん
975デフォルトの名無しさん:2008/06/22(日) 18:38:22
Delphi for Rubyっていつ出るの?
976デフォルトの名無しさん:2008/06/22(日) 19:28:17
7の無料ってなんか本についてなかったけ
記憶違いかもしれない蹴れど
アマゾンで検索してくり
977デフォルトの名無しさん:2008/06/22(日) 19:34:25
無料じゃなくて体験版では?
978デフォルトの名無しさん:2008/06/22(日) 19:52:14
>975
多分永久に出ない。3rd Railなら既に出てるけど。
979デフォルトの名無しさん:2008/06/22(日) 22:25:17
Delphi6をインストールした後に、Turbo Delphiをインストールすると
関連付けがTurbo Delphiに変わってしまいました。
再び、Delphi6に戻すにはどうすればよいですか?
980デフォルトの名無しさん:2008/06/22(日) 22:30:10
インストール時に関連付けするかどうか選べたはずだが・・
981デフォルトの名無しさん:2008/06/22(日) 22:30:15
コントロールパネルのフォルダオプション
982デフォルトの名無しさん:2008/06/23(月) 18:46:55
Editに
kanji
と言う文字列が入っていた場合に
IMEを起動して
かんじ
という入力状態にするやり方があったら教えてください
983デフォルトの名無しさん:2008/06/23(月) 23:44:36
>>982
しるかよバカ。
984デフォルトの名無しさん:2008/06/23(月) 23:45:28
>>974
自演うぜぇ
985デフォルトの名無しさん:2008/06/24(火) 00:16:09
>982
Imm*系のAPIでできるのかもしれないけどよくわからない。
986デフォルトの名無しさん:2008/06/24(火) 10:02:24
987デフォルトの名無しさん:2008/06/24(火) 11:10:56
おおすごい。短いコードだけど、知らないとまったく手がでません。
988デフォルトの名無しさん:2008/06/24(火) 12:25:47
すいません質問です。
PageControlでMultilineを使用した際、特定の行で折り返したいのですがそんなことは可能なんでしょうか?

ex)
A|B|C|D|E|F|G

Eで折り返したい

E|F|G
A|B|C|D|
989デフォルトの名無しさん:2008/06/24(火) 13:51:10
>>988
TabWidthで無理矢理とか。
990デフォルトの名無しさん:2008/06/24(火) 14:27:03
>>989
レスありがとうございます。
すいません説明が足りませんでした。
H|I|J|K|L|
E|F|G
A|B|C|D|

のようにさらに上にカテゴリがあるのです。
やはりPageControlを重ねるかCaptionで無理やり調整するしかありませんかね。
991 ◆XcB18Bks.Y :2008/06/24(火) 16:20:17
もう990なのでスレ立て行ってきますね。
書き込みはもう少し我慢してくださいまし。
992デフォルトの名無しさん:2008/06/24(火) 16:25:26
>>988
TabControl三段重ねとかw
993 ◆XcB18Bks.Y :2008/06/24(火) 16:26:28
立ちました。

くだすれDelphi(超初心者用)その47
http://pc11.2ch.net/test/read.cgi/tech/1214292265/

>>1の過去スレページへのリンクがうまくいかなかったので変更しました。
関連スレはすべて生き残っていたのでそのままです。
994デフォルトの名無しさん:2008/06/24(火) 16:50:01
教えてください。
Builderで
int hoge;
AnsiString s;
s.printf("%d",hoge);
これをDelphiではどのように記述すればいいのでしょうか。
995デフォルトの名無しさん:2008/06/24(火) 17:11:10
s := Format('%d', [hoge]);
996デフォルトの名無しさん:2008/06/24(火) 17:12:53
>>994
var
997デフォルトの名無しさん:2008/06/24(火) 17:13:14
>>994
hoge:Integer;
998デフォルトの名無しさん:2008/06/24(火) 17:13:35
>>994
s:String;
999デフォルトの名無しさん:2008/06/24(火) 17:13:56
>>994
begin
1000デフォルトの名無しさん:2008/06/24(火) 17:14:17
>>994
s:=Format('%d',[hoge]);
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。