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

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

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

<その他>
ボーランド
http://www.borland.co.jp/
DelWiki
http://onigiri.s3.xrea.com:8080/delphi/

2デフォルトの名無しさん:05/02/02 17:23:11
3デフォルトの名無しさん:05/02/02 17:36:12
>>1

>>前スレ994レスありがd

前スレ993ですが
ttp://pc5.2ch.net/test/read.cgi/tech/1104511938/993

Printer.Canvas.Draw(150,650,BarImage1.Picture.Bitmap);
こんな感じでバーコード印刷しているのですが、ドットインパクト、仮想プリンタはいいんですが
USB接続のレーザープリンタでは、印刷されません。アドバイスよろしくおねがいします。
4デフォルトの名無しさん:05/02/02 18:00:35
>>3
↓自分はこの辺のAPIを使ってプリンタの解像度を求めてサイズを補正してます
GetDeviceCaps(Printer.Handle, HorzRes);
GetDeviceCaps(Printer.Handle, HorzSize)
GetDeviceCaps(Printer.Handle, VertRes)
GetDeviceCaps(Printer.Handle, VertSize)
ただ、このやりかたは
Delphi2の頃作ったプレビュー用コンポーネントで使っているものなので
今はもっとスマートな方法があるかも知れませんけど
53:05/02/02 18:38:34
>>4
頑張ってみます。ありがとうございました。
6デフォルトの名無しさん:05/02/02 20:07:07
フレームにボタンを貼り付けて複数のフォームで利用しています。
ここでフォームの背景を TImage を利用して変更していますが、
フレームのところだけ透明になりません。

フレームのボタン以外を透明にする方法ってないものでしょうか。
7デフォルトの名無しさん:05/02/02 21:07:19
TSuper = class .... end;
TSub1 = class(THoge) .... end;
TSub2 = class(THoge) .... end;

という宣言をして、TSub1 や TSub2 のインスタンスを TList に Add したとします。
それらのインスタンスを解放したい時、どうすればいいでしょうか?

TList から取り出したポインタを TSuper にキャストして Free すると、
TSuper.Free が呼ばれて、メモリリークしてしまうのでしょうか?

もしダメなら、TSuper に Sub1 か Sub2 か識別する為のメンバを作りますです。
87:05/02/02 21:08:24
失礼しました。訂正します。

× TSub1 = class(THoge) .... end;
× TSub2 = class(THoge) .... end;

○ TSub1 = class(TSuper) .... end;
○ TSub2 = class(TSuper) .... end;
9デフォルトの名無しさん:05/02/02 21:44:02
クリップボードの情報を形式に関係なく数値として取り出して変数に代入したいです
要するにバイナリエディタの入り口部分の機能ですがどうしたらいいのでしょうか
10デフォルトの名無しさん:05/02/02 21:55:43
チェ十
11デフォルトの名無しさん:05/02/02 22:34:37
>>7
TSub1 TSub2にデストラクタ実装して、TSuperでFreeしてみたら? 自分で実際に実験してそして理解せよ。
つーか、普通はTObjectのFreeだよね。デストラクタはDestroyですよ。
12デフォルトの名無しさん:05/02/02 22:38:20
TObject(list[0]).FreeでOK。

ついでのオブジェクトの種類を判定したければ
if TObject(list[0]) is TSub1 then TSub1(list[0]).Sub1Method;
つうかTObjectList使え。
13デフォルトの名無しさん:05/02/02 22:41:21
>>9
ハンドルからポインタを取得したり、GDIオブジェクトは独自解釈かな。
とりあえず、WinAPIの基礎を学べ。つーかMSDNでも見ろ。
147:05/02/02 22:57:50
ご回答ありがとうございました。

>>11-12
失礼しました。
TObject.Free でいい、との事なので安心しました。
自分でも実験プログラムなど書いて試したのですが、いまいち確信が持てなかったので……。
結果的に、こういった定石のような書き方を教えて頂いたので、質問して良かったと思っています。

