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

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

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

<過去スレ>
DelWiki避難所(Delphi 関連の過去スレッド)
http://delwiki.info/?Delphi%20%B4%D8%CF%A2%A4%CE%B2%E1%B5%EE%A5%B9%A5%EC%A5%C3%A5%C9
2デフォルトの名無しさん:2007/12/28(金) 09:48:52
<関連スレ>
【Delphi】 Indyコンポーネント 【C++Builder】
http://pc11.2ch.net/test/read.cgi/tech/1093654251/
Delphi初心者のための寺子屋
http://pc11.2ch.net/test/read.cgi/tech/1132756268/
delphiで作った有名ソフトって何があるの?
http://pc11.2ch.net/test/read.cgi/tech/1135654787/
Delphi持ってるならGLSceneを使え
http://pc11.2ch.net/test/read.cgi/tech/1163269079/
【Delphi互換!?】FreePascal【GPL】
http://pc11.2ch.net/test/read.cgi/tech/1137051510/

【Delphi】 ゲームつくるぞ(゚Д゚)ゴルァ 2【Delphi】
http://pc11.2ch.net/test/read.cgi/gamedev/1097836469/
Delphiでアクションゲームが作りたい!! Part2
http://pc11.2ch.net/test/read.cgi/gamedev/1027482533/
ネットワークゲーム作成のお勉強(Delphi専用スレ)
http://pc11.2ch.net/test/read.cgi/gamedev/1028278884/
delphiでMMO
http://pc11.2ch.net/test/read.cgi/gamedev/1072515100/
3デフォルトの名無しさん:2007/12/28(金) 16:28:46
テンプレ
Q.turbo delphiとturbo c++は今でも共存できますか?
A.↓
4デフォルトの名無しさん:2007/12/28(金) 20:04:11

└―┐        ┌─―┐
┌─┼┐  ┌┐│┌─┼┐
└─┘└─┼┘│└─┘│
        ┌┼─┘      │ >>1さん乙ですぅ
        └┘          │
┌──────────┘

5デフォルトの名無しさん:2007/12/29(土) 09:38:30


乙です
6デフォルトの名無しさん:2007/12/29(土) 22:58:45
>>3
使いたくなったら消して
別の入れなおせばいいじゃん
7デフォルトの名無しさん:2007/12/29(土) 23:16:40
すいません、どこで聞けばいいかわからないのでここで質問させてください。
できれば適切なスレに誘導して頂ければ幸いです。

Delphiのドキュメントを作ろうとしてDoxygen + GraphViz + pas2doxを使用しているのですが
最新のVerにしたらうまく動かなくなりました。
Doxygen 1.5.4
GraphViz 2.16.1

ドキュメント自体はできるのですが、GraphVizで生成する図ができません。
Doxyfileの設定は
DOXYFILE_ENCODING = SHIFT_JIS
OUTPUT_LANGUAGE = Japanese
INPUT_ENCODING = SHIFT_JIS
で設定してあり、DOTファイルはUTF-8で出力されています。
具体的には
Problems running dot: exit code = -1 command='dot' arguments='"aaa.dot" -Tpng -o "aaa.png"'
とエラーが出ています。
ただし、手でdotファイルを作成するとうまくいきます。
dot "aaa.dot" -Tpng -o "aaa.png"
(dot.exe:456): Pango-WARNING **: couldn't load font "Freesans.ttf Not-Rotated 10", falling back to "Sans Not-Rotated 10", except ugly output
Warningは出るけどファイルはできている。

どなたか生成できてるよという方教えてください。
8デフォルトの名無しさん:2007/12/29(土) 23:18:57
9デフォルトの名無しさん:2007/12/29(土) 23:31:43
mousedownイベント用メソッドのButtonパラメータとShiftパラメータは
どっちでも右マウスボタン押下か左マウスボタン押下かを判別できるけど
どっち使っても同じこと?
10デフォルトの名無しさん:2007/12/30(日) 00:54:13
>>8
え、codegearオッチャでいいのですか!?
11デフォルトの名無しさん:2007/12/30(日) 14:12:01
>>10
うん。こっちは初心者向けなんで、あっちの自称含めた長老組のお仕事として投げた方がいいよ。
12デフォルトの名無しさん:2007/12/30(日) 16:18:33
>>9
直感的な使用方法が望ましい
13デフォルトの名無しさん:2007/12/31(月) 19:13:12
右押しながら左とかだとShiftじゃ判別できない。
14デフォルトの名無しさん:2008/01/02(水) 00:49:39
だれかVirtualExplorerEasyListviewっていうコンポ使ってませんか?
リポート表示にして例えば「更新日時」コラムクリックしてソートしても
フォルダを移動したら元に戻ってしまうんです
ソース見てもよくわからない……
15デフォルトの名無しさん:2008/01/02(水) 02:37:52
たぶん何回も質問されたであろうが聞く。
TControlのRefreshはRepaintを呼び出してるらしいが、Refreshの存在意義は何?
16デフォルトの名無しさん:2008/01/02(水) 08:00:43
実装的にも仕様的にも同じなんだから好きな方使っとけ。
よくは知らないが分裂したのには何か歴史的経緯でもあったのかもしれないな。
VCLではRefreshの方が多く使われてるな。
Repaintも中途半端に使われてるが。
17デフォルトの名無しさん:2008/01/02(水) 09:53:09
派生クラスだとコントロールが持ってるデータ更新したりしてるかもしれん
18デフォルトの名無しさん:2008/01/02(水) 16:24:40
>>17
Repaintは仮想だがRefreshは静的なんだよなこれが
19デフォルトの名無しさん:2008/01/02(水) 16:39:27
全俺が泣いた
20デフォルトの名無しさん:2008/01/02(水) 19:49:57
Q:TStringListでReadOnly:=trueみたいにするか、セルを選択できないようにする方法はありませんか?
A:↓
21デフォルトの名無しさん:2008/01/02(水) 19:56:10
TStringListをReadOnly? TListBox か何かの間違い? Enabled:=false では気にいらないんだよね
22デフォルトの名無しさん:2008/01/02(水) 20:11:37
はい。
枠を選択できないようにしたいんです。

なぜかって言うと、選択した枠の中の字が反転して背景と同じ色になって見えなくなるんです。
見るだけだし、選択枠無くそうかな、と。
23デフォルトの名無しさん:2008/01/02(水) 20:20:40
セルとか言ってるから TStringGrid じゃないかな。
ここはいつからエスパー養成所になった?
24デフォルトの名無しさん:2008/01/02(水) 20:22:45
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
TGridRect rect;
rect.Left = 0;
rect.Top = 0;
rect.Right = 0;
rect.Bottom = 0;
StringGrid1->Selection = rect;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::StringGrid1SelectCell(TObject *Sender, int ACol, int ARow, bool &CanSelect)
{
CanSelect = false;
}
//---------------------------------------------------------------------------
25デフォルトの名無しさん:2008/01/02(水) 21:55:42
ごめんなさい、TStringListじゃなくてTStringGridでした…

>>24
ごめんなさい、C++読めないです。
26デフォルトの名無しさん:2008/01/02(水) 22:02:23
代入しかしてないやんけ!
27デフォルトの名無しさん:2008/01/02(水) 22:07:34
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);
begin
CanSelect := false;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
rect: TGridRect;
begin
rect.Left := StringGrid1.ColCount + 1;
rect.Top := 0;
rect.Right := StringGrid1.ColCount + 1;
rect.Bottom := 0;
StringGrid1.Selection := rect;
end;

こうやらないと左上が波線でっぱなしだったお/ ,' 3  `ヽーっ
28デフォルトの名無しさん:2008/01/03(木) 10:57:13
>>27
ありがとうございます。

試してみたのですが、確かにセルが消えて質問どおりの答えが得られたんですが、
ちょっと質問のしかたが悪かったようです。

StringGrid1、StringGrid2、StringGrid3の三つのStringGridを一つのフォームに貼ってるんですが、
この場合に例えばStringGrid2を選択すると、StringGrid1、StringGrid3の選択セルの中の字が反転してしまい、(背景色と字の色が同じになり)字が見えなくなってしまうのです。
(セルの背景色・白、選択してないセルの文字色・黒、フォーカスを離れたStringGridの選択されていたセルの文字色・白)

だから選択セルを無くせば反転もしないか?とおもって選択セルを無くすよう試みたんですが、ただ破線が表示されないだけでやっぱり文字色が反転してしまいます。
ですから、問題を解決するには「フォーカスを離れたグリッドの選択されていたセルの文字色」を黒に指定できれば解決できると思うんですが、わかる方、いらっしゃいませんか?
29デフォルトの名無しさん:2008/01/03(木) 11:05:33
>>28
TStringGrid.OptionsのgoRangeSelectはfalseになってるかい?
30デフォルトの名無しさん:2008/01/03(木) 16:34:06
>>29
今falseにしてみたんですが、同じ症状が出ます。
StringGridがフォーカスを失うと字が反転してしまいます。
31デフォルトの名無しさん:2008/01/03(木) 22:40:17
>>28
新規作成で、StringGridを3つ貼り付けて試してみたが、
(propはgoRangeSelect := Falseのみ、あとはデフォルト)
文字色は反転されないね。
StringGridのイベントにコードがあるなら、それが原因じゃない?
32デフォルトの名無しさん:2008/01/03(木) 23:19:42
Delphi7、WindowsXPHomeでやっています。
一度XPManifestoをはっつけたことがあるので、これが干渉してるのかな?とか思ったりしてます。

全部はがして貼り直したんですが、やっぱ反転してしまう。困った。
もう少し試行錯誤してみます・・・
33デフォルトの名無しさん:2008/01/04(金) 00:58:02
新しいプロジェクト、新しいフォーム上でやってみたら?
34デフォルトの名無しさん:2008/01/04(金) 12:17:20
>>33
やってみます
35デフォルトの名無しさん:2008/01/04(金) 14:35:17
TBitmapをpf8bitで256色モードにした場合、
パレット番号を指定して描画する方法ってないでしょうか?

TColorのヘルプを読んでも24bitで指定してパレットに近い色を
自動的に選択するという方法しかないようい見えるのですが。
3635:2008/01/04(金) 14:37:27
LineToやPolyLineで描画したいです。
37デフォルトの名無しさん:2008/01/04(金) 14:45:27
DelphiのVCLは windowsAPIの程度の良いラッパーだから
windowsがソレを提供してない以上、自分でやらないといけません。
256色モードという事はバイト単位にピクセルと見なして
自作のLineToを作ればいけます。

Bresenhamの線分描画アルゴリズム やDDA で検索して頑張って下さい
38デフォルトの名無しさん:2008/01/04(金) 14:53:13
>>36
素直にscanlineつかえ
3935:2008/01/04(金) 16:44:05
>>37-38
やはり自力ですか。
Bitmap全体のピクセルを塗り分けるときはScanLine+SSEで書いたのですが、
描画部分が少ない直線は面倒だなと思ってました。
Bresenhamでやってみます。ありがとうございました。
40デフォルトの名無しさん:2008/01/04(金) 18:16:45
たんにパレット番号と色の対応がつけばいいんじゃないの? 簡単だよ。
41デフォルトの名無しさん:2008/01/04(金) 20:17:06
ここでいいのかわかりませんが、
Delphi6に付属のInterbaseについて質問です。
データベースへの接続に要する時間が、30秒くらいかかるのですが
こんなもんでしょうか。
それとも普通はもっと短時間で接続されるのでしょうか。
42デフォルトの名無しさん:2008/01/04(金) 21:17:15
>>41
データベースファイルの拡張子をgdbから他の拡張子に変える。(現行のinterbaseでは.idb推奨らしい。firebirdはfdbを推奨)
43デフォルトの名無しさん:2008/01/04(金) 22:20:27
リモートならIPアドレスではなくホスト名が渡されるようにする、とか。
44デフォルトの名無しさん:2008/01/05(土) 00:08:24
ご意見ありがとうございます。
>>42
やってみましたが、変わりませんでした。
>>43
サーバーの登録でローカルサーバーを選んだので、リモートサーバーでは
ないと思います。

IBConsole上から、ローカルサーバーを登録して、データベースエリアスとして、
サンプルのemployee.gdbを登録しているだけなのですが。
45デフォルトの名無しさん:2008/01/06(日) 12:26:42
Delphi7からDelphi2007に乗り換えたのですが、ライブラリパスの扱いが違うのでちょっと困っています。
設計時には、ライブラリパスが通っているものにはアクセスできるのですが、
実行時は、ライブラリパスに追加しているにも関わらず、「***.dcu」が見つからないと怒られてしまいます。
プロジェクトオプションで「検索パス」に追加するとこの問題を回避できました。
しかし、プロジェクトを作る度に追加するのは面倒で仕方ありません。
Delphi7ではこのような問題は無かったので、なんとか以前のように使えないでしょうか。
何かご存じでしたらアドバイスお願いします。
46デフォルトの名無しさん:2008/01/06(日) 14:22:58
□デフォルトチェックを入れたか、ツールオプションだったか
適当にどっか弄ったように思うけど、結局Delphiのバージョン戻してしまった方がスッキリしたりしたんで
47デフォルトの名無しさん:2008/01/06(日) 14:58:39
無料で使えるDelphiの最新版はdelphi6personalですか?
48デフォルトの名無しさん:2008/01/06(日) 15:14:34
>>47
Delphiで無料でプログラミングしてみるお
http://pc11.2ch.net/test/read.cgi/tech/1198147794/
49デフォルトの名無しさん:2008/01/06(日) 20:02:40
>>45
デフォルトに設定するだけだよ
旧Delphiでも一緒
50ななしへたぐらま ◆XcB18Bks.Y :2008/01/07(月) 21:16:20
Updownコンポで値が2→13→24→32→…という風に値が変わるようにしたいのですがうまくいきません。

Minに2, Incrementに11を指定すると上のようにできるなるかと思ったのですが実際には
2→11→22→33→…と変わってしまいます。

何か簡単に解決する方法はないでしょうか。それとも自前で作った方が早いでしょうか。
51デフォルトの名無しさん:2008/01/08(火) 03:56:48
Turbo には UpDown コンポがないんだよな・・
52デフォルトの名無しさん:2008/01/08(火) 03:58:17
>Turbo には UpDown コンポがないんだよな・・

いや、間違い。SpinEdit がないんだった。
53デフォルトの名無しさん:2008/01/08(火) 04:30:10
>>50
associateしないでOnClickで処理。
54デフォルトの名無しさん:2008/01/08(火) 12:26:59
delphi7でActionListを使ってショートカットキーを割り当てているのですが、
これの重複のチェックをすることってできますか。それとも目視で確認する
しかないのでしょうか。
55デフォルトの名無しさん:2008/01/08(火) 14:39:53
一発では無理じゃね。
ShortCutToStr(TAction.ShortCuto)をTStringListに突っ込んでチェックするのが手っ取り早いと思う。
56デフォルトの名無しさん:2008/01/08(火) 18:19:41
>>55
あーなるほど、そういう手があるか。ちょっと試してみる。ありがとう。
57デフォルトの名無しさん:2008/01/08(火) 22:47:22
うーん、なんとかして Delphi 6 か 7 の製品版を手に入れたいんだが、なんとかならんかのう
58デフォルトの名無しさん:2008/01/08(火) 22:57:02
今更Vistaにろくに対応してないのを入手してどうするんだ
59デフォルトの名無しさん:2008/01/08(火) 23:42:41
60デフォルトの名無しさん:2008/01/09(水) 03:06:45
>>59
アマゾンだと売ってるのか。ありがとう
61デフォルトの名無しさん:2008/01/09(水) 09:41:52
全角の文字列を>>59さんみたいなアマゾン等のアドレスについている
%E3%83%9C%E3%83%BC〜…みたいな文字列に変換したり戻したりしたいのですが
どうしたらできるのでしょうか。

また、この変換は一般的になんと呼ばれているのでしょうか。
呼び名がわからず検索できないでいます。
62デフォルトの名無しさん:2008/01/09(水) 09:48:22
URLエンコード/デコード
TIdURI.PathEncode/Decode
63デフォルトの名無しさん:2008/01/09(水) 10:01:23
>>62
ありがとうございます!助かりました!
6461:2008/01/09(水) 15:33:50
連投失礼します。
usesにIdURIを追加し、TIdURI.PathEncode/Decodeを使って見たのですが

PathEncode あ → %3042
URIdecode  %3042 → 042

となってしまい、エンコードした後、元に戻せなくなります。
また、「%xxxx」の形式でなく、「%xx%xx%xx」という形式にしたいのですが
TidURIのプロパティをいじって見てもできそうにありませんでした。

調べて見たところ、HTTPAppと言うユニットもあるようなのですが
Delphi.NET2005では使えないようでした。
(ヘルプを見る限りWin32だと大丈夫のようです。)

文字列を「%xx%xx%xx」の形に変換し、
かつ元に戻せるようにするにはどうすればいいでしょうか。
65デフォルトの名無しさん:2008/01/09(水) 15:42:47
TIdURI.URIEncode/Decodeだべ
66デフォルトの名無しさん:2008/01/09(水) 15:43:32
おっと、TIdURI.URLEncode/Decode か
6761:2008/01/09(水) 15:46:49
言葉足らずですいません。
URLencodeも使って見たのですが結果は同じでした。

68デフォルトの名無しさん:2008/01/09(水) 15:55:56
んなバカな。俺の環境ではちゃんと出来たぞ。
コード晒してみ
6961:2008/01/09(水) 16:03:28
フォームにテキストボックス3個と
ボタン1個を貼り付けただけですが…。
---
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit2.Text := TIDURI.urlEncode(Edit1.Text);
Edit3.Text := TIDURI.urlDecode(Edit1.Text);
end;
70デフォルトの名無しさん:2008/01/09(水) 16:14:04
Edit1をデコードしてどうする。エンコード済みが入ってるのは2だろ。
7161:2008/01/09(水) 16:30:17
デコードだけのテストもかねていたので
Edit1にエンコードした文字列を入力して変換していたこともあったので…。
混乱を招いて申し訳ないです。

なお、Edit1をEdit2にしても改善はされませんでした。

細かい症状としては、
「〜google.co.jp/search?q=あいう」
をURLEncodeすると
「〜google.co.jp/search?q=%3042%3044%3046」
となり、これをURIDecodeすると
「〜google.co.jp/search?q=042044046」
となってしまいます。

72デフォルトの名無しさん:2008/01/09(水) 22:51:04
$3042って"あ"のUNICODEでは?
$30 が "0" で、 それに42が続くから、 042 に変換されるのだと思う。
73デフォルトの名無しさん:2008/01/09(水) 23:59:07
だれかわかるかた、教えてください。

Turbo DelphiのTTcpClientコンポーネントで、接続して送信まではいけたのですが、
受信の方法がわかりません。
サーバーからはデータが送信されているはずなのに、OnReceiveイベントが発生しないです。
74デフォルトの名無しさん:2008/01/10(木) 00:05:17
>>73
とりあえずEtherealなりで通信がきちんとなされてるかチェックしる
75デフォルトの名無しさん:2008/01/12(土) 17:35:12
くだらない質問で申し訳ないんですが、Cで言うINT_MAXみたいな変数の範囲を知る定数
もしくは関数は無いのでしょうか?
76デフォルトの名無しさん:2008/01/12(土) 18:01:43
high(integer)
77デフォルトの名無しさん:2008/01/12(土) 18:06:19
その他にもMAXINTだったかなんだったか
そういう定数は宣言されてた気がする。
78デフォルトの名無しさん:2008/01/12(土) 18:13:37
>>76-77
high関数は初めて聞きます
定数もMAXINTでビンゴでした
ありがとうございました!
79デフォルトの名無しさん:2008/01/13(日) 03:57:59
Delphi5を使用しています

統合環境下で実行するとまれにフォーム上のコンポーネント(Label,Panel等)のサイズとフォントのサイズが一律に縮小されてしまいます
各コンポーネントのLeft,Topも同様にあわせて縮小された形になります

実行を終了させるとフォームデザイナ上では設計どおり何も変更されていませんが、一旦Delphiを終了させてプロジェクトを再読み込みすると縮小されています

このような状況は初めてなのですが、原因は分かりますか?
80デフォルトの名無しさん:2008/01/13(日) 06:52:41
TForm.AutoSize?
81デフォルトの名無しさん:2008/01/13(日) 12:45:37
AutoSizeとは違うようです

Formのサイズは変わらずに、Form上のPanelやButtonのLeft,Top,Width,Height,Font内のSizeが小さくなっています
さきほどは縮小といいましたが、Leftの値がマイナスになっていることから
”縮小”ではなくて”数値の減少”の方が正しいような気がします
82 ◆XcB18Bks.Y :2008/01/13(日) 16:31:25
>>51-53
レスが遅くなってごめんなさい&ありがとうございます。
UpDownコンポをただのボタンと割り切って使うわけですね。
83デフォルトの名無しさん:2008/01/13(日) 17:36:34
Delphi 2007を使用しています。

Vistaの機能であるタスクバーサムネイルに対応しているという話だったのですが、
作ってみたアプリを最小化してみると、タスクバーのサムネイルはこれまで同様
アイコンのみしか表示されません…なんか設定が必要なんでしょうか??
84デフォルトの名無しさん:2008/01/13(日) 17:38:31
それDelphi製だけの現象?
フォームアプリやダイアログはWindowsのお作法にきっちりのっとってないから
いろいろ挙動が変なんだよな。
85デフォルトの名無しさん:2008/01/13(日) 21:32:48
>>79>>81です
これが原因と特定できた訳ではないのですが
「Form1からThread1を作成,Thread1からForm1をオーナーとしてForm2を作成」
するときにSynchronize内でForm2を作成するようにしたところ不可解な現象が収まりました
86デフォルトの名無しさん:2008/01/13(日) 21:37:53
そりゃVCLまわりは基本的にメインスレッドにやらせないと固まるよ。
87デフォルトの名無しさん:2008/01/13(日) 22:01:26
>>85だけじゃなんとも言えないけど、
Synchronize使うよりも、Thread1からForm1にメッセージを投げて
Form2の操作もしてもらった方がいいんじゃないかなぁ?
って俺がSynchronizeを使ったことがないだけなんだけど。
88デフォルトの名無しさん:2008/01/13(日) 22:09:41
えええ、TThread使っててSynchronize使ったこと無いのか!?
それは極めて少数派で参考にならないような。
89デフォルトの名無しさん:2008/01/13(日) 22:26:18
>Synchronize使うよりも、Thread1からForm1にメッセージを投げて
やってることがまったく同じな件
90デフォルトの名無しさん:2008/01/13(日) 22:41:26
>>89 同じ?
PostMessageならメインスレッドを待たずに済むと思うが。
91デフォルトの名無しさん:2008/01/13(日) 22:43:01
ああ、描画側の処理ね。それは同じだと思う。
92デフォルトの名無しさん:2008/01/13(日) 22:45:12
初心者そっちのけどころか害にしかならない公開オナニーはGCスレでどうぞ
93デフォルトの名無しさん:2008/01/13(日) 23:33:27
ガベコレスレ?
94デフォルトの名無しさん:2008/01/14(月) 00:18:46
GameCube
95デフォルトの名無しさん:2008/01/14(月) 10:30:09
Google Calendar
96デフォルトの名無しさん:2008/01/14(月) 15:08:41
ある文字列がほかの文字列の(大文字と小文字を区別しない)部分文字列かどうかを調べるのに
関数を使用しようかと思ったのですが、何だか沢山あってどれを使っていいのか分かりません。
AnsiContainsText
AnsiMatchText

部分文字列比較でない関数
AnsiSameText
CompareText
WideSameText
頭にAnsiがついてる関数がいまいちよく分かりません。どんな意味があるんですか?

あと2バイト文字が混ざった文字列でMidStrなどを使うと変な文字列が返ってきたりするので
Wideな文字列で扱いたいんですが、MidStrに相当するような関数ってありますか?
97デフォルトの名無しさん:2008/01/14(月) 15:19:15
>>96
全角のアルファベットの取扱いとか
9896:2008/01/14(月) 15:27:45
どうもです。
全角を扱う場合はAnsi〜の関数を使う方が良いってことですか?
調べると「現在のロケールに基づいて〜」とかよく見かけるんですが。
日本ではShiftJISで扱われるんでしょうか・・・
99デフォルトの名無しさん:2008/01/14(月) 16:09:43
Ansi〜はsjisを正しく処理すると考えておけばいい。

文字列関数はAnsi, i, Text/Strで多少類推は出来るが基本丸暗記だな。
文字列周りは混沌としすぎだ。
10096:2008/01/14(月) 16:23:03
分かりました、そうします。
ありがとうございました。
101デフォルトの名無しさん:2008/01/14(月) 20:08:18
>>85
DelphiのライブラリのVCLは、マルチスレッドでの使用を考慮していないので、
Synchronizeメソッドを使うなり、自前でロックするなりしないと挙動不審になる。

後者の自前ロック方式は、前者よりも面倒だが自由度は上がる。
SyncObjs の TCriticalSection などを使う。
ただし、Webで情報を探すなり、使うときはマルチスレッドの本を一度よむなりして、
一度テスト的なアプリケーションで実験しておいた方が無難。
いきなり本番で使うのはさけた方がいい。
Synchronize みたいに馬鹿でも使えるようになってない。
102デフォルトの名無しさん:2008/01/14(月) 20:29:00
まぁsynchronizeは糞だよな
103デフォルトの名無しさん:2008/01/14(月) 20:35:10
>>90
PostMessageだと非同期になるので、スレッド間のデータのやりとりで結局調停だ必要になる
だからPostMessageで渡せるデータだけになる。
ポインタ渡しなんかは注意が必要で、安全に送れるのは整数くらいだな。
104デフォルトの名無しさん:2008/01/14(月) 21:50:46
もしかして古い話題なのかもしれませんが、質問です。
DelWikiを見ていたのですが、

DelWiki - 資料/Assigned
http://delwiki.info/?%BB%F1%CE%C1%2FAssigned

某所 Assigned と ?? nil の違い
http://bousyo.blog45.fc2.com/blog-entry-105.html#more

メソッドポインタの場合は Assigned 使え、ということなのですが、
これの理由が文章をよんでもいまいち理解できていません。
(某所を読んでも?)

・メソッドポインタには、インスタンス、関数ポインタが含まれる
・Assignedは上記の片方しかチェックしない
・if Obj <> nilは上記両方チェックする
・IDE上のデザイン時にメソッドポインタの関数ポインタに、内部的な値を入れることがある
(デザイン時以外は関係ない?)
・なのでとりあえず、メソッドポインタの場合は Assigned を使っておけば安心

という解釈でよいでしょうか?
105デフォルトの名無しさん:2008/01/14(月) 22:15:21
if FOnClick <> nil
だと文法上「変数FOnClickの値がNil」じゃなくて
「メソッド FOnClick() を呼び出した結果がNil」になっちゃうから
Assignedってのが必要になったんだと思ってたけど、そういう話?
106デフォルトの名無しさん:2008/01/14(月) 22:33:06
具体的に誤動作するコードキボンヌ
107デフォルトの名無しさん:2008/01/14(月) 22:41:17
@つけんとあかんなあ
108デフォルトの名無しさん:2008/01/14(月) 22:51:26
素人過ぎる質問ですみません。
TreeViewを左クリックすると自動的に展開されてしまいます。
左クリックで選択、右クリックもしくは+をクリックで展開させるようには簡単には行えませんか?

また、AutoExpandをfalseに設定しているのに兄弟ノードをクリックすると元のノードが閉じてしまいます。
勝手に閉じないようには設定できないのでしょうか?
109デフォルトの名無しさん:2008/01/15(火) 01:48:09
ちゃんとウィンドウズの作法に従えよ
110デフォルトの名無しさん:2008/01/16(水) 09:32:51
>>105
あれ?そうだっけ?
メソッドポインタは、@いらないからね、確かに

>>106
俺もいまいち不明
111デフォルトの名無しさん:2008/01/16(水) 11:45:53
Shift-JISやUTF-16の文字コードを取得したいのですが
そのような関数はありますでしょうか。

関数('あ','Shift-JIS') = 2422
関数('あ','UTF-16') = 3042

になるようなものがあれば嬉しいです。
112デフォルトの名無しさん:2008/01/16(水) 11:59:59
WideCharに入れて、Ord 関数で整数にしてから16進数変換する

AnsiCharの場合も同じだけど LeadBytes ならもう1文字取って 256倍して加算が必要
113デフォルトの名無しさん:2008/01/16(水) 12:04:50
function widechar2int(c: widestring): int64;
begin
 assert(length(c) = 1);
 result := ord(c[1]);
end;

function sjis2int(c: string): int64;
begin
 assert(length(c) = 2);
 result := makeword(ord(c[1]), ord(c[2]));
end;

114デフォルトの名無しさん:2008/01/16(水) 13:24:30
>>112-113
書き忘れたのですが、.NETなので微妙に挙動が違うのか
Shift-jisのコードの前半2桁と後半2桁が入れ替わったので
以下のようにしました。

//UTF-16での文字コードを取得
function utf16code(c: String): String;
begin
assert(length(c) = 1);
result := INTtoHEX(ORD(c[1]),4);
end;

//Shift-JISでの文字コードを取得(cには全角文字を1文字のみ入れる)
function sjiscode(c: Ansistring): String;
var
tmp : String;
begin
assert(length(c) = 2);
tmp := INTtoHEX(makeword(ord(c[1]), ord(c[2])),4);
result := tmp[3]+tmp[4]+tmp[1]+tmp[2]; //なぜか順番が逆転しているので修正
end;


これで望むような動作になりました。
親切に教えてくださってありがとうございました。
115デフォルトの名無しさん:2008/01/16(水) 14:39:41
関数の戻り値の設定方法はCとPascalじゃ大きく異なるよね
どちらも一長一短だと思うんだけどcase分やif分で何度も
begin
Result := true;
Exit;
end;
をやるのは冗長すぎるよね?
Cだと
return true;
で完結に済むのに・・・
ひょっとして、私が知らないだけ?
116デフォルトの名無しさん:2008/01/16(水) 14:47:09
>>74
遅くなりました。

通信はきちんとなされていました。

その後、いろいろ調べたり試したりしたのですが原因不明のまま。

しゃーないので、自前でスレッド書いてそこでReceiveln呼び出して受信するようにしました。
117デフォルトの名無しさん:2008/01/16(水) 15:22:14
>>115 何度もreturn するんなら

 procedure ExtCode(ret:boolean);//関数内関数の定義
  begin
   result:=ret;
   abort;
  end;
begin
 try //例外の受け取り
  case xx of
1: ExitCode(true);
2: ExitCode(false);
....
  end;
 except end;
end;

とかさ


というか、想像だけど途中終了するのは全部エラーで、帰り値でfalse を返したいとかじゃないの?
だったら 先頭で result:=True にして、途中は exit だけでいいと思うんだよ。
118デフォルトの名無しさん:2008/01/16(水) 17:48:01
戻り値の設定と戻る動作を一発でやる方法はない。
実際冗長に感じる場面は何度も出てくるが我慢するしかない。
119デフォルトの名無しさん:2008/01/16(水) 22:15:16
Vista使うと実行時にIDEを最小化・復帰するときのばたばたとしたウィンドウの再描画の処理が高速化される?
120ななしへたぐらま ◆XcB18Bks.Y :2008/01/16(水) 22:56:41
>>117
Resultには何度でも代入できますし読み出すこともできますから
この特長を積極的に使う方が簡潔なコードになりますよね
121デフォルトの名無しさん:2008/01/17(木) 19:21:25
>>115
関数を抜ける前にtrue,falseに合わせて同じ処理をさせたい場合
goto文が役に立ちますよ

初心者がBASICからC,Pascalに移行するにあたって最初にすることはgoto文の封印ですが
goto文を適切に使わずに封印したままってのも初心者が陥りやすい罠です
122デフォルトの名無しさん:2008/01/17(木) 19:29:09
VCL のどこかで goto 文を使ってるところある?
123デフォルトの名無しさん:2008/01/17(木) 19:31:56
>>122
ナッツアンドシェルには、
1箇所だけ使っているところがあるって書いてあった。
昔の話なわけだけど。
その1箇所も多重ループからの脱出なんだとさ。

