トップページ⇒tech
1001コメント277KB

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

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさんNGNG
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Delphi使いが優しくコメントを返しますが、
お礼はDelphiの布教と初心者の救済をお願いします。

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

<その他>
ボーランド
http://www.borland.co.jp/
DelWiki
http://onigiri.s3.xrea.com:8080/delphi/
0002デフォルトの名無しさんNGNG
<過去ログ>
16 http://pc5.2ch.net/test/read.cgi/tech/1089779142/
15 http://pc5.2ch.net/test/read.cgi/tech/1087823906/
14 http://pc5.2ch.net/test/read.cgi/tech/1085239007/
13 http://pc5.2ch.net/test/read.cgi/tech/1081003641/
12 http://pc5.2ch.net/test/read.cgi/tech/1076610073/
11 http://pc2.2ch.net/test/read.cgi/tech/1074523803/
10 http://pc2.2ch.net/test/read.cgi/tech/1074523803/
09 http://pc2.2ch.net/test/read.cgi/tech/1071294733/
08 http://pc2.2ch.net/tech/kako/1068/10682/1068201045.html
07 http://pc2.2ch.net/tech/kako/1065/10651/1065195699.html
06 http://pc2.2ch.net/tech/kako/1063/10632/1063202727.html
05 http://pc2.2ch.net/tech/kako/1061/10610/1061090908.html
04 http://pc2.2ch.net/tech/kako/1058/10588/1058834815.html
03 http://pc2.2ch.net/tech/kako/1055/10559/1055986736.html
02 http://pc2.2ch.net/tech/kako/1053/10537/1053757982.html
01 http://pc2.2ch.net/tech/kako/1051/10518/1051882835.html
0003デフォルトの名無しさんNGNG
>990 :デフォルトの名無しさん :04/08/05 10:41
>>>987
>何という関数でしょうか?
>いまいちWindowsAPIというのが分かりません。。
>Delphi システムコールでググってるんですが。。
>
>992 :デフォルトの名無しさん :04/08/05 10:55
>だから、システムコールです。
>Cでいうsystem()みたいなのを

システムコールとは、言語の標準ライブラリではなくて、OSの機能を直接呼ぶわけです。
例えば、Windowsにはsystem()はありませんが、UNIXにはsystem()があります。
Windowsの場合はWindows APIのことになります。
0004デフォルトの名無しさんNGNG
>>3
はい。
それで、WindowsAPIの中のどの関数を使えばいいのでしょうか。
WindowsAPI コールとかで必死に調べてるんですが・・・
0005デフォルトの名無しさんNGNG
>>4
つまり、UNIXのsystem()と同じ機能、プログラムの起動を行いたいわけね?

なら、ShellExecute or CreateProcess or ...
Delphi標準関数でもあったと思うが。
0006デフォルトの名無しさんNGNG
>>5
プログラムの起動ならそれで分かるのですが。
perl example.pl
taskkill /F /IM example.pl
というようなことをやりたいので、その関数では出来ないと思うんです
0007デフォルトの名無しさんNGNG
>>6
CreateProcess
0008デフォルトの名無しさんNGNG
>>7
フルパスでしかできないじゃないか、と思ったんですが
第二引数のほうに書けばうまくいきました。
どうもありがとうございました。
0009デフォルトの名無しさんNGNG
AnsiReplaceStrとStringReplaceはどう違うのでしょうか?
単にTReplaceFlagの有無でしょうか?
0010デフォルトの名無しさんNGNG
ファイルの関連付けはどうやってやりますか?
0011デフォルトの名無しさんNGNG
>>10
yahooで「ファイル 関連づけ delphi」で検索して
上から二つめのリンクのところでどお?
0012デフォルトの名無しさんNGNG
thax>>11

レジストリいじるんですね、OKでつ。
専用APIがあるのかと思ってました。
0013前スレ972NGNG
>>974-975
ありがとうございます。参考になりました。
いろいろと考えて作って見ます
0014デフォルトの名無しさんNGNG
>>13
そして公開しる(・∀・)
0015デフォルトの名無しさんNGNG
>>9
名前が違いますxp
0016デフォルトの名無しさんNGNG
Delphiからバッチファイルを呼び出したときに
DOSに表示される

「コマンドまたはファイル名がちがいます」

などの結果を表すメッセージを
EditやMemoコンポーネントに出力することはできるのでしょうか?
0017デフォルトの名無しさんNGNG
>>16
バッチのリダイレクト処理でメッセージをファイルにして保存して、
それをDelで読み出すとか。

リダイレクトの内容をバッチの変数に入れて、終了後に
呼び出し元(Del製アプリ)に実行結果として渡すことって
できるんだろうか?
0018デフォルトの名無しさんNGNG
>>16
テンポラリファイルにリダイレクトしてコマンド終了後に読み出し。
探せばコンポーネントもあるけどな。
0019デフォルトの名無しさんNGNG
databeseのソフトに初チャレンジしているのですが、
D5proでOracle7.3に接続するソフトを作れますか?

tcpを使ってdatabaseにアクセスしようと思っているのですが、databasenameに
\\198.1.1.1\
などと設定してもディレクトリエラーになります。

やり方を教えていただけないでしょうか?
参考になるサイトを教えていただくだけでも結構です。
delphi acidというサイトを見つけたのですが、database関連はいくつかあったのですが
tcpがらみが無かったもので。fdelphiにも無いでした。
変な質問でしたらごめんなさい。脳内補完してください。
0020デフォルトの名無しさんNGNG
>>19
OTN
http://otn.oracle.co.jp/
0021デフォルトの名無しさんNGNG
普通にIP指定でODBCに登録して、それに対して
接続してあげればいいんでないの?
0022デフォルトの名無しさんNGNG
Oracle7.3って、まだサポートされてんだ(驚)
0023デフォルトの名無しさんNGNG
>>16
http://hp.vector.co.jp/authors/VA026252/tips/delphi_anonymous_pipe.html
ここが参考になると思う。
002419NGNG
>>20
このサイトは知りませんでした。色々と見てみます。ありがとうございます。

>>21
すみませんが、できたらどのコンポを使ってIP指定でODBCに登録して接続するかを
教えていただけないでしょうか?

>>22
実はもっと古いのもありまつ。。。
そっちは諦めてまつ。。。
0025デフォルトの名無しさんNGNG
>>24
Oracleの事が全く分かって無い気が・・・

とりあえず
http://www.dotfoward.jp/DB/Oracle/OracleIndex.html#Connection
0026デフォルトの名無しさんNGNG
SQLでしかやったことないが、コンパネ→管理ツール→ODBCで
オラクルが動いてるサーバにODBCで接続。
DelphiからODBCはDelのデータベース→エクスプローラから
接続すればいいんでないの?
0027デフォルトの名無しさんNGNG
ttp://218.230.96.210:666/
0028デフォルトの名無しさんNGNG
↑グロ
0029デフォルトの名無しさんNGNG
前スレでコンパイルエラーのメッセージを別ファイルに写せないか
聞いた者です。
どなたかご存知ないでしょうか。
0030デフォルトの名無しさんNGNG
右クリック→メッセージの保存
0031デフォルトの名無しさんNGNG
右クリックして保存できるんじゃね
0032デフォルトの名無しさんNGNG
>>29
エラーメッセージを右クリックして、
メッセージの保存

Delphi7 Professionalはこれで上手く行くけど・・・
0033デフォルトの名無しさんNGNG
プログラム実行中に
処理を2秒間止める(待つ)にはどうすれば良いでしょうか?
0034デフォルトの名無しさんNGNG
sleep
0035デフォルトの名無しさんNGNG
>>33
sleepすると、他の処理まで止まってしまうんですけど・・・
という質問をエスパーが感知してTThreadを使えとおっしゃっています。
0036デフォルトの名無しさんNGNG
PaintBox1.Canvasを青と白のビットで埋める処理はどのようにするのでしょうか
Brush.Style := bsDiagCross で目の大きさを変えたり出来ればと思ったけどだめでした。
0037デフォルトの名無しさんNGNG
scanlineでポチポチ打ってけば?
0038 NGNG
「application.ProcessMessagesを使った手続きを作る」に1票。
0039デフォルトの名無しさんNGNG
t := timeGetTime;
While timeGetTime-t > 2000 do
begin
end;

・・あほだな俺
0040デフォルトの名無しさんNGNG
>>38
は
>>35
へね。

検索すればサンプルあるから。
004136NGNG
>37
>scanlineでポチポチ打ってけば?

TPaintBoxには無いようなのでTbitmapを作ってコピーするってことでしょうか
scanline Help見てもいまいちわかりませんでした。
座標がかえってくるらしいのでその座標にたいして色を塗るってことなのかな
ちょっと調べてみます。

ありがとうございました。
0042デフォルトの名無しさんNGNG
>>40
ループしてるわけじゃなくてsleepしてるのに、
どこでメッセージポンプを起動すればいいので?
0043デフォルトの名無しさんNGNG
t := timeGetTime;
While timeGetTime-t > 2000 do
begin
 Application.ProcessMessages;
 Sleep(1);
end;
なんてのが現実的な使い方なんじゃないの。
考え無しにやるとバグるけど。
0044デフォルトの名無しさんNGNG
2秒間またなければならない理由がわからんと
ProccessMessagesとTThreadのどっちがいいか
わからんね。
0045デフォルトの名無しさんNGNG
t := timeGetTime;
While timeGetTime-t > 2000 do
begin
 Application.ProcessMessages;
 Sleep(1);
end;



何やってんの、コイツ
0046デフォルトの名無しさんNGNG
>>45
アホには分からないらしいので一応解説。
2秒間スリープし続け、なおかつメッセージループを処理し続ける(画面が固まらない)。
ループ中でSleepはなくても動作は同じだけど、OSの負荷を低減するためのもの。
Timerとの違いは同一イベントハンドラ内に処理を記述できること。
0047デフォルトの名無しさんNGNG
>>46
Sleep(1); する意味は?
004847NGNG
ああ負荷低下になるのか
横やりごめん。
0049デフォルトの名無しさんNGNG
>>46
処理待ちが必要で、その間にユーザにクリックとかさせたくない
場合は(砂時計とかだして)そのまま待たせる。
ユーザがいじってもよい場合は、メインスレッドとは別のスレッドや
タイマーで処理するのが普通でしょ。

processmessagesは、単純にループ中でのフリーズ状態を解決
するだけの短絡的な解決法だし、それだとループ中にフォームの
ボタン等を押してもいいのか、それとも押しちゃいけないのかわかり
にくい。
0050デフォルトの名無しさんNGNG
>>41
Canvas.Brush.Bitmap にビットマップを割り当てて FillRect すればいい。
ただし Windows 95 の場合、8×8 以内でないといけない。
0051デフォルトの名無しさんNGNG
>>49
>普通でしょ。
質問者が具体的に聞いて無いのに「普通」もなにも無いだろ。
質問に対する俺の応えは>>34で終わってるよ。
最適解がスレッドって事はまず無いと予想してるけどね。
>43は>42へのレスだよ。
0052デフォルトの名無しさんNGNG
Sleepってメッセージ処理しなかったっけ?
普通にsleep(2000)でいいような気がするが
0053デフォルトの名無しさんNGNG
>>52
試してみろ数秒で確認できるだろうから
0054デフォルトの名無しさんNGNG
おいおまえら、Delphiはもう、終わったんだよ
0055デフォルトの名無しさんNGNG
>>45
なんでループのなかでsleepやってんの?
基地外だろ
0056デフォルトの名無しさんNGNG
朝から暑いな
0057デフォルトの名無しさんNGNG
>>55
ネタならメル欄にそう書いてくれよ。
0058デフォルトの名無しさんNGNG
TListViewのvsReport形式にて、ユーザーに行を選択させて、削除
ユーザーがなにも選択していないときはなにもしないと言う動作をしたいのですが

TListView->Selected->Indexを呼び出して、インデックス番号を取得しようとしたら
ユーザーが選択しているときは問題ないのですが、ユーザーが何も選択していないときは
ここで例外が発生します。

なんとかしてユーザーが行を選択している、いないを見分ける方法はないでしょうか?
0059デフォルトの名無しさんNGNG
>>58
selectedがnilじゃなかったらIndexを取得。
nilだったら-1を返すとかすれば?
0060デフォルトの名無しさんNGNG
>>55
条件判断の回数を減らすことができるし
CPUを一瞬だけ休ませることができる
一瞬休むかどうかでCPU使用率は大きく変わる
ループに速度は要求されてないから問題ない
そして固まらない
0061デフォルトの名無しさんNGNG
IntegerとLongInt、
CardinalやDWORD,LongWord,UINTの違いって何ですか?
ヘルプにはInteger,Cardinalが効率的だ、みたいな感じで書いてますが
それなら他のやつは何のためにあるのですか?上位互換?
使い分けが必要なものなんでしょうか?
もし必要なら、どのように使い分ければいいのかも教えてください。
0062デフォルトの名無しさんNGNG
>>61
IntegerとCardinalはビット数がOSに依存する。

8ビット:ShortInt,Byte
16ビット:SmallInt,Word
32ビット:LongInt,LongWord
64ビット:Int64

UINTやDWORDは上記に含まれる。
0063デフォルトの名無しさんNGNG
>>60
delのsleepはミリか。それなら納得
0064デフォルトの名無しさんNGNG
delのじゃない。winのsェエpだ
0065デフォルトの名無しさんNGNG
>winのsェエp

あたらしい技だな
0066デフォルトの名無しさんNGNG
>>43
uses MMSystem;

var
t: DWORD;

t := timeGetTime;
While timeGetTime-t > 2000 do
begin
 Application.ProcessMessages;
 Sleep(1);
end;

て書いてみたんですが
ウエイト処理になりません・゚・(つД`)・゚・
どこか間違ってるでしょうか
0067デフォルトの名無しさんNGNG
ずっと思ってたんだが、不等号が逆じゃないだろうか
0068デフォルトの名無しさんNGNG
(・∀・)ニヤニヤ
0069デフォルトの名無しさんNGNG
というか、メインスレッドでループ中にsleepなんてしないほうがいい。
0070デフォルトの名無しさんNGNG
CPUがかわいそうだろ
0071デフォルトの名無しさんNGNG
こういう場合は
sleep(0) とやるもんだと思ってた。
0072デフォルトの名無しさんNGNG
Delphiでobjファイルのようなものはありますか?
他のプログラムに埋め込みたいのですが・・・
0073デフォルトの名無しさんNGNG
>>72
dcuファイル
0074デフォルトの名無しさんNGNG
>>71
パフォーマンスモニタ見ながらで0と1の挙動を比較してみろ
0075デフォルトの名無しさんNGNG
StringGrid の OnDblClick イベントで、ダブルクリックした位置のセルの
ACol, ARow を知る方法はありますか?
0076デフォルトの名無しさんNGNG
OnRowMoved
OnColumnMoved
のToIndexを変数に代入しておく
0077デフォルトの名無しさんNGNG
Delphiもobjファイルを出力できますよ。
0078デフォルトの名無しさんNGNG
>>72
プロジェクト(P)の
オプション(O)...で開く設定ダイアログの
「リンカ」タブの「リンク結果」で
出力設定ができると思います。
0079デフォルトの名無しさんNGNG
>>75
Col
Row
0080デフォルトの名無しさんNGNG
>>77
詳細きぼん
0081デフォルトの名無しさんNGNG
http://hp.vector.co.jp/authors/VA028375/delphi/delphipascal_xx_omf.html
.objが吐けても役に立たない気がする…
0082デフォルトの名無しさんNGNG
素直にDLL作れ
0083デフォルトの名無しさんNGNG
>>81
確かに・・・たぶん下位互換性の為に用意されてる仕組みなのね
0084デフォルトの名無しさんNGNG
パフォーマンスモニタをベンチ代わりにしてる奴が居たとは・・・
恐ろしい世の中になったな
0085デフォルトの名無しさんNGNG
ComboBoxのEnterイベントにフォーカス時に自動ドロップダウンするようにしてます。
その時ドロップダウンした項目の上にマウスカーソルが重なってると
ComboBoxをFrameに乗せてる時とそうでないときでは挙動が違います。
Frameの時は何故かマウスカーソルに重なっている項目がComboBoxテキスト欄に
表示されてしまいます(ここではまだ選択された事にはなっていない)。
そうなるとEnterキーで移動させてるので変更に気づかずに決定してしまいます。
Frameは辞めれないのですが、何か良い回避方法は無いでしょうか?
008685NGNG
要するにFrame上のコンボが自動でドロップダウンした時にマウスカーソルが
項目の上に重なっていてもテキスト欄が変更されないようにして欲しいって事です。
0087デフォルトの名無しさんNGNG
>>86
いっている意味がわからんので、同じことやったかどうかわからんけど、
Frame上でもForm上と同じ動作ですた。Del7pro
0088デフォルトの名無しさんNGNG
バージョンによって動作違うんでしょうか。
D5なんですが。
0089デフォルトの名無しさんNGNG
俺はStyleがcsDropDownListのとき、FrameもFormも>>85みたいな挙動した。
0090デフォルトの名無しさんNGNG
>>89
ええっ・・・何か人によって違いますね
0091デフォルトの名無しさんNGNG
>>89
csDropDownListでもならんねぇ。
Tabキーで移動させてFocasあててるけど、質問者はもうちょっと
詳しく説明汁
0092デフォルトの名無しさんNGNG
Enterキーでカーソル移動中に
ComboBoxにフォーカスが当たると自動でドロップダウン。
「↑」がマウスカーソルとすると
______        ______
|       |▼|    ピロッ |b      |▼|
 ̄ ̄ ̄ ̄ ̄ ̄        | ̄ ̄ ̄ ̄ ̄ ̄|
                 .|a        |
   ↑            .|b■■↑■■. | ←選択状態
                 .|c        |
                 .|d        |
                  ̄ ̄ ̄ ̄ ̄ ̄
こんな感じです。stayleはcsDropDownListです。
0093デフォルトの名無しさんNGNG
AA書いてる暇があったらリファレンス嫁
0094デフォルトの名無しさんNGNG
んなことについて書いてないだろ
0095デフォルトの名無しさんNGNG
人によって色々ある見たいだから極単純に、
カーソルのx座標がComboBoxの両端の範囲ないだったら
Left - 1にカーソルを移動させるコードをドロップダウンイベントに書きました。
なんかダサいですが取りあえずこれで誤操作は防げそうです。
テストしてくださった方どうもです。
0096デフォルトの名無しさんNGNG
Delphiで作成したEXEファイルには、作成者を特定できるような情報が埋め込まれたりするのでしょうか?
例えば2つのEXEファイルがあるとして、ある程度詳しい人が解析したら
作成者が同じかどうか分かったりしてしまうとかそういうことはないのでしょうか。
0097デフォルトの名無しさんNGNG
>>96
とりあえずクラス名はそのまま入ってるそうだから
ユニークな名前をつけてたりするとわかるかもしれないね。

作成者○○なんてのは自分で入れない限り勝手に入ったりすることはないと思う
0098ANGNG
Panelをドックサイトにしてドッキングを受け付けているのですが、
ドック中のオブジェクトが、ドラッグで外部に出された場合、OnUnDockで感知できますが、
ドック中のオブジェクトを、グラバのところにある、[X]ボタンで閉じる(隠す)と、
オブジェクトは消えるのですが、Panel側では、これを感知する方法はあるのでしょうか?

具体的には、Panelの上に、見えるオブジェクトが何もなければ、Panelを隠す(幅を0にする)
という処理を行いたいのです。
0099デフォルトの名無しさんNGNG
>>97
そうなんですか、ありがとうございます。
とりあえずあまり変わった名前は付けないほうが良さそうですね。
0100デフォルトの名無しさんNGNG
>>99
違法ソフトでもつくるのか?w
よほど有名にならないかぎりそんなもん調べるアフォはいないと思うがな…
0101デフォルトの名無しさんNGNG
一応念には念をw
心配性なので。
0102デフォルトの名無しさんNGNG
個人の特定は可能だけど、>>99には教えない方が良さそう。
0103デフォルトの名無しさんNGNG
try..exceptって慣れてくるとくせになるね。
いや〜便利便利
0104デフォルトの名無しさんNGNG
VC++のバイナリには個人名が入って危険だからな。(リリースビルドのデフォルト設定時)
またもやDelphiの勝利だ。
0105デフォルトの名無しさんNGNG
>>103
で?

>>104
いやあれは勝利とかではなく
ただ単に「流石だなビル」ってだけだろう(;´Д`)
色んな意味でありえないよあれは…
0106デフォルトの名無しさんNGNG
ListView_GetSubItemRectをつかってvsReport形式のTListViewの枠に棒グラフを塗る
ということをしているのですが、カラムの幅を更新しても棒グラフが長さを変えてくれません
(デフォルトの幅を短くすると、ぬったグラフが消えてしまう。幅を長くすると塗った棒グラフの長さはそのまま)
ListView_GetSubItemRectはカラムの幅変更は探知してくれないんですか?

だとすればどうすればカラムの幅に応じて塗る幅を算出できるでしょうか?
どなたか教えてください
0107デフォルトの名無しさんNGNG
>>100>>102
ぶっちゃけると、地味にフリーソフト公開してる裏で
激しくオタ臭いのを公開してるので同一ってばれるとへこむ(つд;)
0108デフォルトの名無しさんNGNG
>>107
それは厨房向けスクリプト言語作者として有名になっても同人エロゲを売ってるようなものか!?
0109デフォルトの名無しさんNGNG
>>96
[プロジェクト|オプション]バージョン情報で作者や著作権表示を指定できるからそこに設定してなければ大丈夫。
ただ一回でも設定してそれをデフォルトとして保存しておくと
別のプロジェクトでも勝手に設定されてしまうので注意が必要。
気になるならバージョン情報を確認しておいた方がいいかも。
0110デフォルトの名無しさんNGNG
>98
ドック中のオブジェクト側でならCM_VISIBLECHANGEDで消えるのは感知できるけど、
ドックサイト側ではワカランと思う。
ただドックサイトのAutoSizeプロパティをTrueにしとけば、勝手に隠れてくれるハズ。
0111ANGNG
>>110
ありがとうございます。
やってみました。たしかに、AutoSizeで自動的に消えますね。
でも、そのままだと、Panelに連動してSplitterが消せない……
とおもったけど、Panelの、OnResizeで、Panelのサイズを見て、表示/非表示させることで
解決しました。

が…、PanelのAutoSizeがTrueだと、Splitterによるサイズ調整が効かないんですね。
そういえば、これが原因で、AutoSizeをはずしたんでした…どうしたものか…
0112デフォルトの名無しさんNGNG
CM_VISIBLECHANGEDで感知した時に、ドッキングしてる数が0だったら消す。
0113ANGNG
>>112
CM_VISIBLECHANGEDって、どうやって感知すればいいのでしょうか…?
0114デフォルトの名無しさんNGNG
>>111
ドックサイト (Panel) に CM_DOCKNOTIFICATION が送られてくる。
これを検知して NotifyRec^.ClientMsg = CM_VISIBLECHANGED だったら
VisibleDockClientCount を調べて処理する。

Panel のメッセージを取るには Panel の WindowProc を付け替えたらいい。
新しい値を設定する前に元の値を保存して、付け替えた手続きの最後で
それを呼ぶようにする。
0115デフォルトの名無しさんNGNG
>104
冗談抜きで真実なら、どのへんに何が埋めこまれてるのか教えてホスィ…
0116デフォルトの名無しさんNGNG
>>115
スレ違いだから、他でやってホスィ…
0117デフォルトの名無しさんNGNG
>>115
デフォルトで VersionInfo や Manifest リソースが含まれている。
デバッグリリースには関連するファイルのフルパスが含まれている。
プロジェクトを保存するデフォルトのディレクトリは、
C:\Documents and Settings\ユーザー名\My Documents\Visual Studio Projects
0118ANGNG
>>114
おお。うまくいきました! ありがとうございます。

とりあえず、こんな感じでやってみました。