> つうかTObjectList使え。
全くです。というか、忘れていました。すいません……。 orz        o
ついでに言うと、is演算子も忘れていました。重ね重ねすいません……。 ` rz
159:05/02/02 23:00:07
>>13
ハンドルからポインタを取得というのはこの辺りですよね

var
MyHandle: THandle;
TextPtr: PChar;
begin
ClipBoard.Open;
try
MyHandle := Clipboard.GetAsHandle(CF_TEXT); //とりあえずテキスト
TextPtr := GlobalLock(MyHandle);

finally
Clipboard.Close;
end;

ここから先は初心者では無理ということですか?
16デフォルトの名無しさん:05/02/02 23:10:51
Byte(TextPtr[0]) こうすればバイトになるだろ。
16進数に変換する方法は、自分で決めよう。
関数使うもよし、テーブル使って高速化するもよし。
17デフォルトの名無しさん:05/02/02 23:20:35
> クリップボードの情報を形式に関係なく

格納されている情報の種類は一種類とは限らないよ。形式を指定しなければ
内容の保証もできないと思うけど?
18デフォルトの名無しさん:05/02/02 23:26:55
データ取るだけならformatsのループ回してから
buf: array of byte;
setlength(buf, getdatasize(myhandle));
move(myhandle, buf, length(buf));
19デフォルトの名無しさん:05/02/03 02:50:06
D2005でキーボードで矩形選択するにはどうすればいい?
D7ではAlt + Shift + 方向で出来たんだが。
20デフォルトの名無しさん:05/02/03 04:50:35
同じ操作で出来るよ。
ちなみに、操作解除のショートカットってなんだっけ?
21デフォルトの名無しさん:05/02/03 06:36:32
Ctrl+Kの後、Lで一行選択では?
22デフォルトの名無しさん:05/02/03 09:29:17
>>20
OK。
左のAlt+Shiftでのみ出来た。
左手ホーム、右Alt+Shift+方向で慣れて来たけど癖を直すようにする。
23デフォルトの名無しさん:05/02/03 10:19:44
バグだな。それは。
24デフォルトの名無しさん:05/02/03 14:21:25
プロパティの読み書きをする際に、プロパティ名を変数で指定したい場合、
何か方法はあるのでしょうか?

例えば s := 'Name'; として、この s を基に、Hoge.Name にアクセスする方法です。
言語レベルでサポートされているなら、一番いいのですが…
よろしくお願いします。
25デフォルトの名無しさん:05/02/03 14:55:46
VB とは異なり、言語レベルではサポートされていません。
一応、コンパイラだから。ということになります。

RTTI を使えば、希望のことはできます。つーか、DFM のリーダーが読み込んだテキストファイルから
クラスのプロパティを特定して、値を書き換えています。

26デフォルトの名無しさん:05/02/03 15:03:34
SetPropValue / GetPropValue で検索してみてください。
27デフォルトの名無しさん:05/02/03 15:12:51
必要条件として、プロパティは published セクションで定義されている必要があります。

published
 property Name : string read FName write FName;

インスタンス Hoge のプロパティ Name を他の変数 s 経由で実行時に変更したい場合、TypInfo ユニットを uses 節に追加し

 s := 'Name';
 TypInfo.SetStrProp(Hoge, s, '新しい文字列');

とします。
28デフォルトの名無しさん:05/02/03 16:29:40
Delphi6なんですが、ActionListの項目を一括してMenuItemに登録する方法はないですか?
Drag&Dropしても受け付けてもらえません。
ひとつずつMenuItem.Actionを設定するしかないですかね。
29デフォルトの名無しさん:05/02/03 19:08:44
いま試せないので違ったらごめん。

ActionList エディタで、カテゴリ単位で Drag & Drop できたような気がする。
組み込みアクションなら「編集」カテゴリを丸ごと登録するようなかんじ。
30デフォルトの名無しさん:05/02/03 20:04:39
それActionManagerでは
31デフォルトの名無しさん:05/02/04 11:21:01
作ったアプリケーションのショートカットをデスクトップに
おいて、起動するとDel4.MBとか_QSQ3.DBとかいうファイルが
たくさん出てきます。データベースのテンポラリファイルだと
思うのですが、コレを出さないようにするのはどうすれば
いいでしょうか?
32デフォルトの名無しさん:05/02/04 11:54:01
作業フォルダを設定するんじゃないの
33デフォルトの名無しさん:05/02/04 12:26:00
>コレを出さないように
ソレが出る。ってことは BDE を正しく終了させていないということですが、大丈夫ですか?
もちろん、デバッグ中にアプリを強制終了させた場合など、作業ファイルが残るケースはよくありますが、
通常使用時にも「たくさん」残るのであればプログラムを見直したほうがよいでしょう。

BDE の作業ディレクトリは、TSession の PrivateDir プロパティで変更できます。
34デフォルトの名無しさん:05/02/04 14:08:15
他のアプリから呼び出して使うアプリを製作中なんですが、
このアプリが起動した瞬間に起動元のアプリにフォーカスを戻したいです。

起動した瞬間に、今までアクティブだったウィンドウにフォーカスが移る、
といった事は出来ないでしょうか?
ヘルプを読むとApplication.BringToFrontがそれっぽかったのですが、どうやら違ったみたいです。

もしくは、フルパスからウィンドウハンドルかメインウィンドウのクラス名を得る手段でもいいです。
ウィンドウハンドルが得られればSetForegroundWindowが使えますので。

どちらの手段でも結構です。知ってる方、どうかよろしくお願いします。
35 :05/02/04 14:09:03
終了後に残るって事じゃなくて使用中に出るって事では?
36デフォルトの名無しさん:05/02/04 14:19:37
起動するとき、Application.Handle の値も起動パラメータで教えてやったらいい
37デフォルトの名無しさん:05/02/04 14:25:33
>>34
呼び出し側が自力で戻るのは駄目なのか?
handle := GetForegroundWindow();
CreateProcess
SetForegroundWindow(handle)

SW_SHOWNOACTIVATE指定するとか
38デフォルトの名無しさん:05/02/04 14:30:31
自力で戻れないだろ、普通
39デフォルトの名無しさん:05/02/04 14:35:18
>>38
何の普通だか知らないけど、普通は戻れる。
FGの戻り値が不安ならForm1.Handle使えばいいし。
40デフォルトの名無しさん:05/02/04 14:41:34
そんなことはない。MSDN で SetForegroundWindow を読んでごらん
4134:05/02/04 14:42:54
ごめんなさい、言い忘れました。
起動元のアプリは自作じゃないものです。
42デフォルトの名無しさん:05/02/04 14:47:57
たんに FindWindow でハンドル見つけるだけじゃないの?
43デフォルトの名無しさん:05/02/04 17:04:06
>>1に書いてあるような超初心者が作ったソフトは使いたくないと最近思う
44デフォルトの名無しさん:05/02/04 17:55:39
起動後にタイマーイベントで呼び出し側ウインドウをFindWindow&SetForegroundWindowやればいいんでは。
45デフォルトの名無しさん:05/02/04 18:02:36
.dprの先頭でGetForegroundWindowすれば
まだウィンドウが開いてないから元のハンドルが取れるんでないの
46デフォルトの名無しさん:05/02/04 18:26:49
質問です。
Delphiで、リソースファイル *.rc を使ってフルカラーbitmapを読み込ませようとすると、
[RC エラー] hoge.rc(10): Invalid bitmap format
ってなるんですけど、どうすりゃいいのですか?
47デフォルトの名無しさん:05/02/04 18:53:07
>>46
bitmapを減色してリソースファイルを再作成するちゅうのはダメかい?
48デフォルトの名無しさん:05/02/04 19:12:52
>>47
うーん、DLLに食わせるリソースファイルで、リソース本体を読みにくるのは他人の作った別のEXEで、
仕様書曰くフルカラーBMPだよん、って書いてあるんですわ。

リソースコンパイラだけ、どっかでフリーで入手できないんですかね?
4946:05/02/04 19:38:08
自己解決しました。
BMPを保存しなおしたらコンパイルできました。
他人から貰ったBMPだったので、規格外だった模様。
暇があればBMPのバイナリ眺めて苦言を呈したいと思います。
50デフォルトの名無しさん:05/02/04 19:39:33
bmpとして格納しなきゃだめなの?
519:05/02/04 20:15:30
遅くなりましたが>>16から16進に変換後配列に代入することができました。
>>18も大体意味は分かり良い方法だと思うのですがなかなかうまくいかないため
余裕ができるまで>>16の方法で進めてみます。
ありがとうございました。
52デフォルトの名無しさん:05/02/04 23:54:58
C言語で作られたアプリのコールバックでDelphiのDLLをロードしてハンドル渡して
VCLなフォームやフレームを埋め込むことって出来ますか?
それが無理だとして、普通のWin32APIであれば使えば可能ですか?
53デフォルトの名無しさん:05/02/05 00:11:26
なんか、ものすごくダメなアプリのプラグイン作ろうとしてる一名がいるな。
54デフォルトの名無しさん:05/02/05 01:18:21
両方出来ますよ。
55デフォルトの名無しさん:05/02/05 01:52:24
実行中にウインドウの端を掴んでドラッグするとウインドウの大きさを変えられる機能(呼び名が分からないのでなんとも…)を
設定変更できるプロパティはありますか?
56デフォルトの名無しさん:05/02/05 01:57:49
TForm.BorderStyle
57デフォルトの名無しさん:05/02/05 02:07:35
ありがとうございました
5834:05/02/05 06:04:28
>>45
ありがとうございます。
それで元のハンドルを取得して、OnActiveでSetForegroundWindowを実行で、
思い通りの事ができました。
59デフォルトの名無しさん:05/02/05 07:18:55
そんなことはない。
60デフォルトの名無しさん:05/02/05 19:49:00
コンボボックスで、↓を押した時にドロップダウンするようにしたいのですが、
どうすればいいでしょう?
OnKeyPressに
if key = #40 then ComboBox1.Perform(CB_SHOWDROPDOWN, 1, 0 );
の様に書いたのですがうまくいかず、
試しにキーをEscに変えて
if key = #27 then ComboBox1.Perform(CB_SHOWDROPDOWN, 1, 0 );
としてみた所、一瞬ドロップダウンされるのですが、すぐに消えてしまいます。
↓を押したらドロップダウンして、その中から選べるようにするのが理想です。
よろしくお願いします。
61デフォルトの名無しさん:05/02/05 20:03:10
TStringList の SaveToFile でテキストを保存すると
CRLF(0D 0A)が勝手に付いてしまいますが
これを回避する方法はありますか?
62デフォルトの名無しさん:05/02/05 20:06:54
>>60
DroppedDown := True

>>61
ない
63デフォルトの名無しさん:05/02/05 20:06:59
仕様です
6460:05/02/05 20:11:37
>>62
それでも同じ結果になってしまいました。
6561:05/02/05 20:12:33
>>62
そうですか。
別の方法で何か無いでしょうか?
66デフォルトの名無しさん:05/02/05 20:17:09
6760:05/02/05 20:25:59
>>66
できました!
ありがとうございます。
68デフォルトの名無しさん:05/02/05 20:45:02
>>61
改行されたくないのにTStringListを使うのはなぜ?
俺ならTMemoryStreamとかTFileStreamを使うけど。
69デフォルトの名無しさん:05/02/06 01:34:17
Theme ManagerをD6 Personalにインストールしたいのですが、
バッチを当ててからThemeManagerD6.dpkを開いてインストールしても
---------------------------
ThemeManagerD6.bpl を登録できませんでした。
このパッケージは設計時には使えません。
---------------------------
というメッセージが出て正常にインストールできません。
どなたかうまくいく方法を教えて頂けませんでしょうか?
70デフォルトの名無しさん:05/02/06 11:49:01
Memoに書き込まれる文字幅を揃えようと思い
PitchプロパティをfpFixedにしたのですが文字幅がバラバラのままです
何か勘違いがあるのでしょうか
71デフォルトの名無しさん:05/02/06 11:56:42
Delphi7を使い始めた初心者です

RichtextやMemoコンポーネントで、テキスト編集領域の背景に
色ではなく画像(壁紙)を設定する方法はないでしょうか?

もしくは、RichtextやMemoコンポーネントよりも前面にImageコンポ(もしくはそれに類するもの)を
持ってくる方法はないでしょうか?
(「コントロール→前面・背面移動」を選択しても、どうしても順番が入れ替えられない)
72デフォルトの名無しさん:05/02/06 12:10:28
>70
fpFixed は「他の条件を満たした上で、もし固定幅のフォントを作成できるならがんばれ」
という条件を追加するフラグ。
「MS Pゴシック」フォントは固定幅にはできないフォントなので fpFixed をつけても無視される。
「MS ゴシック」を使うこと。
これは Windows の Font API の仕様なので避けられない。
73デフォルトの名無しさん:05/02/06 12:28:35
>>68
テキスト処理にTStream使う奴はアフォ
74デフォルトの名無しさん:05/02/06 12:33:57
>>72
ありがとう
大好き
75デフォルトの名無しさん:05/02/06 12:39:26
>69
ThemeManager ってのがなんだかわからんが、設計時に使えないということは
IDE に登録してはいけないわけで... ドキュメント読み直したら?
76Delフサギコ ◆A6VzDeLphI :05/02/06 12:55:45
 ∫,,,,,,,,,∧,,∧  天気ええーなー
⊂,,,,,,,,,つ,,゚Д゚ミつ

>>71さん
RichEditでは背景画像不可能だった気がします。

TMemoなら、
http://homepage1.nifty.com/cosmic/delphi/vcl.html
こちらの「背景透明化可能 拡張エディット&メモ 」を
使うとよいでしょう
77デフォルトの名無しさん:05/02/06 13:00:50
Delphi6 WinXP SP2
ListViewの上端を掴んで上にドラッグするとゴミが出るんですけど、これウチだけ?
ゴミ出ないようにしたいです。

再現手順。
Win32のListView1を配置。
ListViewの、
 DragModeをdmAutomaticに、
 Itemsに適当な名前で項目を追加、
 ViewStyleをvsListに(vsIconでは問題なし)。
実行。

ListViewに表示されたItemの上端を掴んで、上方にドラッグ。
そのまま(ドロップしないで)ドラッグでマウスカーソルをぐるぐる動かす。
7871:05/02/06 13:18:57
>>76
ありがとうございます!
テキスト編集画面を透明化して、その下にImageを持ってくるだけで壁紙っぽく見せられますね!
(やはり、Imageコンポを前面に持ってくるのは無理みたいですね)

実は、RichtextコンポとMemoコンポの大きな違いまだ把握してないのですが
(Memoは制作可能文書サイズが64KBまで?)
とりあえず紹介していただいたコンポを使ってみたいと思います。
79デフォルトの名無しさん:05/02/06 13:36:46
>>61
procedure hoge(src: TString; dst: TStream);
var s: String; i: Integer;
begin
 for i:=0 to src.Count-1 do begin
  s := src[i];
  dst.WriteBuffer(s[1], Length(s)*SizeOf(Char));
 end;
end;

こんな感じでどうぞ。
80Delフサギコ ◆A6VzDeLphI :05/02/06 13:38:53
    ∧,,∧   天気ええけど、
   ミ,,゚Д゚彡   さむいどすな
    ミ つ旦)~~
  〜と,,,~),,~) 

>>78さん
RichとMemoはWindowsのコントロールで
それぞれワードパッドとメモ帳が使っている部品ですよ。

Richは文字毎に色とかフォントとか変えれますね。
Memoの64K制限はWin9x系だけだった気がしますが

独自実装している
TSonEditやTEditorとかも検討してもいいかも。
81デフォルトの名無しさん:05/02/06 13:38:54
それアフォすぎ
82デフォルトの名無しさん:05/02/06 13:42:57
>>77

出た
http://land.issaigassai.com/cgi/upload/source3/No_0942.jpg

Delphi4 Winxp HOME SP2
ATi Radeon9600 CATALYSTドライバ
83デフォルトの名無しさん:05/02/06 13:52:40
芸術的やないか
84デフォルトの名無しさん:05/02/06 14:03:26
>>71>>76
fumika氏のCuteEditはDelphi7じゃ動作しなかったはず
8577:05/02/06 14:11:06
>>82
検証と画像ありがとう。
うちでも、メインのノート(MOBILITY RADEON 9600)と
サブのデスクトップ(GeForce4 MX 440)とで試してみたけど、同じでした。
両方ともWinXP Pro SP2で、ビデオドライバはメーカーのもの。
ちなみにデスクトップのデザインはクラシックスタイル。
86ミ;゚Д゚彡 ◆A6VzDeLphI :05/02/06 14:20:12
まぢぃ!>>84さん

D2005で試したところ、
ちょっと画面更新のタイミングが変気味だけど
一応動いているけど・・・
D6/7/2005w32で、何か目だった変化ある?
87デフォルトの名無しさん:05/02/06 14:35:08
>>86
ごめん書き方が悪かった
正しくは、「XPmanifestを適用すると透明化が解除されてエリア下がバグる」
XPmanさえ使わなけりゃ正常動作する
あと、スクロール時に点滅するのは仕様だってさ
88デフォルトの名無しさん:05/02/06 14:41:44
TCuteMemoは改行時のLine-heightもちょっと変気味だよね
Richtext・Memo・CuteMemoそれぞれに
FontをMSPゴシック12pt設定してAAを貼ってくらべるとよくわかる
89Delフサギコ ◆A6VzDeLphI :05/02/06 15:13:13
 ∩| 
 ミ ゙''゙゙゙つ    ________
 ミ∧,,∧   /
 ミ,,゚Д゚彡 < 使い込んでるね。
 U U    \
           ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
>>87-88さん、報告dクス
9088:05/02/06 15:16:19
既存のRichtext(Memo)コンポに
http://www.borland.co.jp/qanda/delphi/d0009386.htmlが応用できれば一番なんだけど
そこまでの技術がない・・・
91Delフサギコ ◆A6VzDeLphI :05/02/06 15:26:35
 ∩| 
 ミ ゙''゙゙゙つ  何人かが過去タドタ道ですが
 ミ∧,,∧   Delphiマガジンの記事で
 ミ,,゚Д゚彡   Memo透明化の記事があったはずなので
 U U    それを参考にしてみると、
       技術向上できるかもね。

なんにしてもRichでは無理ぽだったはず。
Winのコントロールに依存するんだから仕方ないでつ。

超上級レベルだと思われですが、
TEditorやTSonEditの
ソース解析などの道もあるかと。
92Delフサギコ ◆A6VzDeLphI :05/02/06 15:28:48
 ∫,,,,,,,,,∧,,∧  ところで質問。D2005の
⊂,,,,,,,,,つ,,゚Д゚ミつ  エディタ部分の[×]がついた
           タブコントロールは、どうやって作るのですか?
93デフォルトの名無しさん:05/02/06 16:56:08
>>71>>78
このコントロールを使ってみるといい。
http://www.cooldev.com/coolcontrols.html

Memoその他のかなりコントロールの背景に画像を指定できる。
ただし、Memoだけで、RichEditはなかったと思う。Memoのソースコードを参照して
RichEditをつくることはできるかもしれない。
94デフォルトの名無しさん:05/02/06 18:42:25
指定した秒数の中で、あるキーが何回押されたかを数える、
といった事をやりたいのですが、行き詰ってしまいました。
TTmierとonKeyPressで出来そうだと思ったのですが、
回数をどうやって取ったらいいのか全然わかりません。
どうか教えてください。
9587:05/02/06 18:53:00
>>92
ごめんD2005持ってないんだ
答えられなくて申し訳ない

>>93
CoolMemoで試してみたけど
やっぱりXPmanifestを適用すると透明化が解除されてエリア下がバグるね
スクロール時に背景も乱れるけどCuteEditの点滅に比べたらマシかも
96デフォルトの名無しさん:05/02/06 19:51:36
ImageコンポでPICTUREを読み込む場合、JpegよりBMPのほうがアプリに優しい(処理が高速)と聞いたのですが
本当ですか?
9793:05/02/06 20:00:42
>>95
検証ありがとう+乙。>>87タンはD2005持ってないとするとD7かな?
CoolDevにその旨Postしておきます。
最近バージョンアップされていないから望み薄かも。
98デフォルトの名無しさん:05/02/06 22:12:16
質問が2つあります。

1.6.0personal使ってますが、
TServerSocketやTClientSocketのヘルプがありません。
どっかにありませんか?

2.↑が無い場合の質問。
TServerSocketやTClientSocketのOnWriteイベントって、
どういうとき発生しますか?

「相手になにか送信が完了したときに発生」するものだと
感覚で思っていたのですが、
SendTextしても発生しません。
99Delフサギコ ◆A6VzDeLphI :05/02/06 22:30:30
 ∫,,,,,,,,,∧,,∧  D6Proにはついてましたが,,,
⊂,,,,,,,,,つ,,゚Д゚ミつ

TServerSocketのOnAcceptや
TClientSocketのOnConnect直後
接続時に発生するみたいだよ。

100デフォルトの名無しさん:05/02/06 23:47:14
>>96
そりゃ展開する分Jpegの方が重くなるだろ。
一方bmpの方がサイズが大きい分ディスクIOが余分に発生するが。
101デフォルトの名無しさん:05/02/07 00:40:02
>>99
ありがとうございます。
そうか、WriteというわりにはReadの反対ではないのね。
腑に落ちないけど、そういう仕様なんだからしょうがない。
102Delフサギコ ◆A6VzDeLphI :05/02/07 00:56:14
                _____
      ∧,,∧___   /D2005のタブは
    /ミ,,゚Д゚ミ/\<  こんなのです
  /| ̄∪∪ ̄|\/ \_>>95
    |____|/

ipentacさん。
http://www.ipentec.com/delphi2005/categorybuttons/index.html

D2005はほぼPureWin32らしいから
このタブもWin32で実現が余裕で可能っぽいのだが
コンポーネント配布してくれよん>>某
あと、TDockTabSetあたりの
ドキングもあと2005倍くらいは
使いやすくしてくれ。

>>101
漏れも"フニ"は落ちませんがそういうもんらしいです。
参考どぞ
Winsockを使ってみようぜ : http://www.asahi-net.or.jp/~nk2w-ishr/winsock0.htm
103デフォルトの名無しさん:05/02/07 01:01:13
自分が能動的に発する命令にイベントなんて発生する必要なんてないだろ
104デフォルトの名無しさん:05/02/07 01:40:16
文字の改行幅を調整しようとFontのSizeパラメータとHeightパラメータをいじってるんですけど
2つの値が連動して困ってます(Sizeを12にするとHeightが-16、Sizeを9にするとHeightが-12に・・・といった具合)
フォントのサイズ(pt)は固定したまま改行幅を広げたり狭めたりできないものでしょうか?
105デフォルトの名無しさん:05/02/07 02:15:47
できない
106デフォルトの名無しさん:05/02/07 04:20:15
>>102
チャトラン思い出した(w

>漏れも"フニ"は落ちませんがそういうもんらしいです。
切るとこ違うよ。
"ふ"に落ちない。

107デフォルトの名無しさん:05/02/07 08:54:01
>>104
文字の大きさと改行幅は別物だから。
108デフォルトの名無しさん:05/02/07 09:44:44
>>102フサギコタン
とりあえずここ見れ。と、既存VCLで安易に解決したりなんかしてみる…
ttp://www.tmssoftware.com/apc.htm

「どうやってつくるか」は、ソースコード見てみないとわからないスマンコ。

109デフォルトの名無しさん:05/02/07 10:41:55
>>103
Winsockの内部での都合を考えてくださいませ。
110デフォルトの名無しさん:05/02/07 14:39:52
今話題の状況依存ヘルプを使いたいんですが、FormのBorderIcons
プロパティをつかってバーにヘルプボタンを表示させる方法ならわかるん
ですが、一太郎のようにツールバーのボタンを押したときにヘルプモードに
する方法がわかりません。Toolbar1OnClickにどう書けば良いでしょうか?
111デフォルトの名無しさん:05/02/07 14:41:28
あ、ToolButton1Clickの間違いです。
112デフォルトの名無しさん:05/02/07 15:52:27
ヘルプヒントじゃなくて?
113デフォルトの名無しさん:05/02/07 15:57:59
Perform(WM_SYSCOMMAND,SC_CONTEXTHELP,0); かな?
114デフォルトの名無しさん:05/02/07 16:10:46
>>94
グローバルで受け付け時間内だけTrueになるフラグ用意して、カウンタ用の変数も1つグローバルで用意。
OnShowでタイマーイベント開始(Interval=100000=10秒)と共に受け付けフラグをTrueへ立てる。
フラグがTrueの間はKeydownイベント内でのスペースキーの押下をカウントアップしてEdit1へ表示するようにする。
オンタイマーイベントで指定時間がきたらフラグを降ろしてタイマーも止めて(Interval=0)計測終了。

というのを考えてみた。
115デフォルトの名無しさん:05/02/07 16:11:45
var
 Form1: TForm1;

 Flg:Boolean = False;
 KeyDownCount:Integer;
implementation
{$R *.DFM}
procedure TForm1.Timer1Timer(Sender: TObject);
begin
 Flg := not Flg;
 Timer1.Interval := 0
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
 if (Key = VK_SPACE) and flg then
 begin
  Inc(KeyDownCount);
  Edit1.Text := IntToStr(KeyDownCount)
 end
end;

procedure TForm1.FormShow(Sender: TObject);
begin
 Timer1.Interval := 10000;
 Flg := True;
 KeyDownCount := 0
end;

end.
116デフォルトの名無しさん:05/02/07 16:13:19
あ、Form1のKeyPreviewプロパティをTrueにしてね。
117デフォルトの名無しさん:05/02/07 16:25:10
FlgはTimer1.Enabled使えばよろし
118デフォルトの名無しさん:05/02/07 17:29:28
自分がフォーカス無いときも数えたいんだろ
119デフォルトの名無しさん:05/02/07 18:47:31
>>107
いや、別物じゃないから
試せばわかる
120デフォルトの名無しさん:05/02/07 21:27:49
>>104
つーか、普通はフォントのsizeとheightは単位が違うだけで、
どちらもフォントの高さを示してる。

文字幅はlogfontで指定する。
121デフォルトの名無しさん:05/02/07 23:27:59

Delphi6のヘルプ→ クイックスタート: チュートリアル→「
フォームへのコンポーネントの追加」ページにて

--------------------------------------------------------------------------------------------
4   テキストエディタで編集中のファイルのパスと名前を表示する場所をステータスバーに作成します。
   ・ステータスバーを選択します。
   ・SimplePanel プロパティを True に設定します。
   ・SimpleText プロパティを untitled.txt に変更します。このテキストエディタを使うときに,編集中のファイルが
    まだ保存されていない場合,その名前は untitled.txt になります。
   ・Panel プロパティの[(TStatusPanel)]省略記号をクリックして,[StatusBar1.Panels の編集]ダイアログボックスを表示します。
   ・ダイアログのツールバーにある[新規追加]ボタンをクリックして,ステータスバーにパネルを追加します。
--------------------------------------------------------------------------------------------

とあるんですが、この通りに実践すると
「テキストエディタで編集中のファイルのパスと名前」が表示されず、外部ファイルを開こうが新規ファイルに名前を付けて保存しようが
表示が「untitled.txt」のままでした。

あれこれ試行錯誤しているうちに、「SimplePanel プロパティを False」のままにしておく(SimpleText プロパティは適用されなくなる)と
解説通りの効果が得られるようになりました。

これは、ヘルプのこの項目の説明文が根本的に間違えていると解釈してよろしいのでしょうか?
122デフォルトの名無しさん:05/02/07 23:33:22
いいんじゃないでしょうか。
123デフォルトの名無しさん:05/02/08 00:57:26
時々手続きの内部で別の手続きをしているソースを見かけるのですが
これって何かメリットがあるんでしょうか?
124デフォルトの名無しさん:05/02/08 01:01:04
見やすくなるから
125デフォルトの名無しさん:05/02/08 01:04:41
>>124
ちなみにデメリットはありますか?
126デフォルトの名無しさん:05/02/08 01:07:16
みにくくなる
書き手次第
127デフォルトの名無しさん:05/02/08 01:10:06
ヘルプにはルーチンのネスト、一般的には関数内関数と呼ばれているのかな。
呼び出し元のローカル変数にアクセスできるよ。
128デフォルトの名無しさん:05/02/08 01:10:47
>>124
>>126
分かりました。
どうもありがとうございました。
129デフォルトの名無しさん:05/02/08 01:14:13
>呼び出し元のローカル変数にアクセスできるよ。
そういう使い方が出来るんですね。
便利そうですね。
130デフォルトの名無しさん:05/02/08 01:25:33
メモ帳など、他のテキストエディタのキャレット位置を取得したいのですが、
どうやればいいのでしょう?
GetCaretPosあたりを使えば良さそうだと予想したんですが、
調べても良く分かりませんでした。
131デフォルトの名無しさん:05/02/08 01:26:21
>>129
変数と、ローカル関数の記述の順番によるけどね。
便利だよね。
132デフォルトの名無しさん:05/02/08 02:44:52
>>130
その書き込みだと、GetCaretPosで出来たかどうかは解らない。
出来るんならそれでいいし、 出来なかったのならそう書いて欲しい。
133デフォルトの名無しさん:05/02/08 05:52:01
作ったプログラムのアイコンを変更するにはどこを設定したらいいんですか?
あと、作ったブログラムってBCBのように共有ライブラリ使ってないですよね?
134133:05/02/08 05:52:39
書き忘れました、2005使ってます。
135133:05/02/08 06:07:12
間違い発見・・・
>>あと、作ったブログラムってBCBのように共有ライブラリ使ってないですよね?
共有ライブラリを含んでいる
136デフォルトの名無しさん:05/02/08 06:18:48
>>113
サンクス
137デフォルトの名無しさん:05/02/08 07:09:33
>>133
プロジェクトメニュー→オプション→アプリケーション
138デフォルトの名無しさん:05/02/08 09:29:01
>>120
ヘルプでlogfontの項目が見当たらないんですが
139デフォルトの名無しさん:05/02/08 10:30:13
TLogFont Windows API 用のレコード型
APIのヘルプか MSDN へどうぞ
140デフォルトの名無しさん:05/02/08 11:22:40
>>119
TMemoとかが連動させてるだけで、自力で描画する分には関係ないよ、と言う話。
141デフォルトの名無しさん:05/02/08 13:20:57
------ a.pas ------
Unit a;
interface
const HOGE=8;
implementation
end.
------ b.pas ------
Unit b; {b.pas}
interface
uses a;
var FUGA : array[0..HOGE] of string;
implementation
........(略)
end.

ってプロジェクトをコンパイルすると、
未定義の識別子:HOGE
ってエラーになるんですがこれは仕様ですか?
あるファイルで宣言した定数を他のユニットでも使いたいときには
どうしたらいいんでしょうか?
142デフォルトの名無しさん:05/02/08 13:34:49
それでいけるはず。a.dcu検索して削除してからビルドしてみたら。
143141:05/02/08 13:35:19
ゴメン、出来た
144141:05/02/08 13:43:17
補足:
a.pasのファイル名を変更して、bの方のuses節を変更したらビルドできました。

30秒違いで…
>142 thx
145130:05/02/08 15:31:24
>>132
全くできませんでした。

var
pntCaret : TPoint;
begin
........(略)
GetCaretpos(pntCaret);
Top := pntCaret.Y;
Left := pntCaret.X;
ShowMessage('('+IntToStr(Top)+','+IntToStr(Left)+')');
end;
こんな感じで書いても、(0.0)しか返ってきません。

例えばメモ帳だったらどうやってやるのでしょう?
146デフォルトの名無しさん:05/02/08 15:47:16
何でTop,Leftに代入してるんだ?
pntCaretをClientToScreenに変換してそのまま使え
147デフォルトの名無しさん:05/02/08 17:11:31
計算結果として 3.1415 みたいな結果がでてきたとして、これにTruncを使えば
小数点以下が切り捨てられるのはわかったのですが、
これを 3.1 や 3.14 などと表記する方法はないでしょうか?
148デフォルトの名無しさん:05/02/08 17:32:36
>>147
こんなん使ってますが。nが小数点以下の桁数。
function HalfAdjustN(x: Double; n: Integer): Double;
begin
Result := Int(x * IntPower(10, n) + Sign(x) * 0.5) / IntPower(10, n);
end;
149デフォルトの名無しさん:05/02/08 17:35:57
ヤフーオークションに
Delphi7 のエンタープライズ版が
ナイス値段ででてる!
買いたいけど金ねー
くそー
150デフォルトの名無しさん:05/02/08 17:37:27
StringList.Textだと、最後に余分な改行コードが付いてきます。
どうやったらカットで期末か?
151150:05/02/08 17:39:05
毎回for文するのは嫌でつ。
152デフォルトの名無しさん:05/02/08 17:39:15
>>148
使ってみます。
ありがとうございました。
153デフォルトの名無しさん:05/02/08 17:41:25
>>150
AnsiReplaceStr(Text, sLineBreak, '')
154デフォルトの名無しさん:05/02/08 17:42:50
Trimとかも?
155150:05/02/08 17:46:06
サンクスでつ。

>>153
それだと、全改行コードが消えそうな...

>>154
TrimRightすると、最後の改行コード(と空白スペース)を消してくれるんですか?
なら、完璧でつ。
156150:05/02/08 17:52:09
うまくいきました
157130:05/02/08 18:32:48
>>146
いや、ですから、pntCaret自体が取得できないのです。
もう一度質問を書きますね。

メモ帳などのエディタのキャレットの位置を取得するにはどうしたら良いのでしょう?
158デフォルトの名無しさん:05/02/08 18:36:33
直接文字列を指定したいのですが
Stringの場合、「〜:= '文字列';」で問題ないのですが
TStringsの場合、「〜:= '文字列';」だと上手くいきません
どうしたらよかとですか?
159デフォルトの名無しさん:05/02/08 18:36:53
出来ない。
やるなら、ターゲットプログラムで発生するすべてのイベントを監視する
とか?
160デフォルトの名無しさん:05/02/08 18:37:37
>>156
TrimRightでうまくいったん?
161150:05/02/08 18:53:41
yes>>160
162デフォルトの名無しさん:05/02/08 18:55:16
>>158
Textに突っ込め。っていうかTStringListのプロパティ全部嫁
163デフォルトの名無しさん:05/02/08 19:44:09
>>158
TStringsは文字列リストだから代入という概念は無い
TStrings.Textは個々のリストに格納されている
文字列全部だからちょっと違うし
164デフォルトの名無しさん:05/02/08 20:32:29
>>162-163
どうもです
てことは、例えばRichTextやMemoのLinesプロパティにも文字列を直接指定できないってことですね
TStringListについてこれから調べてみます
165デフォルトの名無しさん:05/02/08 20:52:33
すいません行き詰まってしまったので質問させてください
ファイルのコピーについてですが
現在サブフォルダのファイル全て変数(hoge1)に入れて(SrchFileを使わせてもらってます)
CopyFile(PChar(hoge1),PChar(hoge2),True);
で複数のファイルをコピーしようとしているのですが上記の場合ファイルが一つの場合のみ大丈夫なのでしょうか?
また複数コピーする場合どうすればいいのでしょうか?よろしくお願いします
166130:05/02/08 21:21:09
解決しました。

procedure GetCaretPosEx(var Ps: TPoint);
var
Rect: TRect;
CPos: TPoint;
ActiveWnd: HWND;
hForeground: HWND;
dwFrom, dwTo: DWORD;
begin
ZeroMemory(@Rect, sizeof(Rect));
dwFrom:=GetCurrentThreadId;
hForeground:=GetForegroundWindow;
if hForeground<>HWND(nil) then
dwTo:=GetWindowThreadProcessId(hForeground, nil)
else
dwTo:=HWND(nil);
if (dwFrom and dwTo)<>0 then
begin
if AttachThreadInput(dwFrom, dwTo, true) then
begin
if not(GetCaretPos(CPos)) then
OutputDebugString('失敗');
ActiveWnd:=GetFocus;
if ActiveWnd<>HWND(nil) then
GetWindowRect(ActiveWnd, Rect);
AttachThreadInput(dwFrom, dwTo, false);
end;
end;
Ps.X:=CPos.X+Rect.Left;
Ps.Y:=CPos.Y+Rect.Top;
end;
167デフォルトの名無しさん:05/02/08 21:45:07
>>166

汎用性高そうな関数だね
16877:05/02/08 22:56:15
>>77です
これは回避できないでしょうか?
あと環境によって問題ないとかあるんでしょうか?
169デフォルトの名無しさん:05/02/08 23:26:57
VBAのShellオブジェクトをDelphiから叩くのが正解
170デフォルトの名無しさん:05/02/09 00:22:59
入力補完のランチャーなんですが、
関数名がずらっと出てくるのですが、
選択時、一個飛ばしで選択されて、
必要な関数名を選ぶ事ができません。

設定の変更はできますでしょうか?
171デフォルトの名無しさん:05/02/09 00:24:04
>>170
Delphi6のpersonal版でosはxpです。
172デフォルトの名無しさん:05/02/09 01:45:45
時々発生するバグ
173デフォルトの名無しさん:05/02/09 02:30:52
Delphi3で内部エラー L1086が出るのですが、
ネットで見つかる原因(TInternalError = type TObject;)
以外にどんな原因が考えられますか?

Google 検索: L1086 Delphi
http://www.google.com/search?q=L1086+Delphi&num=50&ie=Shift_JIS&hl=ja&lr=&lr=

ネットで見つかるのは
"Fatal Error: ...: Unit SysUtils was compiled with a different version of System"}
も出るみたいですが、 私のは出ません。
また、クラッシュはせず、 もう一度コンパイルすると出なくなります。

コンパイル対象がすでに1万行超えているので、 少しずつ消していく方法以外でなんとか…。
174デフォルトの名無しさん:05/02/09 02:33:22
>>170
よく分からんけど、その状態になったこと無いな。

>>173
こっちはある。
「たま〜に」だから、気にしないようにしてる。
175デフォルトの名無しさん:05/02/09 02:34:35
内部コンパイルエラーを出せたら一人前
176デフォルトの名無しさん:05/02/09 02:37:02
そっ、そう?
ループのない所で Break したら T2541 が出ませんか?
177174:05/02/09 02:47:12
おっと、エラー番号は見てなかった。
失敬。
「内部エラーはたまに出るけど気にない」と。
178デフォルトの名無しさん:05/02/09 08:32:30
気にない
179デフォルトの名無しさん:05/02/09 09:44:23
Delphi7のShellTreeViewで起動時、前回選択していたフォルダを選択させたいのですが、
前回終了時にShellTreeView1.PathをIniFileに保存し、次の起動にそのパスをShellTreeView1.Pathに
設定していますが、この方法だと仮想フォルダの場合、実際のフォルダが選択されてしまいます。
仮想フォルダを選択させる方法がわかりません。えらい人教えて。

180デフォルトの名無しさん:05/02/09 10:42:38
LF(&H0A)で区切られているテキストファイルを読み込み加工した後、上書きする方法はありますか?
TStringListに読み込むと、全てのLFがCRLFに変換されてしまいます。

さらに既存のテキストファイルに追加で書き込む事は可能でしょうか?
181デフォルトの名無しさん:05/02/09 10:46:44
Windowsでテキストモードでやっているなら仕方が無い。
嫌ならバイナリだか形無しモードで自分で書く以外ないよ。
182デフォルトの名無しさん:05/02/09 11:00:27
一行ずつ書き込んでLFはさむだけだろ? 不思議な質問だ
183デフォルトの名無しさん:05/02/09 11:02:47
>TStringListに読み込むと、全てのLFがCRLFに変換されてしまいます。
LineBreak プロパティで変更可能ですよ。
184デフォルトの名無しさん:05/02/09 11:24:44
>>172
再起動しましたら直りました。
ありがとうございました。
185デフォルトの名無しさん:05/02/09 13:00:44
ブラウザ機能の一部にGeckoエンジンを取り入れたものを現在考えていて、今はActiveXコントロールから
使用していますが、それでは他のマシンで動作させるためには下準備が必要なので、
自前で内蔵できるように(=極端な話exeファイル1つで動作できるように)したいのですが、
自分の探せる範囲ではいまだ見つかりません。
ヒントとかを教えてください。
186デフォルトの名無しさん:05/02/09 13:03:35
GeckoのソースをBCCでビルドしてリンク
187デフォルトの名無しさん:05/02/09 14:34:13
文字数はどうやれば取れますか?
188デフォルトの名無しさん:05/02/09 14:44:08
Lengthのことかな?
189デフォルトの名無しさん:05/02/09 14:44:53
length
190デフォルトの名無しさん:05/02/09 15:04:35
ありがとうございます。できました。
型の使い方が違っていました。

var
s: String;
i: Integer;
にして、
s := 'abcde';
i := Length(s);
s := IntToStr(i);
ShowMessage(s);

これで出来ました。感謝します。
191デフォルトの名無しさん:05/02/09 15:05:29
'こうだろ'.length
192デフォルトの名無しさん:05/02/09 15:09:47
>>191
え? できません。
193デフォルトの名無しさん:05/02/09 15:10:21
そのDelphiバージョン古杉ですから〜
194デフォルトの名無しさん:05/02/09 15:15:10
ざんねーん 
195デフォルトの名無しさん:05/02/09 15:17:28
Delphi2005安く売ってるところ知ってますか?
196デフォルトの名無しさん:05/02/09 15:17:32
ShowMessage(IntToStr(Length('abcde')));
197デフォルトの名無しさん:05/02/09 15:23:47
文字列がオブジェクトじゃない言語って終わってるよな。
198デフォルトの名無しさん:05/02/09 15:26:18
そうだね
199デフォルトの名無しさん:05/02/09 15:27:34
文字数はLengthじゃだめだよ。
200デフォルトの名無しさん:05/02/09 15:30:47
なんですか?
201デフォルトの名無しさん:05/02/09 15:32:40
>Length は文字列によって使用されるバイト数を返します。

文字数じゃない
202デフォルトの名無しさん:05/02/09 15:34:02
ああ なるほど ansiなんちゃらってあったなあ。
203デフォルトの名無しさん:05/02/09 15:36:47
なこと無い、WideStringにも対応してる。
SJISには対応して無いな。
204デフォルトの名無しさん:05/02/09 16:05:23
Delphi6は古杉のようですが大丈夫ですか? 2005買おうかと思って見てみたら高かったよ!
205デフォルトの名無しさん:05/02/09 16:16:15
Delphi6は古くないけど売ってないだろ、さすがに。
D2005は素人にはおすすめ出来ない。ヤフオクでもいいからD7以下を手に入れるべし
206デフォルトの名無しさん:05/02/09 16:18:14
わかった。ありがとう。
207デフォルトの名無しさん:05/02/09 16:21:21
ListViewのスクロールバーの位置を知るにはどうすれば良いのでしょうか?
スクロールは出来るんですが、読み出す事出来ない・・・
208デフォルトの名無しさん:05/02/09 16:21:35
del2005買え、あーむかつく
209デフォルトの名無しさん:05/02/09 16:26:25
スクロールバーの位置は右か下だけだろ
210デフォルトの名無しさん:05/02/09 17:16:32
下記のようにしても、ListViewのスクロールバーが消せません。

SetScrollRange(ListView1.Handle,SB_HORZ,0,0,True);
ShowScrollbar(ListView1.Handle,SB_BOTH,False);
Sendmessage(ListView1.Handle,LB_SETHORIZONTALEXTENT,0,0);
ハンドルを ListView1.Items.handle にしても駄目です。
Form1の場合はちゃんと消えるんですが。
211デフォルトの名無しさん:05/02/09 17:17:51
SetとかGetとかが必要になってくる変数って
積極的にpropertyにしちゃっても問題ないですか?
それともケースバイケース?

デル6パー。
212210:05/02/09 17:23:30
自己レス。FlatScrollbarをFalseにしたら消えました。
・・・ってか愕然としました。FlatにしたとたんAPIは全て受け付けないなんて。
213デフォルトの名無しさん:05/02/09 17:38:58
「不正な浮動小数点演算命令」とエラーが出るのですが・・何が何だか分からなくて困っています。

01:for X := 0 to 15 do
02: begin
03: Y := 0;
04: repeat
05: TChr[X,Y].Yposition := Y * s + 10;
06: NoD[X] := Y;
07: Y := Y + 1;
08: until TCar[X,Y].YposE > 4800;
09: end;

5行目で引っ掛かってしまいます。
右辺が計算式だとエラーが発生するようなのですが・・。

Delphi6でOSはWindowsXPです。
214デフォルトの名無しさん:05/02/09 17:45:06
>>213
TChrとTCarの変数宣言くらい書いてくれないと
これだけじゃわからない
215デフォルトの名無しさん:05/02/09 17:46:46
それに加えて、エラーメッセージも付け加えてください、そうすれば怒られないよ
216213:05/02/09 17:52:47
>>213です
すみません。必要事項を書き忘れてる上に、一部書き間違えていました。
01:for X := 0 to 15 do
02: begin
03:  Y := 0;
04:   repeat
05:    TChr[X,Y].Yposition := Y * s + 10;
06:    NoD[X] := Y;
07:    Y := Y + 1;
08:   until TChr[X,Y].YposE > 4800;
09: end;

TChrは、レコード型Chrとして、配列で宣言しています。
フィールドのYpositionはExtended型です。
217213:05/02/09 17:55:37
度々すみません。
エラーメッセージは以下の通りに出てきます。

プロジェクトProject1.exeがEInvalidOpクラスの例外を生成しました。
’不正な浮動小数点演算命令’
218デフォルトの名無しさん:05/02/09 17:57:35
Y が宣言の外になってるに98コントルト
219デフォルトの名無しさん:05/02/09 17:59:01
ループ抜けないでNaNで演算例外だな、たぶん
220デフォルトの名無しさん:05/02/09 17:59:12
s ってなに? TChr[X,Y].YposE も和歌卵子
レコード型の宣言がみせろよ
221デフォルトの名無しさん:05/02/09 18:24:17
本当に初心者の質問で申し訳ないのですが、
TstringListなどを使った場合、終了する前にFreeをしてあげないと
メモリの解放などは行われないのでしょうか?
それとも、終了した時点で割り当てられたメモリなどは解放されるのでしょうか?
222デフォルトの名無しさん:05/02/09 18:29:01
>>221
FormDestroyでFreeでいいのでは?
223213:05/02/09 18:37:29
伝わりやすくしようとコードを端折ったのが逆効果となってしまったようです。
誤解を招く内容を書いてしまったことをお詫びします。

01: ss := StrToFloat(Form1.Edit1.Text);
02: s := Round(32 + ss * 8);
03:for X := 0 to 15 do
04: begin
05:  Y := 0;
06:   repeat
07:    TChr[X,Y].Yposition := Y * s + 10;
08:    NoD[X] := Y;
09:    Y := Y + 1;
10:   until TChr[X,Y].Yposition > 4800;
11: end;

レコードは以下のように宣言しています。

type
 Chr = record
  Xposition : Extended;
  Yposition : Extended;
  Xplus : Extended;
  Yplus : Extended;
  graph : TRect;
 end;
224213:05/02/09 18:38:00
その他の変数は以下の通りに宣言しています。

ss : Extended;
s : Integer;
X : Byte;
Y : Word;
TChr : array[0..15,0..1000] of Chr;
NoD : array[0..15] of Word;

コンパイルは出来るのですが、実行させると上記コードの07で止まってしまいます。
エラーメッセージは>>217の通りです。
(上記コードはボタンクリックのイベントとして書いています。)
225デフォルトの名無しさん:05/02/09 18:51:08
Yは10000以上になってもいいのか?
226デフォルトの名無しさん:05/02/09 18:52:09
1000だな
227デフォルトの名無しさん:05/02/09 18:52:18
サッカーミロ
228デフォルトの名無しさん:05/02/09 19:01:41
気持ち悪いコードだな 書き直してみた これだとどうよ
01: ss := StrToFloat(Form1.Edit1.Text);
02: s := Round(32.0 + ss * 8.0);
03:for X := 0 to 15 do
04: begin
05:  Y := 0;
06:while (TChr[X,Y].Yposition<=4800.0) and (Y<=1000) do
07:begin
07:TChr[X,Y].Yposition := Y * s + 10.0;
08:NoD[X] := Y;
10:inc( Y );
11:end;
12:end;
229213:05/02/09 19:09:06
>>226
確かに、ssの値に1か0を代入すると、Yは1000を超えてしまうのですが、
ssが30以下の値だと、現象的に不自然なので、(説明が長くなるので理由は省略しますが)
下回らないように書き換えておきます。

しかし、プログラム事態は、07を一度も通過せずに止まってしまうんです。
230213:05/02/09 19:26:11
>>228

ご指摘の通りに書き直してみたところ、エラーも無く実行できました。
本当にありがとうございました。
231228:05/02/09 20:18:09
ちなみに、
・普通、自分で定義したレコード型やクラスなどの型は、頭にTをつけるのが普通
・ゆえにTChrなんてつけかたは、普通、型に使う名前で勘違いされやすい
・万が一のコンパイラの勘違いを防ぐため、浮動小数点小数を意味する場合は、
4.0とか6.0とか、.0を付けること。代入される変数の意味もわかりやすくなる。
・repeatは、条件が後に来るので見づらい。どうしてもという所以外、whileの方が見やすい。

ということを気を付けるだけでも、他の人が見てもかなり見やすいコードになると思うよ。
232228:05/02/09 20:24:58
あ、あと、
・ByteとかWordとかは、ここぞという場所以外使わない。
範囲外へ行ったときの不具合見つけるのが大変面倒。
一般的な32bitCPU+32bitOSでは、速度面でも不利なので、
なるたけ、IntegerかCardinalを使うことをおすすめする。
今回のコードのような使い方程度なら、メモリのムダとか考える必要はないので。
233デフォルトの名無しさん:05/02/09 20:46:01
超初心者な質問で申し訳ないのですが、ファイルをダウンロードするにはどうすればいいのですか?
検索してみたのですが思っているようなものが見つかりません・・・
Delphi6Personalを使っているのですが、http://www.wwlnk.com/boheme/delphi/tips/tec1380.htmこういうのは使えないんでしょうか
解説しているページのURLでもいいのでどうかよろしくおねがいします。
234213:05/02/09 21:03:33
>>231-232
ご丁寧に教えていただいてありがとうございます。
初心者の私にとっては、大変参考になることばかりです。

確かに、分かりにくいコードでした。
今後は他の方が見ることも念頭においてコーディングするよう努力します。
235デフォルトの名無しさん:05/02/09 21:12:53
>>186
ありがとうございます。
なんとかやってみます。
236デフォルトの名無しさん:05/02/09 21:31:55
苦労に見合わないと思うけどなぁ・・・
素直にIE使えばいいのに。
237デフォルトの名無しさん:05/02/09 22:10:27
>>236
・・・
238デフォルトの名無しさん:05/02/09 22:25:48
>>236
現在自作のHTMLエディタにIE・Geckoエンジン両方のプレビュー機能の実装を予定していて、
前述どおりActiveXであれば両方とも実装は完了しているんですが、そうなると色々と不都合があるので。
239デフォルトの名無しさん:05/02/09 22:28:05
いやー、COMでやったあなたが偉いんだが?
何で、ソースを自分に取り込むのかがワカリマセヌ?
240デフォルトの名無しさん:05/02/09 22:53:44
(ActiveX = COMであってますよね)
COMだと他のマシンで使おうとすると、あらかじめCOMを入れておく必要があるので、多少サイズが大きくなってでもexeのみで動作できるようにしたいんです。
もし、他に方法があればヒントとかを教えてもらいたいのですが。
241デフォルトの名無しさん:05/02/09 23:00:57
>>240
配布問題ですね。なーる。
趣味の範囲ではなさそうだな。
バグが出たとき毎回コンパイルして配布するのか?
バグが出たらDLLを配布するのか?、
私なら後者のほうだな
242デフォルトの名無しさん:05/02/09 23:17:17
Geckoエンジンを使いたいけどFirefoxはインストールしていない。
Geckoエンジンを使ってページを作ったけどFirefoxで動作確認しない。
というユーザーを想像するのは難しい。
243Delフサギコ ◆A6VzDeLphI :05/02/09 23:18:00
     ∧,,∧,,,,,, )   MLの人
  ⊂ミ゚Д゚⊂,,,,,,,`つ  がんがれー。
