1 :
デフォルトの名無しさん :
2006/03/17(金) 20:14:11
2 :
デフォルトの名無しさん :2006/03/17(金) 20:14:56
3 :
デフォルトの名無しさん :2006/03/17(金) 20:17:05
4 :
デフォルトの名無しさん :2006/03/17(金) 20:17:37
5 :
デフォルトの名無しさん :2006/03/17(金) 20:44:07
乙。
6 :
デフォルトの名無しさん :2006/03/17(金) 21:50:00
もう書いていい? あのー、Explorerなんかのファイルの「プロパティ」を表示させたとき、 タブ内の「場所:」とかに書かれたフォルダ名ってマウスで選択コピー できますよね。 たぶんXPスタイルの背景が透けて見えるTEditみたなもんだと 思うんですが、どうやれば実現できます?
8 :
デフォルトの名無しさん :2006/03/17(金) 22:27:32
TEditでColorをclBtnFaceにして、BevelやBorderStyleをNoneにするだけでできるけど。
>>8 そうなんだ・・・自分の環境ですと、clBtnFaceにすると、
clBtnFaceの色のままで、背景は透明にならないんですけど。
逆にTPanelをTPageControlの上におくと、TPanelを何色にしても、
透明になってしまう。
Delphi6です。 i: Integer; i := $1;の時、 i shl -1は$80000000になります。 僕としてはi shr 1と同じように$0になってくれると助かるんですが…
で?だから何?
13 :
デフォルトの名無しさん :2006/03/17(金) 23:06:20
>>9 >逆にTPanelをTPageControlの上におくと、TPanelを何色にしても、
>透明になってしまう。
ParentBackgroundがtrueなんじゃないの?
>>13 確かにTPanelの場合ParentBackgroundが「透明」に関係してきますね。
Del7だけど、TPageControl上に置いた段階だとParentBackgroundが
falseだけど、実行すると透明になってる。
ParentBackgroundを一度trueにしてfalseに戻すと透明じゃなくなる。
で、TEditだと、TPageControlのXPスタイルの白っぽい色を背景色にはできない?
それとも、設定によって可能? さらには環境によって可能?
15 :
デフォルトの名無しさん :2006/03/18(土) 01:52:28
以下のVBのコードをDelphiに移植しようとしているのですが、型などがどうしても分からずうまくいきません。 すみませんがどなたか教えてください。 Delphi2005Proを使っています。 Dim oCor Set oCor = CreateObject("hoge.hoge") Dim ohogeDesk Set ohogeDesk = oCor.CreatehogeDesk("hage") Dim IsLoggedIn : Boolean Call ohogeDesk.Login(sUserName, sPassword, sHostsPath, shageing) IsLoggedIn = ohogeDesk.IsLoggedIn() ohogeDesk.Logout IsLoggedIn = ohogeDesk.IsLoggedIn()
hogeが何なのか分からないので型なんて分かりませんが、 (Ole)Variant使っとけばVBぽくて楽でしょう
質問です。 Delphi2006からはレコード型にメソッドを実装することが出来るようになったようですが、 オペレータオーバロードができるのを除くと、レコード型はTP時代からあるobject型とほとんど同じになった と考えてよいのでしょうか?
Delphi8からだったっけか、object型自体が無くなっちゃったからな
19 :
17 :2006/03/18(土) 15:36:49
>>18 object型がないのはDelphi.NETだけのようです。
20 :
http://www.vector.co.jp/soft/win95/util/se072729.html :2006/03/18(土) 18:55:18
TextSS の64bit化おながいします もしくは64bitにネイティブ対応した置換ソフトないですか?
21 :
デフォルトの名無しさん :2006/03/18(土) 18:59:22
世の中には4連休の方もいらっしゃるとか… で、お聞きしたいのですが、TreeViewに追加したTreeNodeを、 HNode[i] := AddNode; というように動的配列に退避しています。 その後、選択ノードを削除してね、とユーザが操作した場合は TreeView1.Selected.Delete; と削除します。このとき、動的配列内のTreeNodeの どれが削除されたかチェックしたいのですが、削除しても nil にはならないようで 判定方法でつまずいています。ご存知の方がいましたらお願いします。
TTreeNode には、Data プロパティーがあるんだら、ポインタにキャストして 退避したときのインデックスを記録しておけばいいんじゃないの? 参照を退避して何の意味があるのか皆目見当がつきませんが。
23 :
21 :2006/03/18(土) 19:19:52
うう… Data を使った方が良かったかも。でももうかなり作りこんじゃったしな。
OnDeletion イベントで何とかなりそうな気もしてきたし。ちょっと考えて見ます。
>>22 さんありがとうございました。
24 :
デフォルトの名無しさん :2006/03/18(土) 19:44:09
Delphiなんて販売停止が決まったツール使わない方がいいよ。 プログラミングを楽しみたいんだったらVBの方がマシ。
VBじゃやれること限られるし、 VB.NETはネイティブなコード書けません。 煽るんならまずこの2点を何とかして下さい。
26 :
デフォルトの名無しさん :2006/03/18(土) 20:01:17
>>25 目的と手段を履き違えてます。
ネイティブでないとできないことって何でしょう?
VBは6で終わったって言うのが現実だもんな・・・。 .NETでVBを使う人はさすがにいないだろうし。
起動した時にEditにPCのLocalAdressを表示させたいのですが どのようにすればいいんでしょうか?
>>30 ServerSocketを使用してたので
procedure TForm1.FormCreate(Sender: TObject);
begin
EditIP.Text := ServerSocket1.Socket.LocalAddress;
end;
としたのですが思ったような効果が得られません・・
何が問題なのでしょうか?
>>31 それだと0.0.0.0になるんじゃね?
どうしてもServerSocket使いたいならLookupしないと駄目でしょ。
iNet_ntoa(ServerSocket1.Socket.LookupName((ServerSocket1.Socket.LocalHost)));
PopupMenuのMenuItemでRadioItemをtrueにしても、 チェックマークが黒丸になってくれないのですが何故でしょう? バージョンはi2006です。
排他選択するってだけで、外見がふつうの ラジオボタンみたいになる訳じゃないんじゃない? などと、ヘルプも見ずにいってみる
ウチの環境だとちゃんと黒丸になるけどな
36 :
34 :2006/03/19(日) 01:06:50
試してみたけど黒丸です。 Delphi2006 WinXP Luna有効 manifestなし とりあえず、フォームにポップアップメニューだけ貼り付けて試してみては?
>>35 ,36
試してくれてありがとうございます。
確かに最小のプログラムでは黒丸になりました。
駄目なプロジェクトと何が違うのか見てみたのですが、
ImageListを設定していると黒丸にならなくなるようです。
そういうものなんでしょうか?
39 :
デフォルトの名無しさん :2006/03/19(日) 08:23:23
AnsiStrScanの大文字小文字区別なしバージョンないですか?
どっちかに揃えろ
Edit1に入力された↑↓をListBox1に転送するコードってどう書けばいいですか? 自分でListBox1のカーソルを動かしてやればいい話ではありますが・・・
42 :
デフォルトの名無しさん :2006/03/19(日) 12:21:12
実装している関数のクラス名を取得することはできますか? ClassNameは実装ではなく、インスタンスのクラス名を返してしまいます。
44 :
デフォルトの名無しさん :2006/03/19(日) 13:25:37
質問です。お願いです。 キーボードの調子が悪く、押しても反応しなかったり、連打しないと打てない文字が、 あります。 右の「シフトキー」とか、「9」とか、かぎ括弧も何回か押さないと出ません。 しかも最近「F8」もなかなか反応しないことが分かりました。 (F8が効かないのでセーフモードに出来ないことがあった) メカニカルキーボードなので、ハンダのクラックを疑っているのですが、 どのキーが不調なのか明らかにしたいのです。 そこで、 キーを押してみて反応があるとlabelに「ok」とか出るのを作れませんか? altとかpauseとかすべてのキーに対応したやつ。 3行くらいで出来ますか? ソースコードきぼんです。 私はdelphi6/personalを使っています。
>>39 比較対象を大文字か小文字にしろ
>>41 意味が理解出来んがこういう意味か?
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
var
Index: Integer;
begin
Index:= ListBox1.ItemIndex;
if Key = VK_DOWN then
Inc(Index)
else if Key = VK_UP then
Dec(Index);
if (Index >= 0) and (Index < ListBox1.Items.Count) then
ListBox1.ItemIndex:= Index;
end;
>>42 確か無理
>>44 知らん
46 :
デフォルトの名無しさん :2006/03/19(日) 16:06:28
Delphiってもう販売されなくなるんですよね。 VBに乗り換えた方がいいですか?
そうしたらw
DelphiはVBと違ってgenericsすらないし
弄って欲しいならバカボンスレで
VBよりLazarusの方がまだ遙かにマシだろうな。
それはさすがに言い過ぎな感じ。
52 :
デフォルトの名無しさん :2006/03/19(日) 17:42:06
お前ら事業売却になった製品なんてよく使えるね
そんな製品世の中に腐るほどあるわw
MS製品なんて買い取った(つまり売却された)製品ばっかだしな
55 :
デフォルトの名無しさん :2006/03/19(日) 17:52:55
>>42 : 実装している関数のクラス名を取得:
実装しているクラスの中から呼ぶんだから、静的に解決する。
仮想にはせず
class function TMyClass.getImplementClassName:string
begin result:= 'TMyClass'; end;
を作っているメソッドのクラスに実装。
サポート期間切れた製品がってことならまだ分かるが・・・。 そもそも売却騒動って新会社設立のためのパフォーマンスだしな
ここで釣られてる奴そろそろ死んでね
58 :
デフォルトの名無しさん :2006/03/19(日) 18:06:45
釣りじゃないよ。事業売却になって先がないのに使ってて大丈夫なの?って心配してるんだよ。
逆に質問だけど、売却だとなんで先がないことになるの?
>>59 そういうことにしておかないと困るからです。
結局売却されないしな 元々売る気なかった気もするが
TEditやTMemoってUnicode対応にできませんか?
まぁVB厨は癌ばれや 最近ほぼ死滅から完全に死滅へと移行してるようにしか見えんよ
>>44 >3行くらいで出来ますか? 釣りかな?メッセージがこないので、絶対に
不可能、という気がする。
>>63 Tntコンポーネントが割りと(バグも少しあるけど)使える。
TEditやTMemoってUnicode対応にできませんか?
MainMenu1の[ファイル|ツール]以下のメニュー内容と PopupMenu1の内容をリンクさせる手っ取り早い方法ないですか?
>>68 ToolBar2000にポップアップメニューをメインメニューのサブアイテムとして組み込む機能がある。
>>69 Actionを使っているならコードで簡単にコピーできるよ。
71 :
70 :2006/03/19(日) 19:09:21
アンカー間違えた。68ね。
72 :
デフォルトの名無しさん :2006/03/19(日) 20:01:48
VCLにバグがあってももう某は直してくれないんだよ。IDE事業売却しちゃったから。 そんな製品使ってて本当に大丈夫なの?
別に某が直さなくても、DevCoが直すわけなんだが。
74 :
デフォルトの名無しさん :2006/03/19(日) 20:26:01
Delphiでデータベースを使うプログラムを作ることになりました。 DBの文字コードセットはUnicodeです。 Delphiの標準のデータベースコンポーネント(TDBEditなど) を使って、SJISのデータを自動的にUnicodeに変換・復元 するような処理はできるのでしょうか?
>72 おい、明日仕事だろ? さっさと寝ろよ。
>>72 とか、まぁ一覧のは同一人物なんだろうが、
一つ勘違いしてるのは売られたとしても部門ごとなので
開発チームは全く変わらない。
極端に言えばBorland DelphiかInprise Delphiっていう違いしかない。
一覧ってなんだ('A`) 一連ね。 まぁたまには釣りにマジレスしてもいいよな?
だめぇ〜
一人が食いつくと、連鎖的に入れ食いになるので 我慢してください><
つーか、売却の話はスレ違いだし。
TEditやTMemoってUnicode対応にできませんか?
84 :
デフォルトの名無しさん :2006/03/19(日) 22:21:29
>>82 数日前、売却スレの新スレを立てたところ、即削除されてしまいました。
仕方がないので、ここで売却関連の話をするしかないのです。
85 :
デフォルトの名無しさん :2006/03/19(日) 22:23:48
>>82 スレ違いではありません。
> このスレッドはBorland(ボーランド)のDelphi(デルファイ)について、
> 他のスレッドでは書き込めない超低レベル、
> もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
> Delphi使いが優しくコメントを返しますが、
> お礼はDelphiの布教と初心者の救済をお願いします。
売却の話もDelphiの質問としてしているのです。
「入れ食い」って釣るほうが使う言葉なんだが
TEditやTMemoってUnicode対応にできませんか?
TEditやTMemoってUnicode対応にできませんか?
TEditやTMemoってUnicode対応にできませんか?
TEditやTMemoってUnicode対応にできませんか?
TEditやTMemoってUnicode対応にできませんか?
TEditやTMemoってUnicode対応にできませんか?
93 :
デフォルトの名無しさん :2006/03/19(日) 22:32:27
質問です。お願いです。 キーボードの調子が悪く、押しても反応しなかったり、連打しないと打てない文字が、 あります。 右の「シフトキー」とか、「9」とか、かぎ括弧も何回か押さないと出ません。 しかも最近「F8」もなかなか反応しないことが分かりました。 (F8が効かないのでセーフモードに出来ないことがあった) メカニカルキーボードなので、ハンダのクラックを疑っているのですが、 どのキーが不調なのか明らかにしたいのです。 そこで、 キーを押してみて反応があるとlabelに「ok」とか出るのを作れませんか? altとかpauseとかすべてのキーに対応したやつ。 3行くらいで出来ますか? ソースコードきぼんです。 私はdelphi6/personalを使っています。
TEditやTMemoってUnicode対応にできませんか?
TEditやTMemoってUnicode対応にできませんか?
TEditやTMemoってUnicode対応にできませんか?
TEditやTMemoってUnicode対応にできませんか?
キーボードなんか2000円で売ってるだろ・・・
TextSS のWindowsXP(Professional)64bit化おながいします もしくは64bitにネイティブ対応したテキスト置換ソフトありますか? そういや64bitにネイティブ対応している2chブラウザてありましたっけ?
Delphiの質問です。TEditやTMemoってUnicode対応にできませんか?
できません。
上司「どうやって調べたんだ?」 103「2chで質問して・・・」
上司「やはり、まだ対応してないんだな。」 103「そのようです。」
Delphiは趣味グラマが多いから売られたってどうでもいいよ 第一Win32全盛の現在はD6さえあれば何とかなるし、 結局Vistaもネイティブだからそのままいける
無職ニートの相手をするなや
いえてぃる。このまま、エンタプライズ路線を突き進んで、趣味グラマなんか無視しろ。
Label の横に Edit や ComboBox などを置くことって結構多いと思うのですが、 普通に置くと高さ(Top)が合わず、いつも微調整しています。 一発であわせるように調整することって出来るものなのでしょうか。
>>111 バージョンいくつ?
EditならLabeledEditっていうのがあると思うけど7以降だったかな。
個人的に懐かしいネタだ。 結構前にFocusControl設定したら微調整するLabelEx作ったことあったな。 なんとなくどっか逝ってしまったが。 というわけで標準の機能じゃ無理。 役に立たないけどLabeledEditなんて半端なコンポもある。
>>111 つ Delphi2006のコンポーネント・ガイドライン。
2006とか誰も使ってないバージョンであるある言っても意味ないよ。 というか社員乙。はやく2006Personalのリリース決断してね。 そうしないとつぶれちゃうよ♪
117 :
111 :2006/03/20(月) 09:49:06
バージョンを書き忘れていました。Delphi7 Pro です。
Edit を使うときは LabeledEdit を利用したいと思います。
>>113 FocusControl設定したら微調整するLabelEx って、良いですね。
FocusControl はまず間違いなく設定するので、便利な感じがします。
Control先を移動したら一緒に移動してくれたりしたら更に便利ですね。
逝ってしまったのが惜しい… でもちょっとWebで探してみます。
118 :
デフォルトの名無しさん :2006/03/20(月) 11:46:42
Delphiって今後某の手を離れてアクチができなくなるんですよね。 せっかく買ったのにどうすればいいですか?
VBに乗り換えた方がいいよ。最新版が無償だし。
120 :
デフォルトの名無しさん :2006/03/20(月) 12:21:24
Delphiは二度と無償版なんて出ないしね
121 :
デフォルトの名無しさん :2006/03/20(月) 13:10:24
Lazarusに期待するしかないなこりゃ・・・ハァ
とりあえずBDS2005を注文してみた。
2006だった・・orz
BDS2006に、ADOConnectionとか無いの? D7Proにはあるのに・・。
あるよ。
100000000を100,000,000みたいに桁区切りされた 文字列で表示するにはそうすれば良いの?
1度浮動小数点に変換してFormat関数 var iTemp: Integer; dTemp: Double; begin iTemp := 100000000; dTemp := iTemp; ShowMessage(Format('%.0n', [dTemp])); end;
つい最近Delphiをいじり始めました マインドマップ的な非線形エディタが目標です ・Indesignみたいに好きなところにテキスト入力エリアを作れる ・MindManeger、SVG catsみたいに各要素がリンクしている ・テキストにリンクをはって注釈やファイル、編集中のファイルの別な場所へリンク ・できれば他の形式に変換してIllustratorとかで編集したい ・画面を拡大縮小できる とりあえず入門講座をさらっていますが、どうすれば上記のような 機能が実現できるかアドバイスお願いします。
>>127 そんなことしなくてもFormatFloatで一発
var
i: Integer;
begin
i := 100000000;
ShowMessage(FormatFloat(',0', i)); //100,000,000と表示
end;
>>128 飛躍しすぎなのでまず基礎を固めて下さい
>>125 すいません、探したらありました。dbgoパレットなんですね。
お手数かけました。
>>128 >どうすれば
その仕様通りに動くようプログラムを書く。
もしくは書かせる。
フィルタリング使って探せば一発じゃん せっかく便利な機能があるんだから使おうよ
フィルタだけど最初がわからないのも検索できるともっと便利だよね。 Buttonと打つとxxxButtonが表示されるって感じで。
136 :
デフォルトの名無しさん :2006/03/20(月) 19:00:20
結局、TLabelEx は見つからなかった… で、またまたIDEな質問ですみません。delphi7 Pro です。 ImageList に格納されている画像が24ビットなのか8ビットなのか 等を 知るすべはあるでしょうか。
137 :
デフォルトの名無しさん :2006/03/20(月) 19:20:46
すみません。 dbExpressのドライバをアップデートしたいのですが どこでできるのかわかりません。 力を貸してください。おねがいします。
>>137 違法コピーでなければ、某に問い合わせてください。
139 :
デフォルトの名無しさん :2006/03/20(月) 19:38:04
もちろん違法コピーではありません。 ボに問い合わせって? メールでってこと? 普通はホームページとかにダウンロードできるように置いておくんじゃないの、 ボの社員はサボってるのか、なんか書いてて腹立ってきた。
140 :
デフォルトの名無しさん :2006/03/20(月) 19:42:54
さっきは怒ったりしてごめんなさい。 書き忘れましたがSQLServer用のドライバがほしいんです。
きっと違法コピーなんだろ。質問は違法コピーでなければサポートへどうぞ、ってことになってるらしい
142 :
デフォルトの名無しさん :2006/03/20(月) 19:50:11
違法コピーではありません。 だってダウンロードしてインストールするにもインストール番号・キー とかいるじゃん。 もう疲れたよ〜。もう正直どうでもよくなっちゃった。 さっきまではやる気まんまんだったけどね。 また納期に遅れるよ。お客さんごめんなさい。
その客、色々と可哀そうだな
ぱっと見たところなさそうだから問い合わせろと言ってるんだが。 「2chで教えてもらえなかったので納期遅れます」なんて客先がかわいそうだ。
せめてバージョンくらい書いてくれ。
146 :
デフォルトの名無しさん :2006/03/20(月) 20:06:55
バージョンは6です。 あと正直'サポートに問い合わせ'の方法知らないんです。 知っている人は教えてください。 お母さんのように優しく教えてくれるとうれしいです。
>>146 俺も問い合わせ方法は知らないので、教えられません。
調べればわかるけど。
149 :
デフォルトの名無しさん :2006/03/20(月) 20:19:14
ふぅ〜 もう無理です。 お腹が痛くなってきたので今日はもう帰ります。 誰も教えてくれないから2時間も残業しちゃったよ。
150 :
デフォルトの名無しさん :2006/03/20(月) 20:23:25
今書類全部しまった。 じゃ帰る。 さっきカレンダー見たら明日休みだからテンション上がってきた。エヘヘ
151 :
デフォルトの名無しさん :2006/03/20(月) 20:32:14
>>136 TImageListはDDBを使ってるんでない?
153 :
デフォルトの名無しさん :2006/03/20(月) 20:59:13
>TEditやTMemoってUnicode対応にできませんか? TEdit.Text を取得してそれをUnicode変換したり逆に 変換したりすればいいだけじゃねえのか? つーか、質問の意味がわからん。
155 :
152 :2006/03/20(月) 21:18:35
>>154 全然違うとは? ILC_COLORDDBしか使ってないと思うけど。
TImageList を貼り付けてあるユニット名.dfm を見ると 何となく24ビットっぽいのと8ビットぽいのが混じってる気がする。
proc(s: string); にPChar渡すと問答無用でコピーが発生してしまうんですか?
そうだね。
>>156 実行時にImageListに追加するときは、結局DDBに変換してるみたいだね。
ところでどうして色解像度を取得したいんだろう?
161 :
デフォルトの名無しさん :2006/03/20(月) 21:43:47
ある自作のソフトが稼動しています。 また、あるツールがあり、このツールからは外部のプログラムを駆動したり、メールを送信することができます。 ここで質問なのですが、稼動中の自作のソフトにツールから即時に処理をさせたい情報を送るには どうすればいいでしょうか? テキストファイルに処理させたい情報を書く方法をやってみたのですが、同時にアクセスするとエラーになり、 双方のソフトで同時にアクセスしないように監視すると処理が遅れてしまうので、できるだけ簡単なコードで済む 何かいい方法が無いかと思いまして。
>>161 DDE
SendMessage(WM_COPYDATA
レジストリ使っていいならOLEオートメーション
>>162 即レスありがとうございます。
その3つはツールからは新たなプログラムを呼び出して、そのプログラムからDDEなりSendMessageで
自作のソフトに情報を伝える方法でしょうか?
ワンクッション入れるしか無いんですね・・・
>>160 ImageList に(他人が)追加した数100のビットマップがあるんですが、
解像度が色々でして、なるべく8ビットに統一したいな、という感じで言われて
おりまして、ただ力技で取り出しては変換ってやり方は面倒だ、Delphi使いも
回りにおらず、質問させていただきました.。
>>163 稼働中のソフトには手を加えられないのか?
であればSendMessageやらkeybd_eventとかで無理やり操作するしかないと思うが…
166 :
154 :2006/03/20(月) 22:26:00
>>165 稼動中のソフトには手を加えられますが、ツールは外部のプログラムを起動することしかできないので、
ツールから呼ぶときの方法が無いと思いまして・・・
>>167 ああ、ツールの方が固定なのね。
OLEオートメーションにしてツールからはWSH経由で、とかもできそうだが、そんなことするぐらいならワンクッションかました方が楽だわな…。
読む限り、ソフトをstmpサーバーにしてメール本文に情報を、とかできそうだが、そんなことするぐらいならワンクッションかました方が楽だわな…。
うーむ。
> 稼動中の自作のソフトにツールから即時に処理をさせたい情報を送るには 両方手が入れられるんなら、SendMessage() が一番簡単。ただし、送り先の ハンドルを見つけやすいようにするのがキモ
あー、ツール固定なの? なら、ツールが呼び出す方式は変えられないんだから どうにもならん。SendMessage するだけのアプリを起動するとか?
>>164 逆に一つのImageListに形式が異なる画像を混在させることはできないんじゃない。
しかし数百ってImageListを画像のストレージとして使ってるのかな。
> ただ力技で取り出しては変換ってやり方は面倒だ これが一番簡単そう。
>テキストファイルに処理させたい情報を書く方法をやってみたのですが、同時にアクセスするとエラーになり、 >双方のソフトで同時にアクセスしないように監視すると処理が遅れてしまうので、できるだけ簡単なコードで済む そのツールでテキストファイルに情報を書くことも出来るの?
>>173 _です。ワンクッション入れてRAMDISK上のファイルに指令を書かせていました。
自作ソフトをコマンド引数でいろいろ出来るようにして、 既に自作ソフトが起動しているなら、そのプロセスにSendMessageなり 投げて終了、起動してなければそのまま引数解釈して処理する。
>>175 と言うことは2重起動禁止のコードを追加して、もし既に起動していたらパラメーターをSendMessage、
起動してなかったら通常の処理って形であってますか?
Delphi4の頃に2重起動防止のコードは書いたけど最近のでも通るかな・・・
プロジェクトファイルをいじるのが久しぶりでちょっと不安だったりする・・・
>>176 面倒ならSendMessageだけの別プログラムでもいいと思うけど
2重起動防止のコードはググルと山のようにある。おすすめは Mutex つかうやつ
しかし元アプリにコマンドライン引数転送して ウィンドウアクティブにするところまでちゃんと書いたサンプルはないんだよな。
180 :
デフォルトの名無しさん :2006/03/21(火) 02:11:19
とりあえず格闘してますが駄目ぽ。。。orz cd.dwData := SIGNATURE_STRING; cd.cbData := Length('TestDataNo.1!')+1; cd.lpData := PChar(cd.cbData); try StrCopy(cd.lpData, PChar(cd.cbData)); SendMessage(Handle, WM_COPYDATA, WPARAM(Handle), LPARAM(@cd)); finally StrDispose(cd.lpData); end; ボタンを押したら上記のコードを実行するようにして自分自身に送ろうとしてるんだけど、 SendMessageでエラーが発生してしまいます。 あちこちソースを見てるんだけどソースは間違ってないっぽいんですがどこがおかしいのでしょうか? 2重起動防止のほうは昔のコードがそのまま通りますた。
面倒だからメッセージ定義したら? 適当にWM_APPに値を足した定数を定義して const WM_HOGE = WM_APP + 100; TFormで捕まえる TForm1 = class(TObject) private procedure WMHoge(var Message: TMessage); message WM_HOGE; end;
>>179 多重起動防止のサンプルと任意データ送信のサンプル見れば分かるだろ
それを組み合わせる方法なんて考えるまでもないし。
>>180 >PChar(cd.cbData);
長さ入ってるデータのポインタ取ってどうするよw
データのポインタ入れるの。
最後にStrDisposeしてるならそこでStrAlloc汁
おかしい原因は割り当ててもいないアドレス(データ長差してる)に
文字列を上書きしちゃってて、さらにそれを解放してるせい。
メモリ破壊が起きまくってる。
>多重起動防止のサンプルと任意データ送信のサンプル見れば分かるだろ わかってるならこんなやり取りは発生しないわけで
てかニフティフォーラムのFAQにそのまんまのコードあるやん よく探せや
>よく探せや あるならこんなやり取りをする必要はないわけで
まぁまぁお前ら ココはくだすれだし
>>181 ごめん。意味が分からないっす。。。
>>182 findwindowで取り込んだ自分自身を入れてます。
>>183 教えてもらったとおりに修正したら送信はできるようになったけど受信が文字化け化けで駄目ぽ。
procedure TForm1.WMCopyData(var msg: TWMCopyData);
const SIGNATURE_STRING: DWORD = $00000001;
var
i: Integer;
buf: PChar;
begin
if msg.CopyDataStruct.dwData=SIGNATURE_STRING then
begin
buf := StrALloc(msg.CopyDataStruct.cbData);
try
StrCopy(buf, msg.CopyDataStruct.lpData);
ShowMessage(buf);
finally
StrDispose(buf);
end;
end
else
inherited;
end;
ShowMessage(PChar(msg.CopyDataStruct.lpData));
>>189 君はモウちょっと基本的なところを固めるべきだ
C言語の入門書読んで ポインタについて少し理解を深めるんだ
俺もWin32API使うようになって同じようなところで躓いた
>>192 じゃあ送信側がおかしい。
変更後どうなってるんだ
URL一行で終わる話を延々弄られ続けている質問者君アワレだな。
送信側でつ。。。 const SIGNATURE_STRING: DWORD = $00000001; var buf: PChar; i: Integer; cd: TCopyDataStruct; Handle:THandle; begin cd.dwData := SIGNATURE_STRING; cd.cbData := Length('TestDataNo.1!')+1; cd.lpData := StrAlloc(cd.cbData); Handle := FindWindow('TForm1',nil); try StrCopy(cd.lpData, StrAlloc(cd.cbData)); SendMessage(Handle, WM_COPYDATA, Handle, LPARAM(@cd)); finally StrDispose(cd.lpData); end; FDELPHIのFAQサイトはきちんと検索してるけど文字列を送信するコードは無いぽ。 WindowsMessageはあるけどね。
>>196 180のコードとか明らかに某サイトのコードコピーしてるが、
勝手にStrAllocとか無しにしてる辺り見ると、
URL一行提示したところで俺理論で書き換えられて「わかりません」ってオチかと
>>197 検索せずに一行一行舐めるように見ろ
お前の貧弱な語彙では検索できないだろうから
DAAAAAAAAAAAURUSEEEEEEEEEEEEEEEEE こうだ、こう。 送信側 cd.dwData := てけとーな32bit値; cd.cbData := 渡したいデータのバイト数; cd.lpData := 渡したいデータを指すポインタ; SendMessage(Handle, WM_COPYDATA, Handle, LPARAM(@cd)); 受信側 ShowMessage(PChar(msg.CopyDataStruct.lpData));
これはひどいwwwwwwwwwwwww
こういうのみてるとDelphiコミュニティは崩壊したんだと実感できるな。
>>201 > cd.lpData := 渡したいデータを指すポインタ;
あ。。。
書き直して来る。。。
まだだ、まだ終わらんよ まだオレたちがいる!…なんてな
>>198 連続ですまんがその某所のコードを丸々コピーして駄目だったもんで四苦八苦しててStrAllocがPCHARになってた
ところがあったのでそれに書き換えたりしてますた。
>>204 ちょwwwwww直すべき箇所はそこじゃねえwwwwwwww
>>197 (´-`)。oO('TestDataNo.1!'#0 はいつ書き込まれるんだろう…)
これはメモリリーク発生しまくりのプログラミングですね
210 :
デフォルトの名無しさん :2006/03/21(火) 03:05:28
(´-`)。oO(StrAllocとか使うべきなのか?下位互換ルーチンだろ。String でいいじゃん)
StrAllocはもう古い 使うにしてもGetMemやAllocMemだろ
>>207 え?違うの?
てけとーな32Bit値とバイト数はあってるし他には何もないと思うんだが。。。
>>208 ん?そんなコード通らんぞ?
>>212 ちょw
こいつはもうダメかも分からんね・・・
>>213 Del6の時点で既にカテゴリが「下位互換性ルーチン」
>>215 今ソース見てみたがdeprecated指令が付いてないし、
ヘルプでもヌル文字列用ルーチン一覧として載ってる@D2006
String使った方がいいよーとは書いてあるが。
const sData = 'TestDataNo.1!'; begin cd.dwData := SIGNATURE_STRING; cd.cbData := Length(sData) + 1; cd.lpData := PChar(sData); SendMessage(Handle, WM_COPYDATA, Handle, LPARAM(@cd)); end; わかったらもう来んな。
>わかったらもう来んな。 お前それ違うだろ。 分からなくてももう来んな。
半分だけ分かって半分はまだ分からないけど今日はもう寝ます。 でも付き合ってくれてありがとうございますた。
明示的に順序値を割り当てた列挙型を基本型とする集合型を定義すると、大抵内部エラーになる(´・ω・`) どこかに回避法とか落ちてぬい?
221 :
220 :2006/03/21(火) 06:38:32
山のように hogeReserveX とか挟み込んで調節と言う手は思いついたけど、 あまりにアホいよね(・ω・`)
そんな事出来たっけ?
つかコンパイラのバージョンとそのコードくらい書け
うぃ、スマソ TDIEnumDeviceFlag = ( diedfAttachedOnly = 0, diedfForceFeedBack = 8, diedfIncludeAliases = 16, diedfIncludePhantoms = 17, diedfIncludeHidden = 18); TDIEnumDeviceFlags = set of TDIEnumDeviceFlag; 6 Parsonal ね パッチは UpdatePack 2 と RLT 2,3
( ゚д゚)
6Proで普通に通るぞ。 定義を空のユニットに切り出してみたら。
>>226 ダメだった。(・ω・`)
また内部エラー L1030。
昨日もう来るなと言われた香具師だけど、もう一つだけ教えて。 最初のパラメーターはきちんと送れるようになったんだけど、再度送っても無反応になってしまいます。 F9+BreakPointだと起動時にパラメーターを付加できないからどこでエラーが起きてるのか分からないんだけど、 何かいいデバッグ方法がありましたら教えてください。
どうせ昨日みたいにメモリをズタズタにしてんじゃねぇの? 悪い事言わんから簡単なサンプルアプリでポインタの練習をしろ
>>229 コードは皆さんに添削してもらったものをまったくいじってないです。
いじったらまたボロボロになるし言われると分かってるので。。。
日本語も読めないなら、来るなって言われるわな。 >簡単なサンプルアプリで
お前もしつこいね。答える気ないならスルーしろよ。
>>228 >F9+BreakPointだと起動時にパラメーターを付加できないから
実行時引数指定すれば?
もう放置汁
>>233 レスありがとうございます。
色々とやってみているのですが、自分自身に引数を渡して実行することってできますか?
Targetのプログラムに引数を渡すことはできるみたいですが、自分自身を指定すると
BreakPointを指定していても虫されます。
>>1 >Delphi使いが優しくコメントを返します
質問です。 自アプリから、IEで表示しているHPで マウスポインタ位置の画像のURLを取得したいのですが どのようにしたら出来るのでしょうか? Delphi7です。
235です。できましたので忘れてください。。。(つд⊂)
>237 Del以外の言語やスクリプトならどうやれば出来るか考えたら答え教えてやる。 ヒント:IEコンポーネント
なんか往年のPCODEを思い起こさせるが、 彼との違いは徹頭徹尾役に立っていないということだな。
>>235 [メニューバー]→[実行]→[実行時引数]
わかったらもう来んな
わからなくてももう来んな
質問です。 2005以降のIDEのホームページに表示される 最近使ったプロジェクトの数を変えることはできないでしょうか?
Delphiでアプリケーションを作成したんですが、ショートカットのアイコンは変更できるのに 〜.exeは変更できません。 もしかして変えられないんですか?
プロジェクト-オプション-アプリケーション-アイコン
連投すいませんが
>>244 の方法だと32×32で、拡張子icoなのに
エラーで読み込めません。試してもないのにヴェリーサンクスとか調子乗ってスマソ。
その程度自分で解決しろ
承知
見た目はico、中身はbmp、名探偵コ(ry だったり
どうやらコナン君だったようで・・・解決しました。 ミス○ルの体は大人、頭脳は子供の逆コナン君にワロタ。
252 :
デフォルトの名無しさん :2006/03/22(水) 07:55:13
質問です。Delphi 2005とVB 2005でどっちの方が優れていますか?
>>252 はいはいVBVB。
満足したら巣にお帰り下さい。
255 :
デフォルトの名無しさん :2006/03/22(水) 11:06:32
Sender: TObjectの時 (Sender as TButton).Caption := 'unko'; はコンパイルできるのに、 (Sender as TControl).Caption := 'chinko'; はCaptionが未定義の識別だからという理由でコンパイルエラーになります。 CaptionはTControlにもあるのに、どうして未定義となるのでしょう?
256 :
デフォルト名無しタソ :2006/03/22(水) 11:11:38
ScrollBarコンポーネントをコントロールの傍につけたいのですが プロバティのどこで選択すればいいんでしょうか?
>>255 TControlはCaptionプロパティ持ってるとは限らないから
例えばTImageもTContorolからの継承だけどCaptionプロパティはない
プログラム起動時にオブジェクトを生成して終了時に開放したいのですが、 バグ等で強制終了した場合でもForm1のOnDestroyイベントは実行されますか?
259 :
255 :2006/03/22(水) 12:28:27
そうなのか。 ヘルプでTControlを見るとプロパティのところにCaptionがあるから、 TControlから派生したクラスは全部Captionを持っているのだと思っていた。
少しややこしいんだけど TControl.Captionは存在する。ただしprivateだからアクセスできない。 で、派生クラスで必要ならpublic/publishedに変更してアクセスできるようにすることが出来る。 TControl = class private property Caption; end; TMyControl = class(TControl) public property Caption; // publicで公開 end; TMyControl2 = class(TControl) published property Caption; // publishedで公開 end;
訂正 ×TControl.Captionは存在する。ただしprivateだからアクセスできない。 ○TControl.Captionは存在する。ただしprotectedだからアクセスできない。
機会があればVCLのソース眺めてみるといいよ VCLのソース見るのが楽しくなれば君も立派な廃人w
263 :
255 :2006/03/22(水) 12:58:22
詳しくどうも。 でもPersonalなのでソースは見られないのだ。
100KBから200KBくらいの文字列の塊をDLLに渡したいんだけど、 一旦テキストに落としてからDLLにテキスト読んでって指令するのと、 PCharにキャストしてDLLに送信するのではどっちがコスト低いの? やっぱり後者?
YES
そっか、ありがとん
もちろん。体感的な速度差が出るかどうかはともかく。
ファイルアクセスとメモリアクセスだから後者の方が断然速いと思うが 最近のPCだとあまり違いを感じないかも
HDDのバッファで処理される気がするが、やはりいったんファイルにするのは かっこ悪い感じだしコストっていうとやっぱポインタ渡しだが、自分ではつい 書いてしまう。
TFileStreamやTMemoryStreamを知らない頃は 一生懸命テンポラリファイルを作成してました
TFileStreamはファイル操作です
D6パーで、株価のチャート見るようなフリーソフト(個人で使う&配布しない)作ってOK? 株で儲けると、間接的に営利目的って事になるの?
ボーランドに聞けよ
>>272 ならない。
つかDelphi Personalで商用IDEを作ったり
ALMでライバルになるようなアプリを作って
大規模に売らない限りは問題にはならないと思うぞ。
>>274 そこまで断言していいのかね?
おまいさんが某国人というなら知らんけど
276 :
デフォルトの名無しさん :2006/03/22(水) 16:22:18
>>272 素直に買うなりLazarusに乗り換えるなりしたほうがいいと思われ
デルファイって、どう発音してますか? 頭にアクセント置く人と、フラットに発音する人がいるんですが。
辞書引け
>>278 必ずしも日本での発音と英語の発音とは一致しないでしょう
ここはにアメリカ人しかいないわけだが
ここはに なるほど、アメリカ人のようだな
> ここはに たしかに、日本人じゃなさそうだ
>>275 > そこまで断言していいのかね?
そう言われると自信はない。
> 個人で使う&配布しない
こちらは大丈夫だろう。
なんかやたらLazarusをすすめるやつがいるが大丈夫なのか。 Linux環境でもDel6PerでビルドしたバイナリをWINEで動かすほうがまだましとか 実状はそんなのだったりして(評価できるほど使ってませんすまそ)。
>>277 俺はフラット(正確には"デ"からちょっと音程上がって"ルファイ"はフラット)だったが、
最初にアクセント置いてる人しか出会ったことないな
それが正しいのは分かってるんだが、やはり違和感が・・・
ちんこ と同じアクセント 「デ」ルファ(イ)
287 :
デフォルトの名無しさん :2006/03/22(水) 20:27:29
ComboBoxExのonEnterにボタンを割り当てたんですがエンターキー押しても利かないんですけど…
もう、どうでもいいんじゃねーの。
おまえのそれエンターキーじゃなくてリターンキーだぞ
ヘルプ嫁・・・ OnEnterはフォーカスがそのコントロールに移ってきたときのイベントだ リターンが取りたきゃOnKeyPressでif Key=#13 then...
>>289 え?エンターとリターンって同じじゃないの?
>>290 そうなのか。
OnKeyPressでそれやって見たんだけどエラーが出る
もうちょっとヘルプ読んでくる
分かんないかも知れないけど(w
procedure TForm1.NavigateButtonClick(Sender: TObject); begin if ComboBoxEx1.Text = '' then begin ComboBoxEx1.Text := 'about:blank'; end; Webbrowser1.Navigate(ComboBoxEx1.Text); end; procedure TForm1.ComboBoxEx1KeyPress(Sender: TObject; var Key: Char); begin if Key=#13 then begin NavigateButtonClick; end; end; end. ってなってるんだけど呼び出せないよ?なんで?
>>285 >>286 俺の周りはフラットだったが、東京でプログラマやってる人が
最初にアクセント置いてた。
すいません、Delphi6をインストールしてみているのですが、 「デバッグ用のシステムレジストリが他のアプリケーションで使われてるのを 検出しました。書き換えていいですか?」 みたいな警告が出ました。 他にはVisualStudio.net2003とSunのJava開発環境しかないのですが、 これらに影響が出ることはあるでしょうか?
Just in time(JIT)だろ? Del以外の開発環境からも登録変更できると思うから、 問題出たら戻せばよろし
それです。ありがとうございました!
>>287 onEnterのところでF1を押すんだ
@「デ」ルファイ ちんこ・まんこ Aデ「ル」ファイ おまんこ・小結 B「デル」ファイ アルフィー・大関 Cデ「ルファイ」 キャラメル(のスカしたフラット版)・横綱 俺はBだが、C以外は全部使ったりもする。
>>237 IEのステータスバー msctls_statusbar32 のキャプション読み込み
俺は横綱派
301 :
デフォルトの名無しさん :2006/03/23(木) 12:58:18
>>297 F1押してみた。
…へぇ。ヘルプ出るんだ。dです!
F1とF12、あとCtrl+F12は本当に便利だぞ
303 :
デフォルトの名無しさん :2006/03/23(木) 13:25:14
>>302 なるほど。
で、
>>292 のコードなんですが
procedure TForm1.NavigateButtonClick(Sender: TObject);
begin
if ComboBoxEx1.Text = '' then
begin
ComboBoxEx1.Text := 'about:blank';
end;
Webbrowser1.Navigate(ComboBoxEx1.Text);
end;
procedure TForm1.ComboBoxEx1KeyPress(Sender: TObject; var Key: Char);
begin
if Key=#13 then
begin
if ComboBoxEx1.Text = '' then
begin
ComboBoxEx1.Text := 'about:blank';
end;
Webbrowser1.Navigate(ComboBoxEx1.Text);
ComboBoxEx1.ItemsEx.AddItem(ComboBoxEx1.Text, 0, -1, -1, -1, nil);
end;
end;
end.
で、事故解決しました!
良く使うのはこれかね 1. Ctrl + S(いつ固まっても良いように) 2. Ctrl + F9 or F9(必ず間違えるから) 3. F1 4. Ctrl + ポチ と Ctrl + ← 4. Ctrl + F(ファイル検索のショートカットがあれば良いのに…)
訂正 最初の 4 は Alt + ←
てめー何時の間にうちの犬コントロールしやがった ブレークポイントとCtrl+F2での強制終了のコンボは最強
ListViewで項目のダブルクリックを検出するのってどうやりますか?
308 :
286 :2006/03/23(木) 17:27:29
すまん、「ちんこ」じゃなくて「大関」の方だったわ 「デル」ファイ
>>307 OnDblClick イベントと SelectionCount
>>298 Cが普通かと思ってた。ところで@とBは一緒では?
BDS2006注文したら、領収書だけ先に届いて品物がまだ来ない。
312 :
237 :2006/03/23(木) 22:03:19
>239 EventElement.hrefみたいな事ですか? IEコンポーネントを、いろいろ調べていますが、まだ見つかりません。 起動しているIEの、IHTMLDocument2の取得方法は、 分かりましたが方向性はあってます? >299 ありがとうございます。 素朴な疑問なのですが、画像のリンク先になってしまう事ってないですか? 画像右クリック->プロパティ->アドレス(URL)を取得したいのですが
お前が間違えたらそうなるね
315 :
デフォルトの名無しさん :2006/03/24(金) 11:13:58
>>312 自アプリにWebBrowser ActiveX貼っ付けて、PrivateでOVDoc : OLEVariant 宣言しといて
Navigate に'about:blank'入れて初期化した後で、Navigate にURL入れて同じ画面イメージ作り
OnDownloadCompleteイベントで OVDoc := WebBrowser1.Document; でオブジェクト生成し、
OnStatusTextChange イベントで逆引きするでおk?
質問です。 今、ある無料ネットワークゲームをやっているのですが、 そのゲームへのログイン、ゲーム起動がそのサイトのトップページから 行われるため、ゲーム開始時には毎回そのページを開かねばなりません(しかもそのページが重い)。 なんで、ログインツール&起動ツールを作成しようと考えているのでが、 なにぶんこのようなアプリを作成したことがないので、まず何をしたらよいのか分かりません。 そのトップページにあるログインボタン、開始ボタンをクリックしたときに行われる通信を 調べて、それと同じ処理をDelphiでやってやればいいとは思うのですが。 通信の内容をどうやって調べればいいのか等、具体的のことが分かりません。 長文、意味不明な内容になってすみません。 宜しくお願いします。
>>316 トップページのソース見りゃいいだぴょ。
>>317 !!!!
全然気付かなかったです!!!
ありがとうございます。
319 :
316 :2006/03/24(金) 16:10:19
>>317 連投すいません。
喜び勇んでトップページ見にいったのですが、htmlではなくaspでした。
ソース見ようとトップページ右クリックしても反応なかったんで、「?」と思い
URL見たら「
http://*******/***.asp 」となっていました。
Webの知識が全くない自分はそこで頭がまっしろになってしまいました。
すみません。もう一度色々調べてみます・・・
>>316 間違いなくあなたには無理です。
諦めるのも手段の一つですよ。
321 :
316 :2006/03/24(金) 16:48:11
>>320 はい。
でもせっかくなんで、勉強がてらもうちょっと頑張ってみます。
質問を書きながら、何を聞けばいいのかもよく分からないような状態でしたので。
勉強不足でした。
スレ汚ししてすみませんでした。
322 :
デフォルトの名無しさん :2006/03/24(金) 17:04:44
スキンを使ってるせいなのか出来上がったアプリケーションを他のPC で実行するとアプリケーションのスキンの色が通常の灰色ではなく真っ青になってしまいます。 アプリケーションのスキンの色を指定してあげればこの問題は解決しますか? またアプリケーションのスキンの色はどうやって変えれば良いんですか?
>>303 ですけど
これをスマートにコーディングする事って出来ますか?
>>322 はスキンが実装できたのにスキンの色の変え方がわからないという・・・
>>323 お前のいうスマートの定義なぞ知らんよ
>>324 スキンってーのは恐らくXPのスキンだろうな
procedure TForm1.NavigateButtonClick(Sender: TObject); begin if ComboBoxEx1.Text = '' then ComboBoxEx1.Text := 'about:blank'; Webbrowser1.Navigate(ComboBoxEx1.Text); end; procedure TForm1.ComboBoxEx1KeyPress(Sender: TObject; var Key: Char); begin if Key=#13 then begin NavigateButtonClick(Sender); ComboBoxEx1.ItemsEx.AddItem(ComboBoxEx1.Text, 0, -1, -1, -1, nil); end; end;
327 :
デフォルトの名無しさん :2006/03/24(金) 21:33:28
328 :
312 :2006/03/24(金) 23:46:43
ActiveElementから取得できました。
>>315 やってみます。
ありがとうございます。
>>321 IEの履歴開いてそのページからログインしてるページを見つけて開けばすぐ行けるんじゃないか?
Delphi7 の IDE についてなのですが、ActionList のアクションを上下に 移動させると、分類が変わってしまうことがあります。これは回避できるもの なのでしょうか。
331 :
デフォルトの名無しさん :2006/03/25(土) 15:05:30
アクセスのファイル(MDB)をADOSQLQUERYを使ってDBGRIDに表示しています。 1つのテーブルを表示し、SQL文を実行するのは問題なくできています。 問題は、2つのテーブルを1つのDBGRIDに表示したいのですが、やり方がわかりません。 ADOSQLQUERYのヘルプを見ると、2つ以上のテーブルも表示できるように読めますが、具体的にどうすればよいのかわからない状態です。 具体的にどのような操作をすればいいのでしょうか? プロパティの設定だけでいけるのか、またはコードを書かなければならないのでしょうか? よろしくお願いします。
1個のADOQueryに同時に複数のDataSetを割り当てるってこと? 話がよく見えないんだけど複数のテーブル参照するクエリー発行じゃ駄目なのか
333 :
デフォルトの名無しさん :2006/03/25(土) 15:28:10
すいませんが procedure TForm1.Memo1Change(Sender: TObject); begin TextLine := Memo1.Lines.Count; SBarText := ''; if TextLine <= 1 then begin Label1.Caption := '一行AA'; Edit1.Enabled := False; Edit1.Color := clBtnFace; end else begin Label1.Caption := '複数行AAのタイトル'; Edit1.Enabled := True; Edit1.Color := clWindow; if Edit1.Text = '' then SBarText := '複数行AAのタイトルを入力して下さい'; end; StatusBar1.SimpleText := 'Bytes: ' + 'Lines: ' + IntToStr(TextLine) + ' ' + SBarText; end; procedure TForm1.FormCreate(Sender: TObject); begin memo1.Lines.SetText(CmdLine); Memo1Change(Sender); end; ってしてるんですが、起動時に StatusBar1.SimpleText := 'Bytes: ' + 'Lines: ' + IntToStr(TextLine) + ' ' + SBarText; が利かずに空白のままなんですが解決策ありますか? あ、あと、Memo1に書いてある文字のバイト数を参照出来る関数見たいのありますか? お願いします。
StatusBarのSimplePanelプロパティがFalseならお前を掘る
Length(Memo1.Text)
FormCreateに StatusBar1.SimpleText:= 'IIOTOKO'; て書いても何も表示されないなら、 SimplePanelが設定されてないとかでお前に落ち度がある可能性が極めて高い >文字のバイト数 Length(Memo1.Text);
337 :
デフォルトの名無しさん :2006/03/25(土) 15:44:11
首吊る前にケツを出せよ
339 :
デフォルトの名無しさん :2006/03/25(土) 15:47:36
アッー!
341 :
331 :2006/03/25(土) 18:32:46
説明下手でスマソ。 ADOSQLQUERY1にテーブルA、ADOSQLQUERY2にテーブルBを設定しています。 どちらのテーブルにも「連番」という項目があります。 この、「連番」が同じデータを1つのDBGRIDに表示したいんです。何か基本的なことがわかっていないでしょうか? よろしくお願いします
>>341 Access側でView作っておけばいいだけのような気がするが?
SQL文書けないとかいわれたら氏ねとか言うかも。
343 :
デフォルトの名無しさん :2006/03/26(日) 10:04:02
Delphi 6 Personal でデータベースをちょっと使ってみたいんですが出来ませんか?
できます
345 :
デフォルトの名無しさん :2006/03/26(日) 10:12:01
どのコンポーネントでできますか?
347 :
デフォルトの名無しさん :2006/03/26(日) 11:26:55
ありがとうございます。やってみます
keybd_eventを使ってAlt+Aみたいなキー同時押しの送り方を教えてもらえませんか
350 :
349 :2006/03/26(日) 12:25:49
すみません。自己解決しました。 連続して送ればいいだけだったんですね。
351 :
デフォルトの名無しさん :2006/03/26(日) 19:09:18
BorlandはIDE事業を売却してしまったそうですが、この先どうすればいいでしょうか?
352 :
バグ :2006/03/26(日) 19:17:33
でるふぁい バグ
>351 このスレに二度と来るな。以上。
オマエもな。以上。
特定の行動(ボタンを押す等)をした時に外部のテキストファイルからテキストを読み込み それをフォーム内のmemoに表示させたいのですがどのように書けばいいのでしょうか?
356 :
355 :2006/03/27(月) 00:18:27
すみません、上に追記で テキストファイルの全てを表示させるのでなく hoge.txtの中身↓ -----------ココカラ hoge START Delphi 12546 ddd END おpp ----------ココマデ というときにSTART の行から END の行までを読み込ませるといったような感じです。
stringlist memo.text
stringlist.strings[i]
procedure TForm1.Button1Click(Sender: TObject); begin Memo1.Lines.LoadFromFile('c:\hoge\filename.txt'); end;
var I: Integer; begin Memo1.Lines.LoadFromFile('c:\Hoge\FileName.txt'); for I := 0 to Memo1.Lines.Count - 1 do if Memo1.Lines[I] = 'START' then Break else Memo1.Lines.Delete(0); for I := Memo1.Lines.Count - 1 downto 0 do if Memo1.Lines[I] = 'END' then Break else Memo1.Lines.Delete(Memo1.Lines.Count - 1);
間違えた。 上のループはこう。 while Memo1.Lines.Count > 0 do if Memo1.Lines[0] = 'START' then Break else Memo1.Lines.Delete(0);
Editなどに文字を入力している時、「 | 」のようなマークがちかちかしますよね。 この入力中の位置を示しているものがもしEdit1にあれば、 という文を書きたいのですが、どのように書けばいいでしょうか? if 〜 then の〜にあたる部分が知りたいです。
フォーカスを調べなさい
365 :
363 :2006/03/27(月) 02:02:00
>>364 ありがとうございます。
一応、ActiveとFocusのことは勉強してみたのですが、
うまくいきません。
Edit1に'abcde'という文字列があったとします。
この文字列を1クリックした時に、SelectAllして、
2回目以降にクリックした時は、そのクリックした所にフォーカスを
当てるようにしたいです。
ご教示いただけるとうれしいです。
366 :
363 :2006/03/27(月) 02:06:46
あ、以下のようにすると procedure TForm1.Edit1Click(Sender: TObject); begin Edit1.SelectAll; end; 何度クリックしても、常にSelectAllされて困ってしまい、 かといって procedure TForm1.Edit1Click(Sender: TObject); begin if Edit1.Focused then else Edit1.SelectAll; end; とすると、何度クリックしてもSelectAllされない という手順でこれまで試行してみました。
AutoSelect?
>>366 クリックした時点でフォーカス移ってんだから当たり前
まあ367でFAか?
配列に文字列を代入したいんですが、 Perlでいうところの、 @words= qw(りんご みかん ばなな); というように、いっぺんに代入するには どうすればよいのでしょうか?
procedure tform1.button1click(sender:tobject); var hoge : tstrinlist; begin hoge := tstringlist.create; hoge.commatext := (りんご、みかん、ばなな); end; 使い終わったらhogeはfreeしよう
hoge.commatext := 'りんご、みかん、ばなな'; だった
、はいかんだろ・・
373 :
369 :2006/03/27(月) 13:49:44
できました。ありがとうございました。
LoadFromFileで読み込むファイルをC:\hoge\hoge.txt のように固定のパスのファイルでなく 実行ファイルと同じフォルダにあるhoge.txtに指定するにはどうすればいいのでしょうか?
IncludeTrailingPathDelimiter( ExtractFilePath(Application.ExeName) ) + 'hoge.txt'
相対パス使うなら LoadFromFile('hoge.txt'); か LoadFromFile('.\hoge.txt'); でも相対パスはカレントディレクトリに依存するから危険ではある
蛇足見本
>>375 うーん、IncludeTrailingPathDelimiterは必要かな?
>>379 ExtractFilePath は最後に\がつくことが保証されている。
因みに、ExtractFileDir はつかないことが保証されている。
381 :
380 :2006/03/27(月) 17:37:04
あ、ゴメン、勘違い。
ドライブ直下のファイルだと不具合が出るような話を聞いたことあるが 気のせいかもしれない。
383 :
375 :2006/03/27(月) 18:01:29
>>379 この場合はいらない
でも、ディレクトリ名やファイル名を連結させてパスを生成する時に
¥がないとかのつまらないエラー防ぐためにいつも書いてる
ま、自分仕様で他人に不要コードを押しつけない方がいいね
>>384 別に押し付けてる様子は微塵も無いんだが
もうちょっと広い心持とうよ
俺はIncludeTrailingPathDelimiterを初めて見た勉強になった
それは良かったな!いったい何を Traning するのかと不思議に思いながら 使ってたが、最近になって Trailing だったと知った!!!
末尾の\を自動的に処理してくれるライブラリ作ると便利かもな。 type TPath = object public function set(s: string): string; function add(s: string): string; property str: string; ... end; var path: TPath; path.set('c:\windows\'); ==> 'c:\windows' path.add('system32'); ==> 'c:\windows\system32' path.add('taskmgr.exe'); ==> 'c:\windows\system32\taskmgr.exe' path.filename ==> 'taskmgr.exe' path.dir ==> 'c:\windows\system32' path.name ==> 'taskmgr' path.ext ==> '.exe' path.changeext('.ini') ==> 'c:\windows\system32\taskmgr.ini'
そのクラスの使い道がさっぱりわかんね。
ExtractFilePath, ExtractFileDirと二つに加え、 末尾が\なら削除てな関数があれば大抵のパス操作に関しては十分 わざわざクラスを作る無駄などまったく必要ない
>末尾が\なら削除てな関数があれば あるよ。 というかラッパークラス否定したらVCLいらん罠。
390から何故ラッパークラスという存在の否定に繋がるのか理解出来ない 極論論者は正直好きじゃない
なぜ繋がらないのか理解できないがスレ違いだしもうやめとくよ。
>>390 パスをよく加工するならあった方が便利だし、
何よりそう書いたほうがDelphiらしいコードだと思う
変に手続き言語の部分を引きずってるから、
クラス作るの面倒って考えが生まれちゃうんだろうね
アンタ、オンナだな。じゃない、オトナだな。もう春だなぁ
Kylix の負の遺産がまた悪さしてるな
∧,,∧
>>394 ミ*゚Д゚彡
>>388 ミ つ旦)~~
〜と,,,~),,~)
あんたら、相当の手練れとみた。
やるね。
ところでobject型でもやっぱりクラスって言うの?
共通点はあるけどクラスとは言わないんじゃない。
クラスだよ 厳密に言えばobjectは静的クラス、classは動的クラス
>厳密に言えばobjectは静的クラス 厳密に言えばそれは俺用語 値型、参照型の違いがわかってれば好きに呼んでいいと思うけど。
よそでやれ
>>388 思ったけど、全てクラスメソッドにして、インスタンス作らなくてもいいようにした方がいいんじゃね?
>>403 思ったけど、全て関数にして、クラス作らなくてもいいようにした方がいいんじゃね?
>>403 それやるならクラス変数用意しないと文字が保持できんな
その場合D6とか古いのを切り捨てることになるが
>>404 絶対しろという決まりがあるわけではないけど、
オブジェクト指向的にはあれで正しいんだよ
隠蔽してしまえば最後の\が…って話は出ないし
まあネタで言ってるんだろうけどね
>>406 理念の誤解に関するパターンを誤解しているw
よく見てみれば分かると思うけど、状況が違うでしょ?
まずあっちは状態の保持が無いが上記のはある
カプセル化することで
>>405 で言われるようなデリミタの有無を考慮する必要がなくなる
あとそれとは関係ないけど、クラスメソッドにしてしまうなら
そこで言われるようなサブルーチン集もコーディング速度の面で有利だね。
例えば補完が使いやすい、複数の関数名覚えなくても1つのクラス名を覚えれば良いなど。
// もっとも、見ただけで機能が分かるようなメソッド名にする必要があるが
単なる関数で十分だろ、今回の例では。
何で388?がこんなに必死なのか分からないが、 とりあえず何でもクラスにすりゃ良いってもんでもないと思うけどね 隠蔽を伴うクラスは関数よりコストが増大するし
クラスメソッドにしなくても、ユニット名で補完効くだろ。アフォらし
クラスを自分では書けない人が必死ですね^^;
もんくしかいえんのかおまえは
クラスなんて書くだけ無駄無駄 つーかクラスなんて自分で書くようなもんじゃないでしょw
はいはい、アフォな話題はほっといて、次、どうぞ!
クラスってなんですか?
memoコンポーネントのスクロール(縦)って、キーボードの↑↓キーや、マウスのホイールなんかと同期したりできるんですか?
できます。
memoをスクロールさせるには、プロパティを設定するだけのように簡単にはいかないですか? ちょっと「Delphi memo ホイール」なんかでググってみたんですが、これっていう答えがみつからなくて… APIとやらをいじくならければならないならお手上げです。 どちらが簡単だけでも教えてくれませんか?
あなたが余計なことをしない限り、デフォルトでできます
なるほど、SetFocasなんかでフォーカスもたせるとデフォでできるんですね。
SetFocas じゃコンパイルできんだろ
もうお前消えていいよ
はいはい、アフォな話題はほっといて、次、どうぞ!
フォーカスってなんですか?
>もうお前消えていいよ 在日は性格悪いな
>>422 みたいな奴らがこの手の板に居つく目的って、初心者に答えてやるのではなくて初心者けなしてスッキリするためだからな
次どうぞとか言ってる
>>423 が実際に答えてやったことがあるのかも疑問
まぁマッタリ質問待とうぜ
お前らみたいな初心者が回答者面してたら誰も聞く気しないって
430 :
デフォルトの名無しさん :2006/03/28(火) 18:58:09
なんか変な設定したのか分からないんだけど ActiveXのブラウザー関係のWebBrowser_V1とWebBrowserが消えちゃいました! どうすれば戻りますか?
>>430 [メニューバー]→[プロジェクト]→[オプション]→[パッケージ]
でおまいがTWebBrowserを含めたパッケージにチェックをつける。
Del2006ですが、レコードに関数を入れるのって、どのくらい前のDelphiから サポートされているんですか?
2006から ただしほとんど同じ機能を持つobject型というのは大昔からある
TObject型ですか?でも例えば、 TMyClass = TObject public x,y:integer; end; として、 MyClass:TMyClass; TStream.WriteBuffer(MyClass,SizeOf(TMyClass)); とした時は、Record型と違って、ポインタだけ保存になっちゃいますよね。
objectはobjectだTはいらん
そんなオブソレートなもん使うなよー。
ただのobjectってのはヘルプを見てもよくわかりませんでしたが、 どういうものですか?
2006のレコードとほぼ同じ。 某が亡き物にしようとしてたら.NETで同等の機能が復活して それに対応する為にrecordにobjectと同等の機能が追加された。 別に知らなくても使わなくても全く問題ない。
>>434 > public
> x,y:integer;
> end;
( ゚д゚)…
え?何?何か間違ってる?
>>431 調べてみたけどチェックは全部付いてた
も一回再構成っての?してみたら直った
でも何でだろ?さっきは全然駄目だったのに
>>440 フィールドをpublicにしていることに対して突っ込んでるんだろうけど
record/objectでは普通の使い方だな。
ああ、ごめん。でもClassでも結構publicにしてるよ。 private Fx:integer; public property x:integer read Fx write Fx; とかするくらいなら、 public x:integer で良くない?
444
objectは使うな、と言いながら.dfmはobjectの塊なんだよなぁ。
別に便利なんだから使えばいいと思うよ どうせ下位互換の名目で延々と残るんだし
そんなオブソレートなもん使うなよー。
まーた始まった
くだすれなんだから非推奨だろうが何だろうが別にどうでもいいよ
よくもまあ24時間体制でスレに張り付いて 揚げ足取りまくって重箱の隅つつきまくっていられるもんだな
object = 重箱の隅
はいはい、アフォな話題はほっといて、次、いってみよう!
453 :
デフォルトの名無しさん :2006/03/29(水) 00:27:40
知恵を貸してください。 タイマー内で一定間隔ごとにスレッドをCreateして処理してるものがあるのですが。 (処理が終わればFreeOnTarminateで自動的に解放されます。) スレッド途中でメインフォームを終了させると、スレッドが完全に終了していないときに 例外が発生します。このような場合どう回避しますか? グローバルなスレッドのポインタをリストなどで管理したほうがいいのでしょうか。
TThreadを一旦Suspendして、TerminateしてからWaitForで終了を待てば良いんでないの ただし、Threadの処理自体にTerminatedに応じた処理を書いとく必要があるけど
例外回避だでいいならグローバル変数Form1Alive: Booleanを参照
>453 スレッドを最後まで実行させる必要がないなら OnCloseの中でTerminateThreadを使ってスレッド強制終了させた方が良い。
457 :
デフォルトの名無しさん :2006/03/29(水) 00:55:17
>>454-456 ご回答どうもありがとです。
↓つまりこういうことなんですが、変数スコープ的にアクセスできなくなるので
終了処理をするにはまずいってことですよね。(terminate,Suspendできない)
procedure TForm1.Button1Click(Sender: TObject);
var
Thread:TMyThread;
begin
Thread:=TMyThread.Create();//解放はFreeOnTarminateまかせ
end;
>変数Form1Alive: Boolean
すみません調べてみたけどわかりませんでした。(@_@;
Formのプロパティってことではないんですかね?
458 :
454 :2006/03/29(水) 01:00:09
変数スコープが問題ならTListにインスタンスを入れておけば良い その辺は工夫次第だ
>>457 >すみません調べてみたけどわかりませんでした。(@_@;
いや、自分で変数作るんだよ。
unit Unit1;
interface
var Form1Alive: Boolean; // Form1のリソースにアクセスできるかどうかのフラグ
procedure TForm1.FormCreate
begin
Form1Alive := True; // フォームにアクセス可能
end;
procedure TForm1.FormDestroy
beign
Form1Alive := False; // フォームは死んだ。これ以降アクセス不可
end;
で、スレッド側で
if Form1Alive then Form1にアクセス else スレッド終了
といったコードを書く。手抜きなやり方だけどね。
460 :
デフォルトの名無しさん :2006/03/29(水) 01:08:14
>458 どうもです。 なるほど、解決できそうな気がしてきました。 有難うございました!
461 :
デフォルトの名無しさん :2006/03/29(水) 01:09:48
>459 手抜き最高!!まずそれを試してみます。
462 :
デフォルトの名無しさん :2006/03/29(水) 01:16:43
できた!有難う!!
TForm1のDestroyをオーバーライドして最後にForm1 := nil;じゃダメ? それなら変数作らなくてもAssigned(Form1)とかで調べられるし。 もちろんinheritedの後でnil代入しないと死ねると思うけど。 //inheritedの後でもやっぱダメかな?今手元に環境無いんで誰か検証よろ
フラグの方が簡単だね
>>463 前でも後でも同じ。問題ない。
ただ、破棄されたメインフォームへの参照が原因で
アクセス違反が起きているということが前提で話が進んでいるが、
> スレッド途中でメインフォームを終了させると、スレッドが完全に終了していないときに
> 例外が発生します。
これだけの記述では何の例外が発生しているのかすら不明。
例外の種類を特定して原因を追求するのが先。
>話が進んでいるが、 話は終わっているが
そう、終わってるよね。
468 :
デフォルトの名無しさん :2006/03/29(水) 10:04:04
469 :
デフォルトの名無しさん :2006/03/29(水) 12:47:27
RichEditからの印刷で、RichEdit1.Print('xxx'); としていますが、印刷が開始されるときに 「印刷中 〜を LPT1:へ出力中 ページ 1/2」などというダイアログを 表示させたいです。ヒントでもありましたらお願いします。
↑すみません。無しにしてください。 TPrinter を使って解決できました。ページ数の方はRichEdit1.Print をコピーして、自分で数えました。
BDS2006のTADOConnection、TADOTableを使って、SQLServer2000に接続しています。 OLEデータ(バイナリデータ)フィールドを含むテーブルをTADOTableに指定して、 ActiveをTrueにすると、全レコードの全バイナリデータを読み込むかのような処理が始まり、 恐ろしく待たされてしまいます。 filterでターゲットのレコードを1つに指定しても全レコード分読み込むかのような時間が かかるのですが、もう少しパフォーマンスを改善することはできないでしょうか。 どうぞ宜しくお願いします。
つ TADOQuery
473 :
471 :2006/03/30(木) 15:42:31
>>472 ありがとうございます。
SQL文で直接フィルタすると、パフォーマンスが良くなりました。
もう一つ質問なのですが、TADOConnectionのConnectionStringを
ユーザーにビルドさせる事は可能でしょうか。ビルドのダイアログを
出したいのですが、TADOConnectionのメソッド等にはそれらしきものが
ありませんでした。
また、ConnectionStringが含まれるudlファイルというのがあるのですが、
これを起動時にADOConnectionに読み込ませる方法は無いでしょうか。
TreeView(DragMode=automatic)でノードをドラッグ&ドロップしている間に エクスローラのようにキー操作でマウスカーソルを変化させたいのですが、 キーを押してもOnKeyPress等のイベントが呼ばれないため カーソルを変化させる事が出来ないのですが、 どうすれば出来るようになるのでしょうか?
あるボタンを押して内部処理実行中にカーソルを砂時計にしたいのです。 Form1->Cursor = crHourGlass;とやれば、マウスがFormの上にあるときは砂時計になるのですが Formの上に貼り付けてあるボタンやページコントロール上では砂時計に変わってくれません。 処理中はどの部品の上でも砂時計にしたいのですが・・ Form1->Cursor = crHourGlass; PageControl1->Cursor = crHourGlass; GroupBox2->Cursor = crHourGlass; ・ ・ ・ と、部品1つ1つにコードを書いてやるしか方法はないでしょうか?
>>475 Screen.Cursor := crHourGlass
>476 ありがとうございます。 うまくいきました!!
> これを起動時にADOConnectionに読み込ませる方法は無いでしょうか。 ConnectionString プロパティに FILE NAME=C:\Program Files\Common Files\System\OLE DB\Data Links\DBDEMOS.udl とか設定するのかな。 > ビルドのダイアログ つ PromptDataSourceメソッド With ADOConnection1 do ConnectionString := PromptDataSource(Form1.Handle, ConnectionString);
>>474 WM_KEYDOWNはMouseCaptureしているウィドウへ送られるのでは?
すみません。どなたか知恵を貸してください。 TreeViewを使ってアウトラインプロセッサみたいなのを作りはじめました。 TreeViewのItemをMouseUpしたら当Item名のファイルを開く、というヤツです。 ところが困ったことがおきました。 Itemが子をもったときに、ノードを展開するためにしたMouseUpにも反応してファイルを開いてしまうという症状です。 ノードをExpandするためにしたMouseUpか、ファイルを開くためにしたMouseUpか判別できたらいいんですが…
>>481 TTreeNode.DisplayRect とか?
あとどうでもいいが MouseUp はないだろう。
OnClick か OnChange でいいじゃん。
ついでに言うならダブルクリックでファイルを開く方がよくね?
そうすりゃ小難しい事考えんですむぞ。
>>482 さんへ
レス、サンクスです。
クリックされた位置(X,Y)が欲しくてOnClick等は使わないでMouseUpにこだわったのです。
MouseDownされたときにグローバル変数にX,Yを退避させようかなぁ…
素人の考えつくことはこんなもんです。
DisplayRectのヘルプをみたけど、ノードの位置だけを取れるみたいですね。
でも、TTreeNodeの情報を取得するコードが思いつかない。
徹夜したので、また起きて考えなおしてみます。ヒントをどうもありがとう!
>>483 クライアント座標からノードを取得したいなら GetNodeAt
でも OnChange なら TTreeNode が直接もらえるけど?
あスマンそれとは別に座標も欲しいのか
Delphi7でActiveXフォームを作って保存したあと、再度プロジェクトを読み込んでも きちんとフォームが表示されません。ActiveXフォームの場合はプロジェクトを読み込む以外に 何かやらなければならないことがあるのでしょうか?
>>481 MouseDownしたときの座標でGetHitTestInfoAt
アプリケーションが、 常に他のウインドウより一番上にくる方法を 教えてください。
FormStyle := fsStayonTop
「アプリケーションが」というのが意味不明。 そんなアプリが複数あったらどうなるんだろうか?
VCL には Application というオブジェクトがあってウィンドウハンドルを持っている。 別に意味不明じゃない。
で FormStyle := fsStayonTop にするとアプリケーションは一番上にくるのか? 必ずフォームより下だと思うが。
そこまで突っかかるほど意味不明じゃないと思うんだが
なら、アプリケーションを一番上にするための回答が分かってるの?
不可視のウィンドウにもZオーダーってあるの?
質問者はメインフォームをfsStayOnTopにした状態の事聞いてんじゃねの
相変わらずコミュニケーション能力読解力0の引きこもり粘着バカが常駐してるな。
498 :
488 :2006/03/31(金) 14:29:19
>>489 できました。ありがとうございます。
キー入力を常に監視し、
押されたキーを表示するアプリケーションを
作りたいのですが、
ウインドウがアクティブじゃない状態でも
キーボードからの入力を得るには
どうすればよいのでしょうか?
手軽にやるならタイマー使ってGetAsyncKeyState()かGetKeyboardState()で監視し続ける
んー、結局 fsStayOnTop 関係なくキー入力監視したいだけなんだな。Zオーダと フォーカスの関係もわかってないひとの質問にエスパーが答えてるってことだな。 タイーホされた奴もいたなぁー。インターネットカフェに仕込んで。
この粘着力には並々ならぬ物を感じます
で、アプリケーションが一番上にくる方法はどうなった?
出来たって言ってんじゃん
Application.HandleにSetWindowPosで常に手前にできるべさ
できねべさ
フックすりゃいいじゃん
アプリケーション粘着厨はやっと去ったか
で、結局アプリケーションが一番上にくる方法はどうなった?
「別に意味不明じゃない」とか言ってた
>>491 はどうした?
暇だね
相当ね
fsStayOnTopだと一瞬ちらつくからWin32API使った方がよさげ
フォームの上には出れないだろ。
いまだにアプリケーションを一番上にした回答はないのか?
ひょっとしてApplicationを知らないとか・・・? いや、まさか、それはないよね・・・
Application はすべてのフォームのオーナだから、フォームより上に来れないだろさ。
M$も某も「アプリケーションを手前に表示」という使い方を普通にしてるんですが、 これに対しての見解はいかがなものでしょうか。 先ほどからデータ到着待ちで暇な同僚とニヤニヤしながら見ております。 返答の程よろしくお願いいたします。
これが社会人のやり取りなのかと思うと欝になる
アホ同僚同士
そして肝心のアプリケーション厨は逃げたか
525 :
デフォルトの名無しさん :2006/03/31(金) 23:54:12
Delphiは二度と無償版が出ないどころかIDE事業を売却したそうですが、 この先どの言語に乗り換えるべきでしょうか。
いや、言語ではなく職を変えるべきです。
無職ニートの525 はどうすれば? そうだ人間やめなさい。
>>525 毎回上げてくれるので判別がつきやすいです。
どうもありがとうございます。
おっと、助言しちゃった
>>479 遅くなりましたができました。ありがとうございます。
491は別に間違っちゃいないよ 間違ってると言うなら具体的に指摘してよ
英字を全角で打つ奴は大抵アホだから信用できねーなw
>>531 だから、Application ウィンドウが「常に他のウインドウより一番上にくる方法」
を質問してるんだよ、
>>491 に。間違ってるなんて言ってないだろ。
きみが知ってるなら教えて。
VCL には Application というオブジェクトがあってウィンドウハンドルを持っている。 こいつに最前面の属性をつけてやれば、自アプリのウィンドウが 他のアプリのウィンドウより手前にくるようになる。
タイマで定期的に一番上に表示してはどうでしょう?
解決してるものを質問者じゃないのが延々と引っ張るな レスしたやつも荒らしの手伝いになるからスルー汁
Application ウィンドウ が「常に他のウインドウより一番上にくる方法」 は、マダー?
Application ウィンドウを一番上に持ってきてもサイズ0だしメリットなんかあるん? それでもやりたいんなら、 hWndMain:=Windows.FindWindow('<フォームのClass名>',Nil); hWndParent:=Windows.GetParent(hWndMain); //クラス名後のDelphiのオーナーウィンドウを検索し表示する hWndMain:=Windows.FindWindowEx(hWndParent,hWndMain, 'TApplication','<dprの名前>'); Windows.ShowWindow(hWndMain, <SW_うだうだ>); それ以降ご自由に。
最近質問者の質よりも回答者の立場にいる人間の質のほうが悪いな MLとは天と地程の差があるよな
この状況では質問者の方がタチ悪い気がするが
質問者は解決したと言ってるのに勝手に話続けてるのは回答する側だろ
荒らしは荒らしで、質問者でも回答者でもないよ。
この話題引っ張ってる奴も糞
そりゃあこんな糞ユーザーばかりではDelWikiも潰れるわな
賢い頭持ってるならスルーしようぜ
僕は本当に悲しいです。どうして皆いがみ合ってるんですか? 仲良く教えあいましょうよ。
2ちゃんで質問するほうが悪いのかもな・・
それはそうと、
>>540 のナンセンスコードってなんなの?
うんうんあれは酷いねあなたの言う事は全て正しい これで満足か?
>>550 ただ批判するだけなら誰でもできますよ。
あなたが同じ処理を書く場合において「センスが良い」と感じるコードを
明示してください。そうでなければ
>>550 の発言には何の価値もありません。
かまっちゃだめだって
すまん、つい・・・悪かったorz そいやBDS2006使ってるんだが、特定のパーソナリティの内容変えるとき ちまちまレジストリ弄ってんだが、ひょっとしてツールとかあったりする?
>>552 同じ処理っていったって意味不明。 なんか必死に外から Application.Handle
を取ろうとしているように見えるが間違いだらけ。ギャグとしか思えないのに偉そう、なこと
言ってるから、つい絡んでみたくなっただけ。スマヌ
粘着がうるさいからわざと回りくどく書いたと思ってたが
いいからスルーしろって
558 :
483 :2006/03/32(土) 22:43:42
亀レスですが。
>>487 さん、ヒントをどうもありがとう!
さっきやってみたら、無事、動きました。
しかし、スレが伸びてると思ったら荒れてますね・・
触れちゃだめだって
560 :
デフォルトの名無しさん :2006/04/02(日) 06:55:58
こんにちは。コンボボックスの妙な挙動に悩んでいます。一応自分でもググったり して調べて見たんだけど、万一既出だったら許して。 フォームにコンボボックスを配置してOnChangeイベントに以下のコード。 procedure TForm1.ComboBox1Change(Sender: TObject); var i: integer; begin ComboBox1.Items.Insert(0, ComboBox1.Text); i := ComboBox1.Items.Count - 1; while i > 0 do begin if ComboBox1.Items[i] = ComboBox1.Items[0] then begin ComboBox1.Items.Delete(i); i := 1; end; Dec(i); end; end; 編集ボックス1文字ずつ入れていけば、ドロップダウンリストにその履歴が残ります。 で、重複する文字が入力されたとき(あるいは、ドロップダウンリストから履歴のひとつ がクリックされたとき)、それをドロップダウンリストの一番上に追加し、編集ボックス に表示させた上で、重複文字をドロップダウンリストから削除したいってだけです。 このコードで、まずアイテムリストの先頭に文字が挿入され、重複するアイテムがあれば 確かに削除されるんだけど、その直後なぜか入力したはずの編集ボックスが空になって しまいます。なんで!? ComboBox1.Items.Delete(i);の次にたとえばComboBox1.Text := ComboBox1.Items[0]; とやっても、やはり編集ボックスは空白のままです。編集ボックスには、入力した文字を そのまま表示させておきたいんだけど・・・
>>560 というかやろうとしてる事自体が妙なんですが。
562 :
560 :2006/04/02(日) 07:09:44
>561 え、そんなに妙ですか? ドロップダウンリストを入力データの履歴として使って、重複するデータが あればそれをリストの先頭にもってきたいってだけなんですけど・・・
入力する度に全部履歴に残すってどうかと思う。
>>560 のソース見る限りasdfって入力すると
asdf
asd
as
a
みたいな感じで保存されていくんだよね?
何らかのアクションがあった時に追加していくのが普通かと思ってた。
まぁ俺自身初心者なので何とも言えませんが〜。
564 :
560 :2006/04/02(日) 07:23:11
>563 あーごめんなさい、560のコードは話をわかりやすくするために、一番シンプルに しただけなんです。実際のOnChageイベントは if Length(ComboBox1.Text) = 4 then begin...end; で囲ってあって、入力された文字数を監視していて、 4桁の数字が入力されたときのみ履歴に追加されるようになっています。 つまり履歴は 5555 4444 3333 2222 1111 って感じになるわけです。かえってわかりにくくなってしまった。すいません。
565 :
560 :2006/04/02(日) 07:37:26
こっちのコードの方がわかりやすかったでしょうか。 procedure TForm1.ComboBox1Change(Sender: TObject); var i: integer; begin if Length(ComboBox1.Text) = 4 then begin ComboBox1.Items.Insert(0, ComboBox1.Text); i := ComboBox1.Items.Count - 1; while i > 0 do begin if ComboBox1.Items[i] = ComboBox1.Items[0] then begin ComboBox1.Items.Delete(i); i := 1; end; Dec(i); end; end; end;
566 :
560 :2006/04/02(日) 07:37:59
ずれた orz
procedure AddToHistory(History: TStrings; Item: String; MaxItems: Integer = 8); var i: Integer; begin i := History.IndexOf(Item); if i >= 0 then History.Delete(i); History.Insert(0, Item); while History.Count > MaxItems do History.Delete(History.Count-1); end;
なるほどー確かにそれだとドロップダウンリストを選択した時に 入力中の文字列が消えてしまいますね。 そういえばTComboBoxにはいくつか不具合があるらしいので、 それもその1つなのかもしれません。 別のコンポーネントを使うか、ちょっと妥協して他の手段を用いるか するしかない気がします。 お力になれずにすいませんOTL
>>560 選択中のアイテムを削除してしまうと、何も選択されていない状態になってしまうのが原因。
挿入、選択アイテムの変更、削除の順で行えば回避できる。
var
Index: Integer;
begin
if Length(ComboBox1.Text) = 4 then
begin
ComboBox1.ItemIndex;
Index := ComboBox1.Items.IndexOf(ComboBox1.Text);
if Index >= 0 then
begin
ComboBox1.Items.Insert(0, ComboBox1.Text);
ComboBox1.ItemIndex := 0;
ComboBox1.Items.Delete(Index + 1);
end;
end;
end;
('A`)何か変なゴミが混ざってた・・・ var Index: Integer; begin if Length(ComboBox1.Text) = 4 then begin Index := ComboBox1.Items.IndexOf(ComboBox1.Text); if Index >= 0 then begin ComboBox1.Items.Insert(0, ComboBox1.Text); ComboBox1.ItemIndex := 0; ComboBox1.Items.Delete(Index + 1); end; end; end;
>>554 > ちまちまレジストリ弄ってんだが
bds に -r オプションというのがあるが。
参照: bds -?
572 :
560 :2006/04/02(日) 17:25:17
どうも皆さんありがとうございます。特に
>>569 さん、的確なヒントに感謝します。
ComboBox1.ItemIndex := 0;
が鍵だったようで、この1行を付け加えることで私のコードでも望む挙動を
得られました。私は、この1行と
ComboBox1.Text := ComboBox1.Items[0];
が同じ働きをするものと思っていたのですが、どうも違うようですね。
あと、プロパティのautocompleteはfalseにしておいた方が良いようです。
くだスレの皆さん、日曜日の朝からありがとうございました。
573 :
デフォルトの名無しさん :2006/04/02(日) 18:28:47
オブジェクトの永続化を行う場合、TPersistentではなく TComponentを継承してWrite/ReadComponentしないといけないんでしょうか? できればName, Tagは省きたいです。 また、永続化はバイナリでないといけないんでしょうか。 できればテキストで保存したいです。
自分でそういう風に実装して下さい
NameもTagも設定しなければ保存されないだろ テキスト化はObjectBinaryToText
576 :
デフォルトの名無しさん :2006/04/02(日) 23:58:28
はいはいクマクマ ↓次どうぞ
>>576 .NETみたいな次世代OSVistaの内部ではほぼ不採用なマネージドコードじゃなくて、
結果的にVistaの9割以上で使われてるネイティブコードで開発できるVBは無償配布されてませんか?
かっこいい最新版を無償で配ってるくらいなら多分あるはずだと思いますが。
くるしいな、それ。ほぼ不採用だとか、必死すぎ ワラワラ
ネイティブ捨てたVBに対する皮肉だろw あとVistaでマネージドコードが全然使われなかったのは事実だよ 確かすでに解析結果が外人さんのサイトにあげられてたはず スラド辺りに簡単な解説も載ってたかな
>スラド辺りに簡単な解説も載ってたかな なるほど。こういうところに出入りしているのがスレ荒らしてたわけか。 おまえに粘着されたら絶望的だな。
Now-filetimeを〜日前とか〜秒前といった文字列に変換するのって 自前でやらないとダメですか? 何か便利な関数ないですか。
Delphiなんて誰も使ってない言語使ってて楽しいですか?w
そりゃ楽しいよ。他人が何使おうと関係ないし
delphiスレなのにMS信者が必死なスレだな
589 :
デフォルトの名無しさん :2006/04/03(月) 12:37:14
くだらん質問して悪いのだけど、 vbaの中で時間のかかるサブルーチンをデルフィーのdllで置き換えたいのですが、 3次元配列をdllに渡して、dllの中でそれ更新して、更新された配列を vbaに戻すことはできますか? この場合、dllに渡したりdllから貰ったりするには、 テキストファイルなどに一旦保存する必要があるんでしょうか?
ない
>>586 楽しいかどうかという基準で考えるようじゃ駄目。
いかに仕事を速くこなせるかが重要。
Delphiの方が開発効率が格段に上だから使っているだけ。
Delphiで仕事なんてあるんですか?
本当に答えが聞きたいなら雑談スレで再質問してください。
>>592 ぶっちゃけ、うちの案件は言語が指定されていない場合が結構あるので、
そういう場合はDelphiでちゃっちゃと作ってる。
そういう小中規模のはいいよな ある程度の規模以上になると指定無しなんてまずないorz
596 :
デフォルトの名無しさん :2006/04/03(月) 20:52:01
雑談がしたいのなら雑談スレでどうぞ
>589 出来ますが、ポインタの概念を理解していないと難しい。 Delphiで配列へのポインタと要素数を引数とする関数を持つDLLを作り、VBA内部でそれをDeclare。
>>585 時間のフォーマットによる。
NowってことはTDateTimeか?ならDateTimeToString
クライアントーサーバー型のプログラムで クライアントにあるListBoxの全要素をサーバーに渡してそれをクライアントに渡す動作をする場合 ListBoxの要素はSendTextで一つづつ送るしかありませんか?
>>600 ∧,,∧ IPメッセですか?
ミ,,゚Д゚彡
ミ つ旦)~~
まとめてからSendTextで送る
とかも、あるんじゃない?
どんな回答を求めたいの?
テキストだけでいいなら、Items.Textで全部送ればいい。
>>601 クライアント1のListBoxの中身をそっくりクライアント2のListBoxに移したいと思ったんですが
ListBox.Items がTstrings型だからSendTextできませんよ・・って言われちゃうので
Listbox.Items[i]をforループで回して一つづつ送らなきゃいけないのかなと思いまして
604 :
600 :2006/04/03(月) 23:36:50
リロードしてませんでした_| ̄|○
>>602 やってみます、ありがとうございました
605 :
589 :2006/04/04(火) 09:02:19
>>598 そうなんですかありがとう。
ちなみに、サンプルコードってどこかにのってますか
606 :
デフォルトの名無しさん :2006/04/04(火) 10:21:36
サンプルがないと何も出来ない。それがDelphi厨。
すれ違いだろ。DLL のつくり方はともかく、使い方なら。
610 :
デフォルトの名無しさん :2006/04/04(火) 14:49:04
Delphi6PersonalSP2(RTLUpdate3適用済み) 矩形の積集合を求める関数UnionRectについて。 r, r1, r2: TRect; r1 := Rect(0, 0, 10, 10); r2 := Rect(5, 5, 10, 10); の時、UnionRect(r, r1, r2)を呼んだ後 r = (Left:0; Top:0; Right:10; Bottom:10)となってました。 積集合だからr = (Left:5; Top:5; Right:10; Bottom:10)が正しいと思うのですが、 もしかしてバグでしょうか?
ヘルプ100回嫁
IntersectRect 関数と勘違いしてるんじゃないの?
UnionRect 関数を呼び出すと,R1 と R2 の両方が含まれる最小の長方形を取得できます。 IntersectRect 関数を呼び出すと,R1 と R2 の共通部分である長方形を取得できます。
現在表示されている複数のウィンドウを取得して1つのフォームにならべて 表示したいのですけれど可能ですか? 実現するための関数とかヒントを誰か教えてー
可能だが、変なUIだね。おれならやらんな。
>>614 ウィンドウ自体を並べたいの?
だったらEnumWindows+SetWindowPos。
Macのexposeみたいにウィンドウのイメージ画像を取得して
一覧表をフォームにベタっと貼り付けたい?
WindowsNT系列のログイン画面を放っておくと出てくるスクリーンセーバみたいのを 作りたいのだけど、詰まったので質問します。 -------------------------------------------------------------------- procedure TScreenSaverForm.Timer1Timer(Sender: TObject); var x,y: Integer; begin with Canvas do begin if Font.Color = clWhite then begin // (Image1に表示されてる画像を消去)←これがわからない Font.Color := clBlack end else begin Image1.Canvas.Draw(Random(Screen.Width) ,Random(Screen.Height),Image1.Picture.Graphic); Font.Color := clWhite; end; TextOut((Width - TextWidth(DispStr)) div 2, ((Height - TextHeight(DispStr)) div 2),'テスト中'); end; end; -------------------------------- ここまでコードを書いて悩んでます。 Image1はウィンドウ全画面です。(Image1.Width := Screen.Width; 高さも同様) 今のままだと画像が重なってしまって意味不明です。 Image1に表示されてる画像を消去の仕方を教えてください。 そのあとに画像をまた描画する方法も教えてください。
618 :
614 :2006/04/04(火) 16:02:18
>>616 さん
ありがとうございます。
はい。ウィンドウ自体を取得して並べたいです。
EnumWindows+SetWindowPos
ですか。
調べてやってみます〜
Image1.Picture = nil; Image1.Picture.LoadFromFile('hoge.bmp');
Length関数って、ヌル探して1文字ずつ検証するんでしょうか? それとも、StringやArrayのどこかに長さ情報が入ってるんでしょうか? もしヌルを探しているなら、Lengthを使わないで長さを変数で保持した方が速いし、 長さの情報を既に保持していて、参照するだけならLengthが速いし。 どっちなんでしょ?
>>620 Stringの[-1..-4]あたりに長さがセットされていてそれを返すだけ。
ガシガシ呼んで問題なし。
Stringの実態は連続したChar型配列へのポインタで
0番目の要素に長さが入っていてLength関数は
>>621 が言うようにそれを返すだけ
0番目の要素を直接参照するとDelphiが青筋立てて怒ります
Array(動的配列)も同じく実態はポインタ
var
hoge: String;
begin
hoge := 'Hello Delphi';
hoge[1] := 'F'; //hogeは'Fello Delphi'
hoge[0] := 'F'; //コンパイルエラー
end;
>619さん ありがとうございます。nilを代入すれば良かったんですね。 外に画像ファイルを置くのが嫌いなのでImage2を作って隠し、 Image1.Canvas.Draw(Random(Screen.Width) ,Random(Screen.Height) ,Image2.Picture.Graphic); とimage2から画像をコピーすることで対処しました。 ありがとうございます。
624 :
620 :2006/04/04(火) 17:19:30
>>621-622 意外な結果で参考になりました。
ここに疑問を持ったのは、
PListW: PWideChar;
で、
Length(WideString(PListW))
なんていうコードを見かけたからです。
コレはさすがに型変換の時点でヌルを探してますよね。
625 :
614 :2006/04/04(火) 18:22:10
EnumWindowsで得たウィンドウ名でFindWindowして 得られたウィンドウハンドルをSetParentで実行して いるプログラムのフォーム上に並べたいのですが うまくいきません・・ うまく自身のフォームにはいりません。 テストで自身のフォーム上にメモ帳を入れるものを作ってます WinHnd := FindWindow(nil,'test.txt - メモ帳'); MyWHnd := GetForegroundWindow; if oldH<>MyWHnd then Windows.SetParent(Handle, MyWHnd); //oldH:=MyWHnd; SetWindowPos(WinHnd,HWND_TOPMOST,0,0,0,0, SWP_NOACTIVATE or SWP_NOSIZE);
626 :
デフォルトの名無しさん :2006/04/04(火) 19:26:46
Delphi6をダウンロードしたんだが… 何にも作れなかったー\(^o^)/
628 :
デフォルトの名無しさん :2006/04/04(火) 19:46:58
>>627 いや…実行とかじゃなくて…作る物がないって言うか
あるんだけど実装出来ないっていうか…
何も作れなかったー\(^o^)/
>>624 Lengthはあくまで長さしか見てない
そのコードだと長さがセットされてるからね
意味分かる?
ImageからImage.Picture.LoadFromFile(C:\hoge.jpg) としてhoge.jpgを読み込もうとしたんですが 処理できません云々のエラーがでて読み込めません・・ BMPなら読み込めたのですが目標のものの都合上jpgにアクセスできないのは少々辛いものがあります どのようにすればjpgを読み込めるのでしょうか?
健全版OptixProみたいなの作ったぜ!今度Vectorに登録しよう。
procedure TForm1.Button1Click(Sender: TObject); var i:integer; begin Randomize; for i:=0 to 14 do begin Memo1.Lines.Add(inttostr(Random(20))); end; for i:=0 to Serversocket1.Socket.ActiveConnections -1 do begin ServerSocket1.Socket.Connections[i].SendText('random'); end; end; procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); var msg :String; i : integer; begin msg := Socket.ReceiveText ; if msg = 'random' then begin for i:=0 to 14 do begin Memo1.Lines.Add(inttostr(Random(20))); end; end; end;
636 :
635 :2006/04/04(火) 22:49:07
>>635 のような手続きとServersocket、Clientsocketをもつプログラムを使って
サーバー一つ、クライアント二つを立ち上げました。
サーバーのButton1を押すとサーバーと全てのクライアントのMemoにそれぞれ違った乱数を発生させるような動作を期待していたのですが
結果
サーバーのMemo
3
2
11
0
5
(以下略)
クライアント1,2のMemo
5
3
0
0
16
(以下略)
のようにクライアントに表示される乱数のパターンが同じになってしまったのです・・
どうすればそれぞれ違ったものにできるのでしょうか?
クライアントの方にRandomize入れた?
638 :
デフォルトの名無しさん :2006/04/04(火) 22:54:52
ValueListEditorの指定箇所の値を拾う場合どうすればいいのでしょうか? ValueListEditorのヘルプが見つからないのですが無いのでしょうか? Stringsで拾って無理やり解析する方法は思い付いたのですが ちゃんとした命令があればそれを使いたいのでよろしくお願いします。
639 :
635 :2006/04/04(火) 22:56:42
>>637 クライアントのほうにというのは
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
の手続きの中にということですか?
今入れてみましたが結果は同じでした。
if msg = 'random' then begin for i:=0 to 14 do begin randomize; Memo1.Lines.Add(inttostr(Random(20))); end; end; にしないと種変わらないんじゃないの?
ああ、ごめんなんでもない('A`)
642 :
635 :2006/04/04(火) 23:11:15
>>640 サーバー
9
6
17
0
(以下略)
クライアント1,2
9
19
19
19
19
19
(以下19)
のように変化が無くなってしまいました
Randomizeは基本的に起動時に1回だけ実行するものだよね。
>>638 ValueListEditor1.Cells[0 or 1, 行]
ではないかと。
646 :
643 :2006/04/05(水) 00:07:29
起動時というと語弊があるかな。Random関数を呼ぶ前に一度だけ実行する、かな。 Randomizeでは時間を元に種を初期化するので、同時にRandomizeを実行したら 同じ種になるのは当然なんだけど、中身はPerformanceCounterだったような気がするので 同時というのはほとんど無理そうな気がするんだけど。
randomize;って割と1秒程度でしか見てないかもな。 クライアントのFormCreateの方に入れた方がいいんじゃない?
>>643 ,647
解決しました、ありがとうございました
>>642 変化が無くなったっつうことは・・・初期化の時間が結構長いって事だね。
9から19に一度変化したんだから。
15回ループよりも長いって事だ。
ありゃ、遅かったorz 結果教えてくれ
全てのクライアントで違う乱数列発生させたいなら、 サーバーでクライアント分の乱数列発生させて、 それぞれを各クライアントの種にするとかは?
参考までに言っただけのことよ 647の方法だと同時起動で被る可能性があるしな
あとこういうのは知識の蓄積だから、 本人が見ていようと何だろうと、改善点があるなら指摘した方がいい その方がこのスレを後で見た人のためにもなる
全くそのとおりだと思う。
セキュリティが絡むならCryptGenRandom。 そうでないならRandomizeで十分。 サーバから取得なんてアホ杉です。
658 :
デフォルトの名無しさん :2006/04/05(水) 08:17:59
Delphi6 Personalを落として使ってみたんですが、なんでこんな古臭いダサい見た目なんでしょう。 同じ無償のVB 2005はとてもきれいな見た目でした。 まともなGUIアプリを作るなら、日頃から使うIDEのセンスにもこだわるべきですね。
RandamizeがGetTickCountを使ってるとしたら、ミリ秒の精度もないから635のような描き方をしたら 同じになる可能性は高そうだね。
おもすれー
658が荒らすまでもなくひどいスレ。
>>658 その言葉をVC++に言ってあげて下さい。
663 :
デフォルトの名無しさん :2006/04/05(水) 12:28:58
デルパイってbeginとかendとか書いていて非常に抵抗を感じるのですが、 見慣れるまでにどのくらい時間かかりますか? あと、デルパイのメリットとデメリットを教えてください。
664 :
デフォルトの名無しさん :2006/04/05(水) 13:06:15
>時間 永遠 >メリット 無い >デメリット あらゆる面でVB等の他の言語に劣る
∧ ∧ (・∀ ・) <だから毎回言ってるじゃん ノ( )ヽ < > ∧ ∧ ヽ(・∀ ・)ノ <雑談スレでやりなよー (( ノ( )ヽ )) < >
AutoCAD等で使われる、DXFファイルを、Delphiで展開できるようなライブラリ等はありませんか?
うわ、666って縁起わりぃ
Delphiを使いたくないなら使うな。 主観を他人に押し付けるな。
DXFファイルの中身はテキストファイルだから ライブラリなくてもAssignFileやTFileStreamで大丈夫じゃないかな
>>666 Delphi専用ではないが、DWGdirectとかは?
自力で解析するなら669でいいと思うけど、
バージョン互換ってかなり低いから現実的じゃないね
>>668 反応すると喜ぶからスルーね
処理を一定時間待たせる事はできないでしょうか できればsleepみたいに全体を止めてしまう方法じゃないほうがいいのですが
タイマー、WaitForSingleObject、スレッド切るなど 具体例がないと答えにも限界が
>>671 //指定時間待
procedure pWaitMiliSec(lwMiliSec: Longword);
{
lwMiliSec: 待ち時間(単位:ミリ秒)
}
var
StartTime, WaitTime: TDateTime;
begin
WaitTime := lwMiliSec/1000/24/60/60;
StartTime := Now;
while True do begin
Application.ProcessMessages;
if StartTime + WaitTime < Now then Break;
end;
end;
674 :
671 :2006/04/05(水) 15:49:41
>>673 Application.ProcessMessagesを調べてみて納得しました。
解決しました、ありがとうございました。
Application.ProcessMessagesでループさせる場合 CPU負荷が跳ね上がるからSleep(1);もはさんどけ。
e-
677 :
デフォルトの名無しさん :2006/04/05(水) 19:39:09
質問です。 イメージリストに0〜5までの6個のイメージを入れて ランダムで発生させた数(0〜5)のイメージをImageに張る方法ってありますか?
あるよ
679 :
デフォルトの名無しさん :2006/04/05(水) 19:43:38
ImageList.Draw(index, target)みたいにできたはず。詳細忘れた。
681 :
デフォルトの名無しさん :2006/04/05(水) 19:52:59
Delphiってgenericsが使えないんですか? 今時VBでも使えるそうですが。
使えるとどんな良いことがあるの?
>>679 ImageList の GetBitmap を使った気がする。Draw かもしらんが。
乱数は Random 関数。
たった参加国数16カ国でもチャンピョンはチャンピョンだ!
荒らしには「無職ニート乙」以外のレスをしないでください。
VB使いも可哀想だねえ。せっかくgenericsの技術的な話題を振っても 中古Delphi使いではついて来れる人がいないから。
本当にgenerics使える奴ならVBスレで話題振るわな よくわからんけど自慢したいだけの奴、乙
Delphiスレの住民=日本人 VBスレの住民=朝○人
よりによって死滅したVBだもんなぁ。
690 :
デフォルトの名無しさん :2006/04/05(水) 21:28:06
691 :
デフォルトの名無しさん :2006/04/05(水) 21:28:21
>>680 ,683
ありがとうございます。
ImageList.Draw(Image.Canvas,0,0,rnd);で
Imageに張ることは出来ました。
が、再度乱数を発生させたときにImageが変わりません。
Image.Canvasを色々してみたんですがどうにも上手く行きません
こちらも教えていただけると有難いのですが…
>>690 そこで手に入るのは VB じゃなくて VB.NET
VBは死滅だしVB.NETはもはや別言語だし、 みんなC#とかに移行して寂しいんじゃないんだろうか。 VBの方が優れてると思ってるなら、 わざわざここまで来て優位性語る必要ないしね。
VB使いも大変だな、ゲイツに振り回されて。 M$もあんな中途半端な言語作るくらいならC#一本にするか VB7でも出してやればよかったのに。
>>691 乱数発生はどうなってる?
Randomize何回も呼んでないか?
>>695 こんな感じ
type
public
{ Public 宣言 }
saikoro: integer
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
randomize;
saikoro := Random(5);
ImageList1.Draw(Image1.Canvas,0,0,saikoro);
saikoro := saikoro + 1;
Label1.Caption := inttostr(saikoro) + ' マス進んでください!';
end;
Delphi はじめの一歩さんを参考にタブブラウザこしらえています。
起動時に例えばyahoo!を開くようにしたいですがどう書けばよいですか?
下記の記述しかうかばなくてやっぱりだめでした。personal6です。
procedure TForm1.FormCreate(Sender: TObject);
begin
TForm2.Create(Application);
TForm2(ActiveMDIChild).WebBrowser1.Navigate('
http://www.yahoo.co.jp ');
end;
まずな、乱数もなにもかもやる前にだな、ボタン押したら順番に表示させるルーチンでも 書くと。それから乱数に取りかかると。
saikoro := Random(5); saikoro := saikoro + 1; これだと 1から5までしか出ないよ。Randomize() は FormCreate() で1回だけ。
>>698 え?順番に表示させるって?
1〜6まで順番にって事??
Image1.Refresh とか。
saikoro := Random(6); saikoro := saikoro + 1; にすればおkなのか? あー、なんだか判んなくなって来たOTL
>ボタン押したら順番に表示させる これは出来てるんだろな
>>704 いや、ただランダムに表示させてるだけだよ?
まず、1−6の数値を与えて表示するメソッドを書く。 順番に表示するイベントハンドラを書く。 乱数を使ってみる。
ダメだこりゃ・・・
>randomize; はFormCreateで一回だけ読んどけ。
709 :
デフォルトの名無しさん :2006/04/05(水) 23:39:28
var Form1: TForm1; saikoro: Integer; procedure TForm1.Button1Click(Sender: TObject); begin for saikoro := 0 to 6 do; begin Image1.Refresh; //saikoro := Random(6); ImageList1.Draw(Image1.Canvas,0,0,saikoro); saikoro := saikoro + 1; Label1.Caption := inttostr(saikoro) + ' マス進んでください!'; Sleep(1000); end; end; procedure TForm1.FormCreate(Sender: TObject); begin randomize; end; end. ってしたんですが、ローカル変数じゃなきゃ駄目って言われるし 結果がいきなり6(5+1)になるんですが…
サイコロは7面体だったんですね
711 :
デフォルトの名無しさん :2006/04/06(木) 00:05:45
だめだー解説サイト四でも分からないー 俺の感だと0が始まると0のイメージを張ってキャプションに0+1を書く それを5回繰り返して最終的に5のイメージを張って、キャプションに5+1を書く って事なんだろうけどなんで最後の6が書かれてイメージには何も表示してくれないんだろ もしかして全部終わってからしか書き込んだりイメージを張ったりしないんだろうか… 今日は取り合えず寝よう あー、こんな程度で苦戦してるようじゃ何も出来ないよなー\(^o^)/
>>711 こんな感じ
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
for i:= 0 to ImageList1.Count-1 do
begin
Image1.Canvas.FillRect(Image1.ClientRect);
ImageList1.Draw(Image1.Canvas,0,0,i);
Image1.Refresh;
Sleep(100);
end;
end;
> \(^o^)/
キモイ
714 :
デフォルトの名無しさん :2006/04/06(木) 01:14:48
>>713 で、出来てる…
なんで?何が違ってたの?
ImageList1のCountを1引くのは何でか分かるような気がする。
多分6個あれば6になるんだろう。
FillRect(Image1.ClientRect)ってなんだ?
それにいままでRefreshが利いても2重3重になるのになぜ利いてるんだ?
疑問は多いけど
>>713 ありがとう!
なんかこんな俺にここまでしてくれて半分泣いてるよ。
本当にありがとう!
それで満足せずにヘルプを使って
>>713 の技術を全てモノにするんだ
>>714 > Image1.Canvas.FillRect(Image1.ClientRect);
コメントアウトしてみ。わかるから
717 :
デフォルトの名無しさん :2006/04/06(木) 01:42:25
>>715 ,716
ヘルプで調べたら分かったよ!
FillRect=指定した色で短角描画
ClientRect=デフォで指定されている色
つまりデフォで指定されている色で描画範囲をべた塗り(ペイントで言うと塗りつぶしツール)して
指定されたイメージリストのイメージを描画
って事だね?
あー、なんでそんな事に気が付かなかったんだろう。
>>717 ちょっと違うかな。
色を指定するときは
Image1.Canvas.Brush.Color := clBlue;
こんな感じで。
Canvas.FillRectは指定した領域をCanvas.Brush.Colorで指定している色で塗りつぶす
Canvas.FillRectの引数は指定した領域。
ClientRectはそのコントロールの領域の全体をあらわすプロパティ。全体を塗りたいからClientRectを使う。
例えば
Image1.Canvas.Brush.Color := clBlue;
Image1.Canvas.FillRect(Rect(0,0,32,32));
とやればimage1の左上から32*32の領域を青で塗りつぶすことが出来る。
もうちょい詳しく知りたいならTRectとかをヘルプで調べてみ。
>>712 ありがとう。
参考にして試してみたんだけど例外アドレス・・・エラーでして、
もう少しがんばってみます。
720 :
デフォルトの名無しさん :2006/04/06(木) 07:46:34
ユーザコミュニティーも賑わっています(笑)
Express ウチのボロPCだと重くてまともに動かないんだよね。 Delphiは軽快でいいいよ。
そうだね、ボロPCにはDelphi。 普通の環境なら VSExpress で決まり。
VCLの挙動に少しだけ不満があるけど、ほぼ満足って場合に、 その不満がオーバーライドぐらいで解消できればいいけど、 そうでない場合はVCLソース自体を改変するってことがあるよね。 で、その改変したソースを含めて全部公開しちゃうってあり? プロ版以上にしかソース付いてないわけだから、 ちょっぴり改変しただけのソースを公開したらダメって言われそう。 でもそのユニットを含めないと正常にビルドできないし。
ライセンスをよくお読みなさい
>>725 利口なおまえが読んで教えてくれ。
俺は読んで理解できるほど利口じゃない。
727 :
デフォルトの名無しさん :2006/04/06(木) 13:04:07
>>726 そういうことしようとしてるのに自分で理解できないでどうするの?
他人の言葉信じてもしライセンス違反で訴えられてもいいの?
答えたくないなら黙っとけ。どうせ他人のやることだ。
__ , ────── 、__ , - ':::::::::::::::::::::::::::::::::::::::::::::::::::\ / ;;;;;;;:::::::::::::::::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;\ /,,;,,,,, ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ,,,,,,,,;::::::丶 / :::::::::;;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;:::::::::::::::::::ヽ i゙:::;:::::||::::::,!i:::::::::::,|i::::::::::::::::::;:::::::::::::::::::::::::::::::゙i i゙::::|;;;;| |;;;;;| |::::::::::| |:::::::::::::::::||::::::::::::::::::::::::::::::::| . i゙::::::i ''''''''''' '───' |;;;;;;;;;;;;::::::::::::::::::::| .|:::::::|,-====-´ ゙ヽ,,,,,,,,,,,,,、 |:::::::::::::::::::| |;::::::::|,-──、 ~ニニ,,_` |:::::::::::::::::::| `ヽ、i (、i´ノ ´い,, ノ ' |;;;::::::::::::::/ なんで質問者こんな偉そうなん? . i ^~~~ー==─ ー'-+、 /^゙-、;;;;/ { ヽゝ '-'~ノ λ ''゙゙''-''-─、 /-'^" ヽ,_ ^~^ ( /`''丶、 , - /^l / /( ノ `'''''''´~ _, - ' ~ ゙i、 { / /| ̄ ̄ ̄ ̄ _,-'^¨ } {/ / ゙ー────'~ \| / ヽ \
読んでないんじゃないぜ。読んでもわからないバカなんだ俺。
>>728 インストールフォルダにあるライセンスは理解できないが、
だれかが理解できる形ですでに解釈していると期待して書いてみている。
信じられそうな内容なら、それを信じて出すか出さないか決めれるし、
アホっぽい1行レスなら粘着してよりよい答えを待つ。
で、公開していいと思う?訴えられると思う?
GPLとかどう対処したらいい?
deploy.txtに記述してあるパッケージファイルだけ 配布可能(但し変更するとダメ)、ソースはNG VCLのソースを変更して作ったプログラムは配布OK VCLの変更したソースは配布不可 ボーランドに聞くのが一番いいと思うが
公開していいよ、たぶん
再配布可能なものにソースファイルが含まれてないからダメってことだよね。 うん、わかった。 とか言ってる間に、 ユニット名もクラス名も違う、99%VCLからコピペの独自のファイルでビルド通った。 これなら大丈夫だと俺は理解したし、この状態でこっそり混ぜて配布することに決めた。 バレなきゃいいんだし。
こういうのがいるからモラル低下すんだよ せめてdcu配布とかにしようぜ
99%コピペなのに名前変えただけで独自のファイルって、 どこかのパクリ大国みたいな言い分ですね あ、ひょっとしてその国の方でしたか?^^;
おkだよ
ちゃんコロにモラルを説くだけ無駄
うん
VB 2005 Expressなら安心して自由に使えるのに
無職ニート乙
犯罪者よりマシ
昨晩から今朝の流れに感動した なのにまたこの流れ。
BDS2006でコンパイルしたものを、試しに64bitEditionで走らせて みたら、普通に動くんですね。 64bitコードを吐ける訳ではないんすよね?
XP上で16bitアプリケーションが動く訳を考えてみるとよろし
いや、そうなんだけど、何の警告も出ずに、違和感なく動作したもんだから、ちょっと驚いたよ。
マジでさVCLのソースを改造しざる得なくてGPLとかでの配布の場合ってどうすんの? 差分配布?それともdcuとかで?
差分でいいんじゃね?
そもそもVCLのソースを改造しざる得ない状況など無い。 一からつくれば良いだけ。
最近はだいぶ減ったけど、Delphi2.0とかその辺の時代は、 overrideしたい関数がprivateとかvirtual付いてないとか 結構あったんだよ…。
現在を語るのになんで昔の話を持ち出す
作った実行ファイルのアイコンをデフォルトのアイコンから変更するにはどうすればいいのでしょう?
メニュー[プロジェクト]→[オプション]→[アプリケーション]タブ→[アイコンの読み込み] アイコンは自分で用意しな。
一見、変わってないように見える時は コンパイルしたexeを他の場所に移動すれば変わる
死滅寸前のDelphiの信者を最新のVisualStudio2005に移行させるにはどうすればいいのでしょう?
ほっとく。スレ荒らしすると余計に移行しない。
マジレスするとDelphi使いは死滅関係なくほとんど自分で選んで使ってるから難しいよ VBやC++とかは仕事で使うから仕方なくって人もいるけど、Delphiはほとんど好み
>>757 北風と太陽の童話は知っていますか。
移行させようと押しつけたり、.netのURLを貼り付けるのは逆効果です。
>>758 の言うとおり放っておくのが最良です。
だからもう書き込まないでね。
/ / \ / / ∧ ∧__ノ\/ \/ (‘ω‘ * ノ . ‖‖‖‖‖‖ ШШШШШШ_________________ (_______________________)
762 :
デフォルトの名無しさん :2006/04/07(金) 07:40:20
Delphiが死滅するはずがありません。 Borlandは開発ツール事業を何よりも重視しているからです。
Delphi製アプリってXP上だとよく落ちるんだよね。 ネイティブのくせに不安定すぎ。
764 :
デフォルトの名無しさん :2006/04/07(金) 07:50:44
Delphiってライセンスは不透明だし、先行きも危ないしで仕事で使うなんてあり得ない。
Delphi 2005とVB 2005を比較したら、VBの方がはるかに生産性が高くて安全なコードが書けることがよくわかった。
それはよかったね
無職ニート乙
>>763 Delphi製アプリが落ちたことは無いが、Delphiはよく落ちる。
落ちる原因はスタックオーバーフローだから、XPかどうかは関係ない。 XPでルナでしかもマニフェストつけてるDelphiアプリで、 日本語の文字入力があやしくなるだけで落ちるわけではない。 人づての話をまぜこぜで言うからウソになる。
>>768 Delphiが落ちた事はないがOS巻き込んで固まる事はよくある
そろそろスルーを覚えませんか、皆さん
そんなの無理だと悟りましょう
アクセス違反は全Delphi共通で多発だが、よく落ちるのは2005のみ。
煽り耐性もないなんてホント低脳の集まりですね、Delphi使いって
とイライラしてる人が申しております
Delphi使いって
>>775 みたいな何のひねりも無い返ししかできないんですね
さすがです^^;
とても典型的でワンパターンな流れですね
IDが無いと不便だなぁ
_____ /::::::::::::::::::::::::::\〜プーン /:::::::::::::::::::::::::::::::::::::::\〜プーン |:::::::::::::;;;;;;|_|_|_|_|〜プーン |;;;;;;;;;;ノ∪ \,) ,,/ ヽ〜 |::( 6∪ ー─◎─◎ )〜 / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ |ノ (∵∴ ( o o)∴)〜 < とても典型的でワンパターンな流れですね | ∪< ∵∵ 3 ∵> \_____________ \ ⌒ ノ_____ \_____/ | | ̄ ̄\ \ カチャ ___/ \ | | | ̄ ̄| カチャ |:::::::/ \___ | \| | |__| |:::::::| \____|つ⊂|__|__/ / |:::::/ | ̄ ̄ ̄ ̄| 〔 ̄ ̄〕
重複の無い15個の乱数を表示させるにはどうすればいいでしょうか?
発生したら、重複があるかどうか調べる。あったら、もう一回ループ。
重複の無い15個の値を用意して乱数でシャッフル。
784 :
デフォルトの名無しさん :2006/04/07(金) 22:00:38
VCLのようなGUI以外何もサポートしないライブラリで将来大丈夫でしょうか? VBの.NET Frameworkの方がいろいろあるみたいでよさげです。
将来はしらんが、過去も現在もVCLの方が実用的。.NET は将来のための保険。 やっておいて損はないが、C# を勧める。
ここまで突っ込みどころが多いと、 わざとアホなフリしてるのかと勘繰ってしまいます
自分がアホなんだろ、気づいてないらしいが。
>>782 そう思って↓のようにしてみたのですがループ制御変数 i に触ったせいでエラーがでてしまうんです
var
i,j : integer;
Ch : Array[0..19]of integer;
begin
Randomize;
for i := 0 to 5 do
begin
Ch[i] := Random(10);
if i <> 0 then
begin
for j := 0 to i-1 do
begin
if Ch[j] =Ch[i] then
begin
i := i-1;
Continue;
end;
end;
end;
end;
end;
>>783 150前後の数の中から15個の重複しない乱数が欲しいのですが、そのやりかたで可能ですか?
>>784 本当にVB以外何も知らないんだろうなぁ・・・
Delphiは嫌いみたいだからやらなくてもいいけど、
C++やC#でもやって知識付けた方がいいよ。
ちょっと無知すぎる。
>>788 var bool sameCheckOk
for i:=0 to 15-1
do begin
repeat
ch[i]=random(150)
sameCheckOk=true
for j=0 to i-1 do
if ch[j]=ch[i] then begin
sameCheckOk=false;
break
endl
until sameCheckOk;
end;
文法は忘れたが、こんな感じでどう?
>>790 うまくいきました、ありがとうございました〜
Randomize何度も呼ぶなと一体何度言わせれば・・・
一度も呼んでないだろ・・・変なヤツ
何度呼ぼうと別に問題はない。
795 :
788 :2006/04/07(金) 22:54:13
>>782 var intSet : set of 1..150
intSet:=[];
while intSet.count<15
do
inclued(intset,Rondom(150));
count が使えたか、Randomがそのまんま列挙に入るかも忘れたけど、
こんな感じなら実質3行。
796 :
デフォルトの名無しさん :2006/04/07(金) 23:17:24
[エラー] Unit1.pas(29): レコード、オブジェクトまたはクラスのいずれかが必要です
邪道かな・・・ procedure TForm1.Button1Click(Sender: TObject); var v: TList; i, kazu: integer; begin v := TList.Create; repeat kazu := Random(150); if v.IndexOf(pointer(kazu)) = -1 then v.Add(pointer(kazu)); until v.Count = 15; Memo1.Clear; for i := 0 to 14 do Memo1.Lines.Add(IntToStr(integer(v[i]))); v.Free; end;
// Swap は自分で作って var A: array[0..150] of Integer; I: Integer; begin for I := 0 to 150 do A[I] := I; for I := 0 to 150 do Swap(A[I], A[Random(151)]); for I := 0 to 14 do ShowMessage(A[I]);
それ、遅すぎ、無駄すぎ
第一、均一じゃないし、とどこかの議論を蒸し返す
VB使いの方がまだまともなコード書くよ
はいはいクマクマ
TShellListViewでファイル名を取得することすら できないんです.. どこかに解説ないですか???
解決しました....
こっちだな。
>>798 は均一じゃないの?
var
A: array[0..150] of Integer;
I: Integer;
begin
for I := 0 to 150 do
A[I] := I;
for I := 0 to 14 do
Swap(A[I], A[Random(151 - I) + I]);
発信県みるとアンチは一人でした
はいはいクマクマクマクマ
swap は、このような場合は非効率すぎ。100万人応募の抽選で、当選10人を 決めるのに100万回swapするのは馬鹿すぎ。
100万では無く150です。 10では無く15です。
日本のDelphiユーザーの数ですか?
>>810 こういうヤツは、量と質の区別がつかないんだろうなぁ・・・
だからVB使いにまで馬鹿にされる
814 :
デフォルトの名無しさん :2006/04/08(土) 16:02:35
実際VB使いの方がレベル高いし
今日の質問者の回答レベルはVB.NET使いの方が高いね。 回答者もスキルアップに勤めてください。
で、配列を確保したり代入したり、効率いいのか?
>>815 VB質問スレの回答者>このスレの解答者>(省略)>このスレの粘着VB使いで別にいいよ
>>815 固定長配列だし数k程度までなら問題ないだろ。
>>803 TShellFolderのPathName
820 :
デフォルトの名無しさん :2006/04/08(土) 17:04:39
579 :デフォルトの名無しさん :2006/04/08(土) 10:35:17 VCLはGUIを楽にさせてくれるためだけに集中してくれたからこそ使いやすかった。 変なライブラリを追加しなくても単独で動いてくれるからね それ以外のコンポーネントが必要とか欲しくなったら作ればいいのだし 簡単に作らせてくれたのがDelphiだったのだろう。 580 :デフォルトの名無しさん :2006/04/08(土) 12:36:10 そうだね。GUI ビルダとして最も便利なものだった。で、それが Delphi の限界 でもあった。サードパーティーや外部のコンポなしではユニコードも正規表現も インターネットも出来ないからね。いまだに TList、TStringList 大活躍の 有様だもんね。 ほんと、VS が進化して RAD は Delphi を追い越したし、ライブラリははるかに 先を行ってしまったのに、Delphi だけは11年ほとんど進化なし。統合メリット はプラスよりバグ増加動作激重のマイナスの方が多いことを考えると、退歩と 言えるかも知れない。それがユーザ激減につながっている。ま、妥当な結果だろうね。
知らないうちにVSのVCってRADになったんだ。 それともC#ネイティブが作れるようになったの? ちと、Express試してみるか。
ちなみに>781のコードをVB.netで書いたらどうなるんですか? 無論.netに標準装備である素晴らしい機能でDelphiよりもスマートに書ける筈だよな?
image.picture.loadfromfile で画像を読み込んだあと、画像を読み込んでない元の状態に戻すにはどうすればいいのでしょうか?
>>821 .NETアプリの開発はRADになったが、Win32/MFCは今まで通り。
VCとC#は別物。
828 :
デフォルトの名無しさん :2006/04/08(土) 23:10:44
今も昔も最強RADはVB
labelの文字の周りを透過させることは可能ですか? 他のものを使わないと駄目でしょうか?
Label1.Transparent := True;
833 :
デフォルトの名無しさん :2006/04/09(日) 00:40:53
集合型について質問です。 ある集合型の変数が複数の値を持っているかを一発で調べる方法ってありますか? 例えば TTest = set of (tt0, tt1, tt2, tt3); i: TTest; の時 iがtt0, tt1, tt3全てを持っているか調べるのに、 if (tt0 in i) and (tt1 in i) and (tt3 in i) then ... とする以外の方法はあるのでしょうか?
>>833 集合は+で和集合、-で差集合、*で積集合が得られる。
if [tt0, tt1, tt3] * i <> [] then
835 :
834 :2006/04/09(日) 00:43:45
ちょっとだけ間違い。834だとどれかひとつでもあったら通っちまう。 if [tt0, tt1, tt3] * i = [tt0, tt1, tt3] then
for I := 0 to 150 do Swap(A[I], A[Random(151)]); シャッフルが進むと、入れ替わらない要素が出てくるから均一でないって事?
早速試してみます。
くだらない質問ですがくだらない質問のためのスレのようなので 質問させていただきます。 私は今までMacでMac用のアプリを製作していたのですが、 自分のソフトのWin用をつくりたくなり、使用言語を検討しています。 MacではObjective-C言語で開発していましたが、 こんな奴にDelphiはよさそうですか?
>>838 gccとか使えばWindowsでもObjective-Cは使えると思うが…。
まあ、どんなアプリを作りたいかにもよる。
Objective-Cからの移行ならC++Builderのほうが自然な気もするけど。
移行しやすいのはC++かC#じゃないか? MS嫌いじゃなきゃVC++、VC# 人と違うのがいい場合はC++Builder、C#Builder VJ#というのもありか 類似点が少ない言語がいいのならVB、Delphiだろう
842 :
821 :2006/04/09(日) 01:04:59
>>827 VC++とVC#が別物なのはもちろんわかってる。.NETにはあまり興味ないので使い道が
あるとすれば、VC++がRAD化するかVC#がWin32/64に対応するかのどちらかってこと。
お前らVBも薦めてやれよwww
C#があるんだからVBには価値が無い
分かってないなあ。VB9.0はC#3.0よりも先進的なのに。
一人でVB9.0使っとけば?
847 :
827 :2006/04/09(日) 02:49:53
>>842 おお、そういう意味か。
最近どこかで読んだが、VC#がWin32/64ネイティブに対応する予定は今の所ないらしい。
要望は上がっているから検討ぐらいはするみたいだけど。
元々.NET用に設計された言語だし、今からわざわざWin32/64ネイティブ対応はしないだろうね。
いずれにせよDelphiの出番はどこにもないということだね。
Delphiはいわゆる日曜大工
850 :
デフォルトの名無しさん :2006/04/09(日) 12:37:53
日曜大工ならVBの方が・・・
日曜大工出来たのは昔のVB
おまえらにちようの字が違いませんか?
853 :
838 :2006/04/09(日) 14:06:39
皆さんありがとうございました。 レスを参考に検討します。感謝です。
日曜大工って休日だけ作業する事だろ
プログラム内の全ての変数やプロパティなどをまとめて起動したときの状態に戻す方法はありますか?
ParamStr(0)をCreateProcess/ShellExecuteして自分は死ぬことで 見た目上戻すことは出来るけど(よーするに再起動)、 フォームをストリームから復元する方法がたぶんある気がする。
857 :
デフォルトの名無しさん :2006/04/09(日) 18:28:20
Delphiはもう次のバージョンが出ないとのことですが本当ですか?
分かりません
859 :
デフォルトの名無しさん :2006/04/09(日) 20:12:30
全ての変数はメモリ上+現在のレジスタにあるのだから プログラムで確保していたメモリ領域(ヒープ、スタック)+レジスタを全て保存し それを元に戻せばいい。 レジスタについてはアセンブラで全部をスタックに詰んでおいてから スタック毎復元すればいい
860 :
デフォルトの名無しさん :2006/04/09(日) 21:02:09
そういう危険なことができる言語って怖いね。セキュリティホールの元。
861 :
デフォルトの名無しさん :2006/04/09(日) 21:33:21
出来ない言語って例えばどんな言語があるの?
糞言語
Javaスゲー 変数がメモリに展開されないんだ! じゃあどこに実体があるんだろう?
お子様の手の届かないところ
脳内
867 :
デフォルトの名無しさん :2006/04/09(日) 23:34:36
Javaはメモリなんて時代遅れなもの使わないからwww
868 :
デフォルトの名無しさん :2006/04/10(月) 03:23:36
アクセスDBを使ったプログラムを組んでいます。 DBGridに表示しているのですが一部表示がうまくいきません。 具体的に言うとアクセスのデータ型が「メモ型」だと DBGridでは「(WIDEMEMO)」としか表示されません。 これを表示するためにはどうしたらよいでしょう? よろしくお願いします。
870 :
デフォルトの名無しさん :2006/04/10(月) 16:10:14
日曜大工で豪邸建てるやつもおるで
>>868 TDataGridをヤメテ、TStringGridかTDrawGridの派生で自分で描画する。
Memoに文字列を貼り付けていく処理をすると勝手にスクロールが1番下まで行くのいですが これを無効にすることはできないでしょうか?
SelStartを保存しておいて 追加後に値を元に戻す
>>872 貼り付けるって、ひょっとしてMemo.lines.Add()を使ってる?
Memo.Lines.Text := Memo.Lines.Text + s;
という形で処理できるならこれを使ってみ。
う・・うまくいかない けどなんとかやってみます
>>874 ああ・・それつかってますけど
Textならいけるんですか?
やってみます
serversocketのsendtextなんですが二つ並べて serversocket1.socket.connections[0].sendtext('hoge'); serversocket1.socket.connections[0].sendtext('hoge'); のように使ったときにどうも一つずつ「hoge」が送られるのでなく 一度に「hogehoge」が送られてしまうようなのですがこれを回避する方法はあるのでしょうか?
TCP/IPはそういうものだ。 #0はさむとかして自分でばらせ。
>>879 そうですか・・
#0ってのはなんですか?
ヌル文字
882 :
868 :2006/04/11(火) 05:36:38
>871 どうもレスアリがdです。 どちらもやったことが無いですorz どっちが簡単なのかも分からないですが、 なんとなくTDrawGridの派生の方をしらべてみます。
883 :
デフォルトの名無しさん :2006/04/11(火) 12:18:46
初心者です。 TMemoでCtrl+Aで全選択したいのですがどうしたらよいですか?
>>883 標準アクションにあるから、popupメニューでも メインメニューでも
>>883 MemoのイベントOnKeyDown に処理を記述
if (Shift=[ssCtrl]) and (Key = Word('A')) then
begin
Memo.SelectAll;
Key := 0; // 他のキー入力処理を無効にするため
end;
他のKeyの値についてはWindows.pasを検索すること
886 :
デフォルトの名無しさん :2006/04/11(火) 13:19:05
なんかの方法でHideCaret( RichEdit1.Handle) を送りまくれば、非表示になるよ
HideCaret(RichEdit1.Handle);
>>888 >>889 さんへ。
やってみますた。確かにHideCaret(RichEdit1.Handle); でキャレットは隠れるみたいですが、再びFocusを得たらキャレットも復活してしまう。
orz
例えばプロパティでColorを変えたときのように、永続してキャレット無しにしたいのれす。
892 :
890 :2006/04/11(火) 17:26:41
根本的な解決方法はないようでつね orz
>890 よくわからんけどフォーカス得た瞬間にHideCaretじゃだめなの? もしくはOnEnterでタイマー起動させてHideCaretするとか。
>>893 まあそうなんだけど、
あんまり考えずに、とりあえずHideCaret送りまくれば
隠そうとしないで、透明キャレットを表示する!
TADOConnectionにある、GetTableNamesやGetFieldNamesで、テーブル・フィールドの 一覧を得る事はできたのですが、フィールドの型や、テーブルのレコード数を知る方法は 無いでしょうか。 mdbファイルやSQLServer上のテーブル構造を調べるプログラムを作りたいのですが、 TADOTableなどで開くとレコード数の取得を始めてしまい、遅くて仕方ありません。 何かもっと速く処理できる方法はないものでしょうか。
897 :
890 :2006/04/12(水) 05:54:09
>>895 透明キャレット!?背景と同じ色のキャレットにすれば隠れると思うんですけど・・
キャレットの色としていする方法ってあるんですか?
配列の要素数を調べる場合HighとLengthどちらを使う方が効率がいいのでしょうか?
上限と長さは意味が違うと思うけど、 静的配列ならHighは即値に置き換わるよ。 CPUViewを見てみよう。
要素数を調べるのであればHigh(A)-Low(A)+1しなかればならなのでLength(A)のが短くて便利ジャマイカ
レスありがとございました。
>>899 アセンブラは良くわからないですが解らないなりに読んでみました。
LengthもHighも静的配列の場合は最後のmovが変わるだけなんですね。
動的配列の場合は内部で@DynArrayLength @DynArrayHighを呼んで、
それでDynArrayHighはDynArrayLengthを呼んでデクリメントをしてるんですね
結局用途に合わせて好きな方を使えってことですね。
>>900 質問の仕方が悪くてすみません。
forで0からの配列を回したいだけなのでどちらがいいのかなと思いまして。
vmaidをdelphiに移植していいのですか?
>>902 for 文で配列を処理するなら 2006で拡張された構文を使わないなら
普通に for ... Low(....) to High(....) do でしょ
いつもの904の人は空気嫁ないのか読みたくないのか・・・
>>903 GPLだから移植は自由。
ただし公開するならGPLで公開しないといけない。
といってもexeをGUIでラップするだけならライセンスは自由だけどな。
C又はC++のDLLでvarargとか...が入ってる関数を呼ぶのって無理?
>>908 Delphiのバージョンによっては無理じゃなかったと思うよ
int wsprintf(LPTSTR lpOut, LPCTSTR lpFmt, ...); function wsprintfA(Output: PAnsiChar; Format: PAnsiChar): Integer; cdecl; varargs;
911 :
デフォルトの名無しさん :2006/04/12(水) 20:49:38
66 :デフォルトの名無しさん :2006/04/12(水) 20:13:28
どんなにひどい仕打ちを受けても、それを試練と思ってついて行くのが儲です。
67 :デフォルトの名無しさん :2006/04/12(水) 20:28:11
某信者は真性M
68 :デフォルトの名無しさん :2006/04/12(水) 20:35:20
>>67 真性Mの人と一緒にすると、真性Mの人が怒るよ。
某信者はただの馬鹿でしょ。
912 :
デフォルトの名無しさん :2006/04/12(水) 22:17:38
Delphi初心者に真相を知らせることはあまり良くありませんね。 初心者はあくまで騙し続けてDelphiを使わせておくべきでしょう。 他の言語に移行されたら競争相手が増えてしまうしね。
このスレの回答者も分かってて隠し通してるんだけど、 Delphiは言語仕様も速度も開発生産性もVBに惨敗してるんだよ。 しかもVBは関数型言語の要素を取り入れてさらに進化しようとしてる。 Delphiみたいな大昔のGUIアプリしか書けないようなツールを使ってたら 開発者の創造性も制限されてしまうよ。
なんでよりによってVBなんかと比較するんだ?
某信者が受け入れたくない現実がそこにあるから
.NET時代から見れば、Delphiは親の親だからなあ。 Delphi→VJ++→VB.NET/VC#で。 爺さんが若者と対等に戦えるわけないよな。
ブビイラネ
C丼はカ○ワな子供だな。 氏産のJ++/J#よりましか。
919 :
デフォルトの名無しさん :2006/04/12(水) 22:35:33
Windows Vistaが出る頃もDel6使いはVisualStyleにすら対応できないダサUIしか作れないのかあ。 一方VB使いはWPFでGPUフル活用の3D UIが楽しめるんだなあ、これが。 どっちが楽しいかは言うまでもないよね。
最近V$の陰が消えた希ガス
今時ブビ註だって(プ 時代錯誤も酷杉。
相変わらずDel厨のスレ嵐が酷いな
Delphi 6 Personal用のTNTコンポーネントもあるというのをネットで見たのですが、 検索しても見つかりません。どこにあるんでしょうか?
>>923 Tnt Delphi Personal でググレ
改造する技術はありません=プログラマに向いてません
928 :
デフォルトの名無しさん :2006/04/13(木) 07:52:00
改造しないとまともに使えないのが糞。 VBならいろんなコンポーネントが揃ってて便利なのに。
VB6にウニコード対応してるコンポーネントってあったっけ? あ! WebBrowserがあったな
VBといえばVB6だと思うのがすでに時代遅れを自称してるようなものだな。 VBといえばVB2005。Delphiには存在しないgenericsもサポート。
>>931 だったら、そう書けばいいじゃん。
VB6とVB2006は違うものだけど、 Delphiは2006でも6のコードがそのまま使える。
だから別けて書く必要はないけど、VBは、何の話をしてるか、ちゃんと書かないと判らないんだよ。
で、そのVB2005で、CreateWindowExA で窓を開くコンポーネントはあるんだね?
933 :
デフォルトの名無しさん :2006/04/13(木) 09:01:22
まぁそうだが
でも 値を何か返しておいて、呼出側で使わなければいいじゃん。
シャラップ
>>934 ,935
有難うがぜいます。一度実験してみて失敗したらまた教えてください
オプソのVBプロジェクトでがgenericsを有効利用している物など見たことがない。 (C#ならはそれなりに有るが) 使えもしない機能に何を求めてるんですか?
939 :
デフォルトの名無しさん :2006/04/13(木) 20:47:09
delphiにはガベコレはないんですか?
なかとよ
バッファオーバーフロー起きまくり
>>939 インターフェース型なら参照カウンタ型のメモリ自動解放がされるよ
>>941 残念だけど、Delphiは 文字列型を持っていて、こいつは可変長だからローカル変数でもヒープに作成される。
また動的配列も持っているので
バッファオーバフローはおきないよ。
そうじゃなくて、Del6の最初のバージョンにはVCLにバグが有ってメモリリークを起こしてたんですよ。
メモリーリークと バッファオーバーフローは意味が違うだろ
945 :
デフォルトの名無しさん :2006/04/13(木) 22:43:09
いずれにしてもVBの方が安全安心ということですね
もうVBはDelphiに負ける要素がないね。時代だなあ
.NETのようなガベージコレクション型の言語は、 メモリがある限りメモリを取ろうとするわけで 長時間運転アプリではメモリリークと同じくらい始末に悪いぞ。 他のアプリのメモリを奪ってHDDへの退避しまくり
消えろよカス
950 :
デフォルトの名無しさん :2006/04/13(木) 23:16:51
VBはそんな行儀が悪いとは思わないけどね。 それに64bit版Windowsで動かせばスケーラビリティも相当行ける。 言うことなし。
Delphiってサーバーサイドで使えるの? VBは使えるようだけど。
>>951 VBが使えるWindowsサーバなら使えるよ。
とってもお手楽なIntraWebなんてのもあるよ
> とってもお手楽なIntraWebなんてのもあるよ 「あるよ」というよりは「あった」という方が正確だな。
bds2006にもIntraWebはあるよ サーバを建てるなんてメンドクサイ事考えなくても どっかの古いパソコンで作った実行ファイル走らせるだけで サーバの出来上がり。 公開しないIntraなら、ホントにとってもお手軽だよ
まぁ、その程度だけどな
>>949 その通り。Javaも.NETも、サーバーサイドや業務用で一台丸ごとそのアプリに占有させるならわかるが、普通のデスクトップアプリとしては有り得ん…。
>>951 WebSnapという機能があって、ISAPIやApache ModuleをRADで作成可能。
DLLとして作られるので当然ネイティブコード動作。
普通に標準入出力を扱えるので古典的CGIも作れる。
958 :
デフォルトの名無しさん :2006/04/14(金) 00:23:46
>>956 サーバサイドでも.NETを選択する理由はほとんどないよね。。。
960 :
デフォルトの名無しさん :2006/04/14(金) 07:29:31
サーバサイドでもDelphiを選択する理由はほとんどないよね クライアントサイドでもDelphiを選択する理由はほとんどないよね IDE事業売却しちゃったから
全ての用途に使用する理由が皆無なVBよりはマシって事か。
スレ違い
Delphiはじめました。よろしくv(^^)v
>>963 Delphi、2.0から使ってるけど、もう落目だよ
orz
965 :
デフォルトの名無しさん :2006/04/14(金) 19:59:22
「自アプリからExplorerにリストアイテムをD&Dしたときに、
ドロップ先のExplorerのフォルダパスを取得する」
方法をご存知でしたら教えて下さいませんでしょうか。
Delphi-MLやネットで調べた時にその答えとして出てくる
http://www.melander.dk/delphi/dragdrop/ が随分前から消えてしまっていまして、
探し回ってDropSource.pasだけはなんとか入手したのですが、
DropSource特有の使用方法がわからず、色々動かしてみたのですが
パスの取得ができずに困っています。
できましたらよろしくお願い致します。
967 :
デフォルトの名無しさん :2006/04/15(土) 08:49:11
Delphi7でJpegファイルのサムネイルをListViewに表示しようとしています。 ListViewは仮想リストビューとして、別スレッドでサムネイルを読み込んで ImageListに追加しているのですが、ImageListにAddするたびにListViewが Refreshされてしまい、チラツキがずっと続いてしまいます。何とかなりませんか?
ListView.DoubleBuffered := True;
バックグラウンドでキーボードの入力を監視して Aキーが押されたときそれをBキーに置換するといったモノを作りたいのですが 可能ですか? また、どのように手をつければいいのでしょうか?
>>970 窓使いの憂鬱がそれできたを思う。
参考にならんかね
変数のみからインスタンスを作成したいのですが、どうすれば良いのでしょう?
type
THoge = class
end;
var
H: THoge;
begin
H :=nil;
H.ClassType.Create;
の様な事をやりたいのです。
>>970 SetWindowsHookEx
H.Createでいけるだろ。 質問とは直接関係ないけどclass ofのクラス参照型は知ってるよな。
コンストラクタはインスタンス変数に対して使った時はメモリを割り当てないので、別途メモリを確保してからね
var H: THoge; begin H :=nil; GetMem(Pointer(H), SizeOf(H)); H.Create; --------------------------- デバッガ例外が発生 --------------------------- プロジェクト Project1 が EAccessViolation クラスの例外を生成しました。 'モジュール 'Project1.exe' のアドレス 00003204 でアドレス 00003204 に対する読み込み違反がおきました。' プロセスは停止しています。再開するにはステップ実行または実行を選択してください。 --------------------------- OK ヘルプ(H) ---------------------------
>SizeOf(H) 4バイトしか確保できて無いじゃん。
で、どうやってクラス参照しないでサイズを取得するの?
Q DelphiでUNICODEを取り扱えますか?
A WideStringがUNICODEです。AnsiStringとは相互に代入すれば変換されます。
またUTF8との変換等も最近のバージョンであれば用意されています
Q UNICODE文字を画面に表示するには?
A VCLはAnsiで窓が開かれていますのでAnsiに変換して表示するのが簡単です
Q 日本語以外のUNICODE文字を画面に表示するには?
A その文字を表示出来るフォントを指定した上で、TextOutW/DrawTextW で表示出来ます
Windows2000/XPではFONTLINKが設定されているので
ANSI_CHARSET/MS UI Gothicで表示出来ます。
それより古いOSの場合フォントをどこかから入手する必要があります
Q UNICODE文字を入力するテキストBOXが欲しい
A
http://www.tntware.com/delphicontrols/unicode/ を使うのが一つ
TWebBrowserを貼り付けて使うのも簡単でしょう
Q 普通のフォームのタイトルバーだけをUNICODE化したいのだが
A 現在方法を調査中。 ちょっとまってね
>>976 class function TObject.NewInstance: TObject;
というのがメモリだけを確保してくれる
だから
H:= THoge.NewInstance ;でメモリ確保
H.Create; でコンストラクタを呼ぶ
という手順にすればいい。
TApplication.CreateForm がこの方法を使っている
>>978 class function TObject.InstanceSize: Longint;
でサイズは取得出来る。 ただしメモリだけを確保しても
VMTテーブル等が設定されていないと
Createをメソッドとして呼び出せないので注意
あvirtualでなければ呼べるけど
982 :
926 :2006/04/16(日) 13:10:27
>>966 遅レスですがありがとうございます! 挑戦してみます。
クラス参照無しでどうやってインスタンスを作るか、を質問してるのに クラス参照つかってサイズ取得してたら意味ないだろ・・・
てか普通にコンストラクタ呼べばいいしな
誰の子でもいいので私を妊娠させて下さいって事か?
クラスメソッドはインスタンス変数からでも呼べるので、H := H.NewInstance; とかでもいいわけだが。 まあ、普通はやらない。 やるとしたら、CreateFormのような事情があるとか、インスタンスを大量生成する場合メモリを細切れで確保するより固定長配列で取って〜とか。
で、一般になんのクラスの変数かわからないものを渡されたとして、 どうやって、そのインスタンスを作りますか?
メモリ確保を配列的に取りたいなら InstanceSizeメモリ確保 ↓ InitInstance(メモリ) ↓ コンストラクタ
>>972 のHはTHogeってわかるじゃん。
元々クラス参照型みたいな一般的に使える多態は考えて無くて、なんかトリッキーなことしたいだけと思ってたが、違うの?
>>987 一般的には、
なんのクラスの変数かわからないものを渡されてインスタンスをそこから作りたいという事はありません
一般的には
たとえば、GUI上で「複製」という操作をさせたいなら複製というメソッドを作成するのが普通です。
deep copyするならAssign overrideするかRead/WriteComponent使っとけ。
これはひどい
残りカス、ひどすぎ
ここもうダメだなぁ・・・
このスレッドはBorland(ボーランド)のDelphi(デルファイ)について、 他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。 Delphi使いが優しくコメントを返しますが、 お礼はDelphiの布教と初心者の救済をお願いします。
残り少ないし、回答者が低レベルすぎるし、このスレ終わり。
>>987 DelphiのクラスはTObjectが幹となっているので、何かのインスタンスが入っているなら
インスタンスのVMTの先頭がClassTypeとなっており
ClassType メソッドで取り出す事が出来るため、何のクラスの変数か判らないという事には絶対になりません
> var > H: THoge; > begin > H :=nil;
procedure TForm1.Button1Click(Sender: TObject); var nc:TControl; begin nc:=(TComponentClass(Sender.ClassType).Create(Self)) as TControl; with nc do begin nc.Parent:=Self; Left :=Left +100; Top :=Top+100; Show; end; end;
Sender が TStringList かもしれないし・・・コンストラクタの形はどうやって 決められますか?
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。