そういうわけで、むやみやたらに使うなと書いてあった。
124デフォルトの名無しさん:2008/01/17(木) 19:54:38
じゃ、VCL も初心者がつくったのかもねw
125デフォルトの名無しさん:2008/01/17(木) 20:00:17
今検索したけど GetMem.INCの
function SysFreeMem(p: Pointer): Integer;
しか存在を確認出来ず
126デフォルトの名無しさん:2008/01/17(木) 20:02:45
TWebBrowserの、リンク先へ飛んだときの「カシャッ」って音は消せないんでしょうか?
127デフォルトの名無しさん:2008/01/17(木) 20:03:43
コンパネのサウンドの設定
128デフォルトの名無しさん:2008/01/17(木) 20:07:26
構文解析じゃgoto文が有効って話はCマガのプローガも言っていたな。
まぁ、使いもせずに盲目的にgoto文を否定しているヤツはgoto文を使わない方がいい。
そんなヤツのソースは汚いし、goto文の使いどころも分かるわけが無い。
129デフォルトの名無しさん:2008/01/17(木) 20:08:29
ウゼェよ・・・
こんな低レベルなネタのときだけ大挙して沸いてくんな低能ども
130デフォルトの名無しさん:2008/01/17(木) 23:47:14
まったくだ
131デフォルトの名無しさん:2008/01/17(木) 23:47:56
>>123
> そういうわけで、むやみやたらに使うなと書いてあった。
まあ、まともな解説書なら、そう書いてあるだろうね。

>>121
> goto文を適切に使わずに封印したまま
Delphiで、「goto文を適切に使」う例って、何があるの?
132デフォルトの名無しさん:2008/01/17(木) 23:51:25
gotoは隔離スレでやってくだしあ
133デフォルトの名無しさん:2008/01/17(木) 23:51:39
どっかほかでやれ
134デフォルトの名無しさん:2008/01/18(金) 00:30:23
TIdHTTPでSSLを使用したい場合は、どうすればいいのでしょう?
Could Not load SSL Liblaryと表示されてしまいます。
TIdHTTPのIOHandleとTIdSSLIOHandlerは、関連付けしています。
135デフォルトの名無しさん:2008/01/18(金) 00:54:15
>>134
ssleay32.dll、libeay32.dllを用意しないといけなかったような希ガス。
136134:2008/01/18(金) 01:21:12
>>135
ssleay32.dllとlibeay32.dllは、ttp://www.slproweb.com/products/Win32OpenSSL.htmlから、v0.9.8gを入れました。
137デフォルトの名無しさん:2008/01/18(金) 08:26:19
>>127
ありがとう!
138デフォルトの名無しさん:2008/01/18(金) 13:38:18
TQueryで
Query.ParamByName('testColum').AsString := 'testData '
と末尾に空白を入れたいのですが登録されません
ソースを追っていても正しく入力されていますが
SQLモニタで確認したところSQL実行時には削られているようなのです

何か回避手段がありますでしょうか?
ちなみに' testData'の先頭空白はOKでした
139デフォルトの名無しさん:2008/01/18(金) 14:09:33
試してないけど'"testdata "'はダメかな?
140デフォルトの名無しさん:2008/01/18(金) 14:18:46
駄目でした・・・
普通に"testdata "とダブルクォーテション付きで登録されました。
141デフォルトの名無しさん:2008/01/19(土) 00:59:16
DBにもよるけど、VARCHARなやつは普通TrimRightされたような形で取り出される(と思っておいたほうがいい)。
どうしても空白文字を保持しておきたいなら(Ansi)QuotedStrしたものを格納してAnsiExtractQuotedStrで
元に戻すか、BLOBに格納するか、かな。
142デフォルトの名無しさん:2008/01/20(日) 13:31:27
Turbo Delphiでの質問です。
AssignfileとResetで'C:\WINDOWS\pfirewall.log'を読もうとしたのですが出来ませんでした。
仕方がないのでreadfileでreadlnもどきを作ったのですが遅いのです。
なんとか速くする方法はないでしょうか?