244デフォルトの名無しさん:05/02/09 23:25:58
バグの種類にもよる、という前提はあるでしょうが、
自分の今のスキルではまだDLLの使い方(動的参照とか静的参照?)がいまいち理解しきれてないので、どちらかといえばDLLは使いたくないです。
このソフト自体は学校の授業中に思いついたソフトで、一応趣味のソフトですし、配布の予定は無いですが、やれるならやってみたいと思います。
(ケータイからなのでレスが大変です)
245デフォルトの名無しさん:05/02/09 23:28:15
2005買ってないし・・・。
勝ち組ですみません。
246デフォルトの名無しさん:05/02/09 23:32:18
コラー、君たち、デプロイメントのプロだろうが、
少しは文句書け
247デフォルトの名無しさん:05/02/09 23:33:15
>>245-246
人生の負け組みはあっち池
248デフォルトの名無しさん:05/02/09 23:34:48
M$は卑屈な奴が多い
249デフォルトの名無しさん:05/02/09 23:39:15
7は安定 2005は不安定 でよろしいですか?
250デフォルトの名無しさん:05/02/09 23:40:19
VS野郎は帰れ
251デフォルトの名無しさん:05/02/09 23:51:42
ところで、2005は不安定なんですか?
252デフォルトの名無しさん:05/02/10 00:10:44
買った人の精神状況も不安定みたいです。
253デフォルトの名無しさん:05/02/10 00:57:08
あの腐ったエディタ仕様変更できんの?
タブは8だし
フリーカーソルだし
行先頭から左押しても1つ前の末端までいかないし
複数行選択してタブ押しても消えるし
254デフォルトの名無しさん:05/02/10 01:08:24
全部出来る
255デフォルトの名無しさん:05/02/10 01:09:07
それがDelphiの仕様だ。以下略。
256デフォルトの名無しさん:05/02/10 04:49:26
Delphi6のフリー版でxmlをいじるアプリ作っています。
現在はUTF-8をShift Jisに変換して処理してるのですが、特定の文字で化けが起きてしまいます。
内部をUTF-8扱う方法か、文字化けが起きない方法はないでしょうか?
257デフォルトの名無しさん:05/02/10 05:10:11
>>256
その分言だと、Utf8ToAnsi()関数はまだ使ってないのかな
まだだったら試してみそ
ヘルプにものってるよ

xml自体をTStringListとかで読みとって、各行を全てUtf8ToAnsi()に
かければいい。
258デフォルトの名無しさん:05/02/10 12:16:51
shift-jisにないunicode文字は変換のしようがないので、tntでunicodeのまま使う。
259デフォルトの名無しさん:05/02/10 18:22:52
FormをDockした状態で表示させるにはどうすればいいんでしょうか。

表示→ManualDockでDockさせると一瞬Dockされてない状態が見えてションボリです。
260259:05/02/10 18:30:26
age。

ManualDock→表示→ManualDock
で上記問題は解決しましたが理由がわかりません。。

もっとスマートな方法をご存知の方、教えてください。
261259:05/02/10 18:42:16
通常のFormのDockでは>>259のやり方で問題ありませんでした。

JEDIコンポーネントのJvDockServer, JvDockClientを使っていたので、通常と異なる動作をしていたようです。

Form2.ManualDock(JvDockServer1.LeftDockPanel);
JvDockServer1.LeftDockPanel.ShowDockPanel(True, Form2);

上記のようにJvDockServerにManualDockした後、ShowDockPanelを呼び出すことで解決できました。

お騒がせしてすみません。
262デフォルトの名無しさん:05/02/10 21:18:53
スレッドセーフなTStrings系のクラスってない?
263デフォルトの名無しさん:05/02/10 21:50:13
以下のコードを実行すると、出力ファイルのサイズが何故か肥大化してしまいます。
ファイルサイズが変更しない正しいClipboard上でのBitmapの扱い方を教えて下さい。

var
 BMP: TBitmap;
begin
 BMP:= TBitmap.Create;
 try
  BMP.LoadFromFile('Hoge.bmp');
  Clipboard.Assign(BMP);

  BMP.Assign(Clipboard);
  BMP.SaveToFile('ClipHoge.bmp');
 finally
  BMP.Free;
 end;