procedure TForm1.PanelDocNotify(var Message: TMessage);
begin
if Message.Msg = CM_DOCKNOTIFICATION then begin
if Panel.VisibleDockClientCount < 1 then begin
Panel.Width := 0;
end;
end;

PanelWinProc(Message); // 保存しておいた元のWindowProc
end;

説明の内容より、だいぶ単純な判定しかしてないのですが、とりあえず、これで
ちゃんと動いているように見えます。
…これだと、なにか抜けてたりしますでしょうか?

NotifyRec がどこから来たのかわからなかったので…。
0119デフォルトの名無しさんNGNG
>>118
Message を TCMDockNotification 型にキャストする。
Client にはメッセージが発生したドッキングコントロール、
NotifyRec が指す DockNotifyRec レコードには元のメッセージの
Msg, WParam, LParam に相当する値が入っている。

この場合、TCMDockNotification(Message).NotifyRec^.ClientMsg が
CM_VISIBLECHANGED のときだけ応答すればいい。
NotifyRec が nil でないことを確認してから逆参照した方が安全。
0120ANGNG
>>119
ありがとうございます。 こうしてみました。

procedure TForm1.Panel5DocNotify(var Message: TMessage);
var
 Pdn: PDockNotifyRec;
begin
 if Message.Msg = CM_DOCKNOTIFICATION then begin
  Pdn := TCMDockNotification(Message).NotifyRec;
  if (Pdn <> nil) and (Pdn^.ClientMsg = CM_VISIBLECHANGED) then begin
   if Panel5.VisibleDockClientCount < 1 then begin
    Panel5.Width := 0;
   end
   else begin
    if Panel5.Width = 0 then begin
     Panel5.Width := Form1.ClientWidth div 4;
    end;
   end;
  end;
 end;

 Panel5WinProc(Message); // 保存しておいた元のWindowProc
end;

前のだと、隠れた子コントロールが表示させられた時、に対応できてなかった…。
012119NGNG
>>25-26
レスありがとうございます。
>SQLでしかやったことないが、コンパネ→管理ツール→ODBCで
>オラクルが動いてるサーバにODBCで接続。
>DelphiからODBCはDelのデータベース→エクスプローラから
>接続すればいいんでないの?

データベースエクスプローラーからは接続できましたが、これをプログラム内で
利用するにはどうしたらいいでしょうか?
色々と検索しているのですが、データベースエクスプローラーに関するサイトが少ないので、
それ以上進展していません。
アドバイス、あるいは参考になるサイトがあったら教えてください。

ちなみに、ローカルに置いてあるデータベースに接続するぐらいは
本で勉強したので何とか出来ます。
0122デフォルトの名無しさんNGNG
>>121
本で勉強して何とかしろ
0123デフォルトの名無しさんNGNG
DelphiってSQL Server 2005 (Yukon)と連携できますか?
VB 2005ではできたんですが。
0124デフォルトの名無しさんNGNG
>>123
来月発表のDelphi 9なら可能です。
012519NGNG
>>122
delphi DB&WebプログラミングとかDBが載っている本は買ったのですが、ローカルマシンのDBに
接続するやり方しか載ってないのですよ。
少なくとも書籍とネット、DelphiMLは色々と検索したのですが、分かりませんでした。
お手数ですが教えてもらえないでしょうか?
0126デフォルトの名無しさんNGNG
任意のディレクトリにあるファイル名の一覧を取得したいんですがどうやったらいいのかさっぱりわかりません。どなたかお願いいたします。
0127デフォルトの名無しさんNGNG
>>125
ODBCドライバを設定して、外部DBに接続できているなら、外部もローカルもない。
あとはBDEやADOの問題。

BDEなら、BDE Administratorでエリアス作成して
TTableなどから、そのエリアスを使用するだけ。

ADOなら、接続文字列を作成して
TADOTableなどを使用するだけ
0128デフォルトの名無しさんNGNG
>>126
FindFirst
FindNext
FindClose
0129デフォルトの名無しさんNGNG
>>128ありがとうございます。やってみます!
013019NGNG
>>127
ありがとうございます。やってみます。
0131ANGNG
上のサイズ可変な自動的に閉じるドックサイトですが、いちいちコーディングするのは面倒なので、
コンポーネント化しています。
いろいろやっていて壁にぶつかりました…。

Align プロパティの値を制限するには、どうしたらいいのでしょうか?
alTop, apLeft, alBottom, alRight だけにしたいのです。

思いついた範囲では、その4つだけの型を作って、Alignプロパティを再定義。
書き込みメソッドで、本来のAlignに変換して書き込み…とやろうとしたのですが、
本来のAlignへのアクセス方法がわからない…orz
0132デフォルトの名無しさんNGNG
>本来のAlignへのアクセス方法がわからない…orz
Inherited Align
或いは TControl.Align では?
0133デフォルトの名無しさんNGNG
×TControl.Align
○TControl(Self).Align
0134デフォルトの名無しさんNGNG
>>131
>その4つだけの型を作って
これでも全然問題ないけど
型増やさないでwriteメソッドで設定値調べてalNone, alClientなら
デフォルト値(alTopとか)をセットというのもありかも。
0135デフォルトの名無しさんNGNG
>>131
部分範囲型を使ったらいいと思う。
例えば type TAlign1 = alTop..alRight;
このように定義した TAlign1 は inherited Align に代入できる。
>>134 が書いてるように write メソッドで範囲をチェックすること。
0136ANGNG
>>132
Inherited ってそういう使い方もあるんですね。overrideしたときしか使えないものだと
思い込んでました。

>>134
その方法だと、オブジェクトインスペクタに設定できない(設定しても反映されない)項目が
表示されるのが、ちょっと…と思ったので。

>>135
その方法でやってみました。

type TAmDsAlign = alTop..alRight;
property Align: TAmDsAlign read GetAlign write SetAlign default alLeft;

procedure TAmDockSitePanel.SetAlign(Value: TAmDsAlign);
begin
if not(Value in [alTop..alRight]) then Value := alLeft;
inherited Align := Value;
end;

function TAmDockSitePanel.GetAlign: TAmDsAlign;
begin
Result := inherited Align;
if not(Result in [alTop..alRight]) then Result := alLeft;
end;

としたところ、うまくいきました。オブジェクトインスペクタの表示も、4っつのみになりました。
ありがとうございます。
0137デフォルトの名無しさんNGNG
TWebBrowser 以外にウェブブラウザはありまつか?
無料のものが欲しいでつ。
0138デフォルトの名無しさんNGNG
ありまつ
0139デフォルトの名無しさんNGNG
教えて下さい>>138
0140デフォルトの名無しさんNGNG
delphiでの通信プログラミングについて質問させて下さい。
今、PCとあるデバイス(イーサネット/RS-232C変換機)を
イーサネット(LAN)とRS-232Cケーブルで相互接続しています。
ここで、シリアルケーブル(RS-232C)のCD(Carrier Detect)信号を
PCのシリアルインターフェース側から発生させて、
CDがデバイスを通してPCのLAN側で検知できているかどうかのプログラムをdelphi
で作りたいのですが何から手を付けていいのか解らない状況です。
ここで、本来は
PC--イーサネット/RS-232C変換機--RS-232C機器
という構成にしたいのですが、RS-232機器がないため、ソフト的にチェックしたいために
上記のように相互接続にしました。

アドバイスの方を下さい。よろしくお願いします。
OSはXP Pro、delphiはversion5.0 Proです。
0141ANGNG
>>140
まずはそのイーサネット/RS-232C変換機 とやらの詳細や、その変換機のドライバの情報を
調べて書くことから、始めてみたらいいとおもう。

ソフト側からは、LANポート経由で通信した内容が、ドライバで仮想的なRS-232Cに見える。
ってかんじなんだろうか…?

RS-232Cを扱うコンポーネントは、たしかあったはずだけど……みつからない…
あとで探してみよう。
0142デフォルトの名無しさんNGNG
ピタゴラス整数判別のプログラム作りたいんだけど、
ぜんぜん分かんない。。。
ヒントでもいいから、教えてください。お願いします。
0143デフォルトの名無しさんNGNG
>>142
ピタゴラス整数とは何か?要件を述べよ
0144デフォルトの名無しさんNGNG
FillRectやRectangleが引数に与えたとおりのRectで塗りつぶしてくれません。
どうやらhDCを持つ範囲すべてを全部塗りつぶしてしまっているようなのですが…
これはいったいどうやったら指定のRect範囲で塗りつぶしてくれるのでしょう?

Rectの各値をいくら調整しても、小さくなってくれません。

Rectangleにおいては中を塗りつぶさずにPenで外枠をかくと指定どおりのRectで
外枠を書いてくれているのですが…
これでBrushプロパティを指定するとRectの範囲をはみ出して描いてしまいます。
0145275NGNG
>>143
a^2+b^2=c^2を満たす、a,b,cの整数の事です。
それを求めるプログラムです。
0146デフォルトの名無しさんNGNG
>>143
http://www004.upp.so-net.ne.jp/s_honma/pythagoras/pythagoras.htm

ピタゴラス数、ピタゴラス三角形の方がヒット数が増えるね
0147デフォルトの名無しさんNGNG
コードみせて
0148デフォルトの名無しさんNGNG
>>144
コードみせて
0149デフォルトの名無しさんNGNG
数式が分かっているなら、あとは方程式を解くアルゴリズムを探せば良い
ニュートン法?
0150140NGNG
>>141
レス有難うございます。
デバイスは以下のURLにある物で変換機のほかにルータとしての機能も付いています。
今PCのブラウザからデバイスの設定画面(ルータの設定画面の様なもの)に入り
CD信号のON,OFFが確認できるのですが、
これはシリアルケーブルの方を接続するとCDがON、離すとOFFになります。
どうやら物理的にはCD検知出来ているようです。

そこで、シリアルケーブルを繋ぐとCDがONしてあるアクションを起こすようにするために
delphiでCD信号監視プログラムを作ろうと思います。
こうすれば物理的にシリアルケーブルを接続したり離したりすれば
そのプログラムのテストが出来そうなので。
でも、肝心な実装するプログラムがわかりません。
TClientSocketコンポーネントなどを利用すれば出来ますでしょうか?

ttp://www.centurysys.co.jp/product/fa11/rindex_s.html
0151142NGNG
>>149
アルゴリズム・・・。
わかんない。。。ごめん。。
0152デフォルトの名無しさんNGNG
>>151
コンピュータを使ってある特定の目的を達成するための処理手順。
アルゴリズムをプログラミング言語を用いて具体的に記述したものを
プログラムという。

0153142NGNG
>>152
よくわかんないけど、とりあえず、3≦a<b≦100をみたすものをすべて打ち出せ。
って問題だから、打ち出せればなんだっていいと思う。。。。
0154デフォルトの名無しさんNGNG
>>153

procedure TForm1.Button1Click(Sender: TObject);
var
Ia,Ib,Ic,SumSq:integer;
rt:Extended;
begin
for Ia := 3 to 99 do
for Ib := Ia+1 to 100 do begin
SumSq := Ia*Ia + Ib*Ib;
Ic := Round(Sqrt(SumSq));
if SumSq = Ic*Ic then
Memo1.Lines.Add(Format('a : %d b : %d c : %d',[Ia,Ib,Ic]));
end;
end;
0155デフォルトの名無しさんNGNG
>>154

rt はいらない
0156144NGNG
実はTListView内で棒グラフを表示したいので…
それをもとにAdvancedCustomDrawSubItemの部分に以下のようなコードを書きました。

ListView_GetSubItemRectマクロを使用して、棒グラフを表示させたい部分の
Rectを取得して。

Rect.Top = Rect.Top + 1;
Rect.Bottom = Rect.Bottom - 1;

として棒グラフの幅を調整
そして

//<注1>
Sender.Canvas.Pen.Color = clBlue;
Sender.Canvas.Rectangle(Rect);

とすることで、Rectの幅どおりに中が塗りつぶされていない四角形を書くことができました。

そして次に上記の<注1>の部分をそっくり以下のコードに入れ替えました

Sender.Canvas.Brush.Style := bsSolid;
Sender.Canvas.Brush.Color := clBlue;
Sender.Canvas.Rectangle(Rect);

ところがRectを無視して、棒グラフが描画されるべき欄は真っ青になってしまいます…
Rect.Top = Rect.Top + 1;
Rect.Bottom = Rect.Bottom - 1;
をいくら調整してもその変更が反映される様子はありません…

いったいどうなっているのでしょう? どなたかアドバイスよろしくお願いいたします。

0157142NGNG
うわああああああ、できたあああああああ!!!(・∀・)
154さん、本当にありがとう☆☆☆
0158デフォルトの名無しさんNGNG
>>156
DefaultDrawがtrueだからでは。
変更されたBrushを使ってデフォルトの描画をされてしまうからね。
0159デフォルトの名無しさんNGNG
Sender.Canvas.Brush.Style := bsSolid;
Sender.Canvas.Brush.Color := clBlue;
Sender.Canvas.Rectangle(Rect);
Sender.Canvas.Brush.Style := bsClear; // これを加えてみるとか
0160デフォルトの名無しさんNGNG
>>158
なるほど、わかりました!

>>159さんのコードで解決することができました!
0161デフォルトの名無しさんNGNG
西暦年号を入力するとその年が平年か、閏年かを判定するプログラムが作りたいんだけど、
わかりません。。。
どなたか教えてください。
お願いします。
0162デフォルトの名無しさんNGNG
>>161
IsLeapYear 関数
0163161NGNG
IsLeapYear 関数を使わないでやりたいんですけど、
できますか?
0164デフォルトの名無しさんNGNG
できます
0165142NGNG
すいません、、、再び質問なんですが、
ピタゴラス定数を満たすa,b,cが何組あるか、
その総数を出力するプログラムを作るには、
どんな関数を使ったらいいんですか?
それと、総数もメモの欄に出力することはできますか?
何度も質問すいませんけど、教えてください。。
0166デフォルトの名無しさんNGNG
>>163

http://www.echizenya.co.jp/mini/colum/uruudosi.htm

1.西暦年が4で割り切れる年は閏年とする。
2.西暦年が4で割り切れる年でも、100で割り切れる年は閏年としない。
3.西暦年が4で割り切れ、100でも割り切れる年でも400で割り切れる年は閏年とする。

これをコードで表現する
0167デフォルトの名無しさんNGNG
>>165

procedure TForm1.Button1Click(Sender: TObject);
var
Ia,Ib,Ic,SumSq:integer;
count:integer;
begin
count := 0;
for Ia := 3 to 99 do
for Ib := Ia+1 to 100 do begin
SumSq := Ia*Ia + Ib*Ib;
Ic := Round(Sqrt(SumSq));
if SumSq = Ic*Ic then Inc(count);
end;
Memo1.Lines.Add(IntToStr(count)+'個ありますけど');
end;
0168142NGNG
>>167
たびたびありがとうございます。
本当に感謝感謝です!
0169161NGNG
>>166
なるほど、ありがとうございます。
えーと、これをコードで表現しようとして、EditとBottunを一つずつ作って、
ShowMessageで閏年かどうかを示そうと思ったのですが、Edit1に入力した数字を
Bottun1のif文で使うにはどうしたらいいかがわかりません。。。
どうしたらいいのでしょう?
それとも、別の方法のほうが良いのでしょうか?
よろしくお願いします。
0170デフォルトの名無しさんNGNG
>>169
>Edit1に入力した数字をBottun1のif文で使うにはどうしたらいいかがわかりません。。。

なんだか文章がピタゴラスの人と同じですね。宿題をこの際かたずけるつもりですか。
文字列から数値に変換するには StrToInt() を使う。
整数のわり算のあまりを求めるには mod を使う。以上、ヒント

0171142NGNG
断っておきますが、僕は169とは別人です・・・。
本当に・・・。
0172デフォルトの名無しさんNGNG
>>171
それは失礼。祈る健闘。
0173デフォルトの名無しさんNGNG
どうでもいいけど、日本語では「かた"づ"ける」だよ
0174デフォルトの名無しさんNGNG
どうでもいいけど、日本語では「かた"づ"ける」だよ"。"
017519NGNG
>>127
TTableのTableNameのドロップダウンリストを見ようとすると、Oracleに接続されていません。
と表示されてしまいます。

32bit Administratorではデータベースにきちんと接続できて色も変わっているのですがなかなか。
エリアスはドロップダウンリストから選択しているのでタイプミスなどは無いです。
0176デフォルトの名無しさんNGNG
>>175
テーブルへのアクセス権ってある?
0177ANGNG
>>150
そのページによると、

>2.FA-21,FA-11を意識させない透過的な接続:
>
>FutureNet FA-21,FA-11を使ってもPC上のソフトウェアに変更は必要ありません。
>RS-232を持つ装置とPCとの間の通信は透過的(ソフトウェアから見るとFA-21,FA-11は存在しない)に
>おこなわれ、PC上のソフトウェアは PCの COM ポートへアクセスするのと同じインタフェースで
>実現できます。

って書いてあるね。

てことは、PCからは、それはイーサネットではなく、RS-232Cとして見えているはずだから、
Delphiのほうも、RS-232Cとして、扱ってやればいいんだと思う。