function read_ln (fh:Thandle; var buf:String):Boolean;
var cha : Char;
var size : Dword;
var CR : Boolean;
begin
result:=true;
buf:='';
CR:=false;
repeat
readfile(fh,cha,1,size,nil);
if size=0 then break;
if CR and (cha<>#10) then
begin
setfilepointer(fh,-1,nil,FILE_CURRENT);
break;
end;
buf:=buf+cha;
if cha=#13 then CR:=true;
until cha=#10;
if (size=0) and ((buf='') or (buf=#13)) then result:=false;
buf:=trimright(buf);
end;
143デフォルトの名無しさん:2008/01/20(日) 13:47:23
まずはAssignFile版のコードを晒してはどうだろうか
144デフォルトの名無しさん:2008/01/20(日) 14:26:59
TStringList.LoadFromFileじゃ駄目なの?
145デフォルトの名無しさん:2008/01/20(日) 14:34:07
ログが大きくなってくると、
全部読み込んじゃうTStringListは使いづらいということかいな
146デフォルトの名無しさん:2008/01/20(日) 15:13:28
ちなみに>142が遅いのはReadFileが1バイトずつ読んでいるからで、ここをバッファリングするようにすれば
それなりになるような気もする。
147142:2008/01/20(日) 16:13:16
レスありがとうございます。
Assignfileのコードは以下のような感じです。

var f : Textfile;
var tx : String;
begin
Assignfile(f,'C:\WINDOWS\pfirewall.log');
Reset(f);
while not eof(f) do
begin
readln(f,tx);
{txへの処理}
writeln(tx);
end;
end.
これだとEInOutErrorが出るのです。
LoadfromfileでもEFOpenErrorが出てうまくいかないのです。
Assignfile版ですがcopyfileでpfirewall.logをコピーして読むという手で一応対処したのですが
もっといいやり方がないかなと思いましてここで質問しました。

>>146
まとめてlogを読み込んで後で改行コード毎に分割するって感じかな。
自分でファイルポインタを作って管理する形か。
その方法も検討してみます。
148デフォルトの名無しさん:2008/01/20(日) 16:46:47
適切なフラグを指定してCreateFileでオープンしてTHandleStreamに渡して
そこからLoadFromStreamする。
149デフォルトの名無しさん:2008/01/20(日) 17:44:25
>>147
試してみましたが、ファイルの読み込みはできますね。
writelenでI/Oエラー(105)になりますが、この関数ってテキストファイルに書き込む
関数じゃないでしょうか。
f2: TextFileと宣言し、AppendまたはRewrite、writeln(f2, tx)とすれば動きました。

がこういうことではない?
150デフォルトの名無しさん:2008/01/20(日) 18:28:56
今時、Assignfileはありえない
151142:2008/01/20(日) 19:33:55
>>148
ありがとうございます。LoadFromStreamというのを使って出来ました。
var fs : TFileStream;
var loadtxt : TStringList;
fs:=TFileStream.Create('C:\WINDOWS\pfirewall.log',fmOpenRead or fmShareDenyNone);
loadtext.LoadFromStream(fs);

>>149
え?こちらでは読み込もうとするとエラーになるんですが。なんでだろう?
あとwritelnの方ですがRewrite等はいらないです。
要はlogを読み込んで処理をし画面に出力するだけですので。

>>150
勉強不足ですね・・・ゴメンチャイ
152デフォルトの名無しさん:2008/01/20(日) 20:20:18
CloseFile(f);
153デフォルトの名無しさん:2008/01/21(月) 12:36:44
>>141
SQLサーバー相手です。
で、varchar相手だったのですが、Text型に変更し
AsMemoを使用したらなんとかなりました。
有難うございますー。

それにしても邪魔な仕様だなぁ
154デフォルトの名無しさん:2008/01/21(月) 12:58:21
TADOConnectionを使ってmdbに接続してるのですが、実行クエリを呼び出すメソッドはありませんか?
Executeでプロシージャ名を書いてもエラーが出てしまいます。
155デフォルトの名無しさん:2008/01/21(月) 16:50:45
StringGrid1からStringGrid2へドラッグドロップする方法がわかりません。
ググッってみたらすごく長いコードが出てきて解析できませんでした。

例えばグローバル変数String1に値を入れて運ぶ、基本的なものを誰か教えてください!
156デフォルトの名無しさん:2008/01/21(月) 17:20:36
>>155
procedure TForm1.StringGrid1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
C,R:Integer;
begin
StringGrid1.BeginDrag(False,4);
end;

procedure TForm1.StringGrid2DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
begin
Accept:=Source=StringGrid1;
end;

procedure TForm1.StringGrid2DragDrop(Sender, Source: TObject; X, Y: Integer);
var
C,R:Integer;
begin
StringGrid2.MouseToCell(X,Y,C,R);
StringGrid2.Cells[C,R]:=StringGrid1.Cells[StringGrid1.Col,StringGrid1.Row];
end;
157デフォルトの名無しさん:2008/01/21(月) 18:00:43
>>156
ありがとうございます

>procedure TForm1.StringGrid1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
>var
>C,R:Integer;
>begin
>StringGrid1.BeginDrag(False,4);
>end;

これ、内部でC,Rを使っていないのに、どうして宣言するんでしょうか?
158デフォルトの名無しさん:2008/01/21(月) 21:48:02
>>150
Assignfileの代わりにはなにを使うのが今風ですか?

釣りだと思わないで教えてくだされ
159デフォルトの名無しさん:2008/01/21(月) 23:19:58
TStreamと愉快な仲間たち
160デフォルトの名無しさん:2008/01/22(火) 02:54:53
>>157
単なるゴミだろ。
それぐらいは察してやれ。

単に空気読めていないだけかもしれんが、わざわざ重箱の隅を漁るようなことはするもんじゃない。
相手が不愉快になるだけ。
161デフォルトの名無しさん:2008/01/22(火) 06:22:26
>>160
素人にはわからん。俺も意味あるのかと思ってたし。

>Accept:=Source=StringGrid1;

この式もif以外に=が使えるんだ〜って勉強になったさorz
ここに勉強にくる連中ってそういうレベルよ。めんどくさがらず、教えてね♥
162157:2008/01/22(火) 07:59:50
>単に空気読めていないだけかもしれんが、

リアルでわからなかったYO!
163156:2008/01/22(火) 10:42:23
>>157
> これ、内部でC,Rを使っていないのに、どうして宣言するんでしょうか?

すまない、最初はマウスの位置で有効なセルを判定するつもりで
書いてたんだが、そこまで必要ないかと思いやめたんだわ。単にゴミということで!
164157:2008/01/22(火) 13:07:28
>>163
いえいえ、凄い助かりました。
ご好意、ありがとうございます。
165 ◆XcB18Bks.Y :2008/01/22(火) 19:21:44
>>161
定数や変数が値を持つように Source=StringGrid1 みたいな式(条件式)も値を持ちます。
式の値はboolean型(論理型)です(だから論理型変数Acceptにそのまま代入できる)。
式が成立するときはTrue、しないときはFalseです。

今回の例ではSourceとStringGrid1が同じオブジェクトを指しているときにTrue、そうでなければFalseです。
166デフォルトの名無しさん:2008/01/23(水) 00:53:38
IEの進む・戻るボタンにあるような、右のタブをクリックするとメニュー
が表示されるボタンを実装する方法はありますか?
D5を使用しています

ToolBar2000を使用すれば行けそうですが、VisualStyleとの相性も
ありそうですし、当方はVistaの環境が無いため、できるだけシンプル
に実現したいと考えています
167デフォルトの名無しさん:2008/01/23(水) 01:18:36
事故解決しますた!
168デフォルトの名無しさん:2008/01/23(水) 09:53:08
TToolButton.Style := tbsDropDown;
169デフォルトの名無しさん:2008/01/23(水) 12:36:19
仮想デスクトップツールでスクリーンを切り替えると
Delphi製アプリの最小化したウィンドウが左下に残ってしまうんですが、
ソースのないアプリはともかく自前のアプリでそれを防ぐ方法はないですか?
170デフォルトの名無しさん:2008/01/23(水) 13:21:00
Form1に投げられたWM_SYSCOMMANDのSC_CLOSE, SC_RESTORE, SC_MINIMIZE, SC_MAXIMIZEをApplicationにリダイレクトしてみては?
実験してないけど。
171デフォルトの名無しさん:2008/01/23(水) 22:08:54
TLabelにファイルパスを表示したいんだけど、MinimizeNameが使えない
自前で書こうにもTextWidthが拾えないから書けない
どれが一番手っ取り早い?
・TCustomControlでゴリゴリ書く
・TStaticTextでウィンドウハンドルを取得しWindows.GetTextExtentPoint32
でTextWidthを取得。後はゴリゴリ書く
・その他
172デフォルトの名無しさん:2008/01/23(水) 22:41:12
>>171
・TLabelにファイルパスを表示したいんだけど、MinimizeNameが使えない
・自前で書こうにもTextWidthが拾えないから書けない
このふたつの前提が間違ってることを認識する方が手っ取り早い
173ななしへたぐらま ◆XcB18Bks.Y :2008/01/24(木) 00:10:02
>>171
ラベルコンポ(TLabel)はCanvasプロパティが使えますので
MinimizeName関数もキャンバスのTextWidthメソッドも使えます。
174デフォルトの名無しさん:2008/01/24(木) 00:15:55
False を返して欲しいのに Trueが返ってきてしまいます。
文字列の比較でうまく行ってないようなのですが
どう書き換えたらよいでしょうか?
for文周りが問題だとは思いますが何が間違ってるのかわからないんです
procedure TForm1.FormCreate(Sender: TObject);
begin
if (hantei('string')) then
Form1.Caption := 'ok';
end;
function Tform1.hantei(hoge: string) : Boolean;
var
i : Integer;
begin
for i := 0 to 2 do
begin
if (hoge = 'string') then
begin
Result := False;
break;
end
end;
Result := True;
end;
175デフォルトの名無しさん:2008/01/24(木) 00:19:44
breakの挙動をヘルプで調べろ
ついでにexitも調べろ
ついでにブレーク張ってステップ実行することも覚えろ
176デフォルトの名無しさん:2008/01/24(木) 02:54:28
>>173
TLabelはCanvasプロパティを持っていないとばかり思い込んでいました。
サンクス!
177デフォルトの名無しさん:2008/01/24(木) 06:58:27
クライアントのOSがVistaかどうか判別する関数とかありますか?
Vistaかどうかで処理を変えたいのですが・・・
178デフォルトの名無しさん:2008/01/24(木) 09:12:57
179デフォルトの名無しさん:2008/01/24(木) 10:06:23
>>174 breakはfor をbreakするだけだからね 関数の中身は
begin
 for i := 0 to 2 do begin
  Result:= not (hoge = 'string');
  if not Result then exit;
 end;
end;
こう書いたらどう?
180デフォルトの名無しさん:2008/01/24(木) 10:22:00
>>177
GetVersionExがNT6.0返してきたらVista
181デフォルトの名無しさん:2008/01/24(木) 11:00:19
Win32PlatformやらWin32で始まるグローバル変数を見ればよし。
182デフォルトの名無しさん:2008/01/24(木) 16:17:34
>>179
なぜそんな無駄な書き方を?
183デフォルトの名無しさん:2008/01/24(木) 16:56:49
>>179
自分ならこう書く

function Tform1.hantei(hoge: string) : Boolean;
var
i : Integer;
begin
Result := False;
for i := 0 to 2 do
if (hoge = 'string') then Exit;
Result := True;
end;
184デフォルトの名無しさん:2008/01/24(木) 17:13:14
だから、何で3回も比較してるの?
185183:2008/01/24(木) 17:46:50
確かに言われてみればそうだね・・w

function Tform1.hantei(hoge: string) : Boolean;
var
i : Integer;
begin
Result := hoge = 'string';
if Result = False then Exit;
for i := 0 to 2 do
begin
(何かしらの処理)
end;
end;
186デフォルトの名無しさん:2008/01/24(木) 17:47:48
↑ミス
Result := hoge <> 'string';
187デフォルトの名無しさん:2008/01/24(木) 17:58:13
ただのサンプルを必死にチューニングとか・・・
188デフォルトの名無しさん:2008/01/24(木) 18:18:09
宿題スレ池
189デフォルトの名無しさん:2008/01/24(木) 18:57:17
>>187
スレタイを読め
190188:2008/01/24(木) 19:41:50
ごめん、Rubyスレと間違えた orz
191デフォルトの名無しさん:2008/01/24(木) 19:48:52
結局174が一番素直なコードだったという
192デフォルトの名無しさん:2008/01/24(木) 19:55:20

意味もなく3回も内部で繰り返して、
意味もなくresultにfalseを入れているのに?
193デフォルトの名無しさん:2008/01/24(木) 23:27:50
プロジェクトソース(*.dpr)に、Form1などで使うグローバル変数を含めることはできますか?
できる場合、プロジェクトソースにどのように変数宣言したらよいのでしょうか?
194デフォルトの名無しさん:2008/01/24(木) 23:34:51
できません
195デフォルトの名無しさん:2008/01/25(金) 05:29:28
例え一文でも理由がなければbegin...endは省略しないでください。
判定はTrueの式で行ってください。
196デフォルトの名無しさん:2008/01/25(金) 09:06:38
>>193
 ようするにdprなローカル変数は定義出来るけど
 他のユニットはdprをuses出来ないからどうしようもない。
 もちろん、Form1のメンバーにポインタを入れて、参照させるとかなら出来るけどね
 だから、.PASだけのユニットを作って、それを皆が参照すればいいんじゃないの?

>>195を補足すると
ようするに >>174の問題は、
1、全くムダに3回ループしてる (たぶん比較したいのが3つあったのだろ)
2、一致してる時にfalseを返そうとしている
3、にもかかわらず、常にtrueを返すように後で行っている

論理の一貫性が無いと、 >>185 のように論理を読み間違われ易い

3つの文字列のドレかと一致するかという判定なら
for i := 0 to High(master) do begin
 Result:= master[i] = hoge;
 if Result then break;
end;

3つの文字列のドレでもないという判定なら
for i := 0 to High(master) do begin
 Result:= master[i] <> hoge;
 if not Result then break;
end;
こうなるけど、判り難くなるでしょ?
197デフォルトの名無しさん:2008/01/25(金) 10:23:04
breakの挙動を調べる為だけのゴミコードをネチネチ添削するスレはこちらでございますか?
198デフォルトの名無しさん:2008/01/25(金) 10:27:59
神経質だな
199デフォルトの名無しさん:2008/01/25(金) 11:22:49
Abortってあまり多用されないものですか?
200デフォルトの名無しさん:2008/01/25(金) 12:00:58
コンソールアプリ作る時は、処理途中で、コレハダメだという状況なら使ってるけどな。

GUIアプリだと、そういうわけにはいかないけど
201デフォルトの名無しさん:2008/01/25(金) 12:19:52
多用はしないが処理のキャンセル時に多重ループ、多重呼び出しを一気に抜けられるから普通に使うよ。
フォームアプリの場合とりあえずAbort投げとけば
エラーダイアログ等を出さずに通常の状態に制御が戻るようになってるし。
202デフォルトの名無しさん:2008/01/25(金) 12:37:23
>>200
別のものと勘違いしてそう。
Abortって、EAbort例外を出す手続きでしたっけ?
強制終了は、Halt。
203ななしへたぐらま ◆XcB18Bks.Y :2008/01/25(金) 13:16:21
>>193
私も>>195と同意見で別にユニットを用意してそこに集約させる感じですね.

ちなみに私の場合、アプリ全体に関する情報はグローバル変数の代わりにデータモジュールを使っています。
諸々の情報はデータモジュールのプロパティとして持たせています。
204デフォルトの名無しさん:2008/01/25(金) 16:21:54
Abortしらんかったw
205デフォルトの名無しさん:2008/01/25(金) 16:38:30
みなさんBDEで使うsqlora8.dllはどのバージョンを使ってるんでしょうか?
206デフォルトの名無しさん:2008/01/25(金) 17:12:49
失礼、忘れてください。
しかもバージョンも書いてなかた。
207デフォルトの名無しさん:2008/01/25(金) 18:41:37
Abortはこんな時によく使うんだが変だと言われた。

SL := TStringList.Create;
try
if testbool then abort;

{何かいろいろな処理}

finally
SL.Free;
end;

AbortのところでExitしたいが開放しないとあかんな〜ってな時
208デフォルトの名無しさん:2008/01/25(金) 18:49:44
>>207
try〜finallyの間ならexitしても必ずfinally〜endは実行されるのでその配慮は無意味
209デフォルトの名無しさん:2008/01/25(金) 18:56:55
( ゚д゚ )

変てそういう意味かw
ありがとん
210デフォルトの名無しさん:2008/01/25(金) 19:12:47
>>208
mjsk!
初めて知った

ちなみに俺も>>207みたいにしてたorz
211デフォルトの名無しさん:2008/01/25(金) 22:05:41
try-finally節でのExitは専用の例外を発生させる処理に変換される
212174:2008/01/25(金) 22:07:36
みなさんレスありがとうございます。
breakで抜ける範囲を間違えてしまっていたのが問題だったんですね。
>3回ループ
既に書かれてる方がいますが、
書きたい処理では3回(というかStringの配列全部)判定する必要がありました
問題の切り分けのために数字のみに置き換えたのですが、
そのことを書いておくべきでした。すいません…。
213デフォルトの名無しさん:2008/01/25(金) 23:15:17
下のコードを実行するとエラーが発生してしまいます
strl に Items を参照渡しして
それを Free しちゃってるからだからだと理由はわかったのですが
どの解決方法を取るかで悩んでいます

strl.Free をここで呼び出さずに終了時のDestroyで呼ぶのと
配列の個々の値をforループで渡すのとどちらがDelphiの流儀に沿っているでしょうか?
もしくはもっと良い解決方法がありましたら教えてください

procedure TForm1.AddTest(str: string);
var
strl : TStringList;
begin
strl := TStringList.Create;
try
ComboBox1.Items.Add(str);
strl := TStringList(ComboBox1.Items);
strl.SaveToFile('test.txt');
finally
strl.Free;
end;
end;
214デフォルトの名無しさん:2008/01/25(金) 23:25:15
言ってることが違う違う。
コード自体がめちゃくちゃ。

strl := TStreingList.Create;
で確保したインスタンス(すなわちオブジェクト)のアドレスが、
strl := TStringList(ComboBox1.Items);
で、他のインスタンスのアドレスに代入され直されて、どこからもアクセスできない位置に消えちゃってる。
しかも、このキャストはおかしい。

Delphiにおいて、クラス変数は参照渡しなのでな。
ここらへんを理解できると中級者以上なので、ここらへんの詳しい説明はこのスレでは難しすぎるので書かない。
そのかわり、以下に正しいサンプルを書いておく。
215デフォルトの名無しさん:2008/01/25(金) 23:27:26
>>213
× strl := TStringList(ComboBox1.Items);
○ strl.Assign(ComboBox1.Items);

とか。
216デフォルトの名無しさん:2008/01/25(金) 23:27:31
根本的に何か間違ってる。

begin
 ComboBox1.Items.Add(str);
 ComboBox1.Items.SaveToFile('test.txt');
end;

でいいんじゃね?
217デフォルトの名無しさん:2008/01/25(金) 23:32:56
procedure TForm1.AddTest(const str: string); //その1
var
strl : TStringList;
begin
strl := TStringList.Create;
try
ComboBox1.Items.Add(str);
strl.assign( ComboBox1.Items );//その2
strl.SaveToFile('test.txt');
finally
strl.Free;
end;
end;
218214=217:2008/01/25(金) 23:37:18
こんな感じ。
もっと簡単に書くと、>>216の人が書いているのでおk。

クラス変数においては、代入は、アドレスの代入なんよ。
すなわち、
strl := TStringList(ComboBox1.Items);
というのは、ComboBox1.Itemsのアドレスを代入することになってしまう。

で、中身をコピーしたいときはどうするかというと、
たいていのクラスでは、assignメソッドが用意されているので、これを使うと大抵うまくいく。
219214=217:2008/01/25(金) 23:38:49
あと、文字列を渡すメソッドを作るときは、その文字列を変更する必要が無い場合は、

procedure TForm1.AddTest(const str: string);

ってなconstを付けた書き方をしてやると、わずかに動作が速くなるので、Delphiのマニュアルでも推奨しているはず。
220デフォルトの名無しさん:2008/01/25(金) 23:44:18
>>214-218
ありがとうございます
Assignなんて便利なメソッドがあったのですね

一番楽かつ意味もわかりやすい
>>216を使わせていただくことにします
221デフォルトの名無しさん:2008/01/25(金) 23:45:36
>>219
なるほど、そんな小技があるのですね
早速使えるところに使ってみることにします
222デフォルトの名無しさん:2008/01/26(土) 00:17:20
>>211
しらなかった。
内部実装はそうなってるのか・・・
223デフォルトの名無しさん:2008/01/26(土) 00:18:59
俺は構造体以外には、const 引数は速度目的では、あんまりつかわんなあ
と思いつつ、ソース見たら、弄るな危険の保険の意味で値型にはconstつけまくってた
224デフォルトの名無しさん:2008/01/26(土) 00:22:26
まあ、Delphiの文字列は参照カウント付きだからな
constつけて参照カウント気にしなくていいよと明示してやるのは、
コンパイラにも開発者にもわかりやすくてよいな
225デフォルトの名無しさん:2008/01/26(土) 00:33:58
何言ってんだ?constつけても参照カウントは増えるぞ
渡す際に参照カウントを増やさないのはout
226デフォルトの名無しさん:2008/01/26(土) 00:41:47
>>225
ヘルプ嫁
227デフォルトの名無しさん:2008/01/26(土) 01:46:25
sizeofってCと違って関数っぽいから、実行時に毎回関数呼ぶの?
228デフォルトの名無しさん:2008/01/26(土) 02:01:44
んにゃ、実際の関数じゃないはず。
コンパイルしたら定数に置き換わるような。
229デフォルトの名無しさん:2008/01/26(土) 02:07:06
速度気にするならCPU窓でチェックしろと
230デフォルトの名無しさん:2008/01/26(土) 02:39:34
>>226
ごめんvarと勘違いしてた
231デフォルトの名無しさん:2008/01/26(土) 03:15:10
>>211
目から鱗が落ちた

じゃ、例えばスレッド作成してTerminatedプロパティをポーリングしている場合
finnaly節にメモリの開放とか書いちゃってExitで抜けるのは使い方?
try節の中で例外とかスローしていないんだけど。
232デフォルトの名無しさん:2008/01/26(土) 03:20:30
nihongode ok
233デフォルトの名無しさん:2008/01/26(土) 05:50:37
>>231
むしろ普通
234デフォルトの名無しさん:2008/01/26(土) 14:56:39
>>211
よく使っているので、まさかそんな実装のはずはないと思って確かめた。
Delphi2007で内部処理を確認したけど、決して例外を生成しているわけではなく、
まずsystemのtryfinallyexitという関数を呼び出し、そこからfinally〜endの部分を呼び出している。

もし例外を生成するような実装だったら、繰り返し処理だと遅くて使い物にならないよ。
例外処理はものすごくコストが高いから。
235デフォルトの名無しさん:2008/01/26(土) 15:00:21
いくらなんでも例外は生成せんだろ。
except節は実行しないし。
236デフォルトの名無しさん:2008/01/26(土) 17:29:16
>>234
ヒント:構造化例外処理
237デフォルトの名無しさん:2008/01/26(土) 17:49:07
tryfinallyexitはインストールされた例外フレームを呼び出す処理だけど?
コードも読めないのによくでたらめ言えるね。
238デフォルトの名無しさん:2008/01/26(土) 19:20:13
スレが荒れる話題となったgoto文の処理があるんだけど
関数を抜ける場合にtrue,false,errに合わせて処理を行ってから抜けさせたい
場合は、goto文の代わりに例外処理が使えるの?

現状だとgoto文を使わない為冗長になりがち(同じ処理が何度も出てくる)
なんで、コストが問題なければ例外処理でやっちゃったほうがコードが
すっきりすると思うんだが・・・
239デフォルトの名無しさん:2008/01/26(土) 19:23:04
例外使うならerrだけにして、true/falseは関数内関数にして、その関数でtrue/falseを返すのも
方法かもね
240デフォルトの名無しさん:2008/01/26(土) 19:31:03
OSの例外処理と、言語組み込みの例外処理をごっちゃにしているなこのスレ。

とにかく、このスレの話題ではない。
241デフォルトの名無しさん:2008/01/26(土) 19:36:19
>>240
Delphiで用意されている例外処理はどっちなんだ?
242デフォルトの名無しさん:2008/01/26(土) 20:56:36
両方
243デフォルトの名無しさん:2008/01/26(土) 20:59:37
>>238
構文でしかないから、使いやすければ使えばいい
例外という名前のために誤解されやすいけど、エラーのために存在してるものではないし
244デフォルトの名無しさん:2008/01/26(土) 21:02:55
例外にコストがかかるとか言う馬鹿に限って仮想メソッドはなんの躊躇いもなく使う
不思議なものだ
245デフォルトの名無しさん:2008/01/26(土) 22:17:34
>>237

http://d.hatena.ne.jp/ytqwerty/20061202

おまえと同じ事を書いてから訂正した奴がいるぞw
246デフォルトの名無しさん:2008/01/26(土) 22:23:38
なぜこいつらは初心者スレを荒らし続けないと気が済まないんだろう。
専用スレ立てなよ。
247デフォルトの名無しさん:2008/01/26(土) 23:25:33
自前で作った関数を複数のユニットで共有するにはどうすればいいのでしょう?

VB.NETのモジュールみたく、ぶっこんどきゃクラス間で共有できるようなことがやりたいのですが。
248デフォルトの名無しさん:2008/01/26(土) 23:29:10
その関数の書かれたpasファイルをusesに追加する。
249デフォルトの名無しさん:2008/01/26(土) 23:42:55
自前の関数のforward宣言をinterface部に書いておいて、別のユニットのuses節にそのユニット名を書けばいい。
250デフォルトの名無しさん:2008/01/27(日) 01:48:37
>>244
いや、例外にコストがかかるのは常識らしいよ
Delphi6なんたらバイブルっつー分厚い本にもそんなこと書いてあったような
251デフォルトの名無しさん:2008/01/27(日) 01:54:51
>>245
結局、try節のexitからは、例外処理は呼び出されていないでFAだな。
そもそもこのスレ向きの話題じゃないんだかれ、もうこの話題は避けてくれよ皆の衆。
252デフォルトの名無しさん:2008/01/27(日) 02:35:35
>>250
きっと自分で実験したことがないんだよ。
例外処理と仮想メソッドの負荷には同等に並べらないほどの歴然とした差があるんだから。
253デフォルトの名無しさん:2008/01/27(日) 02:55:46
>>248
>>249
いけました。
ども、ありがとうございます。
254デフォルトの名無しさん:2008/01/27(日) 04:21:23
>>251
正解はOSの例外処理が呼び出されている
255デフォルトの名無しさん:2008/01/27(日) 04:39:37
不正解。荒らすな。
256デフォルトの名無しさん:2008/01/27(日) 04:48:27
例外処理が遅いだって?
お前らの書く糞みたいなコードよりよっぽど速いから安心しろw
257デフォルトの名無しさん:2008/01/27(日) 04:51:58
258デフォルトの名無しさん:2008/01/27(日) 04:56:32
不正解。荒らすな。


不正解。荒らすな。



不正解。荒らすな。




不正解。荒らすな。





不正解。荒らすな。
259デフォルトの名無しさん:2008/01/27(日) 09:00:17
メンヘラーズ大活躍
260デフォルトの名無しさん:2008/01/27(日) 09:55:42
>>245
>そもそもこのスレ向きの話題じゃないんだから、もうこの話題は避けてくれよ皆の衆。

確かにそうだけど、初心者ほど気になる人は気になる話題だったかと。
261デフォルトの名無しさん:2008/01/27(日) 09:57:24
失礼 >>251 宛てで
262デフォルトの名無しさん:2008/01/27(日) 11:09:11
>>290
じゃあ、説明すると
try
  // 直近の例外の位置が fs:[0] に対して更新される(リンクリスト方式)
  // そこにfinally位置のアドレスが登録される
if ? then
exit; //ここで call @TryFinallyExit 7行の命令
     //TryFinallyExitで 呼ばれた関数内で fs[0]に登録された 例外位置のサブルーチンコールがされる

 //eixtで抜けない場合は、例外を元に戻して、finally部のret命令で
 //finally 〜 end の次部分を通るようにスタックを準備
finally
 ここが実際はサブルーチンになる。
end;

だから、自前でfinallyの部分のサブルーチンを呼び出すのと同じ程度+αだけ負荷が増ええてる。
263デフォルトの名無しさん:2008/01/27(日) 11:10:19
内容が一番新しいできれば日本語のWin32APIの.hlp形式のヘルプが欲しいんですが
入手できる場所があったら教えてください。
264デフォルトの名無しさん:2008/01/27(日) 11:15:58
失礼 >>260

だから、フラグを見るだけとか立てるだけのように、
極端に処理の中身が短いなら、確かに多少コストアップになるけど
それなら、わざわざtry finally を使う程もないわけで

>>207のように、
メモリの確保、開放のように、ソコソコの負荷をどっちかでかけてるなら、
これくらいの負荷は屁でもない。


あるいはセマファーの開放のように、必ず消したいならフラグ1つの為に
であってもfinally を使うのは利益になる。
265デフォルトの名無しさん:2008/01/27(日) 11:28:48
なんかまた初心者を混乱させるようなことを言っている奴がいるな。

まとめ。
・try finally節のexitは、例外を生成していない。
・繰り返しの中で、if節で分岐させる代わりに例外投げるようなのは馬鹿。
 例外投げるってのはたくさんの処理をする重い処理だから。
 仮装関数の比ではない。
・try finally自体はどんどん使ってOK。
・このスレで、try finallyのなかにexitを書いて重くなるとか問題視している奴はいない。
266デフォルトの名無しさん:2008/01/27(日) 11:35:57
>>264
セマファーってセマフォのことかいな。
267デフォルトの名無しさん:2008/01/27(日) 11:42:56
質問者不在のアスペルガー健忘症ループはまだまだ続きます。
268デフォルトの名無しさん:2008/01/27(日) 11:55:39
例外を投げると重いというのは、ようするにインスタンス作成が重いって事。
例外の機構そのものは、仮想メソッドより少し重いが動的メソッドより軽い。
269デフォルトの名無しさん:2008/01/27(日) 13:33:49
>>268
> 例外を投げると重いというのは、ようするにインスタンス作成が重いって事。
違う。
270デフォルトの名無しさん:2008/01/27(日) 14:35:12
だから、違うとだけ書くから、またレスが続く事になる。
しっかり説明して、問題を終わりにしろよ。

>>265の言ってる
>・try finally節のexitは、例外を生成していない。

という文脈での例外は、 Exception.Create のようなインスタンス作成と
RaiseException というWindowsAPIの呼び出しが行われる例外。

RaiseExceptionそのものは、それほど重い処理ではない。
C言語でいうSETJMP/LONGJMPと同じ類の処理だ。
メモリを確保する処理の方がどちらかというと重い。
だから>>268 はそう表現したのだろう。
271デフォルトの名無しさん:2008/01/27(日) 19:46:52
高度な話題から低級な話題に戻して悪いんですが
const MASK $CC;
var
b: BYTE;
と宣言した状態で
b := not MASK;
もしくは
b := not BYTE(MASK);
だと”範囲外の定数式です”と叱られ
b := BYTE(not MASK);
もしくは一旦代入する
b := MASK; b := not b;
だとOKなんですが
b := not BYTE(MASK);
がダメな理由が理解できません
272デフォルトの名無しさん:2008/01/27(日) 20:09:20
MASKが型なし定数(真の定数)なのでnot BYTE(MASK)はIntegerで計算されるから。
273デフォルトの名無しさん:2008/01/27(日) 20:51:48
ありがとうございます。
この場合、真の定数はBYTEへのキャストが行われないと考えていいのでしょうか?
またnot MASKがBYTEにキャストできるのはnot演算子によってInteger型になったため真の定数では無く
キャストが行われたと考えればいいのでしょうか
274デフォルトの名無しさん:2008/01/27(日) 20:59:00
もう一つ質問です
先のパターンでは
const MASK: BYTE = $CC
と型付で指定すれば事が足りますが
case b of
MASK:
とは使用できなくなります
この場合は真の定数として宣言しておいて、代入するときには毎回
キャストを行うのが一番スマートなのでしょうか?
275デフォルトの名無しさん:2008/01/27(日) 21:03:16
-Byte(1) も同じだね。
単なるコンパイラのバグというか、そこまで考えてなかったよって事だろ。
276デフォルトの名無しさん:2008/01/27(日) 21:11:03
>275
深いルールがあった訳じゃないんですね。
分かりやすい説明ありがとうございました!
277デフォルトの名無しさん:2008/01/27(日) 21:33:11
型の格上げルールに従ってるだけ。-も演算子だからね。
>274
caseで使うためにはconst MASK = $CC;と定義しておいてb := BYTE(not MASK);とするのがいいと思われ。
278デフォルトの名無しさん:2008/01/27(日) 22:08:19
279デフォルトの名無しさん:2008/01/27(日) 22:08:20
>>275
それは範囲が0..255のbyte型に-1を代入しようとしているのでエラーが正しい。
280デフォルトの名無しさん:2008/01/27(日) 22:10:47
つーか宣言時にconst MASK = Byte($CC);とすれば良い
281デフォルトの名無しさん:2008/01/27(日) 22:13:14
蹴散らされてよっぽど悔しかったんだなあ
282デフォルトの名無しさん:2008/01/27(日) 22:16:14
子供には、「走っちゃダメ」というより、「歩こうね」と言わないと
283デフォルトの名無しさん:2008/01/27(日) 23:57:06
今更蒸し返すなバカ
284デフォルトの名無しさん:2008/01/28(月) 12:22:19
Delphi言語は優秀だけどDelphiユーザーは無能ばっかだな
285デフォルトの名無しさん:2008/01/28(月) 14:06:39
Delphiの将来性に不安を感じたら何に乗り換えたらいい?
当然Delphi並みに生産性の高いもので。
286デフォルトの名無しさん:2008/01/28(月) 15:08:00
Windows環境なら現時点でDelphiが最高だね。
これから先、どうなるかは未来が判らない以上判らない。
どうしても駄目だと思うような状態になってからあがけばいいんじゃないの?
その時は質問しなくても答えが出てるだろうからね。
287デフォルトの名無しさん:2008/01/28(月) 15:09:13
>>285
C++ Builder
288デフォルトの名無しさん:2008/01/28(月) 15:15:31
VBのDictionary オブジェクト
JavaのHashMap
に当るものってDelphiにありますか?
ちなみに7です
289デフォルトの名無しさん:2008/01/28(月) 15:23:32
基本的にDelphiには連想配列は無い。
自作してたりする人はいるけど。
290デフォルトの名無しさん:2008/01/28(月) 15:39:44
わかりました
Tstringlistを並べて代用してみます
有難うございました
291デフォルトの名無しさん:2008/01/28(月) 15:53:55
7のパーソナル版ってもうダウンロード出来ないんですよね?
292デフォルトの名無しさん:2008/01/28(月) 16:09:25
そもそも配布してない確か。
293デフォルトの名無しさん:2008/01/28(月) 16:41:37
>>263
MSDNじゃダメなんか?
294デフォルトの名無しさん:2008/01/28(月) 18:25:07
Contnrsユニットの
TBucketList, TObjectBucketListで使えないなら作るかパクル。


295デフォルトの名無しさん:2008/01/28(月) 20:06:41
ToolButtonをEnabled=false;にしたときに自動生成されるグラフィックが
微妙なんで差し替えてます
Enabledに代入とImageIndexに代入を同時にやろうとするとチラ付くので
BeginUpdate等を利用したいのですが、残念ながらprotectedで隠蔽されています

この場合、クラスを継承してpublicで公開してツールパレットに登録
しなおすのが一番簡単な手段になるのでしょうか?
たったコレだけのことでコンポーネントの作成、登録、フォーム上に配置
されたToolButtonの作り直しってのは手間だと思うのですが・・・
296デフォルトの名無しさん:2008/01/28(月) 20:11:15
ポトペタしたToolButtonと 自作のを
http://delwiki.info/?%A5%B3%A1%BC%A5%C9%C1%D2%B8%CB%2F%A5%B3%A5%F3%A5%DD%A4%CE%C9%D5%A4%B1%C2%D8%A4%A8
で置き換えたら?
297デフォルトの名無しさん:2008/01/28(月) 20:48:19
>>296
こりゃまた面白い方法ですね
他人にソースを配布するときに使えそうです

ところでポトペタって何の略ですか?
ぐぐっても出てこなくって・・・
298デフォルトの名無しさん:2008/01/28(月) 21:00:47
>>297
ポトっとドラッグ
ペタっとドロップ

略じゃないな。
パワーポイントみたいにGUIを作る仕組みのこと
299デフォルトの名無しさん:2008/01/28(月) 21:22:21
>>296
ポトがドラックってのが理解不能なんですが・・・了解しました
300デフォルトの名無しさん:2008/01/28(月) 21:40:01
ポトっと落とすとペタっとくっつく、かと思ってた
301デフォルトの名無しさん:2008/01/28(月) 22:03:48
ポトリペタリ
302デフォルトの名無しさん:2008/01/28(月) 22:14:06
>>263
英語版だったら3種類知ってる
1.
英語版Delphi 2.0用のオンラインヘルプの修正ファイル(Win32 API)
ftp://bekins.borland.com/groups/jp/delphi/win32.zip
via ttp://homepage1.nifty.com/ht_deko/tech008.html
2.
MinGW - Documentation
ttp://www.mingw.org/docs.shtml#win32api
3.
Windows-API SDK: Win32.hlp (Win32 Programmer's Reference) Download
ttp://www.codingcrew.de/programmierung/win32hlp.php
の Download des Win32-API SDK:
Win32 Programmer's Reference Teil 1 (8,58 MB)
Win32 Programmer's Reference Teil 2 (3,13 MB)
の二つをDLするらしい。(未確認)
紹介記事は…たしか2005年だった。

たしか新しい関数が載ってなかったり、今とは一部仕様が違ったりする(筈

日本語版は知らない。

関連:
WindowAPIの日本語ヘルプってありますか?
ttp://hpcgi1.nifty.com/MADIA/DelphiBBS/wwwlng.cgi?print+200210/02100017.txt
Delphi FAQ: Win32 APIの日本語ヘルプが欲しい
ttp://delfusa.main.jp/delfusafloor/archive/www.nifty.ne.jp_forum_fdelphi/faq/00290.htm
303デフォルトの名無しさん:2008/01/28(月) 22:32:13
WindowsSDKの英文くらいは読めるようになろうぜ‥‥
304295:2008/01/29(火) 08:57:02
TToolButtonのイメージ差し替えですが、Enabled連動なら単純に
TToolBar.DisabledImageってのがありました
305デフォルトの名無しさん:2008/01/29(火) 09:39:28
Delphi で出来て C++Builder で出来ない代表的なことって何?
306デフォルトの名無しさん:2008/01/29(火) 09:39:45
PopupMenuが呼び出されてキャンセルされた場合にイベントを拾う方法ってある?
307デフォルトの名無しさん:2008/01/29(火) 09:52:35
>>305
集合型の取り扱いが簡単
308デフォルトの名無しさん:2008/01/29(火) 09:54:49
>>305
Delphiのコンポーネントが使えない。
309デフォルトの名無しさん:2008/01/29(火) 09:56:40
>>305
Object Pascalで書けない。
310デフォルトの名無しさん:2008/01/29(火) 09:57:47
ソース配布のコンポは使えるぞ。
311デフォルトの名無しさん:2008/01/29(火) 10:00:15
Pascal Unitもプロジェクトに放り込んでおけばコンパイル/リンクされる。
チュートリアルのエディタ程度ならBCBで新規作成 > Form1.cpp/h削除 > Delphiで作ったフォームを追加 > ビルドで普通に通る。
312デフォルトの名無しさん:2008/01/29(火) 12:24:39
>>308>>309
VCLのソースはDelphiのモノだったよ

今は知らないが、そもそもBCBのCは一旦パスカルにコンパイルしていたハズ
313デフォルトの名無しさん:2008/01/29(火) 12:46:24
>>305
高速コンパイル。
ファイルの数を少なくすること。
ここでの質問。
314305:2008/01/29(火) 12:54:30
あまり重要なことって無いのね。
集合型も使用頻度多くないしなぁ。
結局言語の違いだけでDelphiで出来ることはBCBでも出来るってことかな。
315デフォルトの名無しさん:2008/01/29(火) 13:07:45
>>313
ファイルの数を少なくすることってなんだ
316デフォルトの名無しさん:2008/01/29(火) 15:29:44
>>312
C++のままコンパイルのはず。Pascal型クラスとして宣言されてるインスタンスはPascal型のモデルでコンパイルされてるだけ。
317デフォルトの名無しさん:2008/01/29(火) 17:16:19
>>306
EXITなんとかってメッセージが飛んできた気がする
318デフォルトの名無しさん:2008/01/29(火) 17:31:05
>>314
コンパイル速度は結構重要じゃないか?
小物ばかり作ってたらあまり恩恵はないかもしれないが
319デフォルトの名無しさん:2008/01/29(火) 17:34:46
>>306
WM_EXITMENULOOPだった
320デフォルトの名無しさん:2008/01/29(火) 19:10:30
>>314
C/C++とDelphiはどちらも同じ祖先を持つ、かなり近い言語ですよ。
あと、DelphiはBuilderのobjファイルをリンクできるから。

>>315
Cはヘッダファイルとわかれるし、プリコンパイルドヘッダとか増える。

>>319
それは項目が選択されたときも発生していませんか?
321319:2008/01/29(火) 20:02:20
>>320
発生してますね
322デフォルトの名無しさん:2008/01/29(火) 22:35:28
コンボボックスにあらかじめ80個近くのItemを追加しておく時に便利なやり方はないでしょうか?
combobox1.additem('りんご')
combobox1.additem('バナナ')
のように1個ずつ記述していくしかないですか?
323デフォルトの名無しさん:2008/01/29(火) 22:48:33
プロパティエディタから設定できんか?
324デフォルトの名無しさん:2008/01/29(火) 23:21:53
const
 TableData: array [0..79] of String = ('りんご', 'みかん', ...);

procedure TForm1.FormCreate(Sender: TObject);
var
 I: Integer;
begin
 ComboBox1.Items.BeginUpdate;
 try
  ComboBox1.Items.Clear;
  for I := Low(TableData) to High(TableData) do
  begin
   ComboBox1.Items.Add(TableData[I]);
  end;
 finally
  ComboBox1.Items.EndUpdate;
 end;
end;
325デフォルトの名無しさん:2008/01/29(火) 23:39:54
>>323
プロパティーのItemsから出来ました

>>324
配列?を使えばいいのですね

お二方どうもありがとうございます.参考にさせていただきます
326デフォルトの名無しさん:2008/01/30(水) 02:02:18
ComboBox1.Items.CommaText := 'りんご,みかん,・・・'; 
が出来るかも。
327デフォルトの名無しさん:2008/01/30(水) 09:05:26
テキストファイルで持つだろう
328デフォルトの名無しさん:2008/01/30(水) 09:41:30
delphiはアドインをパッケージという形で提供できるけど
BCBはDLLしか無いのですか。
329デフォルトの名無しさん:2008/01/30(水) 15:10:38
>>328
今時パッケージを別に配付するメリットってある?
330デフォルトの名無しさん:2008/01/30(水) 16:33:42
>>329
昔はメリットだったけど今はメリットじゃないことって何がある?
331デフォルトの名無しさん:2008/01/30(水) 16:39:54
>>330
ナローバンドの時代はファイルサイズが重要でした。
332デフォルトの名無しさん:2008/01/30(水) 16:50:09
買収?かなんかされる前に登録したユーザーの情報変更はどうなってるんでしょうか
サポートは英語になってるし、とりあえずメールマガジンだけでも停止するかと思ったら、
会社名などの記入を要求してくるではありませんか
333デフォルトの名無しさん:2008/01/30(水) 17:24:05
Shift+Alt+矢印で列選択モードになるんですが、どうやって解除すれば
いいんでしょうか?

Delphi5 DOS_IDEです
334デフォルトの名無しさん:2008/01/30(水) 19:05:15
>>333
Ctrl+Lで一行選択にする。
335デフォルトの名無しさん:2008/01/30(水) 19:27:31
>>331
サイズの問題はメリットじゃなくなったとは言えないと思う
未だにファイルサイズは小さい方がいいとか思い込んでる奴は少なくないし
336デフォルトの名無しさん:2008/01/30(水) 20:35:41
DelphiのIDEって微妙に奥が深いな F2キーとF11キーとCtrl+Shift+I(U)を
知っただけで生産性倍になったと思う
337デフォルトの名無しさん:2008/01/30(水) 20:44:19
Ctrl+K L だったかもしれん。 忘れた。
338デフォルトの名無しさん:2008/01/30(水) 21:38:06
フリーカーソル殺しコンポにTabブロックインデント機能があるおかげでブロックインデントは範囲選択>Tab/Shift+Tabでやってるなぁ
339デフォルトの名無しさん:2008/01/30(水) 21:40:30
TurboDelphiを使ってて質問なのだが、TTcpClientで指定するRemortHostはプライベートIPか?
340デフォルトの名無しさん:2008/01/30(水) 21:46:47
別にプライベートIPでも
341デフォルトの名無しさん:2008/01/30(水) 21:48:48
>知っただけで生産性倍になったと思う

本来は、ちゃんとドキュメントで知らせるべきものなんだ
だから

知らせないので生産性が半分になってる

のが正解
342デフォルトの名無しさん:2008/01/30(水) 23:24:23
>>336
複(単)数行が選択された状態でCtrl+Shift+I(U)で合ってる。
IndentとUnindentだね。
343デフォルトの名無しさん:2008/01/31(木) 04:52:22
>>336
F2とF11ってなんだkっけ

Ctrl+Shift+I(U)は、範囲内のインデント(アンインデント)だよな
344デフォルトの名無しさん:2008/01/31(木) 08:15:57
俺は
CTRL+KI
CTRL+KU
345デフォルトの名無しさん:2008/01/31(木) 10:33:08
Cみたく「{」と「}」のカーソル移動が
Delphiの「begin」と「End」には無いんでしょうか?
346デフォルトの名無しさん:2008/01/31(木) 11:01:03
Alt+[]でできない?
347デフォルトの名無しさん:2008/01/31(木) 12:18:49
出来ませんでしたが<Delphi7
配備されてるんですか?
348デフォルトの名無しさん:2008/01/31(木) 12:28:50
BCBのIDEは{...}も(...)もカーソル移動できるけどDelは(...)しかできないみたいね
349デフォルトの名無しさん:2008/01/31(木) 12:35:11
「(」「)」間は出来ました
「begin」と「End」はできなさそうですね
ありがとうございました
350デフォルトの名無しさん:2008/01/31(木) 17:10:12
Delphiでコンソールアプリを作っているんですが,
プログラム(自分自身)のパスはどうやったら知ることができますか?

環境は,Delphi 6 Personal, Windows XP HE SP2 です.
351デフォルトの名無しさん:2008/01/31(木) 17:20:24
352デフォルトの名無しさん:2008/01/31(木) 17:20:43
ParamStr(0)
353350:2008/01/31(木) 17:28:28
>>351,352
ありがとうございます!無事できました!
コマンドライン引数を使うんですね。
354デフォルトの名無しさん:2008/01/31(木) 19:09:14
ここでParamStr派とApplication.ExeName派の争いが!
355デフォルトの名無しさん:2008/01/31(木) 19:34:54
コンソールアプリに Application オブジェクトはないわな・・・
356デフォルトの名無しさん:2008/01/31(木) 19:37:17
>>355
使えますよ。
357デフォルトの名無しさん:2008/01/31(木) 19:45:45
はいはい
358デフォルトの名無しさん:2008/01/31(木) 19:59:36
つーかコンソールでForms使う意味って何?
サイズがでかくなるだけでメリットなくね?
359デフォルトの名無しさん:2008/01/31(木) 20:16:41
うん。
Application.Exenameを使いたいだけのためにFormsユニットをusesする必要は無い。
360デフォルトの名無しさん:2008/01/31(木) 20:28:15
↓スタート!
361デフォルトの名無しさん:2008/01/31(木) 20:45:09
コンソールアプリと行っても、通常のウィンドウアプリなんだからねっ!
362デフォルトの名無しさん:2008/02/01(金) 00:48:01
と行っても
363デフォルトの名無しさん:2008/02/01(金) 08:26:26
MoneyLook
364デフォルトの名無しさん:2008/02/01(金) 08:26:47
もDelphiせいだお
365デフォルトの名無しさん:2008/02/01(金) 11:55:47
バックアップツールを作っております。
更新日時でファイルの更新を確認しておりますが、sambaにコピーした
ファイルと元のファイルの日付が一致しません。
どうしたらいいですか?
366デフォルトの名無しさん:2008/02/01(金) 12:14:00
SetFileTime では駄目なの?
367デフォルトの名無しさん:2008/02/01(金) 13:12:34
Delphiの問題でなく、sambaの問題では?
368デフォルトの名無しさん:2008/02/01(金) 13:16:52
smbd走らせてる方のPCの時刻、TZは正確に設定されてるん?
369365:2008/02/01(金) 16:39:54
ずれと言っても1秒以下なんです。
370デフォルトの名無しさん:2008/02/01(金) 16:46:27
1秒の誤差はNTFSの仕様がどうのって話じゃなかったっけ
371デフォルトの名無しさん:2008/02/01(金) 16:54:12
「samba タイムスタンプ 秒」辺りでぐぐれば?
372デフォルトの名無しさん:2008/02/01(金) 17:07:14
>>371
ありがとう。2秒の誤差を許容することにします。
373デフォルトの名無しさん:2008/02/01(金) 21:03:07
秒単位で精査しないといけないバックアップデータってどんな仕様だよ
374デフォルトの名無しさん:2008/02/02(土) 12:18:09
DSpackを使っていらっしゃる方はいらっしゃいませんでしょうか?
前回、ここでお尋ねした未定義文字エラーはとれたのですが、
今度はpackageをinstallすると、Filtergraphが未定義とでます。
このせいではないかというのはないでしょうか?
375デフォルトの名無しさん:2008/02/03(日) 01:24:44
ツリービューに、

 type
  TTestNodes = Class(TTreeNode)
    ・
    ・
    ・
 end;

で独自のプロパティを持った継承ノードを追加したいのですが、どうすれば良いのでしょうか?



AddNode(独自のノード,親ノード,User.nick,nil,ComCtrls.naAddChild);

かなと思っていろいろやってるんですけど、どうもうまくいかない、、、

どうか、よろしくお願いします。
376デフォルトの名無しさん:2008/02/03(日) 01:37:31
>>374
DSpack は知りませんが、パッケージをインストールするとき、
ソースをコンパイルするから、単に変数Filtergraphの宣言が見つからないのでは?
あるいは、FFiltergraphにするとうまくいったり。
377デフォルトの名無しさん:2008/02/03(日) 01:54:28
>>375
OnCreateNodeClass
378デフォルトの名無しさん:2008/02/03(日) 12:38:13
delphiでプログラムを作りたいだけなんです。
本体をDLしたは良いんですけど、シリアルを求められて起動できないんです。

趣味レベルなので無料版を使いたいです。
ボーランド製品登録ウィザードというダイアログで入力を何度も求められます。
メールでコードギアから送られてきたものを入力し、txtファイルをアップしたところ、認証できませんとなりました。

どうすればいいでしょうか?
簡単なテキストエディタが作れればそれで良いので
デルファイのバージョンとかも古くてもいいです

どなたかおしえてください
379デフォルトの名無しさん:2008/02/03(日) 12:51:55
Turbo Delphi (Delphi10)のライセンスでDelphi6 Personalインスコして認証しようとしてないか?
380デフォルトの名無しさん:2008/02/03(日) 13:09:12
>>377
すいません、
いまいちちょっと使い方がわかんないです。

var NodeClass: TTreeNodeClass


とあるので、NodeClassをなんかしてやればいいのかな?とは思うんですがさっぱり。
すいません、もうちょいおねがいします。
381デフォルトの名無しさん:2008/02/03(日) 13:36:37
>>379
あ。
バージョン確認してアンインスコ考えて見ます
382デフォルトの名無しさん:2008/02/03(日) 13:43:39
Turboは登録完了メールに添付されてるreg???.txtを環境変数USERPROFILEのディレクトリ(通常はC:\Documents and Settings\ユーザ名\)に置けばキーの入力とか求められなかったはず。
383デフォルトの名無しさん:2008/02/03(日) 14:05:46
384デフォルトの名無しさん:2008/02/03(日) 14:15:02
NodeClass := TMyTreeNode;
385デフォルトの名無しさん:2008/02/03(日) 15:15:34
>>384
どもです。そこまではエラーなくいけました。

ただ、継承して突っ込んだnodeの独自プロパティへの値の参照、代入が出来ないorz



.netの派生クラスみたにいかねー(涙)
386デフォルトの名無しさん:2008/02/03(日) 15:58:47
(node as TTestNodes).FooBarでどうよ。
387デフォルトの名無しさん:2008/02/03(日) 16:44:31
>>386
いけました。

格納後のプロパティの値の呼び出しも問題ありません。

ありがとうございやす!!
388デフォルトの名無しさん:2008/02/03(日) 17:38:36
キャストも分からないのに継承とかすごいな
ものすごいバグ含んでそう
389デフォルトの名無しさん:2008/02/03(日) 21:29:34
378です。30日版の最新Verでインストールできました。

最後に2つ。
メモ帳を完成させたはいいんですけど、デフォルトでこんな文字がでています
どこからデフォルト表示文字を操作するのでしょうか?
http://www.vipper.net/vip448365.jpg

このメモ帳をタブ化させて、何個ものタブに色んなことをコピペしておきたいのですが
以下のサイトを参考にすればなんとかいけそうでしょうか?
http://delphi.sakura.vg/lesson24.html
http://delphi.sakura.vg/lesson24.html
390デフォルトの名無しさん:2008/02/03(日) 21:46:21
ヘルプも読めないのか最近のゆとりは
391デフォルトの名無しさん:2008/02/03(日) 21:47:47
>>389
オブジェクトインスペクタを眺める作業に戻るんだ
392デフォルトの名無しさん:2008/02/03(日) 22:53:02
Lines
393デフォルトの名無しさん:2008/02/03(日) 23:35:33
また明日からオブジェクトインスペクタをひとつづつ眺める作業が始まるお
394デフォルトの名無しさん:2008/02/04(月) 16:22:25
ITProEXPO行ってきたけど、CodeGearブースがビックリするほど小さくて悲しかった・・・。
VBからDelphiにシェアが移ればいいのに・・・と、VB6から移行した俺は思う。
395デフォルトの名無しさん:2008/02/04(月) 16:35:09
Delphi1本で年商3200万の俺は結構頑張ってると思う。
396デフォルトの名無しさん:2008/02/04(月) 18:09:22
俺の場合はVSと併用で5000万弱だな
Delphiでオッケーっていう案件あんまりないから併用というかほぼメインだけど…
397デフォルトの名無しさん:2008/02/04(月) 19:54:46
ちなみにオレは年50万くらいのシェア作者… 企業相手にしてえけど信用が…
398デフォルトの名無しさん:2008/02/04(月) 19:56:17
せめてスレタイを読む国語力は欲しいところ
399デフォルトの名無しさん:2008/02/04(月) 21:00:08
dUnit(9.3.0) をビルドしようとしたのですが、makeでこけてしまいます。

> make --win32
Makefile:20: Rules.mak: No such file or directory
make: *** make: --win32 is no longer supported. Stop.

Makefileを見ると、確かに、
20行目に include Rules.mak という記述があるのですが、
この Rules.mak というファイルは、どこで生成されるものなのでしょうか?
400デフォルトの名無しさん:2008/02/04(月) 21:05:56
あなたのパソコンです
401399:2008/02/04(月) 21:24:09
自己解決しました。

Makefile は古いバージョンで使われていたようです(Makefile内のバージョン番号に書いてありました)
現在は、want.xml というファイルがあり、それ用に want というビルドツールを 使っているようです。
http://www.suigeneris.org/kb/display/WANT/Home

お騒がせしました。
402デフォルトの名無しさん:2008/02/04(月) 23:59:17
こんな感じでListViewのグループ表示を行いたいんですが
対応しているリストビューコンポーネントがあったら教えてください
http://dekiru.impress.co.jp/mailmag/daijiten/2003/07/25/image/icon2_02.gif
403デフォルトの名無しさん:2008/02/05(火) 00:11:07
他人の作ったアプリのソース盗用に続き
今度は名前の盗用w

悪質サイト
http://janestyle.s11.xrea.com/
404デフォルトの名無しさん:2008/02/05(火) 08:05:46
Delphiの案件しか受けないから年収1200万しかないけど
気が楽だから俺はそれで十分。
405デフォルトの名無しさん:2008/02/05(火) 09:04:45
アピりたいお年頃か
406デフォルトの名無しさん:2008/02/05(火) 16:49:44
検索条件の指定にComboboxを使用していて、
何も選択されていないとき(ItemIndexが-1)は全て表示、
条件を選択したときは指定した検索条件で表示させたい。
ComboboxでStyleプロパティがcsDropDownListのとき、
一度どれか選択すると、ItemIndex=-1を選択できなく
なってしまうのですが、どうすればよいでしょうか。
例えばItemIndex=0に'全て'とか入れておくしかないでしょうか?
407デフォルトの名無しさん:2008/02/05(火) 16:53:31
>>406
OnKeyDownとかでItemIndexを-1に設定すればいいのでは。

つかItems[0]を'全て'がオーソドックスかな。
408デフォルトの名無しさん:2008/02/05(火) 21:30:38
>>402
EasyListview
409デフォルトの名無しさん:2008/02/05(火) 22:41:28
>402
ttp://www.delphi-gems.com/index.php?option=com_content&task=view&id=12&Itemid=38
このへんかなぁ。でも機能が多すぎて使いこなすの大変だけど。
410デフォルトの名無しさん:2008/02/06(水) 03:53:26
>Delphi1本で年商3200万の俺は結構頑張ってると思う。

Delphi2007の売り上げより多いんじゃないか?
411デフォルトの名無しさん:2008/02/06(水) 07:03:38
> 376
変数Filtergraphの宣言が見つからないのでは?
あるいは、FFiltergraphにするとうまくいったり。

お返事ありがとうございました。Tfiltergraphが定義されていないからですが、
パッケージのinstall方法が間違っていました。
パッケージをinstallする時に、全て閉じてからしたら大丈夫でした。
ありがとうございました。..す、すみませんでした。
412デフォルトの名無しさん:2008/02/06(水) 17:56:06
マウスクリックした場所にキャレットくる設定って消せないんでしょうか。
413デフォルトの名無しさん:2008/02/06(水) 18:01:19
WM_LBUTTONDOWNでinheritedしないとか。
414デフォルトの名無しさん:2008/02/06(水) 20:48:30
すいません・・・・
Delphiのエディタの事です。
415デフォルトの名無しさん:2008/02/06(水) 20:55:29
>>414
たぶんだけど フリーカーソル無効化 したいのでは? このキーワードで検索してみて
416デフォルトの名無しさん:2008/02/07(木) 01:01:52
Rect型について質問です。

代入する時に、
 rect := Rect(1, 2, 3, 4);

などと4つ一度に代入しているものをよく見かけるのですが、
自分でやると、エラーになってしまいます。
(エラーのメッセージは、「演算子またはセミコロンが必要です」というものです)

ちなみに、個々に
 rect.left := 1;
 rect.right := 2;
 ……
と代入することはできています。

Rect()で一括で代入するにはどうすればいいでしょうか?
417デフォルトの名無しさん:2008/02/07(木) 01:06:07
rectとRectで識別子がぶつかってるからエラーになる。

r := Rect(1,2,3,4);
にするか
rect := Types.Rect(1,2,3,4);
でいけるはず。
418デフォルトの名無しさん:2008/02/07(木) 01:27:07
Pascal系のDelphiは大文字小文字を区別しない。
よって、var rect: TRect; とやれば、Rectは変数として扱われる。
Rectの後に、; がくるはずなのに〜ってエラー。

rect := Bounds(1, 2, 2, 2);
でもいいね。
419デフォルトの名無しさん:2008/02/07(木) 01:32:23
質問させてください。
PageControlのあるTabSheetだけを開けないようにするにはどうすればいいでしょうか?

TabSheet.Enabled:=falseとしただけでは編集できないようになるだけで開けて中が見えてしまうし、
Visible:=falseとしても一度閉じてまたそのSheetを開けると出てきてしまいます。
420416:2008/02/07(木) 01:36:38
>>417さん、>>418さん
なるほど〜〜。大変納得がいきました。
どうもありがとうございます。m(__)m
421デフォルトの名無しさん:2008/02/07(木) 02:33:20
VSに入っているVS2008ImageLibrary.zipのビットマップアイコンが神過ぎる件
422デフォルトの名無しさん:2008/02/07(木) 02:57:51
>>419
OnChangingでAllow := False
423デフォルトの名無しさん:2008/02/07(木) 08:42:28
>>419
TabVisibleというプロパティがあってだなぁ・・・
424デフォルトの名無しさん:2008/02/07(木) 08:50:44
BDEに代わるTDbfというフリーのコンポーネントを
発見したのですが日本語の説明ってないのでしょうか?
425デフォルトの名無しさん:2008/02/07(木) 10:39:18
>>424
発見したのはこれ?
Lazarus Database Tutorial/ja - Free Pascal wiki
http://wiki.freepascal.org/Lazarus_Database_Tutorial/ja
426デフォルトの名無しさん:2008/02/07(木) 13:44:31
Delphi6 EnterPriseを使用しています。
IBServerPropertiesのFetchConfigParamsの
サンプルプログラムを走らせてみたのですが、
ISCCFG_IPCMAP_KEYが未定義の識別子で、コンパイルが通りません。
何かユニットが不足しているのでしょうか。
ちなみにUsesは下記のとおりです。
よろしくお願いします。

Uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IBDatabaseInfo, DB, IBDatabase, IBServices, IBExtract,
ComCtrls;

427デフォルトの名無しさん:2008/02/07(木) 14:46:34
ISCCFG_IPCMAP_KEY
をフォルダ内で検索しる。
428デフォルトの名無しさん:2008/02/07(木) 15:37:27
>>422->>423

ありがとうございます!
429デフォルトの名無しさん:2008/02/07(木) 16:27:19
>>426
IBHeader
430デフォルトの名無しさん:2008/02/07(木) 17:19:44
>>429
ありがとうございました。
431デフォルトの名無しさん:2008/02/07(木) 21:05:52
>>425
おお、Lazarusの方にはあったのですね。
おそらく Delphi でも似たような感じでしょうから参考にして見ます。
432デフォルトの名無しさん:2008/02/08(金) 11:31:28
GKAVIってコンポ使ってるひといない?
動作がよく分からん・・・
433デフォルトの名無しさん:2008/02/09(土) 02:30:50
よろしくお願いします。

TBitmapの画像をgifimage.pasで保存すると、
256色で保存されてしまいます。

グラデーションなど、微妙な色合いをGIFで保存するには
どうすればいいでしょうか?
434デフォルトの名無しさん:2008/02/09(土) 02:33:19
256色という制限はGIF使う限りどうにもならない。
おとなしくPNG使っとけ。
435433:2008/02/09(土) 02:41:27
>>434さん
なるほど、ありがとうございます。
436デフォルトの名無しさん:2008/02/09(土) 03:42:29
Readlnで入力待ちをしつつ、裏でスレッドを立てて処理をするというような
コンソールアプリケーションを考えているのですが、
スレッドの処理が終了したら入力待ちを解除して終了するにはどうすればいいでしょうか?
437433:2008/02/09(土) 05:09:44
すみません、続きです。

TBitmapの画像をPNG(TPngObject)で読み込んでも、
同じく256色に減色されてしまいます。

どうすればよいでしょうか?


(以下ソース)

// pngにロード
pngImg.assign(form1.image1.picture.bitmap);// グラデーションの画像を読み込む
// そのまま出力
form1.image1.picture.bitmap.Assign(pngImg);// ←256色(?)に減色されてしまう
438433:2008/02/09(土) 05:14:12
すみません、即効で自己解決しました。
(GIFのチェックをしていた時にpixelFormatを8ビットに変更したのを直し忘れてました…)

失礼しました。
439デフォルトの名無しさん:2008/02/09(土) 06:33:24
>>436
スレッド同士がコンソール入力で通信したいの?
そうじゃなくてキーボード入力をReadlnで待つのなら難しいんじゃないかな
こんな関数でキーボードが押されたかどうか判定してから読むようにしたら?
function KbHit: boolean;
var
 pirBuffer: array[0..9] of INPUT_RECORD;
 hdl: THandle;
 lpcRead: DWORD;
 i: Integer;
begin
 Result := false;
 hdl := GetStdHandle(STD_INPUT_HANDLE);
 if integer(hdl) < 0 then exit;
 Result := PeekConsoleInput(hdl, pirBuffer[0], length(pirBuffer), lpcRead);
 if Result then
  for i := 0 to lpcRead - 1 do
   with pirBuffer[i] do
    case EventType of
     KEY_EVENT: //Event.KeyEvent
      if Event.KeyEvent.bKeyDown then exit;
    end;
 Result := false;
end;
440デフォルトの名無しさん:2008/02/09(土) 08:16:19
自身にEnter送ってみるとか
441デフォルトの名無しさん:2008/02/09(土) 08:57:29
なるほど。
function PostConsoleInput(s: string): boolean;
var
 pirBuffer: array of INPUT_RECORD;
 hdl: THandle;
 lpcWritte: DWORD;
 i: Integer;
begin
 Result := false;
 hdl := GetStdHandle(STD_INPUT_HANDLE);
 if integer(hdl) < 0 then exit;
 setlength(pirBuffer, length(s) * 2);
 for i := 0 to High(pirBuffer) do with pirBuffer[i] do begin
   EventType := KEY_EVENT;
   Reserved := 0;
   with Event.KeyEvent do begin
    bKeyDown := (i and 1) = 0; //偶数の時true
    wRepeatCount := 0;

    wVirtualScanCode := 0;
    AsciiChar := s[1 + (i div 2)];
    wVirtualKeyCode := ord(AsciiChar);
    dwControlKeyState :=0;
   end;
  end;
 Result := WriteConsoleInput(hdl, pirBuffer[0], length(pirBuffer), lpcWritte);
end;

として PostConsoleInput( #13 ); で改行が送れるな
442デフォルトの名無しさん:2008/02/09(土) 12:18:52
ビットマップのオブジェクトを生成した後、
他のイメージオブジェクトで読み込みたいのですが、
次の方法だと読まれません。

var
 bmp1: TBitmap;
begin
 bmp1 := TBitmap.Create;
 bmp1.Canvas.TextOut( 10, 10, 'ABC' );

 Form1.Image1.Picture.Bitmap.Assign( bmp1 );// ←これでは読み込まれない(空になる)

 bmp1.Free;
end;

どうすればいいでしょうか?
443デフォルトの名無しさん:2008/02/09(土) 13:20:39
bmp1 のサイズが
444442:2008/02/09(土) 13:55:28
>>443
あぁ〜そうでした……。orz

ありがとうございました。
445デフォルトの名無しさん:2008/02/09(土) 14:06:47
Delphiで作業中、何故か、常にフォームが手前に来るようになってしまいました。
(表示→フォーム/メニューの切り替えをクリックしてもフォームが奥にいかない)
仕方ないので、コードを書く時は、フォームを閉じるボタンで毎回閉じてます。

どうすれば元に戻るのでしょうか???
446デフォルトの名無しさん:2008/02/09(土) 15:49:45
目的のプログラムにコマンドを送って
そこから計算結果を格納するGUI WRAPPERを作りたいのですが

そんなことやるのに参考になるサイトとかありませんか?
447デフォルトの名無しさん:2008/02/09(土) 16:04:50
>>446 コンソールアプリのラッパ?
名前なしパイプ
CreatePipe+SetStdHandle
 で検索してゆくといいよ
448デフォルトの名無しさん:2008/02/09(土) 16:44:02
>コンソールアプリのラッパ?
まさしくその通りです。

ありがとうございます。検索してみます!
449デフォルトの名無しさん:2008/02/09(土) 21:55:52
>>439-441
ありがとうございます。何とかなりました。
450デフォルトの名無しさん:2008/02/10(日) 04:37:37
メモリ開放のタイミングについて質問です。

あるビットマップ画像を得る関数、
function getBmp(): TBitmap;
を作ったとします。
(使い方は、form1.image1.picture.bitmap := getBmp(); などとします)

ソースは次の様になります。
function getBmp(): TBitmap;
var bmp: TBitmap;
begin
 bmp := TBitmap.create;
 bmp.width := 100;
 bmp.height := 100;
 bmp.canvas.textOut(5,5,'ABC');
 result := bmp;
 //bmp.free;//★ ←この行を入れてしまうと、値が返らない
end;

ここで質問があります。

DELPHIでは、
「createしたオブジェクトは、使い終わったらfreeしなければならない」
とよく書いてあります。
しかし上記の場合、freeしてしまうと、直前のresultの値も破棄されてしまうようです。

こうした場合、freeはどのタイミングで行えばよいでしょうか?
451デフォルトの名無しさん:2008/02/10(日) 04:52:17
あーあれだな
たぶんBitmapの中身を渡してるんじゃなくてポインタを渡してるとかそういう話だな

↓詳しい人頼む
452デフォルトの名無しさん:2008/02/10(日) 05:06:28
var
bmp: TBitmap;

..

bmp = getBmp();
form1.image1.picture.bitmap := bmp;
bmp.Free;
453デフォルトの名無しさん:2008/02/10(日) 05:08:31
>>450
呼び出し元で不要になったら
454450:2008/02/10(日) 05:59:59
>>451
戻り値に画像を取る関数を色々試しているのですが、
画像に関しては、どうも参照渡し(意味は自信ないですが…)されてるように思います。

>>452
ありがとうございます。
1〜2行目は、「グローバル変数化する」ということでしょうか…?
それとも、任意のprocedureの中に書くという意味でしょうか?

また、>>450にある関数getBmp()の中の変数bmpは、このままだとローカル扱いだと思っていたのですが、
この関数内ではfreeせずに、他のprocedureでfreeする(できる)ということでしょうか?
質問ばかりですみません…。

>>453
変数bmpが「ローカル扱い」かつ「ポインタ(?)扱いでない」ならば、
>>450の関数の最後でresultに代入したら不要になると思ったのですが…。
455デフォルトの名無しさん:2008/02/10(日) 06:32:48
>>454
bmp := TBitmap.Create;としたとき、bmpに入るのはTBitmapインスタンスの実体ではなく、
TBitmap.Createで生成された物の "場所を指し示す情報" が入ってるだけ。
なのでResult := bmp;としたとき、コピーされるのは場所の情報だけで、実体そのものがコピーされるわけではない。
だからその場でbmp.Freeとすると、Resultが指し示す場所も同じなのでそちらも破棄されたことになる。

ただ、今回の場合form1.image1.picture.bitmap := getBmpと、すでにあるものを変更したいということなので、

procedure hogeBmp(Bmp: TBitmap);
begin
 Bmp.Width := 100;
 ...
end;

とした上で、

hogeBmp(form1.image1.picture.bitmap);

と書けばいい。
456デフォルトの名無しさん:2008/02/10(日) 06:36:13
>>454
DelphiにはGCがついていないので、
getBmp(): で生成したTBitmapのインスタンスは、
たとえ、getBmpから抜けたとしても勝手に解放されないです。
ですから、getBmpを呼び出してresultを得た側で、
使い終わったら解放処理(Free)を書く必要があります

グローバル変数かローカル変数かは関係がないです。
単なる入れ物なので。

たぶん、他の言語をやったらして、混乱しているかと思います。
・Delphi の class のインスタンスを入れた変数(というかなんというか)は、全部参照
・GCがないので、自分で解放が必要

この感じだと他のところでも、解放し忘れとかありそうだから心配です。
OnFormCreateででも、
 ReportMemoryLeaksOnShutdown := True;
を入れておくとメモリリークを報告してくれますよ
457456:2008/02/10(日) 06:55:10
なんか、目の前の問題にとらわれて、はずした roz
458デフォルトの名無しさん:2008/02/10(日) 08:30:20
Cでは文字列関係で頻出の問題なんだがな。
ゆとり教育はポインタに弱い子を作り出してるのかな。
459450:2008/02/10(日) 08:37:32
>>455さん、>>456-457さん
どうもありがとうございます!
とても参考になりました。

どうやら、他の言語とごっちゃになっていたようです。
(あらためて、GCって便利なんですね…)
また勉強し直します。
460デフォルトの名無しさん:2008/02/10(日) 11:18:56
こういう場合は、bmpは使わず、最初から、
Result := TBitmap.Create; とし、
Result.FreeはGetBitmap内ではせず、
Hoge := GetBitmap;
〜Hogeの使用〜
Hoge.Free;
とやる。
461デフォルトの名無しさん:2008/02/10(日) 15:53:48
なんか458って頭悪そう
462デフォルトの名無しさん:2008/02/10(日) 16:28:17
TBitmapで左上を基点とするDIBを作りたいんだけど無理?

Heightに負の値ぶち込んでもなんともならねぇ
463デフォルトの名無しさん:2008/02/10(日) 16:29:39
GExpert入れたらコンパイルの進捗ダイアログの前に何か一瞬表示されるんだけど、あれって何?
464デフォルトの名無しさん:2008/02/10(日) 17:22:15
>>462
TBitmap使わずに自分で作れば?
465デフォルトの名無しさん:2008/02/10(日) 18:56:40
TBitmapは左上が基点ですけど・・・
466デフォルトの名無しさん:2008/02/10(日) 18:59:40
あ、もしかして、DelphiのDIBってBITMAPINFOHEADER.biHeight にマイナスに入れてないのかな?
だったら、確かに左下が基点になるね
467デフォルトの名無しさん:2008/02/10(日) 19:23:27
DIB試したけど、左上が基点になるぞ?
468デフォルトの名無しさん:2008/02/10(日) 19:33:05
中身の事だろ。ScanLine[0] > ScanLine[1] だ。
469デフォルトの名無しさん:2008/02/10(日) 21:09:03
biHeightには一応負の値をぶちこんでるみたいですね
ScanLineに関してもbiHeightが負の場合で場合分けしているんであながち
完全に非対応って訳ではなさそうですが・・・
470デフォルトの名無しさん:2008/02/10(日) 21:25:44
ん?ScanLineなら、ScanLineを使ってる限りは問題ないはずだが
471デフォルトの名無しさん:2008/02/10(日) 21:26:35
> ん?ScanLineなら、ScanLineを使ってる限りは問題ないはずだが

意味不wwすまん
メモリの並びが逆列になるのは、ScanLineを使ってる限りは問題ないはずだが
472デフォルトの名無しさん:2008/02/10(日) 21:51:18
ScanLineはメモリ上で上下反転してるのを説明するのに用いただけ。
ScanLineを使ってるからどうという話じゃない。
質問者はメモリ上で上下反転してるのが気に食わない理由が何かしらあるんだろ。
473デフォルトの名無しさん:2008/02/10(日) 21:55:43
だから、ScanLineで済む話
474デフォルトの名無しさん:2008/02/10(日) 22:07:42
まぁ、ScanLineで済むケースしか思い浮かばない>>470>>473にとってはどうでもいい話だろうな。
475デフォルトの名無しさん:2008/02/10(日) 22:14:07
質問からしてScanLineは知った上で何か不満があるのかと思ったどな。まぁ質問者じゃないと分からんか。
476デフォルトの名無しさん:2008/02/11(月) 09:55:33
private
{ Private 宣言 }
test: array[1..6,1..6] of integer;

と宣言した二重の配列に一度に値を代入するって事は出来んのでしょうか?

0,0,0,0,0,0 ←これを 配列testに一度に入れたい
0,1,1,1,1,0 test:=(0,0,0 .... こんな風でも駄目だし...
0,1,1,1,1,0
0,1,1,1,1,0
0,1,1,1,1,0
0,0,0,0,0,0
477デフォルトの名無しさん:2008/02/11(月) 10:54:21
(Sender: Tobject)引数の典型的な使用方法ってのを教えてくださいませんか?

ドシロウトですみません。
478デフォルトの名無しさん:2008/02/11(月) 11:15:14
典型的かはどうかは知らないが一例

同じような処理をするが、ただパラメータ(整数)が1個違うだけの
ボタンが複数ある場合。
Tagにそのパラメータを入れておき、OnClickは共通。
中では  TButton(Sender).Tag を参照して処理。

TButtonとOnClickに限った話ではなく、他でも使える手
479デフォルトの名無しさん:2008/02/11(月) 12:19:25
>>476
2次元配列は、1次元配列の配列です。

1次元配列の要素は ( 1 , 2, 3 ) というように表現出来るので、これを入れ子にします。
( ( 1 , 2, 3 ), (4,5,6) ,
というように
480デフォルトの名無しさん:2008/02/11(月) 12:23:03
>>477
with ( Sender as TControl) . do begin
 と、この間に、そのコントロールに関する処理を書く
end;

としておけば、コントロールの名前を変更しても影響しないし
複数のコントロールで同じ処理をさせたい場合にもそのまま使える
481デフォルトの名無しさん:2008/02/11(月) 12:45:26
>>476
testをグローバル変数にすれば、宣言時にできる。

>>477
Senderとは、イベントの送り主のこと。
procudure TForm1.Button1Click(Sender: TObject);
begin
 Form1.Caption := Button1.Caption; // こうするとButton1専用だけど、
 Form1.Caption := (Sender as TButton).Caption; // こうすればButton1に依存しない。

 // こんな使い方もある
if Sender = Button1 then
  ShowMessage('Button1が押されました')
else if Sender = SpeedButton2 then
  ShowMessage('SpeedButton2が押されました')
 else if Sender is TMenuItem then
  ShowMessage('メニュー項目です');
end;
482デフォルトの名無しさん:2008/02/11(月) 12:55:34
>>479,481
レスどうもです。

配列testをグローバルにしたりもしたんですが出来ません。
testを小さくして

test: array[1.3,1..3] of integer;

の時では

test[][]:=((0,0,0),(1,1,1),(2,2,2));
としても
式の必要な場所に']'があります と怒られてしまいます。
483デフォルトの名無しさん:2008/02/11(月) 13:30:00
>>482
test: array[1.3,1..3] of integer;
じゃなくて
test: array[1.3] of array[1..3] of integer;
でいけるはず

>>476の場合は
test: array[1..6] of array[1..6] of integer =
(
(0,0,0,0,0,0),
(0,1,1,1,1,0),
(0,1,1,1,1,0),
(0,1,1,1,1,0),
(0,1,1,1,1,0),
(0,0,0,0,0,0)
);
484デフォルトの名無しさん:2008/02/11(月) 13:41:03
>>482 >>483の方法は
初期化の場合と定数でしか駄目です。
だから、const で定義した定数を代入するか

定数でなく変数も含んだ配列を一度に入れたいなら
配列パラメータ オープン配列パラメータ
で代入するしかありません。

ヘルプを見て使い方を調べて下さい。

オープン配列パラメータにして、配列サイズより短い場合は0で埋めるような
関数を作っておいて
HogeSet([1,2,3,4]);
みたいに呼び出します
485483:2008/02/11(月) 13:45:20
すまん勘違い。privateか。
484さんの言う通り別で準備して代入がいいですねorz
486デフォルトの名無しさん:2008/02/11(月) 14:18:24
>>480
>コントロールの名前を変更しても影響しないし

コントロールの名前がどう関係してるのか説明しる!

487デフォルトの名無しさん:2008/02/11(月) 16:58:35
>>478
>>480
>>481

ありがとうございます。
なぞが一つとけました。
488デフォルトの名無しさん:2008/02/11(月) 17:07:43
TrackBarみたいなコンポーネントを自作したいと考えています

ツマミの横をクリックしたままにするとリピートで1マスづつ移動する
機能を実装したいと考えています
リピート自体はタイマーを使用すれば何とかなるかな?とは思いますが
・タイマーイベントで呼び出されたときのカーソルの位置とコントロールの位置関係
・クリックしたままコントロール外にカーソルが移動した場合の処理
・コントロール外から戻ってきたときの処理
をどうすべきか悩んでいます
何か良い方法はありませんか?
489デフォルトの名無しさん:2008/02/11(月) 17:31:24
>>488
タッチパッドなんかで同じ位置で押したままとかが難しいからさ

OnClickかMouseDownでフラグ立てて、MouseUpまで
ボタン押してる間はズレてもいいという事にした方が使い易いと思うよ。

俺は CM_MOUSEENTER/CM_MOUSELEAVEでマウスカーソルの形状を変えて
マウス形状を変えてる間にMouseDownが来たら別のマウスカーソル
にして、ボタンを離すまで有効にしてる。
490デフォルトの名無しさん:2008/02/11(月) 20:01:53
>>486
コントロールというかコンポーネントだな。
コンポーネントのNameプロパティを変更するとフィールド名も変わるのでコードも変更する必要があるが、
Senderは変わらない。
491デフォルトの名無しさん:2008/02/11(月) 20:27:25
コードも自動で変更されないの?
492デフォルトの名無しさん:2008/02/11(月) 20:36:47
>>491
最近のバージョンじゃないと無理じゃね?
493デフォルトの名無しさん:2008/02/11(月) 22:54:26
じゃ、名前をコーディングの途中で変えたらエライことになるな・・・
VS だと自動で変更してくれるが。
494デフォルトの名無しさん:2008/02/11(月) 23:00:31
2007とかはリファクタリング機能ついてるから変更できるはず
495デフォルトの名無しさん:2008/02/12(火) 03:12:28
VS は普通の変数や関数の名前でさえ、変更すると同じファイル内での全変更を
することができるようなオプションがそのつど選択できる。
496デフォルトの名無しさん:2008/02/12(火) 05:16:52
だから重いのか
497デフォルトの名無しさん:2008/02/12(火) 22:38:43
procedure hoge(var w: WORD; var wd: WORD);
asm
xor eax,eax;
mov w, ax;//Err
mov w, eax;//OK
mov wd, eax;//OK
end;
とするとmov w, ax;で'型の不一致'と出ます
どういったルールではじかれるのでしょうか?
498デフォルトの名無しさん:2008/02/12(火) 22:41:57
一行目は
procedure hoge(var w: WORD; var wd: DWORD);
の誤りです
499デフォルトの名無しさん:2008/02/12(火) 22:44:07
wがPWORDとして扱われている、とか?
500デフォルトの名無しさん:2008/02/12(火) 23:04:06
>>499
だな、var は内部的にはポインタだから、
WORDじゃなくて、Pointer(DWORD)になってるんだろう
501デフォルトの名無しさん:2008/02/12(火) 23:15:21
>>499-500
まさしくその通りでした!
サンクス!
502デフォルトの名無しさん:2008/02/13(水) 15:51:14
ID Managerみたいな感じのを作りたいんだけど、
他アプリ(例えばブラウザ)にあるテキストボックス内の
キャレット位置を取得するときってどうすれば良いんだろう?
503502:2008/02/13(水) 15:58:00
事故った。スレ汚しすまん
504デフォルトの名無しさん:2008/02/13(水) 21:01:02
コントロールにマウスを移動したときに出るポップアップに
画像を表示させたいんですけど何か方法ある?
505デフォルトの名無しさん:2008/02/13(水) 21:14:49
THintWindowのCanvas内に好きなように描く。
506デフォルトの名無しさん:2008/02/13(水) 22:42:57
日経ソフトウェアの「Turbo Delphiではじめる Windowsプログラミング」を買ってDelphi言語に入門しようと思ってるのですが
近くの書店に無く、Amazonにもコメントが無いので、実際に手にとった方の感想を聞かせていただきたいのですが、どうでしたか?

自分はC言語でそれなりに書ける状態で
・CUIで簡易アドレス帳や近似計算を実装できる
・ポインタはある程度理解してるが、時々勘違いする
・全関数を把握してるわけではないので、リファレンスを参考にする必要あり
こんな状態です。こんな人間は上記の本を理解できそうですか?
また入門に適してそうな書籍がありましたら、教えてください。
507デフォルトの名無しさん:2008/02/13(水) 23:08:45
>506
充分でしょw
508デフォルトの名無しさん:2008/02/14(木) 02:37:40
>>506
目次見ると、目次に載っているようなアプリを作りたい人向けのような気がします。
この手のアプリはその手の知識が無いと、まったく作れないからね。
509デフォルトの名無しさん:2008/02/14(木) 08:55:53
@クラスを継承し、Create,Freeやらができるようになった。
A先日Canvasをかじった。

くらいの、ま、ド素人です。

>THintWindowのCanvas内に好きなように描く。

このレスに触発されて、やってみよう!と思い、MyHint: THintWindowと宣言して、MyHint.Canvasでごちゃごちゃと弄って、それをApplicationのTHintWindowでできたプロパティに結びつければ、思うように描画できるはず、と思ったのですが,
まずTApplicationを見たらTHintWindownのプロパティがない!(HintColor、HintHidePauseなどはありますが。)
どこのCanvasを操作すればいいんでしょうか??
510デフォルトの名無しさん:2008/02/14(木) 10:29:15
>>509
クラスのメンバーではなく
HintWindowClass というグローバル変数があります

これに THintWindow を継承したクラス型を代入します
511デフォルトの名無しさん:2008/02/14(木) 10:31:36
512デフォルトの名無しさん:2008/02/14(木) 10:49:27
で、描画はPaintをオーバーライドしてその中で。
513デフォルトの名無しさん:2008/02/14(木) 16:58:40
>>510->>512

ありがとうございます。
家に帰って取り組んでみたいと思います。
514デフォルトの名無しさん:2008/02/14(木) 18:57:20
Formのクライアント領域のTop,Leftが、スクリーンのX,Yのどこにあるのか、正確に取ることはできませんか?
515デフォルトの名無しさん:2008/02/14(木) 19:05:48
ClientToScreen
516デフォルトの名無しさん:2008/02/14(木) 19:07:44
そのものズバリなのがあったんですなorz
517デフォルトの名無しさん:2008/02/15(金) 14:22:51
Delphi6でDesignEditorsユニットに「proxies.dcuが見つからない」とエラーがでます
ググってみたところ
requireにdesignide.dcpを追加すれば直るらしいのですが
requireってのが何かが調べても分かりませんでした・・・
designide.dcpを含むdclusr.dpkをコンパイルしてみましたが結局改善しませんでした

どなたか対処が分かる方いませんでしょうか?
518デフォルトの名無しさん:2008/02/15(金) 17:50:23
フォームにポップアップメニューを乗っけただけのソフトを作りたいのですが、
常にポップアップメニューを表示させる方法ってありませんか?
519デフォルトの名無しさん:2008/02/15(金) 17:58:14
>>517
*.dpk を右クリックで編集を選んで編集する
requireにdesignide.dcpを追加
520デフォルトの名無しさん:2008/02/15(金) 18:22:32
おお
そうか、パッケージの内部の事だったのですか
知らなかった・・・
って、あれ、既に追加されてるのにエラーが出るってこりゃ一体

とりあえずあれからさらにググって
ttp://fdelphi.com/modules/xoopsfaq/index.php?cat_id=3
> [FAQ] "Proxies.pas" が無く、コンパイルできません
↑でダミー(?)置いて回避できるらしいんでなんとかコンパイルは通しましたが

これ機能に影響ないんだろうか
521デフォルトの名無しさん:2008/02/15(金) 18:48:31
>>518
ポップアップするからポップアップメニューと呼ばれてると思うんですが
ボタンを自分で似たような外見に描画したら?
522デフォルトの名無しさん:2008/02/15(金) 19:01:41
>>521
そうなんですよね。矛盾してるとは思ったのですが、
ポップアップメニューの動作が一番しっくりきたので…。
でも今ふと考えたら解決策が有りましたw
ありがとうございました。
523デフォルトの名無しさん:2008/02/15(金) 19:11:47
StayOnTopにしてButton自分で並べるか
MainMenu/ToolBarにメニュー並べてClientWidth,ClientHeigt最小にしておけば似たようなものが出来そうだな。
ToolBarならShowCaption := True, AutoSize := Trueにしておいて。
524デフォルトの名無しさん:2008/02/15(金) 19:22:18
自作コンポーネントでオブジェクトインスペクタに表示するプロパティの
初期値を変えたいのですがどのようにすればよいでしょう?

具体的には
published
property Date: TDate read FDate write FDate;
のように書いていて、このコンポーネントをフォームに貼り付けたときに
かってに今日の日付が入るのですが、初期値は『何も無し』にしたいのです。

他の人が作ったコンポーネントで一見同じように書いているのに
何も入らないのがあるのですが、自分にはどこが違っているかわりません・・・
525デフォルトの名無しさん:2008/02/15(金) 21:36:03
TPopUpにはVisibleプロパティが無いようなのですが、手動で隠したいときはどうすればいいんですか?
526デフォルトの名無しさん:2008/02/15(金) 21:43:29
MenuItemのvisibleをfalseにする
527デフォルトの名無しさん:2008/02/15(金) 22:43:52
『何も無し』ってTDate型はないと思うが
528デフォルトの名無しさん:2008/02/15(金) 23:20:37
C:\folder\aaa
      bbb
      ccc
      ddd
      eee

などと1つのフォルダに複数のフォルダが格納されている時に
folder内にある全てのフォルダ名一覧(aaa、bbb、cccなどの一覧)を取得したいのですが
どのように処理すればよいでしょうか?

FindFirstを使ってやってみましたが
上手くできませんorz

どうか教えて下さい m(_ _)m
529デフォルトの名無しさん:2008/02/15(金) 23:23:38
ふつーはFindFirstでやる。コード晒せ。
530デフォルトの名無しさん:2008/02/15(金) 23:26:17
>>524
プロパティエディタを作れば、オブジェクトインスペクタに表示するものを
コントロールできたかな。
531528:2008/02/16(土) 00:05:26
var
kekka: TSearchRec;

if FindFirst(DirPath,faDirectory,kekka) = 0 then
begin
   Showmessage(kekka.name);
end

正直FindFirstの使い方よくわかってません^^;
よければ教えて下さい
532デフォルトの名無しさん:2008/02/16(土) 00:19:02
ヘルプ嫁。FindFirst-FindNext-FindCloseの組み合わせな。Delphi FindFirstでぐぐってもストライクだ。
533デフォルトの名無しさん:2008/02/16(土) 00:30:17
ありです^^
.txtや.jpegといった拡張子指定のワイルドカード(*.*)が使える
一般ファイルでは上手くいくのですが
フォルダではうまくいかなかったので質問しました。

もう少し調べてみます

534デフォルトの名無しさん:2008/02/16(土) 04:21:29
一旦Freeで開放した後、もう一度Freeで開放するとアクセス違反で落ちてしまうので
memorystreamにデータが入っている時のみ
Freeで開放したいんですけど、どう書けばいいんでしょう?
535デフォルトの名無しさん:2008/02/16(土) 04:56:16
>>534
createあるいは代入する前にnilを入れておく。

中身がnilだとFreeでは無視される。
536デフォルトの名無しさん:2008/02/16(土) 05:46:19
>>534
解放するときは、全部
FreeAndNil(Obj);

でおk
537536:2008/02/16(土) 05:47:51
ごめん。よくよんでなかった。>>536は流して

MemoryStreamのオブジェクトを解放したいの?
それとも、MemoryStreamをメンバとしているオブジェクトを解放したいの?
前者なら、>>535 >>536でおK
538デフォルトの名無しさん:2008/02/16(土) 06:30:01
>>535-537
できました。どうもありがとうございます。
nilを入れるって便利ですね
539デフォルトの名無しさん:2008/02/16(土) 06:33:46
>>536
のFreeAndNilは、Freeしつつnilも同時にやってくれるから、慣用句として覚えておくとよいですよ。
540デフォルトの名無しさん:2008/02/16(土) 13:46:50
>>531
var
 sr: TSearchRec;

begin
 FindFirst('d:\*.*', faAnyFile, sr);
 repeat
  if (sr.Attr and faDirectory)=faDirectory then
  Writeln(sr.Name);
  until (FindNext(sr) <> 0);
end.

これでd:\にあるディレクトリ表示されると思うけどどうかな
さらにシステムファイル(faSysFile)を判定したいならsr.AttrをfaSysFileでandしてみるとか
541デフォルトの名無しさん:2008/02/16(土) 14:10:29
エクスプローラでやるように

C:\hogehoge\hoge

を切り取り処理で

D:\Newhoge\hoge

とコードを使って移動させたいのですが
どんな関数を使えばできますか?
よろしくお願いします
542デフォルトの名無しさん:2008/02/16(土) 16:32:15
タブ型のテキストエディタを作っているのですが1個質問です。
タブを切り替えるごとにメモスペースも切り替えるにはどうすればよいですか?

今こんな感じで上手くメモ内容が切り替わらずに、詰まってます
http://www.ps4.jp/up/pangya/src/wwwps4jp0457.gif
http://www.ps4.jp/up/pangya/src/wwwps4jp0458.gif
543デフォルトの名無しさん:2008/02/16(土) 16:56:00
>>542
すべてのメモコントールが1つのタブシートの上に載ってない??
つまり、親コントールが1つのタブシートになってる。
コントールを配置する時、タブシート切り替えてから、配置すればよろし。
ついでに、TActionListを使うといいかも。
>>541
ExtractFile*とかの関数でドライブレターとか切り出せばよろし。
Extractって打ってctrl+space押してみな。


544デフォルトの名無しさん:2008/02/16(土) 17:57:10
http://www.ps4.jp/up/pangya/src/wwwps4jp0459.gif
ここでまたストップ。
独学だからダメなのかな。
わからなすぎて、配置しただけでコードとかプロパティインスペクタとかいじれない

・起動したらタブ1のメモが開いている状態
・タブを切り替えるごとにメモスペースも切り替わる

手順や設定方法なんか教えていただけると助かりますです。
おススメの入門書とかもあればぜひ教えてくださいです。
545デフォルトの名無しさん:2008/02/16(土) 18:15:53
ええ??
>タブを切り替えるごとにメモスペースも切り替わる
>>543に書いたように、タブごとに、メモコントロール置けば、実行時にタブ切り替えて自動的に
変わるでしょうーーーーーーーーーーー?というか、フォーム設計時の補助のグリッド状の点が見えるけど、
ページコントロールの大きさ小さくない??もっと広げてその上に置け。
>起動したらタブ1のメモが開いている状態
コードでやりたいなら、フォームのOnCreateイベントに、PageControl.ActivePageIndex := 0とか書け。
もしくは、コンパイル前にタブ1をアクティブページにしておけば、そのまま反映される。

日が暮れるな。

546デフォルトの名無しさん:2008/02/16(土) 18:18:32
http://www.turboexplorer.com/jp/DelphiTutorial
このチュートリアル先にやったほうがいい。
547デフォルトの名無しさん:2008/02/16(土) 18:19:55
いきなりタブ数が変わるアプリは難易度高いよ。とりあえずこんな感じ。
実行時に作り出すからオブジェクトインスペクタじゃ設定できない。
procedure TForm1.CreateTab1Click(Sender: TObject);
var tab: TTabSheet;
memo: TMemo;
begin
tab := TTabSheet.Create(PageControl1);
tab.Parent := PageControl1;
tab.Align := alClient;
tab.Caption := Format('タブ%d', [GetTickCount]);
memo := TMemo.Create(tab);
memo.Parent := tab;
memo.Align := alClient;
memo.Lines.Add(DateTimeToStr(Now));
// タブを登録する
tab.PageControl := PageControl1;
end;

procedure TForm1.CloseTab1Click(Sender: TObject);
begin
if PageControl1.ActivePage = nil then Exit;
PageControl1.ActivePage.Free;
end;

procedure TForm1.ShowMemoInfo1Click(Sender: TObject);
var memo: TMemo;
begin
if PageControl1.ActivePage = nil then Exit;
memo := PageControl1.ActivePage.Controls[0] as TMemo;
ShowMessage(memo.Lines.Text);
end;
548デフォルトの名無しさん:2008/02/16(土) 18:34:35
ありがとうございます。
やってみます。

最後にみなさんはDelphiに人生で初めて触れたとき
どう学びましたか?
Delphi知ってる人が近くにいたとか、仕事上仕方なく必死になったとか、専門学校とか書籍とか
549デフォルトの名無しさん:2008/02/16(土) 18:45:27
仕事上仕方なく必死にならないと新しく言語を学ぼうとは思わんな
いきなり妙なプログラムのメンテを丸投げされてみればすぐわかるようになる
550デフォルトの名無しさん:2008/02/16(土) 19:53:22
ええっ?こんなソフト作んの??えええ〜!てなときも燃えるかも

メンテはやだな絶対
551デフォルトの名無しさん:2008/02/16(土) 20:22:41
やりたいと思ったときにNiftyのフォーラムがあった
本もたくさん出てきた
タイミングが良かったかな
552デフォルトの名無しさん:2008/02/16(土) 22:01:14
DOSで作ってた自作のシェアウェアを、Windowsに移植しようと必死だった。
面白かったなぁ。あんな興奮は人生でもそうそうなかった。
553デフォルトの名無しさん:2008/02/17(日) 01:08:36
>>541
フォルダの移動なら、MoveFile か ShFileOperation で出来ないかな。

>>548
友達と競い合って何かを作ってました。
554デフォルトの名無しさん:2008/02/17(日) 01:43:51
すんません

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

というエラーがメッセージに表示されるようになりました。
ヘルプをみても検索に掛からず、修正方法がわかりません。
どうすればよいか、ご教授お願いします。
555デフォルトの名無しさん:2008/02/17(日) 01:47:32
Main.dfmがないんだろとしか言い様が無い
556デフォルトの名無しさん:2008/02/17(日) 01:51:10
該当ファイルはプロジェクトマネージャ上で名称変更しました。
エラーが出るようになって前の名前に戻したのですが、今度は名称変更後のファイルがないと言われorz
557デフォルトの名無しさん:2008/02/17(日) 02:54:52
delphiのコードから
外部のプログラムを実行できますか?
558デフォルトの名無しさん:2008/02/17(日) 03:27:23
>>557
出来る。
559デフォルトの名無しさん:2008/02/17(日) 03:47:14
>>556
コードも修正した?
560デフォルトの名無しさん:2008/02/17(日) 05:13:27
>>548
BasicMagazineのBasicのゲームの移植や、
別言語でソース公開されているゲームの移植で覚えた。
あとは Delphi本がけっこうあったので。
32bit Power programing ?だっけ、よく登校中に読んでた

専門学校とか大学は、基礎だけで即実践なことは教えてもらえないので
結局自分でやる必要があるよ
561デフォルトの名無しさん:2008/02/17(日) 05:56:44
ソフトウェア工学科あたりに行けばみっちり教えてくれるんじゃないの?
プログラマならそういう学科で学ぶべきですよね。
562デフォルトの名無しさん:2008/02/17(日) 06:06:46
独学でやっちゃるぜってくらいの奴の方が
教えてもらいにいくかねって人よりもよくできる。
実際、情報学科のかなりの人はやる気ない。
563デフォルトの名無しさん:2008/02/17(日) 06:47:22
情報学科行っても独学できるんだから、問題ない。
関係ない学科へ行くと、そっちの勉強に時間がとられるからお勧めしない。
564デフォルトの名無しさん:2008/02/17(日) 10:27:41
でもプログラミングで最後に必要なのはプログラミング能力でない部分の引出しだったりするんで
関係ない学科の方が望ましいんだよ。
565デフォルトの名無しさん:2008/02/17(日) 12:43:47
>>561
そのスタンスでは、ソフトウェア工学科へ行っても無駄に終わるよ
566デフォルトの名無しさん:2008/02/17(日) 13:08:06
みんな騙されちゃだめ。 
>>564が事実なら情報処理系学科の存在意義が無くなる。
567デフォルトの名無しさん:2008/02/17(日) 13:11:02
独学とOJTで何とかなるとか思ってコンピュータサイエンスが軽視されるから
事務の派遣と同レベルのドカチン作業員しか国内にいなくなるんだよ。
568 ◆XcB18Bks.Y :2008/02/17(日) 13:27:30
>>548
プログラミングでわからないことがあったときは
>>551氏と同じでNIFTYでかなりお世話になりましたが
Delphiでプログラムをどう作るかという意味では独学でした。

独学とかいうとかっこよさそうですけど
最初の何年かはトンデモプログラミングになってしまいました。
(たとえば文字列グリッドに幅0の列を作ってデータを忍び込ませたりとか…)

よい建物を造るためにはよい建築技術のほかによい設計技術が必要なように
プログラミングでも良い設計技術が必要だと感じています。
(でもオブジェクト指向設計の本は無駄に難しいのが多くて…)

>>566
プログラミングは語学と同じで手段だと思うのですよ。
たとえば英語がペラペラでもそれで海外の人と語れるものがないとダメなんですよ。

汎用機みたいな巨大なプロジェクトならともかく
パソコンソフトだと「何を作るか」を考える力のほうが重要だと思います。
569デフォルトの名無しさん:2008/02/17(日) 13:35:44
でもまぁ今時仕様からフローおこす奴なんていないけどな
570デフォルトの名無しさん:2008/02/17(日) 13:54:17
>>566 で、存在意義ってあるの?
571デフォルトの名無しさん:2008/02/17(日) 13:55:55
あるよ(笑)
572デフォルトの名無しさん:2008/02/17(日) 14:53:46
CADを見てるとわかるけど、プログラムを書くだけじゃダメ
いかに軽量で使いやすい物を作るかが要求されるけど、それ以前に「どの分野で使うCADか」という知識も要求される
家だったり車だったりで全く方向性や要求される機能が異なってくる

でも、そんな分野をいちいち覚えられるかボケェ!となるので、最近は使い手(顧客)を開発チームに迎えてプログラムを組む事例が増えてきてる
オープンソースでもメインでプログラム書いてるのは、大抵その分野の知識がある人だけど、ユーザーが「こんなのほしい」と要求を出すのも大事
結局プログラム書く側も使う側もコミュニケーションを取ることが大事
573557:2008/02/17(日) 16:28:40
関数名を教えて下さい>.<
574デフォルトの名無しさん:2008/02/17(日) 16:32:53
WinExec(PChar(PRGLine), SW_SHOWNORMAL)
575デフォルトの名無しさん:2008/02/17(日) 16:36:08
576デフォルトの名無しさん:2008/02/17(日) 16:46:18
いくらなんでも今時WinExecというのは。
CreateProcessとかじゃねーかやっぱり
577デフォルトの名無しさん:2008/02/17(日) 17:01:50
ShellExecuteもありかな。
578デフォルトの名無しさん:2008/02/17(日) 18:41:37
>>566
実際ないと思う。良書さえあればそれでいい。
情報科行ってた人もそう言ってる。
所詮大学で習う内容なんてたかが知れてるし、
院の知識は専門的すぎてピンポイントでしか役に立たないから、
会社を選ばないと役に立たないし、
そもそも新卒の知識なんてそこまで当てにはしてないし。
ただ、入った会社が酷いと、変な知識植え付けられるかもね。
579デフォルトの名無しさん:2008/02/17(日) 19:09:52
別のコントロールに入力されたキー情報を別のコントロールに転送したいと
考えています
例えばTEditにコントロールがあるときにカーソル操作だけはTreeViewに転送とか・・・
Selectedプロパティをいちいち変更するのは大変ですし、'*'などで一度に
展開だとかの制御までこなすのは複雑になるので、ちまちまコードで対応
するよりはキーコントロールを転送するのが早いかと思いまして・・・

KeyDownを呼び出せれば一番楽なんですが、すべてのコンポーネントを
設計時から派生させるのもどうかな?と行き詰っています
580デフォルトの名無しさん:2008/02/17(日) 19:19:45
FormのKeyPreviewとか?あるいはショートカットにしておくとか?いずれにせよ簡単には
できない≒やらないほうがいい、という類のことではないかという気も。
581デフォルトの名無しさん:2008/02/17(日) 19:29:59
転送元.OnKeyDown
    転送先.Perform(WM_KEYDOWN, Ord(Key), 0);
    Key := 0;

転送元.OnKeyUp
    転送先.Perform(WM_KEYUP, Ord(Key), 0);
    Key := 0;
582デフォルトの名無しさん:2008/02/17(日) 21:57:10
>>581
をををっ。これまた凄く汎用性がある方法ですね!
転送元でKey:=0を放り込んでいるのは自分のとこで処理させないためなのかな?

ありがとうございました!
583デフォルトの名無しさん:2008/02/17(日) 22:53:05
>>581の方法で全く問題は無いハズなんですが、転送元がSetFocusで
フォーカスを得ている場合は”カーソルキーだけ転送できない”
厳密に言うならば”カーソルキーの操作だけOnKeyDownがが発生しない”
ようです

OnMouseWheel*イベントを拾うためにOnMouseMoveでSetForcusで得ているの
ですがこの方法自体に問題があるのでしょうか?
SetFocusをかけないとOnMouse*イベントが拾えてもOnMouseWheel*が拾えない
ってのも理解できてませんが・・・
584デフォルトの名無しさん:2008/02/17(日) 23:26:16
プログラミングがしたいのに、プログラミングをやらない学科に進むのは
単なる天邪鬼。
大学も会社もよく調べた上で選択しましょう。


>>583
カーソルキーはダイアログ向けの特別なキー入力処理が行われていたはず。

OnMouseMoveでSetForcusは変。
Application.OnMessage の利用を検証してみて。
585デフォルトの名無しさん:2008/02/18(月) 01:16:57
>>578
自分が行ってそう感じたわけではなく、ただ人からの伝聞で判断してるようじゃ
存在意義がないなんてこと言えないんじゃないか?
そもそもコンピュータサイエンスってのは言語を覚えてひととおりプログラムが書けるっていう
土方のやってる作業とは中身も目的も違うんだけど
586デフォルトの名無しさん:2008/02/18(月) 02:44:08
いや、だから、いまはプログラミングの話で、コンピュータサイエンスは
関係ないから、大学の学科は関係ない、ということ。

すきなことは趣味にすべし、職業にすると不幸。

587デフォルトの名無しさん:2008/02/18(月) 03:07:46
そろそろ隔離スレで
588デフォルトの名無しさん:2008/02/18(月) 03:11:12
おいおい、ここが隔離スレだろ
589デフォルトの名無しさん:2008/02/18(月) 04:36:35
現役の学生です
情報工学系の学科では「計算機で何ができるか?」が主流のテーマなので言語は問わずにソフトが組めることが必須
確かに講義として習う過程では基本的な近似計算アルゴリズムなどを習ったり、現在の計算機アーキテクチャや将来的にどう進歩するかを学ぶ程度
一方で開発演習科目でいかに創意工夫できるかで、得られる成果物が大きく変わってきます
与えられたことだけをするのか、その先へ踏み込んで要求+αを実現できるかで経験が全く異なる
大学のカリキュラムが悪いか学ぶ気が無かったか、原因はわかりませんが独学でやるよりも引かれたレールの上で楽に基礎を学べてバカができるのはいいかもしれません


ふと思ったけどDelphi言語で飯は食える(就職はある)のかな?
590デフォルトの名無しさん:2008/02/18(月) 04:48:56
>>589
少ないけど無い訳じゃない

ttp://www.fenrir.co.jp/adventure/#d
591デフォルトの名無しさん:2008/02/18(月) 09:56:05
>>584
Application.OnMessageでWM_MOUSEWHEELを拾っても得られるMsg.whndは
フォーカスが与えられたコントロールのものになってしまいます
また、MouseDown同様に処理を行う場合はMouseWheel内部でSetFocusを
行うため、結局の所MouseMoveでSetFocusをするのと変わりないかな?
と思っていました。
X-Windowみたいな動作はWindowsでは控えるべきなのかな?

で、WM_MOUSEWHEELメッセージをカーソル位置のコントロールに投げたいの
ですが、深い位置にあるコントロールを拾い出すのはControlAtPosで順番に
探し出すしか無いのかな?
592デフォルトの名無しさん:2008/02/18(月) 13:08:10
Explorerでファイルを右クリックしたときに出るメニューを自作のアプリでも出したいんですが
一発で出せる関数はないんでしょうか?

procedure ShellCtrls.InvokeContextMenu(Owner: TWinControl; AFolder: TShellFolder; X, Y: Integer);
でできるかと思ったらTShellFolderに依存してるので切り出せなさそうです。
以前Niftyのサンプル蔵で見たような気もしたんですが…
593デフォルトの名無しさん:2008/02/18(月) 13:40:14
シェルエクステンションとしても組み込まなくても
コマンドラインでやりとりするんじゃ駄目なの?
それだったらレジストリいじるだけでできるけど。
594デフォルトの名無しさん:2008/02/18(月) 14:00:22
ぜんぜん話がかみ合ってない飢餓
595デフォルトの名無しさん:2008/02/18(月) 14:28:12
自作プログラムの起動時にあるキー(例えばCtrlとか)が押されていたら
起動時の処理を変更するようなことをしたいのですが、GetAsyncKeyStateで
キーの状態は取得できるのですが、キーを押したままスタートメニューから起動すると
起動したアプリのウィンドウが最前面になりません。起動後にSetForegroundWindowを
使っても無理でした。何か良い方法はありませんでしょうか?

Delphi7+WinXP

596デフォルトの名無しさん:2008/02/18(月) 17:01:41
597デフォルトの名無しさん:2008/02/18(月) 17:57:21
Delphi7でダミーのデータベースを作ってQRerpotで印刷したいのですが、
ダミーのデータベースを作るところからこけています。

var
img:array of Timage;
mmo:array of Tmemo;

procedure TForm1.Button1Click(Sender: TObject);
var
inum:integer;
  img:array of Timage;
mmo:array of Tmemo;

begin
ClientDataset1.active:=false;
Clientdataset1.filename:='h:\Delphi_project\US1\USreport.xml';
Clientdataset1.FieldDefs.clear;  
598デフォルトの名無しさん:2008/02/18(月) 17:57:47
with clientdataset1.fielddefs.addfielddef do begin
name:='UScomment';
datatype:=ftmemo;
end;
with clientdataset1.fielddefs.addfielddef do begin
name:='USpict';
datatype:=ftGraphic;
end;
// mmo[1〜5]、img「1〜5」に入れてたデータをデータセットに入れたいのですが
clientdataset1.createdataset;
for inum:=1 to 5 do begin
if img[inum].picture<>nil then begin
ClientDataSet1.append;
ClientDataSet1.FieldValues['UScomment']:=mmo[inum].lines;
clientdataset1.append;
clientdataset1.FieldValues['USpict']:=img[inum].picture;
end;
end;
clientdataset1.close;
end;
..で実行すると、 ClientDataSet1.FieldValues['UScomment']:=mmo[inum].lines;
でエラーとなって、VariantとTstringsには互換性がありませんとでます。
datatypeをftwidestringとかに変えてもダメなのですが、こうしたらいいとかご教示お願いできませんでしょうか?
599デフォルトの名無しさん:2008/02/18(月) 18:30:45
TStringsじゃなくてTStrings.Text入れれば?
TMemo.Linesは文字列リストであって文字列じゃない。
600デフォルトの名無しさん:2008/02/18(月) 18:48:24
>599
さっそくのお返事、ありがとうございました。おお!!
mmo[inum].textにしたらエラーが消えました。
が、今度は
clientdataset1.FieldValues['USpict']:=img[inum].picture;
で、再度、variantとTpictureには互換性がないとでます。
あと、エラーはとりあえずここだけです。
よろしくお願いします。
601デフォルトの名無しさん:2008/02/18(月) 18:53:17
画像はBLOBじゃないと無理じゃね?
602デフォルトの名無しさん:2008/02/18(月) 19:28:34
TPictureの中身をどうシリアライズするかも問題だろな
603デフォルトの名無しさん:2008/02/18(月) 19:41:08
BLOBにファイルイメージそのまま格納すれば、TBlobStreamで直接TJPEGImageとかで扱えそう
604デフォルトの名無しさん:2008/02/18(月) 20:00:08
複数の画像を読み込んでスライドショーの用な形式で表示させようと思ってます

jpgファイルはImageListでは扱えないのでしょうか?

もし扱えないなら良い関数はないでしょうか?

教えて下さい
605デフォルトの名無しさん:2008/02/18(月) 20:08:13
つTJPEGImage
606デフォルトの名無しさん:2008/02/18(月) 21:21:54
質問ですが、
画面に表示されるプログラムのアイコン(自身)をあるフォルダにくると埋め込まれた違うアイコンにしたいのですが、
どうすればよいでしょうか?
607デフォルトの名無しさん:2008/02/18(月) 21:28:19
>>606
日本語でOK
608デフォルトの名無しさん:2008/02/18(月) 21:33:23
適当なタイミングで
Application.Icon.LoadFromFile('myicon.ico') or LoadFromStream
で変えられる。
exeのリソースに埋め込んだものを呼び出すのはようわからん。
609デフォルトの名無しさん:2008/02/18(月) 21:43:23
>>608
TResourceStreamで読み込んでApplication.Icon.LoadFromStreamでいいんじゃね?
610デフォルトの名無しさん:2008/02/18(月) 23:10:51
>>604
> 複数の画像を読み込んでスライドショーの用な形式で表示させようと思ってます
> jpgファイルはImageListでは扱えないのでしょうか?
画像全部読み込むつもりか?それだけ重くなんだぞ
ファイルパスだけにしておけ
611デフォルトの名無しさん:2008/02/18(月) 23:22:54
Image1,2の二つをはっつけて
一方を表示している間にもう一方を非表示にして次の画像を読み込むのが手っ取り早い
612デフォルトの名無しさん:2008/02/19(火) 00:27:13
Delphiで新規作成すると
パッケージ
ユニット
VCLフォームアプリケーション
フォーム

って出てきますが、これらって具体的にどういう違いがあるのでしょうか?
613デフォルトの名無しさん:2008/02/19(火) 00:43:42
パッケージ = 複数のコンポーネントをまとめたライブラリ
ユニット = ソースファイル(Cにおけるunit1.c+unit1.hに相当)
VCLフォームアプリケーション = VCLフレームワークを使用したアプリケーション、Delphi/BCBの標準的な開発手法
フォーム = ウィンドウやダイアログ
614デフォルトの名無しさん:2008/02/19(火) 01:24:57
>>613
ありがとうございました
615デフォルトの名無しさん:2008/02/19(火) 02:46:41
>>591
APIの勉強もしよう。

>>595
試したところ、エクスプローラー(ファイルマネージャ)のせいみたい。
デスクトップのアイコンから起動すれば、手前に表示される。

どうしてもと言うなら、タイマーを使って、キーが離されるまで待ってから
手前に表示してみては?
616デフォルトの名無しさん:2008/02/19(火) 08:58:50
>>608
それだと見た目のアイコンが変わらなかったです・・・。
617デフォルトの名無しさん:2008/02/19(火) 09:24:15
>>595
Delphi  プログラム実行時のコマンドライン引数を取得して分岐
Windows ショートカットを別々に作成(Ctrl押しより楽でしょ?)

とDelphi超初心者の私なら逃げます
618デフォルトの名無しさん:2008/02/19(火) 09:36:39
>>616
もしかしてデスクトップやエクスプローラで見た時の exeファイルのアイコン?
それだと、小さいプログラムを作っておいて、そのプログラムから
BeginUpdateResource/UpdateResourceで
実行ファイルのリソース書き換えが必要になるよ。
619595:2008/02/19(火) 09:37:58
>>617
その手は使ってみました。インストーラーで引数の違うショートカットアイコンを二つ
登録して分岐するようにしてうまくいったのですが、WIndowsのスタートメニューに
よく使うアプリのアイコンが列挙されますよね。そこのアイコンが勝手に入れ替わったり
戻ったりと変な挙動するもんで、アイコン一個で起動時に分岐できないかと相談しました。

>>615
もう少し試してみます。
620デフォルトの名無しさん:2008/02/19(火) 09:39:50
アイコンのプロパティーから、ショートカット→アイコンの変更...
だったりして。
621デフォルトの名無しさん:2008/02/19(火) 11:30:18
>>557
自分でライブラリないなら、Delフサのユーティリティでも使えば?
確かプロセス起動関連あったはず。
622621:2008/02/19(火) 11:41:12
>>557
遅レスだった orz
しかもURL忘れてた

DelFusa Library - Delphi OpenSource - DelFusa Floor
http://delfusa.main.jp/delfusafloor/opensource/delfusa_library_f.html

ここの CreateProcessUnit、CommandLineUnit あたり。
623デフォルトの名無しさん:2008/02/19(火) 16:25:03
> 601,602,603
ありがとうございました。自分なりにBLOBを調べてみましたが、
BMPではできてもJPEGではできなかったりと難しそうですね...
QReportでの出力はあきらめて他の方法を探す事にします..
624デフォルトの名無しさん:2008/02/19(火) 16:49:41
>>618
レスありがとうございます。
やはり簡単にはいきませんか・・・。

ちょっとリソースでググって色々調べてみます。
ありがとうございました。
625デフォルトの名無しさん:2008/02/19(火) 16:55:07
メモスペースに行番号を表示させる機能ってどうすれば良いでしょうか?
TeraPadのような行番号表示と、行番号をクリックでその行が反転する機能も知りたいです
626デフォルトの名無しさん:2008/02/19(火) 17:10:32
誰かにアドバイスをしたいと思っていますが、ここでの質問が高等すぎて
答えられません

私でもアドバイスできるよな激初心者用のスレがあってもいいと思うの
ですが、どう思いますか?
627デフォルトの名無しさん:2008/02/19(火) 17:54:47
たしかに「超初心者」の質問ではないような
628デフォルトの名無しさん:2008/02/19(火) 17:59:19
習い始めの初心者というのは出来る事出来ない事も判らないから
ホントの超初心者の質問は思ったより高度になりがちって事さ
629 ◆XcB18Bks.Y :2008/02/19(火) 18:52:55
>>625
夢のない話で申し訳ないのですがシェアウェアのTEditorを買って使うのが現実的な解決策でしょう。
メモコンポやリッチエディットコンポにいくら手を加えても満足のいくものは作れないでしょう。

Windowsは出来合いのテキスト編集装置を並べるだけなら簡単ですが
それ以上のことをしようとするととたんに敷居が摩天楼(死語かw)のように高くなります。
そもそもTEditorがシェアウェアで商売になるのはそれだけ作るのが大変だからです。

StringGridでショボいエディタもどきを作るというのも今考えましたが
行番号表示と特定行の反転表示はできても
その行を編集しているときに反転表示できないのをどうするか…
630デフォルトの名無しさん:2008/02/19(火) 19:28:00
TEditを1個貼っておいて、普段は非表示にしておき、
編集中だけTEditをその位置にピッタリ合わせて表示するというのがVB時代からのテクニックだな
631デフォルトの名無しさん:2008/02/19(火) 19:39:41
>>629
ありがとうございました。
632デフォルトの名無しさん:2008/02/19(火) 19:58:37
ファイルをフォルダごと削除したいのですが
RemoveDirだとフォルダ内にファイルがあると削除できません

ファイルはどんな関数を使ってDeleteしたら良いですか?

また良い方法あったら教えて下さい
よろしくお願いします
633デフォルトの名無しさん:2008/02/19(火) 20:03:26
>>632
SHFileOperation
634デフォルトの名無しさん:2008/02/19(火) 20:16:00
BDEを使用してデータベースに接続したTDatabaseオブジェクトを
DLLに渡してDLL側でデータベースの操作をしたいのですがうまくいきません。

以下試したこと

・接続済のTDatabaseをDLLの引数で渡してDLL側でTQueryを作成、DatabaseNameプロパティを設定する
    ↓
 TQuery.Openを実行した際にデータベースのログオンダイアログが表示される

・接続済のTDatabaseをDLLの引数で渡し、
 DLL側のSession変数を引数のTDatabase.Sessionと置き換えて
 データベースの操作が終わった後に元に戻す
    ↓
 アプリケーション終了時にアクセス違反

・アプリケーション側で作成・初期化済のTQueryをDLLの引数で渡す
    ↓
 TQuery.Openを実行した場合は問題ないが、
 TQuery.ExecSQLを実行するとアプリケーション終了時にアクセス違反

環境はDelphi5+SQLServer2000です。何かいい方法があれば教えてください。
635デフォルトの名無しさん:2008/02/19(火) 20:22:18
TreeViewの項目のDnDによる並べ替えって全部自分で書かないといけないんですか?
受け入れ可能かどうか(自分の子に移動しようとしていないかも含めて)の判定とか移動とか全部。
636デフォルトの名無しさん:2008/02/19(火) 21:39:41
うn
637デフォルトの名無しさん:2008/02/19(火) 23:08:58
>634
そういうのはあんまりお勧めしないけど、やりたいなら普通のDLLじゃなくてパッケージにするのが吉。
638デフォルトの名無しさん:2008/02/20(水) 03:17:50
>>634
オブジェクトを渡すなんて危険すぎる。
639634:2008/02/20(水) 17:53:01
色々試してみた結果、DLL内部にTDatabaseオブジェクトを作成して
データベースに接続させれば期待通りの動作ができました。

TADOConnectionならインスタンス直渡ししても大丈夫だったのに
TDatabaseだとおかしくなるのが不思議。BDEが絡むせいですかねぇ

>>637
当初の目的がDLLで機能を追加できるプラグイン的なものを作るというものだったので
LoadPackageを使えばパッケージでも大丈夫かなと思ったのですが、
LoadPackageを使ったサンプルコードが見つからずに挫折しましたorz

>>638
今までTStringListやら独自に作成したクラスを渡したりしたDLLを作って
問題なく動作していたのですが、やっぱりやめた方がいいですか?
一応DLLも呼出元アプリケーションもDelphiで作ったもの以外は動作保証外としています
640デフォルトの名無しさん:2008/02/20(水) 18:59:55
turbo delphiを使ってます。
TTabControlにコンポーネント貼った後、タブを切り替えたときに
貼ったやつを消したいんですが、すべて消す命令が見当たりません。
全コンポーネントをvisible=falseにするのでしょうか? そんなわけないと思うんですが・・・

そして消した後、新しくコンポーネントを貼るにはどうすればいいですか?
最初のタブに貼ったコンポーネントが邪魔になったりしないのでしょうか?
641デフォルトの名無しさん:2008/02/20(水) 19:11:52
基本的にDLLでクラス渡しちゃだめ

理由は、Delphi6プログラミングバイブルとかいう分厚い本に色々書いてあった
DLLは、あくまで関数ポインタとリソースしか渡さんようにするのが無難
642デフォルトの名無しさん:2008/02/20(水) 19:12:48
>>640
TTabControlは、名前と裏腹に簡単にタブのシステムを作るものじゃない

そういうのはTPageControlだったかな
643デフォルトの名無しさん:2008/02/20(水) 19:24:20
>>642
そうなんですか・・・
ttabcontrolでぐぐっても切り替えについて出てこないわけだ orz
644デフォルトの名無しさん:2008/02/21(木) 00:21:20
Delphi初心者です
アプリを作っていて、デフォルトはタブ1個なアプリです。
新規作成タブを押したら新規にタブを作成するのと
削除機能を各タブに持たせるにはどうすればよいのでしょうか?

IE7を100%マネています。
645デフォルトの名無しさん:2008/02/21(木) 00:31:51
メタファイルを作る練習をしているのですが、何も表示されません。
どこが変なのでしょうか?お助けください。
paintbox1をFormに貼り付けたあと、
procedure TForm1.FormCreate(Sender: TObject);
var
s:String;
MF:TmetaFile;
MFC:TMetaFileCanvas;
ACanvas:TCanvas;
begin
PaintBox1.Align := alClient;
MF:=TMetaFile.Create;
ACanvas:=Paintbox1.Canvas.Create;
try
MF.MMHeight:=1480;
MF.MMWidth:=1000;
MFC:=TmetaFileCanvas.Create(MF,ACanvas.Handle);
646デフォルトの名無しさん:2008/02/21(木) 00:32:52
try
SetMapMode(MFC.Handle,MM_LOMETRIC);
MFC.Brush.Color:=clWhite;
MFC.Rectangle(0,0,800,-1400);
MFC.Font.Height:=70;
MFC.Brush.Style:=bsClear;
S:='Hello World';
MFC.TextOut(50,-50,S);
finally
MFC.Free;
end;
ACanvas.StretchDraw(Rect(0,0,100,-100),MF);
finally
MF.Free;
end;
end;
end.
なぜ???
647デフォルトの名無しさん:2008/02/21(木) 00:59:00
>>626
知りたいことはあるんだがこのスレ敷居が高くて聞けない感じ、な人もいるかも。
恥を忍んで・・・
procedure hoge(var i:Integer);

procedure hoge(i:Integer);
の違い教えて
648デフォルトの名無しさん:2008/02/21(木) 01:47:39
(var i:Integer); の時は、i の値がプロシジャー内部で変更された時に
外部から変更後の値にアクセス可能。(i:Integer); の時は渡すだけ。
649デフォルトの名無しさん:2008/02/21(木) 01:51:36
参照渡しと値渡しってやつだね
650デフォルトの名無しさん:2008/02/21(木) 01:54:00
>>639
将来痛い目見てください。
651デフォルトの名無しさん:2008/02/21(木) 02:30:26
Hoge(var i:Integer); は実際にはポインタで渡されている。
つまり、Hoge(i: ^Integer); もしくは、Hoge(i: PInteger);の意味。

procedure Hoge(var i:Integer);
begin
 i := 10;
end;

procedure Hoge(i: PInteger);
begin
 i^ := 10;
end;
652デフォルトの名無しさん:2008/02/21(木) 08:58:44
>>639
そういうふうにすると、コンパイルオプションが違うだけで変な事になるのでやめたほうがいい。
当然コンパイラのバージョンやVCLのバージョンが違うと動かないと考えた方がいい。

1、Exe側でDLLの作った TStringListを受け取っても、
 自分ではアクセスしない事。だからPointer型とかTObject型で受け取る事

2、Exe側から中身を見たい時は DLL側に関数を作ってやる事。
DLL側に function GetString(StringList:TObject ; LineNo:Integer):string;
のような感じでアクセスする関数を作ってそれを呼び出すようにすると
 バージョンが違ってもアクセス出来る
653デフォルトの名無しさん:2008/02/21(木) 12:48:57
DMonkeyってDLLかなんかに切り出しておいてDLLがあったら
スクリプト機能を利用するという感じにはできないのかな。
今の時代にはたいしたことないとは言え組み込むとEXEが1M超えるんだよな。

どうでもいいけどStickypaperという付箋アプリでDMonkey対応していた。
654639:2008/02/21(木) 14:21:00
よく考えたらVCLのバージョンで実装が違うクラスも結構あるし、
オブジェクトをそのまま渡して使うやり方はまずかったですね。
早速修正することにします。

そこで改めて質問があるのですが、DLLにクラスメソッドのポインタを渡して
コールバック関数のようにDLL側からEXE側のクラスメソッドを呼び出しても大丈夫なのでしょうか?
655デフォルトの名無しさん:2008/02/21(木) 15:55:47
>>654
素直に、メソッドをグローバル関数でラップしてやってそれをコールバックするのが無難
656デフォルトの名無しさん:2008/02/21(木) 16:18:35
それは大丈夫。
Senderとかの引数でDLL側のクラスを渡さなければ
657デフォルトの名無しさん:2008/02/21(木) 16:25:47
Delphiのメソッドポインタは8バイトですぜ
あれとあれのセット。
658デフォルトの名無しさん:2008/02/21(木) 16:29:31
>>654
メソッドポインタの仕様まで変更される事はないわけで

DLL側からEXE側のメソッドを呼び出すのに問題は生じない。
ただし、その引数でDLL側のオブジェクトを渡すと仕様変更される可能性があるので駄目
659デフォルトの名無しさん:2008/02/21(木) 18:31:57
Del7でほぼ空のプロジェクトでアイコン設定すると
[エラー] RLINK32: Out of memory!
というエラーが出るようになってしまったんだけどどうすれば直りますか?
メモリは500MB以上空いてます。
660デフォルトの名無しさん:2008/02/21(木) 19:53:24
>>644をお願いします。
メモ帳にタブ機能を持たせたいんです。
661634=639=654:2008/02/21(木) 20:34:07
基本のデータ型を使うならメソッドポインタは使っても大丈夫なんですね。
これで何とかなりそうです。ありがとうございました。


>>660
ページコントロールを使ってるなら↓のコードで増やせますよ

procedure TForm1.PageControl1MouseUp(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
var
 Sheet: TTabSheet;
begin

 if PageControl1.IndexOfTabAt(X, Y) = 0 then begin
  Sheet := TTabSheet.Create(PageControl1);
  Sheet.PageControl := PageControl1;
 end;

end;
662デフォルトの名無しさん:2008/02/21(木) 20:46:21
でもメモ帳でタブ機能なら、やっぱTabControlだろーな
TabControl1.Tabs.Addぢゃないかな そんでMemo1.clearとか
663デフォルトの名無しさん:2008/02/21(木) 20:49:09
>>661
>基本のデータ型を使うならメソッドポインタは使っても大丈夫なんですね。

俺は微妙だと思う。
あんまりやらん方がいいと思う。
後々になって、クラスの定義でメソッドが仮装メソッドとかに変更するケースとか考えると危険な気がする。
>>655の言うとおり、関数でラップする方が恐らく安全。
664デフォルトの名無しさん:2008/02/21(木) 21:08:39
クラスを直接使ってはいけないから、仮想メソッド呼び出しを書いてはいけない。
というか、メソッドもDLL側でメソッド呼び出しを書くと、DLL側にメソッドがリンクされてしまう。

でも、メソッドポインタ経由なら基本的には大丈夫。
というか、メイン側のメソッドをDLL側から呼ぶにはメソッドポインタを使うしかないと思う。
665デフォルトの名無しさん:2008/02/21(木) 21:54:57
普通はコールバック関数にすると思うが。
やっちゃいけないのはクラスのメソッドのポインタ経由の呼び出し、じゃないかな。
666デフォルトの名無しさん:2008/02/21(木) 22:16:36
>>665
そのポインタに設定する処理をexe側で行えば大丈夫だよ。
クラスのメソッドがバーチャルでも、exe側がメソッドアドレスを解決してDLL側が
ポインタ経由で呼び出すなら問題はない
667デフォルトの名無しさん:2008/02/21(木) 22:33:36
今後のDelphiでメソッドポインタの取扱がかわらんという保証は無いからなあ
DLL使うならやっぱり関数にしといた方が無難ちゃいますか
668デフォルトの名無しさん:2008/02/21(木) 22:38:43
ラッピングするなりして、DLLでいつも通り関数で渡せば
相手はDelphiじゃなくてもVCでもABでもなんでもいいという利点もあるしね。
669デフォルトの名無しさん:2008/02/21(木) 22:55:57
コールバックさせたい場合、メソッドポインタを分解して
ポインタ一つとコールバック関数で渡して、呼び出す時にまたポインタ返せって事だろうけど
そこまで手間かける事もないんじゃない?

ソレをやりたいなら、やりたい人が中継するDLLを作ればいいんだしさ。

670デフォルトの名無しさん:2008/02/21(木) 23:40:25
そんなにオブジェクト共有したケりゃもうインターフェース挟んじゃえよ
671デフォルトの名無しさん:2008/02/22(金) 00:15:01
>>669
もしくは、

functrion hoge( instance : pointer ; etc... ):integer;
begin
TClass(pointer).hogemethod(etc...);
end;

ってなラップした関数をDLLからエクスポートするとか
672デフォルトの名無しさん:2008/02/22(金) 00:18:17
普通に考えれば、DLL でクラスのオブジェクトを渡したい状況とは、
実際にはDLLにする必要がない場合か、DLLにする理由なんかない場合が
ほとんど。だって、パッケージを共有しないかぎりオブジェクト内の
あらゆる参照(プロパティーやメソッド)が EXE 側の対応するオブジェクトの
それと一致する保障なんかないし、共通パッケージを使わなければならないなら
そもそもDLLにする必要なんかない。
673デフォルトの名無しさん:2008/02/22(金) 00:26:12
そりゃそうだ
674ななしへたぐらま ◆XcB18Bks.Y :2008/02/22(金) 00:40:04
>>645
描画するタイミングの問題です。
ペイントボックスのOnPaintイベントハンドラで描画してください。

1. MFをローカル変数ではなくフォームのフィールド変数にする
 (FMetafileみたいに誰が見てもすぐにわかる名前にするのが良い)

2. フォームのOnCreate(またはコンストラクタ)でメタファイルオブジェクトを生成して中身も作成。

3. ペイントボックスのOnPaintでPaintbox1のキャンバスに描画
 例) PaintBox1.Canvas.StretchDraw(ACanvas.StretchDraw(Rect(0,0,100,-100),MF);

4. フォームのOnDestroy(またはデストラクタ)でメタファイルオブジェクトを破棄

※なお元のソースコードにあるAMetafileは無意味です。
 メタファイルの参照デバイスコンテキストを画面にする場合、
 つまり画面表示だけが目的なら0を指定すればOKです。
 例)mfc := TMetafileCanvas.Create(aMetafile, 0)


Windowsは画面のキャンバスに描画した内容は覚えていません。
画用紙に鉛筆でウィンドウを描いて消しゴムで消すのをイメージしていただくとわかりやすいと思いますが
Windowsではそういう風にしていくつものウィンドウを描いています。

そのためアプリは最初にウィンドウが表示(描画)されたときと
一旦隠されたウィンドウが再び表示されたときにいちいち自分で描画しなければなりません。
(ボタンやエディットボックスなどはWindowsが自分で描画するのでアプリの方で描画する必要はありません)

ペイントボックスやフォームではその描画を行うのがOnPaintイベントです。
(イメージコンポではその描画を内部で行っているので
プログラマーはWindowsの内部処理を意識しなくて済んでいるのです)
675デフォルトの名無しさん:2008/02/22(金) 00:42:33
いくつかのブラウザでタスクバーも全部隠す「全画面化」機能ってありますよね
あれをDelphiで実装するにはどうすれば良いんでしょうか?
676ミ,,゚Д゚彡 ◆A6VzDeLphI :2008/02/22(金) 01:22:19
>>662さん

スクロール位置保存とか選択範囲とか考えだすと、
メモ帳でタブ機能でもPageControlの方が楽じゃないかな。
677Delフサギコ ◆A6VzDeLphI :2008/02/22(金) 01:25:22
    ∧,,∧    >>675さん
   ミ,,゚Д゚彡 
   ,;゙   ミ   
 〜ミ,,,,,UUミ   

BorderSyle、bsNoneにして
タスクバー含まない領域の大きさにして
あげるのではないでしょうか?

http://delfusa.main.jp/delfusafloor/opensource/delfusalibrary/20070828160200/WindowUnit/WindowUnit.pas.txt
function NoneTaskBarDesktopRect: TRect;

このあたりを使えば楽そうですが。

678デフォルトの名無しさん:2008/02/22(金) 01:50:20
思ったけど、DLLでオブジェクトうんぬん悩むなら、
実行時パッケージ?だかなんだかを使えばいいんじゃないのかな?
これなら、オブジェクト使いまくりでも大丈夫なはず。
もちろん、バージョン変えたらあかんが
679デフォルトの名無しさん:2008/02/22(金) 02:33:51
>678
俺もそう思うんだが >639 だそうで。
680デフォルトの名無しさん:2008/02/22(金) 03:23:00
4点教えてください。

1.Turbo DelphiってVISTAでも動きますか?

2.Turbo DelphiでSQLサーバのDBをみれますか?

3.Delphi 2007 for Win32 ProfessionalではSQLサーバのDBは見れないのですか?

4.Delphi ってエンドユーザプログラム向きの言語ですか?
681デフォルトの名無しさん:2008/02/22(金) 08:59:22
1.はい(保証外)
2.はい
3.いいえ
4.はい
682デフォルトの名無しさん:2008/02/22(金) 09:31:41
>>671
ソレをやったら、hogemethodはDLL側に作られてるわけでEXE側のhogemethodは呼ばれないのでは?

メソッドポインタのレコード型を渡す関数をDLL側で公開しておいて
EXE側でメソッドポインタをセットアップし
DLL側で、メソッドポインタ間接で呼び出すしたらいいと思うけど
683デフォルトの名無しさん:2008/02/22(金) 11:44:53
本体にクラスを定義するのなら、
メソッドをラップした関数のポインタをDLLに渡してコールバックさせろということになるな。

結局、メソッドポインタをexeからDLLに渡して実行ってのは賛否両論だな。
俺も将来メソッドポインタの仕様がかわらんという保証は無いと思うし、
stdcallな関数ポインタでラップすれば、Delphi以外の開発環境製のDLLでも使えるしで、
直接メソッドポインタを渡すような仕様には賛成しないな。
684デフォルトの名無しさん:2008/02/22(金) 12:10:57
メソッドポインタの仕様が将来変わるって、
.NETのように複数の関数をつなげられるような仕様になるって事か?
まあ、そうなったバージョンはWin32では使わないだろうから心配するな。 杞憂って奴さ。
685デフォルトの名無しさん:2008/02/22(金) 13:02:16
前半4バイトと後半4バイトの意味が逆になるだけでも…ってそんなのも杞憂だろうけど。どこまで考えるかは本人次第か。
686デフォルトの名無しさん:2008/02/22(金) 14:40:55
ファイルから文字列を読み込んで、一行ずつ先頭に空白が何個あるか調べたいんだけど、
どうやれば良いんだろう。

if (x行のi文字目 != ' ') then
 break
else
 kuuhaku++;

みたいな感じのを毎行やりたい。
ファイルの読み込みはどうやったら良いんだろう?
また文字列の型は?
687デフォルトの名無しさん:2008/02/22(金) 15:05:11
だから、昔Delphiでランタイムが必要になるって顰蹙をかったアレを使えばいいんじゃねーの?
688デフォルトの名無しさん:2008/02/22(金) 15:10:25
var f: textfile; s: string;
begin
    assignfile(f, 'test.txt');
    reset(f);
    while not Eof(f) do
    begin
        readln(f,s);
        for i := 1 to length(s) do
            if s[i] != ' ' then
            begin
                writeln(i-1, ':', s);
                break;
            end;
    end;
    closefile(f);
end;
689デフォルトの名無しさん:2008/02/22(金) 15:16:48
>>686
簡単に行いたいならTStringList.LoadFromFileを使用すればOK
後はTMemoと同じように扱える

ファイルが見つからないときEFOpenErrer例外が発生するのが嫌なら
FileExsistsで事前に調べればOK
690デフォルトの名無しさん:2008/02/22(金) 15:52:42
>>688
ありがとうございます!出来ました。
まだファイルの入出力について理解が出来てないみたいです。
もうちょい勉強してみます。

>>689
TStringListを使った場合、i文字目というのはどういう風にしたら良いんでしょうか?
691デフォルトの名無しさん:2008/02/22(金) 16:01:47
>>689
× FileExsists
○ FileExists
692デフォルトの名無しさん:2008/02/22(金) 17:01:21
デフォルトプロパティの話は別にして、
var
sl: TStringList;
なら
if sl.Strings[i][1] = ' ' then
でi行目の1文字目が空白かどうか判別可能

注意点として、Strings[i]はプロパティであるため
sl.Strings[i][1] := 'a';
みたいに代入することは無理
これは
Inc(Form1.Width);
が不可能なのと一緒です
編集したい場合は一旦stringにコピーして、編集後に戻してやるのが
手っ取り早いです
693デフォルトの名無しさん:2008/02/22(金) 17:05:55
>>692
ありがとうございます。
二次元配列みたいな感じで良いんですね。
以前エラーが出たのは代入しようとしたらからですね…それで引っかかって…。
みなさんありがとうございました。
694デフォルトの名無しさん:2008/02/22(金) 23:32:00
FormのWinControl.DoubleBufferedにTrueを突っ込んでもBevel, Labe, Imageなんかがまだチカチカするんだけど
これ以上はどうにもならない?
695デフォルトの名無しさん:2008/02/23(土) 02:00:44
すみません、質問です。
現在、TWebBrowser でアプリケーションの作成を行っているのですが、
そのアプリで表示させている Web ページ のフォーム(?たとえば Google の検索ボックスなど)に
入力する場合、IE などであれば、オートコンプリートで、入力補完されるのですが、
TWebBrowser ではオートコンプリートが効きません。
何か改善方法ご存知の方いらっしゃいますか?

696デフォルトの名無しさん:2008/02/23(土) 02:49:43
>>694
どんな設計・実装で何をした時にちらつくのか
697デフォルトの名無しさん:2008/02/23(土) 02:58:43
s := sl[i]; とやれば、
sの先頭に空白が何個あるか調べればいいだけ。
分けて単純化して考えよう。
698デフォルトの名無しさん:2008/02/23(土) 04:00:30
リッチエディットについて質問です。

『太字のABC』など、「書式情報付きの文字列」を、
「リッチエディットに代入可能な変数」(string型?)で表現するには
どうすればいいでしょうか?

例)
s := '<b>ABC</b>';// ←HTML方式なので実際には間違いですが、イメージ的にはこの様にしたいです
richEdit1.lines.add(s);
699デフォルトの名無しさん:2008/02/23(土) 06:15:06
RichEdit をつかって Webページを表示したり、HTML エディタを作ろうとか
考えているなら無理だからね。
700デフォルトの名無しさん:2008/02/23(土) 06:25:46
>>698
太字にして保存してみたらいいんじゃね?
701デフォルトの名無しさん:2008/02/23(土) 09:59:19
>>698
richEdit1.lines.add(s);
richEdit1.SelAttributes.Style := [fsBold]; //太字あり
richEdit1.lines.add(s);
richEdit1.SelAttributes.Style := []; //太字なし
こんな感じ?
702デフォルトの名無しさん:2008/02/23(土) 10:54:52
読み込み時に限定すれば、
html→rtfの変換をするTConversion派生クラスを書いて、TRichEdit.DefaultConverterに代入し、
そこにTRichEdit.LoadFromStreamでHTMLを読み込むのがちばん高速かつ本来期待されるやり方かな。

ちょっと違うけどTConversion派生クラスの例。
ttp://delfusa.main.jp/delfusafloor/archive/www.nifty.ne.jp_forum_fdelphi/samples/00328.html

rtfの中身はhtmlとはやや違うけど似たようなタグ付きテキストなので、ググったり自分でワードパッドを使って
調べることもできるはず。


でもこれが実用的だとは思わないな。。。
703698:2008/02/23(土) 11:10:59
>>699
HTMLエディタほど複雑ではないのですが、無理でしょうか…。

>>700
rtfファイルを他のエディタで開いてみました。
書式情報らしき記号はあったのですが、訳が分かりませんでした…

>>701
ありがとうございます。
シンプルなものはそれで大丈夫なのですが、
今回は予約語を太字にしたいので、置換の処理を使うとなると難しいです。
(私の書き方が足りなかったです)

>>702
ありがとうございます。まさにこれかも、です。
HTMLは例えのつもりでしたが、
まさか実際にHTMLを経由させるやり方があるとは思いませんでした。

TConversionやTRichEdit.DefaultConverterは初見なので、
これから調べたいと思います。
704702:2008/02/23(土) 17:49:32
あれ、元のデータがHTMLって訳じゃなくて、フォーマットは問わないのか。
それなら最初からrtfフォーマットでデータを用意して、それそのままTRichEdit.Lines.LoadFromStreamすればいいよ。
例としては、こんな感じで。

procedure TForm1.Button1Click(Sender: TObject);
var
 Str: TStringStream;
begin
 Str := TStringStream.Create('{\rtf Plain \par {\b Bold} \par {\i Italic}}');
 RichEdit1.Lines.LoadFromStream(Str);
 Str.Free;
end;
705デフォルトの名無しさん:2008/02/23(土) 21:27:27
StringGridでセルの幅を
入力された文字列の幅(一覧の最大幅)に合わせたいのですが

文字列の表示に必要な幅を求めるにはどうしたらよいでしょうか?
Canvas関数のTextWidthでは幅がピクセル値になってしまい

StringGrid.ColWidth:= TextWidth('文字列')

では上手く出来ません(幅が狭くなる)
ピクセル値をクライアント幅の単位に直す関数ってありましたっけ?

それともなんか良い方法があるんですかね?

どうぞよろしくお願いします
706698:2008/02/23(土) 21:31:12
>>704
そんな手があったとは…。まさにやりたかったことです。
ご丁寧に、どうもありがとうございました!
707デフォルトの名無しさん:2008/02/23(土) 23:17:26
>>705
それでいいと思うが・・つか、両端にマージン取れよ。
708デフォルトの名無しさん:2008/02/23(土) 23:30:27
> 674
お返事、ありがとうございました。出張中で確かめられませんが、
帰ったら確かめてみます。本当にありがとうございました。
709デフォルトの名無しさん:2008/02/24(日) 00:31:40
>>705
Canvas.Fontにフォント代入しとけ
710デフォルトの名無しさん:2008/02/24(日) 02:16:49
>ピクセル値をクライアント幅の単位に直す関数ってありましたっけ?

クライアント幅ってなに?

711デフォルトの名無しさん:2008/02/24(日) 03:54:31
>>677
ありがとうございます、教えて頂いた通りにすればうまくいきました。
712デフォルトの名無しさん:2008/02/24(日) 04:23:11
TImage 内で RECTで指定されてる範囲内のみをJPEGで保存するにはどうすれば良いでしょうか?
TJPEGImage の LoadFromStream を使うような気がするのですが使い方がわかりません…。
713 ◆XcB18Bks.Y :2008/02/24(日) 09:59:28
ビットマップオブジェクトを1つ用意して幅と高さをイメージコンポの指定範囲と同じにする
 ↓
イメージコンポの指定範囲をイメージコンポのキャンバスのCopyRectメソッドで
上のビットマップオブジェクトにコピー
 ↓
JpegオブジェクトのAssignメソッドで上のビットマップの内容をコピー

…寝起きで動作確認していませんがこんなのでどうでしょう?
714デフォルトの名無しさん:2008/02/24(日) 10:17:55
Formatって%05dとかやっても00005にならないんですが、
文字列のフォーマットって何か他に方法ないんでしょうか。
715デフォルトの名無しさん:2008/02/24(日) 10:25:59
%.5Dか%5.Dじゃない?どっちかは忘れた。
716デフォルトの名無しさん:2008/02/24(日) 10:32:12
>>714
ヘルプのFormatのところをよく読め(旧バージョンなら「形式文字列」のところな)
717デフォルトの名無しさん:2008/02/24(日) 11:03:38
おおう。
失礼しました。ありがとうございました。
718デフォルトの名無しさん:2008/02/24(日) 13:15:31
>>695
IDocHostUIHandlerの実装が必要です。
EmbeddedWBのソースが参考になると思います。
719デフォルトの名無しさん:2008/02/24(日) 14:02:35
たまにソースコードの最後がend.からnd.
になってprocedureがeprocedureになるんだが
なんで?(Delphi2006)
720デフォルトの名無しさん:2008/02/24(日) 14:07:49
心霊現…
721デフォルトの名無しさん:2008/02/24(日) 16:06:30
>>719
Ctrl + Shift + C でクラスを定義するときにたまーになるね(D7)
722デフォルトの名無しさん:2008/02/24(日) 16:09:06
フォームのサイズが時々勝手に変わってるような気がするのも
心霊g
723デフォルトの名無しさん:2008/02/24(日) 21:55:16
フォームの保存形式が勝手にUTF-8になって文字化けしたりとか
724デフォルトの名無しさん:2008/02/25(月) 01:04:43
>>718
ありがとうございます。調べてみます!
725デフォルトの名無しさん:2008/02/25(月) 03:03:33
cファイルをobjにコンパイルしてリンクするとき、
cファイルが例えばprintfを使うときはどうすればいいのでしょう?
objファイルにprintfのルーチンをリンクすることが出来ません。
726デフォルトの名無しさん:2008/02/25(月) 03:11:55
ほかはできてるのか?
727デフォルトの名無しさん:2008/02/25(月) 03:52:46
>>726
他の関数もAPIも駄目です。
728デフォルトの名無しさん:2008/02/25(月) 06:47:42
C側で使ってる全部をリンクしないといけない。
printfのようにように浮動小数点を含んでいるとその範囲は広大になる。
729デフォルトの名無しさん:2008/02/25(月) 07:46:03
>objファイルにprintfのルーチンをリンクすることが出来ません。
そもそもここがおかしい
730デフォルトの名無しさん:2008/02/25(月) 09:52:17
Delphi.NET, VCL.NETって全部UNICODEベースなの?
TNT使うならこっちのがいいのかな。
731デフォルトの名無しさん:2008/02/25(月) 11:14:59
TWebBrowserについて質問なのですが、
横幅が510以下くらいになると、何故か画面に映らなくなってしまいます。

スプリッターで幅を可変にしたいのですが、困ってます。

何か解決方法はありませんか?
732デフォルトの名無しさん:2008/02/25(月) 14:02:46
>>725
ttp://www.rvelthuis.de/downloads.html
のmsvcrt.pasなどを利用してmsvcrt.dllを利用する。

もしくは下のような宣言を{$L xxx.obj}の上か、usesしている
別のユニットに書けばできる……はず。

function _printf(fmt: PChar; args: Pointer): Integer; cdecl;
var
buffer: array[0..1023] of Char;
begin
Result := wvsprintf(@buffer, fmt, @args);
write(Copy(buffer, 0, Result));
end;
733732:2008/02/25(月) 15:11:23
732はCopyの使い方が変だった。
write(buffer);
と書くだけでよし。
734725:2008/02/25(月) 16:10:56
>>732
printfを使ったcのファイルをobjにしてdcuにリンクするときに問題なのです。
735デフォルトの名無しさん:2008/02/25(月) 16:12:53
素直にDLLにする
736デフォルトの名無しさん:2008/02/25(月) 16:32:36
今までINI<->変数<->設定ダイアログのコンポーネント<->INI
という煩雑なデータのやり取りしてたけど
INI<->メインフォームに置いた設定タブのコントロール
にしてアプリは直接FilePathEdit.Textとかから値読み出すとめっちゃ実装が楽になるな。
使うほうもモーダルなダイアログいちいち開かずにすむし。
737デフォルトの名無しさん:2008/02/25(月) 16:42:44
>>736
kwsk
738デフォルトの名無しさん:2008/02/25(月) 16:45:04
>>736
設定タブのコントロールってなんぞ?
739732:2008/02/25(月) 16:46:20
>>734
「printfを使ったcのファイルをobjにしてdcuにリンクする」場合だから、
pas側でprintfを宣言し、c側の関数にそのpas側で宣言したprintf
を利用させてやる でOKだと思ったのだが……
740デフォルトの名無しさん:2008/02/25(月) 19:01:18
BCC/BCBのCW32MT.LIBリンクしても駄目かね?
http://dn.codegear.com/cn/print/33545
741デフォルトの名無しさん:2008/02/25(月) 22:26:32
動的なメニューの作成について質問です。
1
,2
,3
,,4
,5
,,6
,,,7
と保存されているファイルを読み込むと
1
ト2
ト3
 4
ト5
 6
   7
というようなメニューが作れるようにたいんですが、どうすれば良いのでしょうか?
メニューの追加はわかるのですが、サブメニューの追加方法がわかりません。
742725:2008/02/25(月) 22:58:15
>>739
失礼しました。 cからpasの関数を呼び出せないと思ってたので。
でも、やってみたら出来ました。 APIの呼び出しも uses Windows で出来ました。

>>740
dcuファイルに、.LIBファイルをリンクできるのですか?
743デフォルトの名無しさん:2008/02/26(火) 01:46:11
>>741
MenuItem1.Items.Add(MenuItem2);
744デフォルトの名無しさん:2008/02/26(火) 08:34:53
Delphiでファイルサイズを小さくしたい時にパッカー以外で何かありますか?
745デフォルトの名無しさん:2008/02/26(火) 11:17:11
kol
746デフォルトの名無しさん:2008/02/26(火) 12:06:04
var
I: Int64;
RepeatCount: Longword;
begin
for I := 0 to RepeatCount - 1 do
end;
なんで、Int64型の制御変数使えないの?
いちいち、while文で書き換えなきゃいけないの?
なんで、Delphiコンパイラこんなにウンコなの?
747デフォルトの名無しさん:2008/02/26(火) 12:30:46
IA32命令を吐くコンパイラなので、Int64型の変数をループ変数に使うのは非効率だからです
748デフォルトの名無しさん:2008/02/26(火) 13:25:45
非効率なりに対応すればいいと思うが。
749デフォルトの名無しさん:2008/02/26(火) 14:09:46
Delphi5でボリューム名を知りたいんですが
GetVolumeNameForVolumeMountPoint
をサポートする関数等は用意されていないんでしょうか?
750デフォルトの名無しさん:2008/02/26(火) 14:23:43
ググレカス
751デフォルトの名無しさん:2008/02/26(火) 14:52:28
>>750
ぐぐったところでサッパリですわ
752デフォルトの名無しさん:2008/02/26(火) 16:19:29
>>745
kol使うとIndyとか他のコンポ使えなくないですか?
やはりすべてAPIで書く以外にないんでしょうか・・・。
753デフォルトの名無しさん:2008/02/26(火) 16:25:02
フリーのエディタのコンポーネントを探しています。

最低限、欲しいのはアンドゥ機能です。
何かいいのありませんか?

754デフォルトの名無しさん:2008/02/26(火) 17:12:17
>>753
TMemo
755デフォルトの名無しさん:2008/02/26(火) 20:43:22
>>749,751
GetVolumeNameForVolumeMountPoint Delphi
で検索したらトップで出てきたぞ。よーするにないから自分で宣言しろと。

ttp://www.koders.com/delphi/fid667399AEBCB62FC07F3716A9243DDC30A9F22339.aspx
756 ◆XcB18Bks.Y :2008/02/26(火) 22:34:43
>>755
APIの名前がわかっている場合は
APIの名前とDelphiで検索すると高い確率でヒットしますね。
757デフォルトの名無しさん:2008/02/26(火) 23:29:04
いきなりブレークポイントが効かなくなるときがあります
F9押したらその行が緑色になって止まってくれません
コンパイラオプションを変えたかしらと正常なプロジェクトと全く同じにしてもダメでした
「ブレークポイント 突然」でググッてもVisual Studioの場合しか有効な情報はありませんでした
どなたかお願いいたします
758デフォルトの名無しさん:2008/02/26(火) 23:33:44
>757
いつもの最適化の話じゃないんだよね?Delphiのバージョンによっては同一のプロジェクトグループの
異なるプロジェクトに同一名の(パス違いの)ユニットがあるとIDEが混乱することがあるんだけど、
そういうことでもなく?
759デフォルトの名無しさん:2008/02/26(火) 23:49:02
教えて君向け検索ツールをうpってみた。ctrl+alt+sにアサインしておくと便利だぜ。
http://delwiki.info/?%B8%A1%BA%F7%BB%D9%B1%E7
http://delwiki.info/?c=plugin;plugin=attach_download;p=%B8%A1%BA%F7%BB%D9%B1%E7;file_name=ggl.png
760デフォルトの名無しさん:2008/02/26(火) 23:59:15
>>743
なんか根っこから間違えてたみたいですね。
ありがとうございました。
761デフォルトの名無しさん:2008/02/27(水) 02:50:25
>>757
実行中に各行の横に青い丸が出るだろ。あれが付いてない行は
実行対象外なのでブレークポイント張れない。
コンパイルオプション変えたあと再構築はした?
762デフォルトの名無しさん:2008/02/27(水) 08:41:02
>>746
お前の脳がウンコ
763デフォルトの名無しさん:2008/02/27(水) 11:27:26
OnDrawCellイベントの中でDrawGridのセルにDrawGrid.Canvas.TextOutで文字を書いても、実行してセルを選択すると選択枠の下になって文字が消えてしまいます。
どうすればいいんでしょうか?
764763:2008/02/27(水) 13:42:31
自己レスです。
OptionsのRangeSelectの値をいじってたら思うように行きました。
765749:2008/02/27(水) 13:55:47
>>755
なるほど!納得しました!
ありがとうございました
766デフォルトの名無しさん:2008/02/27(水) 19:07:35
ListViewのRepot形式のColumnsにきっちり対応した描画サンプルコードってどこかにないですか。
デフォルトの描画をベースにOwnerDrawしたいんですが。
767デフォルトの名無しさん:2008/02/27(水) 19:30:07
>>766
ListViewのオーナードローはやめとけ。俺は途中で挫折した・・・
768デフォルトの名無しさん:2008/02/27(水) 23:48:06
今日開くと治っていまして原因はまたもや(いろんなプロジェクトでタマになる)
>>758
そのソースはD5でしたのでグループは使っていません
>>761
F9押すときまでは張れると言いますか行の色もOKな色になるんです
で、実行ファイルが始まったとたんに色が変わります
また今度なったら再構築してみます
ありがとございまいたm(..)m
769デフォルトの名無しさん:2008/02/28(木) 00:02:35
毎日一定時刻にある処理をするプログラムなんかを書く場合、
timerで適当な時間ごとに割り込んで、時刻をチェックするという
ような方法がベストなんでしょうか?
 指定時刻にイベントが発生するようなものはないですか?
770デフォルトの名無しさん:2008/02/28(木) 00:04:24
「指定時刻」をどうやってチェックするんだい?
771デフォルトの名無しさん:2008/02/28(木) 00:05:20
ゼンマイ式の外部機器による物理的なスイッチによる割り込み
772デフォルトの名無しさん:2008/02/28(木) 00:06:39
指定時刻まで何ミリ秒かを計算してIntervalに突っ込むか
起動自体はatコマンドかタスクに任せたら。
773デフォルトの名無しさん:2008/02/28(木) 00:13:09
タスクだと、登録時にIDとかパスワード聞いてきて面倒なので。
(定期的にパスワード変えさせられる環境なんで特に。)

そうですね。計算してintervalにセットが一番スマートそうですね。
intervalの値ってlongint位はイケるんでしたっけ?
774デフォルトの名無しさん:2008/02/28(木) 00:13:55
真面目にやるなら時刻調整が入った時にタイマー直す必要があると思うけど
検出法って一定時間ごとにチェックする以外にあるのかな?
775デフォルトの名無しさん:2008/02/28(木) 00:17:25
それが気になるなら1秒ごとに呼べばいいよ。
負荷なんて高が知れてるし。
776デフォルトの名無しさん:2008/02/28(木) 01:26:10
>744
{$SETPEFLAGS 1} // Fixed image. Image doesn't contain reloc table
777デフォルトの名無しさん:2008/02/28(木) 13:25:28
TStringGridで固定セルをセル結合(DrawCellで)したみたのですが
描画には成功しましたものの
グリッドを選択(行選択)すると青背景選択されなくなりました。
どなたか良い思案をお持ちでしょうか?
778デフォルトの名無しさん:2008/02/28(木) 13:28:05
フォーカスが当たっていたらCanvas.Brushの色を変えて自分で選択されているように描画する
779デフォルトの名無しさん:2008/02/28(木) 13:55:38
おお
出来ました。有難うございます。
DrawCellのStateでgdSelectedを捕まえたらうまくいきました。
ちなみにgdFocusedだと行選択なので左端しか該当しなかったのは驚き・・・。
780デフォルトの名無しさん:2008/02/28(木) 15:44:10
Kolを使ってファイルサイズ小さくしたいのですが、これって他のコンポは使えなくなってしまうのでしょうか?
781デフォルトの名無しさん:2008/02/28(木) 18:48:06
ポトペタしたいという話ならそのとおり
ただし自分で生成すればその限りじゃない
782デフォルトの名無しさん:2008/02/28(木) 20:39:46
外部のライブラリなどからC++のクラスオブジェクトのポインタをもらって、
そのメソッドをDelphiのプログラムから使う事ってできますか?
783デフォルトの名無しさん:2008/02/28(木) 20:48:57
上の方で少しでていたけど、タイマー(TTimer)の負荷ってそんなに
問題にならないくらいのモノなの?
自分、ファイルを自動実行するアプリとか、できるだけTTimerのCreate
を増やさないようにしてたんだけど、意味なしだったのかな?
784デフォルトの名無しさん:2008/02/28(木) 20:54:32
BCB使うとか。
COM使うとか。
785デフォルトの名無しさん:2008/02/28(木) 20:58:41
>>783
頻度による
秒やミリ秒と時間事や1日1回では雲泥の差
786デフォルトの名無しさん:2008/02/28(木) 21:01:36
>>782
呼び出し規約があっていて仮想関数でなければ呼べそうな気もするけどどうなんだろう
787デフォルトの名無しさん:2008/02/28(木) 21:02:33
マウスカーソルを上から下に動かすだけで、
ウィンドウをちょっとドラッグするだけで数十数百のメッセージが乱れ飛ぶ環境で
毎秒発生する程度のTimerイベントケチっても焼け石に水。
とりあえず一番楽な方法で実装して重い部分からパフォーマンスチューニングをしていったら
タイマーに手をつけることはまずないだろうな。
788デフォルトの名無しさん:2008/02/28(木) 21:18:47
>>781
あとインストールはできたのですが、KOL使った実行ファイルを作ろうとコンパイルしたら、
以下のようなメッセージがでました。

[致命的エラー] AAAA.dpr(6): ファイル 'ExptIntf.dcu' が見つかりません

ググったんですが、わかりません、解決方法ご存知の方いますでしょうか?

@Delphi6 Personal
789 ◆XcB18Bks.Y :2008/02/28(木) 21:22:27
>>767
遅めのレスですが私も同意見です。
・ヘッダーコンポ+リストボックス
・ヘッダーコンポ+グリッド
・ヘッダーコンポ+グリッド
・グリッド(単独)
のどれかで代用した方がずっと楽に出来ると思います。
790デフォルトの名無しさん:2008/02/28(木) 21:32:29
Turbo Delphi Explorer 2006
をダウンロードしたんですけど、なんかインストール時に登録してくださいとかいわれて
メールに添付されたtxtファイルをあてようと思ったらメールに添付ファイルなんてついてこなかったんですが

どうすればいいんですか?
向こうから来たメールにはシリアルナンバーとキーのみがありまして
txtファイルなんてきてないんです
791デフォルトの名無しさん:2008/02/28(木) 21:48:35
テキスト保存
792デフォルトの名無しさん:2008/02/28(木) 23:17:14
>782
やめとけ。パッケージを使うのでなければDLLとのやりとりはCのインタフェースに限定するのが望ましい。
793デフォルトの名無しさん:2008/02/28(木) 23:42:23
>>782
そういう目的のために、オブジェクトインターフェースがある。

>>788
ここには再構築したらいいと書いてあるが。
http://ww.delphimaster.ru/cgi-bin/forum.pl?id=1192910949&n=10&toprint=1
794デフォルトの名無しさん:2008/02/29(金) 03:23:44
>>784
BCB使ってもTObject派生じゃないと互換性ないよ。
795デフォルトの名無しさん:2008/02/29(金) 08:16:36
アドビ、SQLite Consortiumに参加で開発を支援:ニュース - CNET Japan
ttp://japan.cnet.com/news/biz/story/0,2000056020,20368174,00.htm
796デフォルトの名無しさん:2008/02/29(金) 09:02:40
>>786
まず、C++の名前は型保証の為の文字列がくっついているからコレを解釈しなければいけない
呼び出し規約といっても、オブジェクトを示す隠れた引数があるから
これを含めて上手くあわせられるかな?
そして、C++側でDLLにクラスのメンバーをエクスポートしてもらわないといけない。

色々考えると、extern "C" で呼び出し関数を作って
それをエクスポートして貰う方がズーっと楽という結論になると思うよ
797デフォルトの名無しさん:2008/02/29(金) 09:16:19
Indyとsynapseではどちらがおすすめですか?
synapseの方が軽そうな気はするのですが悩んでます。
798デフォルトの名無しさん:2008/02/29(金) 10:04:47
悩むんなら、googleで検索して自分の助けになりそうな資料が多いほうを選んだらどう?
799デフォルトの名無しさん:2008/02/29(金) 13:35:35
634あたりからのDLLのコールバックの話を見て俺もやってみようと思ったんだけど
コールバック関数内でクラスメソッドを呼び出そうとすると
アクセス違反が出てどうもうまくいかない。

今やってるやり方は以下の通り

1.DLLにDLLをラップするクラス(以下ラップクラス)のポインタとコールバック関数のポインタを渡す
2.DLLで受け取ったラップクラスをそのまま引数にしてコールバック関数を呼び出す
3.コールバック関数で受け取ったポインタをラップクラス型にキャストして
  ラップクラスが保持するメソッドポインタを呼び出す(ここでアクセス違反エラー)

ちなみに受け渡すポインタをPointer型からTObject型に変えても駄目だった。
何が駄目なんだろう?
800デフォルトの名無しさん:2008/02/29(金) 13:44:32
>>799
全然判らん。 コードで表現してくれない? どっちをDLL側に書いたかEXE側に書いたか明記して
801799:2008/02/29(金) 14:09:39
>>800
失礼。関数を呼び出しているところを抜き出してみたので頼みます。

//DLL
type
 TCallBackFunc = procedure(Sender: Pointer); stdcall;

procedure CallEvent(Sender: TObject; FuncPtr: TCallBackFunc); stdcall;
begin
 FuncPtr(Sender);
end;

//ラップクラスユニット
type

 TCallBackFunc = procedure(Sender: Pointer); stdcall;
 TCallEvent = procedure(Sender: Pointer; FuncPtr: TCallBackFunc); stdcall;

 TDllLoader = class
 private
  CallEvent: TCallEvent;
  mNotifyEvent: TNotifyEvent;
 public
  procedure RaiseEvent(Sender: Pointer; Event: TNotifyEvent);
 end;

procedure CallBackFunc(Sender: Pointer); stdcall;

implementation
802799:2008/02/29(金) 14:10:00
//ラップクラスユニット続き
procedure CallBackFunc(Sender: Pointer); stdcall;
begin

 TDllLoader(Sender^).mNotifyEvent(nil);  //ここでエラーが出る

end;

procedure TDllLoader.RaiseEvent(Sender: Pointer; Event: TNotifyEvent);
var
 hLib: HINST;

begin

 hLib := LoadLibrary('DLLTest.dll');

 @CallEvent := GetProcAddress(hlib, 'CallEvent');

 mNotifyEvent := Event;
 CallEvent(Sender, CallBackFunc);

 FreeLibrary(hlib);

end;
803799:2008/02/29(金) 14:10:54
//ラップクラス呼出元
// usesでラップクラスのユニットを宣言済
procedure TForm1.Button1Click(Sender: TObject);
var
 loader: TDllLoader;
begin

 loader := TDllLoader.Create();
 loader.RaiseEvent(@Self, Button2Click);
 loader.free();

end;

procedure TForm1.Button2Click(Sender: TObject);
begin

 if Sender = nil then
  ShowMessage('CallBack Event')
 else
  showmessage('Button2 Clicked');

end;
804799:2008/02/29(金) 14:12:34
以上です。これでForm1のButton1をクリックすれば"CallBack Event"とメッセージが表示されると想定していました。
805デフォルトの名無しさん:2008/02/29(金) 14:54:42
2箇所間違えているよ

1、
× TDllLoader(Sender^).mNotifyEvent(nil);  //ここでエラーが出る
⇒ TDllLoader(Sender ).mNotifyEvent(nil);  //ここでエラーが出る

クラス型はポインタだから ポインタの参照をしないでいい

2、
×  CallEvent(Sender, CallBackFunc);
⇒  CallEvent(Self , CallBackFunc);
806デフォルトの名無しさん:2008/02/29(金) 15:28:49
標準のものを更に高機能にしたShellTreeView/ListViewってないですか?
807デフォルトの名無しさん:2008/02/29(金) 16:21:22
 loader.RaiseEvent(@Self, Button2Click);
でポインタのポインタを渡しているのに、受け取り側で TObject になってるのはおかしい。
procedure CallEvent(Sender: TObject; FuncPtr: TCallBackFunc); stdcall;

こうして、
procedure CallEvent(Sender: Pointer; FuncPtr: TCallBackFunc); stdcall;
こうするべき。
 if Sender <> nil then
 (TObject(Sender) as TDllLoader).mNotifyEvent(nil);  
型チェックと例外処理はきっちりやっておかないとダメですよ。

変なものを渡せないように、Pointerでは無くて、
type
 THoge = record end;
 HHoge = ^THoge;
なんてやるのもいいかもね。 OpenGL.pasではやってたと思う。
808799:2008/02/29(金) 19:30:13
>>805、807
クラス型はタダのポインタだということを忘れてた(ノ∀`)
指摘の通り修正したら思ってたとおりに動きました。ありがとう!
809デフォルトの名無しさん:2008/02/29(金) 20:30:27
アカウントを持っている場合
"Turbo Delphi Explorer" 若しくは "Turbo Delphi for .NET Explorer" を選択すると
ログイン画面が表示されるのでログインしてください。
すると、自身のメールアドレスが表示されるので [submit] を選択します。
これで、Turbo Delphi がダウンロードできるページへ遷移され、
Borland から Turbo Delphi の起動に必要なファイルが添付されたメールが送られてきます。

添付されてこないんですけど。
インストール番号とインストールキーは発行されたけど
大体これ正確にはシリアルナンバーと認証キーでしょ?
名称一致してない・・・以下転載

これは自動的に生成されたメッセージです - このメールに返信しないでください


Turbo Delphi 2006 Explorer Edition
インストール番号:
インストールキー:
Login Name: @.jp
Trial Login Password:
名: te
姓: te


トライアル版使用許諾情報を再送いたします。上記の Serial Number と Key を使用して、CodeGear 製品トライアル版の使用許諾を行ってください。

CodeGear 製品をお使いいただき、ありがとうございます。CodeGear のコミュニティには弊社の製品を使用してソフトウェアを開発する世界中のデベロッパーが参加しています。コミュニティへ参加してくださったことを歓迎いたします。

CodeGear チーム一同


810デフォルトの名無しさん:2008/02/29(金) 21:16:45
すみません。
これからDelphiを学ぼうと思うのですが、定番の入門書とか勉強コースのようなものはありますか?
ちょっと大き目の本屋に行ってもDelphiのちゃんとした本というか、そもそも体系的な本が見当たらないのです。
ネットの情報等で勉強するしかないんでしょうか?
さしあたっての目標は、自分が使ってる2ちゃんねるブラウザのソースを読めて、
自分なりの機能を付け加えるようにできることなんですが。

自分はC→Javaと始めて、プログラミング初心者の基礎はそれなりにある程度です。
Win32とかはわかりません。
811デフォルトの名無しさん:2008/02/29(金) 21:19:56
>Win32とかはわかりません
ワロタwwww
812デフォルトの名無しさん:2008/02/29(金) 21:54:49
入門書をえり好みできるほどの種類はないから
Amazonで見つかったのを買っちゃうしか。
813デフォルトの名無しさん:2008/02/29(金) 21:58:32
俺も取っ掛かりがどれがいんだかわからん
とりあえずネットで
ttp://www.turboexplorer.com/jp/DelphiTutorial
ここら辺みてどうにかした
814デフォルトの名無しさん:2008/03/01(土) 00:24:32
UIがOrchisのようなソフトを作りたいのですが、
あのメニューみたいのはどういう風に実装してるんでしょうか?
815デフォルトの名無しさん:2008/03/01(土) 01:06:36
>>814
WinSightで見てみたら?
816デフォルトの名無しさん:2008/03/01(土) 02:15:59
Delphi関係って全部ここにあるんだね
ftp://bekins.borland.com/groups/jp/delphi/
D6Personalが欲しかったんで助かった
817デフォルトの名無しさん:2008/03/01(土) 03:23:11
>>816
ありがとん、全部落としたw。
818デフォルトの名無しさん:2008/03/01(土) 04:27:01
>>713
レス遅くなりました、頑張ってみましたが
CopyRectの使い方が間違っていると怒られちゃいます

RがJPEGで保存したい選択範囲です。
正しくはどうかけばいいんでしょうか?

jp :=TJPEGImage.Create;
try
bm :=TBitmap.Create;
try
bm.Width := R.Left - R.Right;
bm.Height := R.Top - R.Bottom;
Image1.Canvas.CopyRect(R, bm.Canvas, Image1.Canvas.ClipRect);
jp.Assign(bm);
jp.Compress;
jp.SaveToFile('C:\foo.jpg');
finally
bm.Free;
end;
finally
jp.free;
end;
819 ◆XcB18Bks.Y :2008/03/01(土) 06:04:38
>>818
すいません、TCanvas.CopyRectの説明が間違っておりました。
このメソッドはほかのキャンバスから部分転送するメソッドですから

 「(転送先である)ビットマップオブジェクトのキャンバスのCopyRectを使う」

が正しいです。
たとえばイメージコンポのキャンバスの範囲Rを新規ビットマップに切り出すなら以下のような感じです。

 bm.Canvas.CopyRect(Bounds(0, 0, bm.Width, bm.Height), Image1.Canvas, R);


なおエラーになる(実行時に例外が生成される)件はこれとは別で
幅と高さを求める計算式が間違っているために値が負の数になってしまったことが原因です。
(数の大きい方から小さい方を引くようにするかabs関数で絶対値をとってください)
例外は高さを代入するときに生成されるのを確認しました。

コードを修正される前に必ず実際に1行ずつ実行して
この時点で例外が生成されるのを確かめてください。

一連の処理コードの一番上の行にF5でブレークポイントを置いてから実行してください。
このブレークポイントで止まりますから、ここからはF8で1行ずつ進めてください。
実行時にエラーになる場合、大事なのはまずどこで発生するかを突き止めることです。
820デフォルトの名無しさん:2008/03/01(土) 09:06:23
>>806
VirtualTreeView のサンプルでそういうのあったよ。
それを改造してみるというのはどうか。
821デフォルトの名無しさん:2008/03/01(土) 20:10:59
Delphi7です。
SimpleRoundTo(2.55,-1) としたら2.6が帰るもんだと思ってましたが
2.5が帰ってきました。ワタシ、何かぼけてますでしょうか?
822デフォルトの名無しさん:2008/03/02(日) 00:00:34
SimpleRoundTo(1.145, -2) ==> 1.14
SimpleRoundTo(1.155, -2) ==> 1.16
SimpleRoundTo(1.165, -2) ==> 1.17

SimpleRoundTo(1.45, -1) ==> 1.40
SimpleRoundTo(1.55, -1) ==> 1.50
SimpleRoundTo(1.65, -1) ==> 1.60

誤差が絡んでるのかもしれないけど挙動が謎過ぎる・・・
823デフォルトの名無しさん:2008/03/02(日) 00:49:35
>>821-822
なんでソースを読まないの?たった5行だよ
824デフォルトの名無しさん:2008/03/02(日) 01:06:52
バンカーズラウンディングだろ
825デフォルトの名無しさん:2008/03/02(日) 03:24:30
>>821-822

>>824さんの言う通り、「銀行家の丸め(bankers' rounding)」だからじゃないの?
端数処理
http://ja.wikipedia.org/wiki/%E7%AB%AF%E6%95%B0%E5%87%A6%E7%90%86#.E6.9C.80.E8.BF.91.E6.8E.A5.E5.81.B6.E6.95.B0.E3.81.B8.E3.81.AE.E4.B8.B8.E3.82.81
826デフォルトの名無しさん:2008/03/02(日) 04:13:45
RoundToがbankers' rounding、SimpleRoundToが普通の四捨五入だと思ってた。
827デフォルトの名無しさん:2008/03/02(日) 07:18:16
思ってたかどうかなんか聞いてない。
実際のソースはどうなってる?
828826:2008/03/02(日) 08:05:34
あ、俺が調べるの?>>821-825とは別人なんだが。

説明を簡単にするために正の数、ADigitが0という条件だと
SimpleRoundToは0.5足してTrunc。
RoundToはRoundを呼び出してるだけ。
System._ROUNDがRoundの実体だとすると、FISTPという命令を使ってる。
これがどういう丸めなのかがよくわからない。

ヘルプにはRoundはBanker's Roundingだと書いてある。
829826:2008/03/02(日) 08:30:28
Truncの実体がSystem._TRUNCだとすると
0方向に丸める(=正の場合切捨て)よう設定してからFISTP、に見える。

asmはよくわからないので、詳しい人お願い。
830デフォルトの名無しさん:2008/03/02(日) 08:58:02
というか普通に
a := Trunc(b + 0.5);
でいいやん。変なとこで悩むな。
831826:2008/03/02(日) 09:25:18
var
a, b, c: Double;
begin
a := 0.1;
b := Trunc(0.25 / 0.1 + 0.5) * a;
c := Trunc(0.25 / a + 0.5) * a;
end;

b=0.3 c=0.2
なんで?
832デフォルトの名無しさん:2008/03/02(日) 10:59:20
>>815
YPT HandleXで見てみましたがわかりませんでした…。
常にメニューが開いた状態というかなんというか…
あれはどうやれば良いのでしょう?
833デフォルトの名無しさん:2008/03/02(日) 11:47:00
質問します
Webサイト(Java)の中のEdit(みたいなの)にデータを書き込むような外部アプリはDelphiでクライアント側に作れるのですか?
作れるとして、それはどう言うカテゴリーの技術を調べれば良いですか?
 
834デフォルトの名無しさん:2008/03/02(日) 11:53:00
>>832
自前で作ったら?Toolbar2000が独自にポップアップメニューの描画を
やってるはずだから参考にするといい。
835デフォルトの名無しさん:2008/03/02(日) 11:54:08
字面どおりにブラウザのEditにデータを突っ込みたいだけなのか
それとも2chブラウザのようにWebブラウザがやっていることを
そっくりそのままDelphiで代替したいのか。
836デフォルトの名無しさん:2008/03/02(日) 12:24:41
>>833
Javaのエディトボックスは制御できるんだろうか?
キー送るだけならできるだろうが
837デフォルトの名無しさん:2008/03/02(日) 12:33:15
>>835
外部からブラウザを制御出来るなら最高です。
やりたいことは、会社の労務管理用のWebアプリへの実績入力です。
サイトで(1)日付の指定(2)社員の選択(3)実績値の入力(4)予定値の入力、を社員数回繰り返します。
社員は部署のDBに一度データを入力してそれを担当がも一回本社Webシステムに入力してますから毎朝虚しくなります。
本社Webと部門DBの接続などもちろん却下されてます。
838デフォルトの名無しさん:2008/03/02(日) 13:44:29
>837
ActiveXの操作だけで済むならWSHで十分かも。
いろいろ細かくやりたいなら Delphi+DMonkeyで
ActiveX操作をDMonkeyに任せるとすごい楽できる。
839デフォルトの名無しさん:2008/03/02(日) 14:15:10
WebスクレイピングでもOKっぽいから、
RubyとかPythonのMechanize使うのもいい手かも
840デフォルトの名無しさん:2008/03/02(日) 14:38:50
Rubyはまだいい方ですがPythonはちょっと・・・・
841デフォルトの名無しさん:2008/03/02(日) 14:58:32
>>838
DMonkeyと言うのを使えばなんとかなるかもしれない、そう言う意味に解釈しました。
ありがとうございました。
ダメ元で勉強してみます。
842デフォルトの名無しさん:2008/03/02(日) 14:59:33
sage
843デフォルトの名無しさん:2008/03/02(日) 17:27:53
JavaっていってるんだからActiveXじゃねーだろ。
DMonkeyはちょっと謎過ぎる。

入力自動化ならDelphiのフォームやテキストエディタでテキストでデータを書き込んで
AutoHotkeyとかでブラウザに渡すのが手っ取り早いんじゃね。
844デフォルトの名無しさん:2008/03/02(日) 18:49:20
あるゲームの画面上に文字を出したいのですが、一瞬しか表示されません。
やってみたのは、

TextOut(DC,0,0,'■',2);

で、DCは指定のウィンドウハンドルを指定しています。
無限ループでやると長く表示されますが、ループの中に他の処理を入れると点滅したりしてしまいます。
あと、この文字に対してクリックしたらある処理を行うなどのイベントを作成することはできるのでしょうか?
上手く説明できてませんがよろしくお願いします。
845デフォルトの名無しさん:2008/03/02(日) 19:18:17
SimpleRoundToで検索すると、非対称丸めって言葉が見つかりますが、
銀行丸めのことですか? Roundが銀行丸めと思ったけど。
銀行丸めなら偶数になるから、こうなるはずでは?
SimpleRoundTo(1.165, -2) ==> 1.17 (1.16のはず)
SimpleRoundTo(1.55, -1) ==> 1.50 (1.6のはず)

>>844
OnPaintで文字を描画すれば、必要なときに自動的に再描画されますよ。
文字のクリックは、文字を書いた長方形を覚えておき、
OnMouseDownで長方形の中かどうかを判別する。
846デフォルトの名無しさん:2008/03/02(日) 19:28:29
非対称丸めが何の事かわからないのに勝手に銀行丸めで理解できる頭が羨ましい
847デフォルトの名無しさん:2008/03/02(日) 19:41:46
>>845
なんでそこまでしてSimpleRoundToを使う必要があるんだ?
自分の好きな丸めルーチンを作ればすむことでは?
848デフォルトの名無しさん:2008/03/02(日) 19:47:38
数週間前、メタファイルの作り方を教えていただいて無事、文字や
長方形は出力できるようになったのですが、メタファイルに画像を
貼り付けられません。そもそも画像(JPG、BMP)を貼り付けられるのか
どうかも分かりません。最後の行でエラーになります。
よろしくご教示お願いします。

procedure TForm2.PaintBox1Paint(Sender: TObject);
var
Fmetafile:TMetafile;
FmetafileCVS:TMetaFileCanvas;
ACanvas:TCanvas;
pic_file2:string;
pic:Tgraphic;
begin
Fmetafile:=TMetaFile.Create;
ACanvas:=Paintbox1.Canvas;
pic_file2:='d:\gazou\test.bmp';
pic.LoadFromFile(pic_file2);
try
FmetafileCVS:=TMetaFileCanvas.Create(Fmetafile,0);
try
SetMapMode(FmetafileCVS.Handle,MM_LOMETRIC);
FmetafileCVS.StretchDraw(Rect(0,0,200,-140),pic);
849デフォルトの名無しさん:2008/03/02(日) 19:57:55
>>834
ありがとうございます。
自前で用意する…すごく難しそうですが、頑張ってみます。
850845:2008/03/02(日) 19:58:01
>>846
それほどでも。

>>846
使わないよ。
851デフォルトの名無しさん:2008/03/02(日) 20:06:43
>>850
ヘルプにSetRoundModeで設定した丸めモードの影響を受けるって書いてあるぞ
852デフォルトの名無しさん:2008/03/02(日) 20:11:16
結論としてはDelphiは四捨五入が出来ないということでよろしいか
853デフォルトの名無しさん:2008/03/02(日) 20:12:08
>>852
ママに頼んでヘルプを読んでもらえ
854デフォルトの名無しさん:2008/03/02(日) 20:16:32
四捨五入ってのは世界的には使われていない
trunc使えば簡単にできるからてめぇで作れって事
855デフォルトの名無しさん:2008/03/02(日) 20:17:44
え?
856デフォルトの名無しさん:2008/03/02(日) 20:44:21
算数で習ったのは四捨五入だけでしたけど。
マイナスの時にどうしたかは忘れました。
857826:2008/03/02(日) 20:57:07
SimpleRoundToの個人的まとめ。
正解かどうかわからないので、必要な人は追試してください。

・SimpleRoundToは意図した結果が得られない場合(ADigit<0 ?)がある。

・Truncは引数に変数を使った式を与えると意図した結果が得られない場合がある。
 ○a := 10; Trunc(0.25 * a + 0.5) / a;
 ○Trunc(0.25 / 0.1 + 0.5) * 0.1;
 ×a := 0.1; Trunc(0.25 / a + 0.5) * a; //SimpleRoundToの中がこれ
・引数に指定する計算式の結果を一度変数に代入してから、Truncに与えれば大丈夫そう。
 ○a := 0.1; b := 0.25 / a + 0.5; Trunc(b) * a;

・Floorも内部でTruncを使ってるので同様。
・Ceilは内部でTruncを使っているものの大丈夫そう??
858デフォルトの名無しさん:2008/03/02(日) 21:04:57
>>845=>>822なのかな?

>>831
ヒント:定数式
859デフォルトの名無しさん:2008/03/02(日) 21:08:10
>>845
ありがとうございます。
概念は理解したつもりなのですが、他のウィンドウに貼り付ける方法がよくわかりませんでした。
このペイントボックスはそういうことができるのでしょうか?
860デフォルトの名無しさん:2008/03/02(日) 21:11:32 BE:291790962-2BP(1111)
      ウィルス仕込むアフィブログを潰す

         奇蹟のカーニバル

        開     幕     だ
      n:      ___      n:
      ||    / __ \   .||
      ||    | |(゚)  (゚)| |   ||
     f「||^ト    ヽ ̄ ̄ ̄ /   「||^|`|
     |:::  !}       □ ̄    |!  :::}
     ヽ  ,イ / ̄ ̄ハ ̄ ̄\ ヽ  ,イ
【スレッド】http://yutori.2ch.net/test/read.cgi/news4vip/1204452332/
【爆撃ツール】http://www.geocities.jp/geobbscustom/hamu/baku.html
【過去ログなど案内】http://www.geocities.jp/geobbscustom/afiblog/index.html
861デフォルトの名無しさん:2008/03/02(日) 21:14:10
ようは
b := 3 * a;
c := Trunc(0.29999...) * a;
なわけだ
862デフォルトの名無しさん:2008/03/02(日) 22:52:11
>>844
他のゲーム画面にとなると、ちと面倒
DirectX使っているゲームなら、
FrapsみたいにDirectXのAPIのっとりしないといけない。

ただ、切り抜いたウインドウとして上に重ねたいだけなら、
リージョンつかっていけるはず
これだと、ゲーム画面直接というわけにはいかない
863844:2008/03/02(日) 23:00:31
ウィンドウの順番を変えればいいのかと思い、
まず、TFormのTransparentcolorをTrueにし、透明色をフォームの色と同じにしました。
次に
SetWindowPos( FindWindow('TForm1', nil),HWND_TOPMOST,0,0,0,0,SWP_NOSIZE);
SetWindowPos( FindWindow('WMPlayerApp', nil),HWND_NOTOPMOST,0,0,0,0,SWP_NOSIZE);
というように、TFORMを一番上、ゲーム画面をその次にしました。(例としてメディアプレイヤーの全画面表示にしました。)

これでボタン以外は透明になり、ゲームの画面と重ねることができたのですが、
全画面のゲームのため、フォームのボタンをクリックするとデスクトップ画面に戻ってしまうことと、Tformが点滅してしまいました。
全画面を解除せずにボタンをクリックしたり、点滅を解除することはできないのでしょうか。
864844:2008/03/02(日) 23:03:59
>>862
ありがとうございます。
乗っ取りというのと、リージョンというの調べてみたいと思います。
865デフォルトの名無しさん:2008/03/02(日) 23:05:25
>>863
難しいよ。全画面アプリは自身のウィンドウが非アクティブになったときに
送られるメッセージを捕まえて画面を元へ戻している。自分がやったときは
ウィンドウプロシージャをHookしてメッセージが伝わらないようにしたけど。
866デフォルトの名無しさん:2008/03/03(月) 00:15:52
>>865
あ、最前面の取り合いだから点滅していたのですね。
難しいですねorz
867デフォルトの名無しさん:2008/03/03(月) 02:40:37
TMenuItem.Create(self);すると、selfは未定義だよハゲって言われる。
確かにハゲてる。もうダメかもわからん。頭が溶けそう。意味がわからない。
868デフォルトの名無しさん:2008/03/03(月) 02:50:24
procedure AddMenu(Sender: TComponent);
begin
  TMenuItem.Create(Sender);
end;

procedure TForm1.Button1(Sender: TButton);
begin
  AddMenu(Self);
end;

みたいにやればうまくいくかもよとエスパーしてみる
869デフォルトの名無しさん:2008/03/03(月) 02:57:53
VistaのアドレスバーのVCLはどこにありますか?
870デフォルトの名無しさん:2008/03/03(月) 02:58:29
>>868
エスパーありがとう。基本がわかってないからつまづくんだろうか。
メニューを動的に作りたくて四苦八苦してる…。
ttp://homepage1.nifty.com/MADIA/delphi/delphi_bbs/200712/200712_07120044.html
ここの一番下のレスを参考にやってみて、フォームにボタン二つ乗っけてコピペしたら行けたから
じゃあちょっと書いてみるかと下のコードを「仕分け入力」の下に追加したらいきなりダメになった…。
宣言のとこにmenu4を追加して
Menu4 := TMenuItem.Create(Self);
Menu4.Caption := 'うんこっこ';
Menu4.OnClick := Button2Click;
Menu3.Add(Menu4);
オンマウスというか、うんこっこを開いた時点で、なぜかButton2Clickになってメニューが増やされる。
871 ◆XcB18Bks.Y :2008/03/03(月) 03:30:06
>>848
暗黙的に省略されたとおぼしきコードを足して実行してみたところでは
エラーの発生は再現できませんでした。

最後の行というのはStretchDrawのところだと思いますが
どういう例外メッセージがでているのか教えていただけると助かります。

> そもそも画像(JPG、BMP)を貼り付けられるのか

TGraphicを継承したグラフィックオブジェクトなら基本的に何でも貼り付けることができます。
ただし縦横それぞれ数千ピクセルもあるような巨大なビットマップだと
うまくいかないかもしれません。
872デフォルトの名無しさん:2008/03/03(月) 07:16:22
> 871

>最後の行というのはStretchDrawのところだと思いますが
>どういう例外メッセージがでているのか教えていただけると助かります。
ありがとうございます。もう、仕事に行く時間なので、夜、UPさせていただきます。
よろしくお願いします。

>暗黙的に省略されたとおぼしきコードを足して実行してみたところでは
省略していないつもりですが..どのようなコードを継ぎ足されたのでしょうか?
873デフォルトの名無しさん:2008/03/03(月) 10:50:03
>843
謎というのはActiveX操作のときのバグっぽいものを指してる?
なら、DelWikiにあるパッチを当てると何とかなるよ。
または、数日前に irvine の作者さんが CVS 更新してくれたみたいだからそれを使うか。
874デフォルトの名無しさん:2008/03/03(月) 15:37:28
>>831
b := Trunc(0.25 / Double(0.1) + 0.5) * a;
で同じにならないか? 0.1のままだとExtended型になる。

>>858
違う。

>>867
シャンプーが合っていないのかも。
めかぶを食べると良いらしい。
875デフォルトの名無しさん:2008/03/03(月) 15:41:32
非対称型の丸めとは、正と負で非対称の意味。
だから、正の無限大に丸めるのと、負の無限大に丸める方法は非対称型になる。
逆に、0方向に丸めるのは対称型の丸めになる。
876デフォルトの名無しさん:2008/03/03(月) 15:59:52
GExpertのProcedureListみたいな感じでユニット、ファイル名を文字で絞り込んでジャンプする機能って無いんですか?
877デフォルトの名無しさん:2008/03/03(月) 16:25:30
if reb then
 result := not result;
を論理演算一発でやるのはどうすればいいですか?
878デフォルトの名無しさん:2008/03/03(月) 17:44:18
Result は Boolean型?
879デフォルトの名無しさん:2008/03/03(月) 17:49:39
こうかな
result := result xor reb
880デフォルトの名無しさん:2008/03/03(月) 17:55:04
Reb   Result → Result
True   True    False  1
True   False    True  2
False  True    True  3
False  False    False  4

Result := Reb xor Result;
881デフォルトの名無しさん:2008/03/03(月) 20:22:08
サンクス。
xorなんてはじめて使うかも。
882デフォルトの名無しさん:2008/03/03(月) 20:30:38
> 871

>どういう例外メッセージがでているのか教えていただけると助かります。

メッセージは
プロジェクトProject1.exeがEAccessViolationクラスの例外を生成しました。
アドレス7361766Eでアドレス7361766Eに対する読み込み違反がおきました。
プロセスは停止しています。再開するにはステップ実行または実行を選択して
ください。
と、でます。よろしくお願いします。
883デフォルトの名無しさん:2008/03/03(月) 20:48:36
FmetafileCVS.StretchDraw(Rect(0,0,200,-140),pic);
で EAccessViolation が出るなら、普通に考えて、
FmetafileCVS か pic 変数が無効。
事前にFreeしちゃってません?
Createしてなかったら、未初期化変数を使ってるってWarningが出てるはず。
884デフォルトの名無しさん:2008/03/03(月) 20:51:21
>>882
picを初期化してないとか
885デフォルトの名無しさん:2008/03/03(月) 21:12:04
>picを初期化してないとか

じ、実はその警告もでています。でも、 初期化の仕方がわからなかったので
そのままにしてました...
pic:=Tgraphic.create;
とか書いても
警告:クラス’Tgraphicのインスタンスを作成していますが、このくrすは抽象メソッドTGraphic.LoadFromStreamを含みます
というのが多量にでて、無視して実行しても
EAbstractErrorクラスの例外を生成しました
Abstractエラー
というのがでてしまうので。どうやって、初期化すればいいのでしょうか??
886デフォルトの名無しさん:2008/03/03(月) 22:09:32
var pic: TPicture;
begin
pic:= TPicture.Create;
887デフォルトの名無しさん:2008/03/03(月) 23:54:16
>>885
警告は飾りで出されてるわけじゃないんだし、
最低条件としてそういうのは質問時に提示しないと。
よく分からない場合は勝手な判断で省略せずに全部書き出すこと。
888デフォルトの名無しさん:2008/03/04(火) 02:03:27
>>819
ありがとうございます
Bounds関数というのがあるのですね。
今回は開始位置が 0, 0 だったのでRectでもうまく動きましたが
心に留めておきます。

デバッグについては思い込みで変更を行い
今回のようにはまってしまうことが良くあるので
気をつけたいと思います
889741:2008/03/04(火) 03:52:11
行き詰まりました…。サブメニューから戻れず、延々とサブメニューを作ってしまいます…。
何かヒントをください…。
890デフォルトの名無しさん:2008/03/04(火) 04:43:04
> 886,887
ありがとうございます。ただ、
var pic: TPicture;
begin
pic:= TPicture.Create;としますと、
FmetafileCVS.StretchDraw(Rect(0,0,200,-140),pic);
でTgraphicとTpictureは互換性がないとでてしまうのですが....
891デフォルトの名無しさん:2008/03/04(火) 05:44:39
>>889です。なんとか出来ました…馬鹿みたいです。ありがとうございました。
892デフォルトの名無しさん:2008/03/04(火) 05:46:54
>>891
解決したときは何が問題だったか書いてくれると
同じ症状でぐぐってここにたどり着いた人が
悲しい思いをしなくてすむかも

ですよ
893デフォルトの名無しさん:2008/03/04(火) 10:15:28
>>890
pic.create
pic.LoadFromFile
pic.Graphic


894デフォルトの名無しさん:2008/03/04(火) 13:44:49
Turbo Delphi Explorerをインストールしたいです。

・インストールに必要なファイルは3つ
・無料会員登録必須
・CodeGearから送信されてくるメールに記載されているキーとパスで認証
・最後に製品登録(添付ファイルを使うことで認証される)する

でもメールでは添付ファイルが添付されてこないんですけど、なんでですか?
自動返信メールの設定ミスだと思うんですけど。

他の製品の場合、添付ファイルはちゃんと添付され、かつ本文にも添付ファイルと
同じ内容の文が記載されていました。

なんで無料版だけ添付ファイルもメール本文にも製品登録コードがないんですか

895デフォルトの名無しさん:2008/03/04(火) 13:48:44
>>894
メールの内容良く読んでみ
896デフォルトの名無しさん:2008/03/04(火) 20:07:25
SimpleRoundToの質問をしましたものです(>>821です)。
色々な回答を頂き、また>>826さんには色々と調べていただき、本当に
ありがとうございました。質問を投稿してからすぐにゴタゴタ&半デスマが
ありまして、ようやく帰宅しました。
結局SimpleRoundToは使えないとの結論に至りまして、くろねこさんなどの
サイトを参考に関数を作って対応することにしました。
ワタシの場合は小数点以下のみで負数は対象外なのですが、
汎用的な関数があってもいいかなって気もしまして、ちょっと考えて
見たいと思いますが、結構この分野、奥が深い感じですね〜(数学苦手)
897デフォルトの名無しさん:2008/03/04(火) 20:17:37
> 893   ありがとうございます。
pic:Tgraphic;
begin
FMetafile:=TMetafile.Create;
ACanvas:=PaintBox1.Canvas;
pic.create;
pic.LoadFromFile('d:\test.jpg');
try
FMetafileCVS.Create(FMetafile,0);
try
SetMapMode(FMetafileCVS.Handle,MM_LOMETRIC);
FMetafileCVS.StretchDraw(Rect(0,0,200,-100),pic.graphic);
としてみましたが、最後の行で未定義の識別子’graphic'とでます。

pic.LaodFromFile(..);の下に
pic.graphic
としても、未定義の識別子とでます。最後の行はどういう意味でしょうか?
898デフォルトの名無しさん:2008/03/04(火) 21:57:44
パスを表す'c:\windows'と'C:\Windows'が同一であるかを判定する関数ってどれ?
AnsiStrIComp?
899デフォルトの名無しさん:2008/03/04(火) 23:00:01
SameFileName
900デフォルトの名無しさん:2008/03/04(火) 23:45:54
>>897
なんか前よりひどくなってるが、もしかしてコピペじゃなくて手打ちでもしているのか?
901デフォルトの名無しさん:2008/03/04(火) 23:51:29
>>987
もっと基本を勉強しようよ。
902デフォルトの名無しさん:2008/03/05(水) 00:33:19
>>897 

var
pic: TPicture;
begin
pic:= TPicture.Create;
pic.LoadFromFile(

FmetafileCVS.StretchDraw(Rect(0,0,200,-140),pic.graphic);


おわったら
pic.free;

end;
903デフォルトの名無しさん:2008/03/05(水) 00:38:35
ファンクションに、二ついんすうを渡して、二ついんすうを返すことってできますか?
904デフォルトの名無しさん:2008/03/05(水) 00:41:03
procedure foo(arg1, arg2: integer; var mul, sum: integer);
begin
 mul := arg1 * arg2;
 sum := arg1 + arg2;
end;
905デフォルトの名無しさん:2008/03/05(水) 00:54:58
ひきすうね。
引数についてはprocedure、functionとも好きなだけ渡すことができる。
procedureは値を返すことはできない。functionは戻値(もどりち)をひとつだけ返すことができ、
その値がfunction呼び出しの結果になる。

ただしいわゆる「参照渡し」(Call by reference)を使うことで呼び出し元が持っている変数の内容を
呼び出し先で参照、変更することができ、これを利用して複数の値を呼び出し元に返す、という
方法がある(ちなみに普通の引数は「値渡し」(Call by value))。

procedure Foo(X: Integer; var Y: Integer; var Z: Integer);
begin
 Y := X * 2;
 Z := X * 3;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 V: Integer;
 W: Integer;
begin
 Foo(4,V,W); // V=8,W=12になって出てくる
end;

FooのY/Zについているvarをはずすとcall by valueとなりFoo内での代入の効果は
仮引数Y/Zにたいしてのみ働き、呼び出し元までは波及しない(Y/Zとも不定値となる)。
906デフォルトの名無しさん:2008/03/05(水) 01:01:48
type
THogeRec=record
a:integer;
b:double;
end;

function foo(x,y:integer):THoge;
begin
result.a=x*2;
result.b:=x/y;
end;
907デフォルトの名無しさん:2008/03/05(水) 03:04:01
ウィンドウハンドルからアイコン取得するのってどうやればいいんですか。
モジュールのパスから取得するのは出来たんですが
これだとApplication.Icon.Assignするようなアプリのアイコンが取れません。
908デフォルトの名無しさん:2008/03/05(水) 06:29:21
プログラム実行中常に使いたい画像がある場合は

TBitmap.Create; して
finally 節で何もせずに Form.Destroy で Free を呼ぶ

この方法で良いんでしょうか?
909デフォルトの名無しさん:2008/03/05(水) 06:42:22
> 902
う、う、うっ、ようやく神にあえた。やりました!!。
Tgraphicのところに、Tpictreuのをもってくるとは!!
思いもつきませんでした。

ありがとうございました。
910デフォルトの名無しさん:2008/03/05(水) 07:57:53
>>908そのフォームのメンバーならそれでいいと思うよ

そうじゃないなら initialization でCreateして finalization でFree
911デフォルトの名無しさん:2008/03/05(水) 10:14:05
if A <> '' then
 begin
 if B = 'あいうえお' then
  begin
   処理1
  end else
  begin
 処理2
  end;
 end else
  begin
     処理2
  end;


こういう風に、AがtrueかつBがtrueの時に処理1を実行して、
Aがfalseの時と、AがtrueかつBがfalseの時に処理2を実行したい場合にはこういう風に同じ処理を書かないと駄目なんでしょうか?
何か上手い方法ありますか?
912デフォルトの名無しさん:2008/03/05(水) 10:26:29
A B
× × 処理2
× ○ 処理2
○ × 処理2
○ ○ 処理1

つまり A and B が処理1

if ( A<>'' )
and ( B='あいうえお' ) then begin
 処理1
end else begin
 処理2
end;
913デフォルトの名無しさん:2008/03/05(水) 11:39:12
>>912
複数の条件を使えるのですか。
ありがとう。ためになりますた。
914デフォルトの名無しさん:2008/03/05(水) 21:39:29
結果的に一つの論理式になればいいのだから、いくつでもかわない。
915デフォルトの名無しさん:2008/03/05(水) 21:49:14
>>907
どっかでひらた
//  ウインドウハンドルから実行ファイル名(フルパス)を取得する
function GetFilenameFromWindowHandle(hTargetWnd: HWND): String;
var
  PID: Cardinal;
  SnapShot: THandle;
  ModuleEntry32: TModuleEntry32;
begin
  Result := '';
  // ハンドルからプロセスIDを得る
  GetWindowThreadProcessId(hTargetWnd, @PID);
  ModuleEntry32.dwSize := SizeOf( TModuleEntry32 );
  // システム中の情報のスナップショットをとる
  SnapShot := CreateToolhelp32Snapshot( TH32CS_SNAPMODULE, PID );
  try
    // モジュールの検索
    if Module32First(SnapShot, ModuleEntry32) then
      Result := String(ModuleEntry32.szExePath);
  finally
    CloseHandle(SnapShot);
  end;
end;
916デフォルトの名無しさん:2008/03/05(水) 23:49:21
タスクバーにあるアイコンを取得したいのでは?
917Delフサギコ ◆A6VzDeLphI :2008/03/06(木) 00:08:52
|  |,,∧  ン?
|_|Д゚ミ 
|文|⊂ミ 
| ̄|∧|

俺もMLから拾ったかな?
http://delfusa.main.jp/delfusafloor/opensource/delfusalibrary/20070828160200/WindowUnit/WindowUnit.pas.txt

ハンドルからパスを得るなら
TWinInfoを生成してプロパティみるだけで出来るようにしてるです。
ヨロシク。
http://delfusa.main.jp/delfusafloor/opensource/delfusalibrary/20070828160200/EnumWinUnit/EnumWinUnit.pas.txt
918Delフサギコ ◆A6VzDeLphI :2008/03/06(木) 00:10:17
|  |,,∧   カキマチガイ
|_|Д゚ミ 
|文|⊂ミ 
| ̄|∧|

ハンドルからiconも取得できるようにしてます。ヨロ
919デフォルトの名無しさん:2008/03/06(木) 15:29:17
Delphi6に MP3Player(作者は、計さん)をインストールしようとしてますが
【エラー】未定義の識別子:SListIndexError がでてインストできません。
確認済みの動作環境がDelphi4/5なのですが、6しか持っていないためお願いします
920デフォルトの名無しさん:2008/03/06(木) 15:53:16
そのエラーだけなら
Consts -> RTLConsts に変更すればいけると思うけど
921919:2008/03/06(木) 15:59:35
変更したらできました。ありがとうございました。
922デフォルトの名無しさん:2008/03/06(木) 17:07:05
2つの同じ型のデータのポインタを渡したら

temp := a;
a := b;
b := temp;

を行ってくれる関数って初めから用意されてたりします?
ちょっとのことなんですが、あると嬉しいんです
923デフォルトの名無しさん:2008/03/06(木) 18:19:44
ないです。
924デフォルトの名無しさん:2008/03/06(木) 18:20:51
がんばって
procedure Exchange(var a, b: Pointer); overload;
procedure Exchange(var a, b: Integer); overload;
procedure Exchange(var a, b: TObject); overload;
...
を整備しまくるんだ
925デフォルトの名無しさん:2008/03/06(木) 18:55:39
var a, b: TObjectは、TObject型限定になるんじゃなかった?
926デフォルトの名無しさん:2008/03/06(木) 19:01:06
TObjectにキャストすれば問題ない
927デフォルトの名無しさん:2008/03/06(木) 19:06:02
TObject渡されても複製が出来ないだろ
Assign/AssignToメソッドを持ってるTPersistent にしないと
928927:2008/03/06(木) 19:06:53
あ、 var が付いてるから、ポインタを交換するのか・・・・あんまり意味ないな
929デフォルトの名無しさん:2008/03/06(木) 23:16:16
お前の空気と文脈の読めなさには頭が下がる
930デフォルトの名無しさん:2008/03/07(金) 00:58:47
Janeの派生系Jane ViewやJane StyleにあるポップアップメニューでAA入力支援みたいのを作る時
どうやって作ったら良いんですか?
Cだったら構造体で線形リストを作って親か子かで分けて動的にメニューの作成…みたいな感じかなあ?とは
思うんですけど、Delphiでやる場合はどうやったら良いんでしょうか?
931デフォルトの名無しさん:2008/03/07(金) 01:12:34
Delphiでも同じ方法でできるよ。
932デフォルトの名無しさん:2008/03/07(金) 01:18:00
ごめんなさい。同じ方法でも出来るとは思うのですが、
TStringListなんていう便利な型があるじゃないですか?
あれ使えばそんなことしなくても、チャッチャッと出来てしまうものなのかな?と思って…。
AAlistの部分のソースとかないですかね?参考に見てみたいんですけど。
933デフォルトの名無しさん:2008/03/07(金) 02:28:52
JaneはDelphiによるオープンソースプロジェクトだと思ったが。
934デフォルトの名無しさん:2008/03/07(金) 08:19:35
Cでのやり方がわかってるのならそれをさらしては?
935デフォルトの名無しさん:2008/03/07(金) 11:54:24
>>932
AAList := TStringList.Create;

AA := TSringList.Create;
AA.Add('|  |,,∧');
AA.Add('|_|Д゚ミ'); 
AA.Add(|文|⊂ミ'); 
AA.Add(| ̄|∧|');
AAList.AddObject('フサ/電柱', AA);

のように見出しリストの各項目にテキスト本体をぶら下げる二重構造にしておいてやれば
例えばEdit1に検索文字列'電柱'と入れて

for i := 0 to AAList.Count-1 do
begin
 if AnsiPos(Edit1.Text, AAList[i]) > 0 then
 begin
  Label1.Caption := AAList[i];
  Memo1.Lines.Assign( AAList.Objects[i] as TStringList );
 end;
end;

なんて感じで検索・表示できるようになる。
UIは見出しを'/'で分割してExplorer風にツリーを表示させるようにしてもいいし
Spotlightのように検索ベースのものにしてもいい。
Migemoというライブラリを入れるとfusa denというローマ字でもヒットさせられるようになる。
936デフォルトの名無しさん:2008/03/07(金) 12:55:36
Delphiで書かれたWin32アプリケーションのソースコードを、C++とかCとかに変換するソフトってありますか?
937デフォルトの名無しさん:2008/03/07(金) 12:56:58
んなもんあったら、Delphi捨てとるわ
938デフォルトの名無しさん:2008/03/07(金) 13:21:35
TurboDelphiのコード支援がウザ過ぎる
いずれ慣れるだろうとオフらず耐えてはいるが…
もう慣れてデフォルトのまま使ってる人いる?
939デフォルトの名無しさん:2008/03/07(金) 14:07:48
>>936
BCBならWinMainの中身だけC++に書き換えればそのままコンパイルできて、C++ユニットも使えるけどそれじゃだめ?
940デフォルトの名無しさん:2008/03/07(金) 15:14:41
たぶん、DelphiでやってることをCのコードで知りたいんだと思われ
941デフォルトの名無しさん:2008/03/07(金) 16:42:43
942デフォルトの名無しさん:2008/03/07(金) 16:53:57
ReadProcessMemoryで他のアプリケーションのメモリに書き込むときに、
すでにそこの番地が変わっててエラーが起きたりするのですが、どうしたらいいでしょうか
943デフォルトの名無しさん:2008/03/07(金) 17:16:35
そのアプリケーションを止めとけば?
944 ◆XcB18Bks.Y :2008/03/07(金) 17:51:18
>>933
Jane Viewはソース非公開なのです。
Jane Styleはソースが公開されていた頃のViewの派生のようです。
945デフォルトの名無しさん:2008/03/07(金) 18:48:57
>>923
(´・ω・`)
>>924
(`・ω・´)
946デフォルトの名無しさん:2008/03/07(金) 22:10:44
>>935,941
おお!ありがとうございます!
「適当に」でこれって…すごいですね…。
ソースを読んで勉強させてもらいます!ありがとうございました!
947デフォルトの名無しさん:2008/03/07(金) 22:59:55
>>943
そういうことってできるんですか!?
948デフォルトの名無しさん:2008/03/08(土) 00:02:16
いくら超初心者スレとはいえ、ヒントが与えられたならまずそれで調べるのが質問者の義務じゃないかね
949デフォルトの名無しさん:2008/03/08(土) 00:50:58
プロセスだかスレッドのハンドル拾って停止させりゃいいんじゃね。
Win32APIスレでもいってみたら。
950デフォルトの名無しさん:2008/03/08(土) 01:02:54
Delphiの長文ソース晴れる掲示板ってないの
951デフォルトの名無しさん:2008/03/08(土) 01:28:01
どっかにあげろよ
メールでソースコピペして送ってくる奴とか殺したくなる
952デフォルトの名無しさん:2008/03/08(土) 02:48:03
昔は2chライクなソースアップ用の掲示板があったけど。
953デフォルトの名無しさん:2008/03/08(土) 03:13:34
>>951
そんな奴いないと思ってたけど、知り合いがそれやってきて唖然とした。
954デフォルトの名無しさん:2008/03/08(土) 03:15:47
添付じゃなくて、ベタ貼りか?
そりゃひどいなw
まあ、短いコードならアリだとは思うが・・・。
955デフォルトの名無しさん:2008/03/08(土) 14:24:24
'&File' ==> 'File'
'ファイル(&F)' ==> 'ファイル'
見たいな関数ない?
956デフォルトの名無しさん:2008/03/08(土) 16:11:18
StripHotkey
957デフォルトの名無しさん:2008/03/08(土) 18:28:37
ある数字をソートしてListBoxに表示したいのですが、
激しくでかい数字を扱うのでTListを使うと負の数字が表示されてしまいます
ソースのいろいろな部分のIntegerをInt64に変えてみたものの、ソートする部分で
「'Integer'と'Int64'には互換性がありません」というエラーが表示されてしまいます
ソートする関数が原因なのが分かったのでそこのInt64をIntegerに変えてみると
でかい数字が上のほうに来てしまうのでソートの意味があまりなくなってしまいます
これを回避する方法はないでしょうか?
自分で関数を用意するしかないのでしょうか?
ちなみに参考にしたページは
http://delfusa.main.jp/delfusafloor/archive/www.nifty.ne.jp_forum_fdelphi/samples/00107.html
です

>>944
Styleは2.00からLovelyですよ
958デフォルトの名無しさん:2008/03/08(土) 18:38:41
TList.Sortに渡すコールバック関数は二つの値の大小関係を返せばいいから、
IntegerでもInt64でもいけるはずだけど。
959デフォルトの名無しさん:2008/03/08(土) 19:21:06
動的配列をつかって
ファイルの行数分の配列を確保し
配列の中にデータを格納という処理をやりたいと思います



1回のみの読込や配列を使い捨てする場合は上手くいくのですが
他の処理でも使うデータなのでグローバル変数に読み込む場合
2回目以降でエラーがでて処理が止まります(配列の長さの再定義のため)

TStringListのように長さを変えられる配列やレコード型のやり方があったら
教えて下さい
よろしくお願いします
960959:2008/03/08(土) 19:21:33
Type
 TMYRec = Record
   name: String;
   age: Integer;
   Flag: Boolean;
end;

var
 Data: array of TMyRec;
 List: TStrings;
 FileLinesCount: Integer;

 List:=TStringsList.Creat;
 try
  ファイル読込処理
  if List.Count > 0 then
  begin
   FileLinesCount:= List.Count;
   SetLength(Data,FileLinesCount) //ファイルの行数分の配列確保
   データ格納処理部分
  end;
 finally
  List.free;
 end;
961957:2008/03/08(土) 19:45:06
比較用関数に間違いがあったようでした
ありがとうございました
962デフォルトの名無しさん:2008/03/08(土) 19:57:28
SetLengthは長さを変えられたはずだけど。
record に string を入れるときは Initialize しないとだめなんじゃなかった?
963デフォルトの名無しさん:2008/03/08(土) 20:28:58
勝手にやっといてくれるはず
964 ◆XcB18Bks.Y :2008/03/08(土) 20:35:12
そろそろ次スレの季節でございます。
テンプレは今のままでよろしいでしょうか。
(ちなみにこちらはスレ立ては多分無理です)

>>957
それは知りませんでした。
Janeシリーズの家系はどんどん複雑になってきてますね。
965デフォルトの名無しさん:2008/03/08(土) 20:39:01
tidpop3でメールの受信をやってるのですが、
「サーバーはセキュリティで保護された接続(SSL)が必要」
ってのは、どうやればできるでしょうか?

つたない質問で申し訳ありませんが、よろしくお願いします。
966デフォルトの名無しさん:2008/03/08(土) 22:25:40
実装すればよろしい
967965:2008/03/09(日) 00:09:42
自己解決しました。
968デフォルトの名無しさん:2008/03/09(日) 11:52:03
処理中に閉じるボタンを押しても閉じることができないのですが、
これはどうしたらいいのでしょうか
969968:2008/03/09(日) 11:53:30
すみません途中で書き込んでしまいますた。

2〜三分かかる処理なので、その間止めることができなくてtaskmgrなどで強制終了してる状態です。
これを閉じるボタンとかで閉じることってできるのでしょうか
970デフォルトの名無しさん:2008/03/09(日) 12:02:07
>>969
っスレッド
971デフォルトの名無しさん:2008/03/09(日) 12:02:27
その2〜3分かかる処理を途中で止める方法を考えればわかる
972デフォルトの名無しさん:2008/03/09(日) 16:59:08
2〜3分かかっているのが自分で書いてる処理なら、そのループ中に
適当な頻度でApplication.ProcessMessages; 呼んでおけば
OnCloseQueryが飛んでくるから、自分でなんとか出来ると思うけどな
973デフォルトの名無しさん:2008/03/10(月) 17:01:16
ADOQueryを使用してSQLServerへSelect文を発行しています。
SQL自体複雑ではないのですが、負荷がかかる(大人数でDBへ処理をかける)と
稀にSQLの結果(複数行返す)が2〜3行欠損することがあります。

負荷が少ないときには現象が全く出ません。
原因が全く思いつかないのですが、ADOQueryが負荷によりデータを途中までしか取得しないで戻ることはあるのでしょうか?
974デフォルトの名無しさん:2008/03/10(月) 17:10:11
最初にrecordcountを参照してみれば?
975デフォルトの名無しさん:2008/03/10(月) 18:47:19
recordcountって問題無かったっけ?
976デフォルトの名無しさん:2008/03/10(月) 18:55:17
問題ある

つCOUNT
977デフォルトの名無しさん:2008/03/11(火) 21:55:40
コンソールアプリ(他アプリ)のwritelnで出力される文字列を自アプリで取得する方法を教えて下さい。
978デフォルトの名無しさん:2008/03/11(火) 22:16:44
>>977
クリップボード経由で取得できそう。
979デフォルトの名無しさん:2008/03/11(火) 22:36:45
標準出力を取得するなら、標準入力で取れるのでは? パイプ?w
980デフォルトの名無しさん:2008/03/12(水) 01:04:56
クリップボードわろた
981デフォルトの名無しさん:2008/03/12(水) 07:19:57
>>977 さん >>446-447 が同じ趣旨だと思いますよ
982デフォルトの名無しさん:2008/03/12(水) 10:11:28
フォームにいくつかボタン(TButton)を配置して、
既にある程度ソースを書いたのですが、
画像が欲しくなり、ボタンをTBitBtnに変更したくなりました。

つまり、コンポーネントを入れ替えたいのですが、
私の頭では、フォームデザイナのTButtonの位置に新たにTBitBtnを置いて、
ソースをコピペして元のボタンを削除する、という原始的な方法しか思いつきません・・・。

何かいい方法はないですか?
983デフォルトの名無しさん:2008/03/12(水) 10:49:51
TButton削除してTBitBtnに貼り替えてOnClickイベントにTButtonで指定してたイベントハンドラ指定すればいいだけじゃないか
984デフォルトの名無しさん:2008/03/12(水) 10:50:55
dfmをテキストエディタで開いて修正
985982:2008/03/12(水) 11:09:27
>>983
多分、>>982と同じ方法と思われますが、
これだと例えば電卓ソフトでボタンが10個あった場合、
10回貼り変えることになりますよね。
もう少しミスの少なそうな方法があると嬉しいです。

>>984
dfmの該当コンポ部分をテキストベースで変更し、
さらにpasファイルも同じく置換すればいい、ということでしょうか。
2つのファイルを変更するということですね。

これが最善でしょうか。
986デフォルトの名無しさん:2008/03/12(水) 11:18:20
「電卓ソフトなら」という前提だが、
イベントハンドラは1個で済むように作れるだろうから、
10個選択してOnClickを指定すればミスは大幅に減る。
なんなら実行時に代入してもいいし。
987デフォルトの名無しさん:2008/03/12(水) 11:27:36
984 の方法が使えるのがまさに Delphi が 2wayツールたる所以なのである
988デフォルトの名無しさん:2008/03/12(水) 11:29:23
984のいうようにわざわざテキストエディタで開かなくても
フォームを右クリックすると「テキストで表示」みたいのがあったような気がするけど
989デフォルトの名無しさん:2008/03/12(水) 16:19:31
Delphiには未来があるんでしょうか?
990デフォルトの名無しさん:2008/03/12(水) 16:44:46
実行時パッケージを使用してコンパイルしたいのですが、
特定のpasファイルだけは静的リンクするにはどうしたらできますか?
991デフォルトの名無しさん:2008/03/12(水) 16:55:10
現在勉強の一環としてVCLを使わずにAPIだけでプログラムを書いているのですが、
IEコンポーネントのブラウザは作成可能でしょうか?
CreateWindowで「AtlAxWin」と「Shell.Explorer.2」を指定してみたのですが作成されていないのかフォームは灰色のままです
また、Navigateの方法も教えてくださると光栄です
992デフォルトの名無しさん:2008/03/12(水) 17:17:38
ごめん光栄うけた
993デフォルトの名無しさん:2008/03/12(水) 17:36:41
>>991
IEコンポーネントはCOMオブジェクトだからCreateWindowじゃ駄目っぽい
994デフォルトの名無しさん:2008/03/12(水) 17:46:50
994
995デフォルトの名無しさん:2008/03/12(水) 17:47:11
995
996デフォルトの名無しさん:2008/03/12(水) 17:47:50
996
997デフォルトの名無しさん:2008/03/12(水) 17:48:10
997
998デフォルトの名無しさん:2008/03/12(水) 17:48:30
998
999デフォルトの名無しさん:2008/03/12(水) 17:49:16
フォームからマウスが外れた時に、
ある処理(例えばbeep)を行いたいのですが、
どう記述すればいいでしょうか?
1000リオレイア:2008/03/12(水) 17:50:19
1000
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。