end;
264Delフサギコ ◆A6VzDeLphI :05/02/10 23:45:19
     ∧,,∧,,,,,, )      (´⌒(´
  ⊂ミ゚Д゚⊂,,,,,,,`つ≡≡(´⌒;;;≡≡≡
おそくなりすぎた
>>233さん、ここなどどうか。
http://hpcgi1.nifty.com/MADIA/DelphiBBS/wwwlng.cgi?print+200412/04120006.txt
265デフォルトの名無しさん:05/02/10 23:47:30
落とすだけならTDownloadUrlアクション
266デフォルトの名無しさん:05/02/10 23:52:37
>>233
「思っているようなもの」を具体的に。
267デフォルトの名無しさん:05/02/11 00:37:07
Del6Personal使ってます

FormにDirectoryListBoxとFileListBoxを配置して実行、
DirectoryListBoxの階層をいろいろ変えましたがFileListBoxのほうに反映されてません
ヘルプによると、FileListBoxはカレントディレクトリを表示するコンポだそうですが
DirectoryListBoxのなんらかの値を手動で渡してやらないとダメなんでしょうか?
268デフォルトの名無しさん:05/02/11 00:38:41
なんかDLB側のプロパティで結び付けるじゃないの
269デフォルトの名無しさん:05/02/11 00:45:11
>>268
DirectoryListBoxのFileListプロパティで指定してやったらうまく行きました!
てっきり子側(FileListBox)で設定するんだという固定観念に囚われすぎてた・・・
ありがとうございました!
270デフォルトの名無しさん:05/02/11 13:06:48
 TTreeViewでクリックしたノードをTListで管理しようとしているのですがノードを削除
したときの動作がうまくいきません。(4)を実現するためにOnDeletionで
  for j := 0 to FUndoList.Count-1 do //FUndoList: TList
   if FUndoList[j] = Nil then FUndoList.Delete(j);
とやってみましたがダメでした。何か方法はないでしょうか?
◇R           (1)★Pと▼Xと◆Cをクリック
├−−◆A        (2)TListで★Pと▼Xと◆Cを保存
│  │         (3)◆Aを削除
│  ├−−▼T     (4)TListから★Pと▼Xを削除
│  │  │
│  │  └−−★P
│  └−−▼X

◇Z
└−−◆C
   │
   ◆V
271270訂正:05/02/11 13:07:52
   if FUndoList[j] = Node then FUndoList.Delete(j);
272& ◆aXEE0ljRWg :05/02/11 14:06:39
No := FUndoList.IndexOf(Node);
if No > -1 then FUndoList.Delete(No);
でOKでした。
273デフォルトの名無しさん:05/02/11 18:14:18
すみません質問させてください
現在POS関連のプログラムを作っております。
POSの制御にActiveXコントロールを使用するのですが、
フォームを持つDLLにこれを乗せて使用してもエラーが出て使用できません。
色々試した見たところActiveXであればどんなものでも上記の現象が起きるようです。
ぐぐってみたところCoInitialize及びCoUninitializeというのがキモであるように書いてありましたが
initailzation節及びfinalization節にこれらを書いてもうまくいきませんでした。
解決策を知っておられるかたがいらっしゃいましたらお教え願いますでしょうか?
ちなみに、アプリケーションの制約上どうしてもPOSのコントロールを持つフォームを
DLLとして使わなければなりません。
どうかよろしくお願い致します。
274デフォルトの名無しさん:05/02/11 18:16:51
とりあえず新規プロジェクト作ってまっさらなフォームに貼り付けてみたら。
付属のサンプル試してみるとか。
275デフォルトの名無しさん:05/02/11 19:25:19
>>273
CoInitialize(nil);
276デフォルトの名無しさん:05/02/11 19:29:43
ComObjとかActiveXをusesしとけば自動で呼ばれなかったけ?
間違っていたらごめんよ
277デフォルトの名無しさん:05/02/11 19:33:51
ついでだからCoInitialize関連で質問。これってオブジェクト使うごとに唱えなほうがいいのですか?
それともアプリ実行時に一度唱えておけばOK?

アプリ実行時に唱えておいたらスレッド関連でエラー起こした記憶があるから、
クラス化しちゃってコンストラクタとデストラクタで呼ぶようにしちゃいました。
問題ないかな?
278デフォルトの名無しさん:05/02/11 19:41:37
>>277
1度最初で唱えとけばOK
279デフォルトの名無しさん:05/02/11 19:41:46
面倒だからunitのinitializationで呼んでる
280デフォルトの名無しさん:05/02/11 19:42:32
何回呼び出しても問題は無い
281デフォルトの名無しさん:05/02/11 22:10:38
>>273
EPSONのOPOSActiveXだったら、上手くやっているから答えることができるけど、
他の会社だったら自分はこたえられない。
よかったら何を使っているのか教えてください。

282デフォルトの名無しさん:05/02/11 22:58:01
最近Delphiを知った者です

http://forum.nifty.com/fdelphi/samples/01348.html
http://forum.nifty.com/fdelphi/samples/01349.html
http://forum.nifty.com/fdelphi/samples/01350.html
を使ってみたいのですが、どうやってソースを組み込むのかがわかりません
新規Form(Unit1)にStringGridを貼り付けて、さらにUnit1のソースの最後の「end.」直前に
ペーストしたりしたのですが、根本的に間違ってますか?
なんか、Power関数(?)も宣言(?)が必要みたいだし、さっぱりどうしたらいいのかわかりません

とりあえず、OpenDialogを使って一つのJPEGファイルを指定して、そのEXIF情報を表示するところまで
実現させてみたいのですが・・・Delphiの優しい先輩方、助けてください
283デフォルトの名無しさん:05/02/11 23:09:09
procedure TForm1.ExifRead(ExifFile: String);

なんだから、TForm1 の public 部か private 部に

procedure ExifRead(ExifFile: String);

という宣言を手動で追加してから、implementation 部の下に、あの実装コードを
コピペするとよい。

> Power関数(?)も宣言(?)が必要みたいだし、

uses に Math を追加する。どのユニットを追加すべきかは、ヘルプを見ると分かる。


284デフォルトの名無しさん:05/02/11 23:12:37
ActiveXコントロールの初期化はCreateイベントではなくShowイベント
で行う事。いじょ。
285デフォルトの名無しさん:05/02/11 23:25:51
そんなことは無い。いちいちTApplicationが複数のForm持っていたら
どう済んだよw。誰が責任取るんだよ
286デフォルトの名無しさん:05/02/12 00:23:12
284は、どういう書き込みなの?
笑うとこ?
真面目なレス?
分からない…。
287デフォルトの名無しさん:05/02/12 00:30:40
GetPrivateProfileString()で分からない部分があるので質問します。

Project1.ini
[Section1]
key01=test


var
str,Ini_Path2 : String ;
MAX_PATH : LongInt ;
begin
Ini_Path := ChangeFileExt(Application.ExeName, '.ini');
GetPrivateProfileString('section', 'key01', not_use', PChar(str), MAX_PATH, PChar(Ini_Path));
end;

と書いて、コンパイルは出来るものの実際に実行すると例外が発生します。
引数の宣言に問題があると思うのですが、google等で調べてもなかなか解決しません。
助言お願いします。
288デフォルトの名無しさん:05/02/12 00:31:45
Inifiles.TInifile使え
289273:05/02/12 00:44:53
皆さんレスありがとうございます。
>>274 その方法で試しております。
>>275 initializatin節でCoInitialize(nil)、finalization節でCoUnitializeを行ってます。
>>281 残念ながらSHARPでして…でもOPOSなのでよろしければご教授願えますでしょうか?
>>284 フォームのCreateにもShowにも何も書いておりません。
290デフォルトの名無しさん:05/02/12 02:55:43
>>288
ありがとうございました。
その2つのキーワードでググったら参考になるサイトが見つかって完成させることが出来ました。

291デフォルトの名無しさん:05/02/12 08:57:53
>>284
    |
    |
    (=)   /V\
    J   /◎;;;,;,,,,ヽ> 悪いけどこっちも
    _ ム::::(゚Д゚,,)::|  忙しいから
   ヽツ.(ノ:::::::::.:::::.:..|)
     ヾソ:::::::::::::::::.:ノ
      ` ー U'"U'
292デフォルトの名無しさん:05/02/12 09:40:43
わりと規模の大きいプログラムになってくると、当然ソースが長くなりますが
複数のUnitに分割するのと一本のUnitにまとめるのでは、どっちがオススメなんでしょうか?
やっぱり個人の好みの問題?
293デフォルトの名無しさん:05/02/12 09:57:51
>>292
複数のUnitに分散しる。
294デフォルトの名無しさん:05/02/12 10:00:56
>>292
吐き出されるexeのサイズからいって一本まとめが正解
295デフォルトの名無しさん:05/02/12 10:26:10
分散に一票。
整理することは、再利用のための一歩。
296デフォルトの名無しさん:05/02/12 10:31:47
>やっぱり個人の好みの問題?
分割は目的ではない。

ソース、クラス、ロジックの分割は、ソースコードやクラス階層やロジック構造の整理の結果。
また、GUI 以前の開発環境は高々 80x25 のコンソールしかなかったので、上下左右にでかいコードは
疎んじられた。開発環境も思考を束縛するものだということ。

なので、オススメ。という物は無い。
297デフォルトの名無しさん:05/02/12 10:39:54
>>294
「CD1枚に収めたい」みたいな目的がなければ、exeのサイズは
あまり気にしなくても良い。

>>292
可読性や再利用性を考えたら、やっぱり徹底的な分割と
グループ化が必要。

あとは構成管理かな。
298デフォルトの名無しさん:05/02/12 10:50:49
>>296
> オススメ。という物は無い。
でっかいコードやクラスを書けという人は、古今東西一人も居ない。
299デフォルトの名無しさん:05/02/12 11:04:54
1unitにまとめる・・(((((((( ;゚Д゚)))))))ガクガクブルブル
300292:05/02/12 11:08:38
みなさんレスありがとうございます
自分の場合、二重起動防止等をあらかじめ追加した自前のデフォルトdprを用意しといて
新規でアプリを作るときにはそこから始めてたんですけど、そこらへんも含めて
分散化して管理する方向に切り替えてみようかと思います
301デフォルトの名無しさん:05/02/12 11:10:56
>>299
1unitだとプリントアウトが楽っていう利点もあるぞw
302デフォルトの名無しさん:05/02/12 11:12:00
ラベルにaを使うにどうすればいいでしょうか?

for a := 1 to 3 do
begin
Label1.Caption := IntToStr(a);
Label2.Caption := IntToStr(a);
Label3.Caption := IntToStr(a);
end;

このような感じをねらっています。

for a := 1 to 3 do
begin
Label[a].Caption := IntToStr(a);
end;
303デフォルトの名無しさん:05/02/12 11:21:12
304デフォルトの名無しさん:05/02/12 13:03:53
>>292
Delphiではunit=namespaceだからその単位で分割する。
数学・数値処理ならMathユニットに放り込んであるし
文字列処理関数はStrUtilsでカテゴライズしてある。
Form1に関連する処理はUnit1に記述する。
現実的には常に1unitというのはありえない。
305282:05/02/12 13:12:59
>>283
ありがとうございます!
ただ、まだどうしても「[エラー] Unit1.pas(517): 未定義の識別子 : 'GetJpegSize'」が出てしまいます・・・
「GetJpegSize」をヘルプで検索したのですが見つかりませんでした
306デフォルトの名無しさん:05/02/12 13:16:16
そんな標準関数はDELPHIには無いよ
307デフォルトの名無しさん:05/02/12 13:27:09
308282:05/02/12 13:37:54
>>307
「[エラー] Unit1.pas(588): 変数実パラメータと変数仮パラメータとは同一の型でなければなりません」が出てしまいます・・・
309デフォルトの名無しさん:05/02/12 13:54:30
ちょっと質問させてください。

TPaintBoxをフォーム上にalClientで置いて、そのOnPaintイベントで、
そのときのTScrollBarの位置に応じてTBitmapの一部を切り取って
bitbltで転送しています。

スクロール程度でしたら問題ないのですが、フォームをリサイズすると、
白い帯状のノイズが目に付きます。

OnPaintイベント内では、再入防止のための変数のチェック以外の
特別な処理は行ってません。

どうにか改善する方法はないでしょうか? よろしくお願いします。
310デフォルトの名無しさん:05/02/12 14:26:26
>>304
ライブラリとしては、Unit=Namespaceでも良いのだろうけど
アプリケーション(の部品)としては、使い勝手が悪い。

VCLは古ぶるしく、今ひとつ参考にならない。
311デフォルトの名無しさん:05/02/12 14:27:35
お前のレスも具体的に乏しく、今ひとつ参考にならな。
312デフォルトの名無しさん:05/02/12 14:29:36
>>308
Unit1.pas の 588 行目にある GetJpegSize の呼び出しコードの、
二つ目または三つ目の引数が Word 型ではない。

としかわからないな。01350.html を元にしているのなら、X と Y の定義を
何にしましたか?
313273:05/02/12 14:33:27
申し訳ありません自己解決しました。
デバイスの開閉をFormCreate部分から除き
別の場所で行うことによって正常に動作しました。
うまく動かなかったのはDLL側の記述の不備がありました。
お騒がせいたしましたm__m
314デフォルトの名無しさん:05/02/12 14:34:49
>>311
自分で試行錯誤してみる事が大切。
315デフォルトの名無しさん:05/02/12 14:36:34
>309
Windows の宿命で、イベントキューが埋まった場合に WM_PAINT は後回しに
されます。かつ、複数の WM_PAINT はひとつに融合されてしまいます。
そのため、OnPaint が呼ばれるタイミングが遅くなるときがあります。

どうしても描画を優先させたければ WM_PAINT だけでなく、要所要所で描画することを
考えないといけない。この場合だと、枠のリサイズ時にも描画するとか。

あとはダブルバッファかな?
316デフォルトの名無しさん:05/02/12 15:34:51
>>303
ありがとうございます。
317233:05/02/12 17:39:44
>>264-266
レスありがとうございます。>>264さんのページの方法でうまくいきそうです。
ありがとうございました。
318309:05/02/12 17:54:20
>>315
ありがとうございます。

いろいろ試してみます。
319デフォルトの名無しさん:05/02/12 18:16:15
ちょっと質問です。

一般的に、delphiでは配列は0から始めるべきでしょうか、
それとも1から始めるべきでしょうか。

自分はC人間なので0からにしたいのですが、
ヘルプだと1からの例ばっかりだったので。

みなさんの主観でよいので回答願います。
320デフォルトの名無しさん:05/02/12 18:17:08
どっちでもいいなら0にしとけ。
Stringは歴史的経緯から1になってるだけ。
321282:05/02/12 18:27:43
>>312
>>282http://forum.nifty.com/fdelphi/samples/01348.htmlの通り
「I,K,Hd,Hd2,Pt,X,Y: Integer;」でX,YはいずれもIntegerです。

試しに>>307の「GetJpegSize」の
-----------------------------------------
function GetJpegSize(const FileName:String;
var JWidth,JHeight:Word):String;
-----------------------------------------
のWordをIntegerにしてみたのですがダメでした。

>>282内で使われている「GetJpegSize」関数と
>>305の「GetJpegSize」関数はまったく互換性がないみたいですね。

これでまた振り出しに戻ってしまった・・・
322デフォルトの名無しさん:05/02/12 18:30:53
>>319
別に状況によりけり。
Cと違って添え字は順序型なら何でも良いわけだし
323デフォルトの名無しさん:05/02/12 19:14:07
system.pasに実装されている処理を改造したいのですが、
他のユニット、例えばclasses.pasを改造するようにsystem.pasを
書き換えたものをプロジェクトに登録しても、
そのsystem.pasではなくデフォルトのsystem.dcuが使われてしまいます。
dprのusesでsystem in '……',を先頭に持ってきても同じでした。

これはsystemが暗黙にusesされるためだと思いますが、
独自のsystem.pasを使う方法があったら教えてください。
324デフォルトの名無しさん:05/02/12 20:00:09
おたずねします。

case で書けるものを敢えて if で書くと何かデメリットがありますか?
325デフォルトの名無しさん:05/02/12 20:01:47
caseの方が速い可能性があるかもしれない
326デフォルトの名無しさん:05/02/12 20:56:20
>>320,322
レスどうもです。
じゃあ0にしときます、とりあえず。
327デフォルトの名無しさん:05/02/12 22:06:33
>>325
お答えありがとうございます。case にします。
328282:05/02/13 01:00:32
あれこれ試行錯誤したんですが完全に行き詰まってしまいました(´・ω・`)
329デフォルトの名無しさん:05/02/13 01:02:15
どっかにソースうpってみたら
330309:05/02/13 01:32:08
>>315
> あとはダブルバッファかな?

結局、いろいろやって、アドバイスの通り、
フォームの DoubleBuffered でチラツキが
完全に消えました。メモリもそれほど
消費してないみたいです。

ホントにありがとうございました。
331デフォルトの名無しさん:05/02/13 01:34:20
はじめからダブルバッファのためにあるような質問だったね
332デフォルトの名無しさん:05/02/13 02:01:14
>>328
Exif を読む分には GetJpegSize は必要ないんだから、削っちゃえばいいじゃん。

if GetJpegSize(ExifFile,X,Y) then begin
・・・
end;

を削れば動くでしょ?

どうしてもサイズが取得したいなら、>>307 の引数を Integer にしたバージョンをがんばって作るか、
Jpeg ユニットを uses して TJPEGImage でも使えば?
333332:05/02/13 02:05:53
ああ、書いた後に思いついたけど、
新たに WordX, WordY: Word とでも宣言して

if GetJpegSize(ExifFile,WordX,WordY) then begin
StringGrid1.RowCount:=StringGrid1.RowCount+1;
StringGrid1.Cells[0,StringGrid1.RowCount-1]:='画像サイズ:';
StringGrid1.Cells[1,StringGrid1.RowCount-1]:=IntToStr(WordX)+'×'+IntToStr(WordY);
end;

でもいいよね。これなら、GetJpegSize を書き換える必要もないし。
334デフォルトの名無しさん:05/02/13 11:04:43
Editから入力/削除した文字をそのまま
同じフォームの別のLabelに反映させるには
どうすればいいでしょうか?
335デフォルトの名無しさん:05/02/13 11:15:01
EditのOnKeyUpイベントで
Label.Caption := Edit.Text
するとか
336デフォルトの名無しさん:05/02/13 11:46:31
>>335
バッチリ上手くいきました!
どうもありがとうございました。
337デフォルトの名無しさん:05/02/13 11:52:11
OnKeyUpなんて使ったことなかった・・・
338デフォルトの名無しさん:05/02/13 12:36:06
OnKeyUpだとマウスでの編集に対応できないからOnChangeにしとけ
339デフォルトの名無しさん:05/02/13 13:41:40
>>338
OnChangeの方が広く対応できるということですね。
アドバイスありがとうございます。
340デフォルトの名無しさん:05/02/13 17:00:12
今から常駐してやるから愚痴でもなんでも聞いてこい
341デフォルトの名無しさん:05/02/13 17:09:59
誰一人 D2005 のバグを教えてくれません。どうしたらよいでしょう。
342341:05/02/13 17:11:05
すまん。ここはくだすれだった。341 は忘れてくれ。
343263:05/02/13 17:12:02
>>340
>>263お願いします
試しにCommon Files以下のにある「CHEMICAL.BMP」で試したところ、
43.2KBが169KBにまで膨らんでしまいました
何が間違っているのでしょうか?
344340:05/02/13 17:19:52
ファイルを見てないから判らないが、
8(4or以下)ビット画像を24(32)ビット画像で保存しているのでは?
345デフォルトの名無しさん:05/02/13 17:20:43
>>243
俺は340じゃないが、
ようするに、クリップボードを通すと、
256色が、なんで16bitとか24bitとかに化けるのかって意味?
346263:05/02/13 17:32:18
>>340さま
>>345さま

Assignした後のPixelFormatが何故かpfDeviceになっていたので、
pf8Bitを明示的に指定したところ問題がなくなりました
ありがとうございました!
347340:05/02/13 17:35:08
TBitmap.Assignの箇所をみたが、PixelFormatに関してなにもやっていない

TBitmap.LoadFromClipboardFormatのヘルプ例を参考にしてみ
348263:05/02/13 17:44:28
重ね重ねすいません
Loadは出来たのですが、今度はSaveが…
TBitmapのヘルプのSaveToClipBoardFormatの例を実行したのですが、
クリップボードへ出力してIrfanView等で読み込むと
何故かファイルサイズが膨らんでしまいます… orz
>>345さまのおっしゃるようにbitが化けているようなのですが、
どうやったら8bitとしてクリップボードへ保存出来るのでしょうか?

procedure Hoge;
var
MyFormat : Word;
Bitmap : TBitMap;
AData: Cardinal;
APalette : HPalette;
begin
Bitmap := TBitmap.Create;
try
Bitmap.LoadFromFile('CHEMICAL.BMP');
Bitmap.SaveToClipBoardFormat(MyFormat,AData,APalette);
ClipBoard.SetAsHandle(MyFormat,AData);
finally
Bitmap.Free;
end;
end;
349デフォルトの名無しさん:05/02/13 17:48:56
バッチプログラムの動かし方について質問させてください。
Del側で取得した文字列を引数としてバッチを呼び出しているのですが
(複数の文字列情報をバッチ側で処理したいんです)、
まとめて一文としているためか256文字以上になると
バッファオーバーフローと表示されてしまいます。
複数ある引数を一つずつ渡せば回避できるかもとか考えたのですが、
上手い方法はないでしょうか?
350340:05/02/13 17:50:02
APaletteやADataっていきなり出てきてるようだが、Bitmapのメンバじゃないのか?
351340:05/02/13 17:52:32
バッチ側のプログラムがDelphiでは無い?のでスレ違い
バッチ側のプログラムが悪いんだろ
352デフォルトの名無しさん:05/02/13 17:53:23
オーバーフローがどっちででているかに因るだろ
353263:05/02/13 17:54:12
>>350
6Personalのヘルプの例では「AData,APalette : THandle;」と宣言されているのですが、
コンパイルしようとすると
「変数実パラメータと変数仮パラメータとは同一の型でなければなりません」
と怒られてしまうため、同一の型に適当に変更してしまいました
354デフォルトの名無しさん:05/02/13 17:56:27
アフォ
355デフォルトの名無しさん:05/02/13 17:59:32
ちょっと、違うよ。 

VCL内部で勝手に、pfDevice にしてClipboardのハンドるで取得したHBitmapからBitBltで複製してるから
元のクリップボードの色数とかは反映されない仕掛けのようだから、

自前で、TBitmap.LoadFromClipboardFormatを参考にして
ClipBoard.GetAsHandle(cf_Bitmap) して
GetObject(AData, sizeof(DIB), @DIB);
で 収得したDIBのメンバーから色数とか調べて設定してからという処理が必要になるんじゃないかな

このあたりはVCLのコードとWindowsのヘルプを参考に見てゆくしかないよ

356355:05/02/13 18:15:27
>>348 MyFormatを確認してごらん。 たぶんCFBITMAPになってない?


つまり
http://www.asahi-net.or.jp/~HA3T-NKMR/vcl2-7.htm
CF_DIB 形式のビットマップはサポートされてなくて
CF_BITMAP 形式しかサポートしないから

TBITMAPのクリップボード機能では結局はやりたい事は出来ないという事みたいだよ。

だから、やりたいなら自前でCF_DIBに対応しなければいけないようだよ。

357デフォルトの名無しさん:05/02/13 18:26:31
俺はいつもここで、NkDIB推薦している奴だけど、
今回もTBitmapのかわりにTNkDIB使ってみたら?
358デフォルトの名無しさん:05/02/13 18:47:48
>>351
>>352
舌足らずですみません。
バッチ側が悪いというよりはWinのシェルが一回のコマンドで
受け付けられる文字数が最大255文字だそうです。
一度にすべての情報を渡すとオーバーしやすいので
なんとかDel側で複数に分けて同じバッチのプロセスに
引数として文字列を突っ込む方法はないでしょうか?
という意図の質問でした。
ちなみにエラーが出たのはDel側で、256文字以上の文字列を
WinExec関数で実行させようとすると出てきました。

説明がヘタクソですみません。
359デフォルトの名無しさん:05/02/13 18:52:27
単純にプロセス間通信
cmdバッチじゃ無理だろう
360デフォルトの名無しさん:05/02/13 18:58:38
でかいデータはテンポラリファイルか標準入出力
361263:05/02/13 20:46:31
>>356
>>357
とてもご丁寧にしてくださり、恐縮です
…が、最近Pointerを理解し始めた程度の初心者ですので、
そこのサイトに何が書いてあるのかイマイチわかりません…
でも、泣き言言っててもしょうがないので、とりあえず
357様の推薦してくださったNkDIBを使って頑張ってみます
本当にありがとうございました
362358:05/02/13 20:48:56
色々いじっていたらナゼかバッファオーバーフローは出なくなりました。
その後も表記されるエラーはEAccessViolationで、
WinExecを実行する前のStrAllocで確保するとき
多めのバイト数を指定することで問題を回避できました。
256文字以上でも平気で実行されるのが少し気になっているのですが…。
(128or255が最大っていう表記は結構見かけたんですが何か勘違いしてるっぽいです)
もう少し調べてみます。

>>359
プロセス間通信は試したことがないので方法に見当がつきません…。
改めて調べてみます。

>>360
テンポラリファイルを作るのは考えつかなかったです。
大きなデータを扱う時に試してみたいと思います。
363デフォルトの名無しさん:05/02/13 22:01:34
とりあえず、ソース出せ
364デフォルトの名無しさん:05/02/13 23:42:59
ポップアップヒントについて教えてください。

Delphiのエディタにあるように、特定の文字の上にカーソルが来ると、
定義場所を示すような黄色背景のヒントがすが、これの実現方法が
分かりません。

Application.OnShowHint なんかとは違うような気がするんですが、
どうなんでしょう。

よろしくお願いします。
365デフォルトの名無しさん:05/02/13 23:45:39
HintWindowClass
366デフォルトの名無しさん:05/02/13 23:53:01
デルヒの超初心者用参考書を教えてください。
Javaで言えばやさしいJava(高橋氏)、Cでいえば、C言語1(倉薫氏)くらい簡単なのがよいです
よろしくお願いします。
367デフォルトの名無しさん:05/02/13 23:53:28
368デフォルトの名無しさん:05/02/14 00:02:08
ありがとうございます
そこ見たんですが、基礎からわかるDelphi6とカンタン!Delphiプログラミング はもう売ってないみたいですし、
Delphiはじめの一歩 やさしいプログラミングはアマゾンで不親切とあります
やはりデルヒはほかの言語をマスターしてからじゃないとつらいんでしょうか
369デフォルトの名無しさん:05/02/14 00:10:19
>>366
悲しいことに、おすすめの本はいまや古本屋でしか入手出来なさそう。
370デフォルトの名無しさん:05/02/14 00:13:38
とりあえず初心者用の本って、言うじゃない?
でもあんた、目的意識がなけりゃどんな本見ても無意味ですから
371デフォルトの名無しさん:05/02/14 00:15:26
>>369
そうなんですか。
新品での購入はあきらめます。ありがとうございました。
372デフォルトの名無しさん:05/02/14 00:16:29
別に最初の言語としてDelphiは向いてないということはない(と思う)。
分からないところはオンラインの解説サイトもいくつかあるから
そこを参照するなりここで聞くなりすればいいし。
373デフォルトの名無しさん:05/02/14 00:24:44
>>371
まあ、seventh delphiというサイトを最初は見るのがいいよ。
あそこの旧Delphi入門
374デフォルトの名無しさん:05/02/14 00:40:24
>>365
なるほど。HintWindowClass ですか。

コントロールの ShowHint を細かく切り換えて、
OnShowHint で位置などを指定してたんですが、
これじゃ、一定時間後にヒントが消えちゃいますものね。

THintWindow のヘルプを読んでみます。
ありがとうございました。
375デフォルトの名無しさん:05/02/14 01:53:11
質問です。
exe埋め込みwave再生したいのですが、
tips本のとおりやっても再生できません。
ご指摘お願いします。
具体的にはpsoundに "RIFF、f"が代入され,sndPlaySoundでエラーです。

procedure oto(a:integer);
var h,hwave:thandle;
psound:lpstr;
t:string;
begin
hwave:=0;
psound:=nil;
t:=inttostr(a);
if length(t)=1 then t:='0'+t;
t:='sound'+t;
h:=findresource(hinstance,pchar(t),RT_RCDATA);
if h<>0 then
begin
hwave:=loadresource(hinstance,h);
if hwave<>0 then
begin
psound:=lockresource(hwave);
if psound<> nil then
sndPlaySound(psound,SND_ASYNC)
end;
end;
end;
376375:05/02/14 01:54:35
rcファイル
sound01 RCDATA "1.wav"
sound02 RCDATA "2.wav"
sound03 RCDATA "3.wav"
sound04 RCDATA "4.wav"
sound05 RCDATA "5.wav"
sound06 RCDATA "6.wav"
sound07 RCDATA "7.wav"
sound08 RCDATA "8.wav"
sound09 RCDATA "9.wav"


インデント解除されているようで見難くてすいません。
377デフォルトの名無しさん:05/02/14 02:57:37
>>375
そのソース(じっくり見てないけど)にこだわるのも「あり」だけど、
他のやり方(結局は同じだけど)を探すのも「あり」かと。


ttp://leed.issp.u-tokyo.ac.jp/~takeuchi/delphi/article/012/012038.html
は読んでみた?
378377:05/02/14 03:04:24
って、例を挙げたけど、そっちもよく読んでないので…

ttp://leed.issp.u-tokyo.ac.jp/~takeuchi/delphi/search.cgi
Delphi-ML過去ログ検索

を探してみるといいよと。
379デフォルトの名無しさん:05/02/14 03:07:00
SND_MEMORYがいるのでは?
あと、Formatの使い方を覚えよう。
380デフォルトの名無しさん:05/02/14 12:03:02
Cの%2dみたいに書式付で出力するにはどうすればいいんでしょうか?
381デフォルトの名無しさん:05/02/14 12:46:49
>>380
Format関数。
VB風の書式化文字列はFormatFloatやFormatDateTimeだな〜ん。
382デフォルトの名無しさん:05/02/14 13:55:35
FileListBox は同ディレクトリないのファイルを出力してくれるのですが、
例えば、同ディレクトリ内に logディレクトりを作り 
そのlogディレクトリ内のファイルを出力させる場合を教えてください。

Maskを *\log\*.txt ではなんともならなく、
他にディレクトリを指定できるところもなく、弱っています。
どうすればいいでしょうか? 
383デフォルトの名無しさん:05/02/14 14:20:35
382です

ありがとうございます。わかりました。 

FileListBox1.Directory := 'log';

で出来ました。お騒がせしました。
384デフォルトの名無しさん:05/02/14 14:25:58
TDirectoryListBoxと連携させてるならそれを切って、
TFileListBox.DirectoryにTDirectoryListBox.Directoryから取り出したパス文字列に
\logを付け足して動的にセットしてやるといいんでは?各階層に\logフォルダの存在チェックもしつつ。

procedure TForm1.DirectoryListBox1Change(Sender: TObject);
var
 path,logpath:TFileName;
begin
 path := DirectoryListBox1.Directory;
 logpath := path + '\log';

 if DirectoryExists(logpath) then
 begin
  FileListBox1.Directory := logpath
 end
 else
 begin
  FileListBox1.Directory := path
 end;
end;
385デフォルトの名無しさん:05/02/14 15:01:31
>>384
ありがとうございます。

とてもいい感じにうまく動作しました。
これより、どのようになってるか理解していきます。

386デフォルトの名無しさん:05/02/14 16:01:03
質問です。

DelphiでDLL作って、DLLの呼び出し元からウィンドウハンドルもらって、
Delphiで作ったフォームをそのウィンドウハンドルのモーダルウィンドウとして
表示したいのですけど、どのやうにすればいいのでしょうか?
387デフォルトの名無しさん:05/02/14 16:01:50
俺も知りたいちょー知りたい
388デフォルトの名無しさん:05/02/14 16:02:49
どの部分が分からないの?
389デフォルトの名無しさん:05/02/14 16:03:39
ちなみにモードレスウィンドウとして表示はできてるの?
390デフォルトの名無しさん:05/02/14 16:34:44
どっちも知りたいちょー知りたい
391デフォルトの名無しさん:05/02/14 16:36:26
DLLへの初期化引数として呼び出し元のApprication.Handle(THnadle)型を渡して、
それをDLL側にて自身のApprication.Handleへ代入。
DLL側で自身の初期処理用手続きを書いてそこで引数(Handle)受け取ってやるといい。

それが終わったら同じ初期処理内で自身をShowModal。
392デフォルトの名無しさん:05/02/14 17:05:14
>>391
Formのインスタンスを作るときの、コンストラクタの引数は何にすればいいんでつか?
393デフォルトの名無しさん:05/02/14 17:25:34
オーナーを何にすればいいかって事?
Apprication 変数を使うか、
ShowModal するんだからnilでも
394392:05/02/14 17:29:28
をを、TApplicationって、TComponentから継承されていたのね!
しりませんでした。つーか、この辺の処理をよく理解していない(汗
395392:05/02/14 17:46:10
追加質問ですが・・・
TApplication.Handleのヘルプに、

>これにより,ホストアプリケーションの DLL のフォーム部分が作成されます。
>このハンドルは EXE 内の Handle プロパティに割り当ててはいけません。

って書いてあったんですが、よう意味がわかりません。
偉い方、教えてください。
396375:05/02/14 20:59:01
>>377

リンク先の方法ではじめはトライしましたが、
うまくいきませんでした。

>>379

SND_MEMORYの件とりあえず調べてみます。
397375:05/02/14 21:00:04
sage忘れ(おそいけど)
398デフォルトの名無しさん:05/02/14 21:28:28
>>396
リソースストリームで読み込んで、マルチメディアAPIでガシガシ再生すれば?
あと、某有名MP3プレーヤコンポはストリーム再生もサポートしているから、
WaveをMP3にして、リソースストリームを直接再生してやると、Waveのサイズによっては
EXEが小さくなってお徳かも。
399デフォルトの名無しさん:05/02/15 02:33:53
「リソースがちゃんと作成出来てない」ってオチじゃ、あるま〜にゃっ!
400デフォルトの名無しさん:05/02/15 04:27:08
DirectXのxファイルをはき出させたいのですが、いいコンポーネントかライブラリってありませんか。
401デフォルトの名無しさん:05/02/15 10:58:47
変数の中身を変数とする方法を教えてください。

たとえば

data := 'test';
と変数'data'に'test'というデータを格納し

dataの中の test を変数名として
test := '中身';

ということをしたいんです。

perlでいうあらわすと

$data = "test";

$$data = "中身";

print $test;

と、すると 「中身」と表示される。

よろしくお願いします。
402デフォルトの名無しさん:05/02/15 11:21:30
できない
403デフォルトの名無しさん:05/02/15 12:33:53
>>401

Strings.Objects[Strings.IndexOf('hoge')]

みたいにやって代用できなくもない。
しかし面倒。しかもアイテムが数千、数万になると悶絶しそうな遅さ。
実用性を考えるなら、ハッシュ値で絞り込むようなデータ構造を自分で作るべし。
ここでTemplateが使えないというDelphiの悲しさが・・・
404デフォルトの名無しさん:05/02/15 13:09:23
すなおにできないって言うべき
405デフォルトの名無しさん:05/02/15 13:49:09
>>404 は逆立ちしてもできない。
>>401 は頑張ればできる。
406デフォルトの名無しさん:05/02/15 14:18:19
>>401
それに近いのはプロパティかな。
実行時型情報の仕掛けでプロパティにアクセスするようにするといいよ。

407デフォルトの名無しさん:05/02/15 14:25:37
近いのではなく「変数の中身を変数とする方法」の質問してる。
Delphiでは出来ない。データ構造ではなく、言語使用の問題だから。
408デフォルトの名無しさん:05/02/15 14:26:31
すなおにできないって言うべき
409デフォルトの名無しさん:05/02/15 14:27:59
>>405
回答マダー?
410デフォルトの名無しさん:05/02/15 14:28:11
動的にソース吐いてビルドしてbplロードしてプロパティ列挙すれば出来る
要dcc32w
411デフォルトの名無しさん:05/02/15 14:31:33
プロパティと変数の区別もつかない香具師は回答しなくていいよ
412デフォルトの名無しさん:05/02/15 14:32:47
やりたきゃ普通の変数だって出来るぞ
function getvaraddr(varname: string): pointer;
begin
 if varname = 'test' then Result := @test;
end;
413デフォルトの名無しさん:05/02/15 14:34:31
無理してDelphiでやるなよ(´・ω・`)
414デフォルトの名無しさん:05/02/15 14:35:05
hogeかも知れないし
415デフォルトの名無しさん:05/02/15 14:35:07
>>411
変数とプロパティの区別ってなんですか?
416デフォルトの名無しさん:05/02/15 14:36:04
変数は変数、プロパティーはプロパティー
417デフォルトの名無しさん:05/02/15 14:38:00
プロパティと変数の区別の説明もできない香具師は回答しなくていいよ
418デフォルトの名無しさん:05/02/15 14:54:25
やっぱり知らないらしいな。こんなのばっか・・・
419406:05/02/15 15:43:49
だから、例えばフォームにpublishedでプロパティを定義しておくだろ?
published
property hoge:Integer;

で、ctrl+ALT+Cで後の定義はやってくれる。

そうすると、こいつは実行ファイルに、プロパティ名が埋め込まれる。
実行時型情報という奴だ。
uses TypeInfo して
GetPropValue / SetPropValue でアクセス出来る。


例 SetPropValue(Self,'hoge',data);

ね? これなら簡単だし、手間不要でしょ?

しかもプロパティだから、書き込み時にアクションさせる事も出来るし
420406:05/02/15 15:53:08
あ!、フォームの場合は、published にするだけで埋め込み出来るけど

外部アクセス可能な変数だけのクラス作りたいとかいう場合は、
{$TYPEINFO ON} するか
TPersistent から継承するといいよ
421デフォルトの名無しさん:05/02/15 15:54:44
事前に定義して置いたら意味ないしそこまでしてやりたいなんていってないだろ。
フサスレ池
422デフォルトの名無しさん:05/02/15 15:54:51
すみません、プロパティーじゃなくて、変数の中身を変数とする方法を教えてください。
423デフォルトの名無しさん:05/02/15 15:56:38
>>405
回答マダー?
424406:05/02/15 16:02:30
>>421

ああ、事前に定義しないで自由に変数を使いたいわけね。
それはインタプリタの技術を応用するといいよ。
トイインタプリタとしてギコbasicがあったんだけど・・・
425デフォルトの名無しさん:05/02/15 16:18:39
delphiの言語仕様でできるか否かって話だったような
426デフォルトの名無しさん:05/02/15 16:20:29
>>406 アンタ、変わってるな。もうやめとけ
427406:05/02/15 16:25:12
残念。
http://pc5.2ch.net/gamedev/kako/1013/10131/1013170036.html
この
ugikoscr.txt が残っていればよかったんだけど、検索してもみつからないや。

俺のHDDにはあるんだけど・・・・いるかい?>>401 いるならどこかアップローダ指定して
428デフォルトの名無しさん:05/02/15 16:48:43
>>423
文字列からハッシュ値計算して、ハッシュ表から該当するポインタ取って来て、
そこにアクセスするデータ構造くらいすぐに作れるだろ?

まさかわからん?(´,_ゝ`)プッ
429デフォルトの名無しさん:05/02/15 16:48:54
皿仕上げ
430デフォルトの名無しさん:05/02/15 16:51:03
もう、まともな回答者はいなくなったのか・・・・
431デフォルトの名無しさん:05/02/15 19:05:08
フォームのOnShowイベントで重い処理をすると
その間、フォームが表示されませんよね。
この重い処理をフォームが表示されてから行いたいのですが
どうすればよいのでしょうか。
その間Screen.Cursorを砂時計にしているのですが、フォームが表示されていないので
カーソルも変わらず、アプリが動いているのかすらわからない状態で困っています。
432401:05/02/15 19:09:33
詰まったところを後回しにしてプログラムつくってたら
なんか荒れてしまったようですね・・・

回りくどいことして実装する気はないので
別の方法を考えます。

いろいろ提案をありがとうございます。
433デフォルトの名無しさん:05/02/15 19:13:41
>>431
OnShowでやらずにタイマーを貼り付けてタイマーのイベントで1回だけ実行するとか
434デフォルトの名無しさん:05/02/15 19:13:54
m9(^Д^)プギャー
435デフォルトの名無しさん:05/02/15 19:15:54
>>431
TForm1 = class
private procedure CMShowingChanged(var Msg:TMessage); message CM_SHOWINGCHANGED;


procedure TFormEx.CMShowingChanged(var Msg: TMessage);
begin
 inherited;
 if Visible then
 begin
  Update;
  // todo:ここに処理を記述
 end;
end;
436406:05/02/15 19:20:28
結局ココにアップロードした。
http://onigiri.s3.xrea.com:8080/delphi/index.php?%5B%5Bgikobasic%5D%5D

たとえば

data := 'test'; と変数'data'に'test'というデータを格納し

dataの中の test を変数名として
test := '中身';  ⇒  GikoScript.LET(test + '="中身"' );

結果を得るには
 GikoScript.ExecToVar( test );

 "で囲んだら文字列
 数字なら四則演算も出来るから
437デフォルトの名無しさん:05/02/15 19:33:22
>>431
初期処理に時間かかる場合はスプラッシュフォーム出して、その間に処理。
それからMainFormを表示という定番の手も。

その初期処理を考え得るだけ最適化(効率化)する事に努めるのも大事。
438431:05/02/15 20:15:07
>>435
アンタ俺のネ申だ!
バリバリ最高でスッキリしますた。

>>433
とりあえずそれで回避していましたが禿しく不満だったので質問しますた。

>>437
当然、限界まで最適化したつもりですが、ショートカットにD&Dされたファイルの処理なので
無数のファイルをD&Dされるとどうしても数秒かかる。
スプラッシュは昔から好きじゃないので。

みなさん、どうもありがとう。
439デフォルトの名無しさん:05/02/15 22:04:43
csvデータを簡単にParadoxの.dbデータに変換できませんか?
又、その逆も。
440デフォルトの名無しさん:05/02/15 22:26:48
ASCII ファイルを Delphi がサポートするデータベース形式に変換する方法
http://www.borland.co.jp/qanda/delphi/d0000842.html

か、QueryとTStringListのcommatext通して自前でガリガリPOSTorファイル書き出し処理を書くか。
441デフォルトの名無しさん:05/02/15 23:23:03
勉強不足ですみませんでした。
参考にさせてもらいます。
442デフォルトの名無しさん:05/02/15 23:31:51
443デフォルトの名無しさん:05/02/16 01:57:14
質問です。
自分が作ってるブラウザに串を設定するための処理を書いてるんですが
通そうとする串が生きてるか死んでるかを判定する方法が分かりません。
串の状態を取得して生き串か折れ串なのかを見分けるにはどうすればいいんですか?

ちなみに串の設定にはUrlMkSetSessionOption()を使っています。
444ミ,,゚Д゚彡 ◆A6VzDeLphI :05/02/16 02:16:50
>>438さん
435さんの内容はここに書いてあるです。
http://hp.vector.co.jp/authors/VA009712/take/delphi/kabedel.htm#showingchanged
445デフォルトの名無しさん:05/02/16 02:44:50
http://rivernet.cool.ne.jp/upmini/200502d/20050214224333_275.jpg
パネル張ったときのこの出っ張りどうにかならない?
446デフォルトの名無しさん:05/02/16 02:46:32
bevelInner/Outerをnoneにする
447デフォルトの名無しさん:05/02/16 10:16:02
>>438

procedure TForm1.ApplicationEvents1Idle(Sender: TObject;
  var Done: Boolean);
begin
  ApplicationEvents1.OnIdle := nil;
  ShowMessage('OnShow以降、ここで初期化できるよ');
end;
448デフォルトの名無しさん:05/02/16 12:25:02
OnShowでメッセージ投げてメッセージハンドラで処理するのがイイ。
449デフォルトの名無しさん:05/02/16 13:24:32
んで、Show するたびに初期化されると
450デフォルトの名無しさん:05/02/17 10:08:44
Delphi6 Personalでブラウザを作ろうと思ってIndy9をインストールしてidHTTPClientをフォームに配置したんですが、それから何をやればいいですか?
やりたいことは指定したページを表示させたいです。
451デフォルトの名無しさん:05/02/17 10:35:04
ブラウザにIndyは関係なし。IE の ActiveX である TWEBBrowser をインストール
する必要がある。

http://hogehoge2001.at.infoseek.co.jp/note-delphi.html

が参考になる。あとは、TWEBBrowser Delphi でググルとたくさんコード例が見つかる。
452デフォルトの名無しさん:05/02/17 10:46:18
>>451無事できましたー。
ありがとうございます。
453デフォルトの名無しさん:05/02/17 11:59:26
すいません、Delphiでは文字列からインスタンスの生成は出来ないのでしょうか?
目的はデザインパターンのファクトリーメソッドパターンをDelphiでやりたいと思っています。

JavaでいうClassクラスのようなものはDelphiには存在しないのでしょうか?
ご存知の方がいらしたらご教授下さい。
454デフォルトの名無しさん:05/02/17 12:11:49
クラス参照型のこと?
455デフォルトの名無しさん:05/02/17 12:14:23
TClass というのが、メタクラスになるけど
文字列からクラス名を識別してそのクラスインスタンスを作成したいなら
実行時型情報の仕掛けを使う事になるでしょ。

TypeInfo をあちこち覗いてみたら?
456デフォルトの名無しさん:05/02/17 12:33:04
狭い範囲でやるならプロジェクトのスタートアップコードで
Application.CreateFormがやってるようにクラス参照型で渡す。
広い範囲ならCOMにしてCreateOLEObjectなどを使う。かな?
457デフォルトの名無しさん:05/02/17 13:25:00
VirtualListViewの使い方教えてください。
Demoのは難しくてわかんない。
458453:05/02/17 13:28:22
>454〜456
レスありがとうございます。
教えて頂いたことをヒントに頑張ってみます!
459デフォルトの名無しさん:05/02/17 13:34:52
>457
Demo のどこら辺が理解できなかった?
Virtual ではない ListView を使わない理由は?
460457:05/02/17 13:56:15
>>459
> Demo のどこら辺が理解できなかった?
OnDataFindイベントの発生するタイミングと引数の意味がわかりません。

> Virtual ではない ListView を使わない理由は?
フォルダ内の画像ファイルのサムネイルを表示したいのだが、Virtualでないと
ファイル数が多い場合にかなり時間がかかるから。
461デフォルトの名無しさん:05/02/17 14:51:04
C++使っていましたが、都合でDelphiを使わなければならなくなり質問。
Object Pascalってクラスのインスタンスを生成(破棄)したときに自動的にコンストラクタ
(デストラクタ)を呼ばないの?例えばC++なら

void cpp(void)
{
AClass instance; // AClassのコンストラクタAClass::AClass()が呼ばれる
:
:
} // 関数cppのスコープを出る時にAClassのデストラクタが呼ばれinstanceを破棄

Object Pascalの仕様では明示的にコンストラクタ、デストラクタを呼ばなければならない
のでしょうか?
462デフォルトの名無しさん:05/02/17 14:54:34
そうです
463461:05/02/17 15:00:26
>>462
おおっ、すばやいご回答有難うございます。
C++の感覚でコーディングしてうっかりコンストラクタ/デストラクタを呼び忘れたら
原因を特定しにくいバグをこしらえてしまいますね。気をつけようと思います。
464デフォルトの名無しさん:05/02/17 15:22:23
普通はデストラクタはDestroyじゃなくてFreeを呼ぶけどね。
465デフォルトの名無しさん:05/02/17 16:14:57
>>461
Delphiでは、クラスは、動的にしか使えんのですよ
静的にも使えるObject型はDelphi8で消えたしな
あと、デストラクタは、Freeとnil代入を行うFreeandNil()が便利
466デフォルトの名無しさん:05/02/17 17:05:30
質問させて下さい。

現在、親フォームと子フォームを持つ(Unitを二つ持つ)プログラムを作っています。
同一の変数を複数のUnitで使うには、uses節に該当するUnit名を追加すればよいということは分かったのですが、
それでは、関数(手続き)をUnit間で共有するためにはどのようにすればよいのでしょうか(そのやり方が分からないため、現在は、全く同じ関数をUnitごとに書いています)。

ヘルプの「複数のユニットの参照と間接的なユニット参照」の項には、関数は共有できるというようなことが書かれているのですが、やり方がイマイチ判然としません。
具体的なソースコードが分かれば大変助かります。どうぞ、ご教示下さい。
467デフォルトの名無しさん:05/02/17 17:38:53
関数も同じ。専用ユニットを作って、interface 部に宣言を implementation 部に
実装する。ソースが見られるなら、VCL でも同じになってるよ
468デフォルトの名無しさん:05/02/17 17:40:22
>>466
関数を定義した、別のユニットを用意すればいかがですか?
469デフォルトの名無しさん:05/02/17 17:41:47
>>466
君は IntToStr() 関数を使ったことがあるだろ? Unit1 でも Unit2 でも
Uses に SysUtils を含めると使える。だから、たとえば MyFunc.pas とか
のユニットファイルを作って >>467 のようにするだけ。
470デフォルトの名無しさん:05/02/17 19:28:36
Unit2に定義した関数FooをUnit1から使うには以下のようにする。
unit Unit2
interface
procedure Foo;
implementation
procedure Foo;
begin
end;
end.

unit Unit1;
interface
implementation
uses Unit2; // implementationの下でusesする

procedure bar;
begin
 Foo; // unit2のFooをコール
end;
end.
471デフォルトの名無しさん:05/02/17 19:33:25
Delタン怖い
472デフォルトの名無しさん:05/02/17 21:24:53
>>466
とりあえずその関数の宣言をPrivateからPublic宣言に移動させてみては。
それでとりあえず効果は確認できると思う。

スマートにやるならやはり別ユニット方式で、
新規に関数専用ユニットを作って各Unitからそれをuse。
473デフォルトの名無しさん:05/02/17 21:26:27
他のソフトのエディットコントロールの、選択範囲の文字列を取得するには、
どうすればできるでしょうか?
474デフォルトの名無しさん:05/02/17 23:03:07
>>472
 Private・Public宣言はクラス内の宣言だと思うのだが?

>>473
日本語のWin32ヘルプがCDROMに付いてた筈。
それでエディット コントロールの概要を見てみたら?

>WM_COPYメッセージは、 エディット コントロールで現在テキストが選択されていれば、
>選択範囲のテキストを削除せずにエディット コントロールからクリップボードにコピーします
475デフォルトの名無しさん:05/02/18 10:47:19
ソースが公開されているDelphi製のマクロソフトないでしょうか?
現在使ってるものに少々手が届かなくて歯がゆいんですが、
一から作るのは実力的にきついものがあるので。
476デフォルトの名無しさん:05/02/18 11:09:11
477466:05/02/18 12:18:23
ありがとうございます。
頂いた情報を元にして、とりあえず動くものはできました。
解説の意味内容を本当に理解するには、オブジェクト思考プログラミングについてもっと勉強しなければならないということだと思います。そちらについても、徐々に勉強していきます。

わざわざ回答して頂いて、ありがとうございました。
478デフォルトの名無しさん:05/02/18 12:20:45
OOP関係なし。ユニットファイルの構造について知るだけ。ヘルプに書いてある。
479デフォルトの名無しさん:05/02/18 12:39:31
>>453
文字列からインスタンスの生成でこんなのがあった。
ttp://www.borland.co.jp/qanda/delphi/d0003116.html
480デフォルトの名無しさん:05/02/18 14:02:37
スイマセン。
「処理中です」ってウインドウを出したいんです。
もちろん処理が終わるとそのウインドウも自動で閉じるって感じのやつで。
どうやってだすんでしょう?お願いします。
481デフォルトの名無しさん:05/02/18 14:28:52
もうひとつフォーム作って、ラベル貼って「処理中です」にして、好きなときに Show
482480:05/02/18 14:36:57
>>481
その方法って、新しく作るフォームに処理を書かないとダメな気がするんですが・・・。
ShowMessageみたいなヤツが希望なんですけども、
無いならば481氏の方法でやります。481サンありがとう。
483デフォルトの名無しさん:05/02/18 14:55:22
DelphiのIDEはダイアログエディタなんだよ。それつかってダイアログ作るのさぼってどうする。
484デフォルトの名無しさん:05/02/18 15:23:02
>>431
動的に作ればいいの?

procedure TForm1.Button1Click(Sender: TObject);
var f:TForm;
procedure msg(s:string);
begin
f.width:= f.Canvas.TextWidth(s)+20;
f.Canvas.TextOut(10,10,s);
end;
begin
try
f:=TForm.Create(nil);
f.Caption:='メッセージ';
f.Show;
msg('今ナニしてるからちょっとまって');
Sleep(1000);
msg('もうすこし');
Sleep(1000);
finally f.free end;
end;
485デフォルトの名無しさん:05/02/18 15:25:33
486デフォルトの名無しさん:05/02/18 16:31:08
C言語のfseekみたいな関数はありますか?TFileStreamで大きいファイルの中から指定された部分を読み込んだり書き込んだりしたいのですけれど。
487デフォルトの名無しさん:05/02/18 16:32:11
あります
488デフォルトの名無しさん:05/02/18 16:35:36
Position: を使うか、seekメソッドを使うのだけど 32ビットの壁があるから・・・
489デフォルトの名無しさん:05/02/18 16:44:24
いちいち2ギガバイト以下のファイルだけ適用できる、とか注釈しなくてもいいんでは?(笑)
490デフォルトの名無しさん:05/02/18 16:48:27
TFileStreamで大きいファイル
491デフォルトの名無しさん:05/02/18 16:52:57
>>488
Del6以降はInt64のSeekがあるよ
492デフォルトの名無しさん:05/02/18 16:54:11
ところでC言語のfseekが2ギガ超にアクセスできるの?
493デフォルトの名無しさん:05/02/18 17:45:14
>>475
DMonkey
494デフォルトの名無しさん:05/02/18 19:56:14
ユニット内のprocedureをプロジェクトファイルから直接呼び出すにはどうしたら良いのでしょう?
具体的には、http://forum.nifty.com/fdelphi/faq/00190.htmがやりたいのですが
プロジェクトファイル内の「CopyDataToOld(Wnd,ParamCount);」の部分で、
「未定義の識別子」と言われてしまいます。
ユニット側やプロジェクトファイル内に何か宣言みたいな物が必要だと予想したんですが、
どこに何を書けばいいんでしょう?
495デフォルトの名無しさん:05/02/18 20:05:17
そこを

ユニット名.CopyDataToOld(Wnd,ParamCount);

クラス名.CopyDataToOld(Wnd,ParamCount);

とかすればいいのでは?
496デフォルトの名無しさん:05/02/18 20:15:05
単にそのunitがプロジェクトに加えられてない(useされてない)だけかも。
497デフォルトの名無しさん:05/02/18 20:54:15
useじゃ構文エラーだけどな
498デフォルトの名無しさん:05/02/18 23:32:46
フォームで開いた画像の色を取得したいんですがどうしたらいいですか?
499デフォルトの名無しさん:05/02/19 01:19:12
Canvas.Pixels[]
500494:05/02/19 04:31:07
>>495
ユニット名でもダメでした。フォームがないユニットなのでクラス名は無いです。

>>496
それはDelphiさんが勝手に付けてくれたので付いてました。
501デフォルトの名無しさん:05/02/19 04:46:22
画像の色だぞ?
502494:05/02/19 05:03:26
できました。
そのユニットのinterface部にprocedureのヘッダを書いてあげればよかったみたいでした。
もしかして>>496はそういう事を言ってたのかな。
503デフォルトの名無しさん:05/02/19 10:42:55
APIのNetUserGetLocalGroupsを使いたいのですが
コンパイルすると未定義の識別子エラーになります。
USESに何か足らないと思うのですが分かりません。
何を追加すれば良いですか?
504デフォルトの名無しさん:05/02/19 10:59:05
>NetUserGetLocalGroups
JCL ダウンロードして、LM ユニットを uses に追加。

JCL は ttp://sourceforge.net/projects/jcl/ から 1.94 を落とせば良し
505デフォルトの名無しさん:05/02/19 12:26:24
'TStrings' と 'String' には互換性がありませんと言われるのですが、どういう事でしょうか?
506デフォルトの名無しさん:05/02/19 12:41:12
>>505
TStrings はエディタのような文字列が集まった構造を扱うもので文字列とは違います。

TStringsのインスタンスのメンバー Text や Strings[ ] がString 型です


-------------
で私の質問

const c=[1,2,5] みたいに定義した集合の、全部の要素にアクセスする一番良い方法は?

for i in c do みたいな構文があればいいのですが
507デフォルトの名無しさん:05/02/19 13:08:03
>>506
さんくす!
508506:05/02/19 13:20:44
自分で調べた範囲では格好いい方法ないですね。 だから for 文が拡張されるのか
509デフォルトの名無しさん:05/02/19 13:22:07
>>506
こんな感じ?

const
Hoges: array[0..2] of Integer = (1, 2, 5);

var
i: Integer;

for i := Low(Hoges) to High(Hoges) do
ShowMessage(IntToStr( Hoges[i] ));
510509:05/02/19 13:23:13
ああ、ごめん集合型か。配列と読み間違えた。
511506:05/02/19 14:15:42
>>510
うん。 動的配列を返す関数でも作ろうと思ったけど、結局集合要素に効率的にアクセスする方法が無くて格好悪い

low(c)で最小要素 とかがあればいいんだけど、集合構成子には効かないし
512デフォルトの名無しさん:05/02/19 14:34:49
>>501

> フォームで開いた画像の色
513デフォルトの名無しさん:05/02/19 15:12:46
>>506
const c=[1,2,5];
var a: set of Byte;

a := c;
i := 0;
while a <> [] do begin
 if i in a then begin
  // いろいろ
  Exclude(a,i);
 end;
 Inc(i);
end;

こんな感じでどう?
High, Low が集合型に使えれば便利なのに・・・
for item in set do ... 構文は、次のDelphi言語の拡張で実装されますね・・・
514デフォルトの名無しさん:05/02/19 15:32:07
>>504
解決しました。ありがとうございました。
515デフォルトの名無しさん:05/02/19 16:28:42
>>506
ちょっと違うけど

type
 Tc = (c1, c2, c5);
 cs = set of Tc;
var
 c: Tc;
 f: cs;
begin
 f := [];//集合

 for c := Low(Tc) to High(Tc) do
 begin
  if c in f then ; //処理する
 end;

end;

これではだめかい
516506:05/02/19 19:05:35
>>513
ありがとう。 似たような方法でやってたけど、結局>>509に近い方式にしちゃった。


>>515
それはダメなんだ。
実は要素は大きな列挙型で定義されてて、そのうちの何個かの集合を効率良く操作したかったの
517デフォルトの名無しさん:05/02/21 10:05:57
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
MyEdit := TEdit.Create(self);
MyEdit.Parent := self;
MyEdit.BorderStyle := bsnone;
MyEdit.Left := x;
MyEdit.Top := y;
Myedit.SetFocus;
end;
こんな感じでフォーム1をクリックしたときにTEditを表示して
フォーカスを当てるようにしたんですが、
MyEditのonchangeイベントはどのように書けばいいのでしょうか?
518デフォルトの名無しさん:05/02/21 11:11:10
Object Pascalでインスタンスの破棄をメソッドではなくデストラクタでやる必然性が
よく分かりません。例えば

type
AClass = class

destructor Destroy;
procedure CleanUp;
end;

AClass.Destroy;
begin
CleanUp;
end;

とした場合

var
instance : AClass;
begin
.
.
instance.CleanUp;
end.

としてはまずいのでしょうか?
519デフォルトの名無しさん:05/02/21 11:24:01
>>518
一般的な方法に従っておいたほうがバグを減らせる。(そういう意味で、命名規約にも従いましょう。)

それに、オーバーライドされたデストラクタで解放処理をまとめて行えば、他のオブジェクトに
インスタンスを所有させるなどの処理がやりやすい。
例えば、TObjectListとかに放り込むような処理がやりやすくなる。
520517:05/02/21 11:27:04
自己解決しました。
521デフォルトの名無しさん:05/02/21 13:47:01
>>518
もしCleanUpの中でAClassが持つフィールド等の破棄をしているだけなら、
instance自身が格納されているメモリ領域は開放されない。
522デフォルトの名無しさん:05/02/21 13:57:43
Edit1に文字を入力した後、Edit1に何も書かれていない場合に
Edit1をdestroyしたいんですがどうしたらいいですか?
523デフォルトの名無しさん:05/02/21 14:33:12
Free する
524522:05/02/21 21:08:58
自己解決しました
525522:05/02/21 21:10:05
>>523さん どうもでした。
526デフォルトの名無しさん:05/02/21 22:04:05
IntToStrとか大文字小文字をやったほが見やすいとは思うのですが、SHIFTを押す事があまり無いので
こうやって入力すると遅くなってしまいます。
皆さんはIntToStrのようにしてますか?
それともinttostrとしてますか?
527デフォルトの名無しさん:05/02/21 22:09:55
テキストファイルの重複行を削除するにはどうすればいいでしょう?
528デフォルトの名無しさん:05/02/21 22:28:20
>>526
他人に見せないなら好きにしたら良い。

>>527
情報不足
529527:05/02/21 22:44:30
procedure
implementation
function
procedure
function

procedure
implementation
function
のようにしたいのです。つまりまったく同じ内容の行は1行だけにしたいということです。
530デフォルトの名無しさん:05/02/21 22:59:14
var
SL: TStringList;
i, j: Integer;

SL := TStringList.Create;
try
 SL.LoadFromFile(FileName);

 for i := 0 to SL.Count-1 do
  for j := i + 1 to SL.Count-1 do
   if SL[i] = SL[j] then SL.Delete(j);

 SL.SaveToFile(FileName);
finally
 SL.Free;
end;

試してないから間違ってるかも
531デフォルトの名無しさん:05/02/21 23:09:05
>>526
SHIFTはもう無意識に押してるかんじ。
一回inttostrとやってもなんかスッキリしないから戻って打ち直すし。
532デフォルトの名無しさん:05/02/21 23:10:08
一行ずつ下をみて同じ行があったら、下からDeleteしていく。

procedure TForm1.Button1Click(Sender: TObject);
var
  sl:TStringList;
  i,j:integer;
begin
  sl := TStringList.Create;
  i := 0;
  try
    sl.Add('procedure');
    sl.Add('implementation');
    sl.Add('function');
    sl.Add('procedure');
    sl.Add('function');
    while i < sl.Count-1 do
    begin
      for j := sl.Count-1 downto i+1 do
        if sl[j] = sl[i] then sl.Delete(j);
      Inc(i);
    end;
  finally
    Memo1.Lines.Assign(sl);
    sl.Free;
  end;
end;
533デフォルトの名無しさん:05/02/21 23:11:23
>>526
全てはコード補完に任せてる。

小文字で intt まで打って補完。

予約語は全部小文字にしてます。
ちなみに then や do の後ろに改行せずに begin を書いています。
534527:05/02/21 23:34:25
>>530、532
 ありがとうございます。私が考えついたのは恥ずかしながら以下のようなものでした。
 Addしているぶん容量が大きくなると遅いでしょうね。勉強になりましたです。
function DuplicateLineDel(S: string):string;
var
 SR,DE: TStringList;
 No  : Integer;
 dmy : string;
begin
 if S <> '' then
 begin
  SR := TStringList.Create;
  DE := TStringList.Create;
  DE.Text := S;
  while DE.Count > 0 do
  begin
   dmy := DE[0];
   DE.Delete(0);
   repeat
    No := DE.IndexOf(dmy);
    if No > -1 then DE.Delete(No);
   until No = -1;
   SR.Add(dmy);
  end;
  Result := SR.Text;
  SR.Free;
  DE.Free;
 end;
end;
535デフォルトの名無しさん:05/02/22 00:06:04
文字から文字コードへ変えるのってどうするんでしたっけ?
chrの反対の動作です
536デフォルトの名無しさん:05/02/22 00:08:46
Ord でも Byte キャストでも
537デフォルトの名無しさん:05/02/22 00:09:26
>>535
ord
538デフォルトの名無しさん:05/02/22 00:14:03
>>536
>>537
ありがとん
539デフォルトの名無しさん:05/02/22 00:15:47
>>534
遅いかもしれないけど、TStringList.Duplicatesを使うのが簡単だと思うが。

>>535
Ord()?
540デフォルトの名無しさん:05/02/22 00:19:10
>>539
ヘルプより
Duplicates プロパティは,ソートされたリストに重複文字列を追加できるかどうかを指定します。

今回のとは機能が違うんじゃないの?
541デフォルトの名無しさん:05/02/22 00:29:32
542539:05/02/22 00:34:12
結果を収納する方のTStringListを
Sorted:=True;
Duplicates:=dupIgnore;
にすれば、重複の判定が要らない分コードがすっきりするかと思ったんだけどね。
おそらく内部的にはバイナリサーチしてそうだから、普通にループ回すよりこっちの方が早いかも。
ソース見てないから断定はできないけど。
543デフォルトの名無しさん:05/02/22 00:37:43
だからソートされちゃまずいんだってば

procedure
implementation
function
procedure
function

procedure
implementation
function
544デフォルトの名無しさん:05/02/22 00:39:58
529を読む限り、ソートされちゃまずいとは書いてないと思うが。
「同じ内容の行は1行だけにしたい」というだけで。

545デフォルトの名無しさん:05/02/22 00:53:43
サンプルのスピンエディタでSHIFTキーを押しながらクリックするときIncrementの値を
変えたいのですが、以下のコードでは当然ながらいったん数値が変更されたとき以降で
ないとIncrement値も変更されません(スピンエディタにはOnChangingイヴェントがない)。
何か方法はないでしょうか?

TForm1.SpinEdit1Change(Sender: TObject);
begin
 if GetKeyState(VK_SHIFT) >= 0 then // SHIFTキーが押されてないとき
  SpinEdit1.Increment := 1
 else
  SpinEdit1.Increment := 10;
end;
546デフォルトの名無しさん:05/02/22 00:57:16
>>545
TSpinEdit.WindowProcをサブクラス化してクリックのタイミングを取得。
547デフォルトの名無しさん:05/02/22 02:56:24
532 です。おもしろいので、ソートしてもよいとして、532の方法と542の方法の
実行速度を測ってみました。Delphi6 in Win2k

ランダムに三桁の数字を発生させて、3万行のテキストファイルをつくりました。

procedure TForm1.Button1Click(Sender: TObject);
var
  i:integer;
  sl:TStringList;
begin
  Randomize;
  sl := TStringList.Create;
  for i := 1 to 30000 do
    sl.Add(IntToStr(Random(900)+100));
  sl.SaveToFile('c:\Test1.txt');
  sl.Free;
end;
548デフォルトの名無しさん:05/02/22 02:57:11
532の方法
procedure TForm1.Button2Click(Sender: TObject);
var
  sl:TStringList;
  i,j:integer;
  start,stop:DWORD;
begin
  sl := TStringList.Create;
  sl.LoadFromFile('c:\Test1.txt');
  Start := GetTickCount;
  i := 0;
  while i < sl.Count-1 do
  begin
    for j := sl.Count-1 downto i+1 do
      if sl[j] = sl[i] then sl.Delete(j);
    Inc(i);
  end;
  stop := GetTickCount;
  Label1.Caption := IntToStr(stop-start);
  Label2.Caption := IntToStr(sl.Count);
  Memo1.Lines.Assign(sl);
  sl.Free;
end;
549デフォルトの名無しさん:05/02/22 02:58:00
542の方法
procedure TForm1.Button3Click(Sender: TObject);
var
  sl1,sl2:TStringList;
  i:integer;
  start,stop:DWORD;
begin
  sl1 := TStringList.Create;
  sl1.LoadFromFile('c:\Test1.txt');

  Start := GetTickCount;

  sl2 := TStringList.Create;
  sl2.Sorted := true;
  sl2.Duplicates := dupIgnore;
  for i := 0 to sl1.Count-1 do sl2.Add(sl1[i]);

  stop := GetTickCount;

  Label3.Caption := IntToStr(stop-start);
  Label4.Caption := IntToStr(sl2.Count);
  Memo1.Lines.Assign(sl2);
  sl1.Free;
  sl2.Free;
end;
550デフォルトの名無しさん:05/02/22 02:58:40
[結果]
何度か実行させると値がばらつくものの、542の方法が532の方法より30倍以上
速いです。ソート+バイナリサーチの威力が分かりました。
551デフォルトの名無しさん:05/02/22 07:29:42
> TSpinEdit.WindowProcをサブクラス化してクリックのタイミングを取得。
what? what? (w
やはり難しいのですね。
552518:05/02/22 09:36:42
>>519
>>521
レス、どうもです。つまり、デストラクタはDestroyという名前にして必ず仮想メソッドとする
そして動的に割り当てたインスタンスを破棄するにはdisposeではなくfreeを使う
という理解でよいですか?
553デフォルトの名無しさん:05/02/22 10:09:23
簡単な質問で申し訳ないのですが、
ある文字列「---,--,----,----」から、例えば2つめと3つめのコンマで
囲まれた文字列を取り出すにはどうしたらよいですか。
各コンマで囲まれている文字数は決まっていません。
554デフォルトの名無しさん:05/02/22 10:28:34
FAQ。TStringList.CommaText を使う
555デフォルトの名無しさん:05/02/22 10:36:20
>>552
> そして動的に割り当てたインスタンスを破棄するにはdisposeではなくfreeを使う

dispose は動的にメモリを割り当てられた型付ポインタのメモリを開放する
インスタンスの破棄とはそもそも無関係。
仮想メソッドでない TObject.Free をよぶことによって、仮想メソッドである
Destroy が下位クラスの実装から順に多態的に呼ばれることが保証できる。
556デフォルトの名無しさん:05/02/22 11:26:09
「注意 LoadFromFile は,Add メソッドを使って,ファイルから読み出した文字列を追加します。」

TStrings.LoadFromFileのリファレンスにこうありますが
では、Addメソッドで一行ずつファイルから読み込む事はできないのですか?
557デフォルトの名無しさん:05/02/22 11:32:26
>>556
TStringsを二つ用意して、一つ目で全体読み込んで、
二つ目ので、一つ目のaddしたい行をaddすればいいんじゃないの。
//stra , strb : TStrings;
stla.add( strb[3] );
みたいに。

あと、TStringsは抽象クラスだから、実際にはTStringListを使うことになるんだけど。
558デフォルトの名無しさん:05/02/22 11:38:20
>>557
なるほど思いつきませんでした
もしかしてReadlnってのがこういう用途に使えるんですかね
559デフォルトの名無しさん:05/02/22 11:42:05
つかえます。
560デフォルトの名無しさん:05/02/22 12:54:05
CSVファイルを読み込むときはよくTStringListを2個使うと便利
区切り文字がカンマじゃなかったらStringReplaceで置換すればいいし
561デフォルトの名無しさん:05/02/22 13:06:35
CSVくらいあらかじめ自分で実装したクラス用意しておけばいいじゃない
562553:05/02/22 13:08:41
単語帳を作ろうと考えてます。
テキストファイルに、単語、品詞名、意味、例文の順に書いておいて、
例えば、エディタ1に単語を入力したらエディタ2に意味を出力する様に
したいんですが、どうしたらよいでしょうか。

エディタ1に入力した単語をテキストファイルから検索し、あったら
その行の2つめと3つめのコンマにはさまれた文をエディタ2に表示する。

こういう流れだと思いますが、プログラムはどうなるでしょうか。
563デフォルトの名無しさん:05/02/22 13:22:54
そういうプログラムなると思います。
で、どの部分が分からないの?
564名無し募集中。。。:05/02/22 13:26:16
こんな感じかな

sLineList := TStringList.Create;
sDataList:= TStringList.Create;
try
 sLineList.LoadFromFile(テキストファイル名);
 for i := 0 to sLineList.count -1 do
 begin
  sDataList.clear;
  sData := sLineList.Strings[i];
  sDataList.commatext := sData;
 
  if AnsiCompareStr(sDataList.Strings[0], 単語名) = 0 then
  begin
   hinsi := sDataList.strings[1];
   imi := sDataList.Strings[2];
   reibun := sDataList.Strings[3];
   break;
  end
 end;
finally
 sLineList.Free;
 sDataList.Free;
end;
565553:05/02/22 14:10:27
>>564
ありがとうございます。
やってみます。
566デフォルトの名無しさん:05/02/22 14:17:01
Paradox7の中身を全部消してまっさらにするのはどうすればいいですか。
DataSource1.Dataset.Deleteをループさせてやってみたら、カウンタ型が
初期化(?)されず、続き数字になってしまいます。
567デフォルトの名無しさん:05/02/22 15:01:19
>>553-554
ただし空白やダブルクォートを含んでいると思わぬ結果になる事があるので注意。
568デフォルトの名無しさん:05/02/22 15:01:51
Paradoxは知らないけどDelete tableもしくはDrop Tableといった
SQL文発行した方が体に良さそうだと思う
569デフォルトの名無しさん:05/02/22 15:09:50
>>567
””でくくればその中にカンマがあろうと半角スペースがあろうと
全角スペースがあろうと問題ないよ

でも”があるとそこで切れるので”はStringReplaceで置換するしかない
570デフォルトの名無しさん:05/02/22 17:40:47
>>569
"は二つ続けて""とすればよい。
571デフォルトの名無しさん:05/02/22 17:46:02
画面に幅広いグリッドを3つ配置したいのですが、
グリッド毎にスクロールバーを表示したくありません。
グリッド3つを同時に横スクロールしたいのです。
スクロールバー内に3つ並べてみたのですが、画面外のセルにフォーカスを移動しても移動しません。
何かコーディングが必要なのでしょうか?
572デフォルトの名無しさん:05/02/22 17:55:13
>>571
procedure TForm1.StringGrid1TopLeftChanged(Sender: TObject);
begin
StringGrid2.TopRow:=StringGrid1.TopRow;
StringGrid2.LeftCol:=StringGrid1.LeftCol;

end;
573デフォルトの名無しさん:05/02/22 19:03:16
>>532は逐次探索してるからなあ。ソートされたリストだと2分探索が使えるけど。
ソートしないときもっといい方法はないんだろうか?
574デフォルトの名無しさん:05/02/22 19:36:06
逐次検索しかないと思うよ
575デフォルトの名無しさん:05/02/22 19:58:10
誰もハッシュ比較で高速化しよう、と言い出さないことについて。
576デフォルトの名無しさん:05/02/22 20:03:45
そんなのより、ソートと2分探索の方がいいからだろ
577571:05/02/22 20:32:58
>>572
亀レスすみません。

おかげで先へ進めそうです。
ありがとうございました。
578デフォルトの名無しさん:05/02/22 20:42:28
>>576
重複を取り除くだけなら辞書順に並ぶ必要は無いから、ハッシュ値でソート&二分探索すれば、
大量の文字列比較処理を単なる整数比較に置き換えられて高速化できる。
579デフォルトの名無しさん:05/02/22 21:21:17
Del厨 and アルゴリズム = 0
580デフォルトの名無しさん:05/02/22 22:21:21
>>578
>>549 と比較してみてよ。データ処理時間も考慮して。
581デフォルトの名無しさん:05/02/22 22:30:38
たとえば10000文字ぐらいの英語のページを探して、二文字か三文字ごとに改行入れて単語とするのはどうだろう。
で、それを使った処理速度比較plz
582デフォルトの名無しさん:05/02/22 22:52:02
は?
583デフォルトの名無しさん:05/02/22 22:56:25
アルファベットと数字に文字列として検索に本質的な違いがあるとでも?
584デフォルトの名無しさん:05/02/22 23:11:37
ワロタ
585デフォルトの名無しさん:05/02/23 01:48:31
>>580

http://www.42ch.net/UploaderSmall/source/1109090682.lzh

ほらよ、でかくなったからアップロードしといた。
ハッシュと二分木使えば、出来合いのライブラリより10倍以上軽く高速化できるぞ。
単純二分木をバランス木にすれば、さらに倍速くらいいけるんじゃないかな?

つーか、パスカルプログラマなら
「アルゴリズム+データ構造=プログラム」
って言葉くらい聞いた事あるよな?
586デフォルトの名無しさん:05/02/23 07:28:22
>>585
お疲れ様。 さらに早くするには、ハッシュを添字に行番号配列を持った配列を作る事かな。
データ数が2倍になる都度、配列サイズも2倍にして作り直すと
587デフォルトの名無しさん:05/02/23 14:06:45
TfileStreamでファイルの最後から消していってサイズを小さくするにはどうしたらいいのでしょうか?
新しいファイルを作らないと駄目でしょうか?
588デフォルトの名無しさん:05/02/23 14:33:27
Stream.Size:=NewSize;
589デフォルトの名無しさん:05/02/23 15:01:30
>>586
テーブルのリサイズ・データの挿入のコストは無視ですか。

扱うデータの種類によるけど英単語の重複程度のチェックなら
出てくる単語の種類は高々数万(手持ちのspell.dicは52,000個)。
サイズ決め打ちのハッシュテーブルに突っ込めば十分。

にしても今時ツリーだのハッシュだのを手書きする
OOPLはDelphiくらいのもんだな。
590デフォルトの名無しさん:05/02/23 15:50:17
それは言えてる。Delphiプログラマがパスカルプログラマだと思ってるのもいるし
591デフォルトの名無しさん:05/02/23 16:59:50
RenameFileについての質問なのですが、
http://forum.nifty.com/fdelphi/faq/00074.htm
これには別ドライブへの移動は不可とありましたが、
試してみたらできました。。この情報が古いからでしょうか?
問題なく動作はするのですが、ちょっと不安なので質問させてもらいます。。

当方Delphi6です。。
592デフォルトの名無しさん:05/02/23 19:50:42
Delphi で bit 単位でファイルを読み書きする方法はありますか?
593デフォルトの名無しさん:05/02/23 19:53:24
>>591
D7だと、RenameFileは内部でMoveFile APIを呼び出してる。
MoveFileは別ドライブでも可らしい。だから情報が古いのではないかと。

>>592
標準ではないと思う。
594デフォルトの名無しさん:05/02/23 20:02:53
Delphi6ユーザーでDelphi2005への乗換えを検討しています。
Delphi6ではコード整形プラグインのDelForExを愛用していたのですが、
Delphi2005でも使えるでしょうか??
もしくは、Delphi2005開発環境中から簡単に呼び出せるコード整形ツールは存在するでしょうか。
595594:05/02/23 20:05:42
すみません。
DelForExpの配布元を改めてよく見てみたら対応したと出ていました。
スレ汚し失礼しました。
596デフォルトの名無しさん:05/02/23 20:29:16
他のアプリのハンドル取得
var
H : HWND;
-------------------------------------------
begin
H:=FindWindow('notepad',nil);
↑↑↑↑メモ帳の場合↑↑

H:=FindWindow('IEFrame',nil);
↑↑↑↑インターネットエクスプローラーの場合

なぜiexploreじゃなくてIEFrameなんですか?

H:=FindWindow('XXXXXXXXX',nil);の中の
'XXXXXXXXX'はどのようにして決められるんですか?
597デフォルトの名無しさん:05/02/23 20:42:48
FindWindowの第一引数はクラス名
決めるのは作ったプログラマ自身
598デフォルトの名無しさん:05/02/23 21:36:56
>>589
>にしても今時ツリーだのハッシュだのを手書きする
>OOPLはDelphiくらいのもんだな。

べつにC++とかやってても、一般的でないデータ扱うときはツリーくらい書くけどなぁ…
ハッシュ関数だって、イレギュラーな偏りのあるデータとかなら自分で書いた方が高速化できるし。

なんでもかんでもライブラリに隠蔽されたおかげで、どのような場面でどのようなアルゴリズムを
使えばよいか解らない奴がワンサカいるし。

C#なんか勉強する前にヴィルト先生(できればクヌース先生)の本でも嫁、と言いたい。
599デフォルトの名無しさん:05/02/23 22:15:20
ジジイ必死だなw
600デフォルトの名無しさん:05/02/23 22:48:07
ひとつのpopupmenuを複数パネルから(panel1, panel2・・・)
使いたいのですが、
どのパネルからポップアップさせたかを知るにはどうすればいいですか?

601デフォルトの名無しさん:05/02/23 22:50:45
>>599
おまえが4ね
602デフォルトの名無しさん:05/02/23 22:52:15
if Sender = Panel1 then
603600:05/02/23 22:56:03
>>602
これはどこに書くのですか?
OnPopupに書いたら駄目でした。
604デフォルトの名無しさん:05/02/23 22:57:32
そりゃそうだろう
605600:05/02/23 23:11:45
騙しかよ!
騙しレスかよ!!!!
初心者騙して釣っておもしろいですか?
もういいです。帰ります。
606デフォルトの名無しさん:05/02/23 23:40:03
質問する場所を考慮しろよ
607デフォルトの名無しさん:05/02/23 23:41:28
一応言っとくが、604はオレじゃないからな
TPanelのOnContextMenu辺りにでも書いとけばいいんじゃね
もちろん、そのOnContextMenuはPopupつけてるコントロールで共有
608デフォルトの名無しさん:05/02/23 23:44:18
両方のPanel.PopupMenuにPopupMenu1突っ込むだけだろ
609デフォルトの名無しさん:05/02/23 23:47:20
procedure TForm1.PopupMenu1Popup(Sender: TObject);
begin
Label1.Caption := PopupMenu1.PopupComponent.Name;
end;

だから

if PopupMenu1.PopupComponent = Panel1 then

とかでOK
610600:05/02/23 23:49:02
>>605
偽者(・A・)イクナイ!!

>>607
MouseDownでできたのですが、
OnContextの方が(・∀・)イイ!!ですね。
611デフォルトの名無しさん:05/02/23 23:49:27
無理に適当な回答するのは2chではよくあること。
質問した場所をわきまえて・・・逆ギレは見苦しい。

ちゃんとした回答が欲しければそれなりのところへどうぞ
612600:05/02/23 23:54:25
みなさんありがとうございます。
いろんな方法があるのですね。
>>607さんのがカコイイと思うのでこれでやります。
613デフォルトの名無しさん:05/02/23 23:55:35
>>609
Senderはasで確認したほうがいい
if (Sender as TPopupMenu).Name = Panel1 thenとか
614デフォルトの名無しさん:05/02/23 23:58:56
質問者はトリップ付けた方がいいと思う。
まさか「トリップって何?」って人はいないよね?
615デフォルトの名無しさん:05/02/24 00:13:19
>>613
なに滅茶苦茶いってるの? TPoupuMenu の名前に Panel1 とか付けるアフォ発見
616デフォルトの名無しさん:05/02/24 00:14:09
だいたいインスタンスの名前と Name プロパティーを混同してる時点でアウト
617デフォルトの名無しさん:05/02/24 00:15:16
>>616
どこが違うの?
618デフォルトの名無しさん:05/02/24 00:16:19
>>612
ヘルプより
PopupComponent プロパティは,右クリックに応答して最後にポップアップメニューを表示したコンポーネントを示します。

これを使わないのは変
619デフォルトの名無しさん:05/02/24 00:19:44
>>617
Name プロパティーは string 型だろ。どうやって = Panel1 とかの
インスタンス変数と比較できるわけ?
620デフォルトの名無しさん:05/02/24 00:22:16
インスタンス変数名と name プロパティーを混同する香具師は、
えらそうにレスなんかつけるなよ
621デフォルトの名無しさん:05/02/24 00:25:09
おまいらすぐ荒れるな
622600 ◆LzWB84zNO. :05/02/24 00:25:29
>>618
それにします。(;´Д`)
623デフォルトの名無しさん:05/02/24 01:09:37
[警告] Unit1.pas(142): 符号付型と符号無し型の演算により、オペランドが拡張されました

これってどうしたらええんでしょう?
ソースの部分は
>Edit1.Text:=inttostr(timeGettime-tm);//かかった時間の計算
なんですけれども。
一応実行して普通に動いてるのだけれども不安で・・・
624デフォルトの名無しさん:05/02/24 01:14:19
>>623
timeGettimeとtmの型が合っていない
宣言を見てみ
625デフォルトの名無しさん:05/02/24 01:56:03
TimeGetTimeは、cardinalだから、
そっちにあわせなきゃだめだね
626デフォルトの名無しさん:05/02/24 01:59:56
VC++で作ったスタティックライブラリをDelphiで利用することはできますか?

思いっきりFAQな気がしますがぐぐってもそれらしい情報が見付かりませんでした。
もし既出ならご容赦ください。
627デフォルトの名無しさん:05/02/24 02:01:43
無理
ソースをbccでビルドしてobjをリンクすることは可能
628デフォルトの名無しさん:05/02/24 02:06:25
BCC持ってないです。残念。
お答えありがとうございました。
629デフォルトの名無しさん:05/02/24 02:11:18
>>628
BCCは無料で使えるよ
630デフォルトの名無しさん:05/02/24 02:12:38
タダで使えるBorland C++ Part4
http://pc5.2ch.net/test/read.cgi/tech/1091066805/l50
631デフォルトの名無しさん:05/02/24 08:21:39
集合型の変数に整数を代入するにはどうすればいいのですか。

THoge=1..50;
THoges=set of THoge;

var
Hoge:THoges;
begin
Hoge:=$000001;

とかやると怒られます。
632デフォルトの名無しさん:05/02/24 08:52:21
include
633デフォルトの名無しさん:05/02/24 09:57:47
>>632
さんくす。

ついでにお願いします。集合型の値を表示したいのですが、

THoge=1..12;
THoges=set of THoge;

var
 Hoge:THoges;
begin
 Hoge:=[];
 Include(Hoge,2);
 ShowMessage(IntToStr(Word(Hoge)));

これは表示されますが、THoge=1..50とかにすると、THogesのサイズが7バイトになり
正しくない型キャストと怒られます。こういう場合はどうすればよかですか?
634デフォルトの名無しさん:05/02/24 10:17:51
どうしようもありません。
>これは表示されます
とありますが、集合型として表示されているわけではないですね?
635デフォルトの名無しさん:05/02/24 10:21:28
集合型の内部表現と整数等の内部表現は本質的に異なるため、たまたま集合型が
Integer 4 バイトに収まるまではごまかしが効きます。4 バイト = 32 要素を
超えた場合はごまかせません。
集合型の内部表現は 32 byte までありうるので、32個の byte 型フィールドを
持つ Packed array を用意するのがひとつの手でしょう。

そもそも何をしたいのですか?
636633:05/02/24 10:45:30
>>635
単に現在の値を目で見たかっただけですが、
他にもINIファイルへの保存などで整数型にキャストしWriteIntegerで書き込みたいのです。
637デフォルトの名無しさん:05/02/24 10:57:21
BitMapをImage1にロードして、
そのBitMapの色情報(色数と色とかです)はどうやって、
所得するんですか? 
638デフォルトの名無しさん:05/02/24 11:49:29
>>637
Image1.Picture.Bitmap.PixelFormat
Image1.Picture.Bitmap.Canvas.Pixels[X,Y]
Image1.Picture.Bitmap.Scanline[Row]
639デフォルトの名無しさん:05/02/24 15:53:53
>>636
直接は無理なので集合型変数をメモリの塊として処理する。
# そもそもサイズが合わない可能性があるからIntegerとの変換は無理
ms := TMemoryStream.Create;
ini := TInifile.Create(ParamStr(0)+'.ini');
ms.Write(Hoge, SizeOf(Hoge));
ini.WriteBinaryStream('Sec', 'Hoge', ms);

またはBinToHex, HexToBinで文字列に変換する。
var s: String;
SetLength(s, SizeOf(Hoge));
BinToHex(@Hoge, PChar(s), SizeOf(a));
640デフォルトの名無しさん:05/02/24 18:13:00
DLLへ引数としてTFormやTMainMenuのインスタンスを
そのまま渡しても大丈夫でしょうか?
例えば、呼び出し側のFormのインスタンスをもらい、
Captionを変更する以下の処理は問題ありでしょうか?

// 呼び出し側
procedure TForm1.Hoge;
begin
(略)
ChangeCaption(Self);
end;

// DLL側
procedure ChangeCapton(Form: TForm);
begin
Form.Caption:= 'Hoge';
end;
641デフォルトの名無しさん:05/02/24 18:23:58
コールバックの方がよくね?
642デフォルトの名無しさん:05/02/24 19:48:19
何を心配しているのか知らないけど
同一プロセス内で動いてる以上無問題
643640:05/02/24 20:03:37
>>641
レスありがとうございます。
しかし、出来ればDLL内に直接処理を書きたかったので…。

>>642
レスありがとうございます。
そうなんですか、良かった…。
TFormにはString型のPropertyがテンコ盛りということで、注意書きの
「構造体やクラスに埋め込まれている場合も含め String 型を DLL と…」
の「埋め込まれている場合」に抵触していないか心配だったのです。

644デフォルトの名無しさん:05/02/24 20:27:03
問題あるだろ
String型は使えない
char型使え

>>642
初心者に嘘教えるなよw
645デフォルトの名無しさん:05/02/24 21:12:14
スクリプトとプログラムの違いがわかりません…
646デフォルトの名無しさん:05/02/24 21:37:15
>>643
Delphiアプリ専用DLL?
647デフォルトの名無しさん:05/02/24 22:15:16
C で作った DLL について教えてください。

TBitmap の ScanLine に対応するものとして char 型の二次元配列を考えています。

引数や戻り値で P: PByteArray と char ** c が対応するという理解で良いですか?
648デフォルトの名無しさん:05/02/24 22:18:10
ツールバー等のアイコンに使うbmpファイルをまとめておいてあるサイトはないでしょうか。
649デフォルトの名無しさん:05/02/24 23:18:23
>>640

一般に共通のパッケージを使う以外で、クラスのインスタンスをDLLとやりとりする
ことはできません。同じバージョン、同じパソコン内のDelphiで、別々にコンパイルさ
れたDLL内のインスタンスのVMTとEXE内のインスタンスのVMTは同一ではありません。
650デフォルトの名無しさん:05/02/25 01:03:56
WideStringって
> 16 ビット Unicode 文字から成る
なのでUCS-2ですよね?

UTF-8をWideStringに変換したら表現できない文字もあるって認識でOKですか?
651デフォルトの名無しさん:05/02/25 01:31:02
>>647
半分合ってて半分合ってない。
ポインタのポインタを単純に二次元配列と同等としか解説していないサイトが多いけど、
そう単純じゃない。

おまいさんの使い方の場合、y行分の各ポインタを渡してやりたいんだろうから、
今日日の32bitポインタの場合、4バイト*yバイトのメモリ領域をallocmemとかで用意して、
そこに各ポインタを入れて、先頭のポインタ(アドレス)をdllで渡してやることになる。

つまるところ、C側は、char*でもint*でもポインタなら何でも良い。
どうせキャストするだろうし。
一般的に、DLLでデータをやりとりする際、ポインタのポインタを引数とする関数を
externalするようなわかりにくいことはしないよ。
652651:05/02/25 02:39:48
とか書いたが、別にポインタのポインタを引数にしても良いような気がしてきた。
まあ、ポインタなら間違いじゃないよ。
653デフォルトの名無しさん:05/02/25 02:41:34
var
a,b,c:integer;

と、宣言した上で、a,b にいろいろ値を入れた後、

c:=trunc(a/b);

を実行すると、たまに不正な小数点演算 というエラーが出ます。

宣言を

var
a,b,c:integer;
d,e:double;

として、

d:=a;
e:=b;
c:=trunc(d/e);

とすると、特にエラーが出ません。
Delphi7 です。何ですかね、これ。
654デフォルトの名無しさん:05/02/25 03:27:36
>>653
何かの拍子に、bに0が入っているっぽいような。

truncの直前に、
assert(b <> 0 , '0除算');
を付け加えても、assertにひっかからずにエラーでる?
655デフォルトの名無しさん:05/02/25 05:01:16
Truncは関係あるの?
656647:05/02/25 06:56:21
>>651
ありがとうございます^^
657デフォルトの名無しさん:05/02/25 07:46:10
>>655
一応、resultがint64の範囲外の時は例外を出すと
ヘルプに書いてあるが、今回は関係なさそうだね
658653:05/02/25 10:08:58
>>654
0除算ではありません。それはifで除外しています。
一度Double型に入れてから計算すると、エラーが出ないものですから。
659名無し募集中。。。:05/02/25 10:56:15
>>658
integerは整数型だから除算はdiv、/は浮動小数点除算に使う
そこらへんが怪しいと
660653:05/02/25 11:19:08
すいません。除算ではありませんでした。私の思い込みだったようです。
結局例外の原因となっていたのはこういう処理でした。

var
a:integer;
b:double;
f:double;
begin
a:=50000;
b:=a;

f:=sqr(a); //OK
f:=sqr(b); //OK
f:=sqrt(sqr(a)); //NG
f:=sqrt(sqr(b)); //OK
f:=sqrt(a*a); //NG
f:=sqrt(b*b); //OK
end;

計算部分でNGとあるものが、例外の発生するものです。
50000を2乗するとintegerの桁を超えるのが原因のようです。

ただ不思議なのは、Double型に代入する
f:=sqr(a);
には問題が無く、Double型を引数とすると思っていたsqrt関数で
f:=sqrt(sqr(a));
で例外が発生するのは、単にsqrtにintegerで受け取るoverload関数があったと言う事でしょうか・・。

お手数かけました。すいませんどうも。
661653:05/02/25 11:25:42
すみません・・。

f:=sqr(a); の結果は、桁が溢れた -1794967296 でした。

負の数でsqrtしたら例外が出て当然ですね。
本当にご迷惑かけまして、すみません・・。
662653:05/02/25 11:37:51
あの・・。すみません、本当にくだらない内容になってますね。

var
a:integer;
f:double;
begin
a:=50000;
f:=sqr(a);
end;

これにより、f=-1794967296になるのは、sqrに
function Sqr(X: Integer): Integer;
というoverload関数があるから桁あふれしたのだと納得したつもりだったのですが、
f:=a*a;
としても、f=-1794967296 になってしまうのはなぜなんでしょう・・。

a*aの演算時は、結果をaと同じintegerに格納し、それからDouble型に直してfに入れるという事でしょうか・・。
一部でも大きな桁になる可能性のある計算式には整数型の変数を使ってはいけないという教訓ですかね。
失礼しました・・。
663デフォルトの名無しさん:05/02/25 11:37:58
     |
     |
    ∩
    ∪

    __
  /  /|
  | ̄ ̄|/
   ̄ ̄
>>661
スレのみんなで君の晴れ舞台を用意したよ。
664デフォルトの名無しさん:05/02/25 12:51:45
delphi6起動中にCtrl+gでアウトラインを出してくれるソフトウェアの在りかを教えてください。
665デフォルトの名無しさん:05/02/25 13:00:42
質問です。

TListViewにてViewStyleをvsReportにてした場合でも
アイコンを表示する方法はありますでしょう?
666デフォルトの名無しさん:05/02/25 15:46:16
>>665
SmallImagesに小さいアイコンを入れたTImageListを設定する
667デフォルトの名無しさん:05/02/25 16:04:55
Delphi8 EnterpriseでOracle7.3からデータを取得してエクセルに渡すソフトを作っているのですが、
データ形式が特殊な為時間がかかり困っています。

頭2桁がアルファベット、そこから下2桁が12進数(10→A,11→B,12→C)の品種データがあり、
その品種名とデータをエクセルに順番にコピーするのですが、品種が順番に並んでいないので
今はエクセルのセルに総当たり戦で並べ替えています。
データベースにめちゃくちゃな順番で品種が入っているのでどうしても総当たり戦をせざるを得ず、
そうすると、膨大な時間がかかってしまっています。

ローカルにデータベースを作ってそこにデータをコピーして並べ替えられればベストだと思うのですが、
このような特殊なデータフォーマットの並べ替えに対応しているデータベースはありますでしょうか?
また、良い方法がありましたら教えてください。
668デフォルトの名無しさん:05/02/25 16:10:20
Excelにデータ転送後にExcelでソートすれば?
Oracleから取り出すときにソートすれば?
669デフォルトの名無しさん:05/02/25 16:42:40
(Sender).Name[6] は 6番目の文字が抜き出されるのですが、

6番目7番目の文字が欲しい場合はどのようにすればいいでしょうか?
670デフォルトの名無しさん:05/02/25 16:45:52
自己解決しました。
honya(Sender).Name[6] + honya(Sender).Name[7] ででました。 
671デフォルトの名無しさん:05/02/25 17:05:15
Copy(honya(Sender).Name,6,2);
672デフォルトの名無しさん:05/02/25 18:32:05
>>670
三文字以上とかになると激しくアレだから671がお勧め
673デフォルトの名無しさん:05/02/25 18:51:28
>>650
確かにUTF-8ではUCS-4に含まれる文字もエンコードできるから、UTF-8からUTF-16だと
欠落する文字が皆無とは言えない。
でも、現実にはWindows上でUCS-4にしか含まれない文字なんてほとんど使われないし、
サロゲートペアで多少は回避できるので、気にしなくてOKだと思いまつ。
674デフォルトの名無しさん:05/02/25 18:53:31
>>664
GExperts ?
675デフォルトの名無しさん:05/02/25 19:02:23
Memo1.Text、Memo2.Text、、、をMemo[i].Textのように扱いたいのですがうまくいきません
代替手段等あれば教えてください
676デフォルトの名無しさん:05/02/25 19:09:47
>>675
最近のこの質問多いね
677デフォルトの名無しさん:05/02/25 19:18:42
TTextの配列でも作れ、若しくはTComponentあたりに何かあるべ
678デフォルトの名無しさん:05/02/25 19:20:58
var
 DMemo: array[0..9]of TMemo;

 for i := 0 to 9 do
  DMemo[i] := TMemo.Create;

 後は好きなように・・・・

679デフォルトの名無しさん:05/02/25 22:19:45
>>671 >>672
おお、すごいすっきりしました。
ありがとうございました。
680デフォルトの名無しさん:05/02/25 22:32:40
681デフォルトの名無しさん :05/02/25 23:36:09
QuickReportを使用したことのある方に質問なのですが、
TQueryをレポートを呼び出すフォーム側とQuickRep側のどちらかに貼らなかった場合に
エラーが起きる等の話を聞いたことがありませんか?
あるシステムを開発していて、大量の帳票を作成したのですが、
いくつかの帳票でうまく出力されないエラーが起きています。

聞いたことがある方、ご存知の方がいましたら教えてください。
Delphi6使用です。
よろしくお願いします。
682デフォルトの名無しさん:05/02/26 01:47:54
 DelphiからリモートにあるMySQLデーターベースサーバーにアクセスしたいのですが、どうすればよいのでしょうか?
ぐぐってみてもBDEだのDAOだのODBCだので、どれを使っていいのか分かりませんし...。

 どこかに詳しく解説されているサイトとかありませんか?
683デフォルトの名無しさん:05/02/26 02:37:18
このごろのプロはくだすれを利用するようだ・・・・
684デフォルトの名無しさん:05/02/26 03:24:20
>>667
TListじゃだめか?C言語のqsortみたいに自分で比較関数を定義できるのだけど。
メモリやHDにデータを読み込んで、それをTListで並べ替え。
685664:05/02/26 04:30:10
http://www.gexperts.net/
やっとの事で自己解決しました。
gexpertsでした。
686デフォルトの名無しさん:05/02/26 04:34:38
>>674
ありがとうございました。
レスに気がつかずに必死で調べていました。
無視してすみませんでした。おやすみなさい。
687デフォルトの名無しさん:05/02/26 11:22:39
http://www.hi-ho.ne.jp/jun_miura/jmedit.htm
上記のJmEditorで使っているようなスピンエディタはどこかで公開されてないかな?
Delphian World にはないみたいだ。
688デフォルトの名無しさん:05/02/26 14:46:31
>>687
トップページにソース公開されてるよ。自作コンポみたい。
689デフォルトの名無しさん:05/02/27 01:34:18
Delphiで現在の通信量(上り下り)知るにはどうしたらいいのでしょうか
教えてくださいませ。 orz
690デフォルトの名無しさん:05/02/27 07:21:17
 皆さんはプログラムのコーディングにIDEとテキストエディタのどちらの方を
よく使いますか? アプリとコンポではかなり違うと思いますが。
691デフォルトの名無しさん:05/02/27 10:04:58
今公式ページ落ちてる?
繋がらないんですが('A`)
692ミ,,゚Д゚彡 ◆A6VzDeLphI :05/02/27 11:32:09
>>690 IDEです。EmEditorでDelphi構文色分けなどしてますが
使うのは複数行コメントアウトの時や
他のコード見ながら入力するときのソース閲覧として使います。

>>691 うちからも。
693デフォルトの名無しさん:05/02/27 14:24:09
FASTNETのTNMHTTPで、以下のようなコードを実行すると、
1回目は成功するのですが、2回目以降は@の部分でプログラムが固まります。
何がいけないのでしょうか?

nh:=TNMHTTP.Create(Application); ・・・・@
try
 nh.InputFileMode:=False;
 nh.Get(Url);
finally
 nh.Free;
end;
694デフォルトの名無しさん:05/02/27 15:59:31
>>689
知るだけならパフォーマンスカウンタで良いんじゃない?
695デフォルトの名無しさん:05/02/27 16:53:50
delphiのIDEより使い勝手のいいテキストエディタって色々試したけど見つからない。
IDEはオートインデントとかマクロが弱いから、ちと不満。
696デフォルトの名無しさん:05/02/27 18:16:45
mediaplayerで dtAutoSelect 以外では再生できない。どうしてですか?
697デフォルトの名無しさん:05/02/27 18:39:56
ある数に一番近い数を配列の中の数値から取り出したので調べてましたところ、
MinIntValue MinValue 関数を発見したのですが、使い方がわかりません。 これはどのように使えばいいのでしょうか? 
また一番近い数を取り出す良い方法がしってましたら教えてください。 現状はこんな感じなのです・・・。
procedure TForm1.Button1Click(Sender: TObject);
var
a : array [0..3]of Integer;
b : array [0..3]of Integer;
i,j,u,min : Integer;
begin
u := 30;
a[0] := 10;
a[1] := 33;
for i := Low(a) to high(a) do
begin
b[i] := a[i] - u ;
if b[i] < 0 then
begin
b[i] := b[i]*-1;
end;
end;
min := b[j];
for j := Low(b) to High(b) do
begin
if min > b[j] then
begin
min := b[j];
end;
end;
Memo1.Lines.Add(IntToStr(min));
end;
698デフォルトの名無しさん:05/02/27 18:42:05
ある数に一番近い数を配列の中の数値から取り出したい。ので調べてましたところ、   でした。
699デフォルトの名無しさん:05/02/27 18:55:40
>>697
たとえば
99 100 101
とあって、100に一番近い数字はどれにしたいのか。
仕様を明確にすべし。
700デフォルトの名無しさん:05/02/27 22:04:48
>>699
レスありがとうございます。
u:Integer 値が100の時、 配列がaの要素 99 100 101 の中で一番近いのはどれか? です。
何に使うかといいますと、ビットマップの1ピクセルの色の置換えになります。
ご教授おねがいします。
701デフォルトの名無しさん:05/02/27 22:16:07
>>700
減色でもするの?高品位の減色は難しいよ。
http://www.cmagazine.jp/
ちょうど最新号のCマガが減色特集をしてますよ。
702デフォルトの名無しさん:05/02/27 22:28:43
>>27です。
MinIntValue(b); 単にこれで出てきました。
しかしながら何番目の要素なのかは分からないんですね。
んー、いい方法ないかなあ。

>>701
ありがとうございます。
簡易的なものを作ろうと思って、その本を
今日、近所の本屋に行ったのですが、田舎なのか売ってなかったです。^^;
注文したほうがよさそうですね。 
703689:05/02/27 22:41:49
>>694
パフォーマンスカウンタとはどんなふうに使うんでしょうか。ぐぐってもわかりませんでした。
すいません・・
704デフォルトの名無しさん:05/02/27 22:55:22
>>701
漏れ、減色ソフトつくってるんだけど、あの記事はなんだかなあ、とか思ったり。
R>=G>=B
って本当なんかな。
705デフォルトの名無しさん:05/02/27 23:02:19
>>682
DelphiやMySQLのバージョン。エディションが不明だが
速いのはdbExpress。手軽さはMyODBC
706デフォルトの名無しさん:05/02/27 23:15:42
単にドライバの問題なので、接続後は普通のDBプログラミングと同じ。
707デフォルトの名無しさん:05/02/27 23:50:57
>>704
G>R>B です。
2箇所書いてあったから誤植じゃないっぽいなあとぽかーんしますた。
内容も今までに何度か出てきていたメディアンカットの記事に毛がはえた程度だったし・・・。
708704:05/02/28 00:08:28
>>707
だよなあやっぱり。
その直前のRGBからの変換式では、ちゃんとGの係数が一番大きくなっているのに、
あの記事では訳わからん。
709デフォルトの名無しさん:05/02/28 01:35:41
>>708
著者が理解してなくて資料片手に原稿書いたと思われ
710デフォルトの名無しさん:05/02/28 02:07:37
>>709
名前でぐぐると、一応、画像処理のシェアウェア作者らしいんだけどな・・・
711ミ,,゚Д゚彡 ◆A6VzDeLphI :05/02/28 02:53:55
よくわかんないけど、誰にでもミスや勘違いはあるんだから
生暖かい目で生易しく見守ってあげたり指摘してあげたら、
素敵な人になれるのではないかしら。
712デフォルトの名無しさん:05/02/28 14:47:14
>>711
まあ一般的にはそうなんだけど、Cマガはそういうの大杉。
「オリジナルOSを作ろう!」という特集なのに肝心のOSがなかったりとか。

ところで、>>697は a[2], a[3] の初期化をどこでやっているんだろう?
713デフォルトの名無しさん:05/02/28 17:19:34
とりあえずCマガの読者アンケートに書いておいた。
714デフォルトの名無しさん:05/02/28 22:20:27
if pos('|','ポ') <> 0 then
 showmessage('なんで?');

なんで'|'が'ポ'に含まれてるのですか?
715デフォルトの名無しさん:05/02/28 22:29:49
'|'=7C
'ポ'=83 7C
ShiftJISだからと思うよ
716デフォルトの名無しさん:05/02/28 22:31:58
AnsiPos でないからです

| は 7C
ポ は 837C
717デフォルトの名無しさん:05/02/28 22:53:27
ありがとう
718714:05/02/28 23:12:12
ポ の真中の棒が含まれてるのかと思ってしまった
719デフォルトの名無しさん:05/02/28 23:14:51
ヤラレタorz
720デフォルトの名無しさん:05/02/28 23:19:08
>>718
吹き出した
721デフォルトの名無しさん:05/03/01 01:19:26
AnsiPosだとバイトをちゃんと見分けるのですね。
必ずAnsiPosを使った方がいいのですか?
Posより遅くなりますか?
722デフォルトの名無しさん:05/03/01 02:36:46
2バイト文字を含むときはAnsiPosが必須。そうでなければPosでいい。
723デフォルトの名無しさん:05/03/01 03:06:19
>>710
画像関係は数式だけ何処かから持ってくれば
なぜそうなるか理解してなくても
それなりに動作するものが作れるから
724デフォルトの名無しさん:05/03/01 08:33:05
まあいいかげんすれ違いの話題だがあの人は
Cマガで画像処理関連の連載を長いことやってた人だよ。
725デフォルトの名無しさん:05/03/01 10:14:31
すれ違い
726デフォルトの名無しさん:05/03/01 11:32:08
配列にまとめて値を入れるにはどうすればいいですか?
a : array[0..5];
a := (1,2,3,4,5,6);
727デフォルトの名無しさん:05/03/01 11:50:33
>>726
同じ型同士なら代入互換性があるから
定義時に初期値をいれておいて代入したら?

同じ型でなければいけないよ。
728デフォルトの名無しさん:05/03/01 14:31:32
Delphiでドットインパクトプリンタに統一伝票用の
印刷プログラムを作るには、QuickReportを使用する
のが無難ですか?
大量に印刷するんで速度も重視したいんですが・・・
729デフォルトの名無しさん:05/03/01 16:19:28
>>728
無難。
730デフォルトの名無しさん:05/03/01 18:32:59
アクションについて教えてください。
1つのアクションを複数のメニューから実行できるようにしておいて、
実行時に選択されたメニューによって動作を変えたいときは
どうすれば良いでしょうか。
Senderにはアクション自身が入っていてちょっとがっかり。。
731デフォルトの名無しさん:05/03/01 18:45:05
ちょっと違うかもしれんけど、
TMenuItemのActionはカラにしといて、
OnClickにTActionのOnExecuteを直接指定してみては?
それならSenderにはTMenuItemが入っているはず
732デフォルトの名無しさん:05/03/01 18:52:19
>>728
ある程度の融通利かせたいならこれとか。
http://www.borland.co.jp/dbase/pt32up.html
733デフォルトの名無しさん:05/03/01 19:25:02
VC++で作成したDLLをDelphiで利用するプログラムを書いています。
このDLLはいわゆる入出力プラグインと呼ばれる物で、DLL経由でデータの入力/出力を行います。

DelphiからDLLへデータを渡す場合(Export)はDelphiでGetMemしたポインタを渡して処理が実現できているんですが、
そもそもこれがうまくいくのがよくわかりません。
DLLは呼び出し側とメモリ空間は共通なんでしょうか?
でも逆にDLL側で確保したメモリを呼び出し側(Delphi)で参照するとアクセス違反が起きます(これは納得)。

(普通、メモリ共有はCreateFileMapping()を利用すると思うのですが、
これは面倒なので他の手段を試しているんです)
734デフォルトの名無しさん:05/03/01 19:33:45
>>733
32ビットアプリなら、DLLとアプリは同じメモリ空間。

DLL側でどうやって確保してるの?
735733:05/03/01 19:39:06
>>734
> 32ビットアプリなら、DLLとアプリは同じメモリ空間。
あ、そうなんですか?
それなら話は早いですね。

DLL側ではGlobalAlloc()で確保してます。
Delphi側でGlobalFree()で破棄してるんですがこれがまずいんでしょうか?
736デフォルトの名無しさん:05/03/01 19:59:54
GMEM_FIXEDで確保して、帰り値をポインタとして使ってるんだよね?
それで問題無いと思うよ。

同じ事をDLLでなくDelphi側で試験コード作ってやってみたら?

それで問題無いなら、たぶんDLLの呼び出し時のミスだと思うよ。
cdeclとかの呼び出し規則のミスか 構造体のアライメントのミスか
737デフォルトの名無しさん:05/03/01 20:03:51
>>731
ありがとう。それだとActionじゃなくて普通の関数でいいですよねえ。
ん〜Actionは単純な場合しか使えないのかな。
738735:05/03/01 20:16:48
>>736
DLL側でGlobalAlloc(GMEM_FIXED, ...);として確保してましたが、
確保してない領域にアクセスしていたようです(あいたた)。
これで何とか入力/出力がDLLで実装出来ました。
ありがとうございました。

739デフォルトの名無しさん:05/03/01 21:30:10
>730 ActionComponent
740デフォルトの名無しさん:05/03/01 23:14:55
リモートデバッグ用のサーバってどこに入っているんですか?

ヘルプには
>デバッグサーバーをデバッグ対象環境にインストールするには,
>CD-ROM の RDEBUG ディレクトリにある setup.exe を実行してください

と書いてありますけどどこにもない。Delphi6 Professional使用

741デフォルトの名無しさん:05/03/02 00:45:15
>>740
リモートデバッグはEnt版の機能じゃないか?
742デフォルトの名無しさん:05/03/02 01:19:58
Windows ソケットエラー:無効な引数が提供されました。
(10022)[API'WSACancelASyncRequest']
って出たんですが、これ、何が原因ですか?解決法を教えてくださいぃ!
743デフォルトの名無しさん:05/03/02 09:23:14
>729,732

DBがSQLServerなんで、QuickReportになりそうです。
あんまり融通利かないんですか・・・
ありがとうございました。
744デフォルトの名無しさん:05/03/02 10:30:48
マルチポストする人って、頭わるいのかな。質問のしかたもひどいし。
745デフォルトの名無しさん:05/03/02 12:39:29
くだすれで言っても
746デフォルトの名無しさん:05/03/02 14:09:39
IniFile.ReadStringで改行を含む文字列を取得するには
どのようにすればよいのでしょうか?

例えばIniファイルにhoge=Hello#13#10Delphiなどと書いて
ReadString(Section, 'hoge', '')とやると改行されず
Hello#13#10Delphiがそのまま取得してしまいます。

「改行を含むデータなんてIniファイルで取得する必要ないだろ!」
という意見はごもっともですが、ご存知の方がいましたらお教え下さい。
747746:05/03/02 14:39:49
自己解決しますた
ReadStringは改行を読み込めないみたいなので
sData := IniFile.ReadString(Section, Ident, '');
sData := StringReplace(sData, '\n', #13#10, [rfReplaceAll]);
とやって置換することで対応しました
748デフォルトの名無しさん:05/03/02 14:47:58
> Hello#13#10Delphiがそのまま取得してしまいます。

'#13#10' はたんなる文字列だから・・・そのまま取得されないとむしろ大変だろ
749デフォルトの名無しさん:05/03/02 15:39:46
sData := StringReplace(sData, '#13#10', #13#10, [rfReplaceAll]);

なら、もとのままでもOKだよ(笑
750デフォルトの名無しさん:05/03/02 16:32:14
delphi2005で指定したフォルダの中にあるファイルをすべて出力するにはどうしたらいいでしょうか?
VBだったらfor each使えばすぐに出来るのですが、delphiでのやりかたが分からないので教えてください。
751デフォルトの名無しさん:05/03/02 17:35:00
http://vamp.s9.xrea.com/yukiwiki/wiki.cgi?
%B1%EE%A4%C7%A4%E2%A4%EF%A4%AB%A4%EBDelphi6
%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB%A1%C1
OpenJane%A5%B3%A5%F3%A5%D1%A5%A4%A5%EB

猿でもわかるDelphi6インストール〜OpenJaneコンパイル
の通り、環境を整えたのはいいものの、
「[致命的エラー] Main.pas(13): ユニット IdGlobal は異なるバージョン
System.RTLVersion によりコンパイルされています」
とででコンパイル出来ません。
どなたかご教授ください。
752デフォルトの名無しさん:05/03/02 18:50:23
>>750
"Delphi FindFirstFile"でぐぐりなさい。
753デフォルトの名無しさん:05/03/02 19:03:40
>>750
for each使うやり方を晒せば移植してあげるよ
754デフォルトの名無しさん:05/03/02 19:44:30
>>752

Delphi FindFirst だと思うけど。FindFirstFile はAPI
755デフォルトの名無しさん:05/03/02 20:08:05
>>751
似たようなレスを発見。

2chBrowser OpenJane@Win板 Part18
http://pc5.2ch.net/test/read.cgi/win/1099264661/111-
756デフォルトの名無しさん:05/03/02 21:08:25
>>750
procedure TForm1.ScanSubDir(Path: string);
var
 FName  : String;
 res,L  : Integer;
 SearchRec: TSearchRec;
begin
 if Path[Length(Path)] <> '\' then Path := Path+'\';
 L := Length(Path);
 Path := Path+'*.*';
 res := FindFirst(Path,faDirectory+faReadOnly,SearchRec);
 if res = 0 then
 begin
  try
   repeat
    if SearchRec.Name[1] <> '.' then
    begin
     FName := Copy(Path,1,L) + SearchRec.Name;
     Memo1.Lines.Add(FName);
     if (SearchRec.Attr And faDirectory > 0) then ScanSubDir(FName,flg);
    end;
    res := FindNext(SearchRec);
   until res <> 0;
  finally
   FindClose(SearchRec);
  end;
 end;
end;
-------------------------------------------------------------------------
 ScanSubDir(ExtractFilePath(Application.ExeName));
757デフォルトの名無しさん:05/03/02 22:08:39
>>750
procedure SearchDirectory(const Path: String);
var
 Rec: TSearchRec;
begin
 if FindFirst(Path + '*.*', faAnyFile, Rec) = 0 then
 try
  repeat
   if (Rec.Name = '.') or (Rec.Name = '..') then
    Continue;
  if (Rec.Attr and faDirectory > 0) then
    Continue;
  Writeln(String(Path + Rec.Name));
  until FindNext(Rec) <> 0;
 finally
  FindClose(Rec);
 end;
end;
758デフォルトの名無しさん:05/03/02 23:22:59
mediaplayerで dtAutoSelect 以外では再生できない。どうしてですか?
759デフォルトの名無しさん:05/03/02 23:26:52
>>758 情報不足。状況を説明汁!
760デフォルトの名無しさん:05/03/02 23:29:19
(´-`)。o ○ (「ソケットエラーの人」、ここではレスが付かなかったので
他へってんなら、その旨書くぐらいのことはしてもいいんじゃないのかねぇ…
どうして簡単にコピペで他へ質問するかなぁ…)
761758:05/03/02 23:43:19
お。
>>759さん
質問変えます。
音楽CDでmediaplayerでPauseがなんでStopになるのでしょう。
762デフォルトの名無しさん:05/03/02 23:44:25
それDelphiと無関係のような
763758:05/03/02 23:51:46
>>762
ワシの事か?
764デフォルトの名無しさん:05/03/03 04:09:30
TMediaPlayer の事では?
765デフォルトの名無しさん:05/03/03 07:30:20
サンプルのスピンエディタのソースにある RepeatPause,InitRepeatPause って
WinAPIなのでしょうか? ぐぐってもわかりません。
  FRepeatTimer.Interval := RepeatPause;
FRepeatTimer.Interval := InitRepeatPause;
766765:05/03/03 07:32:59
すんません。unit DBCtrls で定義されてました。
InitRepeatPause = 400; { pause before repeat timer (ms) }
RepeatPause = 100; { pause before hint window displays (ms)}
767デフォルトの名無しさん:05/03/03 08:02:39
答えてもらえないから火病るなんて…
768デフォルトの名無しさん:05/03/03 12:43:57
ほかのソフトが生成するテキストファイルを読み込んだり、
コピーしたりしたいんですが、そのファイルが書き込み途中か、
クローズされているかを、判断したいんですが、
いい方法があったら教えてください。
769デフォルトの名無しさん:05/03/03 15:31:49
googleの検索バー作ってるんですが
URLエンコードはどうすればよいのでしょうか?
おしえてください
770デフォルトの名無しさん:05/03/03 16:25:27
>>768
ファイルの日付を見て、更新されてたら処理するようにして、

書込中は相手が排他的オープンしてるだろうから開いてみて開けなければとしたらどう?
771デフォルトの名無しさん:05/03/03 16:37:40
>>750
procedure TForm1.ScanDir(Path : string);
var
 Rec : TSearchRec;
 Ret : Integer;
begin
 Path := IncludeTrailingPathDelimiter(Path);
 Ret := FindFirst(Path + '*', faAnyFile, Rec);
 while Ret = 0 do begin
  if ((Rec.Attr and faDirectory) = faDirectory) and
    (Rec.Name <> '.') and
    (Rec.Name <> '..') then begin
   ScanDir(Path + Rec.Name)
  end else begin
   Memo1.Lines.Add(String(Path + Rec.Name));
  end;
  Ret := FindNext(Rec);
 end;
end;
772デフォルトの名無しさん:05/03/03 17:20:51
>>771
FindFirstでJPEGファイルとBMPファイルだけを抽出したいのですが
やっぱPath+'*'で全部拾っていかないとダメなんでしょうか?
773デフォルトの名無しさん:05/03/03 18:06:11
>>772
WinFSまで待て
774デフォルトの名無しさん:05/03/03 18:38:02
>>773
永久に出ないことになります
775デフォルトの名無しさん:05/03/03 18:41:21
>>772
ワイルドカード文字も使える。ヘルプ嫁
776デフォルトの名無しさん:05/03/03 19:58:56
>>769は俺もしりたい
777デフォルトの名無しさん:05/03/03 20:13:37
RFC嫁
778デフォルトの名無しさん:05/03/03 21:11:57
RFCって?
779769:05/03/03 23:11:54
ほかにいきます・・・
780デフォルトの名無しさん:05/03/04 04:34:11
781デフォルトの名無しさん:05/03/04 06:28:55
Delphiのwithに相当するものってJavaにありますか?
782デフォルトの名無しさん:05/03/04 08:55:13
なぜここでJava
783デフォルトの名無しさん:05/03/04 14:36:01
Integer の変数を Extended 変数に変換するのはどしたらいい?
784デフォルトの名無しさん:05/03/04 14:54:36
Double経由になるかもしれないけど、明示的にキャストしてやったら。
785デフォルトの名無しさん:05/03/04 15:02:10
ただ代入するだけ。

> 明示的にキャストしてやったら

キャストって・・・意味わかっていってる?
786デフォルトの名無しさん:05/03/04 15:26:37
別に普通に代入して暗黙的にキャストさせてもいいが、
万が一でもコンパイラの勘違いさせないために、Extended( ) で囲うのも
悪いことじゃない。

上のやりとり見ると、785の方がキャストの意味がわかっているのか疑問。
787デフォルトの名無しさん:05/03/04 15:31:59
>Extended( ) で囲うのも悪いことじゃない。

わはははは、メモリイメージがまったく異なる数値形式をどうやってキャスト
するのかコードしめしてみ
788デフォルトの名無しさん:05/03/04 15:35:31
>>786
代入による暗黙の型変換とキャストを混同してるんだろ
789デフォルトの名無しさん:05/03/04 15:37:20
sqrt(Rp * Rp + Gp * Gp + Bp * Bp)
あの783です。これエラーがでるです。Integer  Extended のエラがでます。 
マイナスを無くすための処理でしょうか? 誰か助けてください。
790デフォルトの名無しさん:05/03/04 15:54:18
Rp * Rp + Gp * Gp + Bp * Bp だけで IntToStr() で表示してみて。
マイナスになるようだったらinteger の範囲でオーバーフローしてる。
だから

procedure TForm1.Button1Click(Sender: TObject);
var
  i:Integer;
  x:Extended;
begin
  i := 123456;
  x := i*i;
  Label1.Caption := FloatToStr(sqrt(x));
end;

はエラーになる。でも、これだとうまくいく

procedure TForm1.Button1Click(Sender: TObject);
var
  i:Integer;
  x:Extended;
begin
  i := 123456;
  x := i;
  Label1.Caption := FloatToStr(sqrt(x*x));
end;

参考になったかな?
791デフォルトの名無しさん:05/03/04 16:03:41
memcheckって日本人が作ったのと海外のがありますが、どちらが優秀ですか?
海外のを試しましたがDelphi2005の設定方法が分からなくてきちんとメモリーリークを
検出できなかったもので。
792デフォルトの名無しさん:05/03/04 16:25:21
>>790
ありがとう、非常に参考になったが上手くいきません。ちと粘ってみます。 感謝します。
793デフォルトの名無しさん:05/03/04 16:48:35
>>792
ようするに

var
xRp,xGp,xBp:Extended;

と変数を用意しておき、二乗する前に代入するといい
794デフォルトの名無しさん:05/03/04 17:14:36
sqrt(1.0 * Rp * Rp(ry
795デフォルトの名無しさん:05/03/04 17:49:09
とりあえずRubyを覚えたいんですが
その前に最低限覚えなきゃいけないことって何でしょうか?
796デフォルトの名無しさん:05/03/04 17:50:46
(  ・ω・)

(ε・ω・)з エラが出ます。


それはともかくとして、R,G,B が integer でオーバーフローを起こすほど
大きな値になるというのは、ちと不思議だ。
それ以前の計算は合ってるのかな?

>>795
スレタイが正しく見えるようになること。
797デフォルトの名無しさん:05/03/04 18:13:25
795だけど
Delphiってなんですか?
798デフォルトの名無しさん:05/03/04 18:27:19
DelphiからExcelのブックを開いているのですが、Auto_Openマクロが自動的に実行されません。
これは何かやらないといけないのでしょうか?

ファイルを開いた後に
E_Application.WorkBooks.RunAutoMacros xlAutoOpen ;
を追加してみたのですが、コンパイルが通りません。
どなたかよろしくお願いします。
799デフォルトの名無しさん:05/03/04 18:28:36
>>786
( ´,_ゝ`) プッ
800デフォルトの名無しさん:05/03/04 18:41:57
D5Pro+PARADOX(BDE5.2)でいぜんTableを使用していたところをTQueryをRequestLiveで
更新しようと書き換えたのですが、処理が1行おきになってしまいます。

いかのような処理をしています

while not Query1.eof do
begin
Query1.edit;
編集処理
Query1.Post;
Query1.next;
end;

このときPostとNextのところでそれぞれカーソルが動いてしまうのですが、これで良いのでしょうか。
801デフォルトの名無しさん:05/03/04 19:03:32
どうも、画面のハードコピーを印字しようとしていますが
うまくいきません。うまくいかない内容は印字結果がとても
小さいんです。ソースが長いので次レスで書き込みます。

環境はWin2000, Delphi 6 Personalです。

また、プリントダイアログで用紙を横デフォルトにはできない
でしょうか?

よろしくお願いします。
802801:05/03/04 19:04:23
//変数定義は改行規制のため一行にまとめています。
procedure TForm1.Button1Click(Sender: TObject);
var
Bitmap: TBitmap; FormRect: TRect; PrintDialog: TPrintDialog;
begin
PrintDialog := TPrintDialog.Create(Form1);
try
if PrintDialog.Execute then
begin
Form1.Repaint;
Bitmap := TBitmap.Create;
try
with printer do
begin
Bitmap := Form1.GetFormImage;
FormRect := Rect(0,
0,
Bitmap.Width,
Bitmap.Height);
begindoc;
Canvas.StretchDraw(FormRect,Bitmap);
enddoc;
end;
finally
Bitmap.Free;
end;
end;
finally
PrintDialog.Free;
end;
end;
803デフォルトの名無しさん:05/03/04 19:46:47
>>801
ディスプレイとプリンタでは1ピクセルの大きさが違う・・・でわかる?
804801:05/03/04 19:57:44
>>803
なんとなくですが、そうなんだろうなと思っていました。
ふと思いついて試したコードが以下です。
FormRectへの代入を以下にして見ました。
if Bitmap.Width > Bitmap.Height then
begin
FormRect := Rect(0,
0,
Printer.PageWidth,
Trunc(Bitmap.Height *
(Printer.PageWidth / Bitmap.Width)));
end
else
begin
FormRect := Rect(0,
0,
Trunc(Bitmap.Width *
(Printer.PageHeight / Bitmap.Height)),
Printer.PageHeight);
end;
これだとなんとか用紙幅一杯に印刷できるようになりましたが
本来の目的と異なるなぁ。っと。
805デフォルトの名無しさん:05/03/04 21:48:11
>>793
追撃ありがとうございます。できました。

しかしながらへっぽこな画像なのです。
>>796の言ってることあたりなのかもなあ。わからん。
806デフォルトの名無しさん:05/03/04 22:31:38
>>800
AfterPostとかBeforePostにカーソル動かすコード何か仕込んでない?

TDataSet.Postのヘルプ(D4)に
>などのようにあるレコードから別のレコードへ移動するデータセットメソッドは,自動的に Post を呼び出します。
とあるから、Postは省いてNextだけでいいと思うけど。

編集処理で何をやってるかは分からないけど、TTableをTQueryにせっかく置き換えたなら
グルグルしないでSQLのUpdate文一発とかで更新にチャレンジしてみては?
807デフォルトの名無しさん:05/03/05 00:34:33
>>798
「開く」というのはどういう操作?
ドキュメントのパスをシェルから開いたのか、それとも何かオートメーションで操作したか。
とりあえず、Excelのセキュリティ設定も見とけ。

808デフォルトの名無しさん:05/03/05 01:06:27
Web ソースから、一部分だけをテキストで抜き出したいと思っています。
例えば
http://www.sankei.co.jp/news/column.htm
の、<!--hombun--> って所から </td> の部分まで抜き出したいのです。
これは、正規表現というものを勉強した方がいいのでしょうか?
809デフォルトの名無しさん:05/03/05 01:14:54
TNMHTTPでリダイレクトのあるURLに対してOptions()やHeder()を実行すると
エラーになります。
なので、
http://www.msn.co.jp
http://www.google.com
のような形式だとヘッダのダウンロードすらできないのですが、仕様ですか?

810デフォルトの名無しさん:05/03/05 01:16:49
>>808
1.「<!--hombun-->」の場所をansiposで探す。
2.そこから最後までを別にコピー。
3.コピーしたヤツから「</td>」を探す。
4.コピーしたヤツの、「</td>」から後を削除。

ではダメ?
811810:05/03/05 01:26:16
そのアドレスのソース見てないから、
勘違いなレスだったら無視しておくれ。
812デフォルトの名無しさん:05/03/05 01:32:03
それよりhonbunじゃないの?
813デフォルトの名無しさん:05/03/05 02:07:31
>>808
StrPosで <!--hombun--> を探し、 そこからさらに </td> を探す。
814デフォルトの名無しさん:05/03/05 02:18:40
</td> の場所に #0 を入れちゃえ。
815808:05/03/05 02:45:03
>>810-814
レスありがとうございます。
ちょっと調べてみたのですが、〜Pos関数というのはいろいろ使えそうです。
未だ具体的な方法がわかっていませんが、いただいたレスを参考に勉強します。
ありがとうございました。
816デフォルトの名無しさん:05/03/05 10:42:35
Edit1に入力してEnterキーを押した時のイベントはOnEnterではなさそうなのですが、
どうしたらいいですか?
817デフォルトの名無しさん:05/03/05 11:01:32
DLGC_WANTALLKEYSでOnKeyDown

818ひま厨(寝不足):05/03/05 17:03:53
配列がうまく使えません!どうすればいいんでしょうか。


begin
 HTML:= IdHTTP1.Get(Edit1.Text);
 s := StringReplace(HTML,'.dat<>',',',[rfReplaceAll]);
 for i := 0 to 50 do
 begin
  ListBox1.Items.Add(s[i]);
 end;
end;

えっと、2chのログ形式は  すれ番号<>タイトル(書き込み) です。
リストボックスにずらーっと羅列したいんですが。おせえてエロい人!
819ひま厨(寝不足):05/03/05 17:08:21
begin
 HTML:= IdHTTP1.Get('http://pc5.2ch.net/tech/subject.txt');
 s := StringReplace(HTML,'.dat<>',',',[rfReplaceAll]);
 for i := 0 to 50 do
 begin
  ListBox1.Items.Add(s[i]);
 end;
end;


すいません修正します;;
820デフォルトの名無しさん:05/03/05 17:15:21
改行区切りだから
s := TStringList.Create;
s.Text := StringR以下略
でいいのでは
ええっと・・・よくわからんっす;;
まったくの初心者なんですみません;
俺の書いたソースに付け加える形でおねがいします;;
822デフォルトの名無しさん:05/03/05 17:24:27
ありがとうございました。

begin
HTML:= IdHTTP1.Get(Edit1.Text);
s:=TStringList.Create;
s.Text := StringReplace(HTML,'.dat<>',',',[rfReplaceAll]);
for i := 0 to 50 do
begin
ListBox1.Items.Add(s[i]);
end;
end;

これで解決しました。ほんとうにありがとうございました!
823デフォルトの名無しさん:05/03/05 17:26:55
C言語のエスケープシーケンス("\n","\r")のように、
文字列を表すクオーテーションに挟まれ書いてあっても、
内部的には制御記号になるような文字列の表記方法はDelphiにはないですか?
"#"記号を使った場合は、文字列ではなく変数のように扱いになってしまい、
クオーテーションの外に出さないといけないので。
'ABCD'+#13#10+'EFGH'ではなく'ABCD#13#10EFGH'のような書き方をしたいのですが。
824デフォルトの名無しさん:05/03/05 17:54:16
あれ、
'ABCD'#13#10'EFGH'
でよくなかったっけ
825デフォルトの名無しさん:05/03/05 19:48:20
>>823-824
procedure TForm1.Button7Click(Sender: TObject);
var
 S: string;
begin
 S := 'ABCD'#13#10'EFGH';
 MessageBox(Handle, PChar(S), 'テスト', MB_OK);
end;

結果。
 ABCD
 EFGH
と表示されるから、それで動くみたいだね。
826デフォルトの名無しさん:05/03/05 21:58:41
上級は人がいないようなのでこっちでも質問しますm(__)m

UTF-16LE 文字列を ANSI 文字列に変換したいのですが対応する標準関数
が解りません・・・ていうかあるのでしょうか?
827デフォルトの名無しさん:05/03/05 22:31:25
WideCharToString
828デフォルトの名無しさん:05/03/05 23:30:24
>>826
マルチ、図々しい。
829デフォルトの名無しさん:05/03/05 23:52:21
煽りに必死な奴なら多い
830デフォルトの名無しさん:05/03/06 00:05:53
それが2ちゃんさ
831デフォルトの名無しさん:05/03/06 02:22:03
Delphi 6 Personal を使用しています。
システムの最大パス長を知りたいのですが、
他の方のソースにある MAX_PATH が使えません。
何か uses に付け加える必要があるのでしょうか?
832デフォルトの名無しさん:05/03/06 02:25:38
uses
Windows;
833デフォルトの名無しさん:05/03/06 02:33:00
>>832
うまくいきました。
迅速な回答、どうもありがとうございます!
834デフォルトの名無しさん:05/03/06 04:52:20
>>769
遅レスだが、GoogleはURLエンコードせんでも
直接URLに検索文字入れて検索できるぞ。

http://www.google.co.jp/search?hl=ja&ie=Shift_JIS&q=(`・ω・´)&lr=

みたいな感じで。

自分が作ったブラウザに検索機能を実装するつもりで
色んな検索サイトを解析してたら偶然発見した。
835永遠の初心者:05/03/06 11:34:39
いまだにDelphi5なんですがStringReplaceとVer6以降に追加されたAnsiReplaceStr
はどう違うのでしょうか? StringReplaceは置換速度がやたらと遅いのですが
AnsiReplaceStrは少しは早くなったのでしょうか?
836デフォルトの名無しさん:05/03/06 13:43:19
StringReplaceに限らず
Ansi が付く関数・手続きは、マルチバイト対応。

例えば、StringReplace で 'a' を 'b' に置き換えようとした時
'a'($61) を含むマルチバイト文字も置き換えられるので、
例えば 餌 ($89 $61)や 病 ($95 $61)などの $61(a) 部分を $62(b)に置き換えてしまう。
すなわち 餌→叡 ($89 $62) になったり 病→秒 ($95 $62) になる。

AnsiStringReplace は、マルチバイト文字を検出するので、
このような現象を避ける事ができる。
837デフォルトの名無しさん:05/03/06 17:01:41
どっちも初心者専用関数だけどね
838デフォルトの名無しさん:05/03/06 17:20:39
>>834
RFC読め。
できるできないではなくやって良いかどうかだ。

赤信号だったんだけどぉ〜試しに渡ってみたら無事渡れちゃいました☆
今後もやろうと思います☆

おいジョン、見てみろよ。
RFCも読めないイエローモンキーがまた何かやってるぜ。
839デフォルトの名無しさん:05/03/06 17:23:30
赤信号だったんだけどぉ〜RFC読みながら渡ったら事故りますた。
840デフォルトの名無しさん:05/03/06 17:25:13
おい見ろよ、RFC嫁嫁イエローモンキーがまた出てきたぜ
841デフォルトの名無しさん:05/03/06 17:33:02
>>840
馬鹿さ加減が文章に表れてるな
842デフォルトの名無しさん:05/03/06 18:46:03
RFCって何ですか?
843デフォルトの名無しさん:05/03/06 19:03:01
function URLEncode(src: String): String;
var
i: Integer;
begin
Result:='';
for i:=1 to Length(src) do begin
Result:=Result+'%'+IntToHex(Ord(src[i]),2);
end;
end;
844デフォルトの名無しさん:05/03/06 19:40:07
>>843
それはいくらなんでも乱暴すぎるようなw
せめて英数字くらいはスルーしてやってくれ。
845デフォルトの名無しさん:05/03/06 19:41:28
>>842
ぐぐれ。
846834:05/03/06 20:05:12
>>838
そりゃやっていいとは思ってねぇよ。
俺のブラウザではシフトJISとEUC-JPとユニコードを自動判別して
URLエンコードしてから検索サイトに渡してるよ。

ていうか、834の最後に「お勧めはできない」の一文を付けるのを忘れてた。

しかしなんかギスギスしてんな。
847デフォルトの名無しさん:05/03/06 20:08:58
>>846
超初心者用なのに自慢したいやつが常駐してる・・・・
848デフォルトの名無しさん:05/03/06 20:14:59
>>844
function URLEncode(s: String): String;
var
 i: Integer;
begin
 Result := '';
 for i := 1 to Length(s) do case s[i] of
  ' ': Result := Result + '+';
  'A'..'Z','a'..'z': Result := Result + s[i];
 else
  Result := Result + '%' + IntToHex(Ord(s[i]),2);
 end;
end;
849デフォルトの名無しさん:05/03/06 20:15:17
やったら駄目な事を回答としてレスされても、質問者は困るよね。
850デフォルトの名無しさん:05/03/06 20:27:52
ああ、困るな。
851デフォルトの名無しさん:05/03/06 21:07:51
TActionListはどういう時に使いますか?
便利ですか?
852デフォルトの名無しさん:05/03/06 21:11:03
コンポ開発初心者
procedure TForm1.FormCreate(Sender: TObject);
begin
 UMCustom := TCustomControl.Create(Self);
 UMCustom.Parent := Self;
 UMCustom.Left := 80;
 UMCustom.Top := 10;
 UMCustom.Width := 50;
 UMCustom.Height := 50;
 UMCustom.Visible := True;
end;
 TCustomControlってこれだけでは何も表示されないんですね。
853デフォルトの名無しさん:05/03/06 21:33:06
>>851
オレはメニューのカスタマイズ用に使ってる

>>852
そりゃそうだ
Canvasで描写していく
854デフォルトの名無しさん:05/03/06 22:22:08
>>851
かなり便利だよ。機能のEnable・Disable、ツールチップ、
ボタンイメージ、ショートカットなんかを一元管理できる。
Delphiチュートリアルに使い方が書いてあったと思うが。
>>771
もしかして'*'だと拡張子のないファイルしかヒットしないのでは?
>>835-836
Delphi 6以降は持っていないのでわかりませんが
Delphi 5のStringReplace関数はヘルプにはマルチバイトに対応していると書かれていますし,
SysUtils.pasを見てもマルチバイトには対応しているようです.
簡単なプログラムでテストをしてみましたが『病』と『餌』は化けませんでした.
>>842
Googleがある時代,「○○ってなんですか?」っていちいち掲示板できくのは無意味ですよ.
>>851
たとえばメニューとツールボタンの両方があるアプリを作るとき.
項目の名前,アイコン,イベントハンドラ,ヒント文字列などを1カ所で管理できます.使用不可にするのも1カ所でできます.
またユーザーインターフェース(要は操作方法)をあとから全く違うものに変更したくなった場合にも
コードをほとんど変更しなくて済みます.ほかにもいろいろ便利.
>>852
TCustomControlクラスの実体を作るのではなくてこのクラスをベースに独自のクラスを定義して使います.
ヘルプの『コンポーネント開発者ガイド』はざっとひと通り読んでみてください.
(ここはわかりやすく丁寧に書かれています)
わからないことがあったらまた質問して下さい.
856デフォルトの名無しさん:05/03/07 00:31:22
>>855
>もしかして'*'だと拡張子のないファイルしかヒットしないのでは?

んなこたーない
ワイルドカードは . だって含む






あれ?
じゃあ何で *.* で検索すると . の無いファイルやディレクトリも引っかかるんだ?
教えてエ○イ人!
857デフォルトの名無しさん:05/03/07 00:51:02
ディレクトリだけ特別扱いしてる、とか
858デフォルトの名無しさん:05/03/07 01:09:52
*.* が特別な扱いになってるだけ。
DOSの頃から存在する謎な仕様の一つですな。
859デフォルトの名無しさん:05/03/07 01:15:47
>>858
ほー、そうなのか
サンクス
860デフォルトの名無しさん:05/03/07 03:13:28
delphi8のアップデートいつなの?
861デフォルトの名無しさん:05/03/07 03:18:01
delphi8のアップデート=D2005 ですが、なにか?
862デフォルトの名無しさん:05/03/07 07:35:37
>>858

昔のFAT形式は ファイルが32バイトで表現される為に、その情報として'.'を含んでいなかったのです。

つまり 8+3でファイル名+拡張子を記録してドットは記録してなかったわけ。
863デフォルトの名無しさん:05/03/07 10:33:29
それなら、*.txt がどうしてワイルドカードになるのかわかんない。
拡張子とファイル名を区別して記録していたなら、ドットが記録されているかどうか
を議論するのは意味が無いのでは?
864デフォルトの名無しさん:05/03/07 10:45:13
dos,windowsでは最後のドットはファイル名の名前部分と拡張子部分の
区切りを示す特別なものなのだよ
865デフォルトの名無しさん:05/03/07 10:53:27
それなら、なぜ *.* のドットが最初のドットではなく、最後のドットだと分かるの?

> *.* が特別な扱いになってるだけ。

これのほうが分かりやすいと思うけど。
866デフォルトの名無しさん:05/03/07 11:00:43
なぜ疑問なのかが分からないんだけど・・・
*.*
の左の*は名前部分、右の*は拡張子部分示してるだけ
正規表現とは違うよ
867デフォルトの名無しさん:05/03/07 11:07:18
コマンドプロンプトから

dir *
dir .
dir *.*
dir *.
dir .*

とか入れて見比べてみな
868デフォルトの名無しさん:05/03/07 11:08:47
*ばっか
869デフォルトの名無しさん:05/03/07 11:08:53
870デフォルトの名無しさん:05/03/07 11:09:49
そうなることは分かってる。どうしてそうなっているのか、を議論してる。
871デフォルトの名無しさん:05/03/07 11:13:20
Windowsの仕様としかいいようがないだろうに。
ゲーツに聞いたら?
872デフォルトの名無しさん:05/03/07 11:14:11
だから

> *.* が特別な扱いになってるだけ。
873デフォルトの名無しさん:05/03/07 11:15:48
特別扱いになってるのをもっともらしく説明しようとするから・・・・
874デフォルトの名無しさん:05/03/07 11:25:54
それなら

*

が特別扱いだろうに
875デフォルトの名無しさん:05/03/07 11:29:10
>>856 にあるとおり、* はドットを含む、と見なせば特別扱いじゃないと思うけど
876デフォルトの名無しさん:05/03/07 11:39:41
*だと.shrcとか.historyとか見えちゃうじゃん(*´ω`*)
877デフォルトの名無しさん:05/03/07 11:57:37
>>807
E_Excel := CreateOleObject('Excel.Application');
E_Application := E_Excel.Application;

これを使って開こうとしています。
もちろん、マクロの確認ダイアログは開かないように設定しています。
878デフォルトの名無しさん:05/03/07 14:34:48
デジカメの写真からEXIF情報を抜き出してます。
EXIFでは日付が2004:02:12 14:21:48という形式になってます。
これをすばやくTDateTime型に変換したいのですがどうしたらよかですか。
879デフォルトの名無しさん:05/03/07 14:50:40
>>878
var
 sDate: String;
 dDate: TDateTime;

SysUtils.DateSeparator := ':';
SysUtils.TimeSeparator := ':';

sDate := '2004:02:12 14:21:48';
dDate := StrToDateTime(sDate);
880デフォルトの名無しさん:05/03/07 14:52:47
function ExifToDateTime(ExifDatetTime:string):TDateTime;
begin
  ExifDatetTime := StringReplace(ExifDatetTime,':','/',[]);
  ExifDatetTime := StringReplace(ExifDatetTime,':','/',[]);
  result := VarToDateTime(ExifDatetTime);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Label1.Caption := DateTimeToStr(ExifToDateTime('2004:02:12 14:21:48'));
end;
881デフォルトの名無しさん:05/03/07 16:21:51
clientsocketでデータの送受信をこれ以上したくないという場合
に通常のshutdownのようなメソッドはありますでしょうか?
client.close;
を実行したらそのソケットに関してはもうdisconnectイベントが
発生して欲しくないのです。
882デフォルトの名無しさん:05/03/07 16:26:31
disconnectイベントをnilにしてcloseしれば?
883デフォルトの名無しさん:05/03/07 16:38:42
>>882
ありがとうございます。やってみます。
884デフォルトの名無しさん:05/03/07 16:58:04
そうか
ConnectイベントでOnDisconnectにDisconnectイベントを設定すればいいのか!
885デフォルトの名無しさん:05/03/07 18:10:26
うーん。なんか違う気がする
886デフォルトの名無しさん:05/03/07 18:43:51
2005のPersonalエディションていつ無料ダウンロード可になるんでしょうか?
887デフォルトの名無しさん:05/03/07 19:13:18
ダウンロードだと将来の商売に差し支えることになるので、雑誌の付録のCDとかに
収録される予定らしい
888デフォルトの名無しさん:05/03/07 19:57:08
888
889デフォルトの名無しさん:05/03/07 20:18:49
>>887
ありがとう。

雑誌をチェックしてなきゃあかんのか。
貧乏ってつらいな。
890デフォルトの名無しさん:05/03/08 00:56:11
>>855
神光臨
891デフォルトの名無しさん:05/03/08 01:35:20
は?
892デフォルトの名無しさん:05/03/08 01:44:44
見習って質問に答えたら?
893791:05/03/08 01:53:40
相手してください。。。
894デフォルトの名無しさん:05/03/08 02:27:07
>>893
海外のmemcheckは知らない。
895デフォルトの名無しさん:05/03/08 02:29:48
確か「2005」の話題は無しじゃなかった?このスレ。
896デフォルトの名無しさん:05/03/08 07:51:50
メインバージョンを無視してどうすんだよ
897デフォルトの名無しさん:05/03/08 10:01:16
2005は勝手はいけないバージョンなんですよ。 そんなものを買ったんですか? はい。
898デフォルトの名無しさん:05/03/08 10:03:47
おれはDel7と心中します。
899デフォルトの名無しさん:05/03/08 11:33:45
エディットコントロールの領域にファイルをドラッグアンドドロップし、
そのファイル名をドラッグしたエディットコントロールに表示させたいのですが、うまくいきません。

USE節にshellapiを追加し、private宣言の中に

procedure WMDropFiles(var Msg:TWMDropFiles);message WM_dropfiles;

を追加、onshowなどに

dragacceptfiles(handle,true);

を追加、

procedure TForm1.DropFiles(var Msg:TWMDROPFILES);

でファイル名取得処理、という感じでフォームにドラッグしたファイル名の受け取りはできました。
そこで、

dragacceptfiles(handle,true); → dragacceptfiles(Edit1.handle,true);

にしてみたら、エディットコントロールにドラッグ可能にはなったのですが、ファイル名取得処理が働きませんでした。
説明がへたくそですいませんが、どなたかご教授お願いします?
900デフォルトの名無しさん:05/03/08 12:40:37
> procedure WMDropFiles(var Msg:TWMDropFiles);message WM_dropfiles;

こうやって宣言しておいて

> procedure TForm1.DropFiles(var Msg:TWMDROPFILES);

でうまくいくはずないけど・・・・それはともかく

> エディットコントロールにドラッグ可能にはなったのですが、ファイル名取得処理が働きませんでした。

それは当たり前。WM_DROPFILES メッセージは Edit1 に届けられるので Form1 で受け取れない。
Edit1 で受け取るために WindowProc を使ってサブクラス化しなくちゃ
901899:05/03/08 16:23:13
>>900
レスどうもありがとうございます。
>procedure WMDropFiles(var Msg:TWMDropFiles);message WM_dropfiles;
すいません、いろいろいじっててごっちゃになってました。
とういか、「どなたかご教授お願いします?」、とかいって疑問形になっちゃってますね(汗
サブクラス化ですか、頑張ってみます。
902798=877:05/03/08 16:31:30
どなたかよろしくお願いします。
903デフォルトの名無しさん:05/03/08 19:14:48
>>902
開いたブックをBookとすると、
Book.RunAutoMacro(xlAutoOpen, CLID);
でいいんちゃう?
CLIDはLOCALE_SYSTEM_DEFAULTのconst
904デフォルトの名無しさん:05/03/08 19:46:40
IME再変換に使うと思われるWinAPI immReconvert の使用例はないでしょうか?
ぐぐってもあまり出てこないです。
905944:05/03/08 20:02:39
すんません。
immReconvert はWinAPIではありませんでした<(_ _)>
906デフォルトの名無しさん:05/03/08 20:22:05
40レスかかってやっと気付いたか
907デフォルトの名無しさん:05/03/08 22:36:45
TActionListに関する質問です。

ToolButton1 . PopUpMenu1のItem1 , PopUpMenu2のItem2 に同じ「HogeAction」 というアクションを設定したとします。
「HogeActionExecute」では処理を分岐したいのですが、
どこから「HogeAction」が呼ばれたかを知るにはどうすればいいでしょうか?



908デフォルトの名無しさん:05/03/08 22:49:48
>>907
俺が >>730 で聞いたのとまったく同じ疑問だw
よくわからないけど、Actionを登録してもOnClickに別関数を割り当てることができるようです。
Caption等々はActionで共通化しておいて処理だけ別みたいな感じで。
ただ、IDEがdfm作成するときにOnClickを消しちゃうので再設定が必要みたい。
909デフォルトの名無しさん:05/03/08 22:50:48
>907 >739
910デフォルトの名無しさん:05/03/08 22:51:24
>>907
Action.OnExecuteからでは判別不能です。別の方法考えれ。

ちなみにActionを割り当てたからって、
必ずそのActionのOnExecuteを使う必要はない。
自分で新しくイベント定義すればSenderで判別できる。

911デフォルトの名無しさん:05/03/08 22:54:34
>>908
ありがとう。
でも不便ですね。
Action使った方が便利と聞いたので、
やっとActionに設定し終わったんですよ
100くらい orz
912デフォルトの名無しさん:05/03/08 23:02:59
面倒だけど、後々の管理は楽になるぞ
913デフォルトの名無しさん:05/03/08 23:05:51
>>909
ありがとう!!!解決しました。
みんなありがとう。
かなりスマートにいけそうです。
delphiに感動しますた。
914デフォルトの名無しさん:05/03/08 23:20:08
WindowsのMediaPlayerをActiveXのインストールでコンポーネントに
出来たまでは良かったのですが、ファイルを読み込むことすら出来ません。
ぐぐって見たんですが、以前のMediaPlayerを使った解説ばかりで
説明通り出来ないんです。
MediaPlayer Var.10を使っています。
よろしくお願いします。
915デフォルトの名無しさん:05/03/08 23:23:41
確か「2005」の話題は無しじゃなかった?このスレ。
916デフォルトの名無しさん:05/03/08 23:34:05
くだスレとは思えない程有益なスレだなw
917デフォルトの名無しさん:05/03/08 23:35:28
たまに回答神が光臨しますので
お待ちください。
918デフォルトの名無しさん:05/03/08 23:57:14
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Delphi使いが優しくコメントを返しますが、
お礼はDelphiの布教と初心者の救済をお願いします。
919デフォルトの名無しさん:05/03/09 00:10:18
日本のDelphiコミュニティで一番活発な場所だ。












悪い意味で。
920デフォルトの名無しさん:05/03/09 07:59:42
はいはい。
921デフォルトの名無しさん:05/03/09 14:57:29
教えてください。
Imageに画像をセットした後のクリア方法がわかりません。

imgMXXX.Picture.LoadFromFile('');
で実行したのですが、ボタンクリック時に書いたところ消えませんでした。
922デフォルトの名無しさん:05/03/09 15:08:44
>>921
TImage.Picture.Canvasで塗りつぶす
923デフォルトの名無しさん:05/03/09 15:10:59
http://big2.big.or.jp/~osamu/Delphi/Tips/key.cgi?key=6#0028.txt
プログラムからファイルを検索するダイアログの表示をするため
上のページを参考にやってみたんですが、

Macro := Format('[FindFolder("%S")]', [Path]);

これだと探す場所にマイコンピュータを指定する事が出来ません
何か良い方法はないでしょうか。お願いします。

>>921
imgMXXX.Picture := nil;
とかで出来た気がする
924921:05/03/09 15:26:29
>>922
>>923
ありがとうございます。

>>923の方法で試したところ、無事消えました。
925デフォルトの名無しさん:05/03/09 16:25:13
近似色を求めるのにsetPixelVを使うと求められるようなのですが、
使い方はどのように使えばいいのでしょうか?
926sage:05/03/09 16:35:10
GetMem関数で730MByte程度のメモリを確保すると、「メモリが足りません」とエラーが出てしまいます。
使用しているPCの物理メモリは2GByte搭載しており、仮想メモリは3GByte確保しております。
どなたかご存知でしたら教えてください、お願いします。
927デフォルトの名無しさん:05/03/09 16:59:38
>>926
プロジェクトオプションのリンカタブで
最大メモリサイズを大きくしたらどうだろう
928926:05/03/09 17:19:39
>>927
ありがとうございます。
でも、試してみたのですが駄目でした。

更に調べていて
http://www.borland.co.jp/qanda/delphi/d0000246.html
という記述がありました。
しかし、CreateHeapなど他の方法でも試してみたのですが同様に700MByte程度の確保で失敗してしまいます。
これはハード、Windows、Delphiのいづれの問題でしょうか?
ご存知の方がおられましたら、教えてください。
929デフォルトの名無しさん:05/03/09 17:26:41
Delphiってなんですか?
930デフォルトの名無しさん:05/03/09 17:28:40
>>929
.NETの前身
931デフォルトの名無しさん:05/03/09 17:36:18
>>928
C言語を知ってるならmallocで試してみるとか
Linuxブチこんでgcc辺りで試すとか
問題の切り分けをやるしかないね
932Delフサギコ ◆A6VzDeLphI :05/03/09 19:41:38
 ∫,,,,,,,,,∧,,∧  >>900-901
⊂,,,,,,,,,つ,,゚Д゚ミつ
ApplicationOnMessage使うのが
楽で、いいんじゃないかな?


http://web.archive.org/web/*/http://nug.nasu-net.or.jp/~sakai/delphi/tips01.html
933デフォルトの名無しさん:05/03/09 19:47:23
>>925
procedure TForm1.Button1Click(Sender: TObject);
var
 i: integer;
begin
 // 線を引く
 for i := 0 to 100 do SetPixelV(Canvas.Handle, 10 + i, 10, $0000FF); // R
 for i := 0 to 100 do SetPixelV(Canvas.Handle, 10 + i, 20, $00FF00); // G
 for i := 0 to 100 do SetPixelV(Canvas.Handle, 10 + i, 30, $FF0000); // B
end;

こんな感じじゃない?
934デフォルトの名無しさん:05/03/09 20:02:59
Delphi初心者です。教えて下さい

Virtual ListViewでCheckBoxを表示したいのですがうまくいきません。
ListViewのプロパティは
OwnerData=True
Checkboxes=True
で設定し、OnDataイベントでデータの表示をおこなっています。

Delphi5です。
何が足りなくて表示されないのかわかりません。

また、helpにListView.Items.SetCount()ってprocedureがあるって書かれてるんですが
コンパイルエラーになります。これはHelpのバグでしょうか?

どなたかおわかりの方、お教え下さい。よろしくお願いします。
935デフォルトの名無しさん:05/03/09 20:20:59
>>934
> ViewStyle が vsList または vsReport の場合
とヘルプにある。

> helpにListView.Items.SetCount()ってprocedureがあるって書かれてるんですが
SetCount は protected メソッドだからじゃね?

ListView.Items.Count := 100;

みたいに Count プロパティに直接代入するとか。
936934:05/03/09 20:29:43
>>935
レスありがとうございます。
説明不足で申し訳ないです。ViewTypeはvsReportで設定しています。

> SetCount は protected メソッドだからじゃね?
了解しました。

> ListView.Items.Count := 100;
本題とはずれてしまいますが、この式をVirtualでない場合(OwnerData=False)は
Countに値が代入されませんでした。これも不可解なんです。
Helpにはデータ領域を確保しますみたいな事書いてあるんですが...

937デフォルトの名無しさん:05/03/09 20:57:19
>>936
要するに、OwnerData=Falseの時に
Items.Count に代入すると、キャパシティを設定するということでは。
Items.Count は、実際のアイテム数を指していないと破綻するし。

TListとかでもそうだけど、Capacityを超えてAddしようとすると、
新たにメモリを割り当てなおすから無駄があるけど、
追加するアイテム数がわかってるなら、あらかじめCapacityを設定することで
無駄がなくなって早くなる。
>>856
ごめんなさい,十年くらいずっと勘違いしてました.
>>878-880
海外版Windowsで動かす可能性があるのなら自分で切り出した方がよいかもしれません.
939デフォルトの名無しさん:05/03/10 02:10:19
回答神光臨中
940デフォルトの名無しさん:05/03/10 03:17:43
>>928
単純にそれだけのサイズの連続した領域を確保できないのでは?
941Delフサギコ ◆A6VzDeLphI :05/03/10 07:26:01
    ∧,,∧    ぉぁょぅ
   ミ,,゚Д゚彡   早起きしますた
    ミ つ旦)~~
  〜と,,,~),,~)

Windowsサービスを起動・停止するのは
どのようにするのでしょうか、

sc.exeを使う方法は、sc.exe自体を
配布してもいいやらわるいやら
よくわからない&そういうのに左右されたくないので
ライブラリでとあるサービス(例えばlanmanserverだが)を
起動・停止、してみたいのです。

残りレス数も少ないですが
教えてエロい人。
942デフォルトの名無しさん:05/03/10 09:02:55
>>941
コマンドプロンプトでは
net start/stop "サービス名"
でできる
943デフォルトの名無しさん:05/03/10 11:08:18
EditのTextなどの文字が表示できるとこで、
EnabledをFalseにすると文字が灰色になりますが、
この文字の色を黒のままにしたいんですが、できるんでしょうか?
回答お願いします。
944デフォルトの名無しさん:05/03/10 11:15:26
パネルごと・・・
945デフォルトの名無しさん:05/03/10 11:41:25
2カ所に同じ値を代入したいんだが。
どう書けばいい?
946デフォルトの名無しさん:05/03/10 11:42:43
a:=1
b:=1
947デフォルトの名無しさん:05/03/10 11:51:13
他にない?
948デフォルトの名無しさん:05/03/10 11:56:08
a:=1
b:=a
949デフォルトの名無しさん:05/03/10 12:10:06
a=b=1とかは無理だから
950デフォルトの名無しさん:05/03/10 12:19:58
嫌ならCをやりませう
951デフォルトの名無しさん:05/03/10 12:24:48
a := b = 1
の結果はbが1ならTrue、そうでなければFalse。
952デフォルトの名無しさん:05/03/10 12:27:39
thx
C++やっててDelphiに浮気したw
953デフォルトの名無しさん:05/03/10 12:29:18
>>943
ReadOnlyプロパティでは駄目?
954943:05/03/10 12:53:08
>953
うおお、できました。
こんなプロパティあったのか、知らんかった。
ありがとございました。
955デフォルトの名無しさん:05/03/10 13:07:31
> EnabledをFalseにすると文字が灰色になりますが、この文字の色を黒のままにしたいんですが

できてないだろ・・・・
956943:05/03/10 14:04:29
>955
あ、いや、ReadOnlyをTrue、EnableをTrueにしたので
要は中身を変更禁止のまま文字を黒にしたかったわけで
で、変更禁止のプロパティをEnableしか知らなかったわけで
説明不足申し訳ないと思ったわけで
957デフォルトの名無しさん:05/03/10 14:50:11
>>941
WinSvc
958デフォルトの名無しさん:05/03/10 17:26:59
delphiからDOSコマンドのNet Sendみたいなことをやりたいのですが、
何か方法はありますでしょうか(バッチをキックするとかじゃなくて)?
宜しくお願いします。
959デフォルトの名無しさん:05/03/10 17:45:56
>>945
function Oppai(const Chikubi: Integer): Boolean;
begin
 Result := False;
  a := Chikubi;
  b := Chikubi;
 if a = b then
  Result := True;
end;
960デフォルトの名無しさん:05/03/10 18:24:46
>>958
NetMessageBufferSend
961デフォルトの名無しさん:05/03/10 18:55:16
>>960
ありがとうございました!
962デフォルトの名無しさん:05/03/10 19:45:03
次スレよろ
963デフォルトの名無しさん:05/03/10 20:50:22
imageListの設定で、アイコン追加すると、
画像の一番外側の枠が無視されてしまうのは何故?
964デフォルトの名無しさん:05/03/10 20:57:17
ImageListは追加された画像の左下か右下1Pixel分を
自動で透過色判別するからじゃね?
965回答神見習:05/03/10 21:01:11
透過させる色を変えればいいんだよ
966デフォルトの名無しさん:05/03/10 21:13:03
>>964-965
書き出ししてたから透過色選択できなくて気づかなかった・・・
マジdクス
967デフォルトの名無しさん:05/03/10 22:40:45
猿でもわかるIME再変換の方法を教えてください。
968Delフサギコ ◆A6VzDeLphI :05/03/10 23:57:02
>>942さん、>>957さん

    ∧,,∧   多謝!
   ,,ミ,,゚Д゚ミ
  .とミ,,,,,U,,U
969デフォルトの名無しさん:05/03/11 01:04:33
>>967 猿には無理
970デフォルトの名無しさん:05/03/11 01:07:18
次スレを立てますか。
971デフォルトの名無しさん:05/03/11 01:13:28
立てました。

くだすれDelphi(超初心者用)その23
http://pc5.2ch.net/test/read.cgi/tech/1110470895/
972デフォルトの名無しさん:05/03/12 00:19:53
Delphi6でgifアニメ表示するにはどうしたらよいのでしょうか。
おしえてください。
973デフォルトの名無しさん:05/03/12 00:40:50
TGIFImageとかフリーのコンポーネントを利用するのが楽かと
974デフォルトの名無しさん:05/03/12 00:42:05
>>973
それ選んだ瞬間固まっちゃったもので・・・後出しですいません
975デフォルトの名無しさん:05/03/12 02:03:34
TMainMenuを使いメニューを作成しましたが
実行してみるとメニューバーが表示されていません。
何か解決策はあるのでしょうか?
976デフォルトの名無しさん:05/03/12 02:21:24
>>975
BorderStyleがbsDialogになってるとか?
977デフォルトの名無しさん:05/03/12 09:41:40
>>975
もちろん項目追加しているよね?
978975:05/03/12 12:42:07
>>976
で、できた。やっぱりbsDialogになってたみたいです。
まじありがとうございました。
979デフォルトの名無しさん:05/03/12 21:16:53
コンポーネントパレット中のコンポーネントをダブクリすると、
自動で中央に配置されるんだね、知らんかった。
980デフォルトの名無しさん:05/03/13 03:12:41
日本語のOSなのか英語(その他)のOSなのか判断するにはどうしたらいいのでしょうか?
981デフォルトの名無しさん:05/03/13 04:11:37
プログラムを起動しているマシンのグローバルIPアドレスを取得したいのですが
どのようにすれば良いでしょうか。おそらく外部のサーバに接続したりしないと
いけない気がするのですが。。
982デフォルトの名無しさん:05/03/13 05:14:47
>>981
ルータがUPNPに対応してるならこんな感じで
http://www.aa.alpha-net.ne.jp/bosuke/trash/upnp.htm

外部サーバに接続して……なら
http://www.ugtop.com/spill.shtml
みたいなものを設置して取得
983981:05/03/13 06:29:25
>>982
なるほど。ありがとうございます。
984デフォルトの名無しさん:05/03/13 11:46:37
>>980
GetSystemDefaultLCID
985デフォルトの名無しさん:05/03/13 13:12:56
自身を再起動したいと思うのですがどうすれば良いでしょうか。
やはりバッチファイル等を使わないと無理ですよね?
986デフォルトの名無しさん:05/03/13 13:22:13
ヤバい、>>985 が人生の再起動について聞いてるのかと思っちゃった。
987デフォルトの名無しさん:05/03/13 13:24:12
>>986
ワロスw
988980:05/03/13 13:34:18
>>984
ありがとう助かりますた。
989デフォルトの名無しさん
>>985
CreateProcess なり、WinExec なり、ShellExecute なり、なんなりと