1 :
毛の生えたフサギコ :
03/05/24 15:33 このスレッドは、 他のスレッドでは書き込めない超低レベル、もしくは質問者自身何が何だが 分からない質問を勇気を持って書き込むスレッドです。 Delhi使いが優しくコメントを返しますが、お礼はDelhiの布教と初心者の 救済をお願いします。
2
3 :
毛の生えたフサギコ :03/05/24 15:35
仕事には使えない。 金にならない言語NO1! Del超初心者質問スレ↓
6 :
毛の生えたフサギコ(実はブリーフ) :03/05/24 21:19
>1 Delスレが荒れていたから短期緊急避難スレとして「くだスレ」作ったんだけど、 荒れが収まったから「相談室」に戻った方がよかったんだけど・・・。 Delphiの綴りの間違いまでコピーしちゃいやん。 私もおとといDel7パーソナルを買いました。Del6プロと共存させています。 IDEのアイコンのデザインがXPライクでいやん。 2000ユーザなら違和感ありまくり。
うむ、VBしか使えない連中の方が、それを口実にしてやすく雇えるからな。 技術屋に投資するくらいなら営業に投資した方が利益につながる。 プログラマーには余計な知恵は無い方がいいんだよ。
そういう意味でDelphiは中途半端なんだな。 技術レベルも中途半端、開発者人口も少ない。 これではビジネスにはならないわな。 やっぱり趣味専用だわ。
はいはい、趣味専用ってのはわかったからさ。
無料版が無いと、趣味では使えないよね。
11 :
デフォルトの名無しさん :03/05/25 07:47
D6用のBPLをD7にインストールしたいのですが、やっぱり無理でしょうか? System32にあるBPLを「コンポーネントのインストールで」開こうとしても エラーが出ます。
dpkではなくて?
>>11 細かなアドレス差を吸収するようなトランスレータ作らないと無理でしょ。
アドレスどころか VMT の中身もまるっきし違うから無理。 無駄なことに時間を使わないように。 インストールしたいコンポーネントのソースを手に入れるか、そんなコンポは使わない。 それが Turbo-PASCAL 時代からの Borland の文化。 「オープンソース」以前からソース公開しないと生き残れなかったのだ。
15 :
デフォルトの名無しさん :03/05/25 12:57
>>15 だからどのフォントを指定したのよ?フォント名は正確に指定しないと
意味無いぞ。
>>15 lbl.lfCharSet := SHIFTJIS_CHARSET;
これを追加しなさい
待ってました、このスレッド
あら。ほんと。サンプルが時代遅れだね。 正しいフォント名(厳密にはフォントファミリ名)に @ をつけたものを lfFaceName に指定。 かつ lfCharSet を SHIFTJIS_CHARSET に指定。 ですね。 過去ログは、それがかかれた時点での情報であることを忘れずに。 メンテナンスされない過去ログは、ログがないより悪影響。
_____________ ∧,,∧ / ミ,,゜Д゜彡 < IDEの機能使ってヨシ。 ミ⊃ ミ⊃ \____________ ~ミ ミ [ツール]-[ツールの設定]でダイアログを開き ∪''∪ [追加]で、ツールプロパティダイアログを開き [タイトル] 好きな名前を付ける [プログラム] エディタのExeをフルパスで指定 [作業フォルダ] 設定しなくてよい [実行時引数] $EDNAME (EmEditorの場合、行番号も引数に渡す) /l $ROW $EDNAME ◎ ◎応用してIDEで開いているファイルのひとつ上のフォルダを開くヤツ。かなり便利。 ◎ [タイトル] 好きな名前を付ける [プログラム] エクスプローラを指定、以下のどの指定方法でもOK explorer explorer.exe C:\WINNT\explorer.exe [作業フォルダ] 設定しなくてよい [実行時引数] ■現在開いているファイルのフォルダを普通に開く $PATH($EDNAME) □現在開いているファイルのフォルダをエクスプローラで開く "/n", "/e", $PATH($EDNAME) ■プロジェクトフォルダを普通に開く $PATH($EXENAME) □プロジェクトフォルダをエクスプローラで開く "/n", "/e", $PATH($EXENAME)
22 :
デフォルトの名無しさん :03/05/25 15:53
FormStyleを変更すると、高速で一度フォームが消えるんですが、そうならないように出来ます? 具体的には、fsNormalからfsStayOnTopにする時、また、その逆の時にチラチラするんです。
くだすれレベルの回答じゃなくなってしまうが、質問がわに回答内容を想定することはできないからなぁ FormStyle を変更しない。ってのが答えかな?
で、FormStyle プロパティを変更しない代わりに、自分で管理。 fsStayOnTop にするには SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE); fsNormal に戻すコードは、自分で調べてくだされ。SetWindowPos を調べれば(日本語で)資料が出てくるから 引数を調整してごらん。HWND_TOPMOST あたりが鍵 ただし、これをやると、Form 自身の設定とずれるので、注意すること。
25 :
デフォルトの名無しさん :03/05/25 16:15
では、内部的にチラつかせなければならなかった理由をお聞かせください。 これはバグの類とは違いますか?
>>24 とても親切に、ありがとうございます。
助かります。
全部出来ました。
Delphi7のTwilightColorMapってどう使うの????
>>17 ,20
うおっ、上手くいきました!
どうもありがとうございます。
昼寝のつもりでちょっと横になったら6時間も寝てしまい
レス遅れてすいません・・・。
>>25 それはWindowsの制限なのです。
WNDCLASS構造体 を変更しなければならないようなプロパティの変更があると、
一度 窓をWindowsに返却して、 RegisterClass/CreateWindowをやり直さなければいけません。
Delphi 6 パーソナル 使ってるんだけど、 時々固まって動かなくなる。 多分パーソナルでは使えない機能を利用したからなんだろうけど 使えないなら使えないでダイアログ出すとかして欲しいな。 いきなり固まるのは・・・。
xxx.dllのxxxという関数を使うサンプルをください
33 :
デフォルトの名無しさん :03/05/26 01:45
初歩的な質問だと思うのですが、Tstringsで普通のHD上のテキストファイルなどを
開くことは出来るのですが、ネット上のソースファイルなどを開くにはどうすればいいか
教えてください。たとえば
http://i.2ch.net/2chi.html のソースをTstringsに読み込むにはどうすればいいのでしょうか。
よろしくお願いします。
34 :
デフォルトの名無しさん :03/05/26 01:47
「はじめてのObject Pascalプログラミング テクニカルマスターシリーズ 真田 薫 (著)」 ってどないですか? 知り合いがDelphi始めるのに本探しているのですが、この本比較的新しい ようなので、Amazonにもコメントがありません。 スレ違い等有りましたら、指摘お願いします。
>>二つ上 拡張子変えて読み込めばいいんじゃないか? ChangeFileExt
36 :
毛の生えたブリーフ :03/05/26 06:39
>34 自分には読みにくいと思いました。(最初から読んでいくと) 文法を最初から説明する本ではなく。Delphi&Kylixの使い方を 最初から説明する体裁の本です。ですから、文法のみを最初から(トークンからとか) 理解しようと思って1ページから読んでいくと話題があちこちに飛んで わかりにくいと思います。 ただ、標準添付の言語ガイドをもうすこし砕けた表現で説明してあるので 持っていて損はないとおもいます。
37 :
毛の生えたブリーフ :03/05/26 06:42
>34 まったくの初心者なら、ナツメ社からでている塚越氏のKylix本が いいかもしれません。Delphi入門にも使えます。
38 :
毛の生えたブリーフ :03/05/26 06:45
>34 つーか、この本は以前、技術評論社からでていた「はじめてのDelphi」と ほとんど同じ内容です。さーっと読めて概要が短時間で把握できます。
39 :
毛の生えたブリーフ :03/05/26 06:49
前スレッドで「Senderとは何か?」の話題がありましたが、 朝日コミュニケーションズ発行の「Delphiパーソナルプログラミング」(掌田氏) に少し説明があります。この本はコーディングが少しマニアックと思いますし、 用語の使い方が少し変な気がしますが、読んでいて面白かったです。 2冊目の書籍として推薦します。
40 :
デフォルトの名無しさん :03/05/26 08:06
質問です Senderって何ですか?
41 :
デフォルトの名無しさん :03/05/26 08:13
質問相談談話室スレに書いたのですが、反応がないようなので、 こちらで質問よろしいでしょうか。バージョンは6のパーソナル版つかってます。 TMediaPlayerを使って MediaPlayer.FileName := (Format('sound\\bg%.2d.mp3', [fn])); MediaPlayer.Open; MediaPlayer.Play; このようにsoundフォルダを置いて、内部のMP3ファイルを再生しようとしています。 私のパソコンでは問題なく動いたので、友達のvaioで試してもらったところ 「MMSYSTEM275指定したファイルが見つかりません」 というエラーがでて音がならなくなってしまうとのことです。 どなたか原因と解決方法が分かる方はいらっしゃるでしょうか。 なにとぞお願いいたします。
VAIOの場合も書いてあった。 「MMSYSTEM275指定したファイルが見つかりません」 でぐぐれ。
44 :
毛の生えたフサギコ :03/05/26 08:29
>40 イベントハンドラを記述するとき、パラメータとして与えるTObject型の変数。 例えば、Form1にButton1があったとして、Button1をクリックするとOnClickという イベントが発生します。このイベントに呼応するために、アプリケーション(この場合は Form1オブジェクト)はイベントハンドラを呼び出しますが、どのオブジェクトからメッセージが アプリケーションへ送られてきたかを識別するためにパラメータとして、イベントハンドラの 引数に(Sender:TObject)を記述して、具体的にはSenderにButton1のポインタが代入されます。 厳密にいうと少しおかしいです。誰か補足キボン
イベントというのは そのクラスの機能を拡張する手法の一つで その機能拡張を、そのクラス自身を拡張してではなく、相手のクラスに任せてしまおうというもの。 任された相手のクラスは、誰からイベントが送られて来たか判らないといけない。 だからイベントには送り手情報が必要となって、第一引数はたいてい Senderだ。 Senderは送り手の型の方が良いか TObjectが良いかは難しい問題だ。 Sendeを送り手の型にした場合、ボタンを押した場合もメニューで選択した場合も同じ処理をさせたい場合に 逆に困ってしまう。 だから一般的な引数の少ないイベントは Senderはクラスの総親であるTObjectにする。 だけで、引数が複雑な、そのオブジェクトにしか使われないイベントについては、そのオブジェクト型にする。
47 :
デフォルトの名無しさん :03/05/26 14:40
APIでも書けるところはAPIを使ったほうが良いんですか?
API使う場合は出来るだけラップして自分で抽象化して使うようにね
>>36 ,37,38
レスありがとうございます。
「Delphi始める」は間違いで、「プログラミング始める」でした。
ですので、Delphi/KylixのIDEの使い方も書いてる方がイイです。
>>37 当の本人が実は多少廚入っているので(^_^;;)、たぶんWindowsを
前提にした本で取っ掛かりを作った方がイイと思っています。
>>38 「はじめてのDelphi」、amazonで見てみたところ、一応好意的な
評がついてました−1人だけですが(^_^;;)
>>36 「・・・持っていて損はない・・・」
よくわかりました。
全くの初心者の、1冊目として「悪い」本ではないのがわかればOKです。
ありがとうございました。
どういうことですか?? 別のユニットファイルに書いた方がいいってことですか?
51 :
デフォルトの名無しさん :03/05/26 20:58
以下のようにTreeView1とTreeView2の2つのTTreeViewがあったとして TreeView2のNode2-3を下位ノードごとTreeView1のNode1-5の次 (コードで書くとTreeView1.Items.Add(nil, 'Node2-3')の箇所)に追加したいのですが どのようにしたらよいのでしょうか? TreeView1.Items.Assign(TreeView2.Items);だと全部変わってしまうし 一つ一つaddしてくしかないのでしょうか? TreeView1のアイテム Node1-1 ├Node1-2 │└Node1-3 ├Node1-4 Node1-5 TreeView2のアイテム Node2-1 Node2-2 Node2-3 └Node2-4 └Node2-5
ようは実行後下のようになるようにしたいのです。 どなたか知恵をおかしください。 TreeView1のアイテム Node1-1 ├Node1-2 │└Node1-3 ├Node1-4 Node1-5 Node2-3 └Node2-4 └Node2-5
>一つ一つaddしてくしかないのでしょうか? それしかない。とおもった。 move みたいな関数を一度作ってしまえばよいのではないかな?
ごめん。確かめていないけど、TTreeNode.MoveTo( コピー先, コピーモード) が使えないかな?
連続してクリックをさせるようなものを作りたいんですが、どんな命令を使えばいいですか?
>>35 拡張子をかえるというのは一度保存してから拡張子を変えて改めて
HD上から読み込むということでしょうか?
でもその一度保存するのもどうすればいいかわかりません。。ブラウザで読み込んで、
そのキャッシュをTstringsで読み込むとかならできるみたいなんですけど、
できればネット上から直接ひらくみたいな感じでやりたいのです。
>>46 ありがとうございます。早速落としてみました。
難しそうですけど何とか使えるように頑張ります。
よろしければIndyを日本語で解説しているサイトなどあれば教えていただけませんか。
もし無ければ自力でがんばってみます。とりあえずありがとうございました。
↑は33でした。
>>53 そうですか・・・
簡単な方法がないなら踏ん切りがつきました。
あきらめてゴリゴリ関数書きます。
ありがとです。
>>54 それはすでに試したのですがダメでした。。
>>33 何度見ただろう?「indyを日本語で解説してるサイトはありませんか?」って…。
多分無いんじゃないの?
wininet使うってのは?何度かdelphiスレ(どこか忘れた(藁)で勧めたけど
食いつきが悪い…。
Indyは日本語ヘルプあるってばさ。
モナジラかどこかにもIndyのことちょっと書いてあったような
63 :
デフォルトの名無しさん :03/05/27 09:39
Delphi購入しました。 独習するなら どのテキストがお奨めですか? 取りあえずスクリーン・セーバーを作って 最終的にはデータベースをなんて 考えているのですが。
Delphiパーソナルダウンロードして登録したんだけどメールこないよぅ フリーメールではダメなんですか?
>>64 ダメじゃない。Hotmailでいけたよ。
66 :
毛の生えたフサギコ :03/05/27 09:50
とりあえず、簡単な入門から、これまた簡単なデータベースまで 記述してあるのは、「基礎からのDelphi6」(三原幸一)<秀和システム>です。 一番入門本として入手しやすいでしょう。 しかし、説明が一部はしょった部分が目立ちます。4,5、6ともっていますが、 どれも中身はほとんど一緒です。データベース部分は本当に基礎的な解説が 書いているので知識ゼロ(データベースって何?)の人には重宝します。
>>63 順番が逆かも知れない
DelphiのありがたみはDBをやると良く分かる
コードを1行も書かずにデータを読み書きできるアプリを作ることも可能だよ
68 :
毛の生えたフサギコ :03/05/27 09:55
>63 最終的には海外の翻訳本に手を出すことになるでしょう。 高いけど、現在入手可能な翻訳本はハズレがないような気がします。
69 :
デフォルトの名無しさん :03/05/27 10:16
サーバーの日付、時間の取得について検索して1つ例を見つけたのですが、 戻り値をどう設定すれば良いか解かりません。また、この方法でよいのでしょうか? function GetServerTime:TDateTime; var StartupInfo : TStartupInfo; ProcessInfo : TProcessInformation; timeServer : string; begin GetStartupInfo(StartupInfo); StartupInfo.wShowWindow := SW_HIDE; timeServer := '\\サーバー名'; CreateProcess('c:\WINNT\systw32\net.exe', PChar('c:\WINNT\system32\net.exe time ' + timeServer + ' /SET /YES'),nil,nil, False,0,nil,nil,StartupInfo,ProcessInfo); while WaitForSingleObject(ProcessInfo.hProcess, 0) = WAIT_TIMEOUT do begin Application.ProcessMessages; end; end;
TMediaPlayerはActiveXを使わないでメディアを扱えるようですが、 これはどういう仕組みですか? また、RealPlayerやQuickTimeのメディアもActiveXを使わずに再生できるのですか?
>>70 QuickTimeはWindows用SDKがあるからそれ使えばActiveX無しで再生できる。
ただC前提だからそのままDelで使えるかは知らん。
>66 >67 >68 ありがとうございます。 とりあえず、週末に八重洲のブックセンターに行って来ます。
>>69 その方法でやるなら、今度は 無名パイプ 名前なしパイプ CreatePipe などで検索する必要があるでしょう。
あと /SET だと 取得すると同時に時間を同期してしまうけど、それでいいの?
>>69 Indyを使って SNTP サーバから時間を貰ってくる例;
function GetSNTP(server:string):TDateTime;
begin
with TidSNTP.Create(Self) do try
Host:=server;
Port:=123;
Result:=DateTime;
finally free;end;
end;
例:
Self.Caption:=
FormatDateTime('YY/MM/DD HH:MM:SS',GetSNTP('clock.nc.fukuoka-u.ac.jp'));
>>69 他のPCの時刻を参照するのなら作ったことある。
NetRemoteTODで検索してみそ。
ShellExecute(Handle,'OPEN',PChar(C:\something),'','',SW_SHOW); というようにパスを指定して外部アプリケーションを起動すると いっきにメモリリソースを消費してしまいます。 だいたい3M→6Mといったように跳ね上がってしまいます。 何か他にいい外部アプリケーションを起動方法や、 メモリリソースの消費を少なくできる方法を ご存じありませんか? もしご存じでしたら、どうか教えて下さい。
実行時にPopupMenuにmenu1を追加して、さらにサブメニューにmenu2を追加したいのですが、 下のやり方で実行時に「EAccessViolationクラスの例外を生成しました」 というエラーがでます。 procedure TForm1.Button1Click(Sender: TObject); var NewItem1, NewItem2, Menu1 : TMenuItem; begin NewItem1 := TMenuItem.Create(Self); NewItem1.Caption := 'Test'; NewItem1.Name := 'Menu1'; PopupMenu1.Items.Add(NewItem1); NewItem2 := TmenuItem.Create(Self); NewItem2.Caption := 'Test'; Menu1.Insert(0,NewITem2); end; 適切なやり方を教えてもらえないでしょうか。お願いします。
79 :
デフォルトの名無しさん :03/05/27 22:45
長い式の計算だと答えが合わないことがあるんですけど?
>>78 勘でレス。
> Menu1.Insert(0,NewITem2);
Menu1 って誰か設定してるのか ?
四捨五入の関数が無いなんて何かの冗談でしょうか やはりこれはDelphiの限界ですか?
どうか忘れないでレス下さい。 かなり悩んでます。
85 :
デフォルトの名無しさん :03/05/28 01:51
思わぬハケーン! いま放送大学やってるけど、Delphi使ってるよ(w
86 :
デフォルトの名無しさん :03/05/28 01:53
放送大学、火曜深夜1:15~2:00「プログラミング入門」 ってDelphiだね
一足遅かった・・・
>>77 多分 CreateProcess を使えばよいかと。google でひけば幾らでも使い方は見つかるだろう。
ただし、ShellExecute が提供する便利な部分、拡張子からアプリケーションの関連付けとか
はサポートされない。
Shell 関数は便利な分、余計なライブラリを使ってしまう。ってこと。
ただ、3M くらい気にしない。ってほうが良くないか?
見かけの数値にだまされないようにね。
すみません、質問させて下さい Delphi6でコントロールをXPStyleにする方法は わかってるのですが TActionMainMenuBarのメニューの表示を Delphi7の様なXPStyleにする方法はありますか? フリーのコンポーネントで実現できればそれが一番なのですが・・・
XPStyleがD7のウリなんだしなー OwnerDrawすれば、なんでもありだけど、フリーの日本語対応コンポなんて、あるのかなー
すみません。超くだらない質問ですが、誰か教えてください。 Button1のイベントハンドラはTForm1のメソッドとして定義されるのですが、 なぜ、TButtonからButton1を派生したとき、TButton1のメソッドとして 定義しないのですか? たまたまIDEがそんな仕様を選んでいるのですか? フォームのメソッドとして定義したほうが合理的なんですか?
>>92 Delphi式のRADではTButtonからTButton1は派生していません。
Button1はTButtonのインスタンスを示す参照です。
イベントの化わりに、TButtonからTButton1を派生してメソッドを定義する方法のRADもありえるでしょうが
その仕掛けは非常に複雑になるように思います。
すみません、もう一つ質問です。 Delphiの場合、コンストラクタ、デストラクタのメソッドは 「Create」、「Destroy」ですが、FormやForm上に配置したコンポーネントの 生成と破棄は、あらためて記述しなくてもいいようです。これらのメソッドは どこで自動的に呼び出されているのですか?
>>94 .dfmがコンパイル時にリソースに組み込まれています。
一方publishedプロパティも実行ファイルにその情報が入っています。
FormのCreate時、このdfmからpublishedプロパティを検索しては作成してゆくわけです。
>95 では、プロジェクトファイルの Application.CreateForm(TForm1, Form1); って、内部的にはコンストラクタを呼び出しているわけではないのですね。
>>96 いいえ、内部的にコンストラクタを呼んでいますよ。
ただし、コンストラクタをコンストラクではなくメソッドの格好で呼んでいるので判り難いと思います。
Pro版ならソースを追いかけてみるといいでしょう。
メモリを確保してから、 Instance.Create(Self); とメソッドの格好で呼んでいます。
Instance.Create(Self) の中で InitInheritedComponent を呼ぶと、dfmにあるコンポーネントが構築される仕掛けです
>>91 Delphi7は既にもっているので
それを素直に使うのがよいのですが
Delphi6のヘルプの使いやすさやIDEが若干Delphi7よりも軽快
なのが気に入っているので、この質問をしました
昔、海外のサイトで見かけたような気がしたのですが
昨晩からずっと検索してますが見つからない・・・
>>100 D6のヘルプが使い易いならD6のヘルプをD7にコピーすればいいじゃない。
IDEが重いのはたぶんコンポーネントを全部組み込んでるからだと思うよ。
不要なのを取り外したら?
>>97 ,98
それが「仮想コンストラクタ」です。Delphi の言語仕様上もっとも重要なもの。
103 :
デフォルトの名無しさん :03/05/28 11:59
アクティブでないアプリのコントロール(ツールボタンとか)に マウスが載ったときにポップアップヒントを表示させるには どうしたらよいのでしょうか?
>>103 定期的にタイマーでマウスを監視するとか
>>104 GetCursorPosなどで座標をとってってことですかね?
そうしたらTPointの座標からコンポーネントとかを求める関数とかってあるのでしょうか?
>アクティブでないアプリ それは任意のアプリ?あなたが作ったアプリ? >マウスが載ったときにポップアップヒントを表示させる ポップアップはアクティブではないアプリ上で? そのときの文字列はどちら/誰が保持しているの?
107 :
デフォルトの名無しさん :03/05/28 13:04
こんないいスレを落としたくない。 胸にときめくものを感じて僕はおもわず上げてみた。
>>106 >それは任意のアプリ?あなたが作ったアプリ?
自分で作ったアプリです。
>ポップアップはアクティブではないアプリ上で?
>そのときの文字列はどちら/誰が保持しているの?
はい、アクティブでないアプリ上です。
文字列はマウスカーソル下のコンポーネントがそれぞれ保持してる場合と、
Application.OnShowHintでツリービューのノードごとのTTreeNode.Dataに基づいて
それぞれヒントを出します。
>>108 procedure TApplication.ActivateHint
をコピペして
procedure TApplication.ActivateHintnotForregrand
ッて名前にして
and ForegroundTask
って部分を探してコメントアウトしてしまいなさい。
そしてタイマーで
procedure TForm1.Timer1Timer(Sender: TObject);
var CursorPos: TPoint;
begin GetCursorPos(CursorPos);
Application..ActivateHintnotForregrand(CursorPos);
end;
てやればどうだ?
>>109 レスどうもです。
これはFormsのTApplicationクラスの
procedure TApplication.ActivateHint メソッドを
まるまるコピーして、新しくand ForegroundTask を削除した
procedure TApplication.ActivateHintnotForregrand メソッドを
作成するってことですか?
また、それはどこに書けば良いのでしょうか?Forms内に書くの?
>>110 とりあえず Forms 内に書いて試して、動作がOKなら、そこから考えてみたらどう?
112 :
デフォルトの名無しさん :03/05/28 15:42
Delphiで使われている文字コードはシフトJISですよね? EUCやUnicodeを扱う(表示する)にはどうすれば良いのでしょうか
>>111 Forms 内のTApplicationのpublicに
procedure ActivateHintnotForregrand (CursorPos: TPoint);
を追加して、実相部に
procedure TApplication.ActivateHint(CursorPos: TPoint);を
まるまるコピーして
procedure TApplication.ActivateHintnotForregrand(CursorPos: TPoint);
にしてand ForegroundTask をコメントアウトして
>>109 のを
実行しようとしたのですがャ'未定義の識別子'ってでてしまう・・・
Formsに書くだけじゃだめなのでしょうか?
ところで、いままでやったことなかったのですがVCLって書き換えて良いの?
今回はテストだけど、ちょっと変更したいなって時とか。
>>113 .DPR ファイルの uses Forms でパスを指定するか
これを消して、Forms を プロジェクトに追加してから、
再構成する必要があります。
>>112 Unicode は WideString と UCS2 という意味でほぼ同一。
Shift-JIS との暗黙の変換がとても便利。
UTF8 に関しては上のほうに記述があったと思うが、専用の変換関数がある。
EUC を直接作成/変換/文字操作するライブラリは用意されていない。
Windows だからね。MultiByteTOWideString で WideString/UNICODE に変換してから
作業するほうが、遠回りのようで確実。
>>113 >VCLって書き換えて良いの?
良いです。ライブラリを変更、流用すること、そうやって作ったバイナリを配布、商用利用することが
許されています。あなたが書き換えた部分に関しては公開してもかまわない。
逆に、あなたの修正コードが入っているからといって、VCL コード丸ごと公開は不可。
他人のソースは他人の物なのだから。ここらへんは常識の範囲で。
必要に応じてどんどん書き換えていくのが吉。
あまり変えすぎると他人のコンポーネントが動かなくなるけどね。
>>114 ありがとです、やってみます。
>>116 へー知らなかったです。
でも俺みたいな素人が書き換えると
後で大変なことになりそ…
もっと勉強してからにしよう。。
>>118 ほら
var
NewItem1, NewItem2, Menu1 : TMenuItem;
って自分でローカル変数として定義してるじゃないの。
たぶん TForm1のメンバにもMenu1があってそっちを参照するつもりだったんでしょ?
>>88 >>99 レスありがとうございます。
CreateProcessで解決しました。
var
SI: TStartupInfo;
PI: TProcessInformation;
begin
GetStartupInfo(SI);
CreateProcess(nil,PChar(パス), nil , nil, false,0,nil,nil,SI,PI)
end;
>>119 FAQを見ながらやったのでごっちゃになってました。
設計時にMenu1を生成した場合だとTypeのところで宣言されますが、
後から生成したので、未定義ですと叱られたのでその場しのぎ的に書いたものでした。
まだDelphi始めたばかりで、変数を定義する場所がよく分からず、適当に決めてるんですけど
この場合はTypeで宣言しないといけませんか?
自分なりに調べてみてポインタとやらが関係しているとおもったのですが、
とりあえず宣言場所変えてやってみます。
というか ×Menu1.Insert(0,NewITem2); ○NewItem1 .Insert(0,NewITem2); としたかったんじゃないのか?
>>122 そうです。今やってみたら出来ました。
宣言場所やらポインタなんかは関係なかったですね。
変なミスに付き合わせてほんとすみません。
>>59-62 よく調べずに質問してしまったためindyのヘルプがあることを知らずに
質問してしまいました。どうもすいません。
何とかネット上から直接ソースを開けるようになりました。
遅くなりましたがヘルプの場所まで張っていただいてどうもありがとうございました。
前スレとかで見たIndyのインスト方法が変わってるんだな。 exeファイルじゃなくなってるし。一瞬手動かとおもた。
126 :
デフォルトの名無しさん :03/05/29 13:19
変数をたくさん作ったら、実行速度が速くなるですか? メモリをたくさん使ったほうが実行速度が早くなるんですか? 省メモリ設計だと実行速度を犠牲にしてるということですか?
127 :
デフォルトの名無しさん :03/05/29 14:15
jconvert.pasの作者のページがなくなってるんですけど もう使えないんでしょうか? 文字コード変換の定番ソースコードってjconvert.pas以外に何かありますか?
128 :
デフォルトの名無しさん :03/05/29 14:21
文字列の比較のやり方を教えて下さい。 例えば s1 := 'abc'; s2 := '123abc456'; if compstr(s1,s2) then begin//s2にs1の内容が含まれていれば通る //処理 end; のような事が出来るcompstr関数はありませんか?
>>129 そんな関数があったんですね。
なんとかやりたかった事が出来そうです。
ありがとうございました。
132 :
デフォルトの名無しさん :03/05/29 14:40
>>129 えっと、そこのはもうすでにリンク切れなんで質問したんですけど?
135 :
デフォルトの名無しさん :03/05/29 14:44
jconvert以外にありませんか? 作者のページが消滅してしまっているんで きちんと作者が公開しているソースがあると 安心なんですが・・・
お礼もなしに次の質問か ブチ殺すぞ
(((((((( ;゚Д゚)))))))ガクガクブルブルガタガタブルガタガクガクガクガクガク
,,----、,,,,,,,,,、、 / ,,-‐―、ヽヽヽヽ 〔/ ))))ヾヽヽ /.,,,,、、 ,ヽξ\Ξ/ / ==/ .,==- レi! 〔、 ,(_,、ノ( "",,ノ:: 6) 2chを代表する美形固定のヲレサマになにか用か?(@w荒 λ:" ‐=‐^ン ...::::: |/ λ:::::. .::.. ::...::::::/ λ \::::::::::::::// . λ、  ̄| ̄ /~~ ̄⌒\
〆るぞコラ
〆鯖まいうー
あっ、あの、しっ、しつもん、して、いいですか?(ガクガクブルブル
お前はもう質問している
144 :
デフォルトの名無しさん :03/05/29 16:37
hello.txtというテキストファイルに、 このテキストファイルを画面上開かずに orldと書き込んで保存する
方法を教えてください
いくらくれる?
100モナーでおねがいします
ブチ殺すぞ!ゴルァ!
if 100モナー = \0 then
>>144 .ブチ殺す;
D7でXPManifestコンポーネントを使用した時のように D6でもStatusBarをXPスタイルに適応させたいのですが、どうしたらいいでしょうか? manifestファイルを置いてもStatusBarだけ対応してくれません
すいません。 DELPHIでVCLのソースコードを ステップ実行することはできるのでしょうか?
154 :
デフォルトの名無しさん :03/05/29 17:33
外部エディタ使えないの?
>>152 XPスタイルに対応したコンポーネントを使うしかない
>>144 procedure TForm1.FormCreate(Sender: TObject);
var
F: TextFile;
begin
AssignFile(F, 'c:\hello.txt');
Rewrite(F);
Writeln(F, 'world');
CloseFile(F);
end;
159 :
デフォルトの名無しさん :03/05/29 18:41
ソースでDLLの宣言してるんだがUnitで使う時はまたUnitごとに書かないといけないのかの?
>>159 書きたくなければ external 宣言した ユニットのinterface節で公開すればいい
162 :
デフォルトの名無しさん :03/05/29 22:21
メモリ使用量5000Kを切れる兵はいないの?
D6パーソナル 経験2ヶ月弱です。 --------{unit1.pas} procedure TForm1.Button1Click(Sender: TObject); begin TForm2.Create(self); end; --------{unit2.pas} procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction); begin ShowMessage('Form2を閉じます') ; Action:=caFree; end; --------- Form2を表示させた状態でForm1(プログラム) を終了させた場合に、Form2が表示されていることを チェックして、表示していた場合 Form2の OnClose イベントを 実行させるためにはどうすればいいのでしょうか? またForm2を表示させたままForm1(プログラム)を終了させた場合ちゃんとFREE しているのでしょうか?
>>163 TForm2を変数に入れた良いと思うが一応これで。
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
I: Integer;
begin
I:=0;
while I<ComponentCount do
begin
if Components[I] is TForm2 then
begin
if TForm(Components[I]).Visible then
TForm(Components[I]).Close;
end;
Inc(I);
end;
end;
> またForm2を表示させたままForm1(プログラム)を終了させた場合ちゃんとFREEしているのでしょうか?
Freeされます。
ありがとうございました。
166 :
デフォルトの名無しさん :03/05/30 02:21
2ch なんだからお礼はいらんよ。お礼でスレッドが埋まるのはデメリット きちがいの妄言は無視無視。
168 :
デフォルトの名無しさん :03/05/30 03:18
>>167 すばらしいお言葉ありがとうございました。
>>167 貴方のレスのおかげでスレが3レス分無駄になりました。
>>169 貴方がレスしなければ2レス分ですんだのにね。
173 :
デフォルトの名無しさん :03/05/30 10:15
174 :
デフォルトの名無しさん :03/05/30 11:46
TEditで、数値を入力すれば自動的に 「\1,000」と表示されるようにするにはどうすれば良いですか? 今は別に変数(value)を用意して OnKeyDownで value := 数字抽出関数(TEdit(sender).text); TEdit(sender).text := formatfloat('\#,##0',Value); とやっているのですがカーソルが左に移動してしまい、1,2,3と入力したら 「321」と表示されてしまいます。 宜しくお願いします。
175 :
デフォルトの名無しさん :03/05/30 11:51
突然失礼します。質問なんですがネットゲームでみんなが「マクロ」って言ってるんですが、それはなんですかー?
176 :
デフォルトの名無しさん :03/05/30 11:58
>>174 TEditを上位クラスに設定して、カスタムコンポーネントを作ればいい
そんなに難しくはないよ
>>177 レス、ありがとうございます。
それしかないですか?(^^;
>>178 そういわずにやってみ
思ったより簡単だぞ
>> 174 TMaskEdit を使ってみるのはどうかな?と。
181 :
デフォルトの名無しさん :03/05/30 15:02
呼び出したDLLの中で呼び出し元のアプリをクローズはできるんですが、 クローズ後のDLL内の処理で、呼び出し元のファイルを書き換えようとしても出来ません。 DLL内での処理が終わり、アプリに戻った時点でクローズされてるって事ですか? だからファイルを掴んだままなのでしょうか?
>>179 コンポーネントはいくつか作った事があるのですが、
何かと面倒なんです。
(プロジェクトメンバー全員にインストールしてもらう必要があるとか)
>>180 TMaskEditの使い方を調べてみたのですが、
どうやれば
>>174 が出来るのか分かりませんでした。
あぁ
>>174 では、「数値を入力」でおそらく「数値で出力」を想定しているのか。
数値と文字列の相互変換は省略。
TMaskEdit の EditMask プロパティを '\\9,999;0; ' に。
これで text プロパティに文字列 '1234' を書き込むと \1,234 と表示される。
編集後の値は同じく text プロパティを読めば、\ と , が取り除かれた文字列として
手に入る。
\ や , が入った、表示されているものと同じ文字列は EditText プロパティで。
>>181 Windows のバージョンで動作が変わるので気をつけて。
>呼び出したDLLの中で呼び出し元のアプリをクローズはできるんですが、
どうやって「クローズ」してるのかな?
アプリケーションとそれが自動的に読み込む DLL の羅列は WIndows のローダーが管理していますから
勝手に開放(クローズ)できません。排他読み込みをおこなっているはずなので
削除は不可能。
開いているファイルハンドルを強制開放する API があったような気がするが。 シャットダウンとかの時に使うものだからあまりお勧めはしない。 MSDN を漁ってみること。
>>183 丁寧な説明ありがとうございます。
試してみたのですが、この方法だと入力する前に
\_,___
と表示されてしまいます。
これを消す事は出来ますか?
188 :
デフォルトの名無しさん :03/05/30 18:39
今日delphi7を買ってきました。 2ch回覧ツールとかを1から作れるようになるような それぐらいの実力がつくお勧めのインターネット教えてください。 プログラムはやったこと無いですがやる気はあります。
まずはOpenJaneのソースでも解析する事だな。
ネタか知らんけどインターネットの使い方間違ってるよ
とりあえず
>>4 の初心者向けのサイトでもまわっておいで
>>188 いきなりJane読むのはしんどいかもしれないから
簡単なカレンダーとかメモ帳とかメールチェッカーを
練習として作ってから挑戦したら?
嫌です
188≠192
194 :
デフォルトの名無しさん :03/05/30 20:37
ありがとうございます。 さっそく190さんのところで時計が作れました。 OPENJaneっていうソースを見てみたのですが、 ファイルがいっぱいあってこれがコンポーネントという物だと思いますが。
もっと良いインターネットを教えてください。
これから インターネット≒ホームページ となりました。
ここは酷いインターネットですね
ホームページ⊂インターネット
♀ホームページ⊂♂インターネット
200 :
デフォルトの名無しさん :03/05/30 23:34
インターネットやってます
(´-`)。o ○ (「面倒なこと」がイヤなら、プログラミングなんてや(略))
楽をする事を考えないプログラマーは糞です 手を抜くことを考えるプログラマはそれ以上に糞。
インターネットを配布したいのでうpろだ教えてください
204 :
デフォルトの名無しさん :03/05/31 04:10
オブジェクトインスペクタで設定するのと、 自分でユニットファイルに書き込むのとではどちらがいいのでしょうか?
>>204 どちらかが良い場合もそれぞれあるので、どちらでも可能になってるのでしょう。
D6からは、TFORMがテキストなので、テキスト保存の問題も、ほぼなくなりました。
まぁ、オブジェクトインスペクタ無しにDelphiは語れないかもです。
>>202 「楽をする事」の定義をちゃんとしないと揉める元だぞ。
>>204 自分だけで作る場合は、オブジェクトインスペクタで楽していいと思います。
共同開発の場合は、仕様書にオブジェクトインスペクタの値を書いておくことになるでしょう。
ユニットに直に書くのは、明示的にプロパティを書いておきたい、などの理由がない限りしなくていいと思います。
208 :
デフォルトの名無しさん :03/05/31 11:01
try~except間でテキストデータを大量に外部から読み込んで、StrToIntなどで 型を変換してから変数に格納しています。このとき、もし誤った値(型変換できない)が入ってきたら 判別できるようにしたいのですが、try節でミスが発生したというのはわかっても どこで発生したか?というのがわかりません・・・。上手い方法はありませんか?
exceptでエラー文字列を取れるんじゃあないかい? それらが同じ種類のエラー文字列なら、今何処理中、みたいなのをStringに保持しとけ。
>>209 tryって例外があったら中断されるんですよね?
それなら、頭から順に今何を読んでいるのかを保持するようにしてみます。サンクス!
そうだね。StrToIntを直接使わずに function MyStrToText(const FldName:string ; str:string):Integer; begin try Result:=StrToInt(str); except on E:Exception; で FldNameと組み合わせたメッセージを追加して例外をもう一度投げる end; end; ってやればいいと思うよ
おぉデキタ! (゚∀゚) アリガトー!
>>208 try節をネストすれば良いだけの事
SL := TStringList.Create;
try
try
SL.LoadFromFile('D:\DATAFILE.DAT');
for I:=0 to SL.Count -1 do
begin
try
ConvertValue( StrToInt(SL[I]) );
except
PutError('変換エラー:'+IntToStr(I)+'行');
end;
end;
except;
PutError('致命的エラー発生');
end;
finally
SL.Free;
end;
SL := TStringList.Create; try try SL.LoadFromFile('D:\DATAFILE.DAT'); for I:=0 to SL.Count -1 do begin try SetValue( StrToInt(SL[I]) ); except PutError(IntToStr(I)+'行は変換できませんでした'); end; end; except; PutError('致命的エラー発生'); end; finally SL.Free; end;
>>214 なるほど、そういう手も・・・(つД`)アリガト
216 :
デフォルトの名無しさん :03/05/31 12:54
アプリを起動してからFormのAlphaBlendを 変更すると画面がちらついてしまうのですが これをちらつかせない方法などありましたら教えてください。
アルファブレンドがかかってると、両方が描画するわけで、 それをアプリ側で制御するのは無理
218 :
デフォルトの名無しさん :03/05/31 13:37
どういう事情で何処が悪いのか解からないけど、たまにファイルが壊れているのは何故? 極簡単な動作実験用とか作った時でもなる時あって、 バグ取り中に何度もコンパイルとかしてると急に今まで通り動かなくなり、 コードをコピペして全く同じ内容で新たに作るとまともに動作する。 さっき出た症状ではApplication.Handleを参照しても常に0ってのになった。 Delphiから実行時にアプリ終了してもCPU画面が出てもう一度実行ボタンを 押さないと終了しないのもどこかおかしいんだろうか?
>>218 Win98?
OS と Delphi のバージョン名くらいは教えてください。
>>216 使っているマシンの CPU の種類とクロック速度、
使っているビデオカードの名前。
ビデオカードの種類とドライバのバージョンによっては、ソフトウェア描画に
なるから、とっても遅くなるぞ。
>>220 w2k sp3
D5のupdate済み
いま、既にあるアプリでApplication.Handle取得のテストしてみたら、0だった・・・
223 :
デフォルトの名無しさん :03/05/31 14:27
メモリーアドレスを参照するにはどうしたらいいです?
ちなみにCPU画面はファイルの保存場所を変えて実行すると出なかったりする。 なんでだろ~なんでだろ~♪
>>219 del居れ直しならまだしもOSからはつらいな。
今のような快適設定にレジストリ変更する自身が無い。
AnimateWindow(Handle, 2000, AW_BLEND or AW_HIDE); Hide; でできないか?
ごめん。いっしょに使うなって書いてるな。
猫には書いてるけど、MSDNには書いてないような…
>>224 Delphi5 だから。という話かなぁ。
CPU ウィンドウが開かなくなる。ってのは聞いたこと無いし
>>223 (PByte($12345678)) := $12;
(Pword($12345678)) := $1234;
てな感じでどうかな?他にもいろいろやり方あり。
Application.Handle0になる発生条件がちょっとだけわかった。 オプションで「実行時パッケージを使って構築」 をチェックすると0になるアプリがあるみたいだ。 ただ、テスト用に簡単に作った奴はその限りではない・・・つらい・・・。・゚・(ノД`)・゚・。
>>230 開かなくなるのではなくて開いてしまうんだよ
>>232 うーん。みてみたいよ。あんたの環境。
・*.bpl が変なディレクトリに落ちている
・日本語を含むパス名を常用している。
どちらか、心当たりないかな?
ちょっと「くだすれ」っぽくなくなってきてしまったが、どうしましょ。
>>226 猫が間違ってるっぽい。
「AW_HIDEとは併用できません。」は、AW_ACTIVATEの説明に入るはず。
>Delphiから実行時にアプリ終了してもCPU画面が出てもう一度実行ボタンを >押さないと終了しない これかぁ。勝手に出る CPU 画面、どこで止まっています? 画像写真、どこかうpろだに置けませんかね?
>>238 いや、やってみてちゃんとフェードアウトしたけど、
駄目って書かれてるから、ちょっと気になったもんで。
>>234 どちらも普通みたいです。こうなったら仕方ないので
別のHDDに非常用OS入ってるので、まっさらなdelphi入れて試します。
また報告します。
猫より MSDN MSDN より実際の動き
242 :
デフォルトの名無しさん :03/05/31 15:30
そういえばインストールの時にSQLとかINTERBASEとかはなんなんでしょう?
>240 うむ。もったいない。 バグが出ている環境は貴重なんで、できれば原因をつかみたかったが。 再インストールで問題が出なくなることを祈ります
実際の動きよりMSDN
>>245 それに何年裏切られつづけてきたか....
へー
>>244 言葉自体は知っていますがプログラムでどのような働きをするのかは知りません。さっさと教えなさい。
>>218 とりあえず、
今あるDelphiのフォルダをリネームしておいてDelphiを再インストールして比べてみろ
それから
--------- ここから -------
del *.tds
del *.~*
del *.dsk
del *.dof
del *.dsm
del *.dcu
----------- ここまで -------
をバッチファイルにして、あちこちのプロジェクトの不要ファイルを消して回れ
う。 その画面の状態で、F7 押して。 ret の次に DebugBreak を呼び出しているモジュールの位置がわかる。 そこが鍵だ!
>>227 >>236 >>238 ほんとだ…
AnimateWindow(Handle, 2000, AW_HIDE or AW_BLEND);
hide;
上のコードでちゃんとフェードアウトする。。
何事も実際やってみないとだめっすねえ、、
ありがとうございました。
いちおう書いておきます。
DbgBreakPint で止まっています。これはブレークポイントのようなものにぶつかったことを
意味します。
IDE のデバッガの誤動作。ということも否定しませんが、良くあるのはビデオドライバにデバッグ用として
残してあったブレークポイントに引っかかった。というやつ。
>>250 さんの場合、止まったり止まらなかったりする。ということなのでビデオドライバでは
なさそうですが。
249 さんの方法も意味あるかも。
某社サポートが常駐する板はここですか?
NT OS 側のメモリマネージャーの中でアサートが出て、それを IDE のデバッガが拾っているようだね。
>>249 ,253
不要ファイルを消すのってなにか意味があるのですか?
>>257 ありがとう。しかし掲示板ではちょっと無理か。隔靴掻痒。
どこかメモリを壊していて、それがアプリケーション終了時、OS のメモリ開放中に
検出されているのではないかと考えます。
ターゲットアプリケーションの終了処理部分を1ステップずつ追っていけば問題点に
到達できますが、それはかなり面倒(かつ経験が必要)です。
もし、再インストール相当をおこなえるのならそちらの方法で回避してください。
力になれず、ごめんなさい。
>>247 デバッグしてるうちにこれら中間ファイルが壊れたりしてしまうと
色々と不都合が出来てしまいます。
ですんで、終了時におかしくなったり、コンパイルで変な事が起きたりするようになったら
まず、あのあたりのファイルを全部消すと直る率が高いです。
特に複数のバージョンで開いたりコンパイルしたい場合には、その前にやっておく習慣付けた方がいいです。
>>261 気悪くしないでね。正当なシリアル使ってる?
>>262 使ってます。一時期サポートかなんかもあったような。期限切れましたが。
265 :
デフォルトの名無しさん :03/05/31 18:10
TIniFileとTMemIniFileはどういう使い分けをすればいいんですか?
常にTMemIniFileで。
質問です。TEditやTComboboxに入力された値が空だったらエラーを出したいのですが、 function TForm1.CheckEditValue(AWinControl: TWinControl): boolean; begin if AWinControl.Text = '' then begin ShowMessage('空欄にはできません。'); AWinControl.SetFocus; Result := False; end else Result := True; end; という関数を作って、 if not CheckEditValue(Edit1) then Exit; if not CheckEditValue(ComboBox1) then Exit; のように使いたいのですが、上の関数で、「AWinControl.Text」のところで止まってしまいます。 どうやらスコープがprotectedなのが原因みたいです。 TextとSetFocusを1つのクラスから使えて便利だと思ってたのですが、無理なのでしょうか?
RadioButtonのCaptionの部分の背景は透明なのに、 CheckBoxの方は透明ではなく、しかも透明にすることが出来ないのは仕様ですか?
TWinControlにTextはないから無理。 TypInfo.pasのGetTypeDataとかGetPropInfosとかSet*Propとか使えば 文字列からプロパティにアクセスできるんだけどそれでいいのかどうか。
>>269 TIniFileは
・遅い
・64KB(たしか)制限有り
で良いことない。
CheckBoxのCaption部分だけ透明にできないので、XPスタイルにするとそこだけ色が違うということになる。 全く迷惑な話だ(`Д´)ノ
裏に絵でも貼ってるの?
Thank you and good-bye, see you next time!
>>267 です。
TControlからGetTextBufメソッドが利用できたので、それを使用して解決しました。
>>274 XPスタイルにしたらTabControlが白っぽくなるでしょ?
あの時も灰色のまなののよ。
最初からあの色にしておくとクラシックスタイルにしたときにそこだけ白っぽくなってるのも嫌だし。
CheckBoxはTabControlの上で使われることって少なくないと思うんだけど。
いかがなもんでしょうかと。>某
いかがなものかと言ってますよ>某 143 名前:host143186050154.borland.com 投稿日:03/05/30 14:43 試して見よう。
CheckBox作った人は気の利かない人で、 RadioButtonを作った人は気の利く人ってことでFA?
Del7だけど普通に透明だな。 というか色の変更が出来ないな。
Borlandから2ちゃんねるやるなよ
日本ボーランドの回線もcomドメインなのか
283 :
デフォルトの名無しさん :03/05/31 19:22
DELPHI、NETはDELPHIの純粋な後継なのでしょうか?? それとも、今のDELPHIとは別モノですか?
Del7を買ったらBorlandの策略にハマったみたいで嫌なんです
じゃあ、DELPHI8,9,10は無いということですね。 DELPHI.NDT 2,3,4となっていくわけですね。
> whois 143.186.50.154 OrgName: Borland International OrgID: BORLAN Address: 1800 Greem Hills Rd City: Scotts Valley StateProv: CA PostalCode: 95066 Country: US NetRange: 143.186.0.0 - 143.186.255.255 CIDR: 143.186.0.0/16 NetName: BORLAND NetHandle: NET-143-186-0-0-1 Parent: NET-143-0-0-0-0 NetType: Direct Assignment NameServer: NS.BORLAND.COM NameServer: NS1.BORLAND.COM Comment: RegDate: 1990-10-01 Updated: 2001-03-13 TechHandle: ZB64-ARIN TechName: Borland Software Corporation TechPhone: +1-831-431-1000 TechEmail: noc@borland.com # ARIN WHOIS database, last updated 2003-05-30 21:05 # Enter ? for additional hints on searching ARIN's WHOIS database. >
ファイルの拡張子を取得するいい方法ってありませんか。 「 . 」の位置で割り出すと色々不都合が有りそうだし…
ある文字列変数の中身がファイルなのかフォルダなのかを判別する方法はありまするか?
GetFileAttr
FileGetAttr
AttrGetFile
FileExists、DirectoryExists等もあります。
Get Along Together
298 :
デフォルトの名無しさん :03/06/01 03:05
DelphiでDLLを使うにはどうすればいいのですか?
タダじゃ教えられないぬるぽ
では100円払いますので振込先を教えてください。
税込みで105円です。
>>298 ヘルプで
external 宣言
動的にロード可能なライブラリの呼び出し
動的ロード
などを読んでゆくとよいです
>>298 Windows.pas は Personal にもついていなかったけ?
あれは丸ごと Windows の DLL を使うための定義ファイルだぞ。
>>287 げっ!!
>Address: 1800 Greem Hills Rd
古いままじゃん。
305 :
デフォルトの名無しさん :03/06/01 11:01
ある文字が何番目にあるか調べるプログラム組みたいんですが、どうしたらよい ですか?僕にはサッパリです。
307 :
デフォルトの名無しさん :03/06/01 11:15
データ構造? var Moji: ShortString; begin Moji := ABC,DEF ↑の","が何番目にあるのか数値で返したいのです。
>>307 VCLリファレンス > ルーチン一覧(カテゴリ別) > 文字列処理ルーチン
pos ansipos でヘルプを見て下さい。 それから、わざわざShortStringを何故使うのでしょ?
310 :
デフォルトの名無しさん :03/06/01 11:19
文字列処理ルーチンのなんてやつですか?
311 :
デフォルトの名無しさん :03/06/01 11:19
ShortStringじゃなくてもOKです。
312 :
デフォルトの名無しさん :03/06/01 11:21
ansiposですか?
まず、ヘルプを読め。 けして評判が良いヘルプではないが、あなたの知識が分からない以上、 最低限度の共通の語彙を仮定しないと説明するのも日が暮れる。
判らないならこうやっとけ var var Moji: ShortString; i,n:Integer; begin Moji := 'ABC,DEF '; n:=0; for i:=1 to Length(Moji) do if Moji[i]=',' then begin n:=i;break;end; if n>0 then ShowMessage('カンマが'+IntToStr(n)+'番目にありました');
315 :
デフォルトの名無しさん :03/06/01 11:34
Moji[i]・・・こんなこと出きるんですか。 勉強になりました。有難うございます。
これでは遅すぎると怒られますよ。
var Moji:String; FoundPos:Integer; begin Moji := 'ABC,DEF '; FoundPos := Pos(',',Moji); if FoundPos >0 then ShowMessage(Format('カンマが%d番目にありました',[FoundPos]) else ShowMessage('カンマが何処にもない'); end;
>>316 ん?処理時間のオーダーも大差ないと思うけど?
MDIアプリを作るとMainMenuの右上に子ウィンドウの__□×ボタンが出ますよね。 TMainMenuでなくTActionMainMenuBarを使う場合にこの動作をさせるにはどうすればいいんでしょう?
320 :
デフォルトの名無しさん :03/06/01 23:48
DELPHI6のパーソナル版、タダなんで試してみたいけど、うちXPなんだよな。 インストールまではできるようだけど、はたしてどこまで動くのか。 これだけのためにMeとのデュアルブートってのもあほらしいし。 誰かXPで試したツワモノいる?
ドコガツワモノダヨ
var Moji,Moji2,kotae,kotae2:string; l,i,c:integer; begin Moji :='ABC,DEF'; l:=length(Moji); i:=0; Moji2:=''; while true do begin Moji2:=copy(Moji,i,1); if Moji2=',' then break; inc(i); if i>l then break; end; c:=i; kotae:=inttostr(c); kotae2:='も…も… もしかしたら… '+kotae+'番目に… あ、あ、あ、あるかかなななぁ…?'; ShowMessage(kotae2);
end;
>>320 とりあえず、インストールして、アップデートして、ML検索で「大野」氏のメールを検索。
当方、XPでDEL6PER使ってるツワモノにございます
326 :
デフォルトの名無しさん :03/06/02 03:55
if ParamStr(1) = '/w' then コマンドラインの取得ってこんな感じでいいんですか?
解決しました
>>324 大野タンのメールって... テキストサービスの話かな?
VS.NET でも同じ問題を持っていたのだけど、VS.2003 では直ったのかな?
Delphiのニュースグループって人が居ないばかりか評判落ちそうな投稿は消されるよな。 つかえねぇ
>>329 あんたのニュースリーダーの設定が、古い物は削除。になっているからだよ。
開設時からのすべての記録が残っているぞ
331 :
デフォルトの名無しさん :03/06/02 09:12
ODBC接続ばかり使ってましたが、dbExpressの方が新しいようですね。 で、dbExpressを使うための条件はODBCと比較して何になるのでしょう? 例えば、ODBC接続(つまりBDE)の場合は、RDBがWin/Linux用にODBCドライバを用意していることになりますよね。 dbExpressの場合は、某島がRDB用のdbExpressドライバ(?)を用意している場合のみになるのでしょうか?
332 :
動画直リン :03/06/02 09:13
「高性能なネイティブSQL RDBMSアクセス」で、 RDB名指定だったのでやっぱ、某島が直接対応してるわけですね。 Interbase用が無いのは、IBQueryで十分ということでしょうか?
335 :
デフォルトの名無しさん :03/06/02 09:57
QuickrReportで縦書きテキストを印刷する方法ってないですか?
>>333 しまったしまった。これはテキストマネージャとは関係ない話だ。
吐駄チャンとかが、理解せずにコメントつけてるから...
これは ActiveIME とデバッグサービスの相性問題だ。
プロセス終了中に COM 初期化が起きる。
>>331 それはどの種類のデータベースを使うかによるのでは?ナニ使ってんの?
>>335 無い。こんな関数を使ってごまかして表示させた。
//疑似縦書き表示文字列に変換する(固定幅フォントを使用しないとずれる)
function VertWrite(Source: String; LineLength: Integer): String;
var
WStr:WideString; SWord:String;
I,J,Ptr,Len:Integer;
SL:TStringList;
begin
WStr :=Source;
SL := TStringList.Create;
try
for I:=0 to LineLength-1 do SL.Add('');
Len := Length(WStr);
for J:=0 to (Len div LineLength) do
for I:=0 to LineLength-1 do
begin
Ptr := (J*LineLength+(I+1));
if Ptr <= Len then
begin
SWord := WStr[Ptr];
if CharLength(SWord,1)=1 then SWord := ' '+SWord;
SL[I] := SWord + SL[I];
end
else SL[I] := ' ' + SL[I];
end;
Result := SL.Text;
finally
SL.Free;
end;
end;
>>337 Firebird。
IBQueryが良いのか、dbExpressが良いのか。
MySQLをODBCで試したけど、イマイチ。
でも、dbExpressがあることが今日分かった。
MySQLに2万件BLOB入れて、Database Explorerでデータを見るとフリーズ。
dbExpress Explorerってのはあるのかな?
自分のBCB6には付いてない。
thanx!
>>340 dbExplorerが一番よさげなのが分かりました。
ちょっと、一貫性無くてやだなー、ってのが、Database ExplorerがODBCのみで。
これじゃ、MySQLにデータ書けても何万件になったとき中身確認デキナイよ。
342 :
デフォルトの名無しさん :03/06/02 11:19
>>341 データ見るだけのアプリなら小1時間もあれば楽に作れるでしょ(多分、数分)
>>343 同じDBを参照する関連のプロジェクトが他にもあって、
テーブルも違うし、自分だけが見れても駄目だしー。
出席(・∀・)イイ !
347 :
デフォルトの名無しさん :03/06/02 15:00
変数Hensuは初期化されない場合があります。 ってどうやって回避すればいいんですか?
>>347 DelはVBのように変数宣言しても、自動で0入れたりして初期化してはくれない(例外もある)
よってその変数を使う前に初期値を代入しる
350 :
デフォルトの名無しさん :03/06/02 15:19
出席(・∀・)イイ ! ワラタ 福島工業高等専門学校は低脳の集まりか
土曜に
>>218 あたりから質問してた者なんですが、
別のOSの方ではCPU画面は出なくなったようです。
しかし、別のOSのDelphiフォルダを現在使用の方へ持って来たら発生します。
「Application Handleが0になる」の発生条件ですが、
自作DLLの方と呼び出し元アプリの両方の
「実行時パッケージを使って構築」をチェックすると0になるようです。
どちらかチェックなら取得できます。
何故か解からんがチェック出来ないとファイルがでかくなる・・・
そんなもんなんでしょうかね?
352 :
デフォルトの名無しさん :03/06/02 15:32
あの~ これから del厨になろうかと 思ってるのですが 超怒級初心者向けのなにか本はありませんか?
>342 俺は、サブクラス化してこんな感じにメッセージをすり替えたりとかしてやってる。 前に書いたコードを適当に抜き出したから、どこか間違ってるかも。 procedure THoge.TreeViewNewWndProc(var Message: TMessage); var M: TMessage; begin if (Message.Msg = TVM_SELECTITEM) and (Message.WParam = TVGN_DROPHILITE) and (ドラッグ中) then begin if 棒線を出したい then begin if 上に出したい then begin Message.Msg := TVM_SETINSERTMARK; Message.WParam := integer(False); end else if 下に出したい then begin Message.Msg := TVM_SETINSERTMARK; Message.WParam := integer(True); end; end; case Message.Msg of TVM_SELECTITEM: PostMessage(TreeView.Handle,TVM_SETINSERTMARK,0,0); TVM_SETINSERTMARK: begin M.Msg := TVM_SELECTITEM; M.WParam := TVGN_DROPHILITE; M.LParam := 0; TreeViewOldWndProc(M); end; end; end; TreeViewOldWndProc(Message); end;
ヘルプファイル
FAT に傷がぁぁぁぁぁ!
YOU IS FATMAN
>>353 ありがとうございます。助かります。
さっそく今から解析して自分のにも試してみます。
また分からないことがあったら質問させてください。
359 :
デフォルトの名無しさん :03/06/02 18:47
業務用に販売するソフトのDBにパラドックスを使うのは 問題なしですか? それともInterBaseやオラクルとかにした方が良いんですか?
361 :
オイお前ら :03/06/02 18:58
10msec って何分の1秒になるのですか 教えてケロ
1mmは1000分の1m 1mlは1000分の1l
363 :
デフォルトの名無しさん :03/06/02 19:01
ミリセコンドだろ? 普通に1/1000(sec)じゃないの
364 :
デフォルトの名無しさん :03/06/02 19:02
ミリセコンドだろ? 普通に10/1000(sec)=1/100(sec)じゃないの
365 :
オイお前ら :03/06/02 19:02
みごとに釣られたな(ワラ
つまんね
369 :
デフォルトの名無しさん :03/06/02 19:09
>>360 InterBaseは持ってるのですが、パラドックスじゃダメなのかな~と思って。
あくまで試験用だと思ってた方が良いのかどうか、その辺よく知らないんです。
370 :
デフォルトの名無しさん :03/06/02 19:20
>>369 昔はBDEでパラドックス対応を売りにしてましたが、
現在のDelphi的にはdbExpressを推奨してるので、
Interbase > パラドックス
じゃないかな。
>>371 レスありがとうございます。
なるほど、実用に耐えないという事はないんですね。
(ああ、無知な自分が恥ずかしい・・)
ネットワーク越しじゃない普通の業務アプリならBDE-パラドックスで十分。
もう先がない枯れた BDE と、パフォーマンスと将来性が売りの dbExpress. どちらをとるか。 ということに時間を使うとあれなんで、データベースレイヤの抽象化はきっちりやっておけば 後で変更が用意。そういうことができる(やりやすい)コンポーネントになっている
>>352 >超怒級初心者向け
「プログラミング初心者」か「Delphi初心者」かでも、選択肢が異なると思われ、、、
まぁ、文体からすると、プログラミング初心者なのかな。
とりあえず、プログラマ板を巡回することを推奨。
Buttonをクリックすると、Tagが3のLabelに0を表示したいんですが どう書けばいいですか?
if Label1.Tag = 3 then Label1.Caption :='0'; if Label2.Tag = 3 then Label2.Caption :='0'; if Label3.Tag = 3 then Label3.Caption :='0'; if Label4.Tag = 3 then Label4.Caption :='0'; if Label5.Tag = 3 then Label5.Caption :='0'; ... if Label∞.Tag = 3 then Label∞.Caption :='0';
Components/ComponentCountや、Controls/ControlsCount使って、 for i := 0 to ComponentCount - 1 do begin if (Components[i] is TLabel) and (Components[i].Tag = 3) then (Components[i] as TLabel).Caption := '0'; end;
Del厨はループも知らないのか。
>377 >378 ありがとうございます。 >Components/ComponentCountや、Controls/ControlsCount をググってみます。
フリーでマルチインデックス付けられるおすすめのコンポってないですかねぇ。 ソース付だとなおうれしいが、わがままってもんですかねぇ。
382 :
デフォルトの名無しさん :03/06/02 23:57
マルチインデックスって何?
384 :
デフォルトの名無しさん :03/06/03 00:34
Ord関数でISO-Litin-1コードに変換しようと思ったのですが、 2バイト文字が正しく変換されなくて困っています。 どうしたらいいでしょうか?
385 :
デフォルトの名無しさん :03/06/03 01:10
http://delphi.sakura.vg/index2.html 今まで何度かプログラムに挫折してきて
最後の砦としてDelphiを始めようとして、
パーソナル版をダウンして
↑のページを読みながらやってみようとしました。
そうしたら、しょっぱなのActiveXの取り込みから失敗・・。
なにをどうしたらよいのかもさっぱり分からない・・゚゚(´□`。)°゚。
386 :
動画直リン :03/06/03 01:13
>>385 釣りでないなら、
1.「トリップ付けれ」
2.「環境書けれ」
3.「エラー内容書け」
つーか、そのレス内容じゃ「日記」なのか「助言が欲しい」のか分からんぞ。
質問文にもなってない。
>>385 まず、「自分にはできないんだ」という壁を越えなきゃね。
「できないんだ」じゃなくて、「どうやれば、できるのだろう」でないと
質問することすら、ままにならないのかも。
壁って、破らないと、厚みがわからないけど、破ってみると結構薄かったりするかも。
そもそも、まず、触れてみなければ破ることなんか、まず無理。
ところで、'Hello! World'は、できたのだろうか?
次はボタンで画像を表示するとか、テキストエディタを作るとか。
「はじめてのDelphi」のアプローチって、好きだなぁ。
かつての「トレーニングマニュアル」みたいな本が出ないかなぁ。
作りたいものも無くて、ただ単にプログラミングを始めるっていうのは続かないと思う。 俺は、欲しいものがあったから、それを手に入れる手段として自分で作ること(プログラミング)を始めた。
実は何よりも目的が大事。
>>385 Delphi入門でいきなりActiveXという椰子もいう椰子だが…
>>353 353さんおられますでしょうか?
このコードの宣言部はどのように書けば良いのでしょうか?ただ
TreeViewNewWndProc(var Message: TMessage);
と書いただけではメッセージをとらえないようなので。
メッセージ関係はほとんどいじったことが無くて、
見当も付きません。。というか見当違いのことを言ってるかも…
よかったら教えていただけないでしょうか?
>>392 さっするにタブブラウザを作りたくて Delphi6 を使っているようだし。
ActiveX といってもインポートして使うだけ。COM を使いまわすわけじゃなし。
広い意味でのコンポーネントということでよいのでは?
>>385 さんは、何が起きたか位は公開してくれ。
または近くにいるひとに聞け。
>>390 オレもそうだった。
2年前 Delphi 6 Personal が無償公開された時、
WEB 乞食の務めとして DL し、 Install はしたが、
何もしたい事がなく、結果すぐ放置となった。
しかし1年後、機械的な処理を大量に行う必要に
迫られ、結果としてプログラミングという方法が
最善だと知り、目的の達成の為に習得に努めた。
プログラマとしての技量が上がったかどうかは
ともかく、(その後も頻発する)要求の処理に
必要なツールを作る程度には言語を習得できた、
と思っている。アマなので、今の状態でも一応満足
している。
もし必要に迫られていなかったら、いまだに論理
演算の意味さえ理解できなかっただろう。
必要はプログラマの母だね
一般論としては同意するが、このスレはお説教コーナーではないので雑談スレに移動してください。 自称超初心者がびびってこなくなっちゃうよ。
Delphiの限界について教えてください
限界厨は氏んでください
>>399 生産性ならVC++の限界を簡単に超える事が出来ます。
しかしC言語中心のコンピューター社会を超えるのは無理。
Delでデバイスドライバを作る奴などいない。いたらそいつは神聖Del厨。
あるコントロールのcanvasから、別のコントロールのcanvasに複写する方法教えてください。
Inifileで ReadString('Section','Value0',''); では無事読みとれるのですが ReadString('Section','Value' + Temp[1],''); (Temp:StringでTemp := 000000と入っています) では読んでくれません。 '0'とTemp[1]は違うものなのですか?
>>403 では横着しないで、いったんChar型の変数にTemp[1]を代入してから試してみろと言ってみる。
それで合ってる筈だよ。 その前後のソースは無いの?
すみません勘違いでした。 i:IntegerとしてTemp[i]としていました。 しかし、i := 0の場合もあったので 読みとれなかったようです。 String[0]はないのですね。 すみませんお騒がせしました。
ったく
408 :
デフォルトの名無しさん :03/06/03 23:32
NowでPCの現在時刻を取得してTXTに書き出すようにしたのですが、 2003/06/02 16:51:04 2003/06/02 7:28:43 このようにHourの部分が1桁だと見づらくなってしまうので、 2003/06/02 16:51:04 2003/06/02 07:28:43 このようにしたいのですが、良いやりかたはありますか?
>>408 FormatDateTime('yyyy/mm/dd hh:mm:ss', Now);
>>402 これで、Aの内容がBに描かれるはず。
B.Canvas.CopyRect( B.ClientRect, A.Canvas, A.ClientRect);
411 :
デフォルトの名無しさん :03/06/04 00:54
質問です。 .netに対応したWindowsCEがでた場合、 Delphi7でCE用のソフトは開発できるのですか。
↓もちろん、お前は釣られた敗北者じゃないよな。
415 :
デフォルトの名無しさん :03/06/04 02:41
Borland C++ Compiler 5.5 をダウンロードしたんだけど 使い方がわからない・・・ 誰か起動の仕方を教えてください・・・
>>401 >Delでデバイスドライバを作る奴などいない。いたらそいつは神聖Del厨。
真のデバイスドライバは Win32 API をつかえない場所で動くので、Win32 アプリ用ツールでは難しい。
この難しさは Delphi に限らないので、NT2000 から Mini Driver ってのが出てきて、デバイスドライバ
本体は OS 組み込み。動作を変更したいところを指定すると Win32 アプリケーションのコードをコールバックしてくれる。
リアルタイム性とかを極端に要求しない限り、ほとんどのデバイスドライバは Win32 アプリケーションとして
実装できる。(実際にはデバイスドライバの性格上、サービスにすることが多いが)
たとえば、
http://www.xlsoft.com/jp/products/windriver/products.html こういったツールを使えば、めんどくさいインターフェースコードまで自動作成してくれて、
ほんとに必要な部分だけ書けばよい。
入門書とか、入門Webを読むと、TStringListは最後に必ず解放しろって 書いてあるんですが、Functionの返値をTStringListにしたい場合、 どのタイミングで解放してやればいいんでしょうか? また、解放しなかった場合、激しくメモリーリークする可能性が あるんでしょうか? (代入したデータ分だけメモリに残るとか?)
>>419 関数の設計として TStringList を返すより TStrings を引数として渡してそれに設定する方式の方が汎用的でしょ
どうしても関数の引数で返す場合は、名前を使わずに
with func(hoge) do try
StringListを使う処理
finally free ;end;
とやる癖を付けた方がいいですね。
>>418 関数の戻り値にオブジェクト型を使うと、コーディングが激しくめんどくさくなるだけ。
関数の戻り値は数値などの単純型に限定した方がよい。
(もちろんコンストラクタなど例外はある)
レスありがとうございます。 引数を利用するやり方でやってみようと思います。
どうもwithを使うと敗北者の気分になる。
with文の中でCreateしてそのままFreeするというのは あまりDelphiらしくない方法ではあるよね
424 :
デフォルトの名無しさん :03/06/04 16:27
指定したフォルダにあるファイル名を調べるにはどうしたら良いのですか?
>>423 VCLソースを見るとたまにそういうの見かけるよ。
>>426 なるほど
例えばTBlobFieldでも使いまくってるね
昨日、6のパーソナル版を落としてきて、SDIの簡単なエディタもどきを作ってます。 新規作成で、プログラム自身をもう一個起動するためにはどうすればいいんでしょうか? よろしくおながいします。
ShellExcute
しかしその手の目的なら、少し難しいがCreateProcessでやっておくと後々便利。
VC厨です。おねがいします。 1、フォームの最大化ボタン不可の方法、サイズ変更不可の方法を 教えてください。 2、アプリの起動の最初に”本当に起動しますかダイアログ” を作っているのですが、DELの場合どういう風に設計すればいいのでしょうか? メインフォームを表示する前に表示したいのですが。
>>432 1.フォームのオブジェクトインスペクタ
2.OnCreateメソッド
>1.フォームのオブジェクトインスペクタ プロパティをかえれば言いのでしょうか? それらしいプロパティが見つからないのですが。。
>>435 できました。ありがとうございます。
biMaximizeをFALSEにしたらできました。
ヘルプも読まない厨房が紛れ込んでるな
>>437 だって、くだすれなんだもん :-)
つーか、
>>437 のほうが、このスレでは、くだらないと思います。
どうせ、名無しなら、答える気があるときだけ、答えばいいんだし。
>>432 にしたがってメインフォームに以下のように書きました。
procedure TMain.OnCreate(Sender: TObject);
var
t:TTimer;
begin
t:=TTimer.Create(Self);
if t.ShowModal = mrCancel then
Close;
t.Free;
end;
しかし、TTimerでキャンセルボタンを押して、Closeが実行されるのを
確認したんですが、メインフォームが開いてしまいます。
どうしたらいいのでしょうか?
>>440 それよくコンパイル通ったね…
TTimerにShowModalなんてメソッドは…ないよな…少なくともDel6までは
TTimer.ShowModalなんて何処から涌いてきたんだ?
>>440 program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};
{$R *.RES}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Form2.ShowModal;
Application.Run;
end.
参考になるかな?
しょぼいのでいいなら if MessageBox(Handle,'Message','Title',MB_YESNO+MB_ICONINFORMATION)=IDNO then Close; こんなのでいいんじゃネーノ? 専用ダイアログ作るなら、TButton.ModalResult設定して if Form2.ShowModal=mrNo then Close; でもいいし。
TTimerは自分で作ったクラスでした。混乱させてすいません。
あとで直します。
>>443 ありがとうございます。こんな風にしてできました。
var
r:Integer;
begin
Application.Initialize;
Application.CreateForm(TTimer, Timer);
r:=Timer.ShowModal;
Timer.Free;
if r <> mrCancel then
begin
Application.Title := 'TTT';
Application.CreateForm(TMain, Main);
Application.Run;
end;
VFWを使ったUSBカメラを使ったアプリを作ってみたくなったんですけど Delphi用サンプルコードが見つからないのですが・・・。 C/C++のコードですら見つからない。 と思うのは気のせい?Dllを使ってアーカイバを作るより難しい。 この情報はブラックボックスなんでしょうか??
まずCで書かれたサンプルを探せ。話はそれからだ。 もしくは命令セットの一覧。
アイコンダブルクリックした時点でユーザーは起動すると言ってるようなもんなのに、 そこで「起動しますか?」はウザすぎる
ウザい時は適当に「起動します」か「起動しません」とか 書いときゃいいんじゃねーの? 「出来ますか/出来ませんか」みたいなもんなんだから。
↑
まさに正論。
>>432 は無駄にインストーラを作りたがるタイプのプログラム初心者だと思われ。
451 :
デフォルトの名無しさん :03/06/05 10:30
フォーム上で、キーが押された時、KeypreviewをTrueにしておけば、 フォーム上のTEditなどでキーが入力されてもTForm1のOnKeyDownを通りますよね? それと同じような事をマウスでも行いたいのですが、可能でしょうか? つまりボタンコントロールをクリックしたら必ずTForm1のOnMouseDownを通るように したいのです。 (それぞれのボタンコントロールのOnMouseDownも使っているので、そこも通る事が 前提です) 宜しくお願いします。
>>446 それはDirectXのDirectShowで実現できるような。
DirectXSDKにそういうやつのサンプルプログラムが付いていた。
>>451 イベントが連鎖的に起こる事を期待してコーディングしない方がよい。
予想外の動作する可能性が高くなるし、その対処も面倒くさくなるだけ。
その機能ような機能を実現したければ、
ボタンのOnClickの中で、Form1MouseDownを呼び出すようにしる。
>>453 やはりそれしかないっすか。トホホ・・・。
ボタンの数がものすごく多くて、いちいち全部に同一のコードを追加するのが
面倒だから、「Formの上でマウスダウン」というくくりでイベントが発生しないものかと
思ったのですが、残念です。
>>451 Delは同じ型のイベントならば、他のコンポのイベントと共有出来るのを知っているか?
どういうプログラムか知らないので適用できるかどうかはわからないが。
ボタン共通のOnClickを作り、最初に共通の処理をさせてから、
次にSenderオブジェクトを調べ、どのボタンが押されたか判別してボタン固有の処理をやれば良い。
>>454 ものすごくボタンの数が多い場合は、Senderで分岐するのってなんだか、
あまりかっこよくない気がする…。
もし、そのものすごく多い物が全部TButtonなら、TButtonを継承して、
Mouseイベントを受け取ったら、Formに伝えたあとに、自分のOn~を
呼び出すような、クラスを作って、それに差し替えてやるといいと思う。
ボタンの数が不定なら動的にボタンを作成するだろうけど その際にTagに必要な情報を仕込んでおけば Senderでの使い分けもスマートにできる (分岐させずTagを関数の引数として扱うこともできる) ちなみにTagはポインタとしても使えるので 任意のクラスのインスタンスを仕込むこともできる
Delでstringの動的配列に関する質問です。 あらかじめサイズがわからない場合はどうした言いのでしょうか? var sl : array of string; .... for 何回回るかわからない do al[i] := .....
>>455 ボタンの数が50個ぐらいあって、それぞれ別の種類の処理をしているので、
今から変更したくないです。(^^;
ところでTButtonが何個あっても全て一つのイベントにまとめてTagで処理を
分けるのがセオリーなんですか?
そんな事考えたこともないので勉強になります。
>>456 なるほど。確かにその方法だと最初からそう作れば出来そうですね。
ただ今からやるには、ボタンの宣言を全てやり直したり、
新規にコンポーネントを作って画面の作り直しをしないと
出来ないので、難しいですが。
結局、全てのイベントに同一の関数を書き込んで解決しました。
いろいろアドバイスありがとうございました。
460 :
デフォルトの名無しさん :03/06/05 14:14
自宅のパオコンでPG作ってます。 Memo1に改行が入力されたときに改行マークを入力して改行したいのですが、 どのように書けばいいか教えて下さい。 #13#10が入力されたらみたいに書いてもできませんでした。 改行マークも?になってしまいます。。。 さて、何でしょう?
>>458 for do begin
SetLength(a,length(a)+1);
end;
すいません。間違えました。 X al[i] := ..... O sl[i] := .....
象さんコンピュータ
>>459 >ところでTButtonが何個あっても全て一つのイベントにまとめてTagで処理を
>分けるのがセオリーなんですか?
イベントハンドラを共通にして、Senderでどのボタンが押されたかを判断する
やり方はぐぐれ
>>460 Memo1.Items.add('内容1');
Memo1.Items.add('内容2');
結果↓
内容1
内容2
じゃだめ?
469 :
42歳男性より :03/06/05 14:32
>>468 >改行マークを入力して改行したい
って書いてますね。
すまそ。
パオコン、カコ(・∀・)イイ
472 :
デフォルトの名無しさん :03/06/05 16:59
TListViewを使用してデータを表示しています。 データ量がセルをオーバした時の処理を施したいのですが・・・ スクロールバーまたはExcelの「自動的に改行して全てを表示」の ような事はできますでしょうか?
パオコンはNASAでも使われているよね
474 :
デフォルトの名無しさん :03/06/05 18:53
パレットSampleのページにあるコンポーネントって使わないほうがいいの?
>>474 Personalでもソースが付いてくるコンポーネントというだけで別に問題ないはず。
でもSpinよりはUpDown使った方が良いな。
なんでUpDownの方がいいの? サイズ減るの?
477 :
デフォルトの名無しさん :03/06/05 19:36
実行ファイルが数十KBになるときと、数百KBになる場合があるんですがどうしてですか? 同じようなものを一から作り直したらすうじゅ10分の1のサイズになりました。
なんか余計なものをUsesに追加してたんじゃないの?
いろいろ試行錯誤しているうちに。
>>447 それがあればとっくに作れてます。
ソフトならゴロゴロ落ちてるのになぁ。
みんなどうしてるんだろうか。
>>480 入出力データの仕様や、命令の一覧とかが無いと作れないぞ。
ドライバがあるならそれの製造元を探したら?
>>479 プロジェクトのオプションで"実行時パッケージを使用して構築"にチェックが入ってるか入ってないかだと思われ。
チェックが入ってるとサイズは小さくなるが、exe単独では動かなくなる罠。
>>476 UpDownとSpinEditは一長一短だから、場合によりけり。
UpDownは、Windows標準コントロールなので、OSになじむ。
ただし、Editと組み合わせてエラー処理を自前でする必要がある。
SpinEditはDelphi専用だから、たとえばXPスタイルなんかは適用されない。
でも、エラー処理とか全部してくれるから、乗せるだけですぐ使える。
>>483 >>481 情報ありがとうございますた。
SDKをDLしないと…
7kb/secのダウンロード速度キツい。
最適化にチェック入ってたら、usesで不要なものは自動的に省かれてるんじゃないの?
PageControlで、Tabの大きさをPageControlの端に合わせるにはどうすればいいんですか?
>>487 自分で計算して合わせる。(漏れはそうした)
489 :
デフォルトの名無しさん :03/06/06 00:07
下記の条件で、ホストPC上のDBを操作するにあたって 問題点を解決するのに最も良い方法や気をつけるべき点を教えて下さい。 条件: ・DBはParadoxを使う。 ・ホストPC自身もDBの読み書きを行う。 ・OSはWindowsXP HomeEdition ・テーブルへのアクセスはTQueryを使う。 現在の方法: ・ネットワークドライブを割り当てて、そこにエリアスを指定している。 現在の問題点: ・レコードが1万件程度のテーブルをSelectしてOpenすると 1~3秒ぐらい時間がかかる場合があるのでもう少し速くしたい。 以上、宜しくお願いします。
>>459 もう解決しちゃったみたいだから、いいといえばいいんだけど。
ボタンの宣言は、置換で、フォームの設計は、フォームをテキストで表示して
同じく、ボタンのクラス名の部分だけ置換すれば、大丈夫だったと思う。
そうすれば、配置や設定はすべてそのままだし。
すれ違いかもしれませんがサッと教えて下さい。 ヘルプを作るのにいいソフトを教えて下さい
delphiで codeguruとかcodeproject見たいなサイトってないのでしょうか? あったら教えてください。
無いのかYO! あれよ!
Tipsを求めてるのなら Delphi Tips でググればいっぱい出てくるけどな~
ダブルクリックを禁止したいんですがどうすれば良いですか?
Label1.Caption := 'ダブルクリックをしないでください';
ActionListでスルー
>>451 あたり
>つまりボタンコントロールをクリックしたら必ずTForm1のOnMouseDownを通るように
>したいのです。
TApplication の OnMessage で対応できそうだよ。
504 :
デフォルトの名無しさん :03/06/06 12:18
AnimateWindow(Handle, 1000, AW_BLEND or AW_ACTIVATE); でフォームをフェードインして表示させると描画されない領域が出てきます。 パネルとかボタンならInvalidateで表示されるのですが TMemo,TListBox,TTreeViewなどのスクロールバーが表示されていると スクロールバー部分が灰色一色になり、うまく表示されません。 Invalidate、Refresh、UpdateWindow、InvalidateRectなど試してみたのですが どうしてもスクロールバー部分だけ表示されません。 どなたかスクロールバーを再描画する良い方法知りませんか?
HideしてShowする
>>490 レスありがとうございます。
私の読解力とスキル不足により、具体的にどうすればその方法が出来るのか分かりません。
すいませんが具体的なやりかたを教えて下さい。
宜しくお願いします。
>>502 TApplicationを少し調べてみました。
他にもいろいろ有効に使えそうなコンポーネントですね。
使いこなせるように頑張ります。
教えてくださってありがとうございます。
Button押したらButtonが消えちゃう! みたいなくだらないものを、作りたいんだけどどうしたらえーん? OnClickイベント内でButton.Free使うとエラーでるんです。
Button.Hide
バグらないドッキングウィンドウのサンプル無いでつか?
>>505 それももちろんやってて
Hide;
AnimateWindow(Handle, 1000, AW_BLEND or AW_ACTIVATE);
Show;
とやってるのですがうまくいかないです。。
なんでだろう…
RedrawWindow(handle, nil, 0, RDW_INVALIDATE or RDW_ALLCHILDREN);
RDW_ALLCHILDREN これがキモ。
514 :
デフォルトの名無しさん :03/06/06 18:51
自作DLLファイルにバージョン情報が載りません。 オプション設定では無理みたいです。 不便なんですがDelphiでは無理なんでしょうか?
>>514 Delphi のバージョンは?
D4 か D5 の IDE のバグ。.RC ファイルを手で書くか、自動生成されるリソースを
ちょいと変えるだけ。
>>512 >>513 オールチルドレン…なるほど。
おかげさまでうまくいきました。
俺一人では一ヶ月悩んでも解決できなかったと思います。
ありがとうございます!!!
517 :
デフォルトの名無しさん :03/06/06 19:48
すいません。自分のEXEのあるフォルダーを知るにはどう知ればよいのでしょうか? お願いします。
ExtractFilePath(Application.ExeName)
>>518 レスありがとうございます。
実はまだ解決してなかったのでほんと助かりました。
なるほど、こうやればよかったんですねー。
でも
>>353 さんのソースのおかげでいろいろ検索かけて
CommCtrlからTreeView_SetInsertMarkとか
TreeView_SelectDropTargetなどの便利な関数とか
発見できたりいろいろ勉強になりました。
教えてもらったの早速やってみます。
ぶっちゃけExtractFilePath(ParamStr(0))の方が短い
523 :
デフォルトの名無しさん :03/06/07 00:01
Folder5
ぶっちゃけExtractDirPath(ParamStr(0))の方が短い
>>482 そのチェック外したら、実行速度が速くなった気がするんだけど、気のせい?
でも、ぶっちゃけ ExtractFilePath(Application.ExeName) が一番Pascalらしい(ってなんですか)
Application.ExeNameを全部ParamStr(0)に置き換えたら実行形式ファイルのサイズ減ったよ
>>526 Pascalらしさを選ぶならParamStrの方が正しいのだが
>>515 ありがにょん。
リソースで気づいたのですがサンプル見ながら作ったので
{$R *.RES}を削ってました。
530 :
デフォルトの名無しさん :03/06/07 10:02
BDE Administrator で「データベース」タブの+をクリックすると変更できなくなりますが、 これを変更可能な状態に戻すにはどうすれば良いでしょうか? 今のところ再起動しかやり方がわかりません。 またこの機能は何の役に立つのでしょうか?
>>529 >{$R *.RES}を削ってました。
そりゃしょうがない。
解決したならよかった。
>「データベース」タブの+ って、ツリービューの + ? たとえば DBDEMOS の文字の前にある + のことかな? それはデータベースが開かれている状態を意味しているから、ツールバーの左端、 「開く」ボタンを押しなおしてデータベースを閉じればよし。 ほかにも、右クリック - 閉じる を選んでもよいし。 ただ、BDE Admin 終われば、データベース接続は開放されるはずなので、 「再起動しか」って意味がわからないんだけど。 もしかして別の場所のことを言っているのかなぁ。 気になるなら、画像掲示板でも使ってください。百聞は一見にしかず
>>532 そうです。ツリービューの+です。
右クリック→閉じる で解決しました。
ありがとうございます。
データベースが開かれているという意味だったんですね。
(再起動といったのは、BDE Adminの事です。混乱させてすいませんでした)
534 :
デフォルトの名無しさん :03/06/07 11:07
任意のファイルを削除するには、どうすれば良いのですか?
Del7を購入するべきでしょうか。 Del6は持っています。
537 :
デフォルトの名無しさん :03/06/07 11:12
>>534 DeleteFile('D:\DeleteFile.txt');
これで D:\DeleteFile.txt が削除できます。
>>535 もしも、Del6が、Personal、ならば、Del7Proを、買うと、とても、良い、だろう。
540 :
31歳男性 :03/06/07 12:19
Delphi7のRaveって何?
Del7を買った次の日にDel8が発売されます
僕はそろそろDelphiに飽きてきたかな。 来年には中学校に入学するから 簡単な言語はやめて複雑な言語勉強しなくちゃ。 思い切ってC++でもやってみようかな。
マネージ度は、デルファイ方がうまいと思いました。
>>540 そんなレベルでよくDelphi使えるな…。
>>542 実行ファイルを0と1を直接入力で作れないうちは、まだまだひよっこ
>>545 漏れも知らんが、一応メインプログラマーだよ。
5000万円程度のプロジェクトだけどね。
一応マジレス。QuickReportの後継らしい。広告見れ→Rave
知ったかぶりハケーン 545タン(;´Д`)
>>548 後継、というわけではないんだが、レポートツール。
漏れはLightReport使ってるからいらんぽ。
552 :
デフォルトの名無しさん :03/06/07 18:52
ClientSocketで2つ以上のサーバーに繋ぐことって不可なんですか?
553 :
デフォルトの名無しさん :03/06/07 19:12
HICON型で宣言すると「定数または型が必要です」のエラーが 出るのですが、対処法をご存知の方いましたら教えてください。 お願いします。
TFormを継承したクラスが三つあります。 TForm1=class(TForm) TForm2=class(TForm) TForm3=class(TForm) そして、同時に使うのはに一つだけなので var FForm:TForm; として、 case Value of 1:FForm:=TForm1.Create(Self); 2:FForm:=TForm2.Create(Self); 3:FForm:=TForm3.Create(Self); end; とやって使った場合、 FForm.Release;をしたときに、 それぞれのクラスでTFormに追加した手続きの分も解放されるんでしょうか?
手続きというのは、そもそもCreate時に動的に追加されるものではありません。
メンバ変数とかコンポーネントも大丈夫ですか? TFormのデストラクタが呼ばれたら追加したもの全部リークしそうなイメージですが。
阿呆なこと言わないでください。
>>553 おそらくuses節にwindowsが宣言されていないだけと思われる。
>>557 クラス内部で生成したメモリ領域はそのクラス自体が解放する責任を持ちます。
よって外部から直接Createした領域がない限り、デストラクタが呼び出されると解放されると思っていいです。
コンポーネント側がちゃんとコーディングしてなかったら意味ないけどね(・∀・)
TShellTreeViewで、指定した拡張子だけ表示するようにできますか? Delphiのバージョンは6です。
質問です。 最近Delphi6Personalから始めたのですが、いざファイルを保存しようとすると 「適切な識別子ではありません」と弾かれるのですが、 Delphiでファイルを保存するに当たってDelphi独自のファイル名に関する ルールがあるのでしょうか?
すみません、エラーメッセージが出たとき 「ヘルプ」ボタン押したら原因がわかりました・・・・ スレ汚しすみません・・・
実行したらランタイムエラー105が出ました。 ヘルプを参照したらどうも入出力エラーのようなんですが、 肝心の解決方法がわかりません。 どなたかよろしくお願いします。
>>563 Delphiでは、ユニットファイルは、usesでソースに記述されるので
アルファベットと数字ぐらいしか使わないのが無難。
正確に、どこまでつかえるのかは、ヘルプで調べてみて。
このスレ良スレだね~
568 :
デフォルトの名無しさん :03/06/08 01:46
>>562 procedure TForm1.ShellTreeView1AddFolder(Sender: TObject;
AFolder: TShellFolder; var CanAdd: Boolean);
begin
CanAdd := CompareText(ExtractFileExt(AFolder.PathName), '.lnk') <> 0;
end;
あ、これは指定した拡張子だけ表示しない方法だ。 表示するには「 = 0」にしてくれ。
やだよ
571 :
デフォルトの名無しさん :03/06/08 05:05
フリーウェアしか作らないんですけど、プロ版を買う価値ありますか?
_________ ∧,,∧ / InputBoxか ミ,,゚Д゚彡 < InputQueryに相当する ミ つ旦)~~ \ API関数はありますか? @ミ ミ  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ∪''∪ サイズ チイサイノ ホスィ
>>571 1.「ある」
2.「無い」
好きな方を選らんでチョ。
∧,,∧ / しまった… ミ;゚Д゚彡 < 該当API関数 ミ つ旦)~~ \ あったら名前教えてください。
.VBS使え
>>572 そういう時こそ、DialogBox系を使うのがよいでしょ
subitemも編集可能なListViewコンポって無いでしょうか AdvListViewはpersonalだとインストール出来ないみたいで… pro買えというのは無しd
580 :
デフォルトの名無しさん :03/06/08 10:35
>>571 もちろん「ある」ぞ。VCLソースが付いてるか否かで雲泥の差。
DelphiはProfessionalが基本で、Personalは機能限定版と考えた方がよい。
>>582 それ、API じゃないじゃん。
ダイアログボックスに Edit コントロールをはっつけているだけじゃないか。
>>575 Delフサギコ は「超初心者」の枠には入らないと思うんだが。
どのスレで質問してもつきあってあげるからさ。
>>571 >580のいうことはあまりあてにならないよ。
ビデオデッキでビデオを再生するには
ビデオデッキの内部構造を
完璧に把握しておかなければならない
とか逝ってる基地外の原理主義者だから。
で、Proが必要になるのは自分でいくつものプロジェクトを作って
その中でたくさんコンポーネントやクラスを設計して
それらをプロジェクト間で使いまわすくらいのことを
やりだすとProのありがたみがわかってくるよ。
あとはDBやコンポーネントやソースの編集機能の違いがあるから
オフィシャルサイトで差を確認してみるといいよ。
コンポーネントのプロバティのTagってどういう使い道があるんでしょ?
>>586 意味が無いから何でも使えるのだす。
64ビットが普通になれば盲腸になるかもしれないな。
ふむ・・・変数みたいな使い方すればいいのかな? ヘルプとかあさってみます。どうも!
代入できるものであれば何でもあり。
Button1.Tag := GetTickCount; // 時間を覚えておく
TWinControl(Button1.Tag).Visible := False; // ボタンに関連付けられたコンポーネントを隠す
>>587 オブジェクトの関連付けは結構便利。
多用すると汚くてわかりづらくなっちゃうけど。
もひとつ質問です。 TComponent(Sender).Tag って、今カーソルが乗ってるコンピーネントのタグ、ってことですか?
ピ→ポ
ピーポくん
>>590 そう。
カーソルというかそのイベントを発生させる原因となったコンポーネントだね。
proはクラス補完とコードエクスプローラだけでも充分使える
>>593 なるほど。
ちょっとラベルで試してみました。便利。
うまく使えばソースの簡略化に繋がるかも。
Tagを使いまくってるソースは・・・
XXXを使いまくってるソースは・・・ 禿道。 XXXに好きな文字を入れてコピペしまくりましょう。
あれ?これのTagって何に使ってたっけ?とか、 あれ?これのTagって既に何かに使ってたっけ?てなりそうだから、 俺は使ってない。
∧∧ /⌒ヽ) i三 ∪ Delphiの限界が ~三 | 垣間見えますた (/~∪ 三三 三三 三三 三三 三三
∧,,∧ さんくーす。 ミ,,゚Д゚彡 Halbowタンとこに ミつ日(ミ いい感じのがあったんですね。 調べてみます。 超初心者以外向け質問は、 "ミ,,゚Д゚彡フサギコとモナーのDelphi質問相談談話室" 最近は、こっちなのかしら・・
Pagecontrolのタブって消せますか? 用途ごとにパネルの内容を変えたいのでPagecontrolを使ってみたのですが、 もっとスマートな方法ってあるでしょうか
各ページのTabVisibleをFalseにして、PageControlのActivePageIndexで ページを切り替えれば良さそう。
>>604 (・∀・)デキター!!
Tabvisibleの存在を見落としてました。即レス感謝です!
606 :
デフォルトの名無しさん :03/06/08 22:01
>>585 おまえ、何言ってんだ?何が原理主義者だ。ばっかだねぇ。
ありがたみが分かる、って何だ?初心者だから身分相応のパッケージ買えってことか?
初心者だからこそVCLソースが必要なんだよ。はじめから当然のようにソースが見られるって素晴らしいだろ?
必要・不要じゃない。そういうことが当然に可能になっている、ってことが重要なわけ。それが「本物」なんだよ。
か~やっぱり出てきたかw基地外原理主義者君www たしかにVCLソースは便利かも知れないけど初心者じゃVCLソース見ても何も分からないのですよww 利益にならないものに高い金を払うなんて愚の骨頂ですw
608 :
デフォルトの名無しさん :03/06/08 22:47
マジレス。まずはPersonalやれ。それで物足りなければProを買う。
PersonalにはVCLソースなぞついていないんだから 初心者こそPro買え。 Personalすすめる奴は素人。
611 :
デフォルトの名無しさん :03/06/08 23:12
Personal買えって言ってる奴は安い楽器から始めろってのと同じだ。
Delphiはタダなのが魅力だと思っていたのに・・・。 ボーランドのエサだったぽ。
>>611 確かにそうといえる。
VCLソース読まないとまともなデバッグができない。
こんなクソソース作るなといいつつ、次のバージョンアップに
おびえる今日この頃.
Iniファイルに書き出す時に 改行を含んでいる場合、 ReadStringで読むと改行以前の部分しか 読みとれなくて困っています。 何か解決策はありますか?
TStringList.CommaTextに変換するとか
616 :
デフォルトの名無しさん :03/06/08 23:31
>>614 使用禁止できる文字があるならば(たとえばタブ文字禁止とか)、
改行コードをその文字に置換して書き出し、読むときに置換し直せば大丈夫。
こんな感じ
Ini.WriteString('Section', 'Ident', StringReplace(S, #13#10, #9, [rfReplaceAll]));
S := StringReplace(Ini.ReadString('Section', 'Ident', ''), #9, #13#10, [rfReplaceAll]);
>>615-616 素早いレスありがとうございます。
StringReplaceは知りませんでした。
便利ですねこれ。
無事できました。
ありがとうございました。
エスケープシーケンスと制御文字のエスケープって別物じゃないか? ついでにTo/FromEscapeSequenceも変な名前
jpeg2000を扱えるdllとか、ありますかね?
パレットの扱いが容易とのことでTNkDIBを使い始めましたが躓いてます。 TNkDIBを扱ったことのある方にお尋ねしたいのですが、 ・設計時にimage1に[tes.bmp]を image2に[tes2.dib]を読み込んである ・image1には image1.Canvas.TextOut(20, 50, '■'); でとりあえず描けた ・image2には 見よう見まねで var Canvas: TNkDIBCanvas; begin Canvas := TNkDIBCanvas.Create(image2.picture.graphic as tnkdib); Canvas.TextOut(20, 50, '●'); Canvas.Free; end; とすることでなんとか描けた よく解ってないのですが、何か描く度にこのcreate、freeって必要なんでしょうか。 一手間増えて処理が落ちそうで…image1のように単純に描ければよいのですが。
>躓いてます。 が読めなくてつまずいてます
Delphi を使い始めました。 "ファイル/新規作成/その他" で "コンポーネント" を選び、TCustomPanel を継承して コンポーネントを作ってみています。 継承したパネル上に、GUI 部品をビジュアルに配置したりできないのでしょうか? 今は、コード内で位置を指定しています……・。
>>623 描く頻度が少ないならそれでいいでしょう。
処理が落ちそうと心配なら
with TNkDIBCanvas.Create(image2.picture.graphic as tnkdib) do try
TextOut(20, 50, '●');
finally Free; end;
と一時オブジェクトをtryで受けて finally でfreeするコーディングにすれば大丈夫でしょう。
無名なので、どこかに忘れたりする心配がありませんから
もし、もっと格好良く書きたいなら、 TImageのCanvasをTNkDIBCanvasに置き換えたコンポーネントを作ればどうかと思います
>>626 さて、ビジュアルな設計という事は
1、そのTCustomPanel継承コンポの設計上で行いたい
-->それは無理です。TFrameを使う方がいいでしょう。
2、継承コンポを普通のPanelと同じように使いたい。
-->可能です。RegisterComponentでIDEに登録すればよい
630 :
デフォルトの名無しさん :03/06/09 11:32
ひとつ質問させてください。 ぱらぱらマンガみたいなのを作ろうと思ってます。 そこで、 for i:=0 to 150 do begin TImage1.Canvas.Draw(0,0,PageBmp[i]); Wait(33); end; このようにやって見たのですが、 1枚目を描画したあと、約5秒止まったあといきなり最後の イメージが描画されてしまいます。 Waitの使い方が悪いのだとおもうのですが、 Timerを使わずやってみたいので、うまく全てが描画されるようご指導いただけないでしょうか。 お願いいたします。
すいません。全然違うことを書いていました。 Wait(33)ではなくSleep(33)で実行しています。 素直にコピーペーストすればよかったのです。申し訳ありません。
632 :
デフォルトの名無しさん :03/06/09 11:48
633 :
デフォルトの名無しさん :03/06/09 11:52
>>630 試しに "Image1. "を消してみたらどう? つまり Canvas.Drawとフォームに描いてみる
636 :
デフォルトの名無しさん :03/06/09 11:53
>>634 ありがとうございます。Image1を消してみたらできました。
理由が分からないところがひっかかりますが、なんとか見られる姿になりました。
>>627 あれこれ試してみたところ、大きなサイズの画像にガンガン
Canvasのcreateをしても特に処理落ちがなかったので
とりあえずcreate-freeのセットをおまじないのようにくっつけて使うことにしてみます。
コンポーネントをいじるなんてまだまだサパーリです…レスありがとうございました。
激しく初歩的だろう質問で申し訳ないのですが。 type TForm1 = class(TForm) Edit1: TEdit; Edit1 の可視性は何になるのでしょう?
641 :
デフォルトの名無しさん :03/06/09 14:27
>>640 published
ま、publicだと思っていても問題ないけど
>>641 ありがとうございます。
とすると、外からアクセスできてしまいますが、今、単純に Edit1 を protected/private に
移動してみたら、例外が出てしまいました。
こういった制限はどうやってかけたら良いのでしょう?
>>642 フォームデザイナから配置したコントロールは
publishedでなければならないので途中で移動しちゃだめ。
どうしてもprivate/protectedにしたければ自分でEdit1を宣言して
FormCreateかどこかでインスタンスを生成する必要がある。
Edit1 := TEdit.Create(Self);
Edit.Parent := Self;
...
そう、フォームファイルをテキストで見てみれば判ると思うけど
あの情報から、Edit1を作り直す為には、 Edit1という名前から
フォームのメンバが見つけられなければいけない。
publishedでなければ、それは無理。
一方 C# とかでは デザイナは直接コードを書き換えてしまう。
つまり
>>643 のような手作業するのと同じ事をやってくれる。
ScrollBarをくっつけたらサムがチカチカ(フォーカス時)してるんですけど これを点滅させないようにするにはどうすればいいんでしょう
>645 たぶんTabStopプロパティをFalse
Dynamoの曲リストのようなものを作りたいんですが、 どのコンポーネントを使えば良いですか?
>>644 >一方 C# とかでは
ひとこと多いね。IDE と言語処理系を混ぜないでね。
処理系がコードを書き換えるのは .DFM / フォームファイルが存在しないからであることを
書いておかないとフェアではないし、JBuilder / Java も C#/VS と同じ方法だね。
フェアって・・・ どうしてそう優劣を付けたがるかね。 まともに比較したら瞬殺されちゃうんだから その辺はあいまいにしておくのが上策。
>>646 ナルホド!! これは盲点でした。ありがとです
ねむくなるスレだ
プログラミング自体が殆どはじめてなんですが、 独学で学べる良い本ないですか? 技術評論社の「はじめてのDelphi」っていうのが良いみたい なんですが、もう絶版になってるみたいで・・
とりあえず・・・googleであらかたのことは検索できる・・・と思う 基本的なことなら初心者サイト回れば十分じゃない?
本には本のよさもあるわけで(寝床で横になりながら読めるとか) 「基礎からのDelphi6」あたりがいいんでないの?
>>653 &
>>654 webでの勉強は少し慣れてからにしたいと思っいるので、
明日にでも本屋で「基礎からのDelphi6」を見てみたいと
思います。
即レス、ありがとうございます。
オレ的には「基礎的なこと」は全てネットから。 高度なことは本から。 って形がいいと思うんだが…。 「中級者向け」って本が無いんだよなぁ…。オレが中級かどうかはさておいて。 「初めての」とか「基礎から」とかはあるのに…。 ちょっとつっこんだネタだといきなり高くて分厚い本になる。しかも売ってない(泣)
>>655 書名書き間違えたみたい
「基礎からわかるDelphi6」
ね
はじめてのObject Pascalも中々いいですよ。 アプリ作って覚える形式じゃなくてちょっとした文法書みたいな感じですが。
はじめてのVBを世mr
Object Pascal 言語ガイド のヘルプもいいよ!
API関係の本を探してます。 Delphi3用に作られたAPIやGraphicAPIの分厚くて高価な本がありますが、 Delphi5以降のユーザーが買っても問題なく利用できるのでしょうか?
>>661 問題は別に無いと思うけど、本である以上出版以降に追加されたAPIはやっぱり載って無いと思うので
C言語を関数宣言だけでも読めるようにしてMSのPlatform SDKを直にあたった方がいいんじゃない?
Delphi7製品版Personalのヘルプのテキスト検索機能が使えないのは仕様ですか? トライアル版では使えたのですが、ちょっと不便・・・
667 :
デフォルトの名無しさん :03/06/10 12:14
OnCreateでCloseしても、アプリケーションが終了しないのですがどうすればいいのでしょうか
OnCreateでフラグ立てて後でチェックしてCloseするか .dprファイルでApplication.Runの直前でアプリを終了するかどうかをチェックするとか。
Application.Terminate 呼ぶ
もし、起動時のパラメータや多重起動防止で即座にアプリを終了させたいのなら メインフォームのOnCreateでなく .DPR でやる方がいいよ。
>>665 いえ、XP Homeです。
具体的に症状を書きます。
ヘルプを表示して、テキスト検索のタブに切り替えると
"検索のセットアップウィザード"ってのが出るんですが、
そのウィザード終了時の完了ボタンを押すとエラーが起きてしまいます。
エラーが起きる前まではトライアル版と全く一緒です。
普通はPersonal版でもトライアルのようにテキスト検索も使えるのでしょうか?
普通は使える。
XPだと不具合があるという話は何度か見かけたけど (俺のPCでは問題なし、ハードの古さが幸いしてるかもしれない)
>>673-674 なるほど、普通は使えるのですか。
では取り敢えず再インストールなり色々と試してみます。
レスありがとうございました。
676 :
デフォルトの名無しさん :03/06/10 15:43
Delphiのような時代遅れでマイナーな言語使うのやめてC#でも勉強したほうが 役に立つよ。 Delphi勉強しても就職にも仕事にも役に立たないは金にはならないは 時代遅れだわで何にもメリットないよ。 マジレスだけど。 騙されたと思ってC#してみ。 Java覚える必要ないしVBのような簡単な事も出来るしもう どこにもDelphiの出番はないよ。
678 :
デフォルトの名無しさん :03/06/10 15:49
C#勉強すればJav勉強する必要ないし、 Delphi勉強する必要もないし 言語に費やす時間が大幅に減るよ。 その時間を有効活用したほうが人生有意義に過ごせるよ。 余った時間でCやスクリプト言語勉強するもよし、C++勉強するもよし 家族や彼女と費やす時間を増やすもよしでさ。
普通はPascal、C, C++, BASIC, Javaくらい使える。 ついでにPerlやRubyのようなスクリプト言語は道具としてつかえるので 覚えておいた方がいい。 実装によるデザインパターンの違い等は慣れがいるだろうけどね。
680 :
デフォルトの名無しさん :03/06/10 15:53
>>679 それはすごいね。
ここはCも分からないような初心者が集まるスレだからね。
これから言語始める人には余計な苦労するよりも
もっと有意義に時間を使ったほうがいいと思ってマジレスしたまでさ。
実際のところ文献は色々な言語で書かれてるわけで せめて読めるくらいでないと支障があるよね で、複数の言語が使えるようになると 初めて見る言語でもおおよその意味は分かるようになる 漏れも679さんの意見には賛成だな (FORTRANあたりも読めたほうがいいね)
そうだね。cygwin入れれば FORTRANまではフリーだ。 出来ればCOBOLも読めた方がいいけど、これは畳水練でもいいか。 でも、もし学生で有意義に時間を使いたいならさ、フリーな時間でプログラミングなんて一切止めた方がいい。 一番いいのは、図書館で毎日2~5冊借りて乱読することだ。英語の本も2回に一度は1冊入れるようにね。 読解力も上がるし、表現力も上がる。視野も広がる。これらが人生にも仕事にも一番大事な事だ。
人生相談スレ?
Pascal系列を覚えておくとALGOLなんかも読めてよし。 つーか何かの言語覚えたら他の言語も普通に読めるようになれるよ。 BASICはまあ別だけど。
はたして ALGOL を読む機会があるだろうか……
世にネットでの釣りを趣味とする者がいると聞くが
687 :
デフォルトの名無しさん :03/06/10 17:16
Delphi 2.0J DesktopにはWinSightは入ってないのでしょうか? CD-ROMの中をファイル検索したんですが、WS32.EXE、WS32.EX_は 発見できませんでした。
Modulaもいいねえ。
>>688 素早い回答ありがとうございます。
無料の6 Personalも落としてみたんですが、入ってませんでした。
ProfessionalかEnterprise版を買わないと
WinSightは入手できないんでしょうか?
SPY++を使え
692 :
デフォルトの名無しさん :03/06/10 18:30
ダイアログ周りで質問です ShowModal()で表示したフォーム(ダイアログA)上で MessageDlg(~略~, [mbOK], 0)でダイアログBを表示したとき、 ダイアログBからmrOKが返されると、ダイアログAの処理をぶっ飛ばして BもAも閉じてしまうんですが、BでOKされてもAが残るにはどうしたら良いんですか? ソースコードにするとこんな感じ ■Unit1.pas Form2.ShowModal(); //ダイアログAを表示 ■Unit2.pas if なんか間違ってたら then begin MessageDlg('ERROR', mtWarning, [mbOK], 0); //ダイアログBを表示 exit; //←上でOK押されるとこいつ無視される end; { もちろんここも無視される・・・ }
>>690 PlatformSDKのSPY使え('A`)
>>693 690じゃないけど
上の方のレスにも出てたけどPlatformSDKってどれを入れればいいのですか?
ググってMSのPlatformSDKのHPに行ったんだけどCORE SDKって奴ですか?
それと日本語版って無いんでしょうか?
>>692 そんな昔のDOSツールじゃないんだから モーダルダイアログからモーダルダイアログ呼ぶ設計はちょっとなあ
(´-`).oO(メッセージぐらいだすだろ・・・
692の再現できないのは漏れだけだろうか
>>698 あーすいません環境書いてなかった
WinXP+Delphi6Personalです
Form2は BorderStyle:=bsDialog; FormStyle:=fsStayOnTop; くらいしかいじってなくて
Input:TEditとOKボタン(ModalResult:=mrOK;)があって
Input.Textが正の数を表す文字列じゃなかったら
MessageDlg('正の数じゃないとダメよ', mtWarning, [mbOK], 0); してます
以下該当部分のソース(全角インデントなのでコピペじゃ動きません)
procedure TForm2.btnOKClick(Sender: TObject);
var
InputBuf: integer;
begin
//Check Input
if Input.Modified then
begin
InputBuf := StrToIntDef(Input.Text, -1);
if (InputBuf < 0) then
begin
MessageDlg('有効な値ではありません', mtWarning, [mbOK], 0);
Input.SetFocus();
exit;
end;
end;
{ 事後処理略 }
Form2.Hide();
end;
WEBでよくみかける「マウスが乗るとイメージが切り替わる」ボタン、
ググったら、ちょうど↓で出てるようなことをしたいんですけど
ttp://www.users.gr.jp/ml/archive/delphi/61178.asp ここでの回答にあったTSpeedButtonを使ってみましたが
ロールオーバー時の切り替えが解りません(フチが浮き上がるだけ)。
押下時のイメージ切り替えは出来たのですが、
マウスが乗ってる時のイメージ切り替えはどのようにすればよいのでしょうか。
バージョンは6 Personalです。
自分でマウスポインタの 入出力を監視して自分で書くしかないよ。 がんばってください。
>>699 MessageDlgの直後に、ModalResult := mrNone; を置く。
703 :
デフォルトの名無しさん :03/06/10 20:35
>>700 そのボタンはツールバーを作るのに使ってるのですか?それだとTToolBarで可能ですよ。
ImagesとHotImagesを指定してFlatをTrueにするだけです。
>>702 解決しました ありがとう
そういう仕組みだったんですね・・・
指定したプログラムの再起動をするにはどうしたらいいのでしょうか?
>>701 うーん、やっぱりそうでしたか。基本機能で可能ならそれで済ませたかったのですが。
>>703 独立したボタンでやりたいので…
でも、ToolBarのボタンでそうした処理ができるとは勉強になりました。
結局、LMD ToolsをインストールしてTLMDMMButtonを使ったところ
思っていたものと同様の動作が可能でした。おとなしくこれ使うことにします。
レスありがとうございました。
procedure TApplication.CreateForm(InstanceClass: TComponentClass; var Reference); var Instance: TComponent; begin Instance := TComponent(InstanceClass.NewInstance); TComponent(Reference) := Instance; このプログラムはどう読めばいいのでしょうか?
709 :
デフォルトの名無しさん :03/06/10 23:57
>>707 気にするな。いつか分かるときが来る。それまではDelphiに任せておけ。
>>685 学術書なんかでは結構ALGOL見かけるよ
>>707 InstanceClassで指定した型のインスタンスを生成して引数Referenceに参照渡し
711 :
デフォルトの名無しさん :03/06/11 00:00
00:00age
var a as array of integar これだけでもCよりはバカプログラマにとっては楽だな。
asよりisの方がいいな。
>>713 すまん、あなたがコンパイル段階で指摘してくれた。
CとかC++では無理だな。
A:Pointer; Ptr(DWord(A)+1) がめんどい。PByteArray使えばいいんだけど、もっとスマートな方法ないものか。
715 >> INC() 良いし、デルファイをコンパイルした結果を見ると、 すべて後始末やっているはず。インクリメントは、 関数読んでない。マシン語を実行しているだけ。
717 :
デフォルトの名無しさん :03/06/11 01:18
プレフィックスとかプリフィクスとか呼ばれるもの無いのか?
123.45F
あ、これは差フィックスだ
律儀に、 a: array of basic Type; をやると setof関数で割り当てやると、自動的に マネーじ度プログラムなのが良いね。
基地害がいるの?
723 :
デフォルトの名無しさん :03/06/11 12:50
アカデミックって、通常のバージョンとの違いはあるんでしょうか?
値段が違う
商用開発が出来ない。
>>459 内部処理はデータモジュールなどの他のユニットで行うようにすれば
フォームの作り直しが楽になります.
>>585 私も無理してプロ版を買うことはないと思います.
自分でコンポーネントを作ったりとかある程度高度なことを始めると
VCLのソースコードがほしくなりますし実際役に立っています.
プログラミング技術者でDelphiは初めてという場合は
中の仕組みを見たくなるかも知れませんが
それなら『中村の里』に行って来た方が良さそうな気がします.
どなたかフォントにスムージング(アンチエイリアス?)を掛ける方法をご存知ないでしょうか・・
メモリ上のビットマップ(TBitmap.Create)に2倍のサイズで作成して それを縮小するときに4ドットの黒点の数を数える 例えば ■□ なら 2 □■ この結果を g/4 を重みとする。 それをR,G,B各値にかけて按分する。 下絵の dR,dG,dB 描く色を uR,rG,uB としたら 例えば赤は ( dR*(4-g)+uR*g)/4 と求めるわけだ
Delphiのアカデミって作ったのはフリーソフトといえども配布できないっていう制限がなかったっけ。 前揉めてたような。
733 :
デフォルトの名無しさん :03/06/11 20:01
kylixっておまけソフトとなんですか?
>>731 >>734 さんくす
で、GetGlyphOutlineを調べてたらこんなの見つけた↓
SystemParametersInfo( SPI_SETFONTSMOOTHING, 1, Nil, 0 );
これでもスムージングできたんだけど、これだとなんか問題あるのかな?
・・・と思ったらTextOutでTBitmapにスムージング描画できんかった・・ スマソ
OnKeyDown で CTrl+F を押したとき例えばShowmessage('押した') ;を実行するには どうしたらいいのでしょうか?
738 :
はじめたばっか :03/06/12 00:39
>>732 シェアがだめなんじゃなかったけ?
プログラミングって、本に書いてある通りのことをやっていけば、自然にアプリケーションとかを作れるようになるのかな?
どのコマンドをどのように使えばいいのかが、まだ良く分かんないんだけど。
SPI_SETFONTSMOOTHINGはフォントサイズが小さいと
スムージングが上手く行われないらしい・・
>>737 if (Shift=[ssCtrl]) and (Key=67) then
Showmessage('押した') ;
740 :
デフォルトの名無しさん :03/06/12 00:46
>>737 集合演算子
↓
if (Key = Ord('F')) and ssCtrl in Shift then ShowMessage('押した');
Key=70だな 連投すまそ
ありがと
743 :
デフォルトの名無しさん :03/06/12 00:48
あちゃ、カッコ忘れた
if (Key = Ord('F')) and (ssCtrl in Shift) then ShowMessage('押した');
>>739 は可読性が低いという意味で悪い例
このスレは親切すぎるぜーーーー!
>>729 ,732,738
ありがとうございます。単純に安いだけじゃなく
色々制約があったんですね。
746 :
デフォルトの名無しさん :03/06/12 02:12
TComboBoxとTComboBoxExは、 Exの方がパワーアップしたように見せかけて 実はExの方がサイズ小さい。
747 :
デフォルトの名無しさん :03/06/12 09:50
dbExpressのパラメタクエリーサンプルありませんか? なんだか、TQuery形式では動作してくれないような。
748 :
デフォルトの名無しさん :03/06/12 10:42
どうしてDelphiやBCBの入門書籍は発行されないのですか? とくにBCBはひどすぎます。大変いい処理系だとおもうのに理解できません。 値段が高すぎて購入できないほどでもないし・・・・。 だれか業界の状況をしっているひと、教えてください。
>>748 DelphiはともかくBCBは入門書いらんと思う。
DelとC++の入門書があれば事足りるわけだし。
需要が無い(と出版社が思っている)からです
>>748 VBやVCの場合は、これで作れ! と本人の意思に関係なく強制される事が多いわけです。
そうなると、入門書見てそれに書いてある通りに操作してでも、なんとか動かしたいという
要求が強くなり、需要が生まれます。
道具を自分で選ぶ事が出来る人は、入門書が無くとも専門書からどう学んでいけば
良いか当然判っていますから、入門書の需要は少ない事になります。
需要が無ければこの出版不況の時代では供給は生まれません。
良書でも、値段が廉く利幅が少ないと、十分な数が売れなくなれば再販ルートに乗せ
られず、どんどん廃刊になるのが現実なのです。
Delphi/BCBを使いこなす為には、先に、専門書とどう付き合うかの訓練が必要かもしれませんね。
1行で書けることを何で長文にしたがるのですか?
>>752 お前にも分かるように丁寧に書いてくれてんだと思うよ
DelphiXってDelphi6じゃ絶対に使えないんでしょうか?
>>755 それ使ってみたんだけど、インストールしてサンプルを実行しても、
#00021 | Direct3DDeviceオブジェクトの生成を行います
#00022 | Direct3DDeviceオブジェクトの生成に失敗しました(Error Code = D3DERR_NOTAVAILABLE)
#00023 |
#00024 | ■■■お別れの時がやってまいりました■■■
#00025 | DGCaradオブジェクトの解放に伴い、全ての関連オブジェクトを解放します
とか出て動いてくれないのです。。。
漏れのヘボPCでは動かないんじゃなかろうか。。
>ヘボPC DX9入ってんの?
(;´д`)Delphi5ってどこに行けば買えるの?
ちょっと探してみたけど無いね・・・
762 :
デフォルトの名無しさん :03/06/13 03:39
情報試験受けるのですが デルファイとC++どっちがいいでしょう? C++はデルファイの会社のから無料のコンパイラーで デルファイは試用版です。
全画面表示について質問なのですが //全画面表示へ変更 Form1.BorderStyle := bsNone; Form1.WindowState := wsMaximized; で全画面表示にフォームを変更させたあとそのままプログラムを終了させると Windows2000では異常ないのですが、Windows98だとタスクバーに タスクのようなもの(クリックすると消えます)が残ってしまいます なにか解決方法はないでしょうか? 元のウィンドウ表示に戻してからプログラムを終了させる以外の方法で教えてください。
BorlandのDelphiのTipsのページにその対策について書いてあった気がする
>>763 Win9x のタスクバーのバグ。BorderStyle の方が問題だったんじゃないかな?
アプリ起動時と終了時で Windows Style が変更されていると、アプリケーションを
識別できなくなるため、ボタンが残る。
>>763 元のウィンドウ表示に戻してからプログラムを終了させる。
これに何か問題あるのか?
>>754 一部ソースを書き換えることで一応使える。
そのやり方も、DelphiXのBBSに書いてあった……のだが、BBSが落ちてて見れないっぽい。
どこかに残ってないのかな…?
768 :
デフォルトの名無しさん :03/06/13 08:22
delとBCBのどちらかで神と呼ばれるレベルまで到達したいのですが、 どちらが到達しやすいでしょうか? 当方、C言語の多少とPascalの多少を知っているのみです。
神は言語を選ばず
>>768 どちらもやることをお勧めする。
BCBはPascalが読めないとライブラリ理解できないし、
DelphiもC/C++が読めないと各種SDKを利用する時に困る。
どちらのプロ版も他方の旧バージョンが含まれていたはず。
(中村拓男氏もどちらもやってるけど、どちらかと言うと
Delphiに重きを置いてるようだ。)
Delphiのスレで尋ねているので、 「del」と答えるのが正解です。
>>764-765 言われたように、BorlandのDelphiのFAQに載っていました
どうもありがとうございます。
解決方法は以下のとおりです。
この動作についてプログラム中で回避する場合には,フォームのOnDestroyメソッドにて以下のコードを実行してください。
タスクバーにウィンドウが残らないようになります。
ShowWindow(Application.Handle, SW_SHOW);
773 :
デフォルトの名無しさん :03/06/13 13:56
procedure TForm1.Button1Click(Sender: TObject); var x:integer ; とすると、この処理の中だとxが使えますが、 これを他の処理で使うにはどうしたらいいのでしょう?
774 :
デフォルトの名無しさん :03/06/13 14:05
775 :
デフォルトの名無しさん :03/06/13 14:16
ちょっと質問ですが、 Delphi6でWebからファイルを収集したいのですが、 例えばC:\Test.txtにURLリストがある状態で そのURLリストから1行づつURLを取り出してすべてのURLを HTTPダウンロードする方法ってどうやればいいですか? サンプルで教えていただけるとありがたいです。
>>773 Delphiは構造化言語でもあります。
そのメソッド内で定義した変数は、メソッドという構造の中でしか有効でありません。
別のメソッドの引数にする事や、内部で定義した手続きからはそのxを見る事が出来ます。
変数類を外部との通信に使う方法としては
1、一番外側の構造で定義する
外側には、
・クラス内変数
・UNIT内グローバル変数
・公開されたグローバル変数
などがあります。
2、const で定義してて 無理やり寿命の長い変数として使う
3、ヒープからメモリを確保する
などがあります。
>>775 with TStringList.Create do try
LoadFromFile('C:\Test.txt');
for i:=0 to Count-1 do begin
DownLoadFrom( Strings[i] );
end;
finally free;end;
778 :
デフォルトの名無しさん :03/06/13 14:32
DownloadFromどうすんだよ(笑
780 :
デフォルトの名無しさん :03/06/13 15:03
「ヒープ」と「スタック」について教えてください。 何 そ れ ? Class型はヒープに確保って、Var i:Integer; と、どこがどう ちがうのですか?
781 :
デフォルトの名無しさん :03/06/13 18:19
DBにParadoxを使う時の事について質問です。 ローカルネットワークでC/Sのシステムを作る時、 PrivateDirをコードで記述しないと、 「他の.Netファイルがこのディレクトリをコントロールしています」や 「LCKファイルが大きくなりすぎています」 などのエラーが出るそうですが(というか実際出ていますが) これはデフォルトだと、実行ファイルと同じフォルダにLCKファイルやNetファイルが 出来ますよね? PrivateDirをコード中で明示的に記述しても同じ事だと思うのですが、 なぜ、そうしないとエラーになるのでしょうか?
>>780 「ヒープ」はWindowsが扱えるメモリ領域全般。
物理、仮想両方。構造体とかクラスとか大きなメモリを使うときはこっち。
「スタック」はプログラムが起動したときに
メモリに読み込まれたプログラム周辺に確保されるメモリ領域。
大きさが制限されているけどヒープよりちょっと早い。
ただし、足りなくなるとプログラムの動作がおかしくなる。
かなり古い本だがBorland PressのC++Builder入門Vol.1、Vol.2が
そういう流されがちなことをいちいち書いているのでお勧め。
Delphiでも参考になる部分は多い。
MicrosoftPressの絶版になっちまった本がすごい丁寧なんだけど、
今じゃ入手できないからなぁ
>MicrosoftPressの絶版になっちまった本がすごい丁寧なんだけど、 >今じゃ入手できないからなぁ 中古という手もあるし、書名を書いてやっておくんなせい
情けなくて悲しくなるのですが、 Integer と Extended の変換ってどうやれば良いのでしょう?
>>773 とりあえず
implementation
var
x: Integer;//
>>776 UNIT内グローバル変数
{$R *.dfm}
787 :
デフォルトの名無しさん :03/06/13 20:16
今日、ヨドバシカメラにDelphiを買いに出かけたら、どこを探してもありませんでした。 Delphiはどこに売ってるのでしょうか? また、そもそもDelphiはこの世に存在するのでしょうか? Delphiの限界が垣間見えました。
788 :
デフォルトの名無しさん :03/06/13 20:18
ネットで手にいれんだよ。
Delヲタに優しいソフマップキタ━━━━(゚∀゚)━━━━!! あんなに書籍コーナーとって大丈夫なのかな
蛇足だが「垣間見た」を使う香具師って基地外おおくね?
ヨドバシカメラでおねがいします。 ポイントカードをあれこれ持ちたくないので
794 :
デフォルトの名無しさん :03/06/13 22:57
ヨドバシカメラ大阪梅田店地下1階PCソフト売り場へどうぞ。
エディターを作っています。 バイナリファイルを開いたときに「ヌル文字を含んでいるから・・・・」 という警告ダイアログを出したいのですが、 どういう風にチェックすればいいのでしょうか?
1.TFileStreamにファイル内容を読み出す 2.一バイト毎調べる
限界厨、まだ生きてたか
799 :
デフォルトの名無しさん :03/06/14 00:55
縦読みのプログラムコード教えてください。 実際に動いて
{ 8 0 0} program test; {$APPTYPE CONSOLE} uses SysUtils; var g: integer; begin g:=0; readln; end. { t }
801 :
デフォルトの名無しさん :03/06/14 04:55
TEditに数字だけを入力させるようにするにはどうすればいいのでしょうか? (数字以外のキーを押しても反映されない)
Tmaskeditでも使うヨロし
ファイルの中身をメモリに読み込んでおいて、 PaintBoxのOnPaintでループ回してシコシコPixels[x, y]への代入にて 描画してるんですが遅い… GoogleでDelphi PaintBox ScanLineでサーチしたけど、 たった3件しかも役立たず…(´・ω・`) PaintBox.OnPaintじゃScanLine使えないし、 どうすれば速くなるの?(;´Д⊂) 教えてエロい人おながいします (;´Д`)人
805 :
デフォルトの名無しさん :03/06/14 07:30
>>803 1、TBitmapを作ってBitmap上で描画しておいてから Draw
2、CLXにする
>>806 激しくレスに感謝
1でやってみます(`・ω・´)
2はまだD5を使ってる不良ユーザなので使えないのです(´・ω・`)
Delに限らず開発ツールって高いよ…
↓無償をアピールする.NET信者
Delphi.NETは有償です。
>>806 クリックスにするだけで速くなるんですか?
811 :
デフォルトの名無しさん :03/06/14 12:31
ステータスバーにプログレスバーを乗っけたんだが これだとステータスバー1番目のパネルにしか乗らない 2番目のパネルに乗せるにはどうしたらいいのですか? ProgressBar1:=TProgressBar.Create(self); ProgressBar1.Parent:=StatusBar1;
812 :
デフォルトの名無しさん :03/06/14 12:40
プログラムを起動したときにはメモリ使用量が5800Kだったのに操作しているうちにどんどん増えて10000Kを超えてしまいました。 これって仕方ないのでしょうか? そして、10000Kを超えた後に最小化したら1000Kくらいになり、 さらに、これを元に戻したら2000Kくらいになりました。(なぜか起動時より少ない) どうなってるんでしょう
>>811 2番目のパネルの位置を算出して、その位置に移動させる。
>>812 Windowsプログラムってそういうもんです。
815 :
デフォルトの名無しさん :03/06/14 14:57
クラスの中で construtor Ttest.Create(・・・・・・・・・・・); begin For i := 0 to 10 do begin ・・・・・・ ・・・・・・・・ end; end; For to do は使えないんでしょうか?
>>817 見たまんまだとvar i: integer;してないけどどうなの?
そこは問題ないです。 for i:=0 to ・・・のラインのところに 「エラー (:= 使うところに =が使われて・・・・」 のようなメッセージが出ます。ちゃんと := になっているんだけど・・。
アイデア1. その場所のみ、テストとして新規で張り付けて動かしてみる。 ってのはどう?
すみません。おっしゃるとうり var i: integer; これみたいです。 unit test; interface type Ttest = class i: integer; としてたんですが implementation Constructor Ttest.Create (x,y:integer); var i:integer ; begin for i:=・・・・・・・・・・ としたら問題なく動きました。なぜでしょう?
「グローバル変数じゃダメアルヨ」ってヤツかな?
一つ賢くなった、多分。 アドバイスありがというございました。
824 :
デフォルトの名無しさん :03/06/15 01:12
Del6Personalで質問です ネットワーク越しに8バイトヘッダのついたStringをやりとりしたいと思って 色々調べた結果、TMemoryStreamをSendStreamで流すことにしたんですが ReadBufferでデータを取り込むところまではうまくいったのに その処理をしている関数が終わった時点で循環参照?だかなんだかわからないけど アドレスBAADF00DでアドレスBAADF00Dに対する読み込み違反とやらが起きてしまいます データの元はWord2つCardinal1つString1つを持ったクラスで それぞれをコンストラクタで受け取って、自分でCreateしたStreamに FStream.ReadBuffer(FHeader1, SizeOf(Word));みたいな感じで 順番に読み込んでます(ここまではメモリダンプ見ても一見?問題なく動いてる) 下にソース書いてみます
825 :
デフォルトの名無しさん :03/06/15 01:12
constructor TQueryBuffer.Create (const H1, H2: Word; const H3: Cardinal; const S: String); var pS: PChar; begin FHeader1 := H1; FHeader2 := H2; FHeader3 := H3; FMessage := S; FStream := TMemoryStream.Create(); FStream.SetSize(MaxStreamLen); FStream.ReadBuffer(FHeader1, SizeOf(Word)); FStream.ReadBuffer(FHeader2, SizeOf(Word)); FStream.ReadBuffer(FHeader3, SizeOf(Cardinal)); pS := PChar(Addr(FMessage[1])); FStream.ReadBuffer(pS, Length(FMessage)); end; ↑ステップ実行するとこの直後AccessViolationが起きる 例えばメインの処理内でvar Temp: TQueryBuffer;として Temp := TQueryBuffer.Create($0, $0, 1234, 'test');したときに、 ←この行に帰ってくる直前でコケる
で、MemoryStreamの使い方が間違ってるのか そもそもそんなもん使わんでももっと良い方法があるのか 教えてくらさい
>>754 使えます。思い切りFAQです。半年に同じ1度質問が来ます。
海外サイトを検索してください。
>>758 グラフィックボードがへぼいからかと。
ボード名を書かないことから、大体わかる。
a
LUIDという型をDELPHIで使うには どうやって宣言したらいいのでしょうか?
IDEでコンパイルして生成されたアプリを終了すると必ず 「 アドレス~でアドレス~に対する読み込み違反がおきました 」 というOSの例外が発生するようになってしまいました。 (環境) WINDOWS98SE、DELPHI6 PERSONAL update2+RTL3 (不具合発生の詳細) 1、「新規作成」「アプリケーション」で出した フォームだけのアプリ を コンパイルし、IDEから生成されたアプリを終了しても同じ現象が起こります。 2、コンパイルして出力されたEXEファイルをエクスプローラから実行すると アプリを終了してもOSの例外は発生しません。 3、2年前にDELPHI PERSONALを導入した時にはこういうバグは ありませんでした。 RTL2を当ててからこうなったような・・(不確かですが) 4、DELPHI PERSONALと修正ファイルをアンインスト&再インストしても 直りませんでした。 5、OSはつい最近リカバリしたばかりなのでOSが逝ってるとは考えにくいです。 (100%無いとは言い切れませんが..) もし直し方をご存知の方がいらっしゃいましたら宜しくお願いしますm(__;)m RTL2以降を当てないで使えばいいのかな・・ でもバグフィックスが・・
>>830 WMPコンポーネントを追加してるとそーなることが
>>831 まだパソナルと修正ファイルしか入れてない状態なので
そりはありませんです、情報どもデス。
2度目のDELPHI再インストをしたらバグが出なくなりました。 何故直ったのかはワカリマセンが大変お騒がせしてすみません~ 今後も原因の究明をするつもりなので解ったらお知らせします。m(__;)m
834 :
デフォルトの名無しさん :03/06/15 20:35
TMediaPlayer1.Positionの返ってくる数字を xx:xx:xxに変換する関数おせーて
>>834 procedure TransrateTMediaPlayer1PositionReturnValueToxx:xx:xx()
836 :
デフォルトの名無しさん :03/06/15 20:53
PRINT文のあとにつける ; セミコロン , コンマ の役割をおしえてください
そりゃBASICだろ セミコロンは文字区切り カンマつーかPRINTの第一引数は出力先の指定…だったっけ
>>837 まったくの初心者なんで迷惑をおかけしました(´・ω・`)
助かりました
839 :
デフォルトの名無しさん :03/06/15 21:21
TApplicationEventsコンポのOnMinimizeイベントを使って最小化したときタスクバーから消す という動作をさせているのですが、二回目以降最小化ボタンが押せなくなってしまいます。 これを回避する方法を教えて頂きたいのですが。
840 :
デフォルトの名無しさん :03/06/15 21:35
>>839 そんなのどういうインターフェースにしたいかでいくらでもあるだろ。
タスクトレイへ収納するのか、バックグラウンドで動かすのか、その他…
>>839 まさかとは思うがApplication.Restoreをしていないなんて事はないよな?
>>824 がまだ解決してませんが
別の質問です・・・
TServerSocketは何故かOnError(OnErrorEvent?)が隠されてるので
仕方なくTry...ExceptでESocketErrorをキャッチしてるんですが
そのとき飛んできた例外がMessage: Stringと
HelpContext: Integer(いつもゼロ)しか持って無いみたいで
これまた仕方なくif E.Message = <エラーメッセージ全文> then
で条件分岐するトンチキな実装になってしまいます
これを例えばエラーコードを順序型で得る方法とか
何か良い方法は無いですか?
PersonalなのでTServerSocketの実装みてオーバーライドするわけにもいかず
もうお手上げです
#Enterprise版のHelpを手に入れて手探りでオーバーライドしてみたけど
#Error関数もOnErrorプロパティもError周りの関数がことごとく呼ばれなかった・・・
843 :
デフォルトの名無しさん :03/06/16 11:38
列挙型の値を配列の添え字に使えないんですか?
844 :
デフォルトの名無しさん :03/06/16 11:45
>>843 キャストすりゃ使えるけど?
不安なら定数宣言しときゃいいだけで
type enum = (first = 1, second = 2);
にしといて、
var buf: Array[enum] of Integer;
でサイズ指定したりとか
buf[Integer(first)] := 123;
buf[Integer(second)] := 456
とかできる
こういう場合キャストじゃなくてOrd関数使う方が文法的には正しいか buf[Ord(first)] := 123;
>>845 いや
var buf: Array[enum] of Integer;
と定義したんなら
buf[first] とアクセスするのが一番正しい。
結論: 1、静的配列の定義で 添字型として列挙型を使っていれば 添え字に列挙型の値が使える。 2、動的配列では添字は常に整数であり列挙型は使えない。 注)添字型に使えるのは列挙型だけでなく その範囲が31ビット以下の全ての順序型。 整数型 Shortint/Smallint/Byte/Word 文字型 char / WideChar / AnsiChar 論理型 boolean /ByteBool 等 列挙型 部分範囲型
>>850 やべぇ俺が持ってるのDelphiじゃないのかも(笑
テスト方法間違えたかな
>>824 DELのことはあんまりわからないでうsが
825のReadBufferはWriteBufferの間違いでは?
>>842 ServerSocketからrecvしようとしてエラーになるのかな?
853 :
デフォルトの名無しさん :03/06/16 14:20
今日からDelphiで開発を命じられました。 C言語が少しわかる程度の私がDelphiでデータベースプログラミングを する事になりました。 使用するDBはParadoxです。 テーブルの作成などはDataBaseDeskTopで行います。 でも私にはParadoxやDataBaseDeskTopの使い方が全く分かりません。 これらについて詳しい書籍やHPをお教え下さい。 宜しくお願いします。 (またParadox以外にも標準でDBがあるようですが、それらの用途も教えて下さい) (dBaseとParadoxの違いは何か?とか)
>>852 確かに逆ですね・・・なんでメモリの内容は正しかったんだろう・・・
>>824 はもうSendBufで自己管理するやり方にまるまる書き直しちゃったので
忘れてください
>>842 に関しては、エラーが起きてしまうというトラブルじゃなくて、
例えばServerSocket.Open()でWSAEADDRINUSEが返って来た場合など
そのエラーをキャッチする為のイベントがTServerSocketに無いので
仕方なくtry...exceptで受ける様にしてあるのを
もっとスマートにできませんか?という質問です
856 :
デフォルトの名無しさん :03/06/16 19:40
質問します。 リストボックスで出来るかどうかは知りませんが、リストの上に ボタンを表示するにはどうしたら良いのですか? すみません、小規模な質問で・・・
>>840 すいません書き足りませんでした。
キャンプションバーの最小化ボタンを押した時にタスクトレイに収納したいんです。
今はOnMinimizeにHide、タスクトレイのアイコンを左クリックしたらShowとしています。
しかしこう書くと二度目以降キャンプションバーの最小化ボタンが押せないんです。
この動作を二回目以降も問題なく動かすにはどうすればいいでしょうか?
>>841 niftyのサンプルで見た気がしますが、それはやっていません。
>>830 の不具合の原因が解ったので書いておきます。
「AVG」というフリーのアンチウイルスソフトが原因でした。
これが起動している状態でコンパイルし、生成されたアプリを
終了するとOSの不具合が発生し、Explorerがダウンします。
つい最近まではAVGを起動した状態でも問題無かったのですが、
AVGのバージョンアップによりこういう現象が現れたようです。
すべての環境でAVGがDELPHIを妨害するのかどうかは解りませんが
AVGをお使いの方はお気をつけ下さい。(^^;
>>857 TApplicationのソース見たわけじゃないからハッキリとした事は言えないけどね。
Showした後、タスクバーに表示された自分のプログラムを右クリックしてみなよ。
「元のサイズに戻す」ってなっている筈。
ApplicationとFormはそれぞれ別のウィンドウで成り立っていて、
Formは普通に使うウィンドウなんだけれども、ApplicationはWidth, Height共に0の見えないウィンドウになっている。
また、タスクバーに表示されるウィンドウはApplicationのもので、Formのものではない事に注意。
んで、Form側の最小化ボタンを押した場合、Applicationが最小化し、Applicationが管理している全てのウィンドウの表示を消す。
同時に、Applicationも最小化し、ユーザーがタスクバーをクリックして、元のサイズに戻してくれるのを待っている。
そして、Applicationが元のサイズに戻ると、管理しているFormに通知し、再表示する処理を行ってるわけだ。
つまり839の場合、Formの最小化ボタンを押してApplicationを最小化したのはいいが、
タスクアイコンのクリックで直接Formを表示してしまったために、Applicationが最小化になったままで、
Formの最小化ボタンを押しても通知先のApplicationが「まだ最小化中」と勘違いしてスルーしているのであった。
多分。想像だから。
つまり841の言うとおりApplication.Restoreを実行してアプリケーションが復帰したと知らせれば言い訳だ。 というか答えを書かれているのになぜやらないんだろうね。
>>859 なんというか、目からウロコです。
ApplicationとFormが別のウインドウだとは想像もつきませんでした。
>>860 すいません、読み間違えです。
>まさかとは思うがApplication.Restoreをしていないなんて事はないよな?
というのを
まさかとは思うがApplication.Restoreをしているなんて事はないよな?
となぜか読んでしまったようです。本当にすいません。ごめんなさい。
そしてありがとうございました。
>>856 リストの上にボタン??
カラムヘッダーのことかな?だとしたら、TListViewでViewStyleプロパティをvsReportにして、
Columnsプロパティを設定すればヘッダーが出てきます。
864 :
デフォルトの名無しさん :03/06/17 10:18
MySQLとFireBirdはどっちがおすすめですか? (C/Sで使用します)
リストビューコンポーネントってラーニング版にありますか?
6Perにはある
>>864 DelphiスレとしてはFirebirdがおすすめ
なんといってもIBXがあるためデータグリッドも容易に使えて楽
C/Sならストアドが(フリーで)使えるかどうかということも大きい
868 :
デフォルトの名無しさん :03/06/17 13:48
くだらない質問ですいません。 httpdownloadってどう設定すればできるのでしょうか?
くだらないので答えません。 そんな前置きは不必要です。
870 :
デフォルトの名無しさん :03/06/17 14:06
くだらなくない質問ですいません DownloadFromってどう設定すればできるのでしょうか?
>>867 レスどうもっす。
Firebirdを使ってみます。
873 :
デフォルトの名無しさん :03/06/17 15:06
Delphi7でC++のオブジェクトモジュールリンクできますか?
874 :
デフォルトの名無しさん :03/06/17 15:42
s: String; sの1文字目だけを取得する賢い方法ありますか?
875 :
873 874 :03/06/17 15:44
くだらない質問ですみません。
騙りですみません。
>>874 String型は配列として扱えるので t := s[n]でn文字目がtに入る
なぜか n≦1 なので注意
イベントドリブンの質問なのでスレ違いかもしれませんがお願いします 例えばTClientSocket.OnReadでStringListの内容を書き換えている場合に、 メインフォームのボタン1を押すと、StringList.Textを クリップボードにコピーするようなプログラムをした場合、 読み込みと書き込みがバッティングして 書き込み途中の壊れたデータを読み出す可能性はありますか? またもしそうなら、バッティングを回避する為にはTCriticalSectionを使うんでしょうか
不等号の向きに違和感を感じます
やってみればわかる
>>880 非同期に読んだ場合だね?
非同期といっても結局イベントは Windowsメッセージとして送られて来ます。
つまりはメッセージループを持ってるスレッド(大抵はメインスレッド)でイベントは処理されるわけです。
よって、イベント内部でメッセージループを回さない限りは 勝手に再帰する事はありません。
>880 よっぽどでかいデータじゃない限り、StringListへの変更が終わったら、 TextCache:=StringList.Textとして、クリップボードへの貼り付けは TextCacheの方を使う、というくらいでいいのでは。
>>883 なるほど
つまりメインのVCL上でやっている限りは、どのイベントから
何にアクセスしても問題ないと考えてOKなわけですね
そのためにTThreadにSynchronizeがあるのかな
>>882 やってみようにもどうやったらバッティングさせられるのかわかりませんでした(笑)
>>884 話を簡単にするためにStringListとクリップボードで例をだしただけなので
ホントはもっとややこしいことしてるんです・・・
そうですね。 昔はTThread の SynchronizeもWindwsメッセージにしていました。 別スレッドとの同期をWindowsがやってくれるので便利ですね
887 :
デフォルトの名無しさん :03/06/17 22:40
var ST,ST1: TMemoryStream; /// ST := TMemoryStream.Create; ST1 := TMemoryStream.Create; /// ST1.LoadFromFile('...'); ST.Write(ST1,ST1.Size); ClientSocket1.Socket.SendStream(ST); とすると、うまくストリームの内容が送信されていません。 何がおかしいのでしょうか?
>>887 Streamポインタが変なところにあるから。とか。
メッセージボックスとか表示するとメッセージ回るよね
890 :
デフォルトの名無しさん :03/06/17 22:44
その前に ST.Write(ST1,ST1.Size); でSTに追加できますよね?
891 :
デフォルトの名無しさん :03/06/17 22:55
すみません。やっぱ、Streamを文字列に変換する方法 教えてください・・・。
893 :
デフォルトの名無しさん :03/06/17 23:34
調べて分からなかったのです・・・。
某所で「MemoryStreamをStringに代入する方法」を聞いてるヤツがいるなぁ…。 だから何だってことでも無いんだが。
>>887 は俺じゃねぇぞ・・・念のため・・・匿名掲示板でメンツを守るってのもアレだが・・・
TrackBar の使い方のというかアクティブの方法なのですが、 プロパティTabStopをFalseにしてフォームに配置すると最初はフォームがアクティブなのですが TrackBarをスライドさせるとTrackBarがアクティブになるようでカーソルなどがTrackBar に反応してしまいます。 キー入力をフォームで拾いたいのですがどうすれば、TrackBarをスライドさせる前のように もどせるのでしょうか?
[致命的エラー] UxThemeRT.pas(402): ファイル '..\obj\UxThemeRT.dcu' を作成できません ってエラーがでます
>>898 エミュレートについては合法なのだが、
その手のゲームサーバーは
ごめんミスった。 その手のゲームサーバーはマップデータとかないと無意味。 そのデータなどは自作じゃなければいけません。 データを自作できる人がコンパイルで悩むはずがまずありません。 つまり貴方にそのソフトは使えません。 OK?
>>899 そのエラーだけしかでていないのですね?
それでは何が原因かを突き止めるのは、不可能です。
諦めてください。
質問スレで一番嫌われるのは小出し野郎です。
>ファイル '..\obj\UxThemeRT.dcu' を作成できません から察するにプロジェクトオプションのユニット出力ディレクトリが"..\obj"になっているようだが。 .dprのあるディレクトリの上にobjディレクトリを作るか、 プロジェクトオプションを修正しないとだめぽ。
904 :
デフォルトの名無しさん :03/06/18 09:36
Delphi7でRave帳票ツールが付いたのは良いとして、 QuickReportのソースはどうなるんでしょう? コンバートできるのか、ライブラリだけは残してくれてるのか?
>>891 >すみません。やっぱ、Streamを文字列に変換する方法
いくつかあるけど確実なやつ
with TStringList.create do
LoadFromStrem( aTStrem );
ResultString := text;
Free;
end;
With TStringStrem.create do CopyFrom(sTStrem, 0); ResultString := DataString Free; end; でもよいかな?
>>906-907 素直な初心者がそのまま書いてエラーがでてまた質問というのもなんだから…
・2行目にbeginを入れる
・念のためtry finally文で確実にFreeさせる
こんなところでしょうか
>>904 >ライブラリだけは残してくれてるのか?
QR ライブラリは添付されています。
ML の記事を中途半端に読んでこっちで質問か?
>>908 try finally文ってなんですか?
914 :
デフォルトの名無しさん :03/06/18 15:53
begin Label1.Caption := IntToStr(GetTickCount); Label2.Caption := IntToStr(GetTickCount); end; というのを、わざわざ↓のように書くメリットは何かあるんでしょうか? var sGTC: String; begin sGTC := IntToStr(GetTickCount); Label1.Caption := sGTC; Label2.Caption := sGTC; end;
begin Label1.Caption := IntToStr(GetTickCount); Label2.Caption := Label1.Caption; end;
>>914 釣りか?
上と下の結果は同じにならんように見えるが・・・?
TFindDialogの「検索する文字列」の内容が書き換わったら ある処理をさせたいのですが、これは可能なのでしょうか。 可能ならば、その方法を教えていただけないでしょうか。 よろしくお願いします。
つまり、コードが少し横に長くなるけれど変数を使わないでも再現できるのに、 わざわざ使う必要があるのかどうかということ。
じゃあ、GetTickCountじゃなくてGetDC(GetDesktopWindow)で
あえていえば、意味のある名前の変数を使うことで 若干可読性が増すという程度かな Label1というのがもっと意味のある名前だったら本当に不要かもしれん (この値を他にも使うのなら話は別)
変数を使わないことによる処理速度の高速化とかは無いのですか?
with文拡張してくれ with .Caption do Label1. := Label2. ; ただしモニタが小さいと.が見えないという諸刃の剣
>>921 ほぼない。
ただしWin32API(GetTickCount)の呼び出し回数を減らすと高速化につながることはある。
.Caption.Label1. := .Caption.Label2. ;
>>921 プロパティをひとつの関数内で二回以上読んでいたら、変数にキャッシュした方が速くなる(場合もある)
プロパティの値を読み出して、 その値を他のプロパティにセットするのはあまりおすすめしない。 モノによっては読み出すだけでも多くのステップ踏んでいたりするので。 (中身を理解しているのなら別だけど)
>>926 頭固すぎ。GUIまわりでそこまで気を使う必要はない。
せめて具体的に問題になるケースくらいageたら?
TCustomWinSocketの質問です サーバーから100バイトのデータを送ったとして、 クライアントでReceiveLength=100を受け取ったけど ReceiveBuf(buffer, ReceiveLength)の返り値が80だった場合、 直後に再びOnReadが呼ばれるんですか? それとも自前でもう一度ReceiveBufを呼ばないとダメですか? それとTClientSocketとかだと確かデフォルトでTCPなので ReceiveLength自体が80とかになるという事は無いと思うんですが あってますか?
>>927 知っててやってるのと
知らないでやってる場合だと
問題が起きたときに対処の仕方が変わってくると思うけど・・・
だから知っておくことは必要だし
知ってるなら普通セーフティなコードを書くんじゃない?
そうなんですか。 では、変数を使って可読性向上と高速化を図ることにします。
Delphi 7 Personalでmp3のプレイリスト(m3u)を作りたいのですが。 TIniFileのような比較的簡単に書き込めるオブジェクトは用意されているのでしょうか? それとも、あの書式で書いて直接出力するしかないのでしょうか?
>>929 だからその問題って何?
すくなくともまともなGUIコンポーネントではそんな問題はみたことないね。
TYourLabel.GetCaptionが一時間かかるなんてケースを想定することは可能だけど
そんな妄想上の超例外ケースを持ってGUI周りのコーディング全てに
>>926 の制約を課す意味はないよ。
>>931 m3u専用のはないです。
TStringListとFormatを使えばできるでしょう。
Text型変数とWriteLnで上等じゃ…
まあTextFileだと編集が面倒だしね
936 :
デフォルトの名無しさん :03/06/18 23:09
蛾次郎ヅラ
誤爆すみません
Delphi 6 Personal って、デバック関係にバグがあるらしいですが、どんなバグですか?
>>914 一般論として、関数/プロパティが内的副作用を持つかどうかがわからないときは、結果を
変数で受けてそれを再利用すると潜在的問題を回避できる。
最初の例の GetTickCount は、呼び出すたびに異なる値(Windows 起動時からの Tick (55msec?) 単位の積算時間)
を返す可能性のある関数なのだから、ラベルごとに GetTickCount を呼んでしまうと意味が変わってしまう。
逆に、副作用が存在しないこと(複数回呼び出しても一回呼び出しても意味が同じ)場合は
動作的にも性能的にも大差はない。
DelphiにはWindowsの音量を変更する関数またはクラスなどあるのでしょうか。 やはりAPIを直接使うしかないですか?
躊躇せず、API を使いましょう。
API
945 :
デフォルトの名無しさん :03/06/19 06:37
初めてのプログラム板に流されてきました。 ① もし A かつ B ならば not B にして、C する ② もし A かつ not B ならば B にして、C する これを書けばこんな感じなのでしょうか? if A and B then not B C if A and not B then B C ①②両方を行いたいのですが、永遠にループしてしまいます。 そうではなく ①の場合は②を一度行って終わり。 ②の場合は①を一度行って終わり。 このようにしたいのですがどうすればよいでしょうか? 質問しておいてモウシワケナイのですが、delphiに限らずプログラム全くわかりません。 どうぞよろしくお願いします。
① if A and B Then なにか:=not B ; C; end; ② if A and (not B) then なにか=B ; C;end; ①の場合は②を一度行って終わり。 ②の場合は①を一度行って終わり。 if A then begin case B of true: begin なにか=not B; なにか=B; end; false:begin なにか=B;end; end; C; end; not B にするのが B自身であるならば ①を実行すれば B=not B=false になり ②を実行しても B=B=falseであるので if A then begin B=false; C; end;
いまいちわかりづらいが、行間を読み取ってあげよう。 A も C も影響が出ないようなので省略すると ① もし B が真 なら B を偽に ② もし B が偽 なら B を真に こういうことなら、確かに永久ループだね? この事実を踏まえて、もう一度質問を練り直して。
>>945 考え方としては、問題に共通している部分が無いかよく見る事
今回は1と2でどちらも「Aであり、かつ」が出てくるので
まず「Aであり」でくくってしまう。
if A then
begin
end;
次に「~してC」も共通しているので、さっきくくった部分の
最後でやってしまう。
if A then
begin
C;
end;
あとはCする前にBをどうするか考えるだけ。
if A then
begin
B := not B;
C;
end;
949 :
デルファイの名無しさん :03/06/19 08:06
if A and B then not B C if A and not B then B C これなら上の文から順に実行されるんだから、上のに当てはまったら、 下にも当てはまって下の結果になるし、 下に当てはまっても下の結果になる。 どっちかだけを実行したい場合は1つの文にすればいい if A and B then not B C else if A and not B then B C ~~~~
950 :
デフォルトの名無しさん :03/06/19 08:17
not B にして、C する → オッパイ揉むのをやめて、挿入する?
よそ逝け
次スレ立てれ
リージョンを扱うオブジェクトってないんでつか?
954 :
デフォルトの名無しさん :03/06/19 10:09
TQuery.RequestLiveってのがありますよね。 TIBQueryではどのプロパティが該当しますか?
>>954 RequestLive は BDE の固有機能。IBX ではできない。
キャッシュアップデートを使えば同様のことは可能。(BDE も内部で同じことをやっている)
>>953 ない。
API 呼び出しを躊躇しないこと。
960 :
デフォルトの名無しさん :03/06/19 11:21
>RequestLive は BDE の固有機能。IBX ではできない。 あ、RequestLiveをfalseにしとかなきゃエラーになりやすい、と考えてましたが、 つまりはfalse状態てことですか。
963 :
デフォルトの名無しさん :03/06/19 13:00
thanx!
>>962 自分使ってるのBCBだから大丈夫でつ。
で、コンポーネントも常時調べとかないと、知らないうちに進化するんですね。
964 :
デフォルトの名無しさん :03/06/19 14:53
Sleepの操作を受け付ける版ないですか?
966 :
デフォルトの名無しさん :03/06/19 16:43
D:\cool\kakinotane.s7.xrea.com\dirDelphi2\s033.html ここの、 procedure TForm1.SpinEdit1Change(Sender: TObject); begin PaintBox1.Canvas.Pen.Width := SpinEdit1.Value end; にセミコロンがいらないのはどうしてなのですか? セミコロンをつけてもつけなくても問題なく動作しました。 どちらが文法として正しいのか等、教えてくだすれ お願いします。
Print~以降に文がないから、区切る必要ないからじゃね? 付けた方がいい
>>966 begin 文 ; 文 ; 文 ; 文 ; 文 end セミコロンは文と文の「区切り」
begin 文 ; end 文の後に「空文」があるとみなされる
つながらないみたいす。
http://www.ss.u-tokai.ac.jp/~kikyo/02/lexa/pascalc.txt こっちはつながりまった。
開発中にusesをいろいろ変更してると、いつも不満に感じる事があります。
おそらくPascalの文区切りの思想と通じる所だと思いますが
uses
a,
b,
c;
の記述でcをコメントアウトしたいときに
行頭に"//"つけるだけじゃなくて、セミコロンとカンマを
付け直すのが、面倒で面倒で…ハァ
何かよい解決方法ありませんか?
逃げとして、cの位置にはいつもusesするユニットを
もってきて、開発中にコメントアウトはしない。という手段は使っています。
using a;
using b;
using c;
という記述も取り入れてくれないかな…
uses yours, windows;
普通 作成中は uses a , b , c ; こう書かないのか? 俺だけか?
レスありがとうです。
∧,,∧ /
>>971 さん
ミ,,゚Д゚彡 < Unitを作っているとwindows.pasも
ミ つ旦)~~ \ 使わないときがあるので…
>>972 さん
・・・・・
えっとそれでは、aをコメントアウトしたい時
同様に困るかと…
男ならコメントアウトなんぞしないで、ガンガン削除しろ!
自分はどっちかいうと IDE が勝手に カンマを後に残して分割するのがちょっと嫌だな。 行を分割する時はカンマを左にもってきて欲しい。
言語仕様の制約を超えた万能解などあるわけもない。
>>970 空っぽのユニットを用意してそれを参照する,というのはどうでしょ.
uses
DUMMY // ←空っぽのユニット
{$IFDEF USE_HOEHOE}
, HoeHoe
{$ENDIF}
;
まあ var もtype も複数書けるんだら uses も複数書けて良さそうなもんだけど、 といって今さらそれが出来ても下位互換考えると そういう書き方は出来ないしね
>>977 それなら、typesとかsysutilsとかmathとかを先頭にしておけばいいじゃんと思ってみたり。
よくよく考えてみれば、typeやvarも、";"を書いても尚且つその節自体は継続されるのだから、 usesも","じゃなくて";"でいいじゃんという気はして来た。 Pascalの文法的には、節は必ず予約語で始まっているので、混乱は無い。 uses A; B; C;
{}←この括弧ってコメントとして使っていいの?
∧,,∧ ダミーunit使う
ミ,,゚Д゚彡 手はありそうですが、、
ミつ旦(ミ なんかちょい嫌かも。
~と,,,~),,~)
>>979 さん
それらなら、Exeのバイト増えないのかな?
SysUtilsにはinitializationがあるから、ちょっと増えるかも。
下位互換性を考えるとか以前に
コンパイラをちょと修正ってことは
ほとんどないすよね....
>>980 さん
。NET化にともなって、
言語仕様もちょっとずつ変更してしまって欲しいなぁ。
usesの名前空間については実装されても、
結局uses 某.A, 某.B, 某.C;形式らしいっすね。
そんな瑣末なところで悩むのはお前だけ。
おかげさまで理解出来ました。 皆さん、レスありがとうございました。
∧,,∧ そぉね。 ミ,,゚Д゚彡 ミつ旦(ミ はやくでないかな、Del.NET
そんなにはやくいらないよ。 まだまだ .NET が市場的立ち上がってないんだからさ、 もっと時間かけて Delphi.NETで .NET 引っ張れるくらいに成熟させてから出して欲しいね。
>>979 その用途なら system が最適だと思うのだが
しかしそれをやると2重定義になるのが残念なんだよね
>>987 そんなにはやくいらないよ。
まだまだ .NET が市場的立ち上がってないんだからさ、
もっと時間かけて Delphi.NETで .NETの足を引っ張れるくらいに成熟させてから出して欲しいね。
991
梅
994 :
デフォルトの名無しさん :03/06/21 20:13
996 :
デフォルトの名無しさん :03/06/21 20:16
う
め
oljhn
;knn mk; mm
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。