とりあえず、Delphian World ( http://home1.infonia.ne.jp/~delphian/delphi/ )の、
Networkのコーナーに、「Delphi4用 RS-232C 通信コンポーネント」ってのがあるのは
見つけた。
こいつが、Delphi5でも動くかどうか、とか、どうやって使うのか、とかは、私にはわからないので、
あとは、がんばって自力か他の人に聞いてみて。
017836,41NGNG
>37

やっと出来ました。
ありがとうございます。

TBitmapで書いたイメージをTPaintBoxに書き込みことは出来たのですが
Tbitmapが大きなサイズのとき、TPaintBoxに一部が表示されます。
スクロールバーで表示されていない場所を表示するようにしたいのですが
どのようにやるのでしょうか
0179ANGNG
>>178
TPaintBox を TScrollBox に入れてみるとかかな?(未確認)
0180178NGNG
>179

色々やってみましたが、TPaintBox と TScrollBox はくっつかないような気がします。
間違えていましたらすみません具体的に教えてください。
0181デフォルトの名無しさんNGNG
>>180
ScrollBox を貼り付けて適当なサイズに調整し、その中に PaintBox を
貼り付ける。
Bitmap のサイズを決めるときに PaintBox のサイズも変更する。
PaintBox が大きくなるとスクロールバーが自動的に出てくると思う。

描画は PaintBox の OnPaint イベントの中だけで行うこと。
描き直すべき領域は ClipRect でわかるので (座標の原点は見えている
部分に関係なくクライアント領域の左上)、その部分だけ描けばいい。
0182デフォルトの名無しさんNGNG
delphiって2年後にはオープンソースになってる気がするけど。
0183デフォルトの名無しさんNGNG
TServerSocket で一定数以上のコネクションについて
拒否或いは受け入れをを遅延させるにはどうすれば良いのでしょうか
0184デフォルトの名無しさんNGNG
>>183
Close
0185デフォルトの名無しさんNGNG
TComboBoxのイベントにはMouseDownが無いのですが、上位クラスにはあります。
手軽にMouseDownを使えるようにするにはどうすればいいのでしょうか?
0186デフォルトの名無しさんNGNG
継承して、published にしたコンポを作るといいのでは
0187デフォルトの名無しさんNGNG
>>186
コンポーネントにすると大量に作り変えないといけないので、
現存のプログラムに追加する感じでコード上に書き足す程度の方法がいいのですが
そう言った方法ってないのでしょうか。
0188デフォルトの名無しさんNGNG
それなら、どんな方法でも大量に作り替えないといけないのでは?

そもそも TComboBox でどうして OnMouseDown イベントがほしいの? それも大量に?
0189デフォルトの名無しさんNGNG
いえ、Comboがマウスダウンを検知してくれればAPIとかでもいいんです。
ただ上位クラスから継承する簡単な方法があればいいなと思いまして。
0190デフォルトの名無しさんNGNG
ComboでMouseDownを検知する方法をググって見ると解決したらしい例が
1件だけあったけど今は見れないようで。
0191デフォルトの名無しさんNGNG
>>189
>Comboがマウスダウンを検知してくれれば

だから、なにをしたくて検知したいの?
0192デフォルトの名無しさんNGNG
>>191
あるのかないのか聞いてるんですよ。
ちょっとうざい。
0193ANGNG
TComboBoxを継承したTMyComboBoxを作って、
フォームをテキストで表示、ソースとフォームの
TComboBoxを全てTMyComboBoxに置換。とかは?
0194ANGNG
……191じゃないが、レスしないほうが良かったか…

何の為にやりたいのかがわかれば、
別の方向からの解決法があるかもしれない。

なんでわざわざ、不必要な情報隠蔽するんだ?
結局、損をするのは自分なのに。
前みたいに、「ある」とか「できる」だけの無意味なレスで埋まってるのがいいのか
0195デフォルトの名無しさんNGNG
>>192は元質問者とは別人だと思うが、最終的に何がやりたいかがわかれば
別回答が出てくる場合もあるから、詳細を書いた方がいいと思う。
0196195NGNG
うわ、かぶったorz
0197デフォルトの名無しさんNGNG
>>192
結論から言えば簡単ではないがやろうと思えばできる。

Style が csDropDown または csSimple のコンボボックスは複数の
ウィンドウで構成される複合コントロールなので継承クラスを作らずに
実現するのは非常に難しい。

複合コントロールでない場合は型キャストで OnMouseDown に手続きを
割り当てるだけで可能なはず。
019819NGNG
>>176
マシンを再起動したらできるようになりました。
スマソ
0199お馬鹿な回答者の為の回答フローNGNG
〜がありますか?

if あるなら then
 その方法を提示;

if ないなら or 現実的でないなら then
begin
 直接的な解はないと回答
 while さらに別の方法が必要か? do
  一段階上位の要求を聞きだして、その方法を提示
end;
0200真・お馬鹿な回答者の為の回答フロー NGNG
begin
バカな質問者は無視。
end;
0201デフォルトの名無しさんNGNG
>>199
>if あるなら then
> その方法を提示;

今回はここまでは行っている。でも、質問者はそれ以上に<簡単にできる>こと
を望んでいる。やりたいことがあるのは分かるけど、その目的を明らかにしない。
そういうのは無視が一番。
0202デフォルトの名無しさんNGNG
>今回はここまでは行っている。
行ってないだろ。いきなり別解に突入してる。
0203デフォルトの名無しさんNGNG
>>137-139 もお願いします。
0204デフォルトの名無しさんNGNG
>>203
上は標準のWebBrowserのバグ修正版みたいなの。下はMozilla版
http://www33.ocn.ne.jp/~takoyakusi/delphi/UIWebBrowser/
http://www02.so-net.ne.jp/~rando/mozilla/

海外制のもあって2chブラウザ(確かぞぬ)で使ってたはず。
興味あるなら調べてみたら。
0205デフォルトの名無しさんNGNG
>>202
継承してコンポ作れってかなり一般的で単純明快でまともな回答じゃねぇか
どこが別解なんだよ?
先のことを考えずに設計したのが悪いんだろ?
超初心者スレだから設計が下手なのは仕方がないが、
情報隠蔽しながら、より簡単な解を求められても対処のしようがない。



まぁ、何はともあれ
あとは>>202が引き受けてくれるそうです。よかったですね^^
0206デフォルトの名無しさんNGNG
DelphiとVB、どちらが可読性が高いですか?
0207デフォルトの名無しさんNGNG
Pascalの可読性は最高。
クラス派生による差分コーディングとthrowにより行数が少ないのに高機能安定動作。

VBのイベントハンドラコピペソースはサイアク。
0208デフォルトの名無しさんNGNG
>>207
オブジェクト・インスペクタ最高!!!
特にイベント
0209デフォルトの名無しさんNGNG
Del厨ってどうしてそんなに釣られやすいんですか?
どうして愛する自スレをこうも容赦なく荒らせるんですか?
初心者なので分かりやすく教えてください。
0210デフォルトの名無しさんNGNG
209はゲラ
0211デフォルトの名無しさんNGNG
502 :デフォルトの名無しさん :04/07/03 12:38
.NET 2.0 Betaを使ってみて、VCL.NETを使おうかと本気で検討中。
このスレにいる使ったこともなく語る人たちは信じられないだろう。

.NETライブラリの互換性って、クラス名、メソッド名が同じなだけで、動作はだいぶ違う。
いま1.1でできているものが、2.0でデザインが崩れたりチラツキが出たりしている。
修正したくてもクラスライブラリがsealedやinternal使ってて無理。
バージョンがあがるたびにこれほど変更されるくらいなら、VCLの方がマシ。
いや、VCLも.NET 2.0以降まで対応するという前提で。
0212デフォルトの名無しさんNGNG
>>211
VCL.NETヨサゲ
0213デフォルトの名無しさんNGNG
必死だな。(藁
0214デフォルトの名無しさんNGNG
>>213
砂漠で目玉焼きでも作ってろ(藁
0215デフォルトの名無しさんNGNG
聖火で焼いた玉子焼きってうまいのかな
0216デフォルトの名無しさんNGNG
Del厨って馬鹿ばっかり
0217デフォルトの名無しさんNGNG
MessageDlg('馬鹿でも使えるんだから仕方ないだろ!',mtWarning,[mbOk],0);
0218デフォルトの名無しさんNGNG
MsgBox "VBの方がはるかにマシ"
0219デフォルトの名無しさんNGNG
何だ、この糞スレは?

VB超初心者スレに変更だ。
0220デフォルトの名無しさんNGNG
>>219
VB使いの方が人口多いし、そうした方が有意義だね
0221デフォルトの名無しさんNGNG
>>217-218
どう見てもMessageDlgの勝ち。
0222デフォルトの名無しさんNGNG
>VB使いの方
氏にました。
0223デフォルトの名無しさんNGNG
Del厨荒らすなよ。(ゲラ
0224デフォルトの名無しさんNGNG
D7ProにあるSpinEditって右寄せできない?
TSpinEditのCreateParamでES_RIGHTを追加してもだめだったんだけど。
0225デフォルトの名無しさんNGNG
>>224
エンプラ版ではできるぞ。もっと貢げよ。(ゲラ
0226224NGNG
すみません。自己解決しました。
0227デフォルトの名無しさんNGNG
基地外が去るまで耐えよう。
0228デフォルトの名無しさんNGNG
227 = 基地外
0229デフォルトの名無しさんNGNG
アホアンチはほんと迷惑な奴だな。
0230デフォルトの名無しさんNGNG
228=229=手の内三重三重
0231デフォルトの名無しさんNGNG
いや、俺には229=230に見える
0232ANGNG
オブジェクトインスペクタに表示されなくてもいいなら、
別に継承だけでコンポーネントとして登録しなくてもいいけどね
それが一番簡単な方法だと思う

フォームソースの方の書き換えがいやなら、
生成後にインスタンスをすりかえるとか。

ただ、先祖が公開していた物を、わざわざ隠してあるってことは、
そこには触れて欲しくないってことだろうから、
何らかの副作用が有るかもしれないけど。

あと、どうしても、既存のソースをいじりたくない、いじるのが面倒ってのなら、
継承も置き換えもせずに、やる方法も有るには有る。
ただし、継承を使う方法よりもずっと面倒で遠回りだけど
0233デフォルトの名無しさんNGNG
type TMyComboBox = class(TCustomComboBox)
  public property OnMouseDown;
 end;

TMyComboBox(ComboBox1).OnMouseDown := ...

でいけるよ。動作保証も推奨もしないけど。
0234デフォルトの名無しさんNGNG
VBに比べると面倒だな
0235デフォルトの名無しさんNGNG
そもそもなんでDelphiスレにまでVB厨がくるんだよ。
0236デフォルトの名無しさんNGNG
>>186
前に俺も悩んだんだけどDelphi広場で検索すると似た様なのが見つかるよ。
確かHalbowがレスつけてて神を感じたような記憶がある。
0237デフォルトの名無しさんNGNG
(;^ิД^ิ) < レス下さった方ありがとう御座います。
荒れてたのでちょっとへこんでました。

テストしましたら>>233と>>236のサイト先のどちらの方法でも検知する事ができました。
0238デフォルトの名無しさんNGNG
夏らしい展開だったなw
0239178NGNG
>179,181
ありがとうございます、そしてごめんなさい
TScrollBoxとTScrollBarを勘違い色々いじくっていました。

>181
>描画は PaintBox の OnPaint イベントの中だけで行うこと。
>描き直すべき領域は ClipRect でわかるので (座標の原点は見えている
>部分に関係なくクライアント領域の左上)、その部分だけ描けばいい。

ここの部分がよくわかりませんでした。
TImageでPicture.Bitmapに代入することでとりあえず目的は達成しましたが
もう少し教えてもらえないでしょうか
0240デフォルトの名無しさんNGNG
ふー、やっとブビ厨が去ってせいせいした。w
0241デフォルトの名無しさんNGNG
>>233のやり方はオブジェクトのフィールドのメモリ上の配置がリファレンスで規定されている以上完全に合法。
TCustomComboBoxで定義されたフィールド・プロパティにアクセスしている限り正しい動作が保証される。
0242デフォルトの名無しさんNGNG
何をもって「正しい」とするかだな。
0243デフォルトの名無しさんNGNG
そういう場合はふつー反例一つでで済むんだけどな。
0244デフォルトの名無しさんNGNG
>>239
PaintBox が ScrollBox よりも大きくなると PaintBox のうち
見えてない部分が発生する。それでも PaintBox.Canvas の座標の
原点は PaintBox の左上になるということ。
OnPaint イベントは WM_PAINT の呼び出しによって発生するが、
PaintBox に来る前に古くなった領域と PaintBox のクライアント
領域が重なり合う領域だけにクリッピングされているので、
ClipRect の外側は描画しなくてもいいということ。別に描画しても
まったく問題はないが、時間のかかる描画を行う場合、その部分を
省略することで高速化が図れる。
TImage は Picture が変更されるたびに Invalidate を呼び出して
Image 全体が古くなったことにするので、ドットを 1 つ打つだけでも
全部を描き直すことになる。
0245デフォルトの名無しさんNGNG
ドライブが使えるかどうか判定したいんですが・・・
どなたかお願いいたします。
0246ANGNG
>>245
GetLogicalDrives APIを使うといいらしい。
詳しくはここに。
ttp://homepage1.nifty.com/MADIA/delphi/Win32API/GetDrives.htm
0247デフォルトの名無しさんNGNG
>>246
ありがとうございます!やってみます!
0248247NGNG
>>246うまくできました!本当にありがとうございました。
0249デフォルトの名無しさんNGNG
Delphiでコンポーネントを使わずソケット通信をしたいのですが
コピペで使えるようなサイトないでしょうか?
0250デフォルトの名無しさんNGNG
WinSock使え。
BSD互換APIなら山のように転がってるだろ。Cだけど
0251デフォルトの名無しさんNGNG
>>250
いや、だからCなら知ってるの。
それをDelphiで書いてあるのがほしいの。コピペしたいの。
0252デフォルトの名無しさんNGNG
またあれてたんだなここ。
寧ろ返答者側が夏真っ盛りだな。
0253デフォルトの名無しさんNGNG
今日の肴は249か・・・
0254デフォルトの名無しさんNGNG
じゃあ、なにをuses句に追加すればいいかだけ教えて
0255デフォルトの名無しさんNGNG
>>254
お前にはVBがお似合いだ
0256デフォルトの名無しさんNGNG
まだ〜
0257デフォルトの名無しさんNGNG
>>244
質問したものではありませんが、参考になりました。
TCanvas.ClipRect を有効利用する方法がわかりました。TImage よりいい感じ。

procedure TForm1.FormCreate(Sender: TObject);
begin
bmp := TBitmap.Create;
bmp.LoadFromFile('C:\WINDOWS\雲.bmp');
with PaintBox1 do begin
Top := 0;
Left := 0;
Width := bmp.Width;
Height := bmp.Height;
end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
bmp.Free;
end;

procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
with PaintBox1.Canvas do
CopyRect(ClipRect,bmp.Canvas,ClipRect);
end;
0258デフォルトの名無しさんNGNG
DelphiからDirectXって使えないんですか?
0259258NGNG
VBなら使えるのに
0260デフォルトの名無しさんNGNG
>>258
使えないんですか?って訊くのはどうして? 使えますか? じゃないの。
使えなさそうな情報でもあるの?
0261デフォルトの名無しさんNGNG
ほら、VBと比べるとすぐにムキになる。(ゲラ
0262デフォルトの名無しさんNGNG
はいはい、無視して次どうぞ
0263デフォルトの名無しさんNGNG
VBとDelphi、どっちが優秀ですか?
0264デフォルトの名無しさんNGNG
>>263
VB厨からの視点
VB>>>Delphi>>∞>>263

Delphi厨からの視点
Delphi>>>VB>>∞>>263
0265デフォルトの名無しさんNGNG
優秀なアプリが多い方が勝ちです
0266デフォルトの名無しさんNGNG
数勝負なら圧倒的にVBだな。
0267デフォルトの名無しさんNGNG
エディタの部分のフォントサイズを変えるにはどうしたらいいのでしょうか?
ツールのエディタオプションとかみても見つけられないのです。
0268デフォルトの名無しさんNGNG
ツールのエディタオプションで設定しとけ
0269デフォルトの名無しさんNGNG
>>267
Delのバージョンは
0270デフォルトの名無しさんNGNG
2005
0271デフォルトの名無しさんNGNG
昨日から単純なプログラミングで煮詰まってしまった。

TextOut(0, 0, '・'); // TCanvasへの「中黒」の描画

中黒がどうしても表示されない。
他の文字に置き換えると、
普通に表示されるのに。。。

こんなことって、ありえないですよね。
0272自己レスNGNG
>>271
古いフォントを使ったのが原因でした。
中黒のないフォントなんて。。。

お騒がせしました。
0273デフォルトの名無しさんNGNG
ズコー(AAry
0274デフォルトの名無しさんNGNG
禿ワラ
0275ANGNG
>>249
自分でコーディングせずに、コピペするぐらいなら、コンポーネント使ったほうが
楽だと思うのだけど…とりあえず、まじレスしてみる。

Delphi + WinSock でぐぐって最初にでてくるこのサイトでいろいろ解説されてるらしい。
ttp://www.asahi-net.or.jp/~nk2w-ishr/winsock0.htm

また、書籍では、「Delphi2 達人テクニック」という本に、詳しい解説があります。
名前からわかるように古い本なので、今でも手に入るかどうかはわかりませんが、
Indyを入れる前は、お世話になってました。
0276ANGNG
>>258
こっちにも。

DelphiでDicectXは使えます。
VC++で使うのと同じように、DirectX APIを使って、使用することができます。

また、それより楽をしたい場合は、DelphiX というフリーのコンポーネント集があります。
ただし、少し古いので、対応がDelphi5まで、DirectX7まで、になっています。

この他にも、QuadrupleD、というフリーコンポーネントもあり、こちらのほうは、
新しいものもサポートされているようです。(私は使ってないので詳しいことはわかりません)
ttp://www-fu.magma.ne.jp/~hayase/dddd/
0277デフォルトの名無しさんNGNG
Char型の配列にString型の文字列を、
キャストして入れようとしたんですが入らない。。。
配列一つ一つに文字列を一文字ずつキャストして入れればいいと思うんだけど
やり方わかりません。
教えてエロい人!
0278デフォルトの名無しさんNGNG
Move(CharArr, PChar(str)^, Length(str));
0279デフォルトの名無しさんNGNG
>>277
procedure TForm1.Button1Click(Sender: TObject);
var
 CharArr: array[0..255]of Char;
 S: string;
begin
 S := 'ミ,,゚Д゚彡';
 StrCopy(CharArr, pChar(S));
 Label1.Caption := CharArr;
end;
0280ANGNG
>>277
var
 c: array of char;
 s: String;
 i: Integer;
begin
 s := 'ABCとか適当に';

 SetLength(c,Length(s));
 for i := 0 to Length(s)-1 do
  c[i] := s[i+1];
end;

こんな感じかな?
forループの回数と、Char配列とString型の添字の値の違いに注意。
0281ANGNG
スマソ、全然楽な方法があったのね…orz
0282デフォルトの名無しさんNGNG
>>278-280
みんなまとめて�dクス!

0283デフォルトの名無しさんNGNG
>>277
元の文字列の長さが不定の場合は Move や StrCopy の代わりに
StrLCopy を使った方が安全。
0284デフォルトの名無しさんNGNG
SetString だろ。お前らアフォか?
0285デフォルトの名無しさんNGNG
お前がアフォ
0286ANGNG
まだ、ドックサイトパネルを作ってます。ほぼ期待通りの動作をするところまで
いったのですが、一つなぞの現象が……

自作パネルのalignを、alTopかalBottomに設定して、
Formの上にclClientに設定したMemoを乗せただけのフォームをドッキングさせると、
自動的に表示されるグラバをつかんでも、ドック解除ができません。
なぜか、グラバにある[×]ボタンをダブルクリックすると、解除されます。

ドッキングに関係ありそうな部分だと…
自作パネルは、TCustomPanel より派生。
GetSiteInfo、DoDockOver、DoAddDockClient、DoRemoveDockClient の各メソッドを
オーバーライドし、CM_DOCKNOTIFICATION メッセージに反応するようにしてあります。
その他のコードは、表示制御関連で、直接関係無いと思うのですが…

実験のために、オーバーライドした、4つのメソッドの中身と、CM_DOCKNOTIFICATION メッセージ
のメソッドの中身を、inherited; を残してコメントアウト。
それでも症状は変わらず…。ということで原因はそれ以外。

alignが、alLeft、alRightの時は正常に動くので、どうやらグラバが縦長の場合にのみ
おかしくなっていそうなのですが…DockSiteなコンポーネントを作るにあたって、
DockSite := True; にする、以外に注意することって、なにかありましたでしょうか?
0287ANGNG
…ためしに、思いっきり単純化してみたところ…

type
 TDSPanel = class(TPanel)
 public constructor Create(AOwner: TComponent); override; end;

constructor TDSPanel.Create(AOwner: TComponent);
begin
inherited;
DockSite := True;
end;

var DSP: TDSPanel;
procedure TForm1.FormCreate(Sender: TObject);
begin
 DSP := TDSPanel.Create(Self);
 DSP.Parent := Self;
 DSP.Align := alBottom;
end;

たったこれだけで、すでに同じ問題が起きてることがわかりました…orz

Createの、DockSite := True; をコメントアウトして、代わりにFormのほうで、
DSP.DockSite := True; すると、きちんと動くようです。
これはいったい………。DockSite := True; で何が行われているんだろう…。
0288デフォルトの名無しさんNGNG
DockSiteを設定したあと、Alignを設定すると駄目なもより
0289ANGNG
>>288
おおっ、できました。

procedure TAmDockSitePanel.SetAlign(Value: TAmDsAlign);
begin
DockSite := False;
if not(Value in [alTop..alRight]) then Value := alLeft;
inherited Align := Value;
DockSite := True;

SplitterRePositon;
end;

こんな感じに、一度、False にしてから、Trueにすることで、正常に動くようになりました。
どうやら、DockSite := True の時に、その時点でのAlignを元に、ドックマネージャーの
生成が行われている、っぽい感じですね。
それなら、同じくAlignが変化している、alRightでは、問題が起きない理由に説明が
つきます。

ありがとうございました。
0290デフォルトの名無しさんNGNG
Delphiって最新版の無償版ってもう出ないんですか?
VB2005のExpressが非常に優秀だったので比較したかったのですが・・・。
0291デフォルトの名無しさんNGNG
>>290
今のところ予定はありません。
0292デフォルトの名無しさんNGNG
>>290
VBにはもう勝てないので出しません。
0293デフォルトの名無しさんNGNG
>>290
無償版はドキュン・厨房を増やすだけだと言う事に気づきました。
0294デフォルトの名無しさんNGNG
そんなことない。VBには一度も無償版がなかったにもかかわらず(以下略
0295デフォルトの名無しさんNGNG
だれか291の予定を訊いたのか? おれの予定にもないけど
0296デフォルトの名無しさんNGNG
すいません 質問させてください。
DelphiでTablet PC Platform Software Development Kit (SDK) v1.5
を使用してInkPictureを使ったアプリを作るにはどうすればよいのでしょうか?
ActiveXの取り込みは失敗しました(⊃д⊂)
0297296NGNG
VBなら問題なくできるんですけど
0298296NGNG
>>297
VBなら出来るように資料はあったのですが
どうしてもDelphiでやりたいんです;;

どなたかわかる方はいらっしゃいませんかね・・・;;
0299デフォルトの名無しさんNGNG
>>298
エラーメッセージを出せ
0300296NGNG
>>299
コンポーネント>ActiveXコントロールの取り込み>
Microsoft Tablet PC Type Library, version 1.0

その後構築しコンパイルを掛けると

[エラー] MSINKAUTLib_TLB.pas(1045): 識別子の多重定義 : 'IInkDisp'
[エラー] MSINKAUTLib_TLB.pas(3247): 識別子の多重定義 : 'IInkDisp'
[致命的エラー] *****.dpk(36): 'MSINKAUTLib_TLB.pas' ユニットはコンパイルできませんでした

となりできません。
Delphi触ったばっかりでもう全然わからなくて;;
0301デフォルトの名無しさんNGNG
IInkDisp2に、名前変えるとか・・・
0302296NGNG
>>301
今適当に名前を変えたところコンポーネントとして登録はできたのですが、
フォームに貼り付けるとエラーが出てしまい使えません;;

---------------------------
エラー
---------------------------
アドレス 00000073 でアドレス 00000073 に対する読み込み違反がおきました。.
---------------------------
OK
---------------------------

リネームする箇所を換えてもう少しやってみます
0303デフォルトの名無しさんNGNG
ActiveXコントロールの取り込みは「.pas」ファイル作ってるだけなんで、
既に使ってる人のpasファイル貰えば使えるよ。
その製品の会社の中の人か、使ってる人探したら?
0304デフォルトの名無しさんNGNG
要は、VBなら問題なくできるのにDelphiではバグバグで駄目だってことだろ?
0305デフォルトの名無しさんNGNG
ocxによっては、VB専用の場合もあるらしい
0306デフォルトの名無しさんNGNG
BDNぐらいミロよ
Tablet PC SDK 1.5 interface units TabletPC SDK 1.5 API interface units, Delphi Funktions
が1分で見つかったぞ。
0307296NGNG
>>306
それは既にDLしたのですが中に入っていたのはただ一つのテキストファイル・・・・
コンポーネントの容量も圧縮しても1Kとおかしいなぁと思っていたのですが・・・

以前にそれをDLした方がいれば助かるのですが作者のページもなぜか見れないし
どうにかなりませんでしょうか
0308306NGNG
>>307
マジでいってんの?
interface unitの存在がわかったんだから、ググってみれよ。

http://www.pjh2.de/jediplus/download/index.php?l=en
0309296NGNG
>>308
すみません このReadMe.txtをどう使うのでしょうか;;
interface unit とかわけわかめです・・・
0310デフォルトの名無しさんNGNG
おいおい
お前らお客さん獲得の千載一遇のチャンスだぞ。
もっと懇切丁寧にしっかり教えてやれよ。
0311デフォルトの名無しさんNGNG
>>308
ReadMeは関係ないみたいね
(作者はいじめられて、引き篭もり中みたいな内容)

これまた現在、サーバー・トラブル中みたいだが、
BDNからinterface unitをダウンロードして
usesすれば、タイプライブラリの取り込みは不要って事
0312296NGNG
>>311
BDNっていうのは
http://codecentral.borland.com/codecentral/ccWeb.exe/listing?id=21363
ここのことですよね?

ここから落とせるファイルはもう落としてやはり中身は上記と同じReadMeだったのです・・・
やはりDelphiでは簡単にはTabletPCSDKを扱えないのでしょうか;;
0313デフォルトの名無しさんNGNG
いじめられて、配布停止中って事なのか・・・Peter Haasの根性なしが
0314デフォルトの名無しさんNGNG
>>312
簡単に使えたよ。3分20秒ぐらいかかったけど
0315デフォルトの名無しさんNGNG
どうも無理っぽいな。Delphi 8使うしかないらしい。

過去ログ
http://groups.google.co.jp/groups?hl=ja&lr=&ie=UTF-8&threadm=40fca92f%241%40newsgroups.borland.com&rnum=1&prev=/groups%3Fhl%3Dja%26lr%3D%26ie%3DUTF-8%26q%3Dtabletpc%26meta%3Dgroup%253Dborland.public.delphi.*
0316デフォルトの名無しさんNGNG
>>314
う???詳細きぼんぬ
0317デフォルトの名無しさんNGNG
TThreadが完全に開放されるまで待つのはどうしたらよいですか?
教えてください。
0318デフォルトの名無しさんNGNG
OnTerminateより後って事?
TYourThreadのデストラクタでどっかのフラグでも書き換えたら
0319デフォルトの名無しさんNGNG
TFileStreamなどを使用して画像ファイルを2つに分割し、
それを2つのファイルに保存したいのですがどうすればいいのでしょうか。
ご教授お願い致します。
0320デフォルトの名無しさんNGNG
>>319
TFileStreamを2つ用意してそれぞれに分割した画像ファイルを書き込めばいいんじゃない?
0321デフォルトの名無しさんNGNG
レスありがとうございます。
2つ用意してやってみたのですが、どうもうまくいきません。
どうやったら2つに分割できるのかわからなくて・・・
どういうメソッドを使用すればいいのでしょうか?
0322デフォルトの名無しさんNGNG
Winnyで違法に公開されているマンガをダウンロードして分割して表示したいと
0323デフォルトの名無しさんNGNG
いやぁ、そんな大そうな物まだ作れないっす。
Streamの勉強のために、それを利用してファイル分割ソフト作りたいだけっす。
0324デフォルトの名無しさんNGNG
>>319
Rect使うのでは?
0325デフォルトの名無しさんNGNG
ああ、そうか
Streamに取り込んだのを何とか分割して保存しようとしてたのですが
Rect使ってやってみます。
ドゥモ ありがとうございました。
0326320NGNG
>>321,325
もしかして読み込みもStreamを使っている?
それなら「読み込み用に1個、書き出し用に2個Stream」を用意して、書き出しのStreamに好きな様に書き出せばいいんじゃないか?

それとも「画像として成立する形式」で分割したいのか?それだとヘッダを作ったり圧縮したりする必要があるから、結構面倒だったりするぞ。
bmpやjpegなら標準のライブラリを使えばいいから簡単だけど。
0327デフォルトの名無しさんNGNG
レスありがとうございます。
読み込みはTMemoryStream使ってやってました。
書き出し用に2つStream用意して試してみます。
ありが�d。
0328デフォルトの名無しさんNGNG
ファイルを分割したいのか、画像を分割したいのかによって全く違う
0329デフォルトの名無しさんNGNG
Delphi 7 Personal Promotionでユーザー認証ができません。

BorlandのHPから認証用のファイルreg119.txtを入手して、
C:\Document and Settings\<username> にコピーしたのですが。
Win2000です。

これだけじゃ駄目なの??
0330329NGNG
ちなみにVB 2005 Expressでは認証なんて不要でした。
0331デフォルトの名無しさんNGNG
Delphi7の場合は、「今すぐ登録」アプリケーションで登録するのでは?
スタートメニューからアクセス汁
0332デフォルトの名無しさんNGNG
超馬鹿な質問でスマソ。

BasicでOSは作れる?
0333デフォルトの名無しさんNGNG
すまぬ。スレ違いだった
0334デフォルトの名無しさんNGNG
VB.NETなら作れます
0335デフォルトの名無しさんNGNG
文字列を大文字小文字分けて、昇順・降順にソートするのってどうするのん?
0336332NGNG
そうかそうか。レスあんがと。
0337デフォルトの名無しさんNGNG
TStringList.Sort
0338デフォルトの名無しさんNGNG
>>337
ありがと。馬鹿みたいな勘違いしてた。
0339デフォルトの名無しさんNGNG
ライブラリ依存なのにブビでOS作れる訳ないだろ。
0340デフォルトの名無しさんNGNG
ライブラリ依存なCは?
0341デフォルトの名無しさんNGNG
OS作るなら、アセンブラだろ。
0342デフォルトの名無しさんNGNG
とうとう殺したらしいよ!
http://bbs2.orange-e.net/?id=123456
0343デフォルトの名無しさんNGNG
>>339
Java OSを知らないの?
0344デフォルトの名無しさんNGNG
半透明の文字を表示する簡単な方法ってありません?
やはり、アルファ・ブレンドとかを使う必要があります?
0345デフォルトの名無しさんNGNG
>>344
GDI+とかDirectXとか言ってみるテスト
「半透明の文字」だけが目的なら逆に繁雑だよな…
0346デフォルトの名無しさんNGNG
>>345
DirectXはちょっとやりたくないんで、GDI+の資料をみたんですが、
なんかフォントの指定方法とか、かなり変わってますね。
自分のプログラムではLogFont構造体なんかをいろんな個所で
直接処理してるんで、全面的に変更が必要になってくるみたい。

やっぱり、別のキャンバスに一度描画して、目的のキャンバスに
自前でブレンドするしかないのかな。。。
0347デフォルトの名無しさんNGNG
となると、VB.NETが最適だな
0348デフォルトの名無しさんNGNG
コンポ使え。
0349デフォルトの名無しさんNGNG
マジに初心者で申し訳ないんですが
Tmemoに1行に1000文字ぐらい読み込ませると
wordwrapをfalseにしてても勝手に折り返されちゃんだけど
何とかどうにか折り返させない方法を 教えてエロイ人 お願い 泣きそう
0350デフォルトの名無しさんNGNG
>>343
ソースさらしてくれ
0351デフォルトの名無しさんNGNG
>>349
EDIT コントロールの仕様
泣き寝入りか自作しかない
0352デフォルトの名無しさんNGNG
>>349
richeditじゃダメな理由はあるのかな?
0353デフォルトの名無しさんNGNG
>>351
そうなんでつか。。。自作なんてスキルは全然ないっす つД`)・゚・。・゚゚・*:.。..。.:*・゚
ありがとうございました。

>>352
ちょっとやってみます。 ありがとうございました。

ダメだったらそんなに複雑なことやってないんで1000に行かないような設計をちょっと立て直してみまつ。

皆様回答ありがとうございました
0354デフォルトの名無しさんNGNG
ファイルを選ぶようにダイアログを使って
使用者にフォルダを選ばせるにはどうすればよいでしょうか?

今はOpenDialogを使ってファイルを選ばせ
ExtractFileDir(OpenDialog.FileName)を使って収得してるんですが
これだとフォルダ内にファイルがないと選択できない

よろしくお願いします
0355デフォルトの名無しさんNGNG
SelectD(ry
0356353NGNG
リッチテキストキタ━━━━━━(゚∀゚)━━━━━━ !!!!!
キタ━━━━━━(゚∀゚)━━━━━━ !!!!!

解決しますた つД`)・゚・。・゚゚・*:.。..。.:*・゚
ほんとに泣けたっす

>>352さんサンクス!!ついに解決しますた!感謝感謝です ほえー これで寝れまつ
0357デフォルトの名無しさんNGNG
>>354
ヘルプの「キーワード」へ>>355
0358デフォルトの名無しさんNGNG
Delphi6 Personalを使って、ギコナビ・プロジェクトのメンバーになろうと
思ったのですが、パッチ類が落ちてこない・・・。

どうすればいいですか?
0359デフォルトの名無しさんNGNG
諦める。
0360デフォルトの名無しさんNGNG
>>359
絶対にあきらめたくないんですが・・・。
0361デフォルトの名無しさんNGNG
>>358
ここで聞くようなことじゃないだろ。サイトの管理者に何とかしてもらえ。
0362デフォルトの名無しさんNGNG
>>361
ボーランドにメールしました。 m(_ _)m
0363デフォルトの名無しさんNGNG
入れ子構造で延々と計算している時に中断ボタンで中断するようにしたいのですが
計算中はボタンが反応してくれません。どうすれば裏で計算しながらボタンを反応
させられるのでしょうか?
0364デフォルトの名無しさんNGNG
>>355 >>357
ありがとうございました
でもまた問題発生です

SelectDirectoryでルートフォルダを指定すると
ルートフォルダより上が表示されないのですが
仕様ですか?

もし仕様なら
最初のディレクトリをマイコンピュータ(どのドライブにもアクセスできる)にするには
どうすれば良いでしょうか?

Delphi6 Personal です
0365デフォルトの名無しさんNGNG
>>363
マルチスレッドにすれ
0366デフォルトの名無しさんNGNG
>>363
Application.ProcessMessages
0367デフォルトの名無しさんNGNG
>>364
http://ww4.tiki.ne.jp/~yonyon/programing/delphi/tips/tips-file.htm#03
0368ANGNG
>>364
ルートフォルダ、ってのは、一番上のフォルダだから、その上が表示されないのは当然の仕様。

 dir := 'D:\Delphi6\';
 SelectDirectory('ディレクトリ選択','',dir);

こんなかんじで、予め、3っつめの引数に値を入れておくと、デフォルトの選択になるっぽい。
0369ANGNG
>>368
スマソ、読み間違えてた。 マイコンピューターの取得方法は、>367 にあるとおり。
別に、普通に全部にアクセス可能(ルートをルート)に設定するだけなら、
空文字を入れとけば、いいらしい。
0370デフォルトの名無しさんNGNG
Indyによくバグが多いと聞きますが具体的にはどういったものが多いのでしょうか。
また、そういった情報にアクセスできる場所はどこでしょうか。
0371デフォルトの名無しさんNGNG
http://apps.atozedsoftware.com/cgi-bin/bbgindy/BugBeGoneISAPI.dll/EXEC/0/0164qlebmk0mf8woj164qlg2y3
0372デフォルトの名無しさんNGNG
>366
無事に反応するようになりました。おめでとうございます。
0373デフォルトの名無しさんNGNG
言い間違えました。ありがとうございました。
0374デフォルトの名無しさんNGNG
>>364
http://forum.nifty.com/fdelphi/samples/01269.html
0375デフォルトの名無しさんNGNG
>>371
ありがとうございます。
早速読ませていただきます。
0376デフォルトの名無しさんNGNG
>>373
このやろう、ワラタ
0377デフォルトの名無しさんNGNG
質問があります。

大文字小文字を区別せずに指定した文字列の位置を検索したいのですけど、
Posで以下のようにしても、大文字と小文字を区別できず0になるのですが、
pos('CD', 'aあcdef') //0 (4の結果がほしい)
大文字と小文字を区別なく検索できるPos版みたいなことを実現する
何かライブラリでもあるでしょうか?
0378デフォルトの名無しさんNGNG
>>377
'aあcdef'の中の小文字を全部大文字にしてから検査すれば?
0379デフォルトの名無しさんNGNG
AnsiIndexText?

0380デフォルトの名無しさんNGNG
それはちがう
0381デフォルトの名無しさんNGNG
AnsiPos('CD', UpperCase('ry
0382デフォルトの名無しさんNGNG
Upper
0383デフォルトの名無しさんNGNG
procedure TForm1.Button1Click(Sender: TObject);
var
 Data, S: string;
begin
 Data := Memo1.Text; //検索データ
 S := Edit1.Text; //検索文字列

 //チェックで区別なし
 if CheckBox1.Checked then
 begin
  Data := UpperCase(Data);
  S := UpperCase(S);
 end;

 if AnsiPos(S, Data) > 0 then
  ShowMessage('(・∀・)アッタ!!');
 else
  ShowMessage('(・A・)ナカッタ!!');
end;
0384デフォルトの名無しさんNGNG
Delphi6 Personalのパッチを入手できるサイト教えてください。
お願いします。
0385デフォルトの名無しさんNGNG
Borland
0386デフォルトの名無しさんNGNG
>>385
朝から暇を見つけては、DLやってるんですけど
無理なんですよ(泣)
どこかありませんか?
ギコナビ・プロジェクト・チームに入りたい・・・。
0387デフォルトの名無しさんNGNG
迷惑そうだな
0388デフォルトの名無しさんNGNG
>>386
http://www.borland.co.jp/download/delphi.html
ここから
【対象アプリケーション】にDelphi 6 Personalまたは、Delphi6が入っているもの
をダウンロードする。
0389デフォルトの名無しさんNGNG
他にパッチを置いてるとこなんてあるの?
0390デフォルトの名無しさんNGNG
普通に落とせるが
http://www.borland.co.jp/download/delphi.html
0391デフォルトの名無しさんNGNG
>>387
どういう意味ですか?(w
僕が入ったら、ソフトの品質が飛躍的に向上しますよ。
0392デフォルトの名無しさんNGNG
>>391
(´д`)へー

ところで回線は?
0393デフォルトの名無しさんNGNG
切れやすいんかな。100%落としたように見えて、半分くらいしかファイルできてなかった。
DLソフト使いたまへ
0394デフォルトの名無しさんNGNG
>>392
フレッツADSLの8Mです。
プロバイダはOCNです。
ファイヤーウォールソフトもアンインストールしたのに・・・。
0395デフォルトの名無しさんNGNG
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Delphi使いが優しくコメントを返しますが、
お礼はDelphiの布教と初心者の救済をお願いします。
0396デフォルトの名無しさんNGNG
>>394
>>388のサイトでリンク先クリックするとどうなるんだ?
0397デフォルトの名無しさんNGNG
>>396
> Internet Explorer では、ftp.vorland.co.jp - delphi6update2.exe をダウンロードできません。
>
> サーバーが拡張情報を返しました

しばらくしてから、こんなmsgboxを表示します。。。
0398デフォルトの名無しさんNGNG
DLソフト使ってみたら?
0399デフォルトの名無しさんNGNG
>>398
久しぶりにイリアさんでやってみます。
0400デフォルトの名無しさんNGNG
イリアさんでも無理っぽいですね。
ショックです。
0401デフォルトの名無しさんNGNG
>>397
> Internet Explorer では、ftp.vorland.co.jp - delphi6update2.exe をダウンロードできません。
漏れは何も問題なくダウンロードできるぞ?
FFFTPでもftp.borland.co.jpへanonymousでログイン、ダウンロードできるよ?

つーか、vorland.co.jpがここだけのtypoであることを祈る。
0402デフォルトの名無しさんNGNG
ftp://ftp.borland.co.jp/pub/delphi/delphi6update2.exe
普通にダウンロードできるな
30秒もかからん。
0403デフォルトの名無しさんNGNG
ルータだろ、ルータ
0404DLできない人NGNG
AirH"で試したらいけました。orz

>>403
ルータの場合、どうすればいいのでしょうか。
0405DLできない人NGNG
>>401 さんのやり方で、PASVモードにしたらいけました。
実は、朝、Borlandに苦情のメールだしたんですよね。 orz
謝りのメールだしときます。。。
0406デフォルトの名無しさんNGNG
苦情って…
まずは自分の環境疑えよ
0407DLできない人NGNG
教えていただいた方々、ありがとうございました。 m(_ _)m

プロジェクト・チームに入れるように、精進します(笑)
0408デフォルトの名無しさんNGNG
パッチのDLも満足にできないやつが
ギコナビ・プロジェクト・チームに入るのか?
改悪だけはするのなよ…
0409DLできない人NGNG
次はインストール・キーが入手できない・・・orz
なんか、エラーメッセージが表示されます。
どうしたら、いいんでしょうか。
0410ギコナビ使いNGNG
(;´A`)ギコナビの将来が激しく心配だ…
0411デフォルトの名無しさんNGNG
>>409
藻前はがんばった!よくやったよ!
もう寝ろ。
0412デフォルトの名無しさんNGNG
おめでとうございました。
0413DLできない人NGNG
また、あした、がんばります!
0414デフォルトの名無しさんNGNG
番長のLL、俺のかとオモタ
0415デフォルトの名無しさんNGNG
ちょー誤爆
0416デフォルトの名無しさんNGNG


   な   ん   だ   こ   の   流   れ   !!



↓ 以下何事もなく質問どうぞ ↓
0417デフォルトの名無しさんNGNG
Delphi6 Personalのインストールキーを入手できなくて困っています。
方法を教えてください。
0418デフォルトの名無しさんNGNG
>>417
Spamguardを設定しないにしお
0419デフォルトの名無しさんNGNG
>>343
ソースはどこ?教えて。
0420デフォルトの名無しさんNGNG
>>418
それってどこでするんですか?
0421デフォルトの名無しさんNGNG
>>417
状況がわからな過ぎるので詳しく書け>DLできない人
0422デフォルトの名無しさんNGNG
>>421
なんかエラーが出ます。
0423DLできない人NGNG
>>421
なんでばれたんですか(w

http://register.borland.co.jp/regist/delphipersonal/delphipersonal.dll/
にいって、アカウントの作成で、メールアドレスを入れて
アカウントの新規登録ボタンを押すと、

> Internal Application Error
> 内部アプリケーションエラー
> Unable to complete network request to host "202.33.253.164". Error writing data to the connection. 既存の接続はリモート ホストに強制的に切断されました。

がでるんです(泣)
0424デフォルトの名無しさんNGNG
Delphi Personalを落としてから、スパムがものすごく来るようになったんですが、
某の個人情報の扱いって一体どうなってるんでしょうか?
0425DLできない人NGNG
Personalがでたとき、インストールしたことあるんですけど
なにも問題なかったのに・・・。
0426デフォルトの名無しさんNGNG
>>424
俺登録して半年以上たつけどまったく来ないよ
0427デフォルトの名無しさんNGNG
>>423
ブラウザは何使ってる?
0428DLできない人NGNG
>>427
インターネットエクスプローラ6です。
ルータは使ってるんですけど、関係ないですよね。
あと、ネットスケープ7.1でもやってみたんですが
同じでした。
なんでだ〜(泣)
0429デフォルトの名無しさんNGNG
質問です

Editにag+oau a+garh ta+ehah oeu+hapuhのような任意の文字列がある場合で
     ↑   ↑
のような半角の+のみを全角の+にする方法(他の文字列は半角のまま)がわからなくて困っています
何か良い方法はないものでしょうか?
0430デフォルトの名無しさんNGNG
StringReplace
0431デフォルトの名無しさんNGNG
[rfreplaceall]
0432デフォルトの名無しさんNGNG
AssigenFileなどのファイル関数とTStringListで同じ処理ができるとき
どちらの方を用いるべきなのでしょうか?
速さやメモリ使用量などはどうなのでしょうか?
教えてエロイ人 ヽ(`Д´)ノ
0433デフォルトの名無しさんNGNG
前者は一行読み込み込んで処理して読み捨てる
後者は全体を読み込んで全体を処理できる
前者のやり方で済むならその方が高速省メモリ
後者の方が扱いは簡単
0434デフォルトの名無しさんNGNG
この中に、今、Delphi6のインストールキーを入手できる人いますか?
何回やってもダメなんです(涙)
0435デフォルトの名無しさんNGNG
あきらめろ
0436デフォルトの名無しさんNGNG
ルータやFWの問題じゃないのか?
そこらへん全部取っ払ってやってみたら
0437デフォルトの名無しさんNGNG
>>436
ソースの糞パーソナルファイアウォールのせいかとも思ったんですが
ファイアウォール切って、AirH”でやっても無理でした。
きっと、サイトがあぼーんしてるんでしょうね。
そう思って日を改めたいと思います。

はあ、、、、、VBから卒業できない。。。
0438デフォルトの名無しさんNGNG
>>437 頑張れ!日本の未来は君にかかっている
0439デフォルトの名無しさんNGNG
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Delphi使いが優しくコメントを返しますが、
お礼はDelphiの布教と初心者の救済をお願いします。
0440デフォルトの名無しさんNGNG
>>437
それは君の運命だ。素直に受け入れよう。
0441DLできない人NGNG
_/\_   ▲  _/\_
\   / ▼■▼ \   /
 |/\|   ▼▼   |/\|
┃             ヽ
┃   ヽ     /    │    |\
┃●  ヽ―-―/  ●  │    | )   寝るぞ、ハゲども!おやすみーw
┃    ヽ   /      │   ●
┃      ヽ/      /
┃            (
┃ / ̄ ̄ ̄ ̄    |
┃│           ノ
┃ \____   ノ
┃           |
┃           |
┃ (人)       |
┃      |   |
┃       ヽ__/
0442デフォルトの名無しさんNGNG
AssignFileで関連付けたファイルを
Resetで開いた時に
I/O エラー(32)が出た場合
特別な処理をしたいのですが
この場合はどうすれば良いでしょうか?
0443デフォルトの名無しさんNGNG
>>442
例外処理が有効な時はtry〜exceptを書く、そうじゃなければIOResultをチェック
0444デフォルトの名無しさんNGNG
try
 Delphi.Abone;
except
 on EDelphiDied do
  C#.BuyAndInstall;
end;
0445デフォルトの名無しさんNGNG
コンパイルエラー: 不正な記号(#)
0446デフォルトの名無しさんNGNG
コンパイルエラー: C#厨はイッテヨシ
0447デフォルトの名無しさんNGNG
Delphi9タノシミー!
0448デフォルトの名無しさんNGNG
C言語で言うところの__LINE__とか__FILE__みたいなのは、Delphiではどうなってるのでしょうか?
0449デフォルトの名無しさんNGNG
>>448
同じ
0450デフォルトの名無しさんNGNG
C#.DownLoadAndInstall; で十分。
0451デフォルトの名無しさんNGNG
>>449
Del6ではダメなのですが
0452デフォルトの名無しさんNGNG
>>448
デバッグ目的ならAssertで充分と思うが、何がしたいのですか?
0453デフォルトの名無しさんNGNG
Cの_LINE_とかってプリプロセッサでは?
0454デフォルトの名無しさんNGNG
Assertのダサい使いかただな
{$IFDEF DEBUG}try Assert(False) except on e:EAssertionFailed do OutputDebugString(PChar(e.Message) + 18); end;{$ENDIF}

プリプロセッサ欲しい
0455デフォルトの名無しさんNGNG
System.AssertErrorProcを乗っ取って、例外を起こさずに引数を記録するだけの関数に置き換えたら

var __LINE__ : Integer;

Assert(False); //この時点で記録される
OutputDebugString( ... __LINE_ ... );

のような書き方もできないでもない。
プリプロセッサがあるとコンパイル速度に影響するだろうからいらない。
0456デフォルトの名無しさんNGNG
コンパイラ式のアプリにコンパイル速度云々って・・・
0457デフォルトの名無しさんNGNG
ん?確かに完成品は変わらないだろうけど、F9押した時に1秒待つのと2秒待つのはだいぶ違う気がするが…
0458デフォルトの名無しさんNGNG
どうでもいい
0459DLできない人NGNG
インストール・キー、ゲットできましたよ!
これで、ギコナビ・プロジェクトに参戦できます。
ありがとうございました。 <(_ _)>
0460デフォルトの名無しさんNGNG
インライン関数欲しい
0461デフォルトの名無しさんNGNG
テキストの整形をしたいのですが、TStringListの任意の場所、例えば

あああいいいううう

の、一番最初のいの前に改行を入れたいのですが、どうすればできるのでしょうか?
どなたか教えていただければ・・・
0462デフォルトの名無しさんNGNG
s := YourStrings.Text;
Insert(sLineBreak, s, 挿入位置);
YourStrings.Text := s;
0463デフォルトの名無しさんNGNG
procedure TForm1.Button1Click(Sender: TObject);
var
sl:TStringList;
s:string;
p:integer;
begin
sl := TstringList.Create;
try
sl.Add('1234567890');
sl.Add('xxxxあああいいいうううzzzz');
sl.Add('1234567890');
s := sl.Text;
p := AnsiPos('あああいいいううう',s);
Insert(#13#10,s,p+6);
sl.Text := s;
finally
Memo1.Lines.Assign(sl);
sl.Free;
end;
end;
0464デフォルトの名無しさんNGNG
sl.Clear;
sl.Add('あああいいいううう');

sl.Insert(0, Copy(sl[0], 1, 6));
sl[1] := Copy(sl[1], 7, High(Integer));
0465デフォルトの名無しさんNGNG
>>464
>TStringListの任意の場所
0466デフォルトの名無しさんNGNG
>>465
お題の意図は任意の行の任意の位置での行の分割ですが何か?
例えばText使って3行目の6文字目を分割したい場合どうやれと?
0467デフォルトの名無しさんNGNG
>>459
迷惑かけんなよ!
0468デフォルトの名無しさんNGNG
>>466
>>463 が見えないの?
String に写し取って改行入れて、TStringList に戻す。

>お題の意図は任意の行の任意の位置での行の分割ですが何か?

はぁ? >>464 だと後ろの行がつぶれるでしょ?
0469デフォルトの名無しさんNGNG
>>468
お前は題意を読み違えてるから話にならん。
0470デフォルトの名無しさんNGNG
盛り上がってまいりました
0471デフォルトの名無しさんNGNG
sl.Clear;
sl.Add('あああいいいううう');
sl.RegExp('s/あい/あ\nい/g');
0472DLできない人NGNG
>>467
迷惑なんてかけるわけないじゃないですか(w
今、勉強中です。
0473デフォルトの名無しさんNGNG
>>469
>お前は題意を読み違えてるから話にならん。

たしかにそうでした。すみません。

>例えばText使って3行目の6文字目を分割したい場合どうやれと?

s:= sl[2];
Insert(#13#10,s,7);
sl[2] := s;

0474デフォルトの名無しさんNGNG
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Delphi使いが優しくコメントを返しますが、
お礼はDelphiの布教と初心者の救済をお願いします。
0475デフォルトの名無しさんNGNG
今現在のマウスポインタの指してる座標を手に入れるにはどうしたらいいですか?
0476デフォルトの名無しさんNGNG
Delphi内部からShellExecute関数でDOSからperlを実行し
その実行結果によってAファイルができる

このAファイルをDelphiで読み込んでMemoに表示させたいのですが
perlがAファイルを処理し終わる前にDelphiが読み込みを始めてしまいエラーがでます
(更新前のファイル内容が出たり、新規につくられるファイルではファイルがないとのエラー、読込違反のエラー)

ウェイト処理を入れたり、エラー処理をやってみたりしましたが上手くいきません
このような場合、なんか上手な対処方法はありますか?
0477デフォルトの名無しさんNGNG
TMSのメモコンポーネントを使ってみたけど、
予約語を太字にすると最後の文字が表示されない。
これってソースを買わないと直せないかな?
0478デフォルトの名無しさんNGNG
>>476
基準位置(原点)をどことするかが問題だ。
アクティブウインドウの位置を基準とするのか、
アクティブウインドウに乗っているコントロールを基準とするのか、
デスクトップの左上を基準とするのか。
>>477
CreateProcess を使ってループでプロセス終了まで待機する
サンプルをどっかで見た。

CreateProcess WaitForSingleObject

↑で検索すれば引っかかるかと。
0479デフォルトの名無しさんNGNG
>>476
perlの処理の最中はフィルを消しておいて、
終わったらファイルを作成。
Del側はファイルがなければWhileとかで回して待機させて、
出来たら読み込みで良いんじゃないの?

そういうことではない?
0480デフォルトの名無しさんNGNG
>>476
while(not FileExsist(FileName)) do
でファイルが作成されるまで待ってはどう?
もしもの時には無限ループになるけどw
0481475=480NGNG
>>476
スマソ。綴りを間違えた。FileExistsね

>>478
「デスクトップの左上を基準とする」でお願いします
0482デフォルトの名無しさんNGNG
>>479
返信トンクス
>perlの処理の最中はフィルを消しておいて、
>終わったらファイルを作成。
これはどうやるのでしょうか?

私が実行しようとしているperlは
perlを実行すると先ずディレクトリ内に空ファイルが作製され
それからファイル内部に実行結果を書き込むようです

空ファイルが出来てからファイル内部に結果が書き込まれるまでにタイムラグがあるため
Delphiはこの空ファイルに反応して読み込みエラーになります
また条件により実行結果のサイズが毎回違うために
空ファイルと結果を書き込み終わるまでのタイムラグも毎回違うのです
0483デフォルトの名無しさんNGNG
>>475
Mouse.CursorPos
で良いはず。マルチモニタ等の考慮が入っているかは不明。
0484475=480NGNG
>>483
おお、うまくいきました。
ありがとうございます。
0485デフォルトの名無しさんNGNG
>>482
ShellExecuteEx使ってperl起動して終了待ちしとけ
0486デフォルトの名無しさんNGNG
おいおい
waitforsingleobjectが出てるのに虫するなよ氏ね
0487デフォルトの名無しさんNGNG
氏ぬのはお前。
ShellExecuteじゃ待てないだろ。
0488デフォルトの名無しさんNGNG
>>487
待てないことも無い
ttp://www.asahi-net.or.jp/~GV4J-SGUR/narik/stp001.htm#ShellExecuteEx
0489デフォルトの名無しさんNGNG
だからEx無しじゃ待てないといってるんだが。
このスレで言ってもいないことを相手が理解するのを期待すんな。
0490デフォルトの名無しさんNGNG
exで起動すればいいだろ氏ね
0491デフォルトの名無しさんNGNG
477もお願いします。
板目かっこいいから使いたいです。
0492デフォルトの名無しさんNGNG
昨日も超初心者級による珍回答続出だったな
0493デフォルトの名無しさんNGNG
↑ こんなレスより何倍もマシ
0494デフォルトの名無しさんNGNG
>>492
だったらお前が答えてやれと小1時間
0495デフォルトの名無しさんNGNG
なんのなんの。
即答レスはありがたいよ。
質問に質問で返すようなコンサルティング厨より大分マシ。
0496デフォルトの名無しさんNGNG
板目って何?
0497デフォルトの名無しさんNGNG
見た目のタイポ
0498デフォルトの名無しさんNGNG
ちょっと困ったことがあります。

”コンポーネントの新規作成”ダイアログで、インストール先の”パレットページ名”
に自分で付けた名前を指定しているにもかかわらず、なぜかSampleページにコン
ポーネントがインストールされてしまいます。
どうすれば自分で指定したページにインストールすることが可能になるでしょうか?
0499デフォルトの名無しさんNGNG
registerプロシージャを見せて
0500デフォルトの名無しさんNGNG
>>499

これです。

procedure Register;
begin
RegisterComponents('User', [TDrawButton]);
end;
0501デフォルトの名無しさんNGNG
>>498
そのソースにわざとコンパイルエラーを仕込んで
コンポーネントの登録しようとしたらどうなる?
もしエラーもなく登録できるなら
どこか別の場所の.dcuが使われてしまっている悪寒。
0502デフォルトの名無しさんNGNG
>>501
>そのソースにわざとコンパイルエラーを仕込んで
>コンポーネントの登録しようとしたらどうなる?
普通にコンパイルエラーになりましたね。

ちなみに、特定の1個のコンポーネントだけではなく、
全部のコンポーネント(すべてUserページにインストール指定)が
Samplesページに追加されてしまいます。
0503デフォルトの名無しさんNGNG
>>500

それで Sample に載るならたしかに変。'User' が特別なのかなぁー。'Hoge' とかだとどうかな?
0504デフォルトの名無しさんNGNG
そこらへんのソースを一旦忘れて全く新規に中身空っぽの
コンポーネント作って'Test'ページに登録した場合は?
それでも変ならもう分からん。
0505デフォルトの名無しさんNGNG
試しにパッケージに3つのコンポーネント、”TScrollBoxEx”、”TSHFileOp”、”TLabelA”を
追加して(TLabelAだけHogeページ指定)試してみたのですけど、”TlabalA”はUserページに、
その他の、”TScrollBoxEx”、”TSHFileOp”がSamplesページに追加されてしまいます。

以下はRegister;手続きです。

procedure Register;
begin
RegisterComponents('User', [TScrollBoxEx]);
end;

procedure Register;
begin
RegisterComponents('User', [TSHFileOp]);
end;

procedure Register;
begin
RegisterComponents('Hoge', [TLabelA]);
end;
0506デフォルトの名無しさんNGNG
>そこらへんのソースを一旦忘れて全く新規に中身空っぽの
>コンポーネント作って'Test'ページに登録した場合は?
ダメですた。

とりあえず今はあきらめようと思います。
0507デフォルトの名無しさんNGNG
レジストリエディタを使ってパレットの配置を初期化してみたらどうですか?
インストール後に場所を変更したコンポーネントが元の場所に戻ります。

HKEY_CURRENT_USER\Software\Borland\Delphi\バージョン\Palette
というキーの中にある値を全部削除してみてください。

Delphi を起動してパレットの設定を行うと再作成されますのでご安心ください。
ただし、削除前に保存しておくことをおすすめします。
0508TMSユーザーNGNG
>>477
TMS使っているけど、おそらくこの問題はソースコード入手しないと難しいような気がする。
持っているんで確認してみようと思うけど、仕事サボり中のためあまり期待しないで待ってて。
確認できたらNewsGroupかサポートにあげてフィードバック待ってみるから。

たとえばどういう単語?わかっていたら数例挙げてみて。
0509477NGNG
>>508
おおおお、ありがとうございます。
期待しないふりをしながらも期待して待っています。
例えば、Procedureとかです。
TMSのDel7を使っています。
それについていたデモでもそうなります。
よろしくお願いします。

板目→見た目です。
0510デフォルトの名無しさんNGNG
表示位置はIDEで設定できるでしょ?
Registerでの設定がIDEでの設定より優先したら、
パッケージをインストールするたびにIDEの設定が無効になるよ!
0511デフォルトの名無しさんNGNG
HTMLの<A>タグみたいなことをしたいんですが・・・お願いしますm(_ _)m
0512デフォルトの名無しさんNGNG
「リンク ラベル」で調べればサンプルがざっくざく
0513デフォルトの名無しさんNGNG
>>512ありがとうございます!
0514デフォルトの名無しさんNGNG
コンポーネントを貼り付けた子ウィンドウを持つプログラムをDelphiでつくるにはどうすれば良いですか?

具体的には
処理結果がAならウィンドウAを起動、BならウィンドウBを起動
のようにしたいのです
もちろんウィンドウA、Bを外部プログラムとして設計し
内部から呼び出す手もあるのですが
それだとカッコ悪いですし、拡張などで不具合が出る可能性があるので
よろしくお願いします
0515ANGNG
>>514
よくわからないけど、フォームをいくつも作って、

if 処理結果 = A then FormA.ShowModal;
if 処理結果 = B then FormB.ShowModal;

ってこと?
それとも、ソフトの起動時に条件によって、フォームを切り替えたいってこと?
その場合は、プロジェクトファイルのほうで、

Application.CreateForm(TForm1, Form1);

の部分を切り替えればいい。
0516デフォルトの名無しさんNGNG
SendMessageやPostMessageでメッセージを送る場合
Application.Handle
Application.MainForm.Handle
どちらがよいのでしょうか?
0517デフォルトの名無しさんNGNG
質問があります。

EM_GETFIRSTVISIBLELINEでは、Memoコンポーネント上で、実際に目
にみえている最初の行の行番号を取得できますけど、これの水平バー
ジョンみたいなのはあるでしょうか?

スクロールバーなしでWordWarpFalseのメモコンポーネントで、クライアント領域
の左端のテキストの位置(ピクセル)を知りたいです。
スクロールバーが非表示なのでGetScrollPosが使えません。
0518デフォルトの名無しさんNGNG
messagedlgで、ボタンの中の言葉を変えるのには
どうすればいいんですか?
0519デフォルトの名無しさんNGNG
Editor で messagedlg と言う文字列を選択した後、
F1キーを押してみろ。
0520519NGNG
と言う話ではないようだな。
0521518NGNG
決まったボタンの名前じゃなくて、好きな文字を
ボタンの中に表示したいって事なんですけど
MessageBoxも表示するボタンが決まってるみたいです。
0522デフォルトの名無しさんNGNG
DQNな方法としては、
CreateMessageDialog でダイアログウインドウを作成して、
表示する前に、ダイアログウインドウ中のコントロールを探索して
ボタンのキャプションを書き換えると言う方法を提示してみる。
これでは、最高で五つまでしかボタンは表示できないっぽいけど。

↑中村さんのとこでも例があったので、これが一番容易らしい。
返り値はShowModalの返り値で良い模様。

もっとスマートでインテレクタルな方法があるかもしれないけど。
任意の文字をキャプションに持つボタンを作成できる
ダイアログウインドウをコンポーネント化してしまうのも手の一つ。
0523デフォルトの名無しさんNGNG
そんなの自前でarray of string受け付けるやつ作ればいいじゃん
0524デフォルトの名無しさんNGNG
コマンドのXCOPYみたいなことをするにはどうしたらいいですか?
0525デフォルトの名無しさんNGNG
ShellExecute(nil, 'xcopy'
0526デフォルトの名無しさんNGNG
>>525
ありがとうございます〜
0527デフォルトの名無しさんNGNG
DelphiとIndyを使って、HTTPのURLにつないで「200 OK」が返ってくるか確認するプログラムを作りたいのですが、
接続したURLのサーバが見つからないときはSocketErrorがでて、そこで終了してしまいます。
サーバにつながらないときは別の処理を実行するようにしたいのですが、どうすればよいですか。

こんな感じでやってます。

IdHTTP1.Head('http://www.2ch.net/');
0528デフォルトの名無しさんNGNG
>>527
どうしてもその組み合わせじゃないとイヤ!
ってんじゃないのなら「Wininet」をお勧めします。
0529528NGNG
よくよく読んだらちょっと後半部分が「Wininet」だと怪しい気がしてきたので、
読み飛ばしてください。
↓次どうぞ
0530デフォルトの名無しさんNGNG
exceptしろよ
0531デフォルトの名無しさんNGNG
TTest=record
 Name:String[20];
 Age:Integer;
end;
PTest=^TTest;

var
 A:PTest;
begin
 New(A);
 ...
 Dispose(A);
 Dispose(PTest(A));

Aを開放するときはどっちでもOKですか?
0532デフォルトの名無しさんNGNG
後者はNG。文法的には正しいけどそう書く意味がない。
0533デフォルトの名無しさんNGNG
>>532
あっ間違えた。

List:TList;

var
 A:PTest;
begin
 New(A);
 List.Add(A);
 ...
 Dispose(List[0]);
 Dispose(PTest(List[0]));

上記の場合はどっちでもOKですか?
0534デフォルトの名無しさんNGNG
DisposeはPointer型の引数をとるからキャストは不要
0535デフォルトの名無しさんNGNG
>>534は嘘。
バリアント型やinterfaceの終了処理があるから、型付きポインタを渡さないといけない。

A := List[0];
Dispose(A);

が正しい。
0536デフォルトの名無しさんNGNG
delphiで実行する前に自動的に保存というオプションないですか?
6 personalです。
0537デフォルトの名無しさんNGNG
>>536
…環境オプション。

ソフトをインストールしたら一応オプションダイアログを眺めるのは常識では…
0538デフォルトの名無しさんNGNG
文字列の各単語の先頭の文字を大文字に変換する関数()ってあるでしょうか?
それとも自作する必要がありですか?

abc def → Abc Def
0539デフォルトの名無しさんNGNG
>>538
流石に標準で用意するにはピンポイント過ぎるよそれは
forで一文字ずつ見てって、空白の次にUpCaseかますだけだから、書いても三行ぐらいでしょ
0540デフォルトの名無しさんNGNG
>>537
設定タブの自動保存の設定ですか?
エディタファイルとプロジェクト デスクトップとあるのですが
どっちでしょう?
0541デフォルトの名無しさんNGNG
>>540
…それぐらいは、2chに書き込む手間を費やすよりは、ヘルプを見た方が早いと思うぞ
(何を保存したいのかにもよるが、ソースコードならエディタファイル、窓とかブレークポイントとかの状態はデスクトップ)
0542デフォルトの名無しさんNGNG
>>538
正規表現があれば一発なのにね
0543デフォルトの名無しさんNGNG
>>542
まあ、使いたきゃどうぞ
http://onigiri.s3.xrea.com:8080/delphi/index.php?%5B%5BTRegExpr%5D%5D

ただ、この程度はforでやっちまったほうがusesしてCreateして〜より行数的にも短くなると思うけど
0544デフォルトの名無しさんNGNG
>>541
ありがとう。
0545デフォルトの名無しさんNGNG
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
 TextBox1.Text = StrConv(TextBox1.Text, VbStrConv.ProperCase)
End Sub
0546デフォルトの名無しさんNGNG
.NETの勝利
0547デフォルトの名無しさんNGNG
>>546
何に勝利したの?
0548デフォルトの名無しさんNGNG
ぴゅう太の日本語ベーシック
0549デフォルトの名無しさんNGNG
>>534
キャストせんとMemCheck先生が怒りますよ
0550デフォルトの名無しさんNGNG
指定したアドレスにバイナリでデータを書き込むにはどうすればいいですか?
TMemoryStreamのWriteを使うのだと思うけどヘルプ読んでもワケワカメ(´・ω・`)
0551デフォルトの名無しさんNGNG
Move
0552デフォルトの名無しさんNGNG
Seek
0553デフォルトの名無しさんNGNG
>>516
両方で試せば、おのずと明らかになる。

>>531
GetMem, FreeMem を使いなさい。
0554デフォルトの名無しさんNGNG
ここで聞いていいのかわからないんですが…

LISPってなんでしょうか?

全くの素人でして、ゼロから学ばなきゃいけないんですが
何から始めていいのかわかりません…
0555デフォルトの名無しさんNGNG
テキストファイルの中身が空なら処理する
というプログラムにしたいのですがどうすれば良いでしょうか?

FileSizeだとテキストファイルに使えない上に
開かないとダメです

ご教授下さい
0556デフォルトの名無しさんNGNG
FindFirstでSearchRecのサイズを調べる
0557デフォルトの名無しさんNGNG
>>554
どうして学ばなければいけないのですか?
丸投げでいいのでは?
0558デフォルトの名無しさんNGNG
>>554
プログラム言語のひとつだよ。Delphiとはまったく無関係。
専用スレあるからそっち行って処理系なり入門サイトなり探してきな。
0559デフォルトの名無しさんNGNG
このスレもすっかり寂れてしまったな。
みんなVS.NETへの移行で忙しいらしい。
0560デフォルトの名無しさんNGNG
>>533 の質問って、ほぼ3ヶ月おきにされる FAQ だよね。なんで、自信満々で
間違ったことレスするかなぁー。 >>534
型なしポインタでは Dispose で Finalize ができないので一般にはリークする
だろうことぐらい気付けよ
0561デフォルトの名無しさんNGNG
>みんなVS.NETへの移行で忙しいらしい。

うむ、けっこうおもしろいね。実用性がまだまだだけど。
0562初心者ですいませんNGNG
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

type
TForm1 = class(TForm)
private
{ Private 宣言 }
public
{ Public 宣言 }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

end.

自作の関数や手続きはどこに書けば良いのでしょうか?
またC言語でいうところのヘッダファイルのような物を作るにはどうすれば良いですか?
0563デフォルトの名無しさんNGNG
使うところより前なら実装部のどこにでも
別ユニットにして自作関数をため込むのが一番いいかも
0564デフォルトの名無しさんNGNG
> またC言語でいうところのヘッダファイルのような物を作るにはどうすれば良いですか?

ヘッダファイルの相当するモノはない。ユニットの interface 部がそれにあたる。
uses すると見えるのはその部分だけ。
0565デフォルトの名無しさんNGNG
ま、ユニットファイルの構造くらいはヘルプで読んでおくこと。基本中の基本だから
0566デフォルトの名無しさんNGNG
あのわかりにくいヘルプを超初心者に読めと?
0567デフォルトの名無しさんNGNG
ヘルプの「Delphi プログラマーズガイド」の部分くらい読めよ。
読まなきゃ分かるかどうかさえ分からないだろ。超初心者でも分かるヤツは分かる。
0568デフォルトの名無しさんNGNG
>>同じユニットの例

implementation

{$R *.DFM}

function Tasizan(v1,v2:integer):integer;
begin
result := v1 + v2;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage('2+3 = '+IntToStr(Tasizan(2,3)));
end;
0569デフォルトの名無しさんNGNG
独立ユニットの例

uses
Unit2;

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage('2+3 = '+IntToStr(Tasizan(2,3)));
end;

------------------

unit Unit2;

interface

uses
SysUtils;

function Tasizan(v1,v2:integer):integer;

implementation

function Tasizan(v1,v2:integer):integer;
begin
result := v1 + v2;
end;

end.
0570デフォルトの名無しさんNGNG
表示されるimageの大きさが実行中に変わるソフトを作っているのですが
 image1.Width := 100;
 image1.Height := 100;
としてから表示させ、続いて
 image1.Width := 200;
 image1.Height := 200;
と変更させて表示させても、最初に表示された大きさのimage以上に表示されません。
これはどこが悪いのでしょうか?
0571デフォルトの名無しさんNGNG
>>570
Image1.Stretch:=True;
0572デフォルトの名無しさんNGNG
おおおおおおおお
素早い対応ありがとうございます
0573デフォルトの名無しさんNGNG
おまいら!QuadrupleDの3.01がでてますよ。
http://www-fu.magma.ne.jp/~hayase/
0574570NGNG
すいません、うまくいきませんでした。
画像imageの比率というか、内部で持っている大きさと表示される大きさが
サイズを変えるたびに変わってしまいます。
0575570NGNG
とりあえずFORMに直接描くようにして回避しました。すいませんでした。
それにしても
procedure TForm1.Button1Click(Sender: TObject);
begin
image1.Width := 100;
image1.Height := 100;
Image1.Canvas.Brush.Style := bsSolid;
Image1.Canvas.Brush.Color := clWhite;
Image1.Canvas.FillRect(Rect(0,0,Image1.Width,Image1.Height));
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
image1.Width := 200;
image1.Height := 200;
Image1.Canvas.Brush.Style := bsSolid;
Image1.Canvas.Brush.Color := clWhite;
Image1.Canvas.FillRect(Rect(0,0,Image1.Width,Image1.Height));
end;

これでボタンを1から押すのか2から押すのかでなぜ表示範囲が変わるのか結局不明。
Stretchだと表示倍率が変わってしまうし。
0576デフォルトの名無しさんNGNG
>>574
Stretch と Proportional を両方 True にしてみてください。
AutoSize は False、Align は alNone になってますか?
0577570NGNG
>576
やってみましたが同じくダメでした。白で塗りつぶしてから
Image1.Canvas.TextOut(10,10,'test100');
を入れてみたのですが、ボタン1から押すとボタン2の時に文字が縦横倍に
ボタン2から押すとボタン1の時に文字が半分になってしまいます。
0578デフォルトの名無しさんNGNG
>>570
Image の Width Height を変えるとき、
Image.Picture.Bitmap の Width と Height も変えてみてくれ。
0579デフォルトの名無しさんNGNG
しつもんです。

外観はTListViewのViewStyle=vsReportみたいな感じだけれども、マウスでクリック
したとき一番左側の値だけ選択されるのではなく、行全体が選択されるような
コントロールってどうやって実現するんでしか?

具体的に言えば、2chブラウザのスレ一覧につ変われているようなコントロールです・・・。
0580デフォルトの名無しさんNGNG
つ変われているような → 使われているような
実現するんでしか? → 実現するんですか?

でした。
0581デフォルトの名無しさんNGNG
>>579
RowSelect?
0582デフォルトの名無しさんNGNG
>>581
お゛お゛、できました。素晴らしい。
0583デフォルトの名無しさんNGNG
Special Launchみたいにフォームからマウスが離れると
フォームが小さくなるようにするには
どうしたらよいでしょうか?
0584デフォルトの名無しさんNGNG
ComboBoxの背景色は、透過させることができますか?
0585デフォルトの名無しさんNGNG
>>583
http://www.google.com/search?num=50&hl=ja&ie=UTF-8&q=%E3%83%9E%E3%82%A6%E3%82%B9+%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0+%E5%87%BA%E3%81%9F%E3%80%80Delphi&lr=lang_ja
0586デフォルトの名無しさんNGNG
>>585
thx
CM_MOUSEENTERですね
0587デフォルトの名無しさんNGNG
ENTERじゃなくてLEAVEちゃうか?
0588デフォルトの名無しさんNGNG
DelphiにVBのsplit関数と同じものはありませんか?
0589デフォルトの名無しさんNGNG
ない。
コードが欲しけりゃDelphi Splitでググっとけ
0590デフォルトの名無しさんNGNG
>>588
Delimiterを設定して
DelimitedTextにソース文字列を代入する
0591デフォルトの名無しさんNGNG
split関数と同じものではないですね。
0592デフォルトの名無しさんNGNG
>578
できました!おありがとうございます。
0593デフォルトの名無しさんNGNG
ファイルの内容をString型の変数にすぱっと読み込みたいのですが
そのようなことはできますか?
TStringsへ読み込むと分割されてしまうので
できればバイナリで読み込んでそれをStringにしたいのですが・・・
0594デフォルトの名無しさんNGNG
FS := TFileStream.Create(FileName,fmOpenread);
//FS.Position := 0;
FS.Read(s[1],FS.Size);
動作未確認
0595デフォルトの名無しさんNGNG
sl.LoadFromFile(
s := sl.Text
0596デフォルトの名無しさんNGNG
Free・・・orz
0597デフォルトの名無しさんNGNG
>>594
sをSetLengthしないとえらいことになるはず
0598デフォルトの名無しさんNGNG
>>593
TStringsのTextプロパティは駄目なの?
0599593NGNG
ありがとうございます。
Textプロパティ使わせていただきました。
0600デフォルトの名無しさんNGNG
オブジェクトを使うほどでもなければ API だけでも十分対応できる。
ほかのどの方法よりも速いはず。

function LoadFileToString(const FileName: string): string;
var
  Handle, Size: Cardinal;
begin
  Handle := CreateFile(PChar(FileName), GENERIC_READ, 0, nil,
    OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  if Handle <> INVALID_HANDLE_VALUE then
    try
      Size := GetFileSize(Handle, nil);
      SetLength(Result, Integer(Size));
      ReadFile(Handle, PChar(Result)^, Size, Size, nil);
    finally
      CloseHandle(Handle);
    end
  else
    RaiseLastOSError; // RaiseLastWin32Error;
end;
0601デフォルトの名無しさんNGNG
>できればバイナリで読み込んでそれを
ここには意味があるのかないのか
0602593NGNG
>>594さんの方法でできました。
0603デフォルトの名無しさんNGNG
TStringStream なんてのがあるぞ。
0604デフォルトの名無しさんNGNG
私ならAssignFileで開いてBlockReadでファイルサイズ分まとめて読み込むけど。
0605デフォルトの名無しさんNGNG
BlockReadなんて古臭い関数は使わないほうがいい。
エラーチェックが気に食わんけど(Win32Check使えとか一応全APIチェックしろとか)
>>600のでいいよ。
0606593NGNG
String型文字列をファイルに書き込みたいのですが
空のファイルができるだけです。何が問題でしょうか?


FS := TFileStream.Create('hoge.txt',fmCreate or fmOpenWrite);
FS.Write(s, Length(s));
FS.Free;
0607593NGNG
FS.Write(s[1], Length(s));
としたらできました。
0608デフォルトの名無しさんNGNG
>>606
FS.Write(PChar(s),〜
0609デフォルトの名無しさんNGNG
間違えた、すまん
FS.Write(PChar(s)^,〜
こうだ
0610593NGNG
あれ?>>607ではだめですか?
一応動いてるみたいですけど
0611デフォルトの名無しさんNGNG
s[1]だと、長さが0の時困るでしょ
0612593NGNG
>>611
おおおおおおおおおおー
0613593NGNG
>>611
長さ0の時を試してみたけど大丈夫みたいでした。
0614デフォルトの名無しさんNGNG
うん、s[1]が範囲外で不正なメモリを指しても、サイズが0ならつまりメモリ上は全く上書きされないので問題なし
でも、世の中には{$R+}というオプションがあって…
0615593NGNG
なんですか?その{$R+}というのは?
0616593NGNG
読み込むほうは
FS := TFileStream.Create('hoge.txt', fmOpenRead);
SetLength(s, FS.Size);
FS.Read(s[1],FS.Size);
FS.Free;

としてるんですけど、こっちもポインタみたいな指定に
したほうがいいんですか?
どういう書き方になるんでしょうか?
0617デフォルトの名無しさんNGNG
>>616
それでいいと思う。
漏れもそう書いてる。
強いて言えば
if FS.Size > 0 then FS.Read(s[1],FS.Size);
かな。
0618デフォルトの名無しさんNGNG
>>616
素直にPChar(s)^にしとけって
0619デフォルトの名無しさんNGNG
>>615
範囲チェックオプション。
0620593NGNG
うーんpcharが何なのかよくわからないなあ
0621デフォルトの名無しさんNGNG
一般的には「ヌルで終わる文字列」だが
今回の場合は文字列ポインタと言うべきだろうな
0622デフォルトの名無しさんNGNG
s[1]ってことはShortStringになるわけだが、長さは大丈夫なのか?
0623デフォルトの名無しさんNGNG
>>622
ならないならない
0624デフォルトの名無しさんNGNG
>>622
s:string[255];
と間違えてないか?
sの1文字(バイト)目だよ
0625デフォルトの名無しさんNGNG
Charになるというのならまだわからんでもないが・・
0626593NGNG
DelphiのString型はUNICODEじゃないんですか?
0627デフォルトの名無しさんNGNG
それはここで聞くよりヘルプ見たほうが早くないか?
0628デフォルトの名無しさんNGNG
>>626
バージョンとコンパイルオプションとWindowsによって変わるが、
D7まではSJISと思っておけばいい
D8はUNICODE
0629デフォルトの名無しさんNGNG
>>616
> 読み込むほうは
> FS := TFileStream.Create('hoge.txt', fmOpenRead);
> SetLength(s, FS.Size);
> FS.Read(s[1],FS.Size);
> FS.Free;
>
> としてるんですけど、こっちもポインタみたいな指定に
> したほうがいいんですか?
> どういう書き方になるんでしょうか?

だから、わからなかったら素直に>>598か>>600の方法使えって。
それで解決できるんだから。

>>615
> なんですか?その{$R+}というのは?
>>620
> うーんpcharが何なのかよくわからないなあ

ヘルプくらい引けよ。全部書いてあるだろ。

何か、釣りなんじゃないかという気がしてくる。
0630デフォルトの名無しさんNGNG
var パラメータは表記の問題で内部的には変数を指すポインタを渡してる。
つまり var パラメータの位置に置いた S[1] は、文字列 S の 1 文字目の
文字を指すポインタを渡してるということ。
Delphi の文字列 (長い文字列) は、参照カウンタとバッファサイズが実際の
文字列の前に付いてるので、単なる文字列バッファではない。
従って、これを直接 TFileStream の Read などに渡すことはできない。
しかし、Delphi の文字列を PChar にキャストすると Delphi の文字列が、
その変数の文字列バッファの先頭を指すポインタに変換されるので、
PChar(S)^ と S[1] は同じになる。
この 2 つの式の型はいずれも Char になる。
0631デフォルトの名無しさんNGNG
>>629
自分が知っている知識を全て常識と思わないようにね
0632デフォルトの名無しさんNGNG
次スレの>>1には、「わからないキーワードはとりあえずF1を押してみましょう」とか書いておくとか
0633593NGNG
>>630
結論は
>PChar(S)^ と S[1] は同じになる。
ということですネ!
0634デフォルトの名無しさんNGNG
文字列の長さが0の場合。
S[1]は例外を返す。
PChar(S)^はヌル文字列を返す。
0635デフォルトの名無しさんNGNG
>>633
繰り返しになるが…
「長さが0でかつ{$R+}」の場合を除き、varパラメータに渡す時または@でアドレス取る時、はYes
0636593NGNG
この際、難しいことは考えないことにします。
0637デフォルトの名無しさんNGNG
Record型について質問です
Record型で「=」は使えないのでしょうか?

type TItem = record end;

として、Form1上にButton1をおいて
procedure TForm1.Button1Click(Sender: TObject);
var a,b: TItem;
begin
b:= a;
if b =a then button1.Caption:= 'true';   ←[エラー] Unit1.pas(43): 互換性の無い型です
end;
0638デフォルトの名無しさんNGNG
代入はできても比較は出来ない。
比較したければCompareMem関数を使う
0639デフォルトの名無しさんNGNG
DOAのOracleDataSetを使用してSQL(TStrings)を発行しているのですが、
このSQL(TStrings)を書き換えたい場合はどうすれば良いでしょうか。

文字列を代入すると互換性がないといわれてしまい、
StringをTStringsに変換する方法をさがしたのですが見つからず。
師匠たち教えて下さい。
0640デフォルトの名無しさんNGNG
SQL.Text := '代入したい文'
0641デフォルトの名無しさんNGNG
PChar(S)^ はアドレスの逆参照でしょ?
内部的にポインタだからアクセスしないだけで、
本当に逆参照したらAVが発生するでしょ。

>>637
使えない。
0642639NGNG
>640 ありがとうございます。これで明日も生きていけます
0643デフォルトの名無しさんNGNG
相当焦ってるか、もしく純粋に経験不足だな
0644デフォルトの名無しさんNGNG
>>638,641
ありがとうございました。
string中に入れたいので比較関数作って処理します
0645CLOWNNGNG
馬鹿初心者ですが、今度いろいろと質問させていただきます。
0646645NGNG
ってーか6と7の違いすらわからんよ
0647デフォルトの名無しさんNGNG
recordなんて使うなよ。
classにして比較メソッド作れ
0648デフォルトの名無しさんNGNG
>>641
S のバッファが割り当てられていれば、PChar(S) は有効なアドレスを
指します。
上のような場合、割り当ては SetLength を呼び出した時点で行われて
いるので問題ありません。
割り当てによって確保されたサイズの範囲内であれば逆参照も可能です。
ただし、バッファが再割り当てされると、元のアドレスを保持していても
それが有効でなくなる可能性がありますので注意が必要です。

>>647
用途によるでしょ。
record に string や動的配列を含む場合は (自動変数でなければ) 初期化や
終了処理が必要なので class にする方がいいと思われる場合が多いですが、
単純型だけなら record でも十分です。
もっとも、要素が単純型でない場合は CompareMem は意味をなさないので、
要素ごとに適当な方法で比較するしかありません。
0649デフォルトの名無しさんNGNG
>>630
>しかし、Delphi の文字列を PChar にキャストすると Delphi の文字列が、
>その変数の文字列バッファの先頭を指すポインタに変換されるので、

変換されるのではない。string 型自身が実は文字列バッファの先頭を指すポインタなので
単なるキャスト

>>648
>それが有効でなくなる可能性がありますので注意が必要です。

有効じゃなくなる可能性なんかないだろ。S が string 型の変数であるかぎり。
0650デフォルトの名無しさんNGNG
>>649
>元のアドレスを保持していても
と書いてあるから、
A := PChar(S);
のAが無効になる可能性があるという話ではないかな?
0651デフォルトの名無しさんNGNG
>>650
そうだね。それは、今回のキャストの話とはべつのような。文脈を読むと

>>648
>S のバッファが割り当てられていれば、PChar(S) は有効なアドレスを指します。

などと書いているし。バッファが割り当てられていない string 型の変数なんかないだろな。
0652デフォルトの名無しさんNGNG
>バッファが割り当てられていない string 型の変数なんかないだろな。

あっ、ローカル変数で初期化されていない場合かな
0653デフォルトの名無しさんNGNG
>>649
長い文字列は内部的にはバッファを指すポインタですが、文法上は
文字列型という型です。ポインタ型と文字列型は違います。
S := 'abc' みたいに書くし、S[1] は S の 1 文字目でしょ。
動的配列もオブジェクトもポインタですか?

後半は再割り当ての前後でバッファのアドレスが変わる可能性があると
いうことです。
例えば P := PChar(S) として P にアドレスを入れた後で、S に対して
SetLength すれば P に入っているアドレスは無効になるかもしれません。
0654デフォルトの名無しさんNGNG
それはポインタなら当たり前
0655デフォルトの名無しさんNGNG
>ポインタ型と文字列型は違います。

ちがうからキャストするんでしょ
0656デフォルトの名無しさんNGNG
>動的配列もオブジェクトもポインタですか?

ちがいますがポインタにキャスト可能です。
0657デフォルトの名無しさんNGNG
今日も初心者回答者が大活躍ですな
0658デフォルトの名無しさんNGNG
いいから貴様等ヘルプぐらい読んでこい

string → PChar は、長さが1以上ならそのままバッファへのポインタを、
長さが0の時は特別に用意された長さ0のC形式の文字列へのポインタを返してくれる
長さが0のstringは全ビット0なので、純粋なキャスト、例えばPointerにキャストすればnilだし、Cardinalにすれば0。
でも、PCharにしたときは、別の値になる。
疑うならCPUウィンドウでトレースしてみなさい
0659593NGNG
まあ、落ち着けw
0660デフォルトの名無しさんNGNG
ネットでダウンロードしたあるソースファイル(hoge.pas)を使用して(自分のusesに追加)
コンパイルすると、
「hoge.pas:ファイルが見つかりません:'DsgnIntf'」
というコンパイルエラーが出るのですが
他に何か設定する必要があるのでしょうか?
hoge.pasのusesにはDsgnIntfが書いてあります。
0661デフォルトの名無しさんNGNG
DsgnIntfは設計時専用のユニット。
昔は実行時に使われるソースに設計時のコードまで書いてしまうコンポーネントが多かったため
Delphi5か6か忘れたけどその辺で、設計時パッケージを使わないとコンパイルできなくなってます

要するに、そのソースは古いものでしょう、と。
コンポーネントとしてインストールしたりせずに、単にユニットとして使うだけなら、
usesからDsgnIntfを消して、コンパイルエラーになったところを片っ端からコメントアウトでいけない?
0662デフォルトの名無しさんNGNG
>>658

長さが0でない場合には単なるキャストであることを確認

procedure TForm1.Button1Click(Sender: TObject);
var
S:string;
p:pointer;
i:integer;
begin
S := 'ABC';
p := pointer(@S);
//CopyMemory(@i,p,SizeOf(S)); // こっちでも同じ
Move(p^,i,SizeOf(S));
Label1.Caption := IntToStr(i);
Label2.Caption := IntToStr(integer(PChar(S)));
end;

では同じ値が表示されます。

>長さが0のstringは全ビット0なので、純粋なキャスト、例えばPointerにキャストすればnilだし、Cardinalにすれば0。
>でも、PCharにしたときは、別の値になる。

これも、上で S := 'ABC'; のかわりに SetLength(S,0); とすると確かめられる。

後者は初めて知った。ありがとう。

ところで、蒸し返すようだけど、Move() や TFileStream.Read() などの引数で
string 型にしたい場合、PChar(S)^ がいいの、それとも S[1] がいいの?
0663デフォルトの名無しさんNGNG
ヌル終端が不要で、長さが0の時に何もしないことが保証されているなら(MoveもTFileStream.Readもそう)
Pointer(S)^が一番いい。不要な処理が一切無い

それ以外(APIや外部に渡すとか)は、{$R+}の事を考えると、PChar(S)^の方がいいでしょうね
0664デフォルトの名無しさんNGNG
なるほど、ありがとう
0665デフォルトの名無しさんNGNG
Delphiでポインタのことを勉強するのにいい本ってありますか?
ヘルプ読んでも全然使いこなせません・・・
0666デフォルトの名無しさんNGNG
なんか新鮮な質問だな・・・
0667デフォルトの名無しさんNGNG
>>665
Indide Windows
0668デフォルトの名無しさんNGNG
amazon.comで調べました
9200円って('A`;)
0669668NGNG
間違えた Inside Delphiと勘違いしてた
0670デフォルトの名無しさんNGNG
Delphi でも C でも原理は同じ。Cでポインタについての本は結構あるでしょ。
上の話題のように、Delphi で string 型の変数がどのように実装されているか、
は、汎用性に欠けるし、知識としてもあまり有効ではありません。ポインタ一般に
ついて学ぶのがいいでしょう。Delphi では、@ でその変数のアドレス、ポインタの
後ろの ^ は逆参照、型の前の ^ は、その型へのポインタ型、とかを知っていれば
いいだけです。
0671668NGNG
>>670
どもども
0672デフォルトの名無しさんNGNG
@hogeとPointer(hoge)って一緒ですか?
一緒だと思ってるけど、いまいち自信がない(´・ω・`)
0673デフォルトの名無しさんNGNG
俺もポインタのこと良く解からないままずっと仕事してるな・・・いい加減しっときたい
0674デフォルトの名無しさんNGNG
ポインタとは読んで字の如くポインタです。
0675デフォルトの名無しさんNGNG
>>672
全然違うだろ。
@hoge は「変数 hoge のアドレス」をアドレスとするポインタ。
Pointer(hoge) は「変数 hoge に入ってる値」をアドレスとするポインタ。
0676デフォルトの名無しさんNGNG
>>675
ますます解らない。

@hogeはhogeが構造体でも使える
Pointer(hoge)はhogeがポインタや4バイトの整数の時しか使えない。
string型は実際にはポインタなので、Pointer(S) のような使い方ができる。

S = '' の時、PChar(S) は 00 となっているコード領域のアドレスを返すため、
逆参照可能。

PChar(S)^、PChar(nil)^ は問題ない。




0677デフォルトの名無しさんNGNG
>>676
@hogeは変数hoge(の内容)を指すポインタを返す。
Pointer(hoge) は変数hogeの内容をポインタとして扱う。

hoge: Cardinal
hoge := 100;

の場合
@hoge は 変数hogeを指すポインタ
Pointer(hoge) は メモリ上の100というアドレスを指すポインタ
0678デフォルトの名無しさんNGNG
関係ない話だけど、
Cなら"->"と"."は区別されているのだが、
Delphiの場合だとどちらでも"."でアクセスできてしまう。
0679デフォルトの名無しさんNGNG
アロー演算子大好きです
0680デフォルトの名無しさんNGNG
シラネーヨ
0681デフォルトの名無しさんNGNG
>>676
> @hogeはhogeが構造体でも使える
> Pointer(hoge)はhogeがポインタや4バイトの整数の時しか使えない。
やってみた。

var
 Ptr: Pointer;
 N: LongInt;
 D: double;
begin
 N := 0;
 D := 0;
 Ptr := Pointer(N); // 4バイトでPointer型と同じサイズだからエラーが出ない
 Ptr := Pointer(D); // [エラー] : 正しくない型キャスト
end;

>>676が言っているように、コンパイルできなかった。
0682デフォルトの名無しさんNGNG
Byte型もPointerにキャストできるよ。
B: Byte;
Pointer(B) も使える。
0683デフォルトの名無しさんNGNG
ローカルなstring型は暗黙の初期化が行われるよ。
初期化なかったら大変だよ。
0684デフォルトの名無しさんNGNG
>>682
順序型ならなんだって出来るんじゃない?
0685デフォルトの名無しさんNGNG
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Delphi使いが優しくコメントを返しますが、
お礼はDelphiの布教と初心者の救済をお願いします。
0686デフォルトの名無しさんNGNG
WideStringって今でも書込み時コピーしてへんの?
0687デフォルトの名無しさんNGNG
>>686
「書き込み時」って、何に書き込むとき? 「今でも」って何?
WideString 自身を Stream にそのまま書き込むことはできるよ。
0688デフォルトの名無しさんNGNG
>>682
>Byte型もPointerにキャストできるよ。

そりゃ、integer と代入互換性があるからでしょ。Word だってそう。

>>672
>@hogeとPointer(hoge)って一緒ですか?

この違いが分かれば、一歩前進。ポインタって、もっともナイーブに考えると
アドレスを格納するための変数なんだから、変数 Hoge のアドレスと、それが
保持している値は違うことに気づけばいい。
0689デフォルトの名無しさんNGNG
ずっと昔に買った本に、AnsiStringは参照カウンタで管理され無駄なコピーをしないように努力するが、
WideStringは参照カウンタがないからAnsiStringほど効率がよくないって書いてあったんよ
今のヴァージョンでも同じかいな?
0690デフォルトの名無しさんNGNG
>>687
質問の意味がわからないならすっこんでろ。
0691デフォルトの名無しさんNGNG
>>689
D7のヘルプでは
>Win32 では,WideString の値は参照カウントで管理されません。
>Linux では,参照カウントで管理されます。
と書いてある。
0692デフォルトの名無しさんNGNG
>>691
ありがとう
winとlinuxで違うなんて変なの
0693デフォルトの名無しさんNGNG
>>690
Copy on Write っていうんだよ。「書き込み時」じゃ意味不明
0694デフォルトの名無しさんNGNG
俺はなんとなくわかったYO
0695デフォルトの名無しさんNGNG
代入時ならより分かりやすい
0696デフォルトの名無しさんNGNG
でもググると書き込み時コピーで合ってるぽいけど
0697デフォルトの名無しさんNGNG
Copy on Write の直訳だろうね。参照を受け取って、一方が変更されるまでは、
コピーをしない、という意味だよね。string 型や TBitmap なんかもそう。
0698デフォルトの名無しさんNGNG
>>693
「長い文字列」のヘルプも読んでないならすっこんでろ。
>これは書き込み時コピーと呼ばれます。
0699デフォルトの名無しさんNGNG
質問は WideString ですけど
0700デフォルトの名無しさんNGNG
ヘルプ読まないと回答してはいけないのなこのスレ
0701デフォルトの名無しさんNGNG
>>690でFA
0702デフォルトの名無しさんNGNG
>>686はヘルプに書いてある用語で質問しているのに
全く理解できてない>>687、自分の思い込みを強制する>>693
話の流れすら理解できない>>699とアフォばかり出てくるのは
なぜですか?
0703デフォルトの名無しさんNGNG
同一人物だから

で WideString 型がどういう話の流れで string 型のヘルプになるわけ?

質問者にヘルプ読めってことだろ結局 >>691 から
0704デフォルトの名無しさんNGNG
WideStringの書き込み時コピーについては>>692で終わってる。
以降は「書き込み時コピー」という用語が存在するかどうかの話。
0705デフォルトの名無しさんNGNG
686の質問から691の回答まで58分間。689の説明があるまで、まともな
回答がなかったのは事実。687は689の説明を引き出すのに役立った。
はじめから689のように質問していたら、687はなかったし、回答ももっと
早かったのでは。だから、質問の意味がわからなくてもすっこんでいる必要はない。
690,698,702のレスの方が無意味
0706デフォルトの名無しさんNGNG
TMemoでメモ帳を作っています。
改行時にオートインデントの機能を付けたいのですが全然うまくいきません。
どういうコードを書いたらいいのか教えて下さい。よろしくお願いします。
0707デフォルトの名無しさんNGNG
テキストボックスの横にUpDownコントロールをおきました。
updownのassociateプロパティでテキストボックスとひもづけました。
そうするとそのテキストボックスをtxtHogeとします。
txtHoge.Text := '10';
で値を入れることができません。なぜでしょう?
0708デフォルトの名無しさんNGNG
>>707
入れられたけど・・・
0709デフォルトの名無しさんNGNG
うそーん
0710デフォルトの名無しさんNGNG
テキストボックスのNameプロパティでなくCaptionプロパティだけを変えてるとか、
UpDownのmaxプロパティとかminプロパティの設定が間違ってるとか、、、
0711デフォルトの名無しさんNGNG
うーん。
UpDownのPositionに10といれればいけるけど
テキストボックスの.textに入れると0のまま・・・
0712デフォルトの名無しさんNGNG
なんかイベントによって機能したりしなかったりするみたい
UpDown1.Position := 10;
でどうですか?
0713デフォルトの名無しさんNGNG
そうか
Createイベントではだめなんですね
0714デフォルトの名無しさんNGNG
文字列が数字かどうかチェックする関数ありませんか?
VBでいうIsNumericのような
0715デフォルトの名無しさんNGNG
function IsNumericStr(const Str: string): boolean;
var
i: integer;
begin
Result := True;
for i := 1 to Length(Str) do
if not (Str[i] in ['0'.. '9']) then
begin
Result := false;
Break;
end;
end;

こういう関数を用意すればいいかも・・・
0716ぬるぽの名無しさんNGNG
>>714
function IsNumer(NumStr: String): Boolean;
begin
try
StrToInt(NumStr);
Result := True;
except
Result := False;
end;
end;

応用するとDateTimeなどにも使える。
0717デフォルトの名無しさんNGNG
>>715
>>716
さてどっちが速いか競争してみましょう。
0718デフォルトの名無しさんNGNG
IsNumericStr() の方が約4.5倍速い
0719デフォルトの名無しさんNGNG
いただきました。ありが�d
0720デフォルトの名無しさんNGNG
さらに速度1割り増し

function IsNumericStr2(const Str: string): boolean;
var
i: integer;
begin
Result := false;

for i := 1 to Length(Str) do
if not (Str[i] in ['0'.. '9']) then exit;

Result := true;

end;
0721デフォルトの名無しさんNGNG
>>720
いただきました。
0722デフォルトの名無しさんNGNG
'9999999999999999999999999999'はIntegerに変換できないんだけどな。
0723デフォルトの名無しさんNGNG
質問

>文字列が数字かどうかチェックする関数ありませんか?

Integerに変換できなくても数字であればいいのでは? あっ、IsNumer() のほうならそのとおり。
0724デフォルトの名無しさんNGNG
System.Val…
0725デフォルトの名無しさんNGNG
-ついたらだめだったのでVBに戻ります
0726デフォルトの名無しさんNGNG
>>725
そうだそうしろ。2度と来るんじゃないぞw
0727デフォルトの名無しさんNGNG
Delphiって言語以上にコミュニティに問題があるな
0728デフォルトの名無しさんNGNG
>>720を少し改造すれば負の整数(-付き)にも対応できるよ。
0729デフォルトの名無しさんNGNG
>>727
おまえみたいのがいるからな
0730デフォルトの名無しさんNGNG
VB の IsNumeric は文字列関数じゃなくてバリアント関数じゃないのか?
Delphi やるなら、まず何でもバリアントで扱うという考えは捨てた方が
いいと思うぞ。
0731デフォルトの名無しさんNGNG
>>730
寝言はいいから早くDelphi版IsNumericのコードをください。
0732デフォルトの名無しさんNGNG
function IsNumeric(const V: Variant): Boolean;
begin
  Result := True;
  try
    VarAsType(V, varDouble);
  except
    Result := False;
  end;
end;
0733デフォルトの名無しさんNGNG
うちのdelphi try exceptがまったく効かないんだけど
なんででしょう?
0734デフォルトの名無しさんNGNG
>>733
まず何をもって効かないと言ってるのか書いてみて。
0735|Д・彡 ◆A6VzDeLphI NGNG
昔2chで教えてもらったんだけど....
例外キャッチだとIDEが止まるのがちょっといまいち。

D6から
TryStrToInt/TryStrToInt64/TryStrToFloart
があります。

D5以前ならこんな実装してもいいかな。
function CanStrToInt(const S: string): Boolean;
var
E: Integer;
tmp: Integer;
begin
Val(S, tmp, E);
Result := (E=0) and (@tmp=@tmp);
end;

function CanStrToInt64(const S: string): Boolean;
var
E: Integer;
tmp: Int64;
begin
Val(S, tmp, E);
Result := (E=0) and (@tmp=@tmp);
end;

function CanStrToFloat(const S: string): Boolean;
var
tmp: Extended;
begin
Result := TextToFloat(PChar(S), tmp, fvExtended);
end;
0736デフォルトの名無しさんNGNG
>>734
エラーで落ちてしまいます。
本当はキャッチするんですよね?
0737デフォルトの名無しさんNGNG
例外の設定がおかしいと思われる。
0738デフォルトの名無しさんNGNG
設定ですか?インストールしたままほとんど弄ってませんが
0739デフォルトの名無しさんNGNG
>>736
コードさらせ
Except仕切れていないだけなんじゃないの
0740デフォルトの名無しさんNGNG
>>716
とかそのままコピペしても落ちます。
0741デフォルトの名無しさんNGNG
IDEから実行して止まってるだけだろどうせ
0742デフォルトの名無しさんNGNG
えっ!exeなら止まらないんですか?
知らなかった。
0743デフォルトの名無しさんNGNG
とまったらもう一回実行してみろ
0744デフォルトの名無しさんNGNG
>>742
IDEからでも止めたくなかったら、
デバッガオプションを設定する必要あり
0745デフォルトの名無しさんNGNG
そのオプションとやらはどこにあるんですか?
0746デフォルトの名無しさんNGNG
('A`)マンドクセ…
0747デフォルトの名無しさんNGNG
Delphiってほんとにいいね。
仕事で使えないのが残念
0748デフォルトの名無しさんNGNG
おい、まさかIDEで実行して、言語の例外で停止にチェック入れてるとかいうオチ?
0749デフォルトの名無しさんNGNG
Delphi 言語の例外で停止というのにチェック入ってます。
これがだめなの?
0750デフォルトの名無しさんNGNG
>>749
だめというか、デバッグには役に立つんだけどね。
0751デフォルトの名無しさんNGNG
なるほど!
0752748NGNG
すまん、逆だったな。
入ってなかったってオチ?だな
0753748NGNG
いや、いいのか・・・
例外で止めたらexcept部分が実行されないんだな
0754デフォルトの名無しさんNGNG
どっちやねん!
0755デフォルトの名無しさんNGNG
システムモーダルなフォームを開きたいのですが可能ですか?
0756デフォルトの名無しさんNGNG
システムモーダルって、プロセスが止まっちゃうのでは?
0757デフォルトの名無しさんNGNG
こちらに書けばよかったですね・・・。
すいません質問があります。
WindowsXP標準搭載のCDライティングウィザードを
プログラムから起動させてファイルを書き込みさせたいのですが、壁に当たってしまい困っています。
いまわかっているのはファイルをC:\Documents and Settings\ユーザ名\Local Settings\Application Data\Microsoft\CD Burningに
置くと自動的にバルーンメッセージが表示されCDに書き込める状態になるのですが、
そこからウィザードを起動させる手段がわからずにいます。拡張子が.exeでは無いようにおもうのですが。。
なにかよい知恵はありませんでしょうか?
0758デフォルトの名無しさんNGNG
>>755
昔はAPIが用意されてたみたい。
http://www.delphifaq.com/fq/q2029.shtml
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpwinui/html/_win32_setsysmodalwindow.asp

今でもフックで似たようなことはできるもより。
http://mfc.acty-net.ne.jp/ml/mfc/logTop/logAll/00016769.shtml
0759デフォルトの名無しさんNGNG
システムモーダルって何?
0760デフォルトの名無しさんNGNG
ぐ・ぐ・れ♥
0761デフォルトの名無しさんNGNG
(フサギコ談話室からの難民です。よろしくお願いします)
TInterfacedObjectに関する質問があります。
GCっぽい動作を期待しつつ、DelphiのHelpに記載されているサンプルを実行してみたところ、メモリリークが発生しているように思えます。
サンプルは、Delphiヘルプ「クラス型プロパティへの委任」から引用しました。
メモリリークの検出は、MemCheck.pas(使い方は間違ってないと思います*1)を用いました。
新規作成したプロジェクト(*2)でも、5個のメモリリークが検出されるのですが、件のサンプルを実装し、それを実行した状態だと6個に増えます。なぜなのでしょうか、エロイ方よろしくお願いします。修正法等もあれば、よろしくお願いします。
環境はDelphi6です。パッチは当たってます。

*1
program Project1;
uses
MemCheck,Forms,Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.

*2
procedure TForm1.Button1Click(Sender: TObject);
var
MyClass: TMyClass;
MyInterface: IMyInterface;
begin
MyClass := TMyClass.Create;
MyClass.FMyImplClass := TMyImplClass.Create;
MyInterface := MyClass;
MyInterface.P1; // TMyClass.MyP1 を呼び出す
MyInterface.P2; // TImpClass.MyP2 を呼び出す
end;
0762デフォルトの名無しさんNGNG
インターフェイス同士で相互に参照してんじゃねーの?
0763デフォルトの名無しさんNGNG
TMyImplClass = class
procedure P1;
procedure P2;
end;
TMyImplClass自身はTInterfacedObjectじゃないからでしょ。
implementsは使ったことないからどう対処すべきかは知らないけど
0764デフォルトの名無しさんNGNG
バイナリファイルを1バイトずつ読み込むにはどうしたらいいんでしょう?
BlockRead(だったけ?)を使えばいいのは判るけど
レコードサイズがややこしいですねえ。
0765デフォルトの名無しさんNGNG
TFileStream使っとけ
0766デフォルトの名無しさんNGNG
厨な質問で申し訳ないのですが、TListViewをvsReportで使用すると
TStringGridのようにも扱えますが、それぞれの使い分けというか、
どういうときにはTListViewを使用して、こういうときにはStringGridを
利用するみたいのを教えてください。
0767デフォルトの名無しさんNGNG
>>763
ありがとうございました。
TInterfacedObjectの破棄時、メンバにオブジェクトがあった場合、それも自動的に破棄される物かと思ってました・・・
0768デフォルトの名無しさんNGNG
>>764
別にBlockReadで読む必要はないぞ。

var
  fp : File of byte;
  b : byte;
begin
  AssignFile(fp, Filename);
  reset(fp, 1);
  while not eof(fp) do
    read(fp, b);
  CloseFile(fp);
end;

で1バイトずつ読める。
でも、いまならTFileStreamを使った方が良いんじゃないかな。
0769デフォルトの名無しさんNGNG
CreateFile, ReadFile
0770デフォルトの名無しさんNGNG
TFileStreamは先読みしないのでHDDヘッダの
オーバーヘッドが大きいと聞きました。
本当に一バイトずつ読みのにTFileStreamでいいの?
0771デフォルトの名無しさんNGNG
パフォーマンス気にするならWin32API使えよ
0772デフォルトの名無しさんNGNG
>>770
心配しなくてもOSのAPIが世話焼いてくれるって…
0773デフォルトの名無しさんNGNG
>>770
TMemoryStream
0774デフォルトの名無しさんNGNG
>>772
ご自分で使用したことおあり?
0775デフォルトの名無しさんNGNG
http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&q=TFileStream+%E3%83%90%E3%83%83%E3%83%95%E3%82%A1
0776デフォルトの名無しさんNGNG
>>770
765だってTFileStreamで1バイトずつ読めとは思ってないだろ。
ある程度の大きさのバッファに読み込んで、そこから1バイトずつ処理すりゃいいじゃん。
0777デフォルトの名無しさんNGNG
言い訳カコワルイ
0778764NGNG
あわわ、結局何を使ったらいいのやら・・・(;・∀・)
0779デフォルトの名無しさんNGNG
>>778
>>769
0780デフォルトの名無しさんNGNG
あ、そうだ。書こうと思って忘れてたけど
ちょっと前にあったPChar(s)^のやつ、
SetLengthを読み込むバイト数+1でやらないと
最後の1バイト切れるよ。
0781デフォルトの名無しさんNGNG
>>780
切れない切れない
0782デフォルトの名無しさんNGNG
>>781
ありがとう。
おかげさまでつまらぬミスを改修できました。
0783デフォルトの名無しさんNGNG
nil ではなく無効なポインタを検出するにはどうすればいいのですか?
0784デフォルトの名無しさんNGNG
無効になった変数には nil を代入して下さい。
これが確実な方法です。
他の方法は不確実。
0785デフォルトの名無しさんNGNG
こんばんわ。
delphi勉強し始めでしてとりあえずブラウザ作ってるんですが
WebBrowserにpgup/pgdnとかhome(ページの先頭へ移動)の命令を送るボタンとかつけたいんですが
どうしたらいいのでしょうか。お願いします。
0786デフォルトの名無しさんNGNG
質問があります。
WideChar型の変数に全角文字を代入したいのですが、
以下ではエラーになります。
どうすればいいでしょうか?

procedure TForm1.Button1Click(Sender: TObject);
var
 W: WideChar;
begin
 W := 'あ';
end;
0787デフォルトの名無しさんNGNG
Delphi製Cコンパイラが欲しいのですが、既存のもので何かありますでしょうか?
あと、Delphi製のシェルなんてのも探してます。
散々調べてみたのですが、それらしきものが見つかりませんでした。

無ければ、つくります。
0788デフォルトの名無しさんNGNG
>>786
w := WideString('あ')[1];
0789デフォルトの名無しさんNGNG
>>787
作って下さい。
0790デフォルトの名無しさんNGNG
w := #$3042;
0791デフォルトの名無しさんNGNG
>>787
ガンガレ
0792デフォルトの名無しさんNGNG
function ToWideChar(c: WideString): WideChar;
begin
 if Length(c) <> 1 then
  raise Exception.Create(c);
 Result := c[1];
end;
0793デフォルトの名無しさんNGNG
WideChar型にどうにかして空文字を('')代入することって無理ですかね?
0794デフォルトの名無しさんNGNG
空文字は文字ではないので代入できない。文字列なら代入可
0795デフォルトの名無しさんNGNG
>>794
わかりました。
0796デフォルトの名無しさんNGNG
delphi6proを5000円で譲ってくれるって話があるんですが、
8のアカデミック買うのとどっちがよさげでしょうか。
0797デフォルトの名無しさんNGNG
6pro買うかVS.NETのアカデミック買え
0798デフォルトの名無しさんNGNG
>>796
今更日某にお布施はもったいない・・・
0799デフォルトの名無しさんNGNG
theSpokeよりVS.NETの方が機能は上なんですか?スレ違いですが・・・
一応兄貴のお下がりでVBとCの本もいっぱい読ませてもらったりちょっと触らせてもらったりしたのですが、
delphiが一番打ってて楽しいので、del6getの方向でいってみます。
0800デフォルトの名無しさんNGNG
theSpoke は機能的には VS.NET 2003 Professional と同じ。
ただし紙のマニュアルなどは省略されてる。

>>799 は開発対象が、Win32 ネイティブアプリケーションなのか、
CLR 上で動くマネージドアプリケーションなのかによって、
最適な選択肢が変わってくると思う。

Delphi6 でマネージドアプリを作ることは不可能だし、VS.NET の
VB でネイティブアプリを作ることも不可能。
0801デフォルトの名無しさんNGNG
コントロールパネルを操作することって可能ですか?
0802デフォルトの名無しさんNGNG
>>801
その質問では「操作」が何を意味するのかわからない。
やりたいことをもっと具体的に書け。
0803801NGNG
>>802
すいません
具体的にはフォルダオプションのシングルクリックでプログラムを起動するように設定したり、XPでクラシック表示にしたりです。
0804デフォルトの名無しさんNGNG
>>803
かのう。
0805デフォルトの名無しさんNGNG
>>804
本当ですか!?
どこかにサンプルとかありますか?
0806デフォルトの名無しさんNGNG
>>805
レジストリエディタとにらめっこをしながら
コントロールパネルで該当のオプションを変更しなさい。
0807デフォルトの名無しさんNGNG
SystemParametersInfo
0808デフォルトの名無しさんNGNG
指定した時間(13:30など)に音楽を鳴らすプログラムを作りたいんだけど、Timerコンポーネントを使うんでしょうか?
0809デフォルトの名無しさんNGNG
>>808
そうです
0810808NGNG
レス早っ!

DateTimePickerで指定した時刻にイベントを実行するようにしたいんですが、
参考になるようなサイトはありますかね。
0811デフォルトの名無しさんNGNG
「指定した時間に」なら TTimer じゃないだろ
TTimer は「一定時間後」或いは「一定時間ごと」だ
指定した時間なら ApplicationEvents.OnIdle で現在時刻を調べて判定
0812デフォルトの名無しさんNGNG
アフォ
0813デフォルトの名無しさんNGNG
>>806レジストリを直接さわらない方法で・・・
>>807後でぐぐってみます(携帯からなんで)
0814デフォルトの名無しさんNGNG
>>811
そしたら常にメッセージループを回してないといけないじゃないか
現在時刻と指定された時間の差をTTimerのインターバルに設定すればいい話
0815デフォルトの名無しさんNGNG
sleepで十分
0816デフォルトの名無しさんNGNG
>>813
初心者がレジストリ操作を避けるのは
「うっかり操作ミス」でキーを消したりするとあぶないから。

ちゃんと該当するキーを調べた上でプログラムから操作するなら
Windowsの設定変更にこれほど強力な手はない。
0817デフォルトの名無しさんNGNG
TTimerのインターバルを利用する方法だと誤差が出たような気がする。
0818デフォルトの名無しさんNGNG
>>803 の前半の方は
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer の
ShellState の 4 バイト目の 5 ビット目 (0 から数えて) が
0 ならシングルクリック、1 ならダブルクリックのようです。

レジストリを書き換えるのはそんなに難しくないと思いますが、
書き換えた後にどうやって反映させるのかは知りません。
0819デフォルトの名無しさんNGNG
>>818>>816
レジストリ直接いじるのをさけるのはミスが怖いとかじゃなくて管理者権限がないパソコンで動かすためです...
0820デフォルトの名無しさんNGNG
sh解決しました。
0821デフォルトの名無しさんNGNG
vbでいうところのscreen.mousepointer = vbhourglassに
相当するものを教えてください。
0822デフォルトの名無しさんNGNG
Screen.Cursor := crHourglass;
0823デフォルトの名無しさんNGNG
ちゃんくす
0824デフォルトの名無しさんNGNG
>>821
VBからDelphiへの移行にトライしている人がいるみたいだけど、
ここを見るといい。
ttp://www.wwlnk.com/boheme/

自分もVBから移行するときにかなり参考になった。関数や手続き別に
移行FAQが書いているよ。
もう知っているのかもしれないけど。
0825デフォルトの名無しさんNGNG
>>824
ちゃんくす。ブクマクしますた!
0826デフォルトの名無しさんNGNG
DelphiからVBに移行するのにいいページない?
0827デフォルトの名無しさんNGNG
>>826
ttp://www.kanazawa-net.ne.jp/~pmansato/Tools.htm
>もし、Visual Basic の機能の範囲内で間に合うのであれば、
>Delphi も Visual Basic と同じぐらい易しいといえるでしょう。
>しかしそれなら、Visual Basic を使うことをすすめます。
0828デフォルトの名無しさんNGNG
素人はVBに移りなさいってこった
0829デフォルトの名無しさんNGNG
PageControlのタブのサイズを変更したいのですが、どこで出来ますか?
半角空白や全角空白を使って調整する以外に可能ですか?
0830デフォルトの名無しさんNGNG
>>829
TabWidth, TabHeight
デフォルト(0)だとフォントによって自動調整されている。
0831デフォルトの名無しさんNGNG
>>830
ありがとうございました。
子PageControl側でなく、子Tab側を探していたので見つかりませんでした。次からは親側も注意します。
0832デフォルトの名無しさんNGNG
訂正)親であるPageControl側でなく、子Tab側を
0833デフォルトの名無しさんNGNG
ある関数をスレッドにしたいのですが
どうすればよいですか?
0834デフォルトの名無しさんNGNG
>>819
制限ユーザでも HKEY_CURRENT_USER 以下のレジストリは書き込みもできる。
SystemParametersInfo だって最終的にはレジストリを操作するものだし、
そもそも直接操作出来ないようなレジストリは他の API を使って間接的に操作することも出来ん。
0835デフォルトの名無しさんNGNG
>>834
常識的に考えてそうだよね。
0836デフォルトの名無しさんNGNG
>>827
「VBは遅くない」
「Cの知識がある俺にはDelphiは使いこなせなかった」
ということをいうのにずいぶん遠まわしないいかたをするページだ
0837デフォルトの名無しさんNGNG
おじさんは新しいものが覚えられないからな
仕方ないよ
0838デフォルトの名無しさんNGNG
>>827
http://www.kanazawa-net.ne.jp/~pmansato/BCB_Main.htm
>今、話題の C# の開発者は Delphi を開発した人です。

普通に知らなかった
0839デフォルトの名無しさんNGNG
超有名です。
0840デフォルトの名無しさんNGNG
>>836
読み間違えてない?
基本的にVCLマンセーなサイトだけど。

.NETをどうしても使う場合にも、
>Visual Basic を選択してはいけません。Visual C# を選ぶべきです。
という感じでVBやめなさいみたいだし。
0841デフォルトの名無しさんNGNG
ShellListViewでファイル選択時に、選択した合計ファイルサイズを
ラベル(下記のソースではLabel5)に表示したいのですが・・・。
下のソースコードではファイルのみで、フォルダに対応できません。
複数階層のフォルダに対応させるには、どうしたらいいのでしょうか?
0842841NGNG
procedure TForm1.ShellListView1Change(Sender: TObject; Item: TListItem;
 Change: TItemChange);
var
  i: Integer;
  size: Integer;
  path: String;
  rec: TSearchRec;
begin
  Label5.Caption := '0';
  size = 0;

  if (ShellListView1.ItemIndex = -1) then Exit;

  try
    for i := 0 to (ShellListView1.Items.Count - 1) do
      if (ShellListView1.Items.Item[i].Selected) then
      begin
        path := ShellListView1.Folders[i].PathName;

        if FindFirst(path, faAnyFile, rec) = 0 then
          size := size + rec.Size div 1024;
      end;
    end;
  finally
    FindClose(rec);
  end;

  Label5.Caption := IntToStr(size);

end;
0843デフォルトの名無しさんNGNG
>>833
API
0844デフォルトの名無しさんNGNG
>>842
再帰。
0845デフォルトの名無しさんNGNG
VB、.NETの評価はこちらでどうぞ。

ミ,,゚Д゚彡フサギコのフサフサDelphi談話室その13
http://pc5.2ch.net/test/read.cgi/tech/1089454618/
0846デフォルトの名無しさんNGNG
Delphi標準のWebBrowserでページを開くと、
TabやEnter、その他の入力ができなくなっています。
フォーカスはWebBrowserにあるのですが。
WebBrowser内で一度クリックすれば入力可能になりました。
どうすればクリックせずに入力可能な状態にできるのでしょうか。

ただ、ページによっては(Googleなど)はじめからEditBoxにカーソルがあり、
Tab、Enterなどが入力可能になっていました。

UIWebBrowserでも試してみたので、WebBrowserのバグではないと思います。

環境:Delphi6 E

よろしくお願いします。
0847デフォルトの名無しさんNGNG
TMenuItemのShortCutを使ってはいかがかな?
0848デフォルトの名無しさんNGNG
聞いたことがないので、調べてみます。
0849デフォルトの名無しさんNGNG
>>838
こっちだろ普通
http://www-6.ibm.com/jp/developerworks/java/001215/j_jw-csharp.html
0850デフォルトの名無しさんNGNG
>846
ttp://hogehoge2001.at.infoseek.co.jp/note-delphi.html
このページの「フォーカスを当てる」のとおりにすればフォーカス当たる。
0851デフォルトの名無しさんNGNG
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Delphi使いが優しくコメントを返しますが、
お礼はDelphiの布教と初心者の救済をお願いします。
0852デフォルトの名無しさんNGNG
データベースプログラムでNOT NULLの列を入力せずに
POSTするとエラーが出るのですが、この時のエラーが
「無効/非表示ウィンドウにフォーカスを設定できません。」
と表示されるんです。これの意味がわからず、もう3日も悩んでます。
だれか教えてください。
0853841NGNG
>>844
ありがとうございます、再帰というものを始めて知りました。
ぐぐって頑張ってみます。
0854デフォルトの名無しさんNGNG
HTTPでゲットしたデータをそのままファイルに
落としたいのですがこれでよいでしょうか?

procedure TfrmMain.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var
buff: array[0..4095] of char;
ret: Integer;
fs: TFileStream;
begin
ret := ClientSocket1.Socket.ReceiveBuf(buff, sizeof(buff));
fs := TFileStream.Create('hoge.jpg', fmOpenReadWrite);
fs.Seek(0, soFromEnd);
fs.Write(buff, ret);
fs.Free;
end;
0855デフォルトの名無しさんNGNG
>>854
だめです。
0856デフォルトの名無しさんNGNG
>>855
どこがだめでしょうか?
0857デフォルトの名無しさんNGNG
buff: array[1..4096] of char;
にしたらできました。
0858デフォルトの名無しさんNGNG
アクション関係で一発でダウンロード&ファイルに保存ってのがあったような。
0859デフォルトの名無しさんNGNG
>>858
ぜひ!
0860デフォルトの名無しさんNGNG
TIdHttp.GetでTStreamに取り込んで保存しちゃえ
0861デフォルトの名無しさんNGNG
テキストファイルの文字列を全消去できますか?
0862デフォルトの名無しさんNGNG
TStringList.Create.SaveToFile('yourfile.txt');
0863デフォルトの名無しさんNGNG
frmSub := TfrmMain.Create(frmSub);
frmSub.Show;
で表示したフォームを
OnCloseで
Action := caFree;
とするともう一度開くときに
EStackOverflow例外エラーが発生してしまいます。
どのように回避すればよいでしょうか?
0864デフォルトの名無しさんNGNG
>>863
親フォームをCreateで指定する。
自分を指定してどーする
0865デフォルトの名無しさんNGNG
>>864
ネ申!
0866デフォルトの名無しさんNGNG
DateTimeToStr(Now)
で日時を文字列に変換したのですが形式を
yyyy/mm/dd hh:mm:ss
にしたいのですがどのように書けばよいでしょうか?

0867デフォルトの名無しさんNGNG
FormatDateTime('yyyy/mm/dd hh:mm:ss', Now)
0868デフォルトの名無しさんNGNG
>>867
ネ申..._〆(゚▽゚*)
0869デフォルトの名無しさんNGNG
それ違ってる>>867

mmは月。
従って、hh:nn:ss。
0870デフォルトの名無しさんNGNG
ああ、866をコピペしたから
0871ANGNG
>>869
>mm 月を先頭のゼロ付きで表示する(01 〜 12)。
>   h 指定子または hh 指定子の直後に mm 指定子を指定すると,月ではなく分が表示される

hhの直後のmmは、分として判断されるので、>>867でもOK。
0872デフォルトの名無しさんNGNG
教えてください。
procedure TForm1.BitBtn1Click(Sender: TObject);
var
Jpeg :TJpegImage;
begin
Jpeg :=TJpegImage.Create ;
Jpeg.LoadFromFile('hoge.jpg');
try
Image1.Picture.Assign(Jpeg);
except
end;

Jpeg.Free;

end;

例外処理をしているつもりなのですが
0バイトのjpegファイルを読み込むと

JPEGエラー #41.

がでてしまいます。
例外エラーが出ないようにするにはどうすればよいでしょうか?
0873デフォルトの名無しさんNGNG
Create
Try
LoadFile

の順で
0874デフォルトの名無しさんNGNG
×LoadFile
○LoadFromFile

ゴメソ
0875デフォルトの名無しさんNGNG
>>873
その順番で試してみました。
が、同じでした。うーむ。
0876872NGNG
すみません。わかりましあ。
0877デフォルトの名無しさんNGNG
#41が何か解らないけど、IDEは例外で止まるよ。
0878872NGNG
http://www.wwlnk.com/boheme/delphi/tips/tec1430.htm
これで対応しました。
0879デフォルトの名無しさんNGNG
最近はネ申と書くと謝辞になるのか?
0880デフォルトの名無しさんNGNG
最高級の謝意を表す文字です。
0881デフォルトの名無しさんNGNG
Explorerからフォルダ(ファイル)をListView1にD&Dしてフォルダ名を追加しようとしています
 DragAcceptFiles(Handle,True);
↑なら正常に動いてくれますが、Form全体が受け取り範囲になっています。
D&Dを受け取るのはListView上だけにしたいのです。
そして
  DragAcceptfiles(ListView1.Handle,True);
に変えてみました。マウスカーソルは期待通りに変わっていますが
いくらドロップしても無反応です。
FormのOnCreateに書いているのが悪いのかと思い(∵まだListViewがCreateされていないため
OnShow部に書いてみても同じ結果です。

以下、その他の関係ある部分です

private
procedure DropFiles(var Msg : TWMDROPFILES); message WM_DROPFILES;

procedure TDupForm.DropFiles(var Msg : TWMDropFiles);
var
FileName : array [0..255] of char;
ListItem : TListItem;
begin
DragQueryFile(Msg.Drop, 0, FileName, SizeOf(FileName));
ListItem := ListView1.Items.Add;
if FileExists(FileName) then
ListItem.Caption := ExtractFileDir(FileName)
else ListItem.Caption := FileName;
ListItem.SubItems.Add('hoge');
DragFinish(Msg.Drop);
end;
この部分は弄ってません。
メッセージをきちんと受け取れてないのだと思いますが
解決の仕方が分からないので、教えてください。
0882デフォルトの名無しさんNGNG
Form で WM_DROPFILES を受け取れるわけないだろ。LISTVIEW1 で受けとらなきゃだめ。
0883デフォルトの名無しさんNGNG
>>880
2chではそうらしいね。でも >>864 や >>867 程度でそういわれるとオチョクッテルみたいに感じる
0884デフォルトの名無しさんNGNG
イム にしたら?
0885デフォルトの名無しさんNGNG
>>868は便乗だからより一層不愉快
0886864,867NGNG
同一人物です。
いや、ほんとに助かったので。俺にとっては神そのものです。
0887863,866NGNG
まちがえた。885は864と867です。
0888デフォルトの名無しさんNGNG
http://pc5.2ch.net/test/read.cgi/tech/1089299158/21-33
なんかこれを思い出す
0889デフォルトの名無しさんNGNG
>>881
TListView の WindowProc で受け取りなさい。
0890デフォルトの名無しさんNGNG
>>888
「ありがとうございます。」ってついてるね。これがあるだけでずいぶん雰囲気が変わる
0891デフォルトの名無しさんNGNG
超神だの鬼神だのやりすぎだと思うがw
0892デフォルトの名無しさんNGNG
>>889
ありがとうござまいす。
0893デフォルトの名無しさんNGNG
>ござまいす
>ござまいす
0894デフォルトの名無しさんNGNG
すいませんが質問です。
DBGridのセルの文字数制限をかけようとしています。
cdsの各フィールドのSIZEを指定できればうまくいきそうなんですが、
コードでcds.FieldbyName.Size に値を入れると「cdsが既に開いてるぞゴルァ!」
とエラーが出てしまいます。考え方がいけないのか別のやり方があるのであれば
おしえてくださぃ・・・

0895デフォルトの名無しさんNGNG
Delphiに「フォルダを選ぶ」のダイアログってあったっけ?
0896デフォルトの名無しさんNGNG
>>895

>>355をヘルプで調べよう。
0897デフォルトの名無しさんNGNG
>>888
神から超神に格上げされた挙句に神の申し子に格下げされたのにワラタ
語彙が尽きたんだろうな・・・
0898デフォルトの名無しさんNGNG
>>895
こんなのがあったとは知りませんでした(本でも見かけたことないし・・)
勉強になりました。ありがとう。
0899デフォルトの名無しさんNGNG
レス番間違えた・・。898は896さんへ
0900デフォルトの名無しさんNGNG
ボタンのイベントなどにコードを書いて
そのボタンを削除してもコードが残りますが
そのコードを自動で削除してくる機能はありませんか?
0901デフォルトの名無しさんNGNG
コードの中身を消せ。
beginとendの間になにも書かなければコンパイルのときに自動で消える。
0902デフォルトの名無しさんNGNG
上書き保存したときや別のイベントにコード書くときも消えるよね
0903デフォルトの名無しさんNGNG
消えるのはDelphi自身だよ
0904デフォルトの名無しさんNGNG
Delphiは永遠に不滅です
0905デフォルトの名無しさんNGNG
「永遠に不滅」って、「馬から落馬」みたいだって思わないか?
0906デフォルトの名無しさんNGNG
Delphiはあと二年間は不滅です
0907デフォルトの名無しさんNGNG
ユーザが消滅
0908デフォルトの名無しさんNGNG
メッセンジャー、アンチウィルスなどで画面の右下に
ひょこっとメッセージが出ますがあれをdelphiで作れますか?
0909デフォルトの名無しさんNGNG
バルーンのやつ?
0910デフォルトの名無しさんNGNG
DelphianWorldにコンポあるよ >バルーン
0911デフォルトの名無しさんNGNG
>>907
俺がいるよ(^^)ノシ
0912デフォルトの名無しさんNGNG
>>905
落馬するのは馬とは限らないじゃないか
0913デフォルトの名無しさんNGNG
鼻血が出血。
うんこを排便。
精液を射精。
0914デフォルトの名無しさんNGNG
TQueryでSQLのinsert intoを使おうとすると、この機能は使用できません
とか言われちゃうんですけど、使えないんですか?それとも何か設定
間違ってるんですかね?
0915デフォルトの名無しさんNGNG
ファイル名をバイト単位で取得するのはどーするの?
0916デフォルトの名無しさんNGNG
>>915
?
0917デフォルトの名無しさんNGNG
ごめん、分かんないな。自分でも良く分かってない。
あ だったら82 A0だよね。そう言う風に全角をバラしたいの。
0918914NGNG
実行させようとしているSQL文は、あるテーブルの
レコードを、主キーを書き換えてコピーするという
ものです。こんな感じ。(主キー001のレコードを
000に書き換えてコピーする場合)

INSERT INTO Table(Code,Name,Address)
SELECT '000', Name , Address
From Table
Where uCode= '001'

InsertとSelectを組み合わせて使えないとか、そういう
話ですか?SQLの文法的にはあってると思うんですけど。
0919デフォルトの名無しさんNGNG
>>917
「ファイル名」に限らないですよね。AnsiStringに代入して、普通にs[1]やs[2]でアクセス。
0920デフォルトの名無しさんNGNG
>>914
オレもそのエラー文に苦しめられたなぁ・・
丸一日(本当に一日)試行錯誤を繰り返した挙句、
いつの間にか解消してしまって、解決策はもちろん原因すらわからなかったという・・
0921デフォルトの名無しさんNGNG
>>919
ありがと。それで添え字バイト目にアクセスできるのは分かったけど、
あ を 82A0みたいに表示させる方法が解んないや(´▽`*)アハハ
0922デフォルトの名無しさんNGNG
いくらでもありそうな気がするけどな。
IntToHexとかFormatとか
0923デフォルトの名無しさんNGNG
StrByteType
0924923NGNG
あ、なんかすごく的はずれな解答した予感。
0925デフォルトの名無しさんNGNG
Delphi用メール送信コンポーネントありませんか?
0926デフォルトの名無しさんNGNG
パスワードをiniファイルに保存したいのですが
よい暗号化の方法ないでしょうか?
0927デフォルトの名無しさんNGNG
>>922-923
ありがと〜。できますた。
0928デフォルトの名無しさんNGNG
>>926
そのアプリでパスワードチェックを行うだけならMD5とかでハッシュ値に変換しとけばいいし
FTPとかのパスワード入力を自動化するんであれば内部で共通キー使って暗号化するしかない。
0929デフォルトの名無しさんNGNG
>>928
自前で暗号化しとけばいいですか?
xor演算とかでいいですか?
0930デフォルトの名無しさんNGNG
MD5ハッシュがいいと思う
0931|Д・彡 ◆A6VzDeLphI NGNG
>>908
http://www2.big.or.jp/~osamu/Delphi/browse.cgi?index=78308
0932デフォルトの名無しさんNGNG
procedure TForm1.Button1Click(Sender: TObject);
var
 Socket: TClientSocket;
begin
 Socket := TClientSocket.Create(nil);
 try
  Socket.ClientType := ctNonBlocking;
  Socket.Host := '202.239.72.116';
  Socket.Port := 80;
  Socket.Active := True;
  Socket.Active := False;
 finally
  Socket.Free;
 end;
end;

'connect'API でWindows ソケットエラー: (10049)
が出るのですけど、どうすれば接続出来ますか?
0933デフォルトの名無しさんNGNG
Socket.Address := '202.239.72.116';
で接続できました。
0934デフォルトの名無しさんNGNG
>>931
ありがとうございます。やってみます。
0935908NGNG
さっそく試してみました。
希望の動きができました。
ただ、このアニメーションしたウィンドウが消えてくれません。
OnActiveにCloseを書いてみたのですが例外エラーで落ちて
しまいます。どこで消したらいいのでしょうか?

procedure TForm2.FormCreate(Sender: TObject);
begin
self.Left := Screen.Width - self.Width;
self.Top := Screen.Height - self.Height;
AnimateWindow(handle, 500, AW_SLIDE + AW_VER_NEGATIVE);
Sleep(1000);
AnimateWindow(handle, 500, AW_HIDE + AW_VER_POSITIVE);
end;
0936デフォルトの名無しさんNGNG
至極初歩的な質問で恐縮ですが
(AA、BBともTStringList)
AA[i] := BB[i]; i := i+1;
を特定の文字がAA[i]に含まれるまで繰り返すコードと、BBの要素があるだけ繰り返すコードを教えてください
0937デフォルトの名無しさんNGNG
BB[i]に含まれるまで の誤りでした
0938908NGNG
消えました。
しかし、少し消えるときに一瞬表示されるのか
ちらついてしまいます。
もっと良い方法はないでしょうか?

procedure TForm2.FormCreate(Sender: TObject);
begin
self.Left := Screen.Width - self.Width;
self.Top := Screen.Height - self.Height;
AnimateWindow(handle, 300, AW_SLIDE + AW_VER_NEGATIVE);
Sleep(500);
AnimateWindow(handle, 300, AW_HIDE + AW_VER_POSITIVE);
close;
end;

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
action := cafree;
end;
0939デフォルトの名無しさんNGNG
>>936
VBでやったほうがいいよ
0940デフォルトの名無しさんNGNG
VBではできませんでしたよ
0941デフォルトの名無しさんNGNG
>>938
Sleep を使ってるからだと思います。
メインスレッドで Sleep を使うと止まってる間メッセージ処理ができなくなります。
タイマーの呼び出しで閉じるようにしてみてはどうですか?
0942デフォルトの名無しさんNGNG
>>936
要件の通りにコードしてみたけど、そのままだと使い物にならないと思う。

// 特定の文字が BB[i] に含まれるまで繰り返すコード
// 特定の文字が含まれる前に i が少ない方の要素数に達した時点で例外
while AnsiStrScan(PChar(BB[i]), 文字) = nil do
begin
AA[i] := BB[i];
i := i+1;
end;

// BB の要素があるだけ繰り返すコード
// AA の要素数が BB よりも少なければ i がそれに達した時点で例外
var J: Integer;
…
for J := i to BB.Count - 1 do
begin
AA[i] := BB[i];
i := i+1;
end;
0943908NGNG
>>941
完璧です。ありがとうございます。
0944908NGNG
動きは完璧なのですが、そのフォームにラベルが表示できません。
PRINTCLIENTで書けというようなことを見たのでやってみたのですが
表示されません。どこが問題なのでしょうか?

procedure TfrmMessage.AppMessage(var Msg: TMsg; var Handled: Boolean);
begin
if Msg.message = WM_PRINTCLIENT then
begin
self.Canvas.TextOut(0,0,'hello world');
Handled := True;
end;
{ 他のメッセージに対しては Handled は False のままでおかれるので,}
{ 他のハンドルが処理することが可能となる}
end;
0945908NGNG
すみません。できました。
0946デフォルトの名無しさんNGNG
ここは一人漫才のスレか?
0947|Д・彡 ◆A6VzDeLphI NGNG
Sleepの代わり

procedure SleepProcessMessages(Milliseconds: Cardinal);
var
 StartTime, NowTime: Cardinal;
begin
 StartTime := GetTickCount;
 while true do
 begin
  NowTime := GetTickCount;
  if Milliseconds <= (NowTime - StartTime) then
   Break;
  Application.ProcessMessages;
 end;
end;

ただし、連続で呼び出すと挙動がおかしくなります。
0948908NGNG
できたと思ったのですが、メインウィンドウが非アクティブの時に
描画されません。なぜでしょう?
0949908NGNG
あと、親フォームを最小化すると子フォームも一緒に最小化されてしまうのですが
最小化されないようにできないでしょうか?
0950デフォルトの名無しさんNGNG
var InSleepProcessMessages;

procedure SleepProcessMessages(Milliseconds: Cardinal);
var
 StartTime, NowTime: Cardinal;
begin
 if InSleepProcessMessages then Exit;
 InSleepProcessMessages := True;
try
 StartTime := GetTickCount;
 while true do
 begin
  NowTime := GetTickCount;
  if Milliseconds <= (NowTime - StartTime) then
   Break;
  Application.ProcessMessages;
  Windows.Sleep(1);
 end;
finally
 InSleepProcessMessages := False;
end;
end;
0951デフォルトの名無しさんNGNG
>>942
エラー リストのインデックスが範囲を超えています(1)が出ました
BBには'文字'が入った行は確実にあります・・どこがおかしいのかわかりません、助言お願いします・・・
0952デフォルトの名無しさんNGNG
>>951
まさかとは思うが、

begin
 AA.Add(BB[i]);
 i := i+1;
end;

で巧くいったりしないか?
0953デフォルトの名無しさんNGNG
>>952
ぬおおおおおお 巧くいきました。ありがとう
かなり知識不足なんで入門サイト片っ端から読んできます
0954デフォルトの名無しさんNGNG
>>948
AnimateWindow の後に次の一行を入れてみてください。
InvalidateRect(Handle, nil, False);

ラベルには TLabel を貼ってもいいし、カスタムペイントが必要なら
OnPaint イベントを使ってください。

>>949 については申し訳ないですがよくわかりません。
下手すると TForm を使ってる時点でアウトかも。
0955908NGNG
>>954
パーフェクトです。ありがとうございます。
0956デフォルトの名無しさんNGNG
>>951
AAに何も文字が入っていないなら、
リストに有効なインデックスは存在しない。
だからアクセスしようとするとEStringListError例外が発生する。


それと、>>942の、文字列中に文字があるかどうかの判定で、
BBに格納されている文字列には全く含まれていない「文字」を
指定した場合はどうなるかな?
これも「リストのインデックスが範囲を超えています」EStringListError例外が発生するんじゃない?

漏れがテストしてみたら例外が発生した。

i := 0;
while AnsiStrScan(PChar(BB[i]), 文字) = nil do begin
 AA.Add(BB[i]);
 i := i+1;
 if i >= BB.Count then Break; // 追加
end;

などとすると、とりあえずうまく行く。
0957デフォルトの名無しさんNGNG
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Delphi使いが優しくコメントを返しますが、
お礼はDelphiの布教と初心者の救済をお願いします。
0958デフォルトの名無しさんNGNG
つか、AA, BBという変数名がコードを読みにくくしてる気がする
0959デフォルトの名無しさんNGNG
あるファイルのアドレス$200から$300の部分(画像データ)を
メモリーストリームにうつすにはどうしたらいいでしょうか?
どうもよく分からないのでご教授お願いします(汗
0960デフォルトの名無しさんNGNG
TMemoryStream.LoadFromFileでファイルを開いて
$200にSeekすればいいじゃん。
0961デフォルトの名無しさんNGNG
Seekですか・・・
ちょっと調べてみます
0962デフォルトの名無しさんNGNG
いや・・なんならposition:=$200でも
0963デフォルトの名無しさんNGNG
>>959

procedure TForm1.Button1Click(Sender: TObject);
var
fromMS,toMS:TMemoryStream;
begin
fromMS := TMemoryStream.Create;
toMS := TMemoryStream.Create;
try
fromMS.LoadFromFile('C:\sample.txt');
fromMS.Position := $200;
toMS.SetSize($300-$200+1);
fromMS.Read(toMS.Memory^,$300-$200+1);
Memo1.Lines.LoadFromStream(toMS);
finally
fromMS.Free;
toMS.Free;
end;
end;
0964デフォルトの名無しさんNGNG
>963
できました
ありがとうございます!!!
くだらない質問につきあっていただいてすいませんでした
0965デフォルトの名無しさんNGNG
Delphi5Pro Win2000,Oracle7.3でデータベースにアクセスしようとしているのですが、
起動するたびに毎回パスワードの入力を求められてしまって悩んでいます。
ttp://www.eva.hi-ho.ne.jp/shinnai/Oracle7/ODBCAutoLogin.html
を参考にしてレジストリにパスワードを入れたり、
Query1.param.Add('password=abcdefgh');
などとやってみましたが、駄目でした。
データベースにアクセスする為のパスワードを記憶させる方法は無いでしょうか?
0966デフォルトの名無しさんNGNG
DirectOracleAccessを使いなされ。
0967デフォルトの名無しさんNGNG
>>966
レスありがとうございます。
純正のソフトだけでは出来ないのでしょうか?
0968デフォルトの名無しさんNGNG
>>963 は全ファイルをメモリに読んでコピーしてるのでファイルサイズが
大きいと失敗しますし、メモリが無駄かと思います。
読み出し側のストリームは TFileStream を使うことをおすすめします。

procedure TForm1.Button1Click(Sender: TObject);
var
  ToMS: TMemoryStream;
  FromFS: TFileStream;
begin
  ToMS := TMemoryStream.Create;
  try
    FromFS := TFileStream.Create('C:\sample.txt', fmOpenRead);
    try
      ToMS.SetSize($300 - $200 + 1);
      FromFS.Seek($200, soBeginning);
      FromFS.Read(ToMS.Memory^, $300 - $200 + 1);
    finally
      FromFS.Free;
    end;
    Memo1.Lines.LoadFromStream(ToMS);
  finally
    ToMS.Free;
  end;
end;
0969デフォルトの名無しさんNGNG
>ファイルサイズが大きいと失敗しますし、

ファイルの末尾を読みたいときはどうするの?
0970デフォルトの名無しさんNGNG
ああ、バッファリングされてないから無問題か。スマソ
0971デフォルトの名無しさんNGNG
>>965
TDatabaseを貼り付ける
エリアスをお望みのDBに設定。
Paramsにユーザー名とパスを入力。
0972965NGNG
>>971
ありがとうございます。やってみます。
0973デフォルトの名無しさんNGNG
新スレ立てました。

くだすれDelphi(超初心者用)その18
http://pc5.2ch.net/test/read.cgi/tech/1093996761/
0974デフォルトの名無しさんNGNG
procedure Encrypts(var Buff: PChar; Size: integer; PassWord: string);
この関数を使いたくBuffにText1.Textを渡したいのですが
どのようにわたせばいいのでしょうか?

Encrypts(PChar(Text1.Text), Length(Text1.Text), 'pass');
とやってみたのですが
変数パラメータに定数オブジェクトを渡すことはできません。
というコンパイルエラーが出てしまいます。
よろしくお願いします。
0975デフォルトの名無しさんNGNG
> var Buff: PChar;

なんで PChar が参照わたしなんだろうか? へんなの
0976デフォルトの名無しさんNGNG
> 変数パラメータに定数オブジェクトを渡すことはできません

このとおりだろな。

var
 pc:PChar;

としておいて GetMem() で適当に確保して渡せばいいんじゃないの
0977デフォルトの名無しさんNGNG
>>975
ポインタのポインタになるし、なんでだろうね。プロシージャ内で確保してるとか?
それにしても Size を設定してるし、ありえないか。
0978デフォルトの名無しさんNGNG
暗号化した戻り値があたらしい値で PChar で返ってくるとか。でも Size は var じゃないんだよなー
0979デフォルトの名無しさんNGNG
変数パラメータにはプロパティを渡すことは出来ません
var s : string;
s := Text1.Text;
Encrypts(PChar(s), Length(s), 'pass');
0980979NGNG
リロード忘れorz
0981デフォルトの名無しさんNGNG
>PassWord: string

なんだから、なぜ var PChar なのかは、戻り値が入っていそうだな var String でも
いいようなきがするが
0982デフォルトの名無しさんNGNG
ぐぐって2番目にでてきたこれだろうな
http://homepage3.nifty.com/m-and-i/tips/criptogram.htm
0983974NGNG
>>982
それです!
0984デフォルトの名無しさんNGNG
横やりかもしれんけど、DSPとかでも暗号化のunitが山ほどでてくるよ。
うまくいかなかったら、そういうの探してみるのもいいかも。
ま、フリーかどうか、商利用可かどうかとか、問題はあるのかもしれんけど。
0985974NGNG
DSPって何ですか?
0986デフォルトの名無しさんNGNG
http://community.borland.com/homepages/dsp/
使用してるDelphiバージョンのEncryptリンク参照。

Delphiのバージョンについては作者確認のバージョンなので、
Delphi5用でも、そのままか少しの手直しでDel7でも動作することもあるよん。
0987デフォルトの名無しさんNGNG
例えばテキストファイルを読み込んでソートするだけのアプリなんかでは
起動時に読み込んでおくのと、OKされて処理するときに読み込むのと どちらが良いんでしょうか
0988デフォルトの名無しさんNGNG
後者
0989デフォルトの名無しさんNGNG
早っ ありがとうございます
0990デフォルトの名無しさんNGNG
理由は先に読む込むとキャンセルしたとき無駄になることと
読み込み、ユーザー入力、本処理
よりは
ユーザー入力、読み込み、本処理
の方が読み込みと本処理が近くなるので読みやすくなる(可能性がある)から。
0991デフォルトの名無しさんNGNG
ローカル変数のboolean型の中にはデフォルトで何が入ってるのか気になっています。
Trueでもfalseでも無いという事は実験でわかったのですが、では一体何なんですか?
0992デフォルトの名無しさんNGNG
>>991
おおっ、わたしと同じことを・・

わたしの調べでは、TrueでもFalseでもない謎の値が入っていて
その値はそのときによってまちまちでしたよ。
0993デフォルトの名無しさんNGNG
ローカル変数は宣言だけでは初期化されません。だから気にしても無意味
0994デフォルトの名無しさんNGNG
>>991
Boolean に限らず明示的に初期化されない変数は、その変数を確保した場所
(メモリ、レジスタ) に元から入っていた値になるのでは?
0995デフォルトの名無しさんNGNG
False→ビット内がすべて0
True→それ以外

じゃないの?

procedure TForm1.Button1Click(Sender: TObject);
var
 Flag: Boolean;
 B: Byte;
 i: integer;
begin
 Flag := True;
 for i := 1 to 255 do begin
  B := i and $FF;
  Flag := Flag and Boolean(B);
 end;
 if Flag then MessageBox(Handle, 'Trueだったよ', 'Boolean型', MB_OK);
end;

でテストしたらメッセージボックス出るけど。

>>991
関数内で定義したローカル変数(上の例だとFlag、B、i)は、初期化されていないと考えましょう。
使うなら自分で明示的に初期化してから使わないと危険です。
0996デフォルトの名無しさんNGNG
ありがとうございました。
クトゥルーでも眠ってるのかとビクビクしてました。
0997デフォルトの名無しさんNGNG
>>995
procedure TForm1.Button1Click(Sender: TObject);
var
b: boolean;
begin
case b of
True:Button1.Caption := 'True';
False:Button1.Caption := 'False';
else
Button1.Caption := 'unknown';
end;
end;

を試してみるとTrueでもFalseでもないことがわかる。
not演算子を使ってもやっぱりunknown
0998デフォルトの名無しさんNGNG
ByteBool 型,LongBool 型,または WordBool 型の値は,順序値が非ゼロの場合に True と見なされます。Boolean が期待される状況でこれらの値が使用された場合,コンパイラは順序値が非ゼロの値を自動的に True に変換します。
0999デフォルトの名無しさんNGNG
999
1000デフォルトの名無しさんNGNG
1000
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。