モナーの *やさしい* Delphi質問スレ Ver2
01/10/15 11:36 DELモナーがどんな厨房疑問でもやさしく答えます。 DELモナは時に私であり、時には別の人。 他のスレに書き込んで罵倒される前に、まずここで質問しよう。 ∧ ∧ ( ´∀`)( )
Ruby!
新スレおつかれ>DELモナー 最近あまり出てこないので、DELギコと間違われて刺されたのかと 思ってたよ。
5 :
デフォルトの名無しさん :02/01/22 10:44
Delphi6 Personalを一度アンインストールしたいのですが、 アプリケーションの追加と削除にDelphiの項目が無く、アンインストーラーも見当たりません。 どうすればアンインストールアンインストール出来るのでしょうか
フォルダごと削除
7 :
デフォルトの名無しさん :02/01/22 11:02
DirectInput使うとかいうのは無しで5ボタンマウス対応にするAPIがわからん なんでD6は3つしかマウスに対応しないんだ? エクスプローラーも対応しているのに おせーて
8 :
デフォルトの名無しさん :02/01/22 11:21
>6 それも考えたのですが、それだとレジストリにゴミが残りませんか? 問題無いのならフォルダごと削除しますが・・・
俺は追加と削除の項目に Del6あるけど、 ない人もいるのか
>>8 フォルダごと削除して再インストール。そのあとアプリケーションの追加と削除からアンインストール。
やっぱりなかったら諦める。
5 はどうやってインストールしたんだろう。
クラック
13 :
デフォルトの名無しさん :02/01/22 11:58
Delphi に VB のような、コントロール配列はありますか? 大至急、マジレス頼む!
>10 アンインストール出来ました。ありがとうございました >11-12 BolandのサイトからDLし、インストールキーを取得して あとは画面の表記に従ってインストールしていきましたが・・・
16 :
デフォルトの名無しさん :02/01/22 13:02
>10 どうもです。あせってると駄目だ。 ハマリ脱出!
>>15 なんというか、インストール/アンインストールはインストールシールド(と Windows Installer)の
管理する部分だから Delphi とは関係ない。
インストールしないでクラックしてバイナリを手に入れる位のスキルの持ち主なら
こんなタコな質問はしないだろうから、インストールユーザーとアンインストール時の
ユーザーが異なっている。ってくらいかな?
>>18 あるいは、インストール後にマシンがトンで、
レジストリがインストール前に戻ってしまったとか。
>>19 あるいは XP/Me のシステムの復元でレジストリを元に戻してしまったとか。
>>20 あるいはインストールもせず使ってもいなかったとか。
Delphi6PersonalにIndyをインストールしたいんですが、 バッチフィルを起動してもエラーでインストール出来ません。 どのようにすればインストール出来ますか?
∧,,∧ / ̄ ミ,,゚Д゚彡 < 日経ソフトに書いてあったような... (ミ ミ) \_ 〜ミ ミ ∪''∪
>>23 今月号ですか? だとしたら本屋に逝ってきます。
25 :
DEL初心者 :02/01/22 14:54
D5を使っているのですが動的配列は常に連続してメモリ上にあるのでしょうか? 例えば var Data : array of longint; begin Setlength(Data,100); // 処理(ここで配列の数がかわる) // ストリームに書き出し Stream.Write(Data[0],SizeOf(Data[0])*Length(Data)); の様にやっても大丈夫でしょうか? HELP見たけどいまいちわかりません よろしくお願いします。
すみません訂正です 誤:// 処理(ここで配列の数がかわる) 正:// 処理(ここで配列の長さがかわる)
>>25 連続していると仮定していいはずです。
動的配列は参照カウンタ、長さ、実際の配列しか定義がないからです。
ObjectPascal言語ガイドのメモリ管理を参照してみてください。
>>27 ありがとうございます!すっきりしました
Helpのメモリ管理知りませんでした
実数型の所が手書き風味で良いですね(w
>>24 立ち読みしてきましたけど、インストールの方法は書いてなかったです(涙
あれは US のライブラリかどうかをチェックしているのだ。
>>31 おかげさまでインストール出来ました、ありがとうございました。\(^o^)/
33 :
デフォルトの名無しさん :02/01/23 01:01
だれかいます?
いますが、何か?
35 :
デフォルトの名無しさん :02/01/23 01:23
WinHndd := FindWindow('TfrmChat', nil); SetForegroundWindow(WinHndd); EdtHndd := FindWindowEx(WinHndd, 0, 'TRichEdit', nil); SendMessage(EdtHndd,WM_PASTE,0,0); Ebtnn := FindWindowEx(WinHndd, 0, 'TButton', nil); SendMessage(Getparent(Ebtnn),WM_COMMAND,1,(BN_CLICKED shl 16) + Ebtnn); これで偽メッセンジャーからクリップボードの内容を送信できると 思うのですが実行しても送信できていませんわかりますでしょうか??
デバッグを人にまかすな。ボケ!
37 :
デフォルトの名無しさん :02/01/23 02:02
やはりあなたでもだめですか ふぅ・・・
38 :
デフォルトの名無しさん :02/01/23 02:56
39 :
冒険開始1日目 :02/01/23 03:25
コンポーネントパレットの[Additional]ページにある ActionManager コンポーネントてのはD6Personalでは使えないんですか? それとも、アップデートすればイイだけのことですか?
>>38 この程度のバグを取れないようでは困ると思うが...
バグは2カ所。
TForm1.socServerClientRead で,一つのイベントに対して
Socket.ReceiveText と (socServer.Socket).ReceiveText の2カ所で
文字列を取ろうとするから2回目でエラー。
TForm1.Button3Click で,EdtText.Text をクライアントに送り返すはずのコードが
なぜか ReceiveText を SendText しようとしている。何も受信していないだろ?
もし,周りにデバッグのうまい人がいたら頼み込んでデバッグの現場を見せてもらいなさい。
他人のデバッグ手法は見ていておもしろいぞ。
逆立ちしてデバッグするの?
43 :
前スレではお世話になりました :02/01/23 11:00
細かい質問をちょこちょこっと。 お時間がございましたら答えてやってください。 1) iniファイルにFont.Styleの値を保存しようと思うのですが、 これはWriteStringではダメなんでしょうか? 2) メモ帳の「右端で折り返す」処理を実装しようと思い、 以下のようにCheckdで作成してみました。 procedure TForm1.TurnOnRight1Click(Sender: TObject); begin {[設定]-[右端で折り返す]} // Checkedの反転&スクロールバーの処理 If TurnOnRight1.Checked Then begin Memo1.ScrollBars := ssBoth; TurnOnRight1.Checked := False; end else begin Memo1.ScrollBars := ssVertical; TurnOnRight1.Checked := True; end; end; これ、使っている分にはちゃんと折り返されてるみたいなんですが、 こんなんでいいんでしょうか?(邪道っぽい気がするもんで) 宜しくお願いします(´∀`)ノ
>>43 1)だけ。
型が違うやん。
ini.WriteInteger(Section, Ident, Byte(Font.Style));
でどうよ?
>>44 さん、出来ました(笑
てっきり[fsBold]だからStringかと思ってたのですが…。
回答有難うございました(´∀`)
46 :
デフォルトの名無しさん :02/01/23 11:43
>>43 では2)
TurnOnRight1.Checked := not TurnOnRight1.Checked;
Memo1.Wordwrap := TurnOnRight1.Checked;
if TurnOnRight1.Checked then
Memo1.ScrollBars := ssVertical
else
Memo1.ScrollBars := ssBoth;
>>43 さん
解決されているようですが… こんなんも出来ますよん
uses typInfo; // どっかにあるので探してね
//オブジェクトインスペクタ風味の書き出し
ini.WriteInteger(Section, Ident,GetSetProp(Self.Font,'Style',true));
48 :
デフォルトの名無しさん :02/01/23 11:51
>>47 もうちょっと頑張れば 文字列としても取り出せるよ
げは…また間違った ini.WriteInteger( は ini.WriteString( です。 逝ってきます
>>50 はい。すみません(汗
一応投稿前にCTRL+F9押してエラーが無いことを確認したのに…
IEだったら意味無かった
>>41 ほんとうにどうもありがとうございます。
なるほど、ReceiveTextのヘルプにもそう記述されていますね。
デバッグ手法を見たいのは山々なのですが、
私はアマチュアで、まわりにDelphiを使う人が一人もいないので
独学でやるしかないのです…
ついでに… ローカルアドレス ローカルホスト リモートアドレス リモートホスト の違いを教えてくれませんか…
>>53 ヘルプで「ソケットコンポーネント」を検索すると「ソケットコンポーネントの使い方」と
いうのが出てくるから、それを順に読め。
独学ならば、それこそ調べる癖をつけないと困るよ。
そのことなんですが、キーワード欄に何も表示されないのは どういう事なのでしょうか。目次は存在するし、コード編集ウィンドウ内の キーワード上でF1するとちゃんと出てくるのですが。 Delphi6Pro + Win98SE です
>>55 もしかして。
ヘルプ→カスタマイズでOpenHelpを開いて、キーワードタブに登録してあるヘルプのうち
要らなさそうの消してみ。CLXリファレンスとか。
ここの容量がでかいとWin95系では表示されなくなるとかってのを聞いたことがある。
>LocalHost プロパティと LocalPort プロパティを使って, >ローカルのクライアントまたはサーバーのソケットが使った >アドレスとポート番号を確認するか,RemoteHost プロパティと >RemotePort プロパティを使って,リモートのクライアントまたは >サーバーのソケットが使ったアドレスとポート番号を確認できます。 つまり、Local は「自分」で、Remoteは「相手」ということ? Host と Address プロパティは、IPアドレスに変換する必要があるかどうかですね。 Host にはドメイン名も指定できるが、それをIPアドレスに変換する手間がかかる。 一方、Address にはIPアドレスしか指定できないが、そのぶん早く接続できると。
46、47さんご教授ありがとうございます。 46さんのTurnOnRightの例を使わせて頂きました(´∀`) 47さんの例は今度ライブラリ?を集めた時に使ってみようと思いますー で、申し訳ないのですが追加の質問を…。 上でiniファイルに保存したStyleの値を読もうとしているのですが、 Memo1.Font.Style := IniFile.ReadInteger('Font','Style',Byte(Memo1.Font.Style)); もしくは Memo1.Font.Style := IniFile.ReadInteger('Font','Style',Memo1.Font.Style); のように記述しても読んでくれません。 iniには [Font] Size=12 Color=-2147483640 Name=MS Sans Serif CharSet=0 Style=0 ← のように保存されているのでReadIntegerで大丈夫だとは思うのですが…。 (´・ω・`)ショボーン
>>58 ini.WriteInteger(Section, Ident, Byte(Font.Style));
の「Byte」の意味がわかってないね?
TFont.Styleのヘルプを見ると集合型だろ。これはIntegerと互換性がない。
だから無理矢理「これはByte型だ、Byte型と思い込め」とDelphiに教えてやってるんだよ。
だったら逆の場合も同じようにしてやらないといけない。
Integerで返ってきたものを「これはTFontStyles型だ、TFontStyles型と思い込め」とDelphiを
催眠術にかけてやればいい。
Memo1.Font.Style := TFontStyles(IniFile.ReadInteger('Font','Style',Byte(Memo1.Font.Style)));
60 :
デフォルトの名無しさん :02/01/23 14:08
こんどは読んだ Integer の値を TFontStyles でキャストしましょう
負けた…
>>61 勝ったぁ!(w
で、その催眠術は
>>60 の書いてる通り「キャスト」と言うんだよ。
50 :参加するカモさん :01/11/30 21:16 28 名前:西村の同級生 投稿日: 2001/02/12(金) 10:08 中学の頃クラスでイタズラ電話や下駄箱の靴が紛失する事件が頻発したんだけど その時、女子の間では「犯人西村」説が跋扈していた。 真相は藪の中だけど、実は私もそう思ってたうちの一人。 証拠もないのに疑いをかけるのは悪い事だと思うけど、西村にはそういう嫌疑を抱かせる 雰囲気があったのも事実。 52 :参加するカモさん :01/11/30 22:33 50を読んでも驚かないところが不思議 ふーんて感じ そういうダーティーなところも含めてひろゆきカッコイイ 53 :参加するカモさん :01/12/01 05:08 オレも52と同様、1変人として素晴らしいと感じる。 我等変態をナメるな。 ひろゆき擁護者として、間違い無く彼が犯人だったと断言するぞ。 54 :参加するカモさん :01/12/01 16:47 堂々たる変人ぶりだ、、、
>>56 おおおお
どうもありがとうございます。
ちゃんとキーワードが表示されるようになりました。
素早い解答ありがとうございます。 さっそく試したところ、見事に反映しました! もしかしたら一般的な技法なのかもしれませんが、 知らなかった分勉強になりました。>キャスト ではしばらく他のデバッグ作業に戻ります…(;´Д`)
66 :
デフォルトの名無しさん :02/01/23 17:10
やばいです webサイトの更新日を取得する方法がわかりません HttpQueryInfoですか?
67 :
デフォルトの名無しさん :02/01/23 17:53
>66 何を使ってんのか知らんけど、Headerに更新日情報は入ってるよ。
あなたは RFC から読む事をお薦めする
でも Indy とか使ってるとわからなくてもできちゃうからな・・・
HttpQueryInfoってなんなんだろ? 知ってる方いらっしゃいます?
71 :
デフォルトの名無しさん :02/01/23 18:04
とあるアプリからサイトが更新されたどうかを確認して されていたらメッセージを送るみたいなことをしたい どうだろうか?
72 :
デフォルトの名無しさん :02/01/23 18:13
どうやるのか方法をご教授して頂けませんか? どうだろうか?
tesu
ソフトの紹介ではなくて方法をご教授して頂けませんか? どうだろうか?
何の方法を教授されたがっているのだろうか? どうだろうかはどうだろうか?
>>77 WWWDのようなソフトのコードを書いてタダでよこせという意味でいいですか?
>>67-69 は読まれましたか?
>>78 とあるアプリからサイトが更新されたどうかを確認して
されていたらメッセージを送るみたいなことをしたい
ソフトの紹介ではなくて方法をご教授して頂けませんか?
HttpQueryInfoでHTTP_QUERY_LAST_MODIFIEDを取りましたが 以前の更新日時との比較のしかたがわかりません 又は、上記のやり方以外で更新日時を取る方法はあるのでしょうか?
うざい 厨房質問にも限度がある
>>76 うっ、WIN32ヘルプまでは見たのだが・・・。申し訳ないです。
>>82 なぜ比較の仕方がわからないのかがわかりません。
>82 文字列で比較して1文字でも違っていたら更新されたってことにしとけ。
全部別人が質問してたりして。
なんか教えて君が増殖しているなぁ。なんかあったっけ?
1に
>他のスレに書き込んで罵倒される前に、まずここで質問しよう。
と書いてあるのだが、肝心の*やさしい*DELモナーがいない(w
質問の仕方がなってない奴は叩かれる、典型例ですな。
いきなり
>>82 が書いてあればここまで罵倒されることもなかったのに。
「*やさしい*」が教えて君を引き寄せているのかな? しかし初代スレに比べて急に増えた気がするが。それも Delphi 系だけ。 某 ML でいじめられたから、とか 某広場でかまってもらえなくなったとか 某情報局でボロクソいわれたからとか
90 :
デフォルトの名無しさん :02/01/23 20:37
初めて書き込みします 先輩にdelphiというものを8000円で買わされしかも1週間以内に なんか作れといわれてしまいました 先輩はdelphiは本当は何万円もするぞと言ってましたが本当ですか? どうしたらいいかわかりません どうかみなさん助けてください
>>90 ネタか?
Delphiを起動してヘルプメニューからバージョン情報を見る。
Professionalと書いてあったら6万8千円、Enterpriseと書いてあったら36万円。
Personalと書いてあったら0円。
Personalに1000ぺリカ
94 :
デフォルトの名無しさん :02/01/23 21:12
>>91 箱にはPersonalと書いてあります
>>93 リンク先に行ってみましたがよくわかりません
なんか作れと言われましたが何が作れるのでしょうか?
..... それから、別の話題ですが、先日2ちゃんねるのデルファイ初心者用の 掲示板を覗いてみたら、質問をされた方が「ヘルプを読め!」と怒られて いるのを見てしまいました(笑)。ヘルプや過去ログという話はどこへ いってもありますし、自助努力という姿勢も良いことだとは思うのですが、 学校で隣の席の友人に「ねえ、ねえ」と言って訊ねたりできるという 感じがあれば助かるなぁ・・と思っています。先生に聞きに行くよりも 手軽な感じです。 具体的には、 ・「ヘルプを見なさい」「過去ログを見なさい」禁止の ・初心者同士の初心者同士による初心者同士のための ・休み時間のようなメーリングリスト。 を立ち上げようかなーどーしよーかなーと考えています。 みんなで「わからん、わからん」と言ってるような、 烏合の衆のようなMLです(笑)。
初心者には2種類あって 1.プログラムの初心者 2.Delphiの初心者 がいるんだよね。で、両方とも初心者でくくっちゃうから混乱する。 2.にはプログラムの経験者も含まれるから、いきなりAPIの 話したりDBやWebの話したりとかする(でもDelphiは初心者)。 1.こそが本当の初心者だと思うんだけどね。
99 :
デフォルトの名無しさん :02/01/23 21:39
今日初めてDelphi6をさわったのですが var iHoge: Integer; iFoo: Integer; case iHoge of 1: iFoo := iFoo + 10; 2: iFoo := iFoo + 20; 3: iFoo := iFoo + 30; end; var sHoge: String; iFoo: Integer; case sHoge of 'hoge1': iFoo := iFoo + 10; 'hoge2': iFoo := iFoo + 20; 'hoge3': iFoo := iFoo + 30; end; 文字列を使用した条件分岐は出来ないのですか?
>>99 case セレクタ式 of
ケースリスト1: 文1;
...
ケースリストn: 文n;
end
セレクタ式には順序型の任意の式を使用できます。文字列型は無効です。
101 :
デフォルトの名無しさん :02/01/23 21:48
みなさん本当にありがとうございました これで一週間後の先輩どうにかなりそうです
var sHoge: String; iFoo: Integer; begin if sHoge = 'hoge1' then iFoo := iFoo + 10 else if sHoge = 'hoge2' then iFoo := iFoo + 20 else if sHoge = 'hoge3' then iFoo := iFoo + 30; end;
前から思ってたんですけど「ほげ」ってなんですか?
>>100 そうですか、ちょっと使いづらいですね
>>102 そうすれば良いのは解るのですが
ソースのわかりやすさを考えると
case sHoge of
'hoge1': iFoo := iFoo + 10;
'hoge2': iFoo := iFoo + 20;
'hoge3': iFoo := iFoo + 30;
end;
できると幸せだなぁと思ったんですが
107 :
デフォルトの名無しさん :02/01/23 23:02
>106 TListView もしくは TDrawGrid もちろん OwnerDraw で。  ̄ ̄ ̄ ̄\/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ∧ ∧ ( ´∀`) ( )
http://homepage1.nifty.com/beny/index.html ここのサイトのモザイク処理で
var
X, Y, I, J: Integer;
xR, xG, xB, XX, YY: Integer;
Cnt, BlockW, BlockH: Integer;
pSrcCache: PCacheLines;
pSrcLine: PLine24;
begin〜〜
とありますがPCacheLinesって何でしょうか?当方D6です
>>108 BBS まで用意しているんだから作者に聞きなよぉ。
あ、すみません。では そうして見ます 急ぎだったもので・・
>>97 ∧,,∧ / たまに
ミ,,゚Д゚彡 < 人生の初心者も
Π ̄ ̄ ̄| \ まざっとる
|つオレモナー()
| |___.|
∪∪
TCacheLines = array[0..MaxInt div SizeOf(Pointer) -1]of Pointer; PCacheLines = ^TCacheLines; 自己解決。。。。あほや、自分。
113 :
デフォルトの名無しさん :02/01/23 23:44
Delphiで複数行を一発でコメントできないかな? それとも手作業なの?
>>113 { } か (* *) で囲んじゃダメ?
もしかして、全ての行頭に // を入れているの?
>>114 そりゃそーだ。ハズカシイ・・・
いやVBみたいに一括でできないかとフト思ったんだけど、俺逝ってヨシ。
Del1では、//形式のコメントは使えなかったね。
Hotkeyちゃんが自前HP作ったみたいYO! ビクーリ!でも、プロフィール無いから何歳か分からないYO!
せめて、URL書いてくれないと・・・
ウザいよ?
122 :
ビクーリ! :02/01/24 00:52
>>120 ヲッチャーなので、晒すようなことは出来ませぬ。
>122 オナニーしてな。
デルファイってどんな言語なんですか?
>124 どんな回答を期待しているのですか? あなたが使える言語を例に教えて下さい。 VC++→Microsoftが売っているコンパイラー と教えてくれれば、 Delphi→Borlandが売っているコンパイラー と答えられます。
126 :
黙阿弥上人 :02/01/24 06:29
>101 ネタじゃなかったのか? まぁ、いいさ。 よろこんでもらえりゃ。 先輩にもヨロシクな。 (これが、もって回った皮肉なら、あっぱれ!みごとなり! と賞賛に 値する。複線の張りかたなど用意周到だ) コレも人生。 合掌...
127 :
黙阿弥上人 :02/01/24 06:31
あ、 「複線」→「伏線」ね。 (俺のせいじゃねぇ、IME...)
128 :
デフォルトの名無しさん :02/01/24 08:08
>>105 処理系によってはできますね。
出来ないのはDelphiの言語仕様としか言えないです。
書きやすさに対して実行時のコストが高いからでしょう。
# それでもそんなに頻繁に使うものでもないでしょうから、
# あってもいいようなものです
ちなみにどうしてもやりたければ
文字列をキーとするハッシュに数字を割り当ててcase ofするのがよいかと。
,,,,,,,,,,,,,,,,∧,,∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 〜′,,,,,,,,,,ミ,,゚Д゚彡 < CaseStr構文でも導入してもらいたいかも UU"""" U U \_______________ ナクテモイイケド
>>130 要らんでしょ?文字列を単純な数字列にする関数内関数を書いて
constで数字列と文字列を対応付ければ済むと思うが・・・・・
おはようございます。(;´Д`)
昨日の書き込みで書いた通りFont.Styleが反映したと思っていたのですが、
今日になって実行してみるとなぜかエラーが吐き出されてしまいました。
Memo1.Font.Style := TFontStyles(IniFile.ReadInteger('Font','Style',Byte(Memo1.Font.Style)));
[エラー] Unit1.pas(100): 正しくない型キャスト
>>59 さんのアドバイスを参考にして記述したのですが、
どこかおかしな所などございますでしょうか?
ヘルプを見てみたら
TFontStyle = (fsBold, fsItalic, fsUnderline, fsStrikeOut);
TFontStyles = set of TFontStyle;
と言う記述があったのでここかと思われる場所に set of を記述してみたのですが、
これもダメなようで…。
ちなみに、当方Delphi6Personalです。
あと亀レスですが
>>95 のメーリングリストいいですね。(゚д゚)ウマー
sageてた・・・鬱
>>132 ごめん。
Memo1.Font.Style := TFontStyles(Byte(IniFile.ReadInteger('Font','Style',Byte(Memo1.Font.Style))));
だった。申し訳ない。
44さんフォローありがとうございます(´∀`) と言うか、自分でもよくわからぬままiniを実装しようとしたのも反省しとります。 とりあえずキャストはしっかりと頭に叩き込んでおきます! こちらも何度も申し訳ございませんでした。
>>107 ありがとう
ListItemにオブジェクトを関連づけるってイメージわかないんですが・・・
ListItemにクラスや配列を関連づけたりして
それに対応した処理をさせたりとかするんですか?
たとえばDBのレコードとかそういう物を関連づけたりする?
procedure TForm1.FormCreate(Sender: TObject);
var
Aho : String;
NewItem:TListItem;
begin
Aho := 'hogege';
NewItem := ListView1.Items.Add;
NewItem.Caption := 'なんとか';
NewItem.Data := @Aho; // データへの参照.
NewItem.SubItems.Add('hoge1);
end;
procedure TForm1.ListView1Click(Sender: TObject);
begin
end;
この場合のSenderってのは何が引数で渡されるのですか?
138 :
デフォルトの名無しさん :02/01/24 11:55
これからDelphiを始めるのですが、ソフトがまだ買えません。 Delphi初心者が読んで使いやすいマニュアル本などあったら 教えてください。(みなさんが使っているお勧めの本など) 本当は自分で見て選びたいのですが本屋にあまり置いてなくて 中身が見れなくて不安です。よろしくお願いします。 経験言語はaccessとCOBOLです。
>Delphiを始めるのですが、ソフトがまだ買えません。 ( ゚д゚)ポカーン Delphi6 Personal は無料ですが?
Delphi無料版をゲットォォォォ!!! スレ
>>138  ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ ̄
∧,,∧ (´´
\,,,,ミ,,゚Д゚彡 (´⌒(´
⊂,,,,,,,,,つつ.≡≡≡(´⌒;;;≡≡≡
(´⌒(´⌒;;
ズザーーーーーッ
>>137 Senderにはイベントを呼び出したコントロールが入るので
この場合はListView1辺りが入っているでしょう。
Ahoという文字列のアドレスを渡すよりは
Stringをフィールドに持つTAhoクラスでも作って
それをDataプロパに登録する方がわかりやすいかと。
ところでDelphiってDelphiで作られているのですか? だったら私でもDelphi7作れますか?
>>141 Delphi7を作るのは商標とかいろいろなしがらみでダメでしょうね
また、Delphiのフォームの使い方は特許になってるかもしれません。
世の中にはFreePascalというのがありますから、これを元にDelphi並の
ものをお考えになっては?
143 :
デフォルトの名無しさん :02/01/24 13:11
最初にコマンドラインDelphiコンパイラを作る コンポーネントやライブラリをメモ帳で作成。 Delphi統合環境プログラムをメモ帳で作成し、コンパイル Delphi統合環境の出来あがり。
いや 前足で砂をかけてる図かと
先輩だが おまえら1時間以内になんか作れ 変な入れ知恵しやがって
>>139 説明不足ですいません。
客先の都合でDelphiで開発指示がきました。
正式受注後にpro版を買って貰えるのですが、それまでの勉強と
リファレンス的な使い方ができる本が欲しいと思ったので。。
(本は自費です)
148 :
デフォルトの名無しさん :02/01/24 13:58
とりあえずPer使えよ
Perl?Haa?Ruby Only makes sense!
>>150 ありがとうございます。
「基礎編」というトコにひかれてました。
やはり実際読んだ方のお勧めを聞きたかったもので。
他に候補として他にインプレ○・オライリ○があったのですが・・・
もし読んだ方いましたらお勧め度聞かせてください。
149の馬鹿っぷりにワラタ
>>152 全部買って12万程度だよ 全部買ったら?
DelphiによるWindowsプログラミング入門 綿貫 啓一 (著) <1995/12/1< 日刊工業新聞社 :¥1,845
Delphiプログラミング大全 Programmer’s SELECTION ジェフ ダンテマン (著),<1995/12/1< 翔泳社 :¥5,631
Delphiパーフェクトマニュアル―ボーランド公式 チャールズ カルバート (著),<1996/3/1< インプレス :¥5,631
やさしいDelphi 村上 宣寛 (著) <1997/6/1< 日刊工業新聞社 :¥2,200
Delphiで作る高速CGI 田原 孝 (著) <1998/12/1< エーアイ出版 :¥3,200
ここまでできる Borland Delphi4パワーガイド 小出 俊夫 (著),<1999/4/1< 秀和システム :¥2,800
Delphi Win32 APIリファレンス Ascii books John Ayres (著), 光田 秀 (翻訳) <1999/5/1< アスキー :¥8,800
使いながら覚える Borland Delphi4プログラミング入門 やさしいWindowsプログラミング 竹田 英雄 (著) <1999/5/1< エーアイ出版 :¥2,500
Delphi 4プログラミングバイブル マルコ カントウ (著),<1999/6/1< インプレス :¥5,680
Borland Delphi4オフィシャルコースウェア クライアントサーバシステム構築編 Inprise公式コースウェアシリーズ 真木 保 (著) <1999/7/1< アスキー :¥5,200
DelphiでWindowsゲームを作ろう! 青山 学 (著) <1999/7/1< ピアソン・エデュケーション :¥3,400
Delphi4プログラミング技法〈Vol.2〉コンポーネントとDBの実践テクニック Borland Press ザビエル パチェコ (著),<1999/8/1< ピアソン・エデュケーション :¥5,700
これで完璧!Delphi5裏技170選 金井 利美男 (著) <1999/10/1< エーアイ出版 :¥2,800
基礎からわかるDelphi5 三原 幸一 (著) <1999/10/1< 秀和システム :¥2,400
Delphi Object Pascalリファレンスブック アンク (著) <1999/11/1< 技術評論社 :¥2,480
Delphi5実践データベースプログラミング―DBコンポーネントとQuickReportの活用 田中 和明 (著) <2000/6/1< カットシステム :¥3,800
Delphiデータベースアプリケーション開発ガイド―データベースフレームワークから帳票作成、Oracle8i入門まで 三原 幸一 (著) <2000/6/1< 秀和システム :¥2,800
Delphi & C++Builder即戦力コンポーネントライブラリ―Windowsプログラミングの効率アップ 中島 信行 (著) <2001/1/1< CQ出版 :¥3,000
Delphi Win32 Graphics APIリファレンス ジョン アイレス (著),<2001/3/1< アスキー :¥8,800
Delphiクイックリファレンス レイ リシュナー (著),<2001/5/1< オライリー・ジャパン :¥4,500
Delphi 魔法のTIPS 500 Programmer's Bible Series EXPERTGIG開発室 <2001/8/31< エキスパートギグ :¥8,500
Delphi6プログラミングテクニック裏技180選+新機能20選 金井 利美男 (著) <2001/9/1< エーアイ出版 :¥2,980
VBユーザーのためのDelphi6プログラミング 佐藤 親一 (著) <2001/12/1< オーム社 :¥2,600
Delphi DB&Webプログラミング 松浦 健一郎 (著), 司 ゆき (著) <2001/12/1< ソフトバンクパブリッシング :¥3,200
Borland Delphi 6オフィシャルコースウェア (応用編) Borland official courseware series 井上 勉 (著) <2002/1/1< アスキー :¥4,800
Borland Delphi 6オフィシャルコースウェア (基礎編) Borland official courseware series 服部 誠 (著) <2002/1/1< アスキー :¥2,800
Delphiゲームプログラミングのエッセンス 日高 徹 (著) <2002/1/1< ソフトバンクパブリッシング :¥3,400
>DelphiプログラマのためのCGI入門―WebBrokerでらくらくプログラミング TRY COMPUTING BOOKS >山本 秀樹 (著) この本廃刊だけど良い本だと思ってるの自分だけかな?
>>155 それも持ってるよ。
良い本だと思うけど、 お勧め出来るかどうかはその人の経験とか色々で違うからな
>Delphiパーフェクトマニュアル―ボーランド公式 チャールズ カルバート (著),<1996/3/1< インプレス :¥5,631 これ、Delphi1用。 続編がDelphi2.0J 32ビットパワープログラミング。 いい本だけど、枕になる可能性もある諸刃の剣。初心者にはお薦めできない。 それ以降のは邦訳は出てないけど、原書の方はあるらしい。
Delphiって関数の戻り値とかはどうなってるの? そもそも戻り値っていう概念が有るのだろうか・・・
>>154-
>>157 ありがとうございます。
こんなにあるんですね・・・
とりあえずインプレスは対象からハズすことにします。
∧,,∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ミ ゚Д゚ミ < 何がいいたいん?
>>158 (ミ ミつ)ビシッ\_________
〜ミ ミ
∪ ∪ カオアラッテ デナオセ
function AAA: Integer;
begin
Resutl := 666;
//AAA := 666;
end;
とりあえず
>>158 には戻り値の無い関数を教えてもらいたい…
>>160 出直します・・・
>>161 Pascalって古いイメージ有るから
Basicみたいにサブルーチンしか無かったらなぁと思ったり
なるほど…確かにPascalは1623年生まれだからな…(とボケてみる)
C(hrist)は紀元前4年頃だっけ
166 :
デフォルトの名無しさん :02/01/24 20:12
TStringGrid では、一つのCellに表示できるのは1行だけですよね。 Borlandのサイトには複数行表示できる物が載っていますが、 WordWrapできる複数行 TStringGrid はどこかにないでしょうか。 今は TDrawGrid を継承して、自力で描画しています。ところが、 TStringGrid のように、各セルに文字列を関連付ける方法がわからなかったため、 OnDrawString というイベントを作って、その都度書きこむ文字列やフォントを 指定しています。
>>162 多子化Cの一年先輩だった気がする。
アセンブラマンセーのリッチーらにオモチャってコケにされたんだっけ?
すいません クラスメンバーの可視性で質問なのですが… 疑問@ type TForm2 = class(TForm) Button1: TButton; この場合Button1はパブリッシュメンバーになるのですよね? 疑問A type TMyClass = class(TObject)
すみません 途中で投稿しました…(鬱 疑問A type TMyClass = class(TObject) hoge : TList; この場合hogeは何になるのでしょう? {$M+}の時はバブリッシュ? それともいつでもパブリック? 特に問題は無いのですが気になって…
>>166 >OnDrawString というイベントを作って、その都度書きこむ文字列やフォントを
>指定しています。
そこまでできるならコンポーネントにできるだろうに。
抽象化能力が足りないのかな?でも自分で作って自分で使うのなら
それでも良いと思うよ。
171 :
デフォルトの名無しさん :02/01/24 20:30
ちょっとお聞きしたいのですが タブを利用したプログラム(同じタブを沢山)で オブジェクト(ボタンとかリストとか)を動的に作成したいのですが その場合は タブに含まれるオブジェクトを格納するクラスを作って 新しいタブを作るときに動的配列にそのクラスを生成すればいいのですか?
まずやって、それでダメなら聞いてみてください
∧,,∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ミ,,゚Д゚彡 < 今日は冷えるね
,;゙ ミ \_____________
ミ. ミ
/゛゛゛゛
>>168-169 @publishというよりpublicですが
あまりButtonの属性は気にせずにどぞ。
DelphiIDEが管理する部分なので
自分でコード書くときはprivateとかpublicとか
に書くようにしませう。
Aちゃんとprivateとかpublicのトコに移動
させて、くださいな。
publicとpublishってオブジェインスペクタに現れる
かどうかだけだからButtonやhogeは
public族生だと思われ。
>>172 あわわ、すみません とりあえずRTTIが有るのか調べてみます。
>>172 各オブジェクトのparentをTABページにすること。
176 :
168=Delphi初心者 :02/01/24 21:52
>>173 Delフサギコさん
すみません 寒い質問ばかりで…(汗
色々調べたのですがやはり{$M}に左右される様です。
{$M+}だとパブリッシュ で{$M-}でパブリックのようです。
>publicとpublishってオブジェインスペクタに現れる
>かどうかだけだからButtonやhogeは
>public族生だと思われ。
これはpublishedだとメンバが呼び出されていなくても
実行コードに埋め込まれる点を除いて同じようです。
#RTTIに載るメンバのコードは必ず実行コードに含まれるようです。
HELPには{$M-}の状態で{$M+}でコンパイルされたクラスの
派生クラス以外はPublishedメンバを作れませんと書いてあるし…
(Del5)
うーん TP3→TP5→Del1→Del5 と某社の使ってますが
HELPの難解度は変わりませんね(w
いや、そうではなくて ホントに気温が低いって言いたいだけです。 . ̄ ̄∨ ̄ ̄ ̄ . ∧,,∧ 質問内容はスッキシして ミ ゚Д゚ ミ いいと思うです (ミ ミ) というか、凄い事追求されてますのね。 〜ミ ミ ∪''∪ ゴメンヨ マギラワシイ コメントデ 俺の部屋、1Fなので 床下から冷えがね。結構、くるのよ ああ、寒い寒いわ〜
178 :
名無しヘタぐらま ◆B18Bks.Y :02/01/25 05:12
>>177 Delフサギコ さん
うう。。深読みしすぎました すみません(汗
ブランクが長かったのとWinベース(Del)になってからちゃんとクラス型のことを
調べずにやってたandちょっと暇が出来たので最上位クラスから見直そうかと思い
色々やってます。
ってか HELPを読み直すと「クラスメンバーの可視性」でちゃんと書いて有りました(鬱
でも「パブリッシュメンバー」の最後の説明はよくわからない(w
TP5やってたからなんとなくわかるけどDelからいきなり始めた人はOOPを覚えるの
大変じゃないのかな?OOP周りのHELPが殆ど無い&ボロボロのような気が…
俺がアフォなだけという可能性が高いですが(鬱
>>177 うう、わざわざありがとうございます。
でもごめんなさい、超重要なことを忘れてました。
どうして悩んでるかといえば、WORDWRAP 自体には、それほどの問題はないのです。
問題は、
「WordWrapされた文章が常に全部表示されるように、その行の Height を自動調整したい」
ことなんです。Drawイベント時に、その行に含まれるセルの中で、最も
Height を必要としているセルを割りだし、そのHeight値を得て、その行のHeightを設定しています。
でも、すごく処理が重くなってしまうのです。たまに再描画されないときもあるし、
最後の1行(セルの行ではなく、セルに含まれる文字列)が表示されないときもあるしで…
最終的に何がしたいのかというと、
(1) Gridコントロールの横幅にあわせ、一番右側のセル列の幅を自動調整する(横スクロールバーを出さないように)
(2) 各セルに表示された文字列を、セル内での横スクロールをしなくても読めるように、WordWrapしておく。
(3) 各セルに表示された文字列を、セル内での縦スクロールをしなくても読めるように、セルの高さを自動調整する。
(4) 各セルにフォント情報を埋め込めるようにする(Cells[x,y].Fontみたいに)
こういう事をしたいのです。
いや、「なら、つくれよ」といわれれば確かにその通りですし、
作ったのですが、どうにも効率が悪いような気がして…
前スレからずっとテキストエディタ作ってます。ヽ(;´Д`)ノ
今は参考書なども購入してなんとか調べつつ作っている状況でございます。
完成度はだいたい90%くらいでもうすぐ終わりそうなんですが、
結局今日も懲りずに質問に参った次第でして…。
最後にGUIアプリによくある「実行ファイルにファイルをドラッグ&ドロップすると
ファイルを読み込む」と言うのを実装しようと思ってます。
んで自分なりに調べた所、前にやってたVBだと
command.comから引数を取ってなんちゃら…と言うのがあったと思ったので、
Delphiでもそれを応用してみようと思ったのですが、
…いかんせんまだ初心者なんでどうにも調べようがなく…(;´Д`)
(Memoコンポーネントにドラッグ&ドロップするのは出来たんですが)
厨房的な質問ではございますが、ご教授頂ければ幸いです。
>>52 さん
私も学校の課題で自分しか学んでないのでかなり孤独です。
VBに詳しい友達となんとか手取り足取りやってますが、
やっぱり噛み合わない部分も多かったりでいろいろ疲れますな(笑
でも、ParamStrだと、スペースの入ったパスが分割される問題が。 Name1 := ParamStr(1); Name2 := Name1 + ' ' + ParamStr(2); if FileExists( Name2 ) then FileName := Name2 else if FileExists( Name1 ) then FileName := Name1 else FileName := ''; とか?
>180 >(4) 各セルにフォント情報を埋め込めるようにする(Cells[x,y].Fontみたいに) StringGridならObjectsプロパティを利用するのがいいのだろうけど、DrawGridにはないのか・・・。 Grid系って妙に重いような気がするので、1から作っちゃった方がいいかもしれない。 昔、マインスイーパーをDrawGridで作ったらゲームにならなかったのでPaintBoxで 描画するように作り直した覚えがある。
>>179 RTTIを利用したいかどうかだけなので、あんまり考えなくていい所のように思います
フォームを継承するような場面で、そのユニットには.DFMを持たせずに
下位クラスの別.DFM で初期化させたい時とかには手動で書いたりしますけど
後、RTTIを使って 列挙型の文字列を取りたい時くらいかな
>>183 Drag&Dropなら ""が付いて自動的にParamStrが解釈して ""を取り外してくれるよ
コマンドライン入力がそのまま欲しい場合は GetCommandLine というAPIを使うといいよ
沢山の回答ありがとうございます。 やはりParamStrを使うのですな。(182,183さん) 187さんのGetCommandLineと言うのも良さそうなので、 とりあえず自分なりに解釈して頑張ってみます…。 ハマったらまたお世話になるかもしれません(;´Д`)(ぉ
189 :
43@ハマリ中 :02/01/25 13:36
すいません、ParamStrについて質問させてください(;´Д`) Param関数において、 ParamStr(0)が実行ファイルのパス、 ParamStr(1)がその後に続く値、 ParamStr(2)がその後…と言う感じに続くのであれば、 Windowsの[ファイル名を指定して実行]で行うコマンド… つまりはメモ帳にパラメータを追加して実行するみたいに notepad testfile.txt ↑ ↑ ParamStr(0) ParamStr(1) と解釈して良いのでしょうか? それだとParamStr(1)に対する処理を書けば良いのかな? と思っているのですが…。
>>189 その通りです。ParamCountで数がわかります
IDEの実行メニューの実行時引数に色々入れて試してみては?
>>189 うろ覚えだけど ParamStr(0)はフルパスじゃなかったかな
notepad testfile.txt "this is a pen.txt" なら ParamStr(0) = c:\windows\notepad.exe のようにフルパス ParamStr(1) = testfile.txt ParamStr(2) = this is a pen.txt のように " は除かれる
>192さん では、空白の入るファイル名に関して特に懸念することは無いのでしょうか?
>>193 無い
ためしにやってみれば判るが 複数ファイルを同時にD&Dしても自動的に""が付いて
Delphi側で除かれるから
ありがとうございます。 しばらく作業してみます。
>>178 ×→DrawCellEx
○→DrawTextEx
×→Options := DT_NOPREFIX or DT_WORDBRAK;
○→Options := DT_NOPREFIX or DT_WORDBREAK or DT_EDITCONTROL;
>>180 文字列グリッド(TStringGrid)で作ってみました.Delphi4以降専用です.
(セルごとのフォント指定は実装していません)
フォームに文字列グリッドを貼り,グリッドのAlignプロパティをalClientにして,
フォームのOnCreate,OnResize,グリッドのOnDrawCellイベントハンドラ
およびUpdateCellHeightsメソッドを以下のように書きます.
const
cDefaultDrawTextOptions = DT_NOPREFIX or DT_WORDBREAK or DT_EDITCONTROL;
procedure TForm1.FormCreate(Sender: TObject);
var
aRow, aCol: integer;
begin
for aRow := 0 to StringGrid1.RowCount - 1 do
if not (aRow in [1, 4]) then
for aCol := 0 to StringGrid1.ColCount - 1 do
StringGrid1.Cells[aCol, aRow] := format('This cell is %s 行 %s 列', [
StringOfChar('R', aRow), StringOfChar('C', aCol)]);
end;
procedure TForm1.FormResize(Sender: TObject);
begin
// グリッドのセルの幅の変更…(1)
StringGrid1.DefaultColWidth :=
StringGrid1.ClientWidth div StringGrid1.ColCount - StringGrid1.GridLineWidth;
// グリッドのセルの高さの変更…(3)
UpdateCellHeights;
end;
(つづく)
(つづき) procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin StringGrid1.Canvas.FillRect(Rect); // ワードラップして描画…(2) DrawText(StringGrid1.Canvas.Handle, PChar(StringGrid1.Cells[ACol, ARow]), -1, Rect, cDefaultDrawTextOptions); end; // グリッドのセルの高さの変更…(3) // フォントやセルの文字列を変えたときにはこのメソッドを実行してください. procedure TForm1.UpdateCellHeights; var aRow, aCol, MaxHeight, aHeight, MinHeight: integer; aRect: TRect; begin MinHeight := StringGrid1.Canvas.TextHeight('gM'); for aRow := 0 to StringGrid1.RowCount - 1 do begin MaxHeight := MinHeight; for aCol := 0 to StringGrid1.ColCount - 1 do begin aRect := Bounds(0, 0, StringGrid1.ColWidths[aCol], 1); // ワードラップして描画したときの高さを求める aHeight := DrawText(StringGrid1.Canvas.Handle, PChar(StringGrid1.Cells[aCol, aRow]), -1, aRect, DT_CALCRECT or cDefaultDrawTextOptions); if aHeight > MaxHeight then MaxHeight := aHeight; end; StringGrid1.RowHeights[aRow] := MaxHeight; end; end;
198 :
デフォルトの名無しさん :02/01/25 23:36
TWebBrowserでActiveXのビデオ表示した場合、 音が出ない形で表示されちゃうんだけど、 これはなぜでしょう? 一応、検索してみたけどヒットしないみたい…。
「<OBJECT>のタグで」が抜けました。同じ物をIEで見ると、 普通に表示されます。不思議…?
Windowsのボタンやメニューで標準で使われているフォントを調べるのって、 直接レジストリを見に行かないとできないんでしょうか?
D6で自作コンポ作ったのだが、都合で他の奴がAccessからそのコンポを使いたい とケチつけやがった、そこで、ActiveX版も作ってやろうとした、 ActiveXなんて初めての挑戦だったのだが、Borlandのホームページ見ると VCLコンポから簡単にActiveXが作れるような事が書いてあった。で、 新規作成の所でActiveXコントロールを選択しても、VCLの欄に俺のコンポが 出てこないのだがなぜ?(他のは出てくるし、俺のもEditから派生させた のは出てる)非ビジュアルコンポってActiveXにできないのか?
>>201 非ビジュアルは出ない
継承元をTComponentからTWinControlかTCustomControlに
>>202 やぱし、そーなの?助かったよ、ありがと。これでAccess野郎も喜ぶだろう。
でも、継承元がTComponentなコンポはなぜ出てこないの?継承元が単純すぎるから?
204 :
デフォルトの名無しさん :02/01/26 14:01
TServerSocket使ってたものです。挙動が異なり困っています。具体的には… クライアントがサーバに接続している際、クライアントプログラムを一方的に強制終了すると、サーバ側ではエラーにならず、切断イベントが発生していました。が、 自作サーバクラス内に TServerSocket を組み込んで使用したところ、 クライアント側が強制終了するとエラーが発生するようになってしまいました。どこがいけないのでしょう? type TReportEvent = procedure (Sender:TObject; AText:string) of object; TChatServer = class( TComponent ) private { サーバソケット } Server: TServerSocket; FOnReport:TReportEvent; procedure SetPort(const Value: Integer); protected { TServerSocketのイベントに関連付けるイベント手続き } procedure OnClientConnect(Sender:TObject;Socket: TCustomWinSocket); virtual; procedure OnClientDisconnect(Sender:TObject;Socket: TCustomWinSocket); virtual; procedure OnClientError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer);virtual; { ステータスやログ等を出力 } procedure Report(AText:string); public constructor Create( AComponent: TComponent ); override; destructor Destroy; override; procedure Open; procedure Close; property Port:Integer write SetPort; published property OnReport:TReportEvent read FOnReport write FOnReport; end; const SocketErrorMessage:array [TErrorEvent] of string = ( {eeGeneral} 'ソケットは,どのカテゴリにも属さないエラーメッセージを受け取った', {eeSend} 'ソケット接続に書き込もうとしたときにエラーが発生した', {eeReceive} 'ソケット接続から読み出そうとしたときにエラーが発生した', {eeConnect} '接続要求が完了できなかった', {eeDisconnect} '接続を閉じようとしたときにエラーが発生した', {eeAccept} 'クライアント接続要求を受け付けようとしたときに問題が発生した', {eeLookup} 'LOCKUP ERROR' );
205 :
デフォルトの名無しさん :02/01/26 14:01
implementation { TChatServer } procedure TChatServer.Close; begin Server.Close; end; constructor TChatServer.Create(AComponent: TComponent); begin inherited; { Server の生成と設定 } Server := TServerSocket.Create( Self ); Server.ServerType := stNonBlocking; { イベントの関連付け } Server.OnClientConnect := Self.OnClientConnect; Server.OnClientDisconnect := Self.OnClientDisconnect; Server.OnClientError := Self.OnClientError; end; destructor TChatServer.Destroy; begin Server.Free; inherited; end;
206 :
デフォルトの名無しさん :02/01/26 14:02
{ クライアントが接続した際に発生(TServerSocketに関連付けられるイベント) } procedure TChatServer.OnClientConnect(Sender: TObject; Socket: TCustomWinSocket); begin Self.Report('[接続] /アドレス:'+Socket.RemoteAddress); end; { クライアントが切断した際に発生(TServerSocketに関連付けられるイベント) } procedure TChatServer.OnClientDisconnect(Sender: TObject; Socket: TCustomWinSocket); begin Self.Report('[切断] /アドレス:'+ Socket.RemoteAddress ); end; procedure TChatServer.Open; begin Self.Server.Open; end; procedure TChatServer.Report(AText: string); begin if Assigned( Self.OnReport ) then Self.OnReport( Self, AText ); end; procedure TChatServer.SetPort(const Value: Integer); begin Server.Port := Value; end; procedure TChatServer.OnClientError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); begin Self.Report( '[エラー] '+ SocketErrorMessage[ ErrorEvent ] ); end;
207 :
デフォルトの名無しさん :02/01/26 14:46
>>204 ちょっと漠然としてる感じがします。
1.「サーバ側ではエラーにならず、切断イベントが発生していました」というのは
どういう条件だったんですか?
2.どんなエラーが発生するんですか?
3.エラーをトラップして切断イベントの代わりにはできないんですか?
Delphi6 Personalを使ってます。 FormよりForm内のコンポーネントが大きい場合にす小ロールバーが出ますよね。 そのスクロールバーのサイズってどう取得すれば良いんでしょうか? ButtonSizeもSizeも0なので困っています。 後、タスクバーのWindowクラス名ってなんになるんでしょうか?
209 :
デフォルトの名無しさん :02/01/26 16:24
保守age
210 :
デフォルトの名無しさん :02/01/26 17:59
Delphi初心者です。 TMemoでファイルから読み込み表示するときに、 特定キーワードのみ文字色を変えたいのですが、 どうすればよいでしょうか。ヒントだけでも教えてください。
>>210 TMemoでなければダメですか?
シェアウエアとかのエディターコンポを使うのが簡単なように思うんですが?
フリーのAFEditも色分けできるよん 俺はTEditor使いだが。
214 :
デフォルトの名無しさん :02/01/26 19:36
kylixでも動くようにしたいので、TMemoの方法が知りたいです あと(いつか)できたらソース付きで公開したいので、 シェアウェアとかフリーウェアを使わないでやりたいと思ってます
TMemoにコダワルと、とても難しい。 自分でビュアー作った方がマシなくらい難しい
>>215 と、言うかテキストボックスってオーナードローできるの?
まだ見てますので
>>208 わかる方おられたらお願いします。
>>215 エディタ部分が分離可能な設計にしましょう
CLXベースで一から自作するんならそうでなくてもいいが。
「スクロールバーのサイズ」って漠然と言われてもねぇ…… GetSystemMetrics ?
OCXをDELPHIで作って、VBから使おうとすると文字列が帰ってこないがなぜ? function TTestOCX.REC(var fpRec:WideString):Integer; begin fpRec:='2ちゃんねる'; result:=0; end; -------------- vb ----------------- dim tmp_rec as string dim rc as integer rc=TestOCX.rec(tmp_rec) <--- tmp_recの中身は空になってる
>>222 WideString を使うなら
ええとど忘れした・・・とにかく VBから読める使える型にしてやっておくれ
WinSightってどこかでDL出来ません? Delphi6に入ってないんです・・
解決しました・・・ スレ汚しスマソです・・・
>>223 StringToWideChar使えって事かな?
レス無かったか…。 どなたかTWebBrowserでobjectタグのメディアプレーヤ埋め込み型で 音が出ないことについて知ってる人はいないですかね? 自分だけなのかな? TWebBrowserでは音声不可になる…ってことはあり得るのかな?
他のアプリの、MainFormから3階層目のハンドル(TTabControlのハンドル)を得たいのですが、 hHWND := FindWindow('TMainForm', nil); hHWND := FindWindowEx(hHWND, 0, 'TPanel', nil); hHWND := FindWindowEx(hHWND, 0, 'TPanel', nil); hHWND := FindWindowEx(hHWND, 0, 'TTabControl', nil); としたところ、0が返ってきてしまい上手くいきません。 どこらへんがマズイでしょうか? メインフォームにパネルが幾つか貼ってあり、その中の一つにまたパネルが貼ってあり、 そのパネルにタブコントロールが貼ってあるという状況です。
>>222 ActiveXでVBに渡すなら、WideStringじゃなくて普通にStringでいいだろ
TWebBrowser を貼り付けたアプリと IE とで code="〜" のパスの介錯に違いがあるのではないかと予測するがどうか?
>>230 おっ!レスあるとウレシイですねー。
えーと、「音声のみ」不可となって表示されるんですよ。
動画(メディアプレーヤ自体も)は出るんです。
が、「音出ないよ」のマークになっちゃってるんですよねー?
もちろん、その動画(mpeg)は音あるし、IEで見るとちゃんと
音出るんです。不思議…??
>>222 で書いた者です
>>223 VBで使える文字列の型がいまだに探し出せません(;;)
>>229 ocxの場合、DELPHIのStringは駄目だと思いますが、WideStringだから
駄目ってのはアリですか?単にプロパティで設定された条件により文字列を
返したいだけなのですが・・・。
「delphiで作られた有名ソフトって何がある?」ってスレ すごく短命でしたな。それほど浸透してない(?)ってことだろうか? あの4800円くらいするデカイ本を本屋で見た。デカかった・・・。 欲しかったけど、高いなー。基礎編の方は割と必要なさげだった。 アレはエロゲーパッケージに通ずるデカさだ(藁
>>228 > どこらへんがマズイでしょうか?
たぶん、複数のパネルのうち TTabControl がのっかっているのと
ちがうのが最初に見つかるためでしょう。
以下の FindClassInChilds( ) 関数では、直接の子のほかに
孫、ひ孫...も検索して、指定のクラス名のウィンドウハンドルを
返します。見つからなかったらゼロを返します。
type
pFindData = ^TFindData;
TFindData = record
ClassName:string;
FindHandle:HWND;
end;
function GetClassNameString(hWindow:HWND):string;
var
p:PChar;
ret:integer;
begin
GetMem(p,100);
ret := GetClassName(hWindow,p,100);
SetString(result,p,ret);
FreeMem(p);
end;
function EnumCldProc(hWindow:HWND;Data:LParam):Boolean; stdcall;
begin
result := true;
if GetClassNameString(hWindow) = pFindData(Data)^.ClassName then
begin
pFindData(Data)^.FindHandle := hWindow;
result := false;
end;
end;
function FindClassInChilds(hParent:HWND;ClassName:string):HWND;
var
FindData:TFindData;
begin
FindData.ClassName := ClassName;
FindData.FindHandle := 0;
EnumChildWindows(hParent,@EnumCldProc,integer(@FindData));
result := FindData.FindHandle;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
hParent:HWND;
begin
hParent := FindWindow('TMainForm', nil);
Label1.Caption := IntToStr(FindClassInChilds(hParent,'TTabControl'));
end;
>>232 VCLからActiveXを作成したのであれば、自動で変換できなかった部分もある
かもしれない、もう一度ActiveX変換後のソースを眺めてみれ。
と、人の蝿おってる場合じゃない、折れもActiveXに挑戦中(^^;
折れが作った非ビジュアルActiveXだが、貼り付けた時にアイコンが表示さ
れないのだが、何処にアイコンを設定すりゃいいのさ、誰か知ってる?
>>172 ほかの人はどうやっているのか気になったんです
ただDelphiでのクラスの作り方がよく解らなかったんで
クラス化するのは後にすることにしました。
今はタブ、ツリー、リスト、スプリッターの動的配列を確保して
インスタンスを生成してます
>>175 Borlandのページにタブとボタンを動的生成するページが有ったんで参考にしました。
取りあえず動作するようになり前に進みました。
今困ってるのは新規タブを作成した場合
一番左はしに出来てしまうのです。
右側に作りたい場合などはどうすればいいのか解る方がいたら
アドバイス欲しいです。
237 :
デフォルトの名無しさん :02/01/27 04:26
>>200 //メニューのフォント
var
lf: LOGFONT;
nm: NONCLIENTMETRICS;
begin
nm.cbSize := sizeof(NONCLIENTMETRICS);
SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, @nm, 0);
lf := nm.lfMenuFont;
//
lf.lfFaceName//フォント名
lf.lfHeight//フォント高さ
lf.lfWeight//700以上でBold
lf.lfItalic//1の場合はitalic
239 :
デフォルトの名無しさん :02/01/27 05:48
Shift-JIS ←→ EUC-JP 相互コンバートなコードを書ことしています。 String でデータがある時は ByteType を使って if 文を簡略化してますが、 文字コードしか無い場合には、すべて if 文で総当りしてコンバートするくらいしか 方法を思いつきません。その手しか無いのでしょうか??? もっと賢いやり方があるような気はしているのですが・・・・・
ちなみに漢字は対象外にしています。 1バイト文字と2バイト文字が混ざっていますが 2バイト文字の方は英数字記号ひらカナなどの 合計500文字程度なので、少々おバカで無駄の多いコードでも 何とかなりそうではあるのですが・・・
241 :
ムッチムチの名無しさん :02/01/27 05:59
ハイ!質問です。 IEを取り込んで、ボタンでIE上のフォームに記入するのはどのようにすればいいでしょうか? パスワードとかIDとかを自動入力させるみたいな・・・
あの方はどちらへ逝かれたのでしょうか・・・。
243 :
デフォルトの名無しさん :02/01/27 09:00
>>239-240 素直に既存のライブラリ(jconvert.pasとか)を使うわけにはいかないの?
244 :
◆iWks40y. :02/01/27 10:10
Delphi初心者です。 Delphi6.0PersonalとDelphi2.0を使っています。 ユーザーがキーボードを入力したのを、感知するにはどうしたらいいでしょうか? フォーム上でなら感知することは出来ますが、フォームが非アクティブになると、 感知できません。TForm.OnMessageでも反応しないようです…。 どうかよろしくお願いします。
>>234 出来ました!
完璧ッス。
ありがとうございました!
247 :
デフォルトの名無しさん :02/01/27 11:31
メニューアイテムの座標を知りたいのですが、なにか良い方法はありませんか?具体的には、メインフォームからの相対座標を取得したいのです。 そこで以下の関数を作ったのですが、3階層目あたりの サブメニューになると、正確な値が取得できず困っています。 { フォーム AForm からのメニュー AMenu の相対座標を得る } function GetMenuRect(AForm:TForm;AMenu:TMenuItem):TRect; function ShiftRect(ARect:TRect;dx,dy:integer):TRect; begin Result:=Rect( ARect.Left+dx, ARect.Top+dy, ARect.Right+dx, ARect.Bottom+dy ); end; var DRect: TRect; IMenu: TMenuItem; begin { その位置のスクリーンでの座標取得 } GetMenuItemRect( AForm.Handle, AMenu.Parent.Handle, AMenu.MenuIndex, Result ); { フォームからの相対座標に変換 } Result:=ShiftRect( Result, -AForm.Left, -AForm.Top-24 ); IMenu:=AMenu.Parent; while IMenu.Parent is TMenuItem do begin { その位置のスクリーンでの座標取得 } GetMenuItemRect( AForm.Handle, IMenu.Parent.Handle, IMenu.MenuIndex, DRect ); { フォームからの相対座標に変換 } DRect := ShiftRect( DRect, -AForm.Left, -AForm.Top-24 ); Result := ShiftRect( Result, DRect.Left, DRect.Top ); IMenu := IMenu.Parent; end; end;
248 :
デフォルトの名無しさん :02/01/27 12:48
クラスのメンバー関数を呼び出したとき そのクラスの先頭ポインタはどこにあるのですか? Bレジスタかと思っていたのだけれどはっきりしない。
>>243 なんと!こんな素晴らしいものが!
これで十分。全然オッケィです。
この前検索した時は見つけられなくて・・・
情報サンクスでした!
>>235 おっしゃる通りでした、有難うございました。
但し、私も非ビジュアルActiveXだが、貼り付けた時にアイコンが表示さ
れないです、非ビジュアルなocxだからそんなものなのではないでしょうか?
別のアプリにF3押しを伝えるには↓でいいんですよね? SendMessage(Form1.Handle,WM_KEYDOWN,VK_F3,0); 上手くいかないんですが・・・
別のアプリだったら、別のアプリのHANDLEなんじゃないの?
別アプリに送るのに Form1.Handle というのはあるまい
254 :
デフォルトの名無しさん :02/01/27 21:55
これからDelphiを始めようと思って、Delphi 6 Personalを買おうと思っています。 超初心者にお勧めの本ってありますか? おすすめのサイトなんかもあったら教えてください。
真・スレッドストッパー。。。( ̄ー ̄)ニヤリッ
personalは買うもんではなくダウソするもの。 実用に耐えるのはプロフェッショナル版。
257 :
デフォルトの名無しさん :02/01/27 22:19
>>256 ダウンロードできるんですか?
それじゃあ製品版の意味ってなんなんでしょうね…
>>257 メディア、言語リファレンス本代。
5000前後でしょ。
それから、ダウソが面倒ならC魔蛾のCDに付いてるYO!
260 :
デフォルトの名無しさん :02/01/27 22:30
>>258 それだけで\5,000もするんですか…
C魔蛾って何ですか?
>>259 その本は超初心者がDelphiを始めるに当たっていい本なんでしょうか?
あれ。この著者、服部誠/謎さんじゃない。
262 :
デフォルトの名無しさん :02/01/27 22:38
実際 見てきめれば?
264 :
デフォルトの名無しさん :02/01/27 22:39
>>260 Cマガジン だYO!
1000円くらいするかな。
買う前にその月のCD-ROM内容確認してNE!
265 :
デフォルトの名無しさん :02/01/27 22:42
>>263 そうですね。実際に見て決めたいと思います。
>>264 それって本屋に普通に売っているんでしょうか。聞いたことないです…
>それって本屋に普通に売っているんでしょうか。聞いたことないです… うそ、、、もしかして僻地にお住まい?
267 :
デフォルトの名無しさん :02/01/27 22:49
>>267 僻地… まぁ確かに田舎ですね。30分くらい歩かないと本屋ないですし…
>>267 学生さんなら時間があるだろうから最寄の電脳街へ行ってみるといいよ
270 :
デフォルトの名無しさん :02/01/27 22:56
>>269 今、ネットで検索して調べたんですが難しそうな内容ですね…
これ買って読んでいけるかものすごく心配です。
プログラム初心者の自分でも大丈夫なんでしょうか?
CマガはDelphi 6 Personalの入ったCD-ROMの入手用と割り切って 参考書は別に買ったほうがいいでしょう (Cマガも読んで無駄にはならないと思うけど)
たとえ本が難しかったとしても、del本体は初心者にやさしいYO! プロレベルになってコードが大きくなっても読みやすいし。 とりあえず、ダウソか安い本かで始めちゃえば。
273 :
デフォルトの名無しさん :02/01/27 23:09
>>271-272 Cマガ買ってDelphi手に入れたいと思います。
これからDelphiの世界に足踏み入れますので、よろしくお願いします!
>254 本屋で見かけたら買おうかなとは思って居るのですが、 見かけないので内容はよく分かりません。 私は、「基礎から分かるDelphi5」を買って勉強しました。 今、家にある雑誌を確認したところ、「日経ソフトウェア」の 一月号にDelphi6を収録したCDがついていましたよ。
私はCにゃ「まだ」興味が無いので(delphiが先という意味)、 付録目当てにCマガ買うのはもったいないな… と思ってたらテックウィンに付いてたのでラッキーでした まる。 あいやー、まだ問題が解決出来ない…(TT。なぜなんだー。 誰かTWebBrowserで作ったブラウザで「objectタグ」のビデオ、 音が出るぞ!って人いませんかね?うーむ。検索もしてるのだが、 うまくヒットさせられない…。潮時かな、ここでは…。
276 :
デフォルトの名無しさん :02/01/27 23:44
>>274 ありがとうございます。日経ソフトウェアというのも実は恥ずかしながら聞いたことないです…
今度書店で「基礎から分かるDelphi5」を見てみたいと思います。
>>275 CマガジンってC言語なんかの雑誌なんですか?プログラムの総合誌かと思いました。
昔は C 言語マガジンだったが、とちゅうから Computer マガジンの C に 変わった。 ぼろくそいう人も多いけど、存在は知っておいても損はない。
>CマガジンってC言語なんかの雑誌なんですか?プログラムの総合誌かと思いました。 元々は「C言語の雑誌」だったけど今は「プログラムの総合誌」になったらしいね
>C言語なんかの雑誌なんですか です(^^;。
>>278 ありゃ。そーなんですか。読んでなかったから…。
いつの間に総合誌に…。
>>253 なんとなく意味をくんで欲しかったのだが、
こー書けば理解して頂けるでしょうか?
var
wfHWND:HWND;
begin
wfHWND:=FindWindow('xxxxxxxx',nil);
if (wfHWND <> 0) then
begin
SetForegroundWindow(wfHWND);
keybd_event(VK_F3,0,0,0);
end;
>>281 SetForegroundWindowは、Win98以降失敗の可能性大。
したがって、keybd_event() は目的のアプリに届かないよ。
>>282 それは知らなかったよ
AttachThreadInputでスレッド結合しても駄目なのか?
ちょっと調べて見た、 SystemParametersInfo 使ったらSetForegroundWindow 出来そうだが
↑駄目だった
286 :
デフォルトの名無しさん :02/01/28 06:26
japan.comp.lang.delphi って何なのですか?
287 :
デフォルトの名無しさん :02/01/28 06:28
news group
288 :
デフォルトの名無しさん :02/01/28 07:27
吐田じゃねーが過去ログみろやゴルァ
SetActiveWindow… これもだめぽ?
先輩に作品を見せましたが嘘だとばれてしまいました こんどはちゃんと作ってこいと言われてしまい何を作って良いかわかりません みなさんどうかお知恵をお貸しください
293 :
デフォルトの名無しさん :02/01/28 12:51
OS作れ
Windows上で動くOSでいいですか?
>Windows上で動くOS ワラタ
Personalを8000円で売ってくれた先輩なんか放置。
>>292
43です。
ドラッグ&ドロップの件で土日を使って試行錯誤してみたのですが、
今ひとつ理解できない部分があり困っております。
(1)
project.dprにParamStr関数を使用した命令を記述して
ドラッグ&ドロップの処理をしようと思い、以下のように記述しました。
// -------------------
// project1.dpr (参考:
ttp://www.w-frontier.com/tips.html )
// -------------------
program Project1;
uses
Forms,Windows,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {FrmAbout};
{$R *.res}
begin
Application.Initialize;
Application.Title := 'Lite';
Application.HelpFile := 'C:\Program Files\Borland\Delphi6\Projects\20020117\readme.html';
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TFrmAbout, FrmAbout);
Application.Run;
Form1.DDFileOpen(ParamStr(1));
end.
(続く)
で、Unit1.pas(メインのウィンドウ)に type TForm1 = class(TForm) Memo1: TMemo; StatusBar1: TStatusBar; … procedure DDFileOpen(Sender:TObject; var DFName: string); private { Private 宣言 } FName:string; DFName:string; {$R *.dfm} … procedure DDFileOpen(Sender:TObject; var DFName: string); begin {D&Dによるファイルのオープン} // テキストが変更されていた場合 if Memo1.Modified then case MessageDlg(ExtractFileName(FName)+'は変更されています。'+Chr(13)+Chr(13)+'保存しますか?',mtWarning,mbYesNoCancel,0) of mrYes:Save1Click(Sender); mrCancel:Exit; end; // [開く]の処理 begin FName:=DFName; Memo1.Lines.LoadFromFile(FName); Form1.Caption:=Application.Title+' - '+FName; end; end; などと書いてみたのですが、どうも上手く起動しない…と言うか、 これもしかして僕が全く見当違いな事やってたりしますか? とりあえず自前でファイルを開く関数を作ろう(DDFileOpen)と思って作ってみたのですが。 「関数の勉強しろ(,,゚Д゚)ゴルァ!」と言われそうですが、 現在関数についていろいろ調べている最中です。 明らかに勘違いしている場所など指摘して頂ければ幸いでございます。
>>297 Application.Run はメインフォームが閉じるまで帰ってこない。
Runしてから値を渡すのだろうか、と思っていたのですが…。 では、CreateFormのすぐ後に記述してみます。 $R *.res} begin Application.Initialize; Application.Title := 'Lite'; Application.HelpFile := 'C:\Program Files\Borland\Delphi6\Projects\20020117\readme.html'; Application.CreateForm(TForm1, Form1); Application.CreateForm(TFrmAbout, FrmAbout); Form1.DDFileOpen(ParamStr(1)); Application.Run; end.
>>298 >などと書いてみたのですが、どうも上手く起動しない…と言うか、
そもそもコンパイルできなでしょ? 関数の宣言と実装がことなり、
また、呼び出し時のパラメータも間違ってるよ。
TForm1 の OnCreate() イベントハンドラで
if Length(ParamStr(1)) then
Memo1.Lines.LoadFromFile(ParamStr(1));
というところから始めて下さい。
>>299 実のところそうとも限らんかったはず。
例外発生時なんかRunから戻ってきたような気が。
気のせいとか記憶違いだったらスマソ。
>>301 TForm1のOnCreateかOnShowイベントに書いてみたら?
>if Length(ParamStr(1)) then 訂正 if Length(ParamStr(1)) > 1 then
>>301 さん
>そもそもコンパイルできないでしょ?
はい、出来ませんでした(汗
>TForm1 の OnCreate() イベントハンドラで〜
早速参考にさせて頂いたのですが、見事に出来ました。
あれだけ試行錯誤したのが…。
CとVBを少ししかかじった事しかなくて
自前の関数と言うのは少し無理があったかもしれません…。
次のアプリを作る際には勉強しておきたいものです。
ともあれ、色々とアドバイス有難うございました(´∀`)
あともう少し付け加えたいしたい機能があるので(と言っても簡単なものですが)
すべて実装して完成した際にもう一度ここに戻ってきたいと思います。
では、改めてありがとうございました。
ああなるほど 実装部の procedure DDFileOpen(Sender:TObject; var DFName: string); は確かに手続きだけど、ホントはメソッドにしたかったんだね procedure TForm1.DDFileOpen(Sender:TObject; var DFName: string); とクラス名を付けてやる事 それから上のForm1でのメソッド定義部はpublishに書いてあるけどpublicに移した方がいい
実際にやってみることも大事だけど 検索すればサンプルが見つかるので そういうのを見て定義、実装の仕方を 参考にすると良いと思われ。 D&Dのやり方なんか定番なんだし・・・ そうすればぐいぐい実力アップだよ!
>>308 同意。
43は、ちょっとしたコツさえつかめば、上達ははやい、とみた。
なかなか、根性もセンスもあると思いますよ。ガンバッテ!
>>307 さん
お察しの通りでございます。
ただVBの知識だけで作ったのでだいぶボロボロです(笑
クラス名が必要なのですか…よく叩き込んでおきます。
宣言の場所も…あぁ覚える事が多いw
今度時間が空いたときにじっくり取り組んでみますね。
>>308 さん
助言ありがとうございますー。
とりあえず自分的には一通り検索をかけてみて、
どうしてもダメな場合に書き込むようにしております。
プロの皆さんから見れば他愛も無い質問だと思うのですが…
なかなか自分の思っているような解説をしているページを
探すのは難しいです(;´Д`)
ゆっくりではございますが、よく噛み砕きながらやりたいと思っております。
>>309 さん
どもです。正直嬉しいです(*´∀`)
今回の学校の課題(卒業制作です)でDelphiは僕一人だけなので、
わざと自分を追い詰める感じでプログラミングしております。
今週末に提出なんでそれまで頑張ります!
では、また制作に戻ります。
>>310 メソッドの場合は場合は、そのクラスに宣言を書く。
そこで Ctrl+Shift+C を押すとそのメソッドの雛型ができる。便利だよ。
Personal版だと出来るかどうか知らないけど。
別noDelスレではレスの2〜5番目くらいに 参考、関連リンクがあって便利だったんだけど このスレにはないな・・・
訂正:別no→別の
>>311 コードエクスプローラの機能らしくて、perだとできないぽ。
315 :
TIcon :02/01/28 19:01
TIconにアプリケーションのアイコンを取り込んで保存するアプリ作っているのですが Icon.Handle := ExtractIcon(HInstance,PChar(FileName),0); にて取得したTIconオブジェクトの以下の症状で悩んでます。 1.アイコン取得後は256カラー(?)で表示されるが ファイルに保存後読み込むと 色が変わる(16色かな?) 2.一部のアプリケーションのアイコンを取得後保存しようとすると 「ビットマップイメージが不正です」とエラーが出る。 以上なにか解決の手がかりなりそうな情報は無いでしょうか? グーグルで検索したのですがなかなか情報が見つかりませんでした…
>>314 さんくす。perはダメですか。
この辺もperに解放しないとなぁ・・・>某島
317 :
デフォルトの名無しさん :02/01/28 20:26
TButtonを枠付きのフラットボタンにするため、 凹んだボーダースタイルのパネル上に、ボタンを配置して使っています。 Panel.BevelOuter:=bvLowered; Button.Parent:=Panel; Button.Top:=1; Button.Left:=1; Button.Width:=Panel.Width-2; Button.Height:=Panel.Height-2; このようにすると、丁度フラットボタンに 枠がついたように見えます。 これを TFlatButton としてコンポーネントにしたいのですが、 どのようなコードを書けば良いのでしょうか。 PanelにButtonが「含まれている状態」とはいえ、これはあくまでも Buttonなので… これはButtonではなくPanelと見なされてしまうのでしょうか。
318 :
昔はグレーゾーン(レ○タル屋)だったくせに :02/01/28 23:17
>>303 遅レスだが、なっつかしーなー(藁
なーんか、やってたなー。そーいえば。あのころはプログラミング
「なんだそりゃ」と思っていたけど。なにやら「早い早いィィッ!」
みたいな宣伝やってましたなぁ。思い出した。思い出した。
誰か使ってるヤツいんのかねー(藁
わ。変なレスになってもた…。スマソ。 「プログラミング」は余計だす。トホホ。
320 :
デフォルトの名無しさん :02/01/28 23:42
>>315 TIconは16色以外非対応。48x48とかも非対応。
全部自分で管理するしかなかばってん
MADO-OSはWindowsXPになって現役だよん
>>315 さん
やっぱそうなんですか、なんとなく思っていたのですが
読み込み&描画が上手くいったのでそのまま保存して
やってました。
とりあえずTBitMapに変換してやります。
ちなみに保存時エラーになるのはかちゅ〜しゃを起動する
Kage.exeのICONです(w
323 :
デフォルトの名無しさん :02/01/29 10:12
324 :
デフォルトの名無しさん :02/01/29 10:23
325 :
デフォルトの名無しさん :02/01/29 10:25
>>320 TIconって、256色に対応したんじゃなかったっけ?
保存は知らんが。
厨房質問なんですが、DirectXについて質問。 ・DelphiでDirectXを扱うことは可能か? ・可能なら単純なDirecxtXスクリーンセーバー程度の物なら、DelとVCどっちが開発楽?
>>326 >・DelphiでDirectXを扱うことは可能か?
可能。探せばunitが見つかる。
クラスライブラリもいくつかある。
>・可能なら単純なDirecxtXスクリーンセーバー程度の物なら、DelとVCどっちが開発楽?
GUI作らなきゃわざわざDel選択するメリットなし。
>>326 VC使えるなら、VC使っとけ。頭にDirectと付く類のは、その方が楽だ。
>GUI作らなきゃわざわざDel選択するメリットなし。 コンポーネント自作するだけの能力があるならメリット無い事もないだろけど それはには先にDirectXが使える事が条件なわけで、 それが使えない人の場合は、サンプルがそのままコンパイル出来るVCが 楽という結論だな
330 :
デフォルトの名無しさん :02/01/29 13:32
TGraphicControl を継承した自作コンポーネントをコンパイルして登録し、 フォームに貼りつけようとすると、 「コントロール””は親ウィンドウを持っていません」 といわれますが、どういうことですか?
>>322 独り言になってる(鬱
>>320 さんの間違いです
>>325 さん
とりあえず保存以外は大丈夫です。とりあえず取得後すぐBMPに変換する方法で
対処しました。
>>326 資料の多さを考えると、VCでしょうな。
俺はそれでもDelphiでやってるけど
333 :
デフォルトの名無しさん :02/01/29 17:54
そろそろ後少しでDel歴3年目突入なんですが、 未だ持って分からんことがあるので質問。 TFormのプロパティのデフォルト値なんですが、 AutoScroll := True ShowHint := False の2つのプロパティは何故デフォルトでこの値なんでしょうか? 自分にはこの2つは逆の方がよい気がしますが… 特にHintは未設定でも問題ないわけですし、 ユーザに優しいUI考えたらTrueの方がよい気がします。 いや「某陸がそう設定したから」「お前だけ」「変えれば済む話」 とか言われればそれまでなんですが、ずっと気になってまして。
334 :
デフォルトの名無しさん :02/01/29 18:09
>>333 俺もHintプロパティ設定したのに、ツールチップ出てこねーじゃん、
と最初の頃ちょっと困りました。
確かに一度知ってしまえばたいしたことないんですが。
1. 自分が使いやすいようにプロパティを変更したフォームを 右クリックして[リポジトリに追加]。適当な名前とか付けて登録。 2.ツールバーの[ツール]-[リポジトリ]で今登録したフォームを 選び、[フォームの新規作成時に使用]にチェックする。
なんで、C_Builderじゃなくて、わざわざDelphi使うの? すごく不思議。。。
337 :
インディアソポーカ :02/01/29 19:19
今日、Cマガを買いました。Delphiもインストールしました。 それにしてもCマガって難しいですね…
>>336 好みの問題としか言いようが無い。Delphi使ってる人間なら
逆の事を考えるだろう。
339 :
デフォルトの名無しさん :02/01/29 19:28
でもさ〜、pascalよりC++の方が良いようなような気がする…。
>>339 だから立場が違えば逆だってば。
とかいいつつ最近はBuilderもいいかなって・・・思ってる。鬱。
Delphiはストレスが無いから。
>>336 BCBで大型コードコンパイルすると鬱。
ヘッダーファイルってのも時代遅れナ気が。
だって、コード小さくても展開されるし。
ほうほう。いや、知り合いにもDelphiユーザー一杯いるからDelphiの魅力を聞いてみたかっただけです。
>>336 自分としてはBuilderも使ってみたいと思ってるんですが、
学生には少々値段高くて手が出しづらいです。
コンパイラは使ってますけどね。
Delphiは無償版を使ってます。
>>343 すいません…。無償版のリンク貼って貰えます?
使ってみたいかも…。
>341 爆速のコンパイルは何ものにも代え難い。
すいません。メインページに無償版がありました。 今日から使ってみます。皆さんの仲間になるかもです。。。
347 :
デフォルトの名無しさん :02/01/29 23:05
また一人地獄に向かうか…。 クソ!何人の犠牲をだせば気が済むんだ! おまえらRuby仕え!!!
一人でどうぞ
Ruby厨氏ね。
351 :
デフォルトの名無しさん :02/01/30 00:44
バイナリファイルからテキストを抜き出したいのですが、 [offset]: +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F 0123456789ABCDEF ---------------------------------------------------------------------------- 00000000: 97 E9 96 D8 00 88 C9 8F 57 89 40 00 90 58 00 鈴木.伊集院.森. 例えばこんな感じで文字列の長さは不定なので$00なら終わりと判定してます。 また、文字列の数も不定なのでひとつのString変数を使いまわしてTMemoなどに 渡しているのですが、どうもケツにゴミがついてしまいます。 m:TmemoryStream; s:String; b:Byte; c:Char; i:Integer; for i:=1 to 終わり値 do begin m.Read(b, sizeof(b)); c:=Chr(b); s[i]:=c; end; 大体こういう流れなのですが、String変数を初期化(?)しなければ ならないような気がしつつも方法がわかりません。 こういう場合は普通こうやるんだよ、みたいな セオリー的な方法があったら教えてください。
>351 SetLengthを調べてみ。
サイズがわかってるのならSetLengthで良さそうだが。
s := s + c; の方がいいんじゃないの? m.Read(c, SizeOf(c)); でもよさそうだし。
355 :
デフォルトの名無しさん :02/01/30 01:11
>352 >353 ああ、こんなのがあったのですね 早速SetLength使ってみます、どうもありがとう! >354 すみません、説明を割愛したのですが一旦バイト単位で データを取得する必要があって、351みたいにしてました。 その処理を別で済ませれば354の方が簡単なんですよね。 ちょっと考え直してみます。助言ありがとう!
>>347 お前面白い、テンプレとして使わせもらうよ(w
>>351 SetLength(s,終わり値+1);
m.Read(pChar(s)^ ,終わり値);
s:=pChar(s);
Del初心者です、宜しくお願いします。 データベースのテーブルにデータを追加する際に、 レコードのキーを MAX + 1 で取得したいのですが、 簡単な方法はありますか?
PostgreSQLとDelphiでシステム考えていますが、 PQコンポ使うのとODBC経由で作るのとどっちがいいと思いますか? 自分的には、ODBCの方がいいような気がするのですが、レスポンス テストしたらPQコンポも捨てがたい・・・。 そーいや、最近のKylix等でのMySQL関連の動向等をみても、 今後は、DelphiにおいてもBDEの幻想は崩れたのでしょうか・・・。
ディレクトリを取得したくて FindFirst('C:\*',faDirectory,SearchRec); としてみたところ、なぜか全てのファイルが取得されてしまったのですが、何が悪いんでしょうか?
>360 APIの仕様です。取得したファイルから自力でディレクトリだけを抽出しないといけません。
DelphiでDLL作ったんだけどさ、上手く動きません、たぶん、 DLL内でグローバル変数を使って処理しようとしてるからだろうと思うが、 結局、DLL内で定義されたグローバル変数は、どの段階で破棄されてるの? 呼ばれた関数が終了した時?(1つのDLLに複数関数がある) 呼んだプログラムが終了した時? それとも、明示的に破棄するような処理が必要?
363 :
デルファイで遊ぼう :02/01/31 04:00
右舷猿人直撃です浣腸!age
MSDNの英語版FindFirstFileより抜粋 This function searches for files by name only; it cannot be used for attribute-based searches. 日本語版に頼ってるとたまに落とし穴にはまります
日本語でだってちゃんと書いてある
持ってるのが古いせいかな? 普段使ってるのはPlatformSDKのヘルプだけど、日本語で持ってるのはVS6についてたやつだから…… (もう一回見直してみたけど書いてないし…)
>>364 大抵の人向こうも見てるから意味ないってーの(それがマルチポストって言うやつだよ・・・
>>359 確かにBDEはびみょーに使いづらい感があるが、まあ妥当なところだと思ってる。
dbExpressって接続エンジン + ClientDataSet(?)だから扱い的にはBDEとそう大差はない。
>>358 やり方は大きく分けて2通り
1.データベースに任せる
@Accessならオートナンバー
AParadoxならカウンタ型
BOracleならCREATE SEQUENCEを使う
2.プログラムで処理する
@起動時に最大値を変数へ読み込んでおいて
レコード作成時に加算してゆく
A毎回SQL等で最大値を所得する
単にユニークなインデックスが欲しいだけなら
データベースに任せたほうが確実
あるアプリの起動を知りたいんですが、 どんなAPIを使えばよいですか?
どうも。やってみます。
でも実はそれだけでは不完全なんだわ。理由は自分で考えてくれ。 とりあえずEnumWindowsの使い方。コールバック関数という奴だ。 (ListBox1とButton1を用意しる!) function EnumWindowProc(Handle:hwnd; lParam:Integer):Bool; stdcall; var szTitle:array[0..255] of char; begin If GetWindowText(Handle, szTitle,255 ) > 0 then Form1.ListBox1.Items.Add(szTitle); Result := True; end; procedure TForm1.Button1Click(Sender: TObject); begin ListBox1.Clear; EnumWindows(@EnumWindowProc, 0); end;
373サン、ありがとうございました。 あと、起動したアプリのある場所を割り出したいんですが、 そんな事は出来ますか?
>位置というのがEXEのフルパスなら それです。ありがとうございました。
>>359 >>370 しかし、現実問題としてBDEの優位性は損なわれつつあるのも事実だろう、
359が書いたようにPgSQL等を使う場合、ODBCを経由させてBDE接続させる
意味は希薄になる、しかもDBGrid等の既存コンポが使えない事でのデメ
リットは、プログラム次第で補えるだろう、捨てがたい機能としては、
グリッドに対する更新処理とキャッシュアップデート機能だが、これを
実務で活かす事は難しいと感じる、俺は、PQコンポーネントの優位性の
方が高いと感じる。
>>379 いまの仕事Oracle8iでやってるがDelのTransactionの扱いがいまいち不透明なんで
(Edit,Post/StartTransaction,Commit)CacheUpdate使ってます。
多少レスポンス悪くなるが、こっちのほうがわかりやすい。
ISAM感覚で使えるし。
あと、TClientDataSetってxmlでデータ吐き出せるからけっこう便利だNE!
おれがいまやってる仕事では低速回線(56kとか)でDB鯖と接続とかするから
そういう環境ではCacheUpdateは結構役に立つ。
ついでにDB鯖と切り離した場合(モバイルとか)も想定してるんで、
そうなるとClientDataSetつかうとかなり楽ちんですな。
なる、当然ながら用途によってってことか・・・。 そう言えば、ParadoxはまだDel6に付いてるけど、あれ使ってる人いるのか? Borlandは将来的には、今のParadoxの用途にMySQL辺りを据えたいと 思っているのかと感じたこともあったが、ノートPCが普及すると、 持ち出し時にDBを切り離す使い方ではなく、レプリケートしたりして 持ち歩く事が多いんじゃないの?(まぁ、携帯も常時接続的に使える 時代だから、そっちで対応するのかもしれんが) デスクトップレベルでもOracleとか使うのが常識なのかな?
はい!先生! Delphi(Pascal)のソースからJavaのソースを生成できますか?
ブルドッグソースか、おたふくソースなら出来(略)
>そう言えば、ParadoxはまだDel6に付いてるけど、あれ使ってる人いるのか? DelのDBコンポーネントの機能を一番やりたい放題に使えるのはParadox (Oracle等単方向のデータセットには色々制約がある) 俺はローカルデータベースとしては良く使うよ DBLookupComboBoxとかも何の工夫もせずにリアルタイムで動作するし (さすがにC/Sは無理があるのでOracleとかになるけど 場合によっては併用も考える)
>>375 これをやってみたが
EnumWindows(@enumWindowProc,0);
のところで 変数が必要です というエラーが出る・・・なにか足りない??
386 :
デフォルトの名無しさん :02/02/01 19:15
ヘ ⊂⊃ヘ ι/ヽ.∧__ ∧ヽ╋ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ιノ ノ ( ・∀・) ┃< 1000ゲットして幸せになろう。 ιノノ ノ⊂ __ † つ \_______________ ιノノノ /|__二二|. ┃ ιノ /_(__)_)┃
>>382 Delphi用のパーサー書いて、Javaソースにコンバートするアプリ書けば出来るけれど、
VCLのことを考えると頭が痛い
そこまで作るならjavaで書き直した方がはやそうですね。 (誰か作らないかなぁ、需要あると思うけど・・・)
全くないわけではないが、無い。
>>385 ひょっとしたら、EnumWindowProcをTForm1のメソッドとして作っていない?
独立した関数として作らないとうまくいかないよ。
無いと思う。
>>390 なぜ独立してないとだめなのか全く解らないままですが
リストがうじゃうじゃと出てきましたー ありがとう。
395 :
デフォルトの名無しさん :02/02/03 00:37
オフィシャルコースウェアの応用編買っちまっただよ。 アレについてるパッチは今、ボーランドのHPにアップされてる ヤツと同じかなぁ? なんで20メガもあるんだろう?
397 :
デフォルトの名無しさん :02/02/03 04:49
TPen.colorってどうやって処理されてるんですかね?。 以下の2つの処理で重さが全然違ってしまいます。 処理1) for i := 0 to 〜 Canvas.Pen.Color := clRed; Canvas.PolyLine( 〜 Canvas.Pen.Color := clBlack; Canvas.PolyLine( 〜 end; 処理2) Canvas.Pen.Color := clRed; for i := 0 to 〜 Canvas.PolyLine( 〜 end; Canvas.Pen.Color := clBlack; for i := 0 to 〜 Canvas.PolyLine( 〜 end; 描画している線の数は同じでも処理1の方がはるかに重い。 単にColorプロパティを変更するのがそんなに重いとも思えない。 Windows上での描画システムを根本的に理解できてないのでしょうか?
>Windows上での描画システムを根本的に理解できてないのでしょうか? そうです
APIヘルプを見ると CreatePen はあるけど SetPenはないです ですから Pen.Color:= も内部ではいちいち CloseObjectしてCreatePen SelectObjectしてるかと 試しに、ペンを2つ先に用意しておいて ペンごと交換してみては?
Personalユーザか・・・
397でTpen.Colorについて質問した者ですが、
http://www.asahi-net.or.jp/~HA3T-NKMR/vcl2.htm このサイトとかを読んでボンヤリとですが、わかってきました。
TPenはGDIオブジェクトって奴で限られたリソースであって、
Canvasごとにインスタンスを持っているわけでなく、
リソースマネージャで管理され、いろんなとこと共有していると。
だからPenのプロパティをセットすると、いちいちリソースマネージャに共有できそうなPenがすでに存在するかどうか
いちいち問い合わせにいっちまうので、重くなってしまう。
こんなかんじの理解であってるかな?
つまり漏れがした質問はWindowsの問題であって、
このスレで聞く事ではないってことですな。スマソ、逝ってきます。
とりあえず 全角やめれ
>397 完全に間違い。GDI 処理が遅いんであって、それを極力回避するためのメカニズムが リソースマネージャ。 ループ回数を100として、処理1だと毎回色を変えて描画。200回色を変えなきゃいけない。 処理2だと色の変更はわずか2回。
Ver2.0 以来、久しぶりにDelphiをいじってます。 メニューを追加しようとして、FormにMainMenuを配置し、テンプレート のファイルメニューを選んだところでとりあえずコンパイルしたんです がなぜかメニューが表示されないんです。他にしなくてはならないこ とって、ありましたっけ?
表示させるだけなら他にはない。
>>401 単純にやるとTPen.Colorだけを変更したつもりでも実際には Windowsに対して
CloseObject(Handle) -> CreatePen ->SelectObject
と3つのAPIが呼ばれてしまいます。APIコールはそれだけで重い処理なので
リソースマネージャを使ってそれを軽減する為にハッシュで検索する処理が入っ
ています。
速度を追求しなければいけないなら
ペンを先に2つ用意しておいて SelectObjectだけですむようにした方が速いです
しかしそれよりも同じ色は連続して描画するとか APIコールを減らす為に
Canvas.PolyLine よりもAPIのPolyPolylineを使うとかの工夫が必要です
しかしそういう事をする場合は、それを隠蔽するように上手に組んで下さい
でなければ 速度を追求する事が必要かどうか考えなおした方がいいでしょう
解決しました。FormのBorderStyleがbsDialogのままになってました。
1:多の関係にあるレコードの、多側の外部キー項目を画面で更新した際に、 1側の項目をテキストに表示させるにはどうすればよいのでしょうか? ここまで作ってみました(以下 地区マスタ(1側) 顧客マスタ(多側) 1.顧客マスタの入力画面に、Queryで地区マスタと顧客マスタの結合したSQLを設定 2.初期表示状態では、きちんと地区に該当する項目がテキストに表示される 3.地区コードを変更しても、テキストに該当する項目が反映されない SQLを設定しておけば、自動的に1側の参照項目は表示されると思うのですが コードで書かないとダメなのでしょうか? よろしくお願いします。
410 :
デフォルトの名無しさん :02/02/04 20:06
再問い合わせ またはTTableを使う。
くばっ アボーンで見たらすごいことに…。
初心者ですみません。 うんこはどうやってサポートできますか?
>413 面白いと思ったわけだ、君は。
TDBGridを利用して、固定行をクリックなり右クリックなりで、 内容をソートしたいのですが、SQL解析してORDER BY句を入れる以外に方法ありますか?
>>416 そーゆーことをするためのローカルデータベースなのだが、近頃は嫌われることが多いようだ。
クライアントデータセット/Midas/Mybase を使う方法もある。
ただ、こったことをすればするほど、データ更新時の作業が面倒なことになるので
気をつけて。表示と更新を異なる画面にするのが楽チンかな。
419 :
デフォルトの名無しさん :02/02/04 23:44
>413 僕がサポートするよ。もぐもぐもぐ。
>表示と更新を異なる画面にするのが楽チンかな プログラマの都合で使い勝手を悪くするのはいかがなものかと
422 :
デフォルトの名無しさん :02/02/05 01:49
質問です。ごめんなさい。 1、form1のボタンにa:=yes;って書いてform2のedit1にedit1.text:=a;みたいな感じでやりたい時は どのようにやればいいのでしょうか? 2、button1,button2とedit1をform1に配置。 button1を押した時にa:='yes!' button2を押した時にa:='no!' ってedit1のtextに入れたいんですが、button1,button2両方にedit1.text:=aって入れないと 上手くいきません。 edit1にedit1.text:=aって書くだけじゃ駄目なもんなんでしょうか? 解りづらくて申し訳ないです。ご教授お願いします。
当たり前だろ!! 変数に入れただけで何で関係ないコントロールの値まで変わるんだよw
まあ、いいや 1 「uses Unit2;」を追加 Form2.Edit1.Text := 'yes'; 2 Edit1.Text := 'yes!'; Edit1.Text := 'no!'; aはString変数でしょ? 変数に値入れても"使わなきゃ"入ったまんまよ?
すでに
>>423-424 が解説してくれてるけど一言
自分がやらなきゃ誰もやってくれないよ。
426 :
デフォルトの名無しさん :02/02/05 02:43
>>423 あ!ありがとうございます!
1番わっかりました!感動です!HP色々見ても、意味不明だったんで・・・
ちょっと近道しすぎですね。(汗
2番なんですが、a:='yes!'で変数に入れます。そのままじゃ意味ないって事はわかるんですが、
そのaをedit1のtextに入れたい場合はどうすればいいのかと・・・・
var s:string;
s:='yes!!';
edit1.text:=s;
buttonに書けば出来るんですが、editではこれじゃ駄目なんですか?
イベントがないから???
一応やってみましたが、駄目でした。
>>425 あ、もちろんやってみましたよ。で、駄目なんで出来ないのかなぁと気になったので・・・
私の書いたの見るとやって無いように見えますね。すいませんです。
>>426 意味不明。
とりあえず付属のsample見て出直せ。
一応レスしとくが、
イベントドリブンだからイベントが発生しなければ(そのイベントの)コードは実行されない。
edit1.text := sをbutton1のOnClickイベントの間に書けば医院で内科医?
>あ、もちろんやってみましたよ。 そうじゃなくて >変数に値入れても"使わなきゃ"入ったまんまよ? という話。
>>426 おまえ、他所のDelphi板でもイベントのことで聞いてただろ?
>>410 レスありがとうございます。
>再問い合わせ
>またはTTableを使う。
TTableで
>>409 の動作を実現するには
どうすればよいのでしょうか?
質問ばかりですいません・・・
>>426 小学校の文章問題みたく
文章の意味が通じないのですが
単にローカル変数以外の変数を使いたいって事?
,,,,,,,,,,,,,∧,,∧ /
〜′,,,,,,,ミ,,゚Д゚彡 < あってるかな。
UU""" U U \
Form1 = class...
private
FStr: String;
public
end;
procedure Button1クリック
begin
FStr := '逝ってよし';
end;
procedure Button2クリック
begin
Edit1.text := FStr;
end;
procedure Button3クリック
begin
Edit2.Text := FStr;
end;
>>426 もしかして2番はこういう事をしたいのかな?
TForm1 = class(TForm)
|略
private
procedure SetEditStr(const Value: string);
public
property EditStr : string write SetEditStr;
end;
|略
implementation
|略
procedure TForm1.SetEditStr(const Value: string);
begin
Edit1.Text := Value;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
EditStr := 'yes!';
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
EditStr := 'no!';
end;
違うか…
ところでDelフサギコさんは見かけますがモナーさんは居ないのですか?
>>432 >>1 >DELモナは時に私であり、時には別の人。
あなたがやってもいいです。
ぎゃー
>>1 に書いてあったのね すみません
>>433 >あなたがやってもいいです。
DelはWinがわからんので無理かな 現役の頃はTP3〜5なので…(鬱
Pasはカセットテープに入ってた頃からっす(w
>434 それくらいのレベルがこのスレでは丁度いいかも
いや、バカにしてるんじゃなくて、質問者が質問し易いという意味ですよ
>>409 TTableの項目エディタで新規作成−参照項目でOK
438 :
デフォルトの名無しさん :02/02/05 15:25
Delphiで640x480のフォームを解像度変えてフルスクリーン化する方法って無いですか? よくDirectXとかでやってるやつです。
>>438 DirectX 使えば?
Windows の通常の API では画面解像度の変更はできないから、ビデオドライバ依存、
または DirectX API を使うしかない。
この瞬間ChangeDisplaySettingsはAPIではなくなったようです この瞬間ChangeDisplaySettingsはAPIではなくなったようです この瞬間ChangeDisplaySettingsはAPIではなくなったようです この瞬間ChangeDisplaySettingsはAPIではなくなったようです この瞬間ChangeDisplaySettingsはAPIではなくなったようです この瞬間ChangeDisplaySettingsはAPIではなくなったようです
>ChangeDisplaySettings 確実に他のウインドウ巻き込んでリサイズするので、 ちゃんとウインドウを元に戻してくれる手法を確立しない限りは使用しないで欲しい。 ゲームで使うのはもっての他。 OpenGL系で多くてこまる・・・ ただし、DirectXの場合でもタイミングによっては、 他のウインドウ巻き込むので注意されたし。
442 :
デフォルトの名無しさん :02/02/05 17:30
>>441 アイコンが640x480にちっちゃくなっちゃうあれか。
まあしゃあ無いんじゃ無い?
>>435-436 いえいえWinAPIに関しては十分馬鹿にされるレヴェルです。
なかなかWin絡みじゃない質問が無いのですが 出来る時はレスしてみます。
>>442 アイコンもそうだけど現在開いているウインドウね。
445 :
デフォルトの名無しさん :02/02/05 20:36
初心者です。よろしくです。 TWebBrowserを含んだTTabSheetを作りたいと思い、 なんとなく下記のようにしてみたところ [エラー] Unit1.pas(43): 読み込み専用プロパティに書き込むことはできません と言われてしまいます。 どうやってparentを指定すればいいのでしょうか? procedure TForm1.FileNewExecute(Sender: TObject); var NewTabSheet:TTabSheet; begin NewTabSheet := TTabSheet.Create(Self); NewTabSheet.PageControl := PageControl1; NewTabSheet.Caption := 'Page' + IntToStr(PageControl1.PageCount); with TWebBrowser.Create(NewTabSheet) do begin Parent := NewTabSheet; //この行がエラー Align := alClient; end; NewTabSheet.Show; end;
構造体を作成して、文字列を入れたいけど? type TRec = record aaa:char; bbb:char; end; <その後> var wRec:TRec; wStr:String; begin wStr:='12'; wRec:=wStr; <---- これ駄目でしょ? VBだと簡単なのだが、Delphiだと出来ない?
>>446 何種類か方法はありますが可変部分を持つレコード型にしてみては?
type
TRec = packed record
case boolean of
false : (aaa,bbb : char);
true : (str : array[0..1] of char);
end;
procedure hoge;
var
Rec : TRec;
begin
Rec.str := '12';
:
packed 忘れないでね
>>448 正解書けよ
type
PRec = ^TRec;
TRec = packed record
aaa,bbb : char;
end;
procedure TForm1.SetEditStr(const Value: string);
var
Rec : PRec;
A : string;
begin
A := 'HOGE';
Rec := @A[1];
ShowMessage(Rec.aaa);
やっぱりpacked忘れないでね(詳しくはHELPを
みなさんありがとう、でもなんか違う感じがするのですが・・・
>>446 でやりたかったのは、代入した後で
wRec.aaa とか wRec.bbbが使いたいんですよ。
本当は、構造体の中は2つだけじゃなくてもっと複雑なんです。
使えるんじゃないの? やりたいこともっと具体的に書いた方が良いかと。
453 :
デフォルトの名無しさん :02/02/05 21:41
遅くなりましたがお礼を言わせてください。
>>427 わけのわからん、質問にレス感謝です!
でも、私のやりたい事はそうじゃないんです・・・
>>429 いや、まったく。初めてこの板に書き込みしましたが?
>>431 そうですね、自分の解らない事、伝えるって難しいです。
それは、知っておりました。
でも、わざわざレス感謝です。
>>432 ビンゴ!!!!!!!
そうです!そうしたかったのです!
あ〜すごくすっきりしました!ありがとうございます!!
いやぁ俺プログラム勉強する前に、日本語勉強するべきですね。
難解な文章を読み取ってくれてうれしいです(汗
でも、こうゆうのって、どう書いて説明すれば、いいんでしょう?
いつもは、ネットで検索かけてなんとかするんですが、今回はお手上げでした。
レスくれた皆様ありがとうございました。
すみません、
>>449 で出来そうな感じがして、やってみてるんですが、
Rec := @A[1];
の所でエラーになってコンパイル出来ません、
(が必要な場所に:=があるとかって怒られてます。(T_T)
>>449 本当に、ありがとうございました、出来ました!
当然ですが、僕が間違ってました。
Rec : PRec;
の所が、
Rec : TRec;
になってました。m(..)m
その後、HELPとか見て勉強したのですが、これって文字列の位置
つまり、文字列の格納してあるアドレスをポインタで渡してるって
事ですか?この方法で他の型の違う物でも無理やりバッファとか
に押し込んでおくとかも出来るのでしょうね、凄い。
実は、先月までVB厨房だったのですが、正月からVB捨てて
Delphiを勉強しているアホです。また質問するかもしれませんが、
よろしくお願いします。
型違い。PCharからPRecへの代入は禁止されてる。 Rec := PRec(@A[1])ならいけるはず。 にしても汚いコードだ。 素直に添え字かPChar使えよ。
>>437 遅いレスですが、ありがとうございます。
早速、確認してみます。
>>456 型違いの代入は駄目なのですか?
それは、もしも将来に型の仕様が変化した場合の為ですか?
やりたかったのは、StringListに溜まっている固定長のデータから
数十種類ある構造体へ振り分けてデータを分離して保存する為に
Copyで区切るよりも判り易いかな?と思っての事でした。
とりあえず、切り出しには成功したのですが、添え字を使っては
切り出しみたいな事は面倒になりますよね?
Delphi6をWindowsXP上で動かしている人いますか? 先日、ノートパスコンを買ったらWindowsXPHomeが入っていたのですが、 Delphi6でデバッグをしているときに、マウスクリックが5分後くらいに反応するくらい 重くなる場合があります。 メモリは512MBです。ステップ実行時によくおきます。 同じプログラムをデスクトップパスコン(Windows2000)でステップ実行しても全然OKです。 XPじゃダメなの?XPプロ版ならOKなの?
>>459 起きる人と起きない人がいるようです。
私は XPPRO を常用して問題起きていませんが、会社の XPHome でも問題が
起きませんでした。
システムの復元が ON になっていると、よけいな物を保存するので OFF にした方が
よい。という話を聞いたことがあります。確かめてみては?
うちのXPはDelphi固まってもタスクバーボタンを右クリックすると直る事がある。
462 :
デフォルトの名無しさん :02/02/06 00:02
richedit上で右クリックしても無反応なのは仕様ですか?
DelphiはLinuxへ移植されてKylixが出来た、 WinCEやPalmへは移植されないのか? 特に今後WinCEはクライアントの主力になるのだろう、移植とまで は行かなくてもクロスコンパイルが出来れば良いと考えるがどうか。
Palm 用の VCL のサブセットと Windows IDE ならサードパーティで出しているよ。 Palm は CPU パワーの問題。 CE はプラットフォームの寿命の問題から開発元の MS 以外ではサポートしづらいだろうよ。
CEはこれからしばらくは仕様変更が相次ぎそう
アレ?richeditでのコピー&ペーストのメニュー(なんて言うんだっけ?)が 出ないのは至極当たり前なのかな? オレの環境だけってこたー無いよね?ね?
でるよ
オレの環境、win95っていう素晴らしい環境なんだけど、 98以上だとメニューでるとか…。なんてこたーない? なんか妙なこと聞いてる気がして赤面してしまふ。
popupmenuで指定して実装
>>470 いや、最終的にはソレだとは思ってるんだけど、もしも!
「オレ以外の環境ではメニュー出るのにpopup実装しちゃったら!?」
愉快なことになりそうだったから(汗
検索してみたら(何て検索したらいいのか思いつかなかった)、 「popup実装してみましょう」みたいなページがあった。 よーするに、出ないんだね。richeditでは。
エクスプローラでのファイル上の右クリックとまったく同じメニューを出すにはどうしたらいいんでしょうか? API名だけでもいいので教えてください…
>>437 さん
参照項目を使って、イメージしていた動作
>>409 を実現できました。
結果の報告です。
ありがとうございました。
>445 TOleControl(WebBrowser).Parent := NewTabSheet;
>475 うまくいきました! ありがとうございます!
479 :
デフォルトの名無しさん :02/02/07 04:44
480 :
デフォルトの名無しさん :02/02/07 04:48
??? ところが、 if A = False then if B then ... とやったら、ちゃんと実行されました。(??) そのあと if (A = False) and B then に戻してみたら、また おかしくなりました。 ???
481 :
デフォルトの名無しさん :02/02/07 05:01
>>480 最適化がらみじゃない?
IDEで変数の中身をみてもそれが正しくないことがあるから
OutputDebugString 関数でログ出してみたら。
if (not A) and B then でも駄目?
ダメ元でもう1重かっこつけてみるとか・・ if ((A = False) and B) then
・>481のようにIDEでの変数が実際の値と異なるなら、 実際の値を出力して確認する ・本当に同じ条件で、>480のような状態でちゃんと実行されるならば CPUウインドウでアセンブラレベルで見る
実際には>481の可能性が大。 自分もよくはまりました。特にwith文の中などはよく間違えますね。
,,,,,,,,,,,,,∧,,∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 〜′,,,,,,,ミ,,゚Д゚彡 < 再現性のあるコード掲載しる UU""" U U \_______________
>484 さんの ・本当に同じ条件で、>480のような状態でちゃんと実行されるならば CPUウインドウでアセンブラレベルで見る が確実。 Player.Unfinish がメンバー変数ではなく関数呼び出しを伴うプロパティ の場合、関数呼び出しによる副作用の問題もあり得るから(デフォルトでは 副作用が起きる評価は抑止するようになっているが)再確認を。
レスどうもありがとうございました。 再現性のあるコードは、なにぶんソースコードが入り組んでいるので、 単純化するのに時間がかかりそうです。今はトータルで4000行程度です。多分。 ご指摘の通り、Player.Unfinish は内部で GetUnfinish メソッドを呼び出しています。そういえば、ヘルプで関数呼び出しの副作用について呼んだような気がするのですが、どこに書いてあったか忘れてしまいました…
>>479 これは『ショートサーキット評価』と呼ばれるものです.
(A and B)がTrue(真)かFalse(偽<ぎ>)かを求める場合,
AがFalseならBがTrueであろうがFalseであろうが
(A and B)はFalseになります.
また,(A or B)でAがTrueだった場合は必ず(A or B)はTrueになります.
つまり,両方を調べなくても全体の結果がわかってしまう場合があるわけです.
Aの結果によってBを調べなくても全体の結果がわかってしまう場合に
Bを調べないやり方が『ショートサーキット評価』です.
Delphiのコンパイラはデフォルトで『ショートサーキット評価』を使うので
>479の例ではBの中の関数は呼び出されなかったわけです.
『ショートサーキット評価』を使いたくない場合は
『プロジェクトオプション』ダイアログの『コンパイラ』ページ,『文法オプション』の枠にある
『完全な論理評価(B)』チェックボックスをオンにします.
詳しくはDelphiのヘルプでキーワード『ショートサーキット』で検索してみてください.
ほんとにヘタぐらま。 論理式の評価結果が真なのに IF 文のなかに入っていかない(ようにみえる) ということを問題にしているの。
>>488 おかしい部分の CPU 逆アセンブル結果だけでも貼れない?
∧,,∧ /しかし、ショートサーキット評価 ミ,,゚Д゚ミ < が怪しいとは折れも思ってる ミ ミ \ 〜ミ,UU_ミ IFの所で勘違いしてるだけちゃう? >再現性のあるコードは、なにぶんソースコードが入り組んでいるので、 >単純化するのに時間がかかりそうです。 怪しいなあ。 アセンブラみるとか言う前にコーディング全般を 見直した方がいいかも。
>>488 >論理式の評価結果が真なのに
というが前提であると思ってるとハマるんだって。
本当に真なのかをうたがったほうがいいよ。
そこ、ステップ実行じゃなくて トレース実行してみたら? GetUnfinish で再帰してない?
アセンブラでステップ実行すりゃ5秒で解明するよ
>>490 ヽ(`Д´)ノ ゴウカイニカンチガイシタヨ゙!!
( ) ウワァァン!!
/ ヽ
498 :
デフォルトの名無しさん :02/02/07 15:41
やっと最低限のコードが出来ました。 TChatClient を Create して、Test メソッドを実行してみてください。 そして、Testメソッド内の if (Player.Unfinish = False) and UMsg then にブレークポイントを設定して、値をみてみてください。 Player.Unfinish は False しか返さず、UMsg も必ず True になりますが、 IF 文は実行されませんです。 ----------------------------------------------------------- type TPlayer = class private function GetUnfinish:Boolean; public property Unfinish:Boolean read GetUnfinish; end; TChatClient = class( TComponent ) protected procedure Report(Player:TPlayer; Attr:Integer); public procedure Test; end; implementation function TPlayer.GetUnfinish: Boolean; begin Result := False; { Falseしか返さない } end; procedure TChatClient.Test; var P:TPlayer; begin P := TPlayer.Create; Report( P, 2 ); end; procedure TChatClient.Report(Player:TPlayer; Attr:Integer); var UMsg:Boolean; begin UMsg := Boolean( Attr and 2 ); { UMsg は Ture になるはず。 } Showmessage( Inttostr( Ord(UMsg) ) ); { ここでおかしくなる } if (Player.Unfinish = False) and UMsg then begin ShowMessage('B'); end; ShowMessage('C'); end;
クリックするとファイル開くダイアログが出るボタンを作ろうとした。 unit Test; interface uses Windows, Messages, SysUtils, Classes, Controls, StdCtrls,Dialogs; type TFileSelBtn=class(TButton) private FOpenDialog:TOpenDialog; protected public constructor Create(AOwnder:TComponent);override; procedure Click;override; published property OpenDialog:TOpenDialog read FOpenDialog write FOpenDialog; end; implementation//------------------------------------ constructor TFileSelBtn.Create(AOwnder: TComponent); begin inherited; FOpenDialog := TOpenDialog.Create(Self); end; procedure TFileSelBtn.Click; begin inherited; FOpenDialog.Execute; end; end. しかし、OpenDialogにプロパティをセットしても、実行時に反映されず、 プロパティの値もセーブできない。何が不足しているかおしえてきぼんぬ。
500ゲト(してなかったら藁ってくれ) >499 FOpenDialogを自分でCreateする必要はない。っつーかしちゃダメ。 Clickイベントの所は if Assigned(FOpenDialog) then FOpenDialog.Execute; のようにする。
>>498 UMsg := Boolean(Attr and 2);
で、UMsgがFalseになる。これって正しい挙動なの?非0はTrueなのかと思ってた。
D6PersonalをDLしたばかりの超が付く初心者の俺には分からんヽ(;´Д`)ノ
因みに、UMsg := Boolean(Attr and 1);だと、if文の中身が実行される。
ごめん、勘違い。
Report(Player, 1)で呼び出してたのが原因だった。
1 and 2が0になるのは当たり前だヽ(;´Д`)ノ
と言うわけで、D6Personalでは再現しないです
>>498
あ、私が使っているのは Del6 Pro です。
度々ごめんなさい。 ChatClient.testを呼ぶと確かにif文の中に入っていかないです。 Player.Unfinish = falseだしUMsgはTrueなのに、何故?不思議・・・・・
UMsg := Boolean( Attr and 2 ); のキャストが原因。 言語ガイドによると、Booleanは0がFalseで1がTrueだから、2は範囲外。 0がFalseで非0がTrueになるByteBoolでキャストすると正常に動作する。 これがバグか仕様かということだが、俺には判断できない。 Booleanに入る数値がいつかのバージョンで変わったことがあったような。 VB?に合わすとかなんとか。
う。遅かった。
>>505 正解。
微妙なバグだよ。うん。
大本をたどると C と VB とで論理偽の値が異なることが問題だったんだな。
OLE Automation 関係で VB 流儀が Windows に大量に流れ込んだ時点でいろんな
ところに破綻が起きた。MS-C / MFC にも影響がでている。
フサは UMsg := Boolean( Attr and 2 ); こんなコードを自分で書くことは”絶対”ないので すごく読みにくく感じるのですが これって、いったい何がしたいのですか?  ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ∧,,∧ ハテ? ミ,, ゚Д゚彡 〃つl⌒|⌒l 〜ミ,,[ ̄ ̄ ̄.]  ̄ ̄ ̄ ビットが1か0かを調べるには なんか他に方法があったような気が…
>>498 えーと、分かったです。
if (Player.Unfinish = False) and UMsg thenの場合
Call Player.Unfinish
test al, al //Player.Unfinish = Falseの比較をしてるです。
setz al //必ずTrueになるから、最適化されたのかな?だとしたらtest al, alは無駄なような?
test al, bl //blはUMsgだから、文字通りPlayer.UnfinishとUMsgをandしてるらしい<オイ!
結果は0になるので、if文の中に入れないですよ(´д`;)
if (Player.Unfinish = False) and (UMsg) thenとしてやれば
test al, al
jnz //if文の外へ
test bl, bl
jz //if文の外へ
となり、OKでした。
UMsg := Boolean(UMsg and 2)してもUMsgの中身が2のままなのが妙に不思議な気もしますが・・・・・
なんか、フサギコさん性格変わりました? いぜんはそんなに嫌味じゃなかったような。 それはいいとして、 Boolean は非ゼロでもTrueとみなされないのですね。 というか実行時エラーオプションで 範囲チェックを有効にしているので、そういうのはエラーになると 安心していました。 以後気をつけます。 どうもお騒がせしました。
>>506 ふぉろーさんくす。
OLE Automationか。すっかり忘れてた。
>>507 俺なら
UMsg := (Attr and 2) <> 0;
かな。キャストしなくても論理値になるし。
>>509 ギコ系だからそんなもんでしょ(w
というか、ByteBool 使わずに素直に UMsg := Attr and 2 <> 0 と書くことにします。
ヘルプから引用。 >範囲チェック 配列と文字列の添字が範囲内にあるかどうかを検査する。
やっぱ、
>>498 の例はDelphiのバグでは?
試してみたけど、Booleanは非ゼロをTrueと評価してるように見える。
そもそも、(Player.Unfinish = False) and UMsgは
Boolean(Player.Unfinish = False) and Boolean(UMsg)と
見なすのが唯一の解釈で、Player.Unfinish and UMsgとは見なせない。
だって、UMsgはBoolean型だからTrue、False以外の値を持ち得ないのだから
それに、UMsgがTrue&Flase以外の値(この場合2)を持ち得るとすれば
Boolean型と非Boolean型のandってことになるから、コンパイルが通るのは
おかしいと思うんだけど、どうかな?
検証用のコード
function A:boolean;
begin result:=false;
end;
var B:boolean;
begin
B:= Boolean( 2 );
if (A=false) and B then
caption:='OK';
end;
コンパイル結果
mov bl,$02
call A
test al,al
setz al
test al,bl
jz +$0c
mov edx,$00450324
mov eax,esi
call TControl.SetText
>>513 あくまでも、Boolean型なのに無理やり型変換したのがバグの原因です
型変換は、その型を安全に変換してくれる訳ではありません
型変換を使う時はそのチェックは自分ですべきです
俺もトリップでヲーデルファしたいかも インデントは全角スペースで。 |,,∧ |Д゚彡 ジー ⊂ミ | ,;゙ 時々マターリが不足して |´ カラダヂウ イヤミン に満たされたり… きっとあれですね。月に一度やってくるというアレ フサならxバイト目のビット を調べる関数を作ってしまうかな。 0000 0000 0000 0010 と and とって<>0 って何を表して…るんだ?? 論理演算苦手なの。。。 ああ、きっとまた「おまえほんとにプログラマか?」 とか言われちゃう
>月に一度やってくるというアレ 狼男?娘男?
>>516 引用がちょっとズレているような?
513 は不満を表明しているようには見えんが。ただ、議論は
間違っているが。
デルファイありきで語ると、反デルファイは敵に見えちゃうらしいな(w A, B: Boolean; A := Boolean(2); B := Boolean(4);とした時 if A thenはTrueとなり、if B thenもTrueとなるが if A and B thenはFalseになり、if (A) and (B) thenはTrueになる。 対処はいくらでも可能だから、これをもってデルファイは云々と 言うつもりは全然ないけど、なんか美しくない。
ヘルプ見てみました >ByteBool 型,LongBool 型,または WordBool 型の値は, >順序値が非ゼロの場合に True と見なされます。 >Boolean が期待される状況でこれらの値が使用された場合, >コンパイラは順序値が非ゼロの値を自動的に True に変換します。 ここだけ読むと 常に0か0でないかで区別してるように見えますね だから if A then ・・ という処理は Aが0でなければ実行されると思います しかし、 >変数を論理型に型キャストしても結果は保証されません という文もあります。これは論理演算を使う場合にはダメだよという意味と思いますよ また、論理型は順序型の一つです ですから LOW(boolean)〜High(boolean)の 範囲になければいけません。
>>518 Delphiのバグにしたいようなので。
理屈からいうと、たぶん論理型は0か1しかダメだよとしたいけど それではAPIの呼び出しとか 他の言語と通信するのが不便だから 単独で条件分岐した場合は 0かそうじゃないかになるようにしたんじゃないかな でもこれ気を付けないといけないな 特にAPI呼び出しとかでは論理演算使わないようにしないと
>デルファイありきで語ると、反デルファイは敵に見えちゃうらしいな(w Delphiであろうとなかろうと、処理系よりも先に自分で書いたコードを疑うべき ではないかと思っているだけ。
>>522 省略せず、if (A = True) and (B = True) thenとすれば、特に意識する
必要はないと思う。
勿論、if (A) and (B) thenでも構わないけど、省略はせず多少回りくどい
くらいの方がパスカルらしいかも?
>>524 案外 、
if (A <>False) and (B <>False) then
じゃないとダメだったりして
個人的には合法な手段(UMsg := (Attr and 2) <> 0;)があるのに、無理やりキャストしたほうがやっぱり悪いと思ふ。
>>526 オイオイ、見えてねーな。もう誰もそんな話はしてないだろ?
例えば、Boolean型を引数に取るライブラリを組むとして、渡されたBooleanが
整数型をキャストしたものでないとは限らないだろ?
だから、ライブラリ内でif boolean and boolean thenを使う時は、()で囲むか
省略せず(boolean = True)しといた方が安全だというお話、OK?
例えば if ( 1000-999-1 ) then が行儀良いと思わんがのぅ
あほやなあ。 Boolean 型で渡されたっていうんなら Boolean 型でしかないからそれがどのような形で作られたかを気にする必要はないだろ。 今回は Boolean 型を作るときに Int 型を無理に Boolean 型にキャストするという非合法なことして自分のミスでバグったんだろ。 だからその関数が本当に Boolean 型で返ってくるんなら (boolean = True) なんて無駄なことをする必要はかけらもない。 要するに UMsg := Boolean( Attr and 2 ); { UMsg は Ture になるはず。 } の "なるはず" に問題があったって話じゃないか。 本人も UMsg := (Attr and 2) <> 0;) とすべきだといってただろ。 520 だって >また、論理型は順序型の一つです ですから LOW(boolean)〜High(boolean)の >範囲になければいけません といってるだろ。 要するに 整数型 を 論理値型 に強制キャストするのが悪いっつーの。 C言語や Basic では論理値型として明示的に整数を使ってるけど Derlphi はそうじゃない。 >Object Pascal では論理型の式を整数や実数と等価に見なすことはできません。 とヘルプにもかかれているだろ。 Delphi は整数型と論理型を明確に区別してんだよ。 他言語と似たようなもんだと勘違いしてとろいこといってんじゃないよ。
>>528 行儀も何も非合法だってば。
Boolean のヘルプの下のほうの例にちゃんと書いてある。
例では X という整数変数を使ってるけど即値だって条件は同じ。
519 のソースなんて Integer を Boolean にキャストしている時点で非合法だよ。 たまたまうまくいっていると合法を勘違いしないで欲しいね。
Cで作られたDLLをDelphiで使った時に、Boolean でハマったことがあったな。 たとえば C側: void foo(BOOL bFlag); Delphi側: procedure foo(bFlag: Boolean); のように宣言して、foo(True); を呼び出すと、foo には -1 が渡される。 Cの方では if (bFlag == TRUE) なんて判定してたから、 常にFALSEの方の処理しか実行されなかった。 DLLには手が加えられなかったから、仕方なく Boolean を Integer に 変えて対処したよ。 そんなわけで>524よ、Trueと比較するのはやめとけ。
>>532 論理型のヘルプを見る限りではそういった用途には Boolean ではなく ByteBool,WordBool,LongBool あたりを使うらしい。
> ほかの言語や Windows 環境との互換性を提供するために用意されています。
とも書かれてるしな。
おもしれーな、ここの議論。 個人的には、C の Bool がゼロ、非ゼロでキャスト可能なのより、 Delphi の Pascal の Boolean のほうが論理値という意味で純粋 なので好きです。でも、APIとの関連などで、どうしても代入しなけれ ばならない時は、必ず、(式)<>0 の形で、論理値にしてから 代入すべきだと思っています。 Boolean に型キャストで代入するな!、ということで。 今回のことで自戒もこめて。 それから、if 文などの論理式のなかで Boolen 型の変数と true または false を比較するのは二重に論理式を評価しているので 混乱するばかりか、冗長でもあると思います。
535 :
デフォルトの名無しさん :02/02/07 22:21
こんばんは。初めまして。 C++Builderのexeをスタートアップに登録して 起動時にある処理を行いたいのですがその時フォームを非表示 にして処理を行いたいのです。 で,下記の様に記述するとフォームを非表示にできる事は 解ったのですが最初の処理をどこに記述したら良いかよく 解らないのです。 VBの場合だとSub Main()ルーチンに記述するのですが・・・ Formのshowイベントとかはまずいし・・・・・・ 参考になる物があったら教えて下さい(T__T) Application->ShowMainForm = false;
MainFormのOnCreateは?
>>535 そもそも、フォームが必要ないならフォームを使わなければいいだけだろ。
なんで、非表示にする必要あるんだ?スレ違いだし。
XPの互換モードでDelphi6を動かしても固まった。。。 もうだめぽ。。
DelphiのBooleanはTrue = 1, False = 0 ByteBool, WordBool, LongBoolはTrue = -1, False = 0 とどこかのDelphi本で読んだような気がする。
>>498 くっそー、おもしれーネタだったのに乗り遅れた(涙)
かなり遅レスだが・・・俺にも言わせてくれ〜!
そんな変な書き方がどーしてもしたいのならば、
> UMsg := Boolean( Attr and 2 ); { UMsg は Ture になるはず。 }
ここを
UMsg := (Attr=2);
こーだ。(w;
はぁ・・・。俺が498になってらぁ・・・。(涙) 自作自演じゃねーよ、コピペミスってただけだい!
>>ByteBool, WordBool, LongBoolはTrue = -1, False = 0
正解。で VB 由来の値。-1 は正確には全ビット1が立った値です。
Windows そのものを作っている C では False = 0 で,それ以外の値は全部 True。
C には論理型は組込型としては存在しないことに注意。
MS-C/Visual-C では Version4 の時に VB-Bool とのすりあわせが行われたようだ。
ちょっと細かい時期まではわからない。
C++ には言語仕様に論理型が加わり,当然 ANSI-C++ としては C の論理型を踏襲したため
bool と BOOL の二種類の「論理型」が存在する。
bool
http://www.microsoft.com/JAPAN/developer/library/vccore/_langref_bool.htm BOOL
(みつからん)
>>542 いや、それだと Attr := 2 or 4 とかってやってた場合に対処できないジャン
ヘルプ読まないやつ多すぎ。
>>544 ByteBool, WordBool, LongBool は
Ord(False) = 0
Ord(True) <> 0
と定義されてる。
-1 とは限らない。
-1 が True であるのは確かだが。
出遅れたか(w ザクっと読んでみたが 1.if A and B then 2.if (A) and (B) then の違いが理解できてる奴は半分くらいしかいないな。 これが理解できないと、本質的な問題は理解できないだろ。
∧∧ ミ _ ドスッ ( ,,)┌─┴┴─┐ / つ 釣り禁止 〜′ /´ └─┬┬─┘ ∪ ∪ ││ _ε3 ゛゛'゛'゛
テストコード program bool; {$APPTYPE CONSOLE} procedure CheckBoolean(a: Boolean); begin if (a = true) then Write(True) else if (a = false) then Write(False) else Write('out of boolean range.'); end; const Ints: array [0..5] of Integer = (-1000, -1, 0, 1, 2, 1000); var i: Integer; a, b: Boolean; begin for i := Low(Ints) to High(Ints) do begin Write(Ints[i]); Write(', '); a := Boolean(Ints[i]); if a then Write(True) else Write(False); Write(', '); if (a) then Write(True) else Write(False); Write(', '); CheckBoolean(a); Writeln; { // 場合によってはランタイムエラー a := Boolean(Ints[i]); Writeln(a); } end; Writeln; a := Boolean(2); Write('a = '); CheckBoolean(a); Writeln; b := Boolean(4); Write('b = '); CheckBoolean(b); Writeln; Write('a and b = ', (a and b)); Writeln; Write('(a) and (b) = ', ((a) and (b))); Writeln; Write('CheckBoolean(a and b) = '); CheckBoolean(b); Writeln; Write('CheckBoolean((a) and (b)) = '); CheckBoolean(b); Writeln; end.
実行結果(Delphi6 Pro) -1000, TRUE, TRUE, out of boolean range. -1, TRUE, TRUE, out of boolean range. 0, FALSE, FALSE, FALSE 1, TRUE, TRUE, TRUE 2, TRUE, TRUE, out of boolean range. 1000, TRUE, TRUE, out of boolean range. a = out of boolean range. b = out of boolean range. a and b = FALSE (a) and (b) = TRUE CheckBoolean(a and b) = out of boolean range. CheckBoolean((a) and (b)) = out of boolean range.
C言語は論理型の変わりに整数でやってるからすぐに問題になるんだけれど、 Delphiは隠しちゃってるからいざ問題に遭遇するとあわてちゃうね。
if (a = true) then Write(True) else if (a = false) then Write(False) else Write('out of boolean range.'); これがおもしろいところで、論理型も単なる順序型の1つつーことで。
>>550 al = A; bl = B
if A and B then
{ if (A and A) = 0 then A = 1 else A = 0}
test al, al
setz al
{ if (A and B) = 0 then False else True}
test al, bl
jz False
if (A) and (B) then
{ if (A and A) = 0 then False }
test al, al
jz False
{ if (B and B) = 0 then False }
test bl, bl
jz False
A := Boolean(2); B := True;
1.if A and B then True else False;
2.if B and A then True else False;
さて、1.と2.の結果はどうなるでしょう?(w
×:{ if (A and A) = 0 then A = 1 else A = 0 } ○:{ if (A and A) = 0 then A := 0 else A := 1 }
557 :
デフォルトの名無しさん :02/02/10 09:32
順序型の範囲外の値は実行時エラーにはならないものかのォ もしくは警告を出すとか。 「警告 順序型の範囲を越える可能性があります。」 構文チェッカー、だれかツクッテヨ いや、まじで。コンパイラで拾えないエラーや、バグの原因にありがちな 書き方を警告してくれるという。
>>557 型変換はアプリレベルではむやみにやらないというので良いのでは?
String<-PCHAR のおかげで型変換のクセがついてしまってるのが元凶でCスタイルの侵食かもね
>>558 「型変換」って何?
ヘルプでは「型変換ルーチン」とかあって、Rect() とか StrToInt() とか
あるが。
> String<-PCHAR のおかげで型変換のクセがついてしまってるのが元凶
これの「型変換」ってどうするの? 矢印の向きが逆では?
型キャストと「型変換」は別な概念では?
>>557 「あなたにはこれは使いこなせません」という警告が出たりして
「(致命的エラー) 構文エラーが多すぎます」 ってエラーメッセージを出してほしいもんだ。
「警告 あなたのコードはいたるところでエラーになる可能性があります。」
>>557 > 型変換はアプリレベルではむやみにやらないというので良いのでは?
型変換が型キャストのことだとすると、型キャストなしではOOPの
多態性を利用できませんが、どうしましょう?
ちゃんと意味のある型キャストは、アプリレベルで利用しても何の害
もありません。むしろ有用な場合が多いです。
「むやみ」というのが「意味も分からず」ということでしたら、
そのとおりだと思うんですが。
>>563 >型変換が型キャストのことだとすると、型キャストなしではOOPの
>多態性を利用できませんが、どうしましょう?
そんなことはないだろう。
まぁ、型キャストは使ったほうが便利ではあるが、多態性の利用に
とって必須ではないよ。
>>557 じゃなくて
>>558 ね。
>>564 >まぁ、型キャストは使ったほうが便利ではあるが、多態性の利用に
>とって必須ではないよ。
そうですかぁ、上位クラスへの代入互換性も型キャストの一種という
ことではだめですか?
マウスがフォームの外にあっても、マウスのデスクトップ全体からの座標を取得するには どうしたら良いでしょうか? 現在、TTimer(Interval=1)と、GetCursorPosを組み合わせているのですが、 どうもしっくり来ません。
564の言ってるのは明示的なキャストのことで、565の言ってるのは暗黙的な キャストだろ? で、564は使い分けてるけど、565はどっちも同じモノとして 見たいと。
>>566 フックかSetCaptureだな。
常にマウスの動きを監視したいならフック、
TScrollBarみたいに限られた時間だけ監視するならSetCapture。
>>568 タイマーを使うと重くなりそうだし、また、必要以上にちらつくからです。
正しくない感じもしますし。
>>569 フックをするにはどうすればいいでしょうか?
フックプロシージャのインストールの仕方や、コールバック関数の書き方がよく分かりません。
もし宜しければ教えてくれませんか?
566さん 何をしたいのか書いてみては? D&Dを実現する程度の事なら SetCaptureで間に合いますよ
>>571 えーと、書いたとおりなんですが、
常に、マウスの位置を取得したいのです。
具体的にやりたいことを言いますと、マウスの動きを記録したいのです。
>>572 そうじゃなくて、なんのためにマウスの動きを記録して、どうするわけ?
俺はそんなアプリなんて書かないから、目的がわからん。
だから目的がわかれば別解も出てくるんじゃないの?
ついでに言うと
>フックプロシージャのインストールの仕方や、コールバック関数の書き方がよく分かりません。
というのは自分なりに調査した結果だろうから、例えば「〜のページを見て書いて
みたけど〜の所がわからないので教えろ」とか書けば誰か教えてくれると思う。
TThread の派生クラスにメンバとして procedure OnTerminate(Sender:TObject) を持たせて、 それを property OnTerminate に代入することはできないのでしょうか。 TForm などではオブジェクトインスペクタを使って、同一クラス内で プロパティと同名のプロシージャを設定できるようですが。 というか、こういうときは同じ名前を使うわないほうがいいんでしょうか。 また、汎用の関数を作るとき、処理に時間がかかりそうな場合は最初からTThreadを 継承して作るべきですか?
∧,,∧ / ミ,,゚Д゚彡 < ちょっと意味がわからんですが U U \ 〜ミ ミ ∪∪ procedure DoTerminateとか procedure Terminateとか名付けるものではないかと... プロパティと同名の手続きは設定できないのでは? >また、汎用の関数を作るとき、処理に時間がかかりそうな場合は最初からTThreadを >継承して作るべきですか? 知らない。
>>579 はい、設定できないと思うんですが、オブジェクトインスペクタで Form1 とかのイベントを
いじると OnClick イベントに OnClick プロシージャが設定できたりするので聞いてみました。
Do を付けたりするのが一般的ならそちらにしようと思います。
>>577 TThread に限らず、「継承してぶち込む」って考え方は間違っているので考え直しなさい。
単独テストをしておいてスレッド関連以外のバグをつぶしておいてから、
TThread から「呼び出す」
もちろん呼び出す関数自体はスレッドから呼び出されることを考慮して作るんだよ。
グローバル変数なんかはつかってはいけない。
>>581 すみません、質問が言葉足らずでした。
処理に時間のかかる関数をTThreadから呼び出した場合、Terminate しても
その関数からすぐに抜けることができないのでちょっと困るような気がします。
(アプリケーションごと終了するときなど、結果が出ていなくても中断しなければいけない時がある)
それで、その関数を作り直して TThread にしたほうがいいかな、と思ったんです。
∧ ∧ 常に停止指令がくることを ミ ゚Д゚彡 予想してプログラミングヲ 〜ミ,,,,uuミ ループとかでフラグ見て途中停止処理を入れましょう スレッドハ中々難しいんですよね サブフォルダまでファイル名列挙とか、 誰かスレッドを使って実現したクラス持ってないかしら。
>>582 固有のスレッドにしたからといって、好きなときに止められるわけではないが。
スレッドは同時に複数実行できるってことでしかないのだよ。
>>582 気持ちは凄いわかる。
俺もその辺の理想的な回答を知りたいと思ってるけど
多分、理想的な回答はないんだと思う。
いっそ時間の掛かる処理は全部COMにしてみっか?
とか真面目に思ってるんだけど・・・・・
デバッグが超面倒なんで挫折気味ヽ(;´Д`)ノ ムツカシー
何が起きても良いから中断したいのなら Halt しちゃえば? それがいやなら、ちゃんと自分から終了しにいくようなコードを作らないと。 スレッドにしようが外部プロセスの COM にしようが、後始末の問題は残るし。 例外をうまく使えば、多重ループの奥の奥から一気に終了させることができるから そちらを考えた方が良いよ。l
Haltはマジ強制終了でまずくない?
嫌ならちゃんと後始末できるコードを作るしかない
589 :
デフォルトの名無しさん :02/02/12 09:20
以下のような処理関数を作れば良いかと。 そうすれば、特定のクラスなどに依存しない、汎用ルーチンができると。 type //中断すべきならばTrueを返すような関数 TCheckFunc = function of TObject; EHalt = Expression?;(例外のスペル忘れた… function Proc(Param1,Param2,..; CheckFunc:TCheckFunc=nil):Boolean; begin try 処理内容。 事あるごとに if CheckFunc then raise EHalt; と書いておく。 extract on EHalt do 強制終了時の処理; end; end;
訂正。 if Assigned(CheckFunc) and CheckFunc then raise EHalt;
>>589 で、[処理内容]を実行中はどうやって CheckFunc の内容を変更するの?
やはり別スレッドで、ということですか?
>>590 > if Assigned(CheckFunc) and CheckFunc then raise EHalt;
関数の宣言をみると、Boolean を返してないようだが?
of TObject って何?
593 :
デフォルトの名無しさん :02/02/12 11:00
TCheckFunc = function:Boolean of TObject; です。of object は、TCheckFunc はルーチンではなくメソッドだってこと。 [処理内容]部分には、長くても数秒ですむような(いや、短いほどいいんだけど、そうするとオーバーヘッドで余計処理時間が長くなるし) コードを書いておく。たとえば、ディレクトリ一覧をつくるのであれば、 function Proc(Root:string; Files:TStrings; CheckFunc:TCheckFunc=nil):Boolean; begin try Rootに含まれる最初のファイルを探す. Files.Add( Root ); while まだ次のファイルがあれば do begin if ファイルがディレクトリであれば then Proc(ディレクトリ名, CheckFunc) else Files.Add( ファイル名 ); if Assigned(CheckFunc) and CheckFunc then raise EHalt; end; extract on EHalt do 強制終了時の処理; end; end; ていう感じで…
594 :
デフォルトの名無しさん :02/02/12 11:04
また訂正。 function Proc(Root:string; Files:TStrings; CheckFunc:TCheckFunc=nil):Boolean; begin Result := False; try FindFirst(...); //Rootに含まれる最初のファイルを探す. Files.Add( Root ); while まだ次のファイルがあれば do begin if ファイルがディレクトリであれば then begin if Proc(ディレクトリ名, CheckFunc) then raise EHalt; end else Files.Add( ファイル名 ); if Assigned(CheckFunc) and CheckFunc then raise EHalt; end; extract on EHalt do 強制終了時の処理; Exit; //EHalt が発動されたら、結果をTrueにすることなく抜け出る end; Result := True; end;
いや、of Object は知っているんだが of TObject というのは 初めて見たもんで。 594 で処理を実行している間、どうやって CheckFunc が false を返すようにするのかが分かりません。別スレッドでもない限り ボタンを押すこともできないし、Timer メッセージも処理されな いし。
あ、中断するためには true を返すんだね。
597 :
デフォルトの名無しさん :02/02/12 13:54
ごめん、TObject は typo. >594 で処理を実行している間、どうやって CheckFunc が false >を返すようにするのか それは、中止ボタン等に DoStop := True とかいておいて、 function TForm.CheckFunc:Boolean; begin Application.ProcessMessage; Result := DoStop; end; とかやっておけばよいのでわ。
>>597 なるほど、了解しました。ご教示ありがとう。
ボタンを押せるのは、CheckFunc で
Application.ProcessMessage;
を実行しているからですね。ふーむ、だとすると、
594 の Proc()の中の while ループに
Application.ProcessMessage;
を置いておいて、CheckFunc をわたす代わりに Boolean 型のフィールド変数を
参照するのと同じですね。関数を渡すことの利点について教えて下さい。
Application.ProcessMessages; ですね
600 :
デフォルトの名無しさん :02/02/12 14:21
>関数を渡すことの利点 それは、たんにルーチンを一般化するってだけ。 たとえば、関数内で直接 Boolean変数を参照すると、 グローバル変数の参照になっちゃうでしょ。 例に出したディレクトリ検索ルーチンみたなものを 自作ライブラリなんかに入れたときに困ることがあるし。 それに、中断機能を使わない場合なんかに、グローバル変数だけ 残るのもなんか汚いし。使う必要が内場合でも気持ち良く出来るように、 関数を指定しなくても良いようにしてあるという… function Proc(....; CheckFunc:TCheckFunc=nil):... の =nil のぶぶん。
…俺なんか間違ってる事言ってるかな。 有識者の意見キボン
>>600 禿同。
ライブラリにすることを考えると、極力グローバル変数は使わない方向に行きますね。
>>600 >たとえば、関数内で直接 Boolean変数を参照すると、
>グローバル変数の参照になっちゃうでしょ。
いや、関数内で何かのクラスのメソッドを参照するのと、
そのクラスの Boolean 型のフィールド変数を参照するのと
は同じではありませんか。597では変数 DoStop を使って
いるので結局同じではありませんか。
でも、関数のほうが一般化できる分だけ有利ですね。確かに。
必要ないときは Application.ProcessMessages; を実行しな
くて済む分だけでも、関数を渡した方がよいですね。
ありがとうございました。
いやいや、メソッドの参照とフィールド変数の参照はちがうよ。 「フィールド」は、あくまでも「ある特定のクラスに属する変数」 でしょ。「特定のクラス」。例に出した Proc 関数は、 特定のクラスに依存しないルーチンであってメソッドということ。 あるルーチンがフィールド変数を直接参照していると、そのルーチンを利用するためには、たとえ全く使わなくてもそのルーチンが「必要とする」クラスを生成しないといけないでしょ。 「特定のクラスの、特定のフィールド変数」を利用するのではなく、 あくまでも「只のメソッド」を利用することによって、それがいかなるクラスに属する物であれ、引数が無く、Booleanを返すものであればなんでも指定できることになる。 …と思う。
訂正。 × 特定のクラスに依存しないルーチンであってメソッドということ。 ○ 特定のクラスに依存しないルーチンであるということ。
>>604 おや、そうですか。
関数を渡す代わりに、Boolean型の変数を var 渡しにしても
同じではないですか? メソッドだって、「あるクラスに属する
関数」じゃないですか?
Proc を別ユニットに作成したとしても var StopFlag:Boolean
のパラメータでどうして特定のクラスに依存することになるのですか?
いや、その「あるクラス」をルーチンが決めたのでは困るという意味。 たとえば、あるルーチンが「内部でクラス THoge のフィールドを参照しています」 というのであれば、それを使う時は必ず THoge を利用しないと いけないじゃない。「あるクラス」はあくまでも単なるクラス であって、特定の THoge とかを指すのではないという 意味だったんだけど… というか、 var 指定ってそう言う使い方が出来るのか。いや、 考えてみればそうだな。ごめん、全く思いつかなかった。 確かにそのほうがよいね。
>>607 >確かにそのほうがよいね。
いや、603で書きましたように、最初の通り、関数(メソッドでもよい)
渡しの方が汎用性があってよいと思います。APIのコールバック関数み
たいにライブラリ関数のユーザが自由にコードを書ける、という意味で。
おつきあい、ありがとうございました。
609 :
デフォルトの名無しさん :02/02/12 18:11
WinSightのように、クラスを獲得出来るソフトって無いでしょうか?
>>609 「クラスを獲得」ってどういう意味?
WinSight じゃなぜだめなの?
∫ ∧,,∧ ∬ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ミ,,゚Д゚ノ,っ━~ < 今日も寒いやね。 _と~,,, ~,,,ノ_. ∀ \_________ .ミ,,,/~), .| ┷┳━  ̄ ̄ ̄ .し'J ̄ ̄|... ┃  ̄ ̄ ̄ ̄ ̄ ̄ ̄ .┻ よくわからんですが、Application.ProcessMessageを 呼ぶタイミングと同じタイミングで イベントをよんで、ライブラリを使う側から Applicaion.ProcessMessageを呼んだり 他の処理させたり、ストップ命令出したりすると よいと思われ。 ま、関数渡しと変わらんけど、イベントの方が より柔軟では? って、同じ事逝ってるか… procedure TFom1.AruEvent(var Stop: Boolean); begin if AruJyoken then Stop := True else Stop := False; end;
>>612 >同じ事逝ってるか…
同じだと思います。イベントハンドラは単なるメソッドですからね。
>>612 どうでもいいけど、フサギコさん、トリップ使うようになってから
スキル落ちてないですか?
615 :
デフォルトの名無しさん :02/02/13 00:46
スキルあげ
616 :
デフォルトの名無しさん :02/02/13 01:11
教えてDELモナ 解像度(画面の領域)を変えるにはどうすればいいでしか?
Enum/ChangeDisplaySettings
>>617 ありがとうDELモナ
漏れには分からないモナ
俺は素直にTThread継承させるなぁ・・・
>>620 そうだね。きれいな中断方法教えてください。
if Assigned(CheckFunc) and CheckFunc then だるいんで function TForm1.NullCheckFunc:Boolean; begin Result := False; end; if CheckFunc then ...
TThread.Executeが800行 逝ってくる
こっちでも。 じさくクラスに、プロパティ類コピーの目的で THoge.Assign(Source:THoge) とか作るとするじゃない。 そうするとさ、Assignメソッドのなかで、少なくとも全部のプロパティを コピーしなきゃならないでしょ。 あとでプロパティを増やしたりしたときに、Assignメソッド内に そのプロパティをコピーする項目を増やすの、絶対忘れちゃうんだよね。 みんなはどうしてるの? 根性で思い出してるの?
625 :
( ´∀`) :02/02/13 10:26
サンプルコードに、スレッドとTreeViewを組み合わせた奴が… なかったっけ? Sortだけだったっけ。
626 :
エフェドリンながヰ :02/02/13 10:54
http://www.puchiwara.com/hacking/ __,,,-‐――‐-、__ ヽ、
__=ニ-―''''"""゙゙`‐-、_`ヽ、 ヽ.
__,/ ,.--ヾ/''''''"'''"''ー、、ヽ、ヽ、 ヽ.
/ / / ミ `ヽヽ i
/ / i / ヾ__ヽヽ |
/ / ,| | __L i | |
/ /| |ヽ | ,,,,-∠''''"" ミ i| |
{ | { |-+ヽ,,,,,,, ,,illニ-==三`゙`‐---+ | |
|| i |┼'"三三ヽ ;/(ソ::ノ T´ ヽ-、.| |
ヽ ヽー'"(ソ:)` ! ‐‐-‐'´ ∧`}| .|
.| ``''"´ / ヽ. { !| .|
.i < '´/ | ||
! ヽ ` ○ | ||
ハ. _,=--- / | |.|
.| ヽ. `'''''''´ / | | | | |
| | ヽ ,. ' / .| .| || || |
.| | / ヽ ,/ / | | || || |
| | / `_t‐‐‐'"´,.----―''''''7 | || || |
.| | / / <"ヽj / __. /┐| || || |
./ // /,.-‐ゝ->‐/-‐ヽ__/‐‐‐/ ヽ|_ || |.| |
./ // //,.-〈 〈‐、 \--/ ``ー、!_|
>>.624 Published だけなら実行時型情報で列挙してコピーするなんて出来るかもしれないけど nameとか コピーしちゃいけないのって出てくるから難しいかもね
628 :
デフォルトの名無しさん :02/02/13 11:19
>Published だけなら実行時型情報で列挙してコピーするなんて出来る これって、どうやるの?
629 :
デフォルトの名無しさん :02/02/13 12:24
.NETもいいが 旧世代Windows向けの究極の開発ツールとして「Borland C#」出してホスィ Nativeなやつね
TStringGridの内容Excel等の表計算ソフト向けにコピペするソフトを作っているのだが 現状はお約束通りの方法↓ function _GridTo:String; var X,Y:Integer; begin Result:=''; with Grid do for Y:=0 to RowCount -1 do begin for X := 0 to ColCount-2 do Result := Result + Cells[X,Y] + #$9; Result := Result + Cells[X,ColCount-1] + #$D#$A end; end; でやっているのだが、500行以上になると遅くてヽ(`Д´)ノゴルァ!な状態。 スピードアップ改善策を練っているのだが、速度改善のコツがあったら教えてきぼんぬ。
632 :
デフォルトの名無しさん :02/02/13 19:56
TMemoryStreamなんですが、ひとつのTMemoryStreamで動的に確保できる 最大の容量が16MBまでだったり、複数のTMemoryStreamの合計が最大32MBまで だったりの制限なんてあるのでしょうか??どうもバグを発見できなくて…
634 :
デフォルトの名無しさん :02/02/13 20:15
自分で書いたソースですか?それともVCLの? 自分で書いたソースの方は何度も見直しているのですが 疑わしい箇所を発見できなくて、もしかしてTMemoryStreamに そういう制限があるのならこの挙動も納得できる、 っていう仮説を立ててみたのですが、そんな制限は無いのでしょうか?
とりあえずそういったバグは聞いたことない。 48MB扱うサンプル書いてみたら?
>>631 TStrings.Assignで一行(or一列)まとめて取り出したら?
>628
with TMemoryStream.Create do
begin
WriteComponent(Source);
Seek(0,0);
ReadComponent(Self);
Free;
end;
とか。でも
>>627 のいうとおりややこしい部分もあるかも。
>>628 Web 上のどこからのコピペコードだが
uses TypInfo;
procedure GetPublishedProperties(comp: TComponent; lst: TStrings);
var
Props: PPropList;
TypeData: PTypeData;
i: Integer;
begin
TypeData := GetTypeData(comp.ClassInfo);
if (TypeData = nil) or (TypeData^.PropCount = 0) then Exit;
GetMem(Props, TypeData^.PropCount * sizeof(Pointer));
try
GetPropInfos(comp.ClassInfo, Props);
for i := 0 to TypeData^.PropCount-1 do
begin
with Props^[i]^ do
lst.Add(Name);
end;
finally
FreeMem(Props);
end;
end;
解決しました。 ただ単に最初にSetSizeで48MBなり64MBなり設定して確保しておくだけで 問題がクリアしました。今までSetSizeしなくても動的に確保してくれて いたのでほとんど疑っていなかったのですがこれで前に進める〜 泣きそうでしたよマジで。SetSizeしなかった理由は、Sizeを参照して 現在のサイズを調べてたからなんです。この辺は複数メモリストリームを 用意して解決できそうです。回答してくれた方ありがとう!
∧,,∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ミ,,゚Д゚彡 < WriteCompoもどぞ U つ∀ \____________ 〜ミ ミ ∪''∪ MidNightはワインでも・ var MemStream: TMemoryStream; NameBuffer1, NameBuffer2: String; begin MemStream := TMemoryStream.Create; try NameBuffer1 := Compo1.Name; NameBuffer2 := Compo2.Name; Compo1.Name := 'XX'; MemStream.WriteComponent(Compo1); Compo1.Name := NameBuffer1; MemStream.Position := 0; MemStream.ReadComponent(Compo2); Compo2.Name := NameBuffer2; finally MemStream.Free; end; こんなんで動くかしら?
642 :
デフォルトの名無しさん :02/02/14 01:12
ここだったかな?UPXの話題が出てたのは。スレが多くて…。 初めて使ってみたけど半分くらいにはなるのな。 どーもアングラなニホヒがして使っていいものやら困る(^^;。 ボーランドさんが正式に採用して、自動的にUPXの圧縮当てるとか するのはどーか(藁
またサイズの話かよ...
たった今 ∧,,∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ミ,,゚Д゚彡 < 昨日のノミの腰のビルーを飲んだ ミ つ日 \___________ 〜ミ,,,,,, ,,ミ ∧,,∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ Σミ゚Д゚,,彡 < どえらいマズイ ミ つ日 \___________ 〜ミ,,,,,, ,,ミ ペッペっ (実話) そんな話題>>Exeのサイズ 実行時パケージ使いなさい
時々、Delphiでプログラム作成中にDelphiで作られたで あろうと思われるプログラムを起動すると起動できない 事があるのですが、これって定説?おれだけ? 例えば、WinXP上でD6あげてて ギコナビあげた時とか。
646 :
デフォルトの名無しさん :02/02/14 01:54
ずぃっこーじぱっけーずぃを使うと、別途配布せにゃーならんべ? その辺解説してるページ知らんべか?
647 :
ななしっす :02/02/14 02:01
だれか、Delphi Base Library プロジェクトを立ち上げてください。
>>646 さん
______
| カコログ |
| 四露死苦 |
|______|
∧,,∧..||
ミ,,トДダ||
ミ づΦ
〜ミ ミ MLの・・…・・
U''''.U
>>631 気になって試してみた。500x600のGridでAssignするとかなり遅くなった。5秒ぐらい。
681のコードで試してみたら文字列作成に850msぐらい。そんなに遅いか?
641のtipsで多少速くなるかも。
ただ、Memo1.Lines.Add(s);したら返ってこなくなったので、
前後の処理に時間がかかってると思われる。
ClipBoead.AsText := s;
は一瞬で終った。メモリ256MB,セレ400
カコログダベカ...
651 :
デフォルトの名無しさん :02/02/14 02:33
昔、「MFC」って書かれたアイコン見るたびに、「どうして違うソフトで 同じアイコンなんだろう?」って思ったりしてたのだが、アレって VC?で作るとデフォルトであーなるんでしょ? H○Pのは「スープに湯気」のアイコンとか…。 どうして自分で作らんのだろうか…。でも、delphiの「柱に緑丸にイナズマ」 ってゆーワケワカメなヤツのまんまって見たこと無い。見たこと有る人いますか?
>>651 フリーでも沢山みてるけど?
俺も気分が乗らないような仕事の時はアイコンまで作らない。
青にたいまつ?のアイコンもDelphiじゃなかったっけ?
>青にたいまつ D3 あれが一番かっこよかった
>>654 そだね。バージョンの違いかな?
しかし、イナズマは何を意味してるやら。
「VCL」って書かないだけマシかなぁ。
デルファイに存在したであろう神殿のアイコンもあったな。 それともアテネ神殿か。 ※知ってるとは思うけど、「デルファイ」はギリシャの古都の名前。
>>645 2重起動防止のコードをコピペして使ってるいつがいるに十票。
Mutexにどのアプリケーションも同じサンプルの文字列を渡してるに違いない。
>>655 激しく同意。
Delphi5でアイコン周りにガクーっときた。
ドット絵マンセー
>>640 やっぱこのへんがやばいと思っていたが
上手い解決方法がわからなかったので激しく参考になった。
>>658 あ〜、Mutexじゃないけど、それでトラブったことあるよ。
俺の場合、システムフック用のDLLで、他で使ってる文字列を
そのまま使ってファイルマップしてた。
なぜクラッシュするのか原因が分からなくて悩みまくったよ(w
教訓:CreateFileMappingの後は要GetLastError!
>>645 >>658 ひどいや!ギコナビのmutex名は「gikoNaviInstance」だよ。
えーと。同時起動の話、再現性高いですか? 本気で調べてみようと思いますが。
664 :
デフォルトの名無しさん :02/02/14 16:22
*.dpkで配布されているコンポーネントって、 どうやってインストールするんですか?
665 :
デフォルトの名無しさん :02/02/14 16:50
Delphi6Proをつかっていますが、コンポーネントを使おうとするとエラーが起きます。
http://delphi-area.fs-tools.de/pdl_downloads.php?file=14 からアーカイブをダウンロードし、インストールしたのですが、
コンパイルエラーがおきました。
ヘルプにある互換性のページ
>プロジェクト内の DsgnIntf への参照は,新しい Delphi 6 の名前 DesignIntf に
>変更する必要があります。また,uses 節に DesignEditors,VCLEditors,
>および RTLConsts を追加する必要もあります。
を参考に、
TFlatDesignRegister.pas の uses 節を修正しました。
コンポーネントは無事登録されたのですが、
オブジェクトインスペクタで、貼りつけたコンポーネントの
色関係のプロパティの色定数リストを表示させる(リストをスクロールさせる)と、
このコンポーネントで独自に追加したと思われる色定数について、
「***は数値ではありません」というエラーが表示されてしまいます。
どうすれば、ちゃんと使えるようになるでしょうか。
666 :
デフォルトの名無しさん :02/02/14 16:59
>>664 Delphi 6 なら普通に開いてインストールできるよ。
667 :
デフォルトの名無しさん :02/02/14 21:27
関数を手続きとして使ったとき(戻り値を無視したとき)、 警告を発してくれるようなコンパイラオプションがあったとおもうのですが、 みつけられません。なんというオプションか教えてくださいませんか。
X-
おお、ありがとうです でも推奨さてないみたいですね… >$X 指令は,下位互換性を提供します。Delphi のアプリケーション >を記述するときは,{$X-} モードを使用してはなりません。
670 :
デフォルトの名無しさん :02/02/14 23:30
他言語から使用可能なDLLを作る場合 varによる参照引数は使用してよし、それとも駄目? C++には参照があるけど、Cにはないから駄目かな?とか思ったんだけど・・・・・
Delphi は UNICODE 対応してないってホントですか?
>>671 心の眼で見るのだ。さすれば何もかも分かる。
>672 ハァ?
WideString ?
>674 redirect
やっぱり、UNICODE 対応してないんですか? 最近の開発言語とは思えませんね。
アレだな。自分で調べもしないで、ほざいてる馬鹿はいるもんだな。
679 :
マジレスきぼんぬさん :02/02/15 00:46
文字列リストへの削除がわからないので教えてください. list.Delete(位置); <--- 指定した位置の文字列を削除 ここまでは分かります。位置の指定がわかりません。
Halbowさんって、談話室で有名人なんでしょ? Hotkeyちゃんったら、自分のページでレスを 載せてるようだけど、承諾してんのかな。 つーか、デスクトップの一部分拡大ってよくあるヤツをシェアウェアに しちゃったYO!
>678 Delphi - ML の I wish List で話題になりましたよ。調べてないのは678では?
682 :
馬鹿にマジレス :02/02/15 00:57
>やっぱり、UNICODE 対応してないんですか? 最近の開発言語とは思えませんね。 ↑ここで聞いてる馬鹿が「調べた」って言えるとは驚いた。
俺もあんたの「しったか」には驚いた。
>>679 最初がゼロ、次が1、ウーム、なぜヘルプを読まないのか不思議です。
(´-`)。o ○ (あんたって誰だろう?質問してるのに偉そうなのはなぜだろう?)
誰もHotkeyヲッチャーはいないのか?うーむ。シェアウェアって 誰か金払うとでも思ってんのかなぁ?人に聞きまくってシェアか…。
でも、ベクタとかだと、1本2本だと振込み手数料がかかる から相殺しましたとかって言って銭払ってもらえないが知ってるか? 結局、その小銭はベクタの懐に入るってすんぽうさ。 ベクタも昔はクズが詰まったCDを送ってくれてたけど、 最近はそれも止めたしフリーソフト作ってる人間からすれば メリット無くなったな、googleの恩恵か、自分とこのホームページ で公開してても結構人来るし、よくよく考えたら、別に使ってもら わなくてもいいんだよなぁ。
689 :
683は結局何が言いたいんだ? :02/02/15 04:09
>>687 まぁまぁ。気持ちは分からんでもないけど。つーか、シェアウェア作る人の
気持ちが分からん。いや、「有益で利用する価値があって金払いたくなるほど
素晴らしいソフト」の作者はいいんだ。
そーじゃない人っているじゃん。「そのソフトでいくらもらったんだ、今までに」
って聞いてみたくなる人ってさ。不思議だなぁ、っていつも思うよ。
500円くらいの「フリーでいくらでも同じ(それ以上)のがあるよ」って
ヤツ、公開してるのってよくあるけど、金払う人がいるとするなら、その人の
気持ちも分からん。
スレ違いにつきsageで、 まあね、でも、初心者とかが騙されるんだよ。 ネット詐欺の一種だと思われ(w
692 :
デフォルトの名無しさん :02/02/15 11:20
TTreeView で、各項目ごとにツールチップを表示させるには どうすればいいのでしょうか? TListView には OnInfoTip イベントがありますが、TTreeView には そういったものが見あたりません。 いろいろと調べてみたのですが、分かりませんでした。 ご存じの方いましたら教えてください。
>>671 念のためにマジレスすると,ちゃんと対応してますぞ.
(Delphi 3からだったと思います)
>>689 下を見るなよ。DQNなんてリアル世界でいくらでもいるだろ。
>>688 おいらの環境じゃ再現しませんでしたyo
>>693 そりゃ、あれだろ、UNICODE用の文字列関数があるって事だろ、
厳密には対応したってより、変換関数を取って付けたってだけ
では?
折れが思うには UNICODEよりも何よりも.Net戦略に騙されて
駄目にならなきゃいいと願うばかりだ。
Delphiは、今のままでもいいと思うが、MSDN又は、同規模の
情報を付けて欲しいなぁ、結局、MSDNも買うんだよなぁ。
>>696 VBでのShiftJISの扱いよりはマシに対応してると思うが?
>結局、MSDNも買うんだよなぁ。 そうなんだよなあ(笑
699 :
デフォルトの名無しさん :02/02/16 00:00
delphiマガジンの発行部数を教えてください。
だいたい800〜1250くらいかな
701 :
デルファイの名無しさん :02/02/16 00:07
delphiのインラインアセンブラについて解説してるいいページ 知らないですか? 検索したけど、なかなかヒットせなんだ。
残念ですが、それは機密扱いなんで教えられません。 ヒントとしてはVBマガジンより少し少ないとお考え下さい。
706 :
デルファイの名無しさん :02/02/16 00:12
>>703 命令っちゅーか、とりあえず、いろいろ。ヘルプもなんか、うまくヒット
せなんだ。「こうこうこーゆーことするとこーなる」って感じに書いてない
気がする。
メールマガジンの「Delphiマガジン オンライン」が、最新号で 4158 部。 メールを読まない読者数を考えると、6000 ± 1000 くらいと見るのが妥当ではないか?
>>706 アセンブラそのものの説明がほしいの?
だとすると、ちょっと大変だな。
709 :
デルファイの名無しさん :02/02/16 00:21
>>708 でっかー…。むかーしアセンブラかじった位だから、「そこはかとなく」は
分かるんだが…。とりあえず、「delphiの」は、どんなんかな?と…。
特に変わらん?
インラインアセンブラには共通だろうけど、アセンブラとの違いは、 変数領域の確保はpascalでやって、そのシンボルをそのまま使える。 その代わりマクロは少なめ。 って感じかなあ
711 :
デルファイの名無しさん :02/02/16 00:38
とりあえずfor i:=1 to 10 do inc(sum, i)とか書いてCPUウインドウでアセンブラコードチェックすればなんとなくわかるかも。
713 :
デフォルトの名無しさん :02/02/16 00:49
お願いします、みなさんの技術を教えてください。 相互参照するようなコンポーネントの場合、どのように実装するのが 一番スマートですか。例えば、 データベースを表わすコンポーネントが1つに対して、それを 表示・操作するコンポーネントが複数あるとします。 表示・操作コンポーネントは、プロパティ DataBaseComp で データベースコンポーネントを指定するとします。そうすることで、 操作コンポーネントでデータベースを変更したいときは、 自身の DataBaseComp プロパティにアクセスすれば良いことになります。 問題は、その逆なんです。 データベースが変更された際に、表示・操作コンポーネントに そのことを通知して、画面を更新したいのですが、データベースと 表示・操作コンポーネントの関係はあくまでも一方通行です。 現在は、表示・操作コンポーネントに Update メソッドを用いて、 データベースの OnChanged イベント内で、 全ての表示・操作コンポーネントの Update メソッドを 呼び出しているのですが、どうにも不自然な感じがします。 表示・操作コンポーネント → データベース のアクセスは、プロパティを使えばいいだけなのに、 データベース → 表示・操作コンポーネント のアクセスは、そのためのコードを毎回記述しなければならないなんて… どうすればスマートにいきますか?
observerパターンの考え方をVCL風に実装してみたら?
715 :
デフォルトの名無しさん :02/02/16 01:13
delphiでMDBを出力させたいのですが AccessをつなげてTTableやTQueryで表示させると Accessでルックアップで入力した個所は1、2、3みたいな感じで数字で出てしまうのですが そのままルックアップで指定したデータを出せないのでしょうか? 一応リレーションシップも繋がっています
>713 まあアドホックだけどCM_DATABASECHANGEDを定義して、 wParamにデータベースコンポのアドレスでも入れて、 MainForm.Broadcastするとか。 データベース操作/表示コントロールはwParamが自分の 属するデータベースコンポか調べて、更新するの。
_____
/:\._____\ /
>>713 |: ̄\ ミ,,゚Д゚ミ < VCLでは普通にプロパティで
|: :|: ̄U U ̄:| \相互参照しているような.
TreeViewとTreeNodeとか。
DataBaseCompoにリストで表示操作コンポを
登録するというスタイルはダメかしら?
718 :
デフォルトの名無しさん :02/02/16 01:25
それはつまり、データベースを表わすコンポーネントに 「表示・操作コンポーネントリスト」プロパティと、 「コンポーネントリストに登録」メソッドを用意し、 表示・操作コンポーネントの DataBaseComp プロパティで procedure THoge.SetDataBaseComp(Value:TDataBaseComponent); begin FDataBaseComp := Value; Value.コンポーネントリストに登録メソッド( Self ); end; のようにするという意味でしょうか。 なるほど、ためしてみます。 …というか、デザインパターンつかうと こんなに説明というか、楽になるんですね… (手元にデザインパターンの本があって良かった…)
719 :
名無しさんです :02/02/16 01:30
VB6使いだったんですが今日Del6を使い始めました。で、 ちょっろっとコントロールを貼ってコンパイルしただけで 500kbになったのですが、もう少しダイエットは出来ない ものですか? VBなら40kbくらいで済みそうなのですが。ランタイムって イヤだったけど、サイズを考えるとデメリットばかりでも ないですね。でもコンパイル早くて「あれ?反応しない」と 思って何度も実行してしまった。
>>718 それでいいと思う。
Valueにnil渡したときにリストから削除する処理も忘れずに。
>>719 ランタイムの分を足したら40kbじゃ済まないだろ
>>719 Delでもランタイムは使えるよん。プロジェクト→オプション→パッケージ
→実行時パッケージを使って構築する にチェックでGO
>>721 でもランタイムってほぼ共通(ほぼでもないか)だから、VB6の
ランタイム最新版フルパック一つ入れておけば済むかな、その
サイズで済む、と。ま、ランタイムはかなりウザイ要素なのだが。
>>722 なるほど。でもそれやっちゃうとDelのランタイムを配布しなきゃ
ならないってこと?もしそれやっちゃうとDelに移行するメリットが
無くなってしまう(笑)。
TDataBaseCompに全部内包しちゃってはだめなのかしら。
TDataBaseComp.CommandList(i) で操作コンポにアクセスして
TDataBaseComp.CommandSet(命令の種類)で
コマンドを生成してリストに登録するとか。。
____
/...... .. .../
||::: ∧,,∧ TCompo派生というわけにはいかんけど
|: ̄\ ミ,, ゚Д゚ミ
|: :|: ̄U U ̄:|
|: :|: .:|
>>719 VB使っているとどうしてもそう思うけど
VBはランタイムが元々ごっそりOSに入っているんだYO
VBランタイム4,5,6とさらにライブラリ足してますが何か? また、既存のモノを使わずに1から組んでいけばサイズをおさえることもできます。 この辺もさんざん話したね。
>>725 当方win98無印なので標準ではVB5しか入ってナイッす。あと、
ツリ^ビューやツールバーなんか使っちゃうと標準では済まなく
なってしまうし…。サポートはいつもランタイムのことがほとんど
っす。
>>726 イチから?過去ログに答えがありそうですね。見てきます。
728 :
デフォルトの名無しさん :02/02/16 01:50
つい先日、サイズのこと書いて「またか」ってレスされたばかりなんだけど…。
>>727 小さいexeがどーたらこーたらってのでも検索してみれ。
>>728 スマソ。今日始めてこのスレ見たんだわ。今過去ログ漁ってます。
>>729 >
ttp://halbow.cool.ne.jp/top.html ここ今日見た(ワラ)。サッパリでしたわ。
>>もしそれやっちゃうとDelに移行するメリットが 無くなってしまう(笑)。
>ほんとにそうだろうかと、小一時間・・・・
実はちと気に入ったコンポーネントを落としてきたんですわ。で、
ちょっろっとコーティングしてみたんですが、これがイイ!
他人のコンポーネントに頼るのは厨なのかどうかはまだDel始めた
ばかりでわからないけど、かなりの魅力を感じた。
>>730 >ここまでやるんだったらC++と・・・
ん〜、まだ始めたばかりだからなんとも…。
誰かexeのサイズネタをwikiにまとめろよ
Delphiのコンポーネントは利便性において最大の利点であり、 またプログラミングにおける欠点でもある。 用は使いよう
>またプログラミングにおける欠点でもある。 ハァ?
>他人のコンポーネントに頼るのは厨なのかどうかはまだDel始めた
>ばかりでわからないけど、かなりの魅力を感じた。
クラスライブラリ使いを
∧,,∧ /厨だと言いたい人には言わせておく。
ミ ゚Д゚ミ <
(ミ ミつ)ビシッ\だけど、生産性は負けない
〜ミ ミ それがDel使い
∪ ∪
---- (^_^)(^_^)(^_^) THE REAL CHU-BOU (^_^)(^_^)(^_^) ----
海岸では、実際のプログラマが砂の中のフローチャートを引くプログラマです。
∧,,∧ イミワカンネー
ミ゚Д゚彡 Delフサギコ mailto:
[email protected]
DelフサギコってP-Codeなの?
チガウ ∧,,∧l||l マチガワレタ ;゙⌒ヽ彡 〜ミ___ミ ''" ""''"" "'' クワッ ∧,,∧l||l 毒舌ですか...? ;;゙ミ゚Д゚彡 〜ミ___ミ ''" ""''"" "''
738 :
デフォルトの名無しさん :02/02/16 02:52
教えてください Delphiで下記のように設定しても、表示はされるがSQLとしては何もおこりません どこか間違っているのでしょうか? begin Database1.AliasName := 'ABC; // ODBCのデータソース名 Database1.DatabaseName := 'Aテーブル'; // DBのエイリアス Database1.LoginPrompt := False; // DBのログインダイアログを抑制 Table1.DatabaseName := 'Aテーブル'; Table1.TableName := 'Aテーブル'; // MDB内に作ったテーブル名称 DataSource1.DataSet := Table1; // TTableコンポーネントを指定 DBGrid1.DataSource := DataSource1; // TDataSourceコンポーネントを指定 Query1.DataSource := DataSource1; Query1.SQL.Add('SELECT *'); Query1.SQL.Add('FROM Aテーブル'); Query1.SQL.Add('ORDER BY タイトル DESC'); Database1.Open; Table1.Open; Query1.Open; end;
フリー版のD6を入手しましたがObject Pascal?のポインタ関連に つてい理解できません、なんかポインタとか詳しく書いてある本あり ませんか?
>>736 P-Code = 玄ちゃん説は?
どちらも酒飲みだし。
>>739 PASCAL では C のような、物理アドレスに密接に関連した「ポインタ」は扱いません。
ほかのオブジェクトに対する参照としてのポインタとなります。当然配列とは何の関係も
ありません。
しかし、実装としては物理アドレス値を使っていますからメモリ空間の直接参照もできます。
それじゃ和歌ランだろ
∧,,∧ / ̄ ミ,,゚Д゚彡 < つまり、ポインタわからんでもヨシと (ミ ミ) \_ 〜ミ ミ ∪''∪ …ホントカ? 引数のvar渡しと クラスの参照がわかればいいとおもうけどね
>>744 いや、他のオブジェクトを参照する「何か」といったポインタがないと
ツリー構造すら満足に作れなくなるから、ポインタは知っておかなきゃいけない。
「Java にはポインタがない」伝説と似た部分あり。
歴史的経緯で Java ほどポインタ否定にはなっていないが。
もちろん、厳密には C/C++ でも規格書にはポインタが物理アドレスを示して
いる保証などないんだけどね。
>>738 以下2点を簡潔に述べよ。
・どこに何が表示されたのか。
・SQLとして、どのようなことが起きることを期待していたのか。
あと、ほとんどのプロパティを実行時に設定しているが、オブジェクトインスペクタからの
設定に何か問題でも?
>>738 DataSouce2 を追加して、まんなかへんを
DataSource1.DataSet := Table1;
Query1.DataSource := DataSource1;
DataSource2.DataSet := Query1;
DBGrid1.DataSource := DataSource2;
>>735 >---- (^_^)(^_^)(^_^) THE REAL CHU-BOU (^_^)(^_^)(^_^) ----
>海岸では、実際のプログラマが砂の中のフローチャートを引くプログラマです。
「真のプログラマとは、海辺で砂にフローチャートを描くようなプログラマのことである」
賛成できません。ちょっとこわいかもね。
真のプログラマは トイレで頭の中にフローチャートを描く
真のプログラマは var programmer:Real のことである
真のプログラマとは 山本 真 のことである
752 :
デフォルトの名無しさん :02/02/16 07:07
DLLを使わないで、システム全体のキーイベントやマウスイベントを フックすることはできますか?
>>752 多分、できない。つーか、DLLを使いたくない理由が分からない。
なんだか難しそうとか思ってるなら、実際は難しくないから、とりあえずやってみれ。
本当はVC使った方が簡単なんだけどね・・・・・
>VC使った方が簡単 ShareMemoryの話?だったらレジストリ渡しで初期化するという手も。
>>750 const
programmer:Boolean=True;
function check(programmer: boolean; skill: boolean): boolean; begin if programmer and skill then Result := True else Result := False; end; var programmer: boolean; skill: integer; begin { snip } check(programmer, boolean(skill)); //False; check(programmer, skill > 0); //True;
758 :
デフォルトの名無しさん :02/02/16 14:00
すんません。 会社のDEL4 (NT)で、カラーパレットから色を作るとザラザラした色ができます。 ピンクを作ればピンクの小さい四角と白の小さい四角、といった感じで。 一方、自宅(windows98) DEL4で同じ色を作るときれいなムラのない色が作れます。 ザラザラにならないためにはどうすればよいのでしょうか。 激しく厨房で自分でも恥ずかしいのですが、よろしくお願いします。
+ + + + + . / ̄\ +. ∧_∧アハハハ + ノリカエセヨー( ´∀`) (´∀` ) (つ つ (つ つ■ . + ( ヽノ ( ヽノ + し(_) し(_)
>>758 そりゃ、NTの方のPCの色数とWin98の色数が違うだけだろ、
Windowsの画面のプロパティで設定して下さい。
>>759 それは早く返した方がいい
彼のアイデンティティだし
>761 ワラタ
(*゜ー゜)教えてDelモナ Delphi6のShellTreeViewでマウスダウンしたディレクトリの フルパスを知るにはどうすればいいですか?
>>763 手っ取り早くやるなら
コソーリShellListViewを配置してShellTreeViewと同調させて
ShellListView.Folder[0]を見るとか。
>>764 (*゚ー゚)レスありがとう。
でもダメでした。\マウスダウソ のフルパスがしりたいのに
\マウスダウソの下にディレクトリがあるとそれも取ってきちゃう
C:\マウスダウソ\hogehoge
766 :
デフォルトの名無しさん :02/02/16 22:46
質問なんですけど、 Delphiの\Help\Examplesに入っているプログラムは 日本語表示させると文字化けするんです。 日本語表示させるにはどうしたらいいのですか?
767 :
デフォルトの名無しさん :02/02/16 23:45
>>766 何が「日本語表示」なの?何を表示させたいワケ?
フォントの初期値が英語なんでしょ。 あんまり細かいところを気にするな。
769 :
デフォルトの名無しさん :02/02/17 01:28
教えてください Delphiでテーブルやクエリを使用して実行したら データベースへのログインというダイアログが出てしまいますが 出ない事ようにできないのですか?
TDatabase.LoginPrompt を falseにして
TDatabase.Paramsの値を
SERVER NAME=なんちゃらサーバー
USER NAME=ほにゃららユーザー
PASSWORD=ちょめちょめパスワド
にすると
____∧ ∧_ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
___ミ,,゚Д゚ミ< で、パスワード聞かれなくなる!
__ ミ ⊃ つ \______________
_〜ミ,, ,,〃
_ ∪ ∪
---- (^_^)(^_^)(^_^) THE REAL CHU-BOU (^_^)(^_^)(^_^) ----
真のプログラマは今時フローチャートなんて書かない。
∧,,∧ フツー カカネーダロ
ミ゚Д゚彡 Delフサギコ mailto:
[email protected] >>748 さんサンクスコ
772 :
デフォルトの名無しさん :02/02/17 01:59
>>768 その通りでした。
つまんない質問してごめんなさい。
>>769 わかっていると思うが、ユーザー名/パスワードがベタテキストでフォームに埋め込まれるので
パスワードつけた意味がなくなります。
775 :
デフォルトの名無しさん :02/02/17 06:34
Delphiのシェルを作りたいんですが、 ツリーに登録されている関数名や変数は如何したら取り出せますか。
>わかっていると思うが、ユーザー名/パスワードがベタテキストでフォームに埋め込まれるので >パスワードつけた意味がなくなります。 よい子は文字列を分散させておいて実行時に組み立てて代入します もっとよい子は乱数などで暗号化しておきます
ボタンをクリックするとボタンを追加する、ということは出来るのでしょうか?
>>777 procedure TForm1.Button1Clien(Sender: TObject);
var button: TButton;
begin
button := TButton.Create(Self); // 必須
button.Parent := Self; // 必須
button.OnClick := Button1Click; // ボタンが押された場合のイベントハンドラ登録
... // その他座標・サイズ・キャプション等設定
end;
780 :
デフォルトの名無しさん :02/02/18 03:47
>>692 俺もそれやりたい。
TVS_INFOTIPをスタイルに加えて、TVN_GETINFOTIPメッセージを
捕まえればいいのかと思ったけど、どうもうまくいかない。
誰か知ってたら教えてください・・・
TreeView の InfoTip は、領域が「完全に見えない状態」の時に表示されるものなので スクロールバーがでるくらいに幅を狭めては? で、自動的に項目ごとに異なる文字列が出てくるが。 それとは別の話?
782 :
デフォルトの名無しさん :02/02/18 07:00
>781 コードエクスプローラの情報を取り出したいのです。
783 :
デフォルトの名無しさん :02/02/18 07:59
ごみ箱の「中身」のプロパティを出したいのですが、ごみ箱そのもののプロパティが出てしまいます。 なんで〜?Demoの中のvirtuallistviewやShellCtrlsなら問題ないのに…。 const EnumOption = SHCONTF_FOLDERS or SHCONTF_NONFOLDERS or SHCONTF_INCLUDEHIDDEN; var Desktop, Bitbucket, Folder: IShellFolder; ID, Item, It: PItemIDList; Malloc: IMalloc; Enum: IEnumIDList; Got: DWORD; Menu: IContextMenu; Arg: TCMInvokeCommandInfo; PMenu: HMENU; begin SHGetMalloc(Malloc); SHGetDesktopFolder(Desktop); SHGetSpecialFolderLocation(0, CSIDL_BITBUCKET, ID); Desktop.BindToObject(ID, nil, IID_IShellFolder, Bitbucket); Folder := Bitbucket; It := nil; Folder.EnumObjects(0, EnumOption, Enum); while Enum.Next(1, Item, Got) = S_OK do begin if It = nil then It := CopyPIDLs(Malloc, Item); Malloc.Free(Item); end; Malloc.Free(ID); if It <> nil then begin Folder.GetUIObjectOf(0, 1, It, IContextMenu, nil, Menu); PMenu := CreatePopupMenu; Menu.QueryContextMenu(PMenu, 0, 1, 100, CMF_NORMAL); DestroyMenu(PMenu); FillChar(Arg, SizeOf(Arg), 0); Arg.cbSize := SizeOf(Arg); Arg.nShow := SW_SHOW; Arg.lpVerb := Pointer(19); //'properties'; Menu.InvokeCommand(Arg); Malloc.Free(It); end; end.
事前にコントロールパネルの中の「タスク」を列挙しておくと正常動作することが判明。 なおさら謎だ〜! ( 何で思いついたかというと、 コントロールパネルの中の「フォント」を扱う時 先に「タスク」をやっとくと上手くいったことが… )
785 :
デフォルトの名無しさん :02/02/18 08:35
>「タスク」をやっとくと上手くいったことが 具体的にどんなことをしたの?
>>785 タスクスケジューラのスケジュールの列挙っちゅーことかな?
漏れは>783じゃないから分からないけど…
787 :
デフォルトの名無しさん :02/02/18 11:40
TDBGridの列に、 テーブルの内容を横向きの棒グラフで表示したいのですが、 どなたか方法を教えてください。
788 :
デフォルトの名無しさん :02/02/18 11:54
TIBTableのLocateについてなんですが、Delphi5で問題なくLocateできていたコードが Delphi6では失敗します。IBTableに仕様の変更があったのでしょうか?
ソースみれ Locateは怪しそうなので相当関数を作ってつかってる
TListViewでカラムの境界線をダブルクリックしたときに、 カラムのwidth設定をいじりたいんですが、 カラムの境界線をダブルクリックしたときに発生するイベントはあるんでしょうか?
>>789 RESありがとうございます。
でもソース見る根性無かったので、いろいろ試してみた結果、
日付フィールドの扱いが5と6で異なっていたみたいです。
5は日付形式で渡してOKだったのですが、6は文字列に直してやらないと
ダメでした。
>>781 いや、見えない部分を補完するあれではなくて、
項目ごとにTextプロパティとは別にヒントを表示したいのです。
たとえばIrvineなんかでは、そういう処理をしているとおもうのですが、
どうやっているんでしょう。
コンボボックスをフラットな状態?で表示させたいのですが、 Ctl3D:=Falseしても何も変化がありませんが、こんなもの? 他と違和感があるので、是非ともフラットにしたいのですが 回避策ありませんか?
巷にある、Delで書かれた正規表現検索オブジェクト の使い勝手(速度や使いやすさ)レポートきぼんぬ。
796 :
デフォルトの名無しさん :02/02/18 19:36
ClientDataSetで UpdatesPending: キャッシュバッファに未適用のレコードが入っているかどうか調べる ってものが欲しい。何かで代用は出来ないものでしょうか? それとも派生コンポつくって解決できるんですか?
>>786 コントロールパネルと、その下のタスクの中の列挙です。
自分以外の環境ではどうなるか気になる所です。
( そういえばタスクスケジューラをサービスごと切っていた記憶も…
799 :
デフォルトの名無しさん :02/02/19 00:17
このスレだったかなぁ?デルスレ多くて…。 「ViXの作者がUPXでXPのなんたらかんたらで使うのやめた」って 吹聴してまわってるヤツいないか? 他の掲示板でまるまる同じレス見たよーな気がするんだが気のせいか?
(;´д`)
質問です。 例えば FormにRichEditとButtonとPopUpMenuがあります。 PopUpMenuにコピー、切り取りなどを適当に用意して RichEdit1にPopUpMenuを関連付けてButtonのプロシージャで for int1 := 0 to 10000 do begin RichEdit1.Lines.Add(inttostr(int1)); RichEdit1.SetFocus; application.ProcessMessages; end; 等としたらずらーっと表示されていきます。 その処理中にRichEditで右クリックしPopUpMenuを 表示した場合ずらーっが止まってしまいます。 これを止まらずに行う方法は無いでしょうか。
802 :
デフォルトの名無しさん :02/02/19 00:46
いえ、こちらこそ。文章書くのが苦手で・・・
popupメニューのアイテムを全部削除するとポップアップしないみたいだけど・・・ 一時的に削除したらどうだろうか・・・役にたたんなこの情報
>804 大麻やれ。
>804 どうもありがとうございます。 >805 タイマーですか? やりたい事は長い処理中にログみたいなのを表示したくて PopUpMenuやMainMenuが表示されると処理が止まってしまう のを何とかしたいのです。 Threadなどを使ってみたのですがどの部分をスレッドかすれば 良いかと思いやってみましたが上手く行きませんでした。 上手く言えないのですが例えば Iriaでダウンロード中にログが表示されますが その時にPopUpMenuが表示させたりMainMenuを表示させても ログが流れて行きます。 そう言う事をやりたいのですが。
(´-`)。o ○ (それで何がしたいのだろう?popupがドバーっと出たらイヤだな…)
つーか、標準のpopupでなくて、自分で作れば? 右クリックを検知して自作のもんを出すとか…。 なーんて知ったかぶったりして。
RichEditとIriaのソレでは随分違うような・・・
>808 それだとずらーっは大丈夫なんでしょうか。 やってみます。 >809 そうなんですか、あれはどうやってるんでしょうか。 簡単であれば教えて貰えませんか?
なんか話が逸れてしまいそうなので、適当に流して欲しいのだが ログの表示はレスポンス(反応)に対して文字が書き込まれるのであって 単純にループで回すような仕組みではないと・・・
TClientSocketとTServerSocketについて解説してるページってないですか? ていうか何でマニュアル付いてないんだ…
PopUpMenuやMainMenuはモーダルダイアログの一種です つまり、それを表示した窓のメッセージを止めてしまいます。 これはメッセージを止めるのであってスレッドを止めるのではないことに注意。 だから、タイマーを使うと、タイマーは隠れた別の窓を使いますからそれとは 別のタイミングで動かせます
815 :
デフォルトの名無しさん :02/02/19 09:36
はじめまして 顕微鏡で細胞分裂を観察しているのですがdelphiで録画と画像処理をやろうと思います。 カメラから画像を取り込むためのライブラリはございますでしょうか? ご指導のほどよろしくお願いいたします。
カメラ付属のソフトでビットマップで取り込んで あとは好きなようにってのは駄目なの?
817 :
デフォルトの名無しさん :02/02/19 10:18
818 :
デフォルトの名無しさん :02/02/19 11:35
>>815 ここで聞いても無駄。技量のあるやつなんかイネーヨ(ワラ
VB使え!
質問の仕方が初心者だな。 要らない情報が詳しくて、必要な情報が足りていない。
>>813 Helpの場所はどこですか?
・IDEでTClientSocketにカーソルを合わせてF1
・VCLリファレンスヘルプでキーワード検索
・VCLリファレンスヘルプの目次から「オブジェクト・コンポーネント(アルファベット順)」→「TC」
以上のどれでやっても出てこないんですが…俺の環境がどっかおかしいんでしょうか。
>>820 もしかしてフリー版? あれにはついてないかもね
822 :
デフォルトの名無しさん :02/02/19 14:29
TWebBrowserで表示しているページを保存したいのですが、 簡単な方法って有りますか?
Panelの上に複数のObjectが乗せてあるとする。 これと同じ物を実行時に複製したいよ。 Panelの上じゃなくて、全てを個別に作成するしかないかな? 結構数がある上に、後々変更とかで楽がしたいんでPanelの コピーでオブジェクトが作成できれば楽かと思っているのだが どーすりゃいいモナー。
824 :
デフォルトの名無しさん :02/02/19 14:34
>>825 いッいつの間に!こんな機能が!
恥ずかしながら全く知りませんでした。(汗)
>>823 フォームデザイナでパネルを選択してCtrl+Insしてコピー。その後親となるコントロールをクリックしてShift+Insで貼り付けでコピーできる。
TFrameとの違いは手軽に使えることと、一方を修正しても他方に反映されないこと。
>>827 >>832 の逝っている事と少し違うような気がするけど
それってデザインでの話しでしょ、832は実行時って書いてるようだが
>>828 TFrame のインスタンスを実行時に動的に複製すればいいのでは?
>815 Win32APIを使いなさい。詳しくは解説書を買いなさい。 >816-819 頭の足りない者は無理して答えなくても結構。
>814 出来ました。ありがとうございました。
>>823-830 Frameねぇ、便利なんだけどWin9xだと使えないかもよ?
リソース食いまくるからね、まあ、激しく使わなきゃ大丈夫か。
20個固定だが、その辺りはなんとかしてくれ、
取りあえずこんな感じでどお?
// Frame2を新規フレームとして作成しておいて、
// Form1 に ScrollBox1を張る。
var
Frame: array[1..20] of TFrame2;
・
・
・
procedure TForm1.FormCreate(Sender: TObject);
var
idx:Integer;
begin
for idx:=1 to 20 do
begin
Frame[idx]:=TFrame2.Create(Self);
Frame[idx].Parent:=Self.ScrollBox1;
Frame[idx].Name:='iFrame'+IntToStr(idx);
Frame[idx].AutoSize:=True;
Frame[idx].Top:=(Frame[idx].Height*(idx-1));
end;
end;
有難うございます、おかげさまで出来ました。 しかし、なぜフレーム使うとリソースが足りなくなるのかわかりませんが、 もしかして、フレームって貼り付ける度にフォーム生成してるのと同じ? 便利なんで、色々なフォームの共通点をフレームにしちゃおうかと思って いたのですが、止めた方がいいでしょうか。
>>835 Windowsハンドル持ってるコンポなら同じじゃないの?
ちと困ってます。 フォームを追加してちょろっと手を加えて、その時は普通に 動いていたのですが、Delphiを閉じてからしばらくしてまた 立ち上げたら 「[致命的なエラー]Project1dpr(7)ファイル'AFEdit.dcu'が見つかりません」 と出て実行できなくなりました。 AFEeditは追加したコンポーネントです。閉じる前までは 正常に起動できていたのですが…。原因と対策を教えて ください。
838 :
デフォルトの名無しさん :02/02/20 03:19
VCLリファレンスによると、TColor型の色指定でツールチップの 色clInfoText、clInfoBkは「Win95、NT4.0のみ」となっているのですが、 これ以外のOSの場合はどのように指定すればいいのでしょうか? 一応私の環境(Win98SE)では、clInfoText、clInfoBkで指定しても 反映されるのですが、Me、2k、XPなどはどうなんでしょう?
>>835 内部構造はわからないけど
リソースメーターとにらめっこしながら
フレームを使う場合と使わない場合で実験してみてはどうでしょうか.
あんまり人気のないフレームですが(笑)
余計な作業は減るしコードはシンプルになるしで
個人的にはかなりお世話になっています.
>>838 私が仕事で使ってるXPは大丈夫でした.
たーぶーん,同じでよいと思うのですが.
そちらのDelphiのバージョンがわかりませんが,
Delpht 5の場合はWin98登場の頃だったためかWin98の対応がなく,
(Windows の英語ヘルプもWin95/NT4.0時代のものです)
またWindowsでは将来の互換性が保証されているわけではないので
『のみ』という表記になったものと思われます.
(Delphi6でも同じ表記ならボーランドの手抜き?)
ちなみに clInfoText と clInfoBk は
Delphi 5 ではGraphic.pasで以下のように記述されています.
> clInfoText = TColor(COLOR_INFOTEXT or $80000000);
> clInfoBk = TColor(COLOR_INFOBK or $80000000);
COLOR_INFOTEXT と COLOR_INFOBK はWindows API の
GetSystemColor でツールチップのそれぞれ文字色,背景色を得るために使う定数ですが
ttp://www.microsoft.com/JAPAN/developer/library/jpsetupf/_win32_getsyscolor.htm ここを見る限りWin95/NT4.0以後の変更については何も書かれていないので
おそらく大丈夫ではないかと.
>>839 レスありがとうございます。VCLリファレンスはDelphi6のものです。
clGradientActiveCaption、clGradientInactiveCaptionは、
「Win98とWin2k」になっているので、Delphi5と同じということは
無いと思いますが、やはり手抜きなんでしょうか。
私のはDelphi6PersonalなのでGraphic.pasついてません。(^^;
XPでもOKということは、気にしなくてもよさそうですね。
ありがとうございました。
みなさん、初めまして Delphiに触れて1週間未満の初心者ですが宜しくお願いします。 TTableコンポーネントのキャッシュアップデートを使用して C/S環境のシステムを構築しようと思うのですが 画面に表示されたデータを、 他のユーザーがレコードを変更した場合、 ApplyUpdates CommitUpdates を実行すると例外エラーが発生します。 どのようにすれば良いのでしょうか?
842 :
デフォルトの名無しさん :02/02/21 15:18
>>841 C/SでTTableは使わないほうがいいよ。
TQueryを使ったほうが良い。
842さん コメントありがとうございます。 TTableは、どういった理由で使わない方が良いのでしょうか? TQueryだと、841の様なエラーは発生しませんか? 質問ばかりで、すいません
844 :
デフォルトの名無しさん :02/02/21 16:26
C/Sならデータトラフィックなどが結構重要になってくるし、 SQLでないと柔軟にデータを取り出せないと思われるのでQueryをすすめています。 ちなみにCashedUpdatesプロパティはTrueになってますか? TQueryなら Cachedupdates := True; RequestLive := True;にしなきゃダメだよ。
845 :
デフォルトの名無しさん :02/02/21 16:30
申し訳ない。よく質問をみたら「他のユーザーがレコードを変更した場合、 」 と書いてありましたね。 そりゃ他のユーザーが変更したあとに新しくFetchしないでApplyかけたらエラーがかえってきますよ。 私なら行ロックをかけて変更不可にしますがどうでしょう?
846 :
デフォルトの名無しさん :02/02/21 16:35
DBがOracleなら BeforeEditで SELECT HOGE FROM HOGE_TABLE WHERE〜〜 FOR UPDATE NOWAIT; をかけてエラーが帰ってきたらロックされてますとか出した方がユーザーも納得するでしょう。 他の人ならどうするかわかりませんが・・・。
>>845 コメントありがとうございます。
すいません、レコードのロックはかけたくないので、
例外エラーが発生したら、
「既に他のユーザーに変更されています、上書きしますか?」
「既に他のユーザーに削除されています、更新は行えません」
といったメッセージを表示し、処理を中断したいのですが、
どうすれば良いのでしょうか?
TQueryの件、ありがとうございました。
データトラフィックという説明で理解できました。
848 :
デフォルトの名無しさん :02/02/21 16:44
中断させるのはAbortメソッドあたりで出来そうですね。 そのまま上書きはどうすれば良いのか・・・・。申し訳ないですが解りません。
>>847 漏れ、DBサパーリだけど。
例外をtry..exceptでキャプチャ、except節で
if ExceptObjectがその手の物であれば then
begin
メッセージを表示;
Exit;
end;
else //そうでなければ
Raise;
てのはどうよ?
漏れだったらとりあえずこういう風に組んでみる。
OnUpdateErrorイベントのヘルプの説明を見よ。
851 :
デフォルトの名無しさん :02/02/21 22:23
Delphi6使い始めたばっかりなんですけど、Stringの扱いに戸惑っています。 ヘルプにあるとおりに、 FileWrite(FileHandle, AString, Length(AString)); してみるも、変なバイナリを吐かれました。 FileWrite(FileHandle, PChar(AString)^, Length(AString)); でうまくいくようです。 何が起きているのかは想像できますが、何故そうなるのかがわかりません。 FileWriteの引数 Buffer が型無しなので、何を期待されているのか不明ですし、 そもそもどうしてヘルプにある書き方でうまくいかないのでしょうか? また、Stringにヌルを含むバイト列を代入する方法もわかりません。 StrLCopyではヌル文字が見つかった時点で止まってしまいます。 MemCpy相当品、或いは任意のメモリ領域を参照させる方法はないですか? まだ使い始めたばかりだからそう思うのかもしれませんが、 Delphiの文字列は相当に使いにくいような気がします。 文字列は任意のメモリ領域(倍取れる)であるとして、任意の文字(ヌル文字や 改行等)をデリミタとして扱うほうがわかりやすい思うんですがねぇ……
852 :
デフォルトの名無しさん :02/02/21 22:27
>851 ぐぁ…訂正 (倍取れる) -> (バイト列) 倍取れるって……鬱死
>>851 C を覚えているのなら C を使い続けた方がよいのでは?
>>851 悪いこと言わないからC++Builder使え
>853 いや、VCLは使いたいんですよ。 ポトペタで簡単にUIを作れる魅力は捨てがたいです。 フリーなBCB(IDEつき)ってありましたっけ?
∧,,∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ミ,,゚Д゚彡 < よくわからですが
U つ∀ \____________
〜ミ ミ
∪''∪ MidNightはワインでも・
>>FileWrite(FileHandle, AString, Length(AString));
それ使った記憶がないので知らん
>>MemCpy相当品
TMemoryStreamとかかな?
どういう処理させているんだろうか。
>>デリミタとして
・・・・・・
>854-855
胴衣
>>855 基礎からは、比較はともかく、いい本だと思われ。
オフィサルは読み物として面白さがない教科書的ぽっさを感じて
フサは立ち読みだけでイッパイイッパイです。
>855 漏れが立ち読みした感じだとどっちも悪い本じゃないので、 書店へ行ってみて、わかりやすそうだと思ったほうを買えばいいと思うよ。 ただどっちも基本的なことしか書いてないけど。
>>857 レスありがとうございます。
ではさっそく基礎からわかるDelphi6を買おうと思います。
おや、名前書いてなかったですね。 >856 自分す。 >857 >>>FileWrite(FileHandle, AString, Length(AString)); >それ使った記憶がないので知らん えと……これってファイル入出力の最も基本的なやつじゃないんですか? んじゃ、 FileStream.Write(AString, Length(AString)); でもいいんですが。 今試したところ、同様の結果になりました。 >>>MemCpy相当品 >TMemoryStreamとかかな? >どういう処理させているんだろうか。 単に Buffer : array[0..x] of Byte を SetLength(AString, SizeOf(Buffer)); して StrLCopy(AString, Buffer, SizeOf(Buffer)); したいだけなんですが。 これだと Bufferにヌルあるとそれ以降コピーされないんですよね。 (ヘルプ見ずに書いているので引数に間違いなどあるやも知れず、為念) これを全部コピー(或いは参照)させたいわけですよ。 要は単に0を含むバイナリをStringにぶち込みたいだけなんですが。 こういう使い方をするべきではないのかな?
「基礎からわかるDelphi5」を持ってるんですが、 「基礎からわかるDelphi6」って5との違いはどれくらいなんでしょうか? それなりに内容が違うなら購入しようと思っているのですが、 本屋で見かけないので比較も出来ず、取り寄せてもらって 内容がほぼ一緒だと悲しいですし…
CopyMemoryじゃない?
∫
∧,,∧ ∬ / もっとも基本的な奴は
ミ,,゚Д゚ノ,っ━~ < ラップされたリッチライブラリに
_と~,,, ~,,,ノ_. ∀ \ 及ぶべくもないから
.ミ,,,/~), .| ┷┳━ あまり使わないという罠
 ̄ ̄ ̄ .し'J ̄ ̄|... ┃
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ .┻
文字列IOならTStringListとか
MonaUtilsの関数を使うだけなんだけど…
Delファの文字列は#0で変な処理を
起こす部分がイパイですから、塗る文字含むのを使う場合は
文字列として扱っちゃダメダメ
そもそも、バイナリをどうして文字列に入れる必要が?
バイナリ系は
苦手分野なので他の方にまかせるです
>>861 確か内容は8割方同じです。サンプルで作るものが違ってたかな。
基礎D5をクリアしたなら、違う本にステップアップするよろし
864 :
del6無料から始めた男 :02/02/21 23:55
本買うより、検索しまくっていろんなページ見る方が勉強になると思うよ。 その後で本買うといいと思うな。個人的に。オレ、そうしたし。 オフィシャルの応用コースしか、本は買ってないよ。
>>860 Delphi6使ってんだから、昔みたいに文字列を動的配列みたいに使うのはやめようよ。
>FileWrite(FileHandle, AString, Length(AString));
AStringはCみたいに配列の先頭ささないから駄目ですよ。
何でも渡せるからつい渡しちゃんのはわかるけれど。
FileWrite(FileHandle, AString[1], Length(AString));
でだめですか?
そういや、FileWriteって使ったこと無いなあ。
FileOpenのヘルプ見ても推奨されないみたいなことかいてあるし、
大抵はStream使うのでは?
>大抵はStream使うのでは? いいすぎた。 AssignFileとかBlockWriteかなと。
>862 おお、これこそ求めていたもののようです。 ありがとうございます。 ……しかし、これ、ヘルプに載ってないのね。 >863 >文字列IOならTStringListとか >MonaUtilsの関数を使うだけなんだけど… > >Delファの文字列は#0で変な処理を >起こす部分がイパイですから、塗る文字含むのを使う場合は >文字列として扱っちゃダメダメ そうでしたか、勉強になります。 >そもそも、バイナリをどうして文字列に入れる必要が? TIdCoderが引数としてStringを要求するから TIdHTTPがHTTP BodyをStringで返すから。 >865 >866 どうもです。 調べてみます。
>861 上の書き込みの通り私も初心者なんですが、 「基礎からわかるDelphi4」を持ってます。 2つも前のバージョンですけど、私にはこれで十分でした。 Delphiは昔から完成度が高かったのか、今のバージョンと あまり変わりがないように見えます。(この本を見る限りでは) なので、この本の5も6も大して違いはないのでは? この本には基本的なコンポーネントのさわりしか書いてないし、 実際にそのコンポを使うときはヘルプを見ますからね。 基本的なコンポの紹介とチュートリアルしては役立つと思いますよ。 それよりもObject Pascalの文法的な部分が少なすぎる気がします。 他の言語をかじった事があるなら話は別ですが、プログラミングの 初心者にはわかりにくいのではないかと。 それよりも 「Borland Delphi6 オフィシャルコースウェア 基礎編」 の方が良さそうに思えます。 5分程立ち読みした程度の感想ですが。 値段はどちらも大して変わりませんしね。
>868 ちょい加筆修正。 >この本には基本的なコンポーネントのさわりしか書いてないし、 もちろん簡単なアプリの組み方や、IDE(開発環境)の使い方、 DataBaseの作り方まで書いてあるのでこの一文は訂正します。 この辺は自分にとっても役に立ちました。 ただまぁ、言いたいことは >それよりもObject Pascalの文法的な部分が少なすぎる気がします。 これに尽きるということで。
870 :
デフォルトの名無しさん :02/02/22 00:27
もっと広まるように、デルマガを本屋にたくさん置いてもらう嘆願書を 作りましょう! あと、はなっからVCLがシステムにインストールされてる環境にするように ビルゲイツに頼みましょう!
871 :
デフォルトの名無しさん :02/02/22 00:36
いきおいでDel6proを買ったんだけど 今押し入れです。 personalでじゅうぶんでした。
でもデルマガの記事って、わかってる人はわかってるし わからない人は読んでもわからんし、かといって中道的ナチュラルネタをやる訳でもなし。 なんつーかこう。。。
>>867 CopyMemoryはWinAPIだーよ
>>871 Personal使うならProつかっとけって
876 :
デフォルトの名無しさん :02/02/22 01:46
メモ帳に書いてある内容を読み込む方法ってありますか?
877 :
デフォルトの名無しさん :02/02/22 01:51
>>876 死ぬほど検索して質問してるのだろうな?
878 :
デフォルトの名無しさん :02/02/22 02:18
paradoxのpass解析ソフト あったら教えてください
879 :
デフォルトの名無しさん :02/02/22 02:29
>>878 死ぬほど検索して質問してるのだろうな?
>>887 ,879
死ぬほどかよ!
つーか、ひつけーよ!
>>876 とりあえず、クリップボード経由版
procedure TForm1.Button1Click(Sender: TObject);
var
hEdit:HWND;
begin
hEdit := GetWindow(FindWindow('Notepad',nil),GW_CHILD);
if hEdit = 0 then exit;
SendMessage(hEdit,EM_SETSEL,0,-1);
SendMessage(hEdit,WM_COPY,0,0);
SendMessage(hEdit,EM_SETSEL,0,0);
Memo1.Clear;
Memo1.PasteFromClipboard;
end;
>>876 WM_GETTEXT版
procedure TForm1.Button1Click(Sender: TObject);
var
hEdit:HWND;
len:integer;
s:string;
begin
hEdit := GetWindow(FindWindow('Notepad',nil),GW_CHILD);
if hEdit = 0 then exit;
len := SendMessage(hEdit,WM_GETTEXTLENGTH,0,0);
SetLength(s,len+1);
SendMessage(hEdit,WM_GETTEXT,len+1,LPARAM(PChar(s)));
Memo1.Text := s;
end;
>>851 もう解決しているかもしれませんが
文字列は、「参照カウンタ、長さ、内容」を保持したメモリーブロックへのポインタで
実装されているので、データそのものの先頭へのポインタは
PChar(AString) か @AString[1]で取れます。
で、参照渡しの場合は、
PChar(AString)^ か、(@AString[1])^ = AString[1] となります。
AStringへのバイナリーデータ設定は、
SetString(AString, 先頭へのポインタ, 長さ) が便利です。
>>863 で書かれているように、SysUtilsの文字列関数は
内部でWindowsAPI(C文字列を扱う)を使ってますので#0で誤動作します。
(しかしCompareStringみたいに明示的に長さを渡せるものはOK)
Systemの文字列関数(Pos, Delete, Insertなど)は
純正Pascal関数なので#0を含んでいても正常動作します。
いちおう結果報告 CopyMemory(PChar(AString), @Source[0], Length(Sourch)); CopyMemory(@AString[1], @Source[0], Length(Sourch)); で望みどおりの結果が得られました。 IOの場合も同様に、但しアドレスではなく実体を渡すと。 なんで実体なのかさっぱりわからないけれど、これはきっとC++の 参照渡しみたいなものなんだろーなということで納得。 結局Stringに任意の場所を参照させる方法はわかりませんでしたが、 Stringの参照先を書き換えることはできるようなのでよしとします。 みなさん、どうもありがとうございました。 それからいろいろ試した結果、 DynamicArray := @StaticArray[0] とすると @StaticArray = @StaticArray[0] @DynamicArray <> @DynamicArray[0] = @StaticArray[0] @aString <> @aString[1] = Pointer(aString) だったんですね。 Stringが1originなのはShortStringとの互換のためですか。 いやはや、この辺はCと同じと思っていたので嵌りました。 それにしても動的配列まで参照カウントつきだったとは驚きでした。 配列については組み込みでauto_ptrが用意されてるわけですな。 メモリリークの心配もなく、Shallow Copyできて万々歳と。 ……いや、ちょっとまて、それはいいとしても、(標準で)Deep Copy ‘できない’動的配列てなんかおかしくないですか? 普通Deep Copyする手段を用意した上で、デフォをShallow Copyにするものでは。 このへんどういうつもりなんでしょうかね? >865 >Delphi6使ってんだから、昔みたいに文字列を動的配列みたいに使うのはやめようよ。 昔は文字列が動的配列の代わりだったんですか? 遅延書き込みつきでさらに高機能なんだし、いいじゃないですか。 あ…それだと今度はポインタ的な使い方ができないのか。 いや、それよりも文字列と配列(というかコンテナ)を区別する理由ってなんでしょう? (> 863 の理由ならまぁ納得ですが) 文字列といっても単なるバイト列、一種の動的配列じゃないですか。 親子関係にあるべきとまでは言わないけど、操作はできるだけ互換にして欲しいな。
>884
あ、どうもすみません。
新着がないか確認するべきでしたね。
>883 の通り解決済みですが、自分の考えに間違いが
なかったとわかったので安心できました。
>
>>863 で書かれているように、SysUtilsの文字列関数は
> 内部でWindowsAPI(C文字列を扱う)を使ってますので#0で誤動作します。
> (しかしCompareStringみたいに明示的に長さを渡せるものはOK)
> Systemの文字列関数(Pos, Delete, Insertなど)は
> 純正Pascal関数なので#0を含んでいても正常動作します。
なるほど、そうですか。
参考になりました。
どうもありがとうございます。
>886 訂正するまでもないかもですが > >883 の通り解決済み は > >885 ですね
ひつこい ではなくて しつこい ですよ。正しくは。
>>885 >昔は文字列が動的配列の代わりだったんですか?
そういう風に使ってる人がいたということで。
俺はC見たいにメモリ確保、解放してやってたけど。
今なら、array of byteのstring文字列実装とほぼ同じの動的配列があるんで・・・。
>>888 ここは、「なんだ、しつこいかよ!」と書くべきだろ。
しかも、888かよ!
891 :
デフォルトの名無しさん :02/02/22 13:53
Try ... except を使用して例外を取得しているのですが、 ApplyUpdatesで例外エラーが発生した場合、 exceptの処理が実行されずに、システムのエラーメッセージが表示されます。 以下、ソース抜粋 dbs.StartTransaction; try tbl.ApplyUpdates; dbs.Commit; except dbs.Rollback; end; tbl.CommitUpdates; どうすれば、システムのエラーメッセージを表示させずに、 例外を処理することができるのでしょうか?
>>885 すでに解決済みのようですが,
Move(Source[0], AString[1], Length(AString));
という手もありますです.
Moveは標準手続きです.
#私がかつて作った汎用リストクラスは1個の文字列をバッファにしていました(笑).
>>888 お江戸の方なのでしょう.
893 :
デフォルトの名無しさん :02/02/22 17:22
>>867 >>そもそも、バイナリをどうして文字列に入れる必要が?
>TIdCoderが引数としてStringを要求するから
>TIdHTTPがHTTP BodyをStringで返すから。
TIdCoder はよく知らんけど、TIdHTTP の場合は Stream で Body を返す
Method もきちんと用意されてるよん。String で返すシリーズは返ってくるのが
String で処理できるデータだとわかってる場合に使おうね。
すみませんが、
>>783 のコード「だけ」で、
正常にごみ箱の「中身」のプロパティが出せる環境の人いらっしゃいますか?
(VCLも使わない)
当方Windows2000SP2, IE5.5なのですが、結構怪しい環境なので、
この動作が、一般的に起こり得るのか、うちの環境が変なのか知りたいのです。
あれから試したかぎり、
・コントロールパネルのフォントのFORPARSINGで得られるディレクトリ
・コントロールパネルの管理ツールのFORPARSINGで得られるディレクトリ
・コントロールパネルのネットワークの中身
・ごみ箱の中身のプロパティ
が、事前に、コントロールパネルの中のタスクを調べておかないと変になります。
さらにタスクを調べるのはスレッド毎に必要なようです。
>892 > Move(Source[0], AString[1], Length(AString)); > > という手もありますです. > Moveは標準手続きです. ……こ、これはまた、ずいぶんとストレートなお名前ですな。 ということは、Copy やら Fill なんてのも…あった。 いや、お恥ずかしい、探し方が全く足りなかったようで、海よりも深く反省。 あまりに安直なので逆に考えもしなかったというか、StrCopyにつられて MemXXだとかMemoryXXXなんてのばかり探してました。 やっぱりこの手の処理が標準で用意されていないわけなかったですね。 >889 メモリ転送の方法がわかった以上、最早配列の仕様に何の文句もありません。 が、Stringを動的配列の代わりにするべきではないというのはやっぱりわからないです。 遅延評価が必要かどうかで使い分ければいいのでは? 配列として扱う分にはどちらも同じように扱えるようだし。 >893 > TIdCoder はよく知らんけど、TIdHTTP の場合は Stream で Body を返す > Method もきちんと用意されてるよん。String で返すシリーズは返ってくるのが > String で処理できるデータだとわかってる場合に使おうね。 そうはいっても、ダウンロードしてみるまで中身がTextかどうかわからないですよ。 Content Typeをみて判断しろってことですかね。 というか、TIdCoderに至っては、Hash値がStringで返されるんですが。 これはTIdCoderの仕様が悪い?
896 :
デフォルトの名無しさん :02/02/22 23:12
>>895 >そうはいっても、ダウンロードしてみるまで中身がTextかどうかわからないですよ。
>Content Typeをみて判断しろってことですかね。
いや、だから
>>893 にも書いたように、中身が Textかどうかわからない場合は Stream
で Body を返す Method を使えばいいんじゃないかな?
戻り値の型が String なんだから NULL混じりのバイナリを扱えないというのは
当たり前の話だよね。
当たり前かよ!
Tedit(FindComponent('EditA')).Text:='あいう'; みたいな感じをしたいのですが、この時に文字列として存在して いるフォーム名も指定できる方法ありますか? StringListにフォームの名称を入れておいて、その中に該当する EditがあればStringListをグリグリして値をぶち込みたいです。
TStringListの中身のテキストデータサイズ、
Length(StringList.Text)
よりコストパフォーマンスの良い取得方法ないですかねぇ…
それっぽいメソッドもないし、ググルで検索しても無駄な物ばかり引っかかる…
検索とコーディングに疲れたので質問して寝ますスマソ
>>898 いまいちやりたいことが飲み込めん…
Screen.Formsは使えないかな?
TComponent.FindComponent ∧,,∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ミ,,゚Д゚彡 < TCompoのメソドだから… ミ つ日 \ 各FormのFindCompoを 〜ミ,,,,,, ,,ミ 呼ぶのヨロシ。 Length(StringList.Text) 素直がよろしいのでパフォはあきらめたら? っていうか、遅いのか?その程度の処理が? >それっぽいメソッドもないし、 どうせそれっぽいメソドあっても 「よりコストパフォのよい取得方法は?」 っつう、質問が出てくるだけじゃないかしら?
901 :
デフォルトの名無しさん :02/02/23 01:59
∧,,∧ ・・ゲトォーメコ サレタ・・ Σミ゚Д゚,,彡 ⊂ ⊂ミ ⊂゙゙ 〃 /(/″
903 :
デフォルトの名無しさん :02/02/23 02:15
>>882 >>883 丁寧なレスどうもありがとう!!
できるかできないかだけ教えてもらえさえすれば、
あとは自分で調べようと思ってたのだけど。
感動した!あんたいい人だ。
予想外に名スレになったもんだ、次でVer3か、 D相談を追い抜く勢いだな、そのうち、こっちがメインになるのか?(w;
少し前にFrameのネタが出ていたが、俺も今まで使った事がな かった少し試してみたが、知ってる人がいるか知らんが、 MS-Accessのサブフォームと似た物なのかなと感じたのだが、 Frameを使ってる人は何に使っているのだ? 当然だが、FrameにはOnCreateイベントなんかもないし、 結構使い方が限定されそうだが、やはり、コンポーネント風に 使えるPanelって感じの使い方なのだろうか。
>905 たとえばページコントロール使ってプロパティシートみたいなのを作る時、 Frameを使うとそれぞれのページの中身を独立したモジュールとして 作れるので気持ちイイ、とか。
907 :
デフォルトの名無しさん :02/02/23 04:44
>>905 メインフォームにコードが集中しないように、適当な単位で Frame に分割
してる。例えば 3-Pane型のアプリなんかはそれぞれの Pane を個別の
Frame で実装して、メインフォームに乗っけてる形。
コードの見通しがよくなるんで、俺的には手放せない機能だな。
>当然だが、FrameにはOnCreateイベントなんかもないし、
コンストラクタで代用してる。(それはそれでいろいろ注意が必要だったり
するわけなんだけど)
>>899 これでいかがか?
n := 0;
for i:=0 to strlist.Count-1 do
begin
Inc(n, Length(strlist[i]));
end;
>908 結果は Length(StringList.Text) と同じですか?
>>905-907 複雑な画面になればなるほど、Frameで別のフォームに
してしまうと確かに、見通しはよくなるな
あと、繰り返しとか必要な処理を
>>834 のように書けば、
昔よく言われてた、Delphiに配列が無いから云々も
かなり楽に扱えるようになるな、Frameの中のオブジェクト
名は同じnameが使えるわけだし
しかし、うちの会社では、俺以外は誰もFrame使ってない、
D4->D6にアップグレードしたから、誰も存在自体を知ら
ないのだろうか・・・・
改行分が…
そういえば,CRLF が入らないからちょっと違うかも.
913 :
デフォルトの名無しさん :02/02/23 05:05
TMemoStringsとかじゃないだろな。
StringList.Count分をnに加算すればいいかな。 でも、カラの行ってCountに含まれたっけ?
>>891 (´∀`)<ApplyUpdatesの返値をチェックしたらどうだろ?
んで、raise EDatabaseError.Create('もうだめぽ')
Deilphi で 旧文化オリエントの作った DenpyoMan に負けないコントロールを作りたいと思いますが どのように始めればいいか分かりません。Grid から始めればいいんでしょうか? APIはどのあたりを勉強すると良いですか? 質問ばっかりでスミマセンがお願いします。
誰もシェルネームスペースなんて興味ないのかな…
918 :
デフォルトの名無しさん :02/02/23 14:12
Personal版使ってるけど、 MSecsToTimeStampとか使えない・・・? Pro版買うしかないのか・・・
>>915 さん レスありがとうございます
返り値を判断してやってみます
>>916 コンポーネントを作った事がなければ、最初はラベルを継承して影
をつけたり、TEditを継承して数値入力コンポを作ったりして組み方を
学んでからの方が良いのでは?
実際には、StringGridを継承して作れば良いのだろうがコンポ以前に、
StringGridにコンボボックスを描くやり方とかを先に勉強した方が良い
と思われる。それに特殊なAPIなんかは使わなくても出来ると思うが。
921 :
デフォルトの名無しさん :02/02/23 14:37
キャッシュアップデートを使い ApplyUpdatesでキャッシュをDBに反映させる際、 レコードのキーが重複している場合に、システムが応答不能になります。 tryで例外をキャッチできていないようなのですが、 ApplyUpdatesでキー重複が発生した場合は、 どのようにエラーを取得すればよいのでしょうか?
>>921 (´∀`)<
>>915 と被るかな? ApplyUpdatesの返値を調べて
raise EDatabaseError.Create('うわ〜ん')でexcept部へ跳ぶ。
詳しいエラーの内容が必要ならOnReconcileError イベントハンドラ
(TCustomClientDataSet)でエラーの調査&処理するのはどうかな?
>>922 すいません、ApplyUpdatesの返り値は
どうやって調べたらよいのでしょうか?
(´∀`)<ApplyUpdatesは確かエラーの数を返すので、 rslt := cds.ApplyUpdates(-1)等でrsltをチェック するのは駄目かなぁ?
>>924 ApplyUpdatesに引数設定や、戻り値の取得を行おうとすると
コンパイルエラーが出ました。
私はTQueryのApplyUpdatesを実行してますけど
これがいけないのでしょうか・・・
>920 あーなるほど。数値入力Editを作っておいて StringGridの中に書いてみるってことですか。 やってみよ。
Delphiで複数のフォームでテーブル、クエリ、データソース、 データベースグリッド使用しているのですが、 その際、すべてのプロパティをセットして実行しようとしたら 「データソース1、データ間の循環参照は許されません」 が出てしまいます。どうぞ教えてください
データソース1、データ間の循環参照は許されないんです。
>>928 「データソース1、データ間の循環参照」の意味が
いまいちわかりづらいのですが
>>925 (´∀`)<TClientDataSetかと思ったらTQueryでしたか、、、ごめんなさい。
僕のところのTQuery.ApplyUpdatesはキー違反で例外出します。
Delphiのバージョンは6です。 構成はTQuery+TUpdateSQLですか?
>>927 (´∀`)<もう少し情報が必要かも。TTable/TQueryのDataSourceはmaster-detailで
使わないのであれば指定しなくて良いらしいですよ?
>>930 >TClientDataSetかと思ったらTQueryでしたか、、、ごめんなさい。
私のミスですので、こっちの方が、ごめんなさいです。
念のため、
TBDEClientDataSetで試しましたけど、ApplyUpdatesで
応答不能になりました。
TBDEClientDataSetは、
◆10000jpさんが使われているTClientDataSetとは別物ですよね
Delphi6 Pro版でも使えますか?
>>930 >Delphiのバージョンは6です。 構成はTQuery+TUpdateSQLですか?
はい、Delphi6 Proで、TQuery+TUpdateSQLを使ってます。
ApplyUpdatesでキー重複の場合はシステムの応答がなくなりました。
とりあえず、教えていただいた
TClientDataSetを使おうと思うのですが、
TBDEClientDataSetで大丈夫ですか?
たとえば、実行時に Table1.MasterSource := DataSource1; DataSource1.DataSet :=Table1; ってやると、Table1 のマスターテーブルが自分自身になるので実行時エラーとなる。 オブジェクトインスペクターから設定する場合には、選択肢に出てこないからもともと 設定できないんだが。 これでわかるかな?
>>932 (´∀`)<TBDEClientDataSetはコード見れば解るけど危険な爆薬の香りです。
僕は、ClientDataSet+Providerの方が安心かなぁ。偉そうですみません>ボーランド様
でもTQuery+TUpdateSQL でもちゃんと動きましたよ。ApplyUpdate周辺の
コード晒しできます?
>>930 やはりDataSourceをはずしたらエラーはなくなりました
ありがとうございました
936 :
デフォルトの名無しさん :02/02/23 19:55
有名アクセスランキング系のサイト全容ってどこも大体似てるんだが、どこの「アクセスランキング」CGIスクリプト使っているか知ってる?
>>932 (´∀`)<あ、もしかして、、、重複キーのエラーダイアログがフォーム
の後ろに出ているという事は無いですよね? IDEでのデバッグ中
にはフォーカスが狂うこともしばしばあります。僕だけかもしれませんが、、、
一度IDEデバッガを切って実行してみては?
>>934 親切に答えていただいて、ありがとうございます。
>でもTQuery+TUpdateSQL でもちゃんと動きましたよ。
ということは、私のコーディングか、プロパティ設定が
悪いのでしょうね・・・
>ApplyUpdate周辺のコード晒しできます?
はい、大丈夫です。(以下、コマンドボタンのクリック時イベント)
procedure TfrmInput.btnUpdateClick(Sender: TObject);
var
intAppliUpdates : integer;
begin
dmdDb.dbsOffice.StartTransaction;
try
intAppliUpdates := dmdDb.qryTokuisaki.ApplyUpdates(-1);
if intAppliUpdates <> 0 then
raise EDatabaseError.Create('うわ〜ん');
dmdDb.dbsOffice.Commit;
except
dmdDb.dbsOffice.Rollback;
ShowMessage('err');
end;
end;
dmdDb = データモジュール
dbsOffice = TDataBase
qryTokuisaki = TQuery(TUpdateSQL設定済み)
データベースは、Access97のMDBを使用しています。
>>939 >一度IDEデバッガを切って実行してみては?
素人質問ですいません
[ツール]-[デバッガオプション]-[言語固有の例外]
Delphi以外の例外で停止のチェックをOffにすればいいですか?
(´∀`)<[ツール]-[デバッガオプション]-[総合開発環境を使う]をOFFです
>>940 (´∀`)< exceptでは on e: EDatabaseError でキャッチしてあげて
ShowMessage(e.Message);しRollbackした後、変更分を
キャンセルして、データベースと再同期をとった方が良いですよ。
>>942 了解です。
それと、
IDEデバッガを切って実行してみましたけど、
システムは応答なしのままでした。
TQuery + TUpdateSQL の組み合わせでApplyUpdates(引数指定できない)
で試してみました。
キーはフォームに張ったDBEditコントロールに手入力しているのですが、
重複しない値であれば、正常に動作しています。
>>943 (´∀`)<自分のTQuery+TUpdateQueryだとこんな感じでやってます。
IDEでもデバッガ外してもちゃんとrollbackします。
Access固有のバグなのかなぁ? ODBCじゃないよね?
それでは、皆さんおやすみなさい。
procedure TForm1.Button1Click(Sender: TObject);
begin
Database1.StartTransaction;
try
Query1.ApplyUpdates;
Database1.Commit;
except
Database1.Rollback;
end;
Query1.CancelUpdates;
end;
946 :
デフォルトの名無しさん :02/02/23 22:39
整数型とTpointでは型が違うと怒られてしまいます。これって Tpointを整数型に変換できますか?
TPointって整数を二つ含んでるけどどう変換したい?
>>947 えっと、実はテキストエディタの検索を作っているのですが、Posで
見つけた位置をLongint型に代入したいのです。
Posの戻り値はIntegerでLongIntに普通に代入できるよ。 TPointは無関係。ヘルプとサンプル見てみなよ。
950 :
デフォルトの名無しさん :02/02/23 22:50
Pos関数とTPointってどういう関係があるんだろう…
>>949 そうですか、もう少しヘルプを見てみます。
>>950 なんかそう言われると、やり方自体間違ってるかもと思うように
なってきた。
VBから移行してきたばかりでまだ良くわかってないのです。
とりあえずVB6で使ってたInstr関数の変わりでPosを使って
みたのですが…。Delで文字列検索の定番みたいなのが
あればヒントだけでも教えてもらえると助かります。
952 :
デフォルトの名無しさん :02/02/23 23:04
var I : Integer; S : string; begin S := 'あいうえおABC1234.'; I := Pos( 'ABC', S ); ShowMessage( 'ABC は'+ IntToStr(I)+'文字目にあります'); end; とか。
Posは漢字の検索で誤動作することがあるからAnsiPosだな。
>レス数が950を超えています。1000を超えると表示できなくなるよ。 そろそろ次スレを
955 :
デフォルトの名無しさん :02/02/23 23:13
大小文字を区別するのかがわかりにくいから、 TextPos と StrPos みたいに分けてほしいなァ AnsiCompareText と AnsiCompareStr, AnsiSameText と AnsiSameText みたいに。 ついでに AnsiReplaceText と AnsiReplaceStr も。
>>945 ODBC接続してました・・・ すいません
BDEだと教えていただいた通りの動作ができました。
ODBCだと、こういう動作があるのですね。
動作的な違いは無いのかと思ってました。
>それでは、皆さんおやすみなさい。
親切に答えて頂いてありがとうございました。
m(__)m ぺこり おやすみなさい
959 :
デフォルトの名無しさん :02/02/23 23:32
960 :
デフォルトの名無しさん :02/02/23 23:33
961 :
ヲッチャー :02/02/23 23:36
誰だよ。Hotkeyちゃんの掲示板に辛辣なこと書いたの。 ちょっとヒドイぞ。どうせ2ちゃんねらーだろ?
>961 わけのわからない書き込みで新スレを汚さないでください。
963 :
ヲッチャー :02/02/24 01:31
>>957 (´∀`)<ODBCドライバのバグですかね〜
ともあれ動くようになって良かったですね〜
>>964 ありがとうございます お陰で動くようになりました。
m(__)m ぺこり これからはBDEを使うことにします。
966 :
デフォルトの名無しさん :02/03/16 12:22
あうー、おかしいです。spineditに何も入力されてない状態でボタンを押すと 止まっちゃいます。 「プロジェクト aaa.exeがEconvertErrorクラスの例外を生成しました。 ""は整数ではありません'」 て出ます。 ウインドーの右上の×は押しても平気ですが、それ以外は全部ダメみたいです。 何の処理も記述してないボタンでも、押すと固まります。 他のspineditをいじっても固まります。 何故か実行ファイルそのもの(aaa.exe)を実行すると固まらないんですが・・。 "spineditに整数が入力されてないときに他のボタンを押すと、 変数の値(整数)をspineditに代入する" って形にしたいんですが・・・。 その処理をボタンに記述しても、押すと処理を開始する前に固まります。 一応2ちゃんねる検索とBorland Maniacs とDelphi Maling list でも検索しましたが全然ダメでした・・。 回避方法分かる方、どうかお願いします。 使ってる言語はDelphi6のpersonalです。
>966 気にせずそのままF9で続行するか、前もって [ツール]-[デバッガオプション]-[言語固有の例外]-[Delphi言語の例外で停止] のチェックを外しておく。 例外をキャッチするようにしていても、上のチェックが付いていると デバッガで停止させられるのはDelphiの仕様。 漏れはウザいから、Valueプロパティを自前のやつに置き換えた コンポーネントを作ったけどな。
>967 ありがとうございました!!解決できました。
∧_∧ / ̄ ̄ ̄ ̄ ̄ ( ´∀`)< Delモナーは ( ) | 普通のモナーとは | | | | 微妙に違うモナ (__)_) \_____
971 :
デフォルトの名無しさん :02/03/24 23:16
∧_∧ / ̄ ̄ ̄ ̄ ̄ ( ´♥`) ( ) | | | | | (__)_) \_____
∧_∧ / ̄ ̄ ̄ ̄ ̄ ( ´♣`) ( ) | | | | | (__)_) \_____
973 :
春だから… :02/04/05 03:52
∧_∧ / ̄ ̄ ̄ ̄ ̄ ( ♥♥♥)<無意味age♥ ( ) | | | | | (__)_) \_____
どうやら埋めたほうがいいらしいな
976
977 新スレへどうぞ。
なんで虎ノ門、1時間にするんだよッ!! バカテレ朝!! 無能テレ朝!!
「連続投稿ですか?」に阻まれる。
「2重カキコですか?」違うって・・・。
999です。
1000 :
デフォルトの名無しさん :02/04/06 01:45
1000!
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。