1 :
デフォルトの名無しさん :
04/05/23 00:16
初めて1000取ったけど999かよ>漏れ
>>3 と言うことにしたいんですね:-P
お前は3だ。
>>1 乙。
前スレの999だが、
>>3 は「前スレ1000取ったのに”999”と書いてしまった」
って言いたいんじゃないの?
フォームに正六角形を絵画しようと思うのですがやり方がわかりません どうやればできるでしょうか?
PolygonかPolyline あと、普通は絵画じゃなくて描画というよ。
Delphiで作られた有名ソフト教えてください。 2ch関係以外。
Delphi
>>10 iria
RPGツクール2000
つーか、よそでやってくれ
よそってどこだよ。あほか氏ね。
>>14 このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
よそってどこだよ。あほか氏ね。
>つーか、よそでやってくれ アホか氏ね
なんと云うことでしょう。私は見ず知らずのあなたたちに、 そこまで云われる人権はないと思います。共和国人民の人権は どうでも良いというのでしょうか? ニュースステーションの筑紫さんが、インターネットのことを、 便所のトイレって言っているのを知ってます?イルボンサラムは どうせニュースも見ないから知らないと存じますが。 とうとう、本気で呆れています。おばあちゃんが、どれどれ?と 画面を覗きにきました。それから、おとうさんも来ました。 その6分後、妹も来ました。あなたたちは、共和国人民に笑われています。 とてもいい具合です。家族みんなが、この人たちおかしいね おかしいねって、互いに罵り合っています。おかあさんは、 もう3年家に帰ってきてませんが、必ずおかあさんもおかしいね、 って云うと思いますよ。どうです?将軍様に謝るなら、今のうちですよ。 私はこれでも気が遠いほうなんです。また3日後、ここに来ます。
アホか氏ね。 >質問者自身何が何だが分からない質問 をしたまでだ。
そういう比較なら、VBはどうしようもないな。 みんなと一緒がいいのなら、VC++でも使いなさい。
Delphiスレを荒らしてるのは、VB厨
と、おまえ。
漫才を披露するなら、よそでやってくれんか?
何が何だかわからん質問て「プログラミング技術に関して」ってのが前提ちゃうんか?
プログラミング技術はおろか、日本語さえ理解できてないらしいから このスレが一体「何が何だか分からない」のも当然だと思われ。
なるほど
他にはどんな有名なソフトありますか?
それとiriaがDelphiで作られてるとの事なんですけど アーバインは作られてないんですか? Delphiは最初のステップで 後継ソフト作るの違う言語で作る人多いですか?
29 :
デフォルトの名無しさん :04/05/23 16:44
>Delphiは最初のステップで >後継ソフト作るの違う言語で作る人多いですか? 作者の勝手です。そんな工程に意味はない。
sage忘れた。スマソ。
プログラムしたいんですけど Delphiがいいかなぁって思うんですけど。 それで始めにDelphi使ってんのかなあと。 それとDelphiはネットで覚えれますか? 本買ったほうがいいですよね。 どれがいいですか? これなら安心というお勧めの本教えてください。
>>28 あまり周りのこと気にしなくていいと思うよ。
自分がDelphiより魅力が感じられた言語があれば移ってもいいし、
そんなの人によって変わると思うし。
sndPlaySoundの音量の調整をどうやったらいいんでしょうか?
>>34 DirectShowかDirectSound使っとけ
MCIでもできたかも知らん
36 :
デフォルトの名無しさん :04/05/23 17:45
Delphi7のヘルプの内容ってDelphi6からの使い回しですか?
ええ?RPGツクール2000ってDelphi製だったの? 初めて体験版使って改造しようとした時 Delphiのコピーみたいな造りだなと思ったが、まさか本当に「コピー」だったとは…
>>32 ありがとうございます。
Delphiすることにします。
>>33 よさそうなサイト紹介ありがとうございます。
Delphiします。
>>38 > Delphiします。
Σ(゚Д゚;≡;゚д゚)
>Delphiします。 (・∀・)イイヨイイヨー
n×mの配列をつくりたいのですが どうすればいいでしょうか?
43 :
デフォルトの名無しさん :04/05/23 19:27
バージョン6とバージョン7の違いはどういうところにあるんでしょう? 無料版のVer6をはじめてみようと思うんですが、参考本なんかはバージョン6用を探すべきでしょうか? なんか最近はバージョン8も出回ってるようですが・・・
>>43 言語は一緒なので参考書でのバージョンなんかはあまり関係ないかと
書くことはほぼ一緒だし。
とりあえず最初はD6 Personalから始めたほうがいいね。
そういや、Delphiって売ってる? ソフトショップの言語エリアとか見ても全然置いてないんだけど
>>45 自分の行っている店も最近見なくなった。
欲しいなら注文かな。
>>42 hoge: array[0..n] of array[0..m] of Integer;
49 :
デフォルトの名無しさん :04/05/23 21:33
そういや、ひまわりもDelphi製じゃなかったか?
Tonyuもdelphiだった気がする
52 :
デフォルトの名無しさん :04/05/23 23:06
>>44 なるほど
でもバージョン8から急に変わったんでしょ?
無料版からはじめてみたいと思います。
機能ダウンロードしたのはお試し版の7だったから30日間しか使えないんです。
ところでそのデルフィ7なんですけど、起動したらウィンドウがバラバラの状態で表示されました。
ドッキングさせたいんですけど、どうしたらいいですか?
> ドッキングさせたいんですけど、どうしたらいいですか? そんなこと気にしないでどんどんコードを書くように
MDIのエディタを作っています。 ひな形でMDIがあったので楽に作れたのですがエディタの設定(フォントの変更処理など)で行き詰まりました。 アクティブな子ウィンドウの設定は(SDIと同じなので)出来るのですが、その設定を他のウィンドウに張り付いているエディタに反映させる方法が分かりません。 既に生成された子ウィンドウは順に反映&これから生成される子ウィンドウはFormCreate時に設定するしかないんでしょうか。 子ウィンドウの大元の設定を変えるような方法があれば教えて下さい。お願いします。
今小さなプログラムを組んでいるんですが、ふと気になって実行時に タスクマネージャを見てみたら、メモリの使用量が9MB近くもありました。 もしやと思って、空のプロジェクトを実行させてみたらこれも 8MB近くメモリを食っていました。 これじゃあんまりだと思うのですが、どうにかならないんでしょうか? それともあまり気にする事もないんでしょうか?
>>55 > 既に生成された子ウィンドウは順に反映&これから生成される子ウィンドウはFormCreate時に設定するしかない
> それともあまり気にする事もないんでしょうか? 気にする必要はない。プログラムは、exe だけで動作するのではない。いっぱい ウィンドウズの DLL をロードして使っているのが普通。 ちなみに .NET アプリの場合は、普通の小さなプログラムでも1つにつき40MBだよ
>>55 MDIChildCountにMDIウインドウの数が入ってる
MDIChildren[i]で各ウインドウにアクセス
うあ、やっぱ地道に一個ずつ設定するしかないんですね。 どうもありがとうございます。
forループはしないの?
>>61 いや、しますが。
大元変えるような方法は無いんですね、みたいな意味です。
63 :
デフォルトの名無しさん :04/05/24 00:54
>>54 でもドッキングした状態が普通なのでは?
もしかしてできないんでしょうか?
> うあ、やっぱ地道に一個ずつ設定するしかないんですね。 はい、そうです。 ユーザにどの設定を変更できるようにするかを決めるのは、プログラムを作る方が 決めることです。ですから、設定変更された時点で、現在のウィンドウに反映させ これからつくるウィンドウにも反映させなければならないのは、言語に関係なく 論理として当然です。 実際にそれを実装するときには、もちろん言語やライブラリに依存しますが。
> でもドッキングした状態が普通なのでは? 自分はDelphiユーザを9年近くやってますが、ドッキングしてつかったことは ありません。できるのかどうかも知りませんし。
ループで回すのが、そんなに面倒ですか?
ループの中で、実際の子ウィンドウの中のたとえば Memo1 にアクセスするときは TForm2(MDIChildren[i]).Memo1.Font.Size := -12; などのように、実際の型にキャストする必要があります。
>>66 >>55 は一度子ウインドウの設定をしたら
その後新しく作られる子ウインドウは、プログラムの記述なしで勝手にその設定に合わせてほしいという要望
> 一度子ウインドウの設定をしたら コードも一度書くだけなんですが。
つーか、本人はもう納得してるってのになにをごちゃごちゃひっぱってるんだ
> なにをごちゃごちゃひっぱってるんだ 質問ですか?
72 :
デフォルトの名無しさん :04/05/24 01:49
現在画像ヴューアーを作成しています。 ボタン1を押すごとpaintobox1を右クリックするごとに 同一フォルダ内の画像をpaintoboxに 名前順に表示させようとしているのですが TForm1.Button1Click(Sender: TObject); TForm1.PaintBox1Click(Sender: TObject); この二つの手続きに関してまったく同じ動作をさせようとしても後者のほうが明に動作が重くなってしまいます。 (paintbox1. のonclickをbutton1.clickにもしてみましたがこれはより遅く感じました) button1にカーソルを合わせてキーボードENTER押しっぱなしだと最も快適に動作しているように感じ、 paintbox1.Clickが最も重いように感じます。これはpaint1をダブルクリックした場合との判別のために若干反応を遅らせているのかなとも思うのですが もう少し快適に動作させたいのです。どのような解決策がありますでしょうか?
PaintBox1.OnPaintイベントが二回以上発生しているのかもしれないですね。
ソース出さないと解決しないと見た。
75 :
デフォルトの名無しさん :04/05/24 02:27
>>65 でもVBとか普通に1つのウインドウの中に全部まとめられてますけど
バラバラにすることもできるし
76 :
デフォルトの名無しさん :04/05/24 02:45
procedure TForm1.PaintBox1Click(Sender: TObject); Var Jpeg :TJpegImage; bmp:TBitmap; begin if StrToInt(Label1.Caption) < (FileListBox1.Items.Count -1) Then begin; if FileExists('*.jpg') then begin; bmp := TBitmap.Create; Jpeg :=TJpegImage.Create ; Jpeg.LoadFromFile(FileListBox1.Items[STrToInt(Label1.Caption) +1]) ; bmp.assign(Jpeg); PaintBox1.Canvas.StretchDraw(Rect(0, 0, bmp.Width,bmp.Height),bmp); Jpeg.Free; bmp.Free; Label1.Caption := IntToSTr(StrToInt(Label1.Caption) +1) end; end; end; procedure TForm1.PaintBox1Click(Sender: TObject); 同上 上記のまったく同じモノを割り当てているのですが下記のほうはシングルクリックなのかダブルクリックなのかを判断するために待っているから反応が遅いのかと考えております。 ちなみにpaintbox1 on dblclickには何も割り当てておりません。 「ダブルクリックされることは考えない」もしくは「ダブルクリックはシングルクリック二回分に相当」のような設定が必要なのでしょうか? またそのようにするにはどうしたらよいのかご教授ください。よろしくお願いします。
ちなみに現在paintbox1をダブルクリックするとシングルクリックと同じ動作をしております(2頁進むのではなく1ページのみ進む)
PaintBox1.OnClick イベントでどうやってダブルクリックを検出してるの? ダブルクリック前にシングルクリックが必ず発生しますよ? 単純に OnClick が二回発生するはず。
ちょっち間違い。 ダブルクリックでは、 最初のクリックでのボタンを離した時に、OnClickが、 その後のクリックでのボタンを押した時に、OnDblClick が発生します。
78 79 おかげさまで解決いたしました。 paintbox1 の onclick dblclick両方ともにbutton1clickを割り当てました。 最初のダブルクリック時の設定が何もなかったためシングルクリックの作業をした状態で止まっていたんですね。 ありがとうございました。
81 :
デフォルトの名無しさん :04/05/24 03:22
参考までにもうひとつ追加で質問させてください。 ダブルクック時にはシングルクリックの作業をせずに別の作業をさせたい場合だとどうすればいいのでしょう? シングルクシックでやった作業を「ひとつまでに戻」してからdblclick独自の作業をさせる必要があるのでしょうか?
>>81 ちょっと落ち着け。誤字だらけだぞ(^^;
ユーザーインターフェースを見直すのが最も賢いやり方。
なんだかワケワカな質問だったな。
面白いというかアホですね
むふふ
他人をけなすと自分がエラクなったように錯覚できるね
経験者は語る
THashedStringList[Format('%d,%d', [x,y])]で十分
55です。 子ウィンドウがある時用と無い時用でメニューを二つ作りました。 子ウィンドウのFormClose時に if MainForm.MDIChildCount = 1 then MainForm.Menu := MainForm.MainMenu2; として切り替えていたのですが、この方法だとウィンドウが閉じる前にメニューが切り替わる為、 最大化時にメニューの左に出るアイコンが消えずに残ってしまいます。 結果、最大化したウィンドウを閉じた後、新しいウィンドウを最大化するとアイコンが二つ出てしまうのです。 本来子ウィンドウが無くなればメニューのアイコンは自動的に消えるはずなので意識したことも無かったのですが、 これを自分で消す方法があれば教えて下さい。 また、メニューを切り替えるタイミングなどで他の解決策があればご教授願います。
94 :
デフォルトの名無しさん :04/05/24 16:13
デルファイ6オフィシャルコースウェア応用編のレッスン27ペイントツールの作成を
やってるんですが、
イメージコンポーネントの領域でクリック(マウスボタンダウンの瞬間)にエラーが出て、
そこから進めなくなってしまいました。
イメージコンポーネント上のマウスのイベントを実装したところです。
CDの途中まで出来てるファイルは使わずに最初から作ってます。
「ソースファイルが見つかりません。:classes.pas」というタイトルのアラートが出ます。
OKは、「ファイル classes.pas が見つかりません。と出て選べず、キャンセルしたら
「デバッガ例外が発生」というタイトルのアラートが出ます。内容は、
プロジェクト Project1.exe EListErrorクラスの例外を生成しました。
'リストのインデックスが範囲を超えています(0)'
プロセスは停止しています。再開するにはステップ実行または実行を選択してください。
です。ここでOKを選ぶとまた
「ソースファイルが見つかりません。:classes.pas」というタイトルのアラートが出ます。
ここでもういちどキャンセルし、デルファイ6の実行メニューから実行を選ぶと
リストのインデックスが範囲を超えています(0) というアラートが出てます。でOK押すと
戻るんですが、またイメージコンポーネントの領域でクリックしたら最初に戻ると。
デバッグは全く分かりません。初心者です。どうすりゃいいの?。・゚・(ノд`)・゚・。
↓プロジェクト入ってるフォルダ圧縮しました。環境は6パーソナルです。
http://up.isp.2ch.net/up/92a7a902029b.zip
95 :
デフォルトの名無しさん :04/05/24 16:19
>93 MainManu.AutoMergeを使うのが良いのでは? >94 Statusbarにpanelが無いからエラー。
>>94 StatusBarのSimpleText使え
すみません。質問です。 レジストリを書き換え壁紙を変更しようとしています。レジストリは書き換えた もののそれだけだと壁紙は書き換わらないので困っております。 その後、全画面再描画させれば良いとは思うのですが、どのようにすれば よいのでしょうか?お教え下さい。
>>96 >>97 でででででで出キタ━━━━(Д゚(○=(゚∀゚)=○)Д゚)━━━━━!!!
ありがとうございました!!!
>>96 うわ、普通に提供された機能にあったんですか。
僕すげえ阿呆ですな、ありがとうございました。
>>100 もうどうでもいいかもしれないが
StatusBarを右クリックだったかな?で追加すれば設計時にPanelを作れる(はず
SimpleTextじゃ再描画してくれんので再描画必要だと思ったら
設計時にSimpleTextじゃないほうを使いたまえ
TreeViewについて教えてください。 TreeViewに表示されているノードをクリックするとNodeTextを変更する事が 出来ます。その際、空白の場合は再入力させたくOnEditedイベントで下記の ような処理をしています。ですが入可能状態になりません。どうしてでしょうか? コメントを外しても動きは変わりありませんでした。 よろしくお願いします。 procedure TForm1.TreeView1Edited(Sender: TObject; Node: TTreeNode; var S: String); begin if Trim(s) = '' then begin //node.Selected := True; //node.Focused := True; node.EditText; end; end;
OnEditedはTVN_ENDLABELEDITが送られてきたときに呼ばれるわけだけど、 これを処理し終わるまでは、再び編集可能状態にすることは出来ないという事かね。わからんけど。 uses CommCtrl; procedure TForm1.TreeView1Edited(sender: TObject; node: TTreeNode; var s: String); begin if Trim(s) = '' then begin s := node.Text; PostMessage(node.Handle, TVM_EDITLABEL, 0, Integer(node.ItemId)); end; end;
>>104 実際に試した結果、思い通りの動作になりました。
API使わないとダメだったんですね。
レスありがとうございました。
あの〜DelphiでJavaDocみたいにコメント書いてそっから資料だすような ツールでお勧めってなんですか?
colorDialog1をExecuteしたあと、ColorDialog1.Colorが変更されたときに イベントを起こすのってどうすれば良いんでしょうか? OnChangeイベントがあれば良いんだけど見あたらない……
ウィンドウズのコモンダイアログだからなぁー、難しそう。 ところでなんでそんなイベントが必要なの?
> colorDialog1をExecuteしたあと、ColorDialog1.Colorが変更されたときに タイマーで監視したら、OK ボタンが押されるまで ColorDialog1.Color は更新され ないことが分かった
スミマセン……質問の仕方が変になってました ColorDialogをExecuteして、色設定してOKを押したあと、 OK押された時に色設定をPanelの色に反映させたいのですがどうやるのでしょうか? 最初ColorDialogのOnCloseイベントを漁ってみたのですが、 設定した色とズレが起こる(正確にはColorDialogを開く前に設定していた色が反映される)ためうまくいきませんでした そしてOnChangeイベントも見つからないので悩んでます。 109さんのレスでTimerコンポーネントを使う方法もあることに気付きましたが、 ColorDialogのOKを押した時だけイベントが発生するようには出来ないのでしょうか?
なんかその質問だとこれでいいような… if ColorDialog1.Execute then Panel1.Color := ColorDialog1.Color;
モード付きダイアログの動作がわからんのだろうね。 なんでもイベント、プロパティーで出来ると思いがち。
>>106 ツールは存在するけどお勧めなのはなさそうな。
いっそXMLDOC用のを作ってしまおうかと思ってたけど
C#に移行してしまったので不要になったよw
>>110 Executeから戻ったときにPanel1がRepaintされてしまうので
その後変更しても書き換えれと指示しない限りだめでしょ。
ということを
>>112 がイワンとしている、ということでおkですか?
>>114 ColorDialog1.Execute は、それが表示されている間、それ以降のコードが実行
されない。
>>111 のコードを Button1Click かなんかで実行してみろよ
ごちゃごちゃ考えるより、一行のコードなんだから実行してみたらいいのに
ありがとうございました。 なるほど……Dialog系はif 〜Dialog.execute thenでOK押したときの挙動を設定できるんですね Dialog系の基本的な性質を把握できてなかったです。
Dialog 系、というよりモーダル表示のことね。 Form2.ShowModal なんかでも同じ。
TToolBarのColorプロパティですが、設計時には 希望する色が出てるのに、実行時には着色されない (D7+XP)みたいですが、なんとかツールバーの 背景色を表示させる方法はないんでしょうか?
ヘルプ見てたら、背景の描画は OnCustomDrawイベントを使って 自前でやるようになってるみたいですね。 この方法しか ないということ?
ヘルプのおおせのとおり。
シフトJISコードをJISに変換するのはどうしたらいいでしょうか? 特に半角カナは全角に変換せずに、半角カナのJISにしたいです。 よろしくお願いします。
>>122 JIS って ISO-2022-JP のことでしょ。
ISO-2022-JP に半角カナ (JIS X 0201 の右側) は定義されてない。
SI/SO (G1 に JIS X 0201 の右側があるとして切り替えるシーケンス) や
ESC(I (G0 に JIS X 0201 の右側をロードするシーケンス) を使って
半角カナを表していたメーカー独自の規格もあるけど、正式なものではない。
みんなDelphiでどんなプログラム作った?
アイデアメモ。画像ビューワー。urlの画像のアドレスをカウントアップしてくれる奴。 ヒット&ブロー。CDトレイ開ける奴と閉める奴。ジャンケンゲーム。ランチャーのプラグイン。 WinMXで自分のIDを調べる奴。うーむ・・・未だに初級やな○×も作ったか。をーげーむまんせー
function hogehoge(x,y:ineger): TPoint; begin with Result do begin x := x; y := y; end; end; これって望んだ動作にするのって無理ですか?
>>126 質問の意味がわからない。
まったく同じ動作をする関数としてPoint関数が用意されてる。
用例
var
zahyo : TPoint;
begin
zahyo := Point(20,20);
end;
>>126 右辺値の勝手にくっつくwithを打ち消すのは無理だね。
VBだとできるみたいだけど。
曖昧さがある with は使わないこと。with をいっさい使わない、というのもあり。 今回の場合なら、127を見習って result := Point(x,y);
PopupMenuのショートカットを必要に応じて無効にするにはどうすればいいですか? 下記のようにすればMainMenuのショートカットは無効化できるんですが PopupMenuの場合だととうまくいきません。 procedure TForm1.FormShortCut(var Msg: TWMKey; var Handled: Boolean); begin if TreeView1.IsEditing then Handled := True; end;
Action化しろ
132 :
デフォルトの名無しさん :04/05/26 12:57
100×100のサイズのimageコンポーネントにautosizeをfalse、stretchプロパティをtrueにして Image.Picture.LoadFromFileで400×400のBMPを読み込みました。 この時点で400×400のBMPが見た目100×100のサイズにきれいに収まってるように見えるのですが Image.Picture.SaveToFileで保存すると400×400のままなんです。 400の画像を100にして利用できるようにするにはどうしたらいいんでしょうか?
ありがとうございます
>>127 質問の仕方が悪かったみたいでした。すいません
>>128-129 withは使わない方がいいみたいですね。
>>132 100x100のTBitmap用意してTCanvasのStretchDrawかWinAPIのStretchBltすれば?
>>132 Image1.Picture.Bitmap を 100x100 にしてから TBitmap でファイルを読みとって
Image1.Picture.Bitmap.Canvas.StretchDrawで縮小
136 :
デフォルトの名無しさん :04/05/26 13:27
>>134 >>135 ありがとうございます。今からやってみますが
Image1.Picture.Bitmap.HeightとWidthにそれぞれ100を代入して、
Bmp1.LoadFromFileして
Image1.Picture.Bitmap.Canvas.StretchDraw(Bmp1)
こういうことでいいんですよね?
Bitmap.Width := Image.Width; Bitmap.Height := Image.Height; Bitmap.LoadFromFile(CurrentFile); Image.Picture.Bitmap.Canvas.StretchDraw(Rect(0,0,Image.Width,Image.Height),Bitmap); で出来ました。ありがとうございました!
138 :
デフォルトの名無しさん :04/05/26 15:21
スクロールボックスを親にLabelを動的に生成したいんですけど、 var Label:TLabel; begin Label := TLabel.Create(self); try Label.Parent := ScrollBox1; Label.Left := 20; Label.Top := 20; Label.Width := 100; Label.Height := 50; Label.Caption := 'あああ'; finally Label.Free; end; end; で表示されません。なんで〜? なんか足りないの?
どれどれ、とコードを読み進めたが、 Label.Freeで脱力した。
finally Label.Free; end: 表示する前に解放されてるからでは。 Parent を設定した場合、明示的に解放しなくとも、 親コントロールが解放してくれるらしいから、解放しなくて いけない(邪魔だから消す、リソースが足りない(ありえないが)) という理由でもない限り、明示的に解放しなくとも良い。
あ!そっか!何やってんだ俺ort どーもお騒がせしました
142 :
デフォルトの名無しさん :04/05/26 16:52
チョトお尋ねしますが2つのImageコンポーネントを重ね合わせて1つのImageにして.bmpとかで保存って出来ます? かたっぽのImageの背景は透過させて。
>>142 TImage内のTBitmap使えば余裕でできる
透過の意味がよくわからんがキーカラーで抜くならTBitmapにその機能はある。
半透明ならTBtmapのScanlineでご自由に
余裕で出来るんかぁー・・・便利だな。そんなもんなのかな?ありがとう
>>143
145 :
デフォルトの名無しさん :04/05/26 19:10
すみません!前のつづきなんですが 動的に生成したImageコンポーネントを実行時にドラッグで動かせる方法を教えてください
動的に生成しなければできるの? 何が分からないの? イベントハンドラに 代入するだけだけど。
private
{ Private 宣言 }
PictureImage:TImage;
procedure TForm1.Button1Click(TopLeft: TPoint);
begin
if OpenPictureDialog1.Execute then
begin
PictureImage := TImage.Create(self);
PictureImage.Parent := ScrollBox;
PictureImage.AutoSize := true;
PictureImage.Left := TopLeft.X;
PictureImage.Top := TopLeft.Y;
PictureImage.Picture.LoadFromFile(OpenPictureDialog1.FileName);
end;
end;
>>146 上のコードで出来たImageコンポーネントをドラッグで移動させたいんです
あらかじめドラッグ移動のイベントを用意しておいて PictureImageのMouseイベントハンドラに代入する。
そもそも > 動的に生成しなければできるの? に回答してない
まって。やってみますまた書きます
>>149 やってません。
ともかくイベントハンドラを作ってみました。
procedure TForm1.PictureMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
PictureDrag := true;
Origin := Point(X,Y);
MovePt := Origin;
end;
procedure TForm1.PictureMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
begin
if PictureDrag then
begin
MovePt := Point(X,Y);
PictureImage.Left := PictureImage.Left + (MovePt.X - Origin.X);
PictureImage.Top := PictureImage.Top + (MovePt.Y - Origin.Y);
end;
end;
procedure TForm1.PictureMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if PictureDrag then PictureDrag := false;
end;
で実行したところ・・・
画像1つ目開く→ドラッグしてみる→成功 画像2つ目開く→ドラッグしてみる→成功 さっき動かした1つめの画像をまたドラッグ→画像1動かない&なぜか画像2がマウスの倍くらいの勢いで動く。 になりました。だめだ・・・
PictureImageが画像読み込むたびにPictureImage := TImage.Create(self);で値変わってるんですよね?
なんといっていいか・・・これをどう聞けばいいのか分からないんですが、
>>151 のPictureMouseDownに書く(書けるのか分かりませんが)
PictureImage := Sender.〜〜〜??
みたいな感じに出来ないんですか?
イベントハンドラ側からどうやって同じプロシージャから生成されるイメージコンポーネントを区別すればいいの?
できましたできました。 必死にマニュアルあさって PictureImage := Sender as TImage; で出来ました。どもすみませんでした
var Image:TImage; if Sender is TImage then Image := TImage(Sender) else exit; 以下で Image についてコードを書く
>>155 そうかif Sender is TImage thenがいるんですね。
TImage(Sender)って動作は as と全く同じですか?
実行時型チェックがないことを除けば同じ。is で型チェックしてるので 直接キャストでOK
>>157 やっとすっきりしました。うまく質問を説明できなくてすみませんでした
プロジェクトの定数や変数をユニットから参照することは出来ませんか?
>プロジェクトの ってなんだ?プロジェクトファイルか?
>>160 はい、そうです。解りにくくてすいません
もしや、と思ったがやっぱり.dprはusesできないね。 uses Project1 in 'Project1.dpr' とかやっても駄目。Project1.dcuが見つかりませんとか怒られる。
プロジェクトの定数や変数をユニットから参照することはできないし、 だからって、しなきゃできないこともない。共通に参照されるユニットを つくればいい。
それをふつー出来ないというわけだが
3.78から整数部を出すにはどうしたらいいでしょうか?
0.78引いたら <バカ
168 :
デフォルトの名無しさん :04/05/27 13:31
マイコンピュータやマイドキュメントなどのシステムフォルダを フォームに、ドラッグ&ドロップで受け取りたいのですけど どうすればよいでしょうか?
>>168 特殊フォルダなんだから、ドラッグしなくても
すでに決まってるディレクトリなんじゃないの?
複数のシステムフォルダがドラッグされる可能性
があって、それを判別したいってこと?
>>169 現在ランチャを作っています
マイコンピュータのショートカットを登録しようとしてドラッグしたら
ファイルじゃないみたいで、メッセージ (WM_DropFiles) を受け取ることができなかったのです。
ってことなのですが、わかっていただけますか?
>>168 自前でOLEDnDを実装する必要がある。(WM_DropFiles絡みのAPIはCF_HDROPを扱いやすくラッピングしてるだけのはず)
DelphienWorldあたりにOLEDnDで必要なIDropTarget, IDataObjectのラッパーコンポーネントが登録されてた気がする。
>>171 Thx.
試してみます
DnDがらみの話は、OLEまで突っ込んだものが
見あたらなかったので、その発想は浮かばなかったです
173 :
デフォルトの名無しさん :04/05/27 21:58
横からすみません。 TToolBarのImagesプロパティやTSpeedBottanのGlyphプロパティに格納する ビットマップイメージってどうしていますか? ベクターのフリー素材を見ても変にカラフルなのしかありません。 GOOで「フリー素材」で検索してもHPに使う変にファンシーなのしか見つかりません。 これらのアイコンをプログラムに取り込んで、HPで公開したとき、本来の使用目的とは 違うわけでクレームがつかないとも限りません。 プログラムの内部に取り込んで公開しても問題にならないビットマップイメージを 探しているのですが、どこか言い入手先はないでしょうか。 やっぱりイメージエディタで自分で作るしかないのでしょうか。
175 :
デフォルトの名無しさん :04/05/27 23:45
>>174 回答に感謝。
デルファイMLは盲点でした。
あのMLはレベルが高いので敬遠しておりました。
DDEについて勉強中ですが、行き詰まっています。お力をお貸しください。 A.exeのボタンを押してB.exeをモーダルで呼び出したいのですが、うまくいきません。 procedure TForm1.Button1Click(Sender: TObject); var WinHnd:integer; begin DdeClientConv1.ServiceApplication:='B.exe'; if not DdeClientConv1.SetLink('B', 'DdeServerConv1') then Exit; WinHnd := FindWindow(nil, 'B'); if WinHnd > 0 then SetForegroundWindow(WinHnd); end; 上記コードで、B.exeはタスクバーに表示はされるのですが前面に表示されません。 終了時の処理はWaitForSingleObjectというのを調べているのですが・・・難しいです。 どうぞよろしくお願い致します。
> A.exeのボタンを押してB.exeをモーダルで呼び出したいのですが 「モーダル」の意味が分かっていたら、これが不可能であることが分かる。
179 :
デフォルトの名無しさん :04/05/28 01:33
Delphiのプロジェクトをコマンドプロンプトからコンパイルするには どのように入力すればいいのでしょうか? delphi32 ファイル名 だけだと、ただ開くだけですし・・・ どうかお助けください
180 :
デフォルトの名無しさん :04/05/28 01:39
ボタンを押したらHello Worldって言ってくれるやつを作ってみたんだけど, 実 行したらその瞬間に同じこと言ってくれるようにするにはinitialzationて書い てその下にコードを書くよりほかにやり方ってありますか? というかこのやり方は間違ってないですか?
コンソールアプリで Writeln() じゃないの普通は。
>>180 釣りかもしれないけど、
「意味が分からないです」。
GUI アプリなら、Label はっておけばいいじゃないの。
184 :
デフォルトの名無しさん :04/05/28 01:53
>>180 の言ってることは、
私はウィンドウに「Hello World」と表示させたい。
そのためにボタンを載せ、それを押したら表示する処理は出来た。
しかし、起動したときにボタンを押さずに同一の処理がしたい。
その方法やいかに?
ということだろ。
答え:フォームのOnCreateイベントに「Button1Click(Sender);」と書きましょう。
>>179 Delphi5 の場合のコンパイラオプションを挙げておきます
コンパイラは \Bin フォルダの Dcc32.exe
XXXXXXXXXXX\Delphi5\Bin>dcc32 -h
Borland Delphi Version 13.0 Copyright (c) 1983,99 Inprise Corporati
Syntax: DCC32 [options] filename [options]
-A<unit>=<alias> = Set unit alias -K<addr> = Set image base addr
-B = Build all units -LU<package> = Use package
-CC = Console target -M = Make modified units
-CG = GUI target -N<path> = DCU output directory
-D<syms> = Define conditionals -O<paths> = Object directories
-E<path> = EXE output directory -P = look for 8.3 file names als
-F<offset> = Find error -Q = Quiet compile
-GD = Detailed map file -R<paths> = Resource directories
-GP = Map file with publics -U<paths> = Unit directories
-GS = Map file with segments -V = Debug information in EXE
-H = Output hint messages -VR = Generate remote debug (RSM
-I<paths> = Include directories -W = Output warning messages
-J = Generate .obj file -Z = Output 'never build' DCPs
-JP = Generate C++ .obj file -$<dir> = Compiler directive
つづき Compiler switches: -$<letter><state> (defaults are shown below) A+ Aligned record fields P+ Open string params B- Full boolean Evaluation Q- Integer overflow checking C+ Evaluate assertions at runtime R- Range checking D+ Debug information T- Typed @ operator G+ Use imported data references U- Pentium(tm)-safe divide H+ Use long strings by default V+ Strict var-strings I+ I/O checking W- Generate stack frames J+ Writeable structured consts X+ Extended syntax L+ Local debug symbols Y+ Symbol reference info M- Runtime type info Z1 Minimum size of enum types O+ Optimization Stack size: -$M<minStackSize[,maxStackSize]> (default 16384,1048576)
うわぁ、みにくいね XXXXXXXXXXX\Delphi5\Bin>dcc32 -h コマンドプロンプトで \Bin フォルダから上を実行してください
>>185 丁寧に教えてくださって、ありがとうございます。
これで眠れます・・・
>>184 180の言わんとすることはなんとなく理解できたけど
そうやって書いてあるとはるかにわかりやすいな。
やっぱり文章力って重要だね。
>>177 ご回答ありがとうございます。
実際に試してみました。残念ながら状況は変わらなかったのですが勉強になりました。ありがとうございます。
表現がうまくできないのですが、タスクバーにはBが表示されていて、画面上に表示されないのです。
SetLinkの前にWinExec(PChar('B.EXE'),SW_SHOW);を入れてみたら前面に表示されるようにはなったのですが
何だか違う気がします。WinExecを使った時の終了待ちもWaitForSingleObjectではないようで
ttp://forum.nifty.com/fdelphi/faq/00043.htmGetModuleUsageの方法を試したのですが GetModuleUsageが未定義の識別子でエラーになります。
どうかご助言をお願い致します。
>>178 モーダルの意味、「開いている間は他の処理を受け付けない」だと思っていたのですが違うのでしょうか。
正しい使い方を教えていただけるとありがたいです。
Delphiで市販のものや、フリーの性能のいい ペイントソフトに負けない、ソフトを作ることが出来ますか??
It is up to you.
>182>183>184 不快な思いをさせてしまったようで申し訳ありません. 184氏の言うとおりです. うまくいきました. 感謝です.
196 :
デフォルトの名無しさん :04/05/28 19:06
>>192 デルファイは使おうと思えばアセンブラのようにも使えます。
直接ハードウエアをたたくことも可能です。(TCPUCOOLERなんかそうです)
そういう意味では可能です。
>>192 「牛丼」はpersonalでも同等のものが作れる、と作者から聞いたことがある。
>>198 そっちは今Longhornで盛り上がってる真っ最中だろ。
C言語からの移植で悩んでます。 double x x=( random() & 2047 )-4096; をDelphiで書くとどのようになるのでしょうか?
203 :
デフォルトの名無しさん :04/05/29 00:27
>>180 全然不快じゃないよ。気にしない気にしない。
>>203 「パーサ書け」ってレスが来そうな気がする。
検索すれば、「タグを削除するサンプル」上げてるとこもあるよ。
探しづらいかもしんないけど。
>>204 レスさんきゅうです。
昨日の夜必死こいて検索したのですが、
PerlやJavaでのサンプルしか見つけられませんでちた。
今日は休みなのでマターリ検索してみます。
>>203 TMemoryStreamにすでにデータが入っているのなら、TStringListに読み込んでから処理すれば良いんじゃない?
StringList.LoadFromStream(MemoryStream);で読み込んでしまえば、後は文字列処理だけ。
> 後は文字列処理だけ。 これを質問してるんでは?
>>207 > TMemoryStreamの扱い方が全く分からないので
> 途方にくれています(゚A゚)
と書かれていたから、StringListに入れたら何とか出来るんじゃないかと判断したんだが。
>>206 レスthx!
検索すると手ごろなのがありますた。
http://forum.nifty.com/fdelphi/samples/01092.html これを参考に一度読み込んだファイル再度読み込んでを一気に処理しようと考えたんですが、
206さんの言うとおり、StringList.LoadFromStream(MemoryStream);で読み込んで
処理した後Richtextに貼り付けたほうがスマートにできそうです。
もうちょいがんがってみまつ。
今日マターリ検索したらいろいろ見つかった・・
人間焦るとだめでつね(゚A゚)
>>210 レスさんきゅうです。
正規表現を調べてみたのですが、Help見ても使い方がいまいち分からず。。
Delwiki見ながらマターリいじってみます。
知らないことが多すぎてなかなか進みませぬ。。
Delphi結構面白いですね(゚∀゚)
質問です。よろしくお願い致します。 環境はWinXPでDelphi7を使用してます。 TTreeNodeのプロパティ、Dataについて。 このプロパティに文字列を保持しようと以下のようにコードを書いたのですが、 それを読むと文字列の最後が文字化けしてしまいます。 何がいけないのか教えて頂けないでしょうか? procedure TForm1.Button1Click(Sender: TObject); const CST_STR= 'abcd:'; var Node1, Node2 : TTreeNode; Buff : String; i : Integer; begin Node1 := TreeView1.Items.Add(nil, 'Node'); for i := 0 to 9 do begin Buff := CST_STR + IntToStr(i) + ':efg'; Node2 := TreeView1.Items.AddChild(Node1, 'SubItem:'+IntToStr(i)); Node2.Data := PChar(Buff); end; end; procedure TForm1.TreeView1Click(Sender: TObject); var S : String; P : PChar; begin if Assigned(TreeView1.Selected.Data) then begin P := PChar(TreeView1.Selected.Data); S := String(P); Label1.Caption:= S; end; end;
空白が全部詰まってしまって見づらくて申し訳ないです。
> Node2.Data := PChar(Buff); Buff はローカル変数。それを指してるポインタをセットしても、そのルーチン外 では、無意味。
>>214 お答えありがとうございます。
ということは、このような方法には無理があるという事ですか。
また質問になってしまいますが、
dataプロパティはどのように使用するのがベストでしょうか?
> このような方法には無理があるという事ですか。 はい、ローカル変数の String ではだめです。たとえば、Buff をハンドラのそとで 宣言して、グローバル変数にするか、または、TForm1 のフィールド変数にすると いいのではないでしょうか。
>>212 216だが、そのほかに New と Dispose でメモリを動的に配置することもできる。
procedure TForm1.Button1Click(Sender: TObject);
var
Node1:TTreeNode;
P:PString;
begin
Node1 := TreeView1.Items.Add(nil, 'Node');
New(P);
P^ := 'AIUEO';
Node1.Data := P;
end;
procedure TForm1.TreeView1Deletion(Sender: TObject; Node: TTreeNode);
begin
if Assigned(Node.Data) then Dispose(PString(Node.Data));
end;
procedure TForm1.TreeView1Click(Sender: TObject);
begin
if Assigned(TreeView1.Selected.Data) then
Label1.Caption := PString(TreeView1.Selected.Data)^;
end;
>>216 早速、グローバルで、
Buff : String;
を宣言してみましたが、結果は同じでした。
ちょと思ったのですが、
ループ内にて、Buffが次々書き換えられてしまって
上記宣言だとそのアドレスは結局同じ所を指すわけですよね?
もしかして、ループ分グローバル変数が必要ですか?
>>217 便利そうなので、DLしようと思ったのですが、
どうやら駄目なようです。残念!
ホントだ。すまん。 どこかにツールまとめスレがあれば載せてもらおうかな。
>>218 書き込んでる間にレスが・・
ありがとうございます。
早速試してみます!
223 :
デフォルトの名無しさん :04/05/29 19:43
デルフィーとデルファイどっちが有利ですか?
> Buffが次々書き換えられてしまって その場合はだめです。書き換えられると、前のメモリは捨てられるからです。 設定するのと同じ数だけ変数を使うか、または動的に割り当ててください。
>>224 なるほど、やっと意味がわかりました。
(
>>218 の方法で実現できました!)
PString型を初めて使ってみました。
動的に割り当て、いらなくなったらDisposeですか。
勉強になります。
ありがとうございました。
あとグローバルで宣言した TStringList をつかって、文字列を Add していく 方法もあるね。これが一番簡単でリークが起こりにくそう。Data には Add の戻り値を Pointer にキャストして設定する。
>>226 なる!
その方法もやってみます。
良かった・・質問して。
>>227 DLできましたよ。
今度使わせて頂きますー。
226の例 var SL:TStringList; procedure TForm1.FormCreate(Sender: TObject); begin SL := TStringList.Create; SL.Add('dummy'); // index 0 for dummy end; procedure TForm1.FormDestroy(Sender: TObject); begin SL.Free; end; procedure TForm1.Button1Click(Sender: TObject); const CST_STR= 'abcd:'; var Node1, Node2 : TTreeNode; Buff : String; i : Integer; begin Node1 := TreeView1.Items.Add(nil, 'Node'); for i := 0 to 9 do begin Buff := CST_STR + IntToStr(i) + ':efg'; Node2 := TreeView1.Items.AddChild(Node1, 'SubItem:'+IntToStr(i)); Node2.Data := Pointer(SL.Add(Buff)); end; end;
つづき procedure TForm1.TreeView1Click(Sender: TObject); var S : String; P : PChar; begin if Assigned(TreeView1.Selected.Data) then Label1.Caption:= SL[Integer(TreeView1.Selected.Data)]; end;
タスクトレイにアイコンを追加してタスクバーからは消すという、一般的な 常駐型のプログラムを作ってみたんですが、タスクトレイのアイコンを右クリックして メニューを出した後、そのメニューの項目をどれかクリックしないとメニューが 消えません。 Windowsのスピーカーのアイコンがタスクトレイにありますが、あれはメニューを 出してもデスクトップなどの別の場所をクリックすると消えてくれます。 そのような動作をさせたいのです。 何かこの段階で原因等は推測されますか?
>>231 PopupMemu() の直前に自分を SetForegroundWindow() する
>>229 今、同じようなものを作ってみて、
ハテ、何故最初の Node に nil が・・と悩んでいたところでした。(笑)
>SL.Add('dummy'); // index 0 for dummy
↑これが必要なのですね。
>>233 そうですね。 0 を pointer にキャストすると nil になって Assigned() が
false になります。
>>234 説明も分かりやすかったですし、とても感謝!
ありがとうございました。
>>217 GJ!
ところでコレってDelphi製じゃないんですか?
サイズ小さいけど
>>237 VC++。
そもそもウィンドウ作成してないし
Delphiバージョン program fmtres; uses SysUtils, Clipbrd; begin ClipBoard.AsText := StringReplace(StringReplace(ClipBoard.AsText, #9, ' ', [rfReplaceAll]), ' ', ' ', [rfReplaceAll]); end.
に置き換えんとだめじゃないか
nbspを2chブラウザのツールにセットした。
>>232 試してみたところ、希望どおりの動作をしました。
誠にありがとうございました。
ポップアップとSetForegroundWindowでぐぐったらすぐに対処法として
書いてあるのが見つかりました。すいません。
でも、なぜなのかについて説明してあるところは今のところ見つけていませんが、
理由よりもこうするものだという風に捉えていたほうがいいのでしょうか。
あと、SetForegroundWindowに渡すハンドルはApplicationのものでも
Formのものでも通りますが、どちらでもいいですかね?
何度も申し訳ないです。
SetForegroundWindowにApplication.Handleを渡すとうまくメニューが 表示されませんでした。Formのほうに変えるとうまくいきました。 すれ汚しごめんなさい。
コードそのまま貼り付けたらnbspが消えたw &−>&に変換しといて 再掲 program fmtres; uses SysUtils, Clipbrd; begin ClipBoard.AsText := StringReplace(StringReplace(ClipBoard.AsText, #9, ' ', [rfReplaceAll]), ' ', '&nbsp;', [rfReplaceAll]); end.
>>245 > なぜなのかについて説明してあるところは今のところ見つけていませんが、
なぜなのか、ハッキリと分かりませんが、推測すると、OS は現在の
ForegroundWindow がなんなのんか知っていて、そして、それがポップアップメニュー
を表示している、と仮定しています。メニュー以外の例えばデスクトップをクリックす
ると、ForegroundWindow が変化するので、メニューも引っ込めるんだと思います。
PopupMenu の直前に、SetForegoundWindow として設定しないと、メニューを表示
しているプロセスと、本当の ForegroundWindow がはじめから一致していないので、
メニューを引っ込める論理が働かないんだ、と思っています。たんなる推測ですが。
249 :
デフォルトの名無しさん :04/05/29 22:49
Delphi7のアップデート1が出来ない・・・せっかく30分も掛けてダウンロードしたのに。 パケ代もったいない。
>>248 レスありがとうございます。確かに一個人が追求しても推測の枠を出るのは
難しいとは思いますが、お陰で私も自分なりの考えが進みました。
逆(じゃないかも)に考えてみると、ポップアップメニューが必ず選択される必要が
ある場合もありうるので、ほかのウィンドウがアクティブになったときに消したいならば
先にSetForegroundWindowしなさい、としているとすれば頷ける部分もありますね。
ポップアップメニュー自身が親が誰であるかを知っていて、OSもそれを知ることができて、
メニューの親と現在アクティブなウィンドウが違うときは消す、となっていれば特に
問題ないのでしょうかね。(当たり前?)
生半可な知識しかないくせに駄文を書きなぐってしまいました。どうかご勘弁ください。
最後になりましたが、皆様どうもありがとうございました。
保存するときに拡張子(.aaa)をつけたいのですが どのようにしたらいいでしょうか?
ExtractFilePath, ChangeFileExt, ExtractFileNameあたりを調べろ。 それでも解決しなかったら質問の仕方を考えろ。漠然としすぎ。
すまんな…
∧_∧
( ・∀・) | | ガッ
と ) | |
Y /ノ 人
/ ) < >__∧∩
_/し' //. V`Д´)/
(_フ彡 / ←
>>242
>>251 を訳してみたらこういう感じかなぁ?
ファイル保存ダイアログを出すことはできましたが、保存するときの
デフォルト拡張子を指定することができませんでした。
拡張子を指定する方法、そして入力されたファイル名に拡張子がなかった場合に
自動的に付加して保存する方法について、教えていただけませんでしょうか。
現在の私の能力では、何を調べれば良いのか検討もつきません。
どなたか、ヒントだけでも結構ですので、よろしくお願いいたします。
function GetFilterExt(FilterIndex: Integer; Dlg: TOpenDialog): String; var ReplaceStr: String; begin with TStringList.Create do try ReplaceStr := Dlg.Filter; ReplaceStr := StringReplace(ReplaceStr, ' ', '', [rfReplaceAll]); ReplaceStr := StringReplace(ReplaceStr, ',', '', [rfReplaceAll]); ReplaceStr := StringReplace(ReplaceStr, '|', ',', [rfReplaceAll]); CommaText := ReplaceStr; if (1 <= FilterIndex) and (FilterIndex<=(Count div 2)) then begin Result := Strings[FilterIndex*2-1]; end; finally Free; end; end;
インデント置き換え忘れた・・・ procedure TForm1.Button1Click(Sender: TObject); var FilterExt, WriteFileName: String; begin if SaveDialog1.Execute then begin WriteFileName := SaveDialog1.FileName; if ExtractFileExt(SaveDialog1.FileName) = '' then begin FilterExt := ExtractFileExt( GetFilterExt(SaveDialog1.FilterIndex, SaveDialog1) ); if not (FilterExt = '.*') then begin WriteFileName := ChangeFileExt(SaveDialog1.FileName, FilterExt); end; end; Memo1.Lines.SaveToFile(WriteFileName); end; end;
ソースこぴぺ出来ないよりできたほうがいいだろ
SaveDialog1.DefaultExt := 'aaa'; でいいじゃん…
#32#9のケースも考えないと。
ちと諸事情で忙しくて、Delphiを半年触ってなかった。 Javaで仕事せにゃならんかったし。 この半年でなんか動きあった?
VB6ユーザーがDelphiには流れないという結論を出した。
雑談スレでやってくれよ
Memoコンポーネントに読み込ませたデータを一行ずつ取得して 空白の行だけを取り除くにはどのようなコードを書けばよいでしょうか。 空白行の判別がいまいちわかりませぬ
>>264 procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
for i := Memo1.Lines.Count-1 downto 0 do
if Length(Memo1.Lines[i]) = 0 then Memo1.Lines.Delete(i);
end;
質問です。 dbExpressのTSQLConnectionからデータベースに接続する方法がわかりません。 WindowsXPにMySQLをインストールしたのですが、 TSQLConnectionからMySQLに接続しようとすると 「接続に失敗しました。LIBMYSQL.dllを起動できませんでした。」 というエラーメッセージが出ます。 LIBMYSQL.dllはMySQLに同梱されていたので、 dllのあるフォルダをライブラリパスに追加したり、 dllをプログラムと同じフォルダに置いたりしてみましたが、 やはり同じエラーメッセージが出ます。 どうすればデータベースに接続できるか、教えてください。
268 :
デフォルトの名無しさん :04/05/31 01:30
すみません。ageときます。
Delphi5を使ってるのですがDelphi6のサンプルプログラムらしき物を走らそうと しているんですが、HTTPProdと言うファイルが見当たらないとエラーがでます。 このHTTPProdはDelphi6以上からあるファイルでしょうか? Delphi5にインスコ出来たりしませんよね。
> 手ごろなコンポーネントを配布しているところは 「手ごろ」ってなに? 手ごろじゃないのは持ってるのね。
> Delphi6のサンプルプログラムらしき物を走らそうと そんなもん走らせるために苦労するなんて・・・・・・
>>272 IndyのサンプルなんですけどIndy9の最新版インスコしたのに
サンプルが6用で出来ないなんて・・・
何のために5もインスコできるのか。
Indy はメジャーなコンポだが、サードパーティーだし、下位バージョンとの互換性 があやしいし、以前にも WEB 関係のサードパーティー製コンポが突然打ち切りに なったり、なんか使うための努力が無駄になりそうで DL したけどインストールして いない。それより、WinInet やソケットを勉強した方が、よほど知識として 役に立つ、と思う。
うーん、実はDelphiからメール送信したくて使用例を検索してたら 実現するには大体Indyが絡んできてIndy使うと簡単に出来そうなのですが、 実行例の環境がDelphi6,7とかなんですよね。 ファイル添付してメール送信したいだけなんだけどな。
なんか結果的に情報小出しになってしまってるのでスマソ。
Professional版には標準でIndyコンポーネントが付いてくると聞いたけど違うの?
>>277 ついてくるけど、インストーラでIndyをアンインストールしてから
最新版をインスコするのが吉。
集合型に値を追加するのってどうやればいいんでしょうか? 例えば、 Font.Styleに既にfsItalicが入っている状態にさらにfsBoldを追加するのはどうやればいいんでしょう? 単純に Font.Style := [fsBold]; とやっては元々入っているfsItalicが消えちゃいますよね・・。
s := s + [b] or include
Font.Style := Font.Style + [fsBold];
283 :
デフォルトの名無しさん :04/05/31 21:43
サービスアプリケーションをプログラムから終了させたいのですが、 如何にすればよいでしょうか? サービス起動時、ファイル読み込みに失敗したら終了、のようなものです。 Application.Terminateは不可でした。
284 :
デフォルトの名無しさん :04/05/31 22:20
トークンの勉強はどの辺ですればいいでしょうか? いい資料が無いか探しています(ネット歓迎)
>>283 試していませんがHalt手続きはどうですか?
287 :
デフォルトの名無しさん :04/06/01 14:05
>>285 ありがとうございます。
が、そちらを試す前にTServiceThreadでTerminateできました。
で、別件ですがシグナルトラップってどう書けばいいのか、
どなたかご存じないですか?
やはりサービスアプリの場合なんですが。
ゲーセンだけで使える硬貨のことでは > トークン
思えばトークンまできたもんだ
馬耳トークン
ハバネロに違いない。
Delphi7.1のアップデートファイルってログインしないとダウソできないですか?
パタリロに違いない。
297 :
デフォルトの名無しさん :04/06/01 22:59
for文使って素数かどうか判定するプログラム作りたいんだけど どうしても分からない・・・ 誰か教えてくらはい
for i = 0 to 1 do if i = 1 then ShowMessage('素数です'); end;
アリガトゥーございます。
>>270 マルチポスト先にレス付いたんだから、こっちにもその旨書けよ。クズ。
VC++で作られたDLLを使う方法を教えて下さい。
>>299 単純に調べたい数までの数値でひたすら割っていってもいいんじゃないでしょうか。
列挙するのはキツいですが単体の数字ならそんなにかからないので。
まあ素数判定のアルゴリズム分かれば一番良いんでしょうけど。
>>301 Dllを作成した言語は問わないはずですが
>>302 全然関係ないトコのミスでした……
吊ってきます。
>>298 1 は素数か?
>>301 質問が漠然としてて何がわからないのかわからない。
とりあえずヘルプの 'external 宣言' は読みましたよね。
__cdecl なのか __stdcall なのか気を付けること。
そんなことは知っているというなら失礼。
DLLしかなくて、引数が解らないのでは?
DLLの問題は303に解決したと書いてあるように思うのだが・・
トークン解析の方法教えてくださいよ〜 簡易コンパイラ作りたいんです
くだスレで質問してるようじゃ無理
Createした時にCreateしたものを自動でリストにいれたいのですが Create中に自分のポインタを知る方法は無いのですか? type Ta = class; constrautor create; end; procedure add(a: pointer); begin list.add( a ); end; constructor create Ta; begin add( a ); ←ここで自分自身のポインタを渡したい end; こんな感じで作りたいのです
function add: Ta; begin Result := Ta.Create list.add( Result ); end; とかではダメかい?
self のことなんじゃ?
self を知らずしてOOを語れない。自分自身の今このコードが実行されているインスタンス への参照。他言語だと this とか me とかだよね。
public ObjList:TobjectList; end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); begin ObjList := TObjectList.Create(false); ObjList.Add(self); end; procedure TForm1.FormDestroy(Sender: TObject); begin ObjList.Free; end; procedure TForm1.Button1Click(Sender: TObject); begin Label1.Caption := ObjList[0].ClassName; end;
コンストラクタは、できればオブジェクトの作成と初期化に専念すべき、と思ってるんで。
>>314 > コンストラクタは、できればオブジェクトの作成と初期化に専念すべき、と思ってるんで
これと
> Create中に自分のポインタを知る方法
この質問の回答がなんで関係するの?
>>315 説明するのは面倒なので、俺を荒らしだとでも思ってスルーしてください。
失礼しました。
>>307 Delphiかつ入門かつWEB上で覚えようなんて条件厳しすぎ。
構文解析は難度高めなんでちゃんと本読んだほうがいいよ。
質問させてください。 画像関係をいじろうとしているのですが、ファイルのフォーマットを 調べるのにGUIDを調査して、いろいろといじらなければならない ことがわかりました。 たとえば、Mpeg1だと↓のように宣言されています。 MEDIASUBTYPE_MPEG1Video: TGUID = (D1:$E436EB86;D2:$524F;D3:$11CE;D4:($9F,$53,$00,$20,$AF,$0B,$A7,$70)); そして、とある構造体にあるMediaTypeのGUIDと上記のMediaTypeが一致すると、 それはMpeg1Videoということがわかるのですが、画像の形式はたくさんあるため、 すべてのMediaTypeと比較して、これはMpeg、これはAVIといちいち判定させて あげないといけません。 なんかもっとスマートなやり方があるような気がするのですが、 どなたか簡単に解決できる方法はありませんか? それとも、上記のように全てif文やCase文で判断させて、 自分で判断しないといけないでしょうか。 具体的には、「このファイルはMpeg1だよ」と表示するソフトが作りたいと思っています。
>>310 仕方が無いのでそれで書いてました
その方がいいのですかね?
無駄に関数が多くなるのを嫌ったのですが
>>311-313 ありがとうございます。無事動作いたしました。
2つのStringGridのスクロールバーを連動させたいのですが、どうしたらよいでしょうか? 神様お助けください(祈)
onTopLeftChangedで 両方のTopRowを同じにすればいいでないの?>321
>>322 ありがとうございます!ちょっとやってみます。
できました。ありがとうございました>神さま
>>322
325 :
デフォルトの名無しさん :04/06/02 23:28
どなたかお知恵を拝借したく。 SQLデータベースから数値データを落としてきてCSVファイルに出力する プログラムを作ることになりました。 SQLデータベースを扱うのは初めてなのですが、参考になるサイトあるいはスレ あるいはサンプルプログラムなどがあったら教えてください。
7パーソナル使ってます あるフォルダのあるファイルを削除するとか、別なあるファイルのサイズを測って何バイト 以上だったらそれをあっちにコピーするとか、フォーム状のボタンからVBSみたいなこと やりたいんですけど、詳しく解説してくれてるサイトがあったら教えて下さい。
327 :
デフォルトの名無しさん :04/06/03 00:14
Cursorについて教えてください。 エクスプローラ(Win2000版)のようにドラッグすると、 カーソルがアイコンとファイル名になるような処理をしたいのですが、 どのように処理すればよいのでしょうか? 調べてみたところ TScreen.Cursors 1.リソースエディタを使ってカーソルリソースを作成します。 2.既存のカーソル定数と矛盾しない値を指定してカーソル定数を宣言します。 3.Windows API の LoadCursor 関数を使って新しいカーソルへのハンドルを取得します。 4.新しく宣言されたカーソル定数による添字付きの Cursors プロパティを LoadCursor で取得されたハンドルに設定します。 となっています、1.をプログラム上で処理する方法がわかればよいと思ったのですが、 どのようにすればよいかわかりませんでした。 お願いします。
>>325 SQLデータベースって
種類はなんですか?
AcidFloorが比較的詳しいと思います。
330 :
デフォルトの名無しさん :04/06/03 01:04
>>328 Oracleみたいです。詳しいところはまだ聞いてません。
>>ShellApi ありがとうございます 仕事の補助といったレベルでちょこっとだけVBA ,VBSを使っていた程度の者ですけど、 何か、思っていた以上に色々なことができそうです。
Delphiってどういう意味ですか?
クラスを格納できるリストってどうやって作ればいいでしょうか? TListだとポインタしか格納できないですよね?
>>334 クラスだな。インスタンスでなくクラスを格納するのだな。
TClassList
構造体を一発でクリアする関数ってないですか? 文字列は''に、数値は0にしたいのですが。
FillChar() Delphi には構造体はない レコード型な
>>337 サンクスです!
自分でも構造体じゃないってのはわかってたんですが
なんと呼べばいいのかが思いつきませんでしたので//
339 :
デフォルトの名無しさん :04/06/03 13:07
340 :
デフォルトの名無しさん :04/06/03 13:11
これかな ImgPanel1.ViewImage.SmallIcon.IconPos := iipNone;
342 :
デフォルトの名無しさん :04/06/03 14:00
実現できました。 ありがとうございます
小数を指数表記の文字列に変換したいのですが、整数部が必ず0になるような関数は ありませんか? 例えば1000なら0.100E+04にしたいのですが、Delphiで用意されてる 関数は1.000E+03にとしか変換できないようなのです。
344 :
デフォルトの名無しさん :04/06/03 15:03
フォルダ内のファイル名 サイズ 拡張子 更新日時 画像の画素数 絶対パス名などを リスト表示させたいと思っているのですが ここらへんの情報を一括して取得するようなコンポーネントってありますか?
コンポは無い。FindFirst/Next/Closeで構造体から取得。
その場しのぎの関数を自作して使うことにします。 function TForm1.FloatToExpStr(Value: Extended): String; var fr: TFloatRec; begin FloatToDecimal(fr, Value, fvExtended, 5, 10); Result := IfThen(fr.Negative, '-0.', ' 0.') + LeftStr((String(fr.Digits) + '00000'), 5) + IfThen(Sign(fr.Exponent) <> -1, 'E+', 'E-') + LeftStr('0' + IntToStr(Abs(fr.Exponent)), 2); end;
くだらない質問ですみません、VirtualTreeViewのソースを眺めていて思ったのですが、 Delphiってprivateに宣言されてる変数を、派生先のクラスからも使えるのでしょうか?
基本的には無理。 ただし同一ユニット内であれば別のクラスのフィールドにも アクセスできるというルールを利用すれば可能は可能。
ありがとうございます、そんなルールがあったのですね。 困ったな。
ソースがあれば、MyLib.pas にコピペして好きなだけ書き加えたらいいじゃん
351 :
デフォルトの名無しさん :04/06/03 22:21
ImgPanelのコンポーネントの使いに関してお聞きしたいのですが 画像ファイルをダブルクリックしたときのみ別ウィンドウ上のpaintboxにて開きたいと考えております。 現在は 拡張子jpg などと関連付けられているIEで開いてしまいます。 どのようにしたらよろしいでしょうか ご教示ください。
レジストリ弄れば良いんじゃないですか
TMemoに 2001-01-01 1200 1300 1500 2001-01-02 1230 1320 1400 2001-01-03 ・ ・ ・ のようなデータがあるのですが、 1日ごとにデータを集計したいと思っています。 どのように処理をすればよいでしょうか。 分かりにくくてすみません。
日付 値1 値2 値3 空白 の繰り返しなんだから、そのように読み込んで値を合計するのでは。
procedure TForm1.Button1Click(Sender: TObject); var Hiduke,v1,v2,v3:string; Goukei:integer; i:integer; begin i := 0; while (i*5 < Memo1.Lines.Count) do begin Hiduke := Memo1.Lines[i*5]; v1 := Memo1.Lines[i*5+1]; v2 := Memo1.Lines[i*5+2]; v3 := Memo1.Lines[i*5+3]; Goukei := StrToInt(v1)+StrToInt(v2)+StrToInt(v3); Memo2.Lines.Add(Format('%s Total : %4d',[Hiduke,Goukei])); inc(i) end; end;
再度の質問恐縮です。 DelphiからAccessMDBファイルに接続しているとして MDBにSQLを投げ、レコード絞り込み。 絞り込んだ結果が0件だったら exit 絞り込んだ結果が1件以上あったら次の処理へ〜 というふうにしたいのですが。 結果セット(とりあえず MyRst という名前)が何件か、どういうふうにしたら取得できるのか 分かりません。 当てずっぽうで、if MyRst.Count=0 then とか、if MyRst.RecordCount=0 then とか 書いてみましたが、ものの見事にハネられました。 レコード絞り込みについては、MDB側にクエリをつくることは出来ません。 これが出来れば楽なのですが(抽出条件に、Delphi側のテキストボックスを使っているので、 SQL文で書くしかない) 仕方なく今のところは、MDB側に仮テーブルをつくり、そこにインサートSQLで結果セット押し込み。 この仮テーブルを元に集計クエリをつくり、そのクエリを開いて件数を取得、と、メチャメチャ 野暮ったい方法で対処していますが、これではいくら何でもという気がして。
>>356 >これが出来れば楽なのですが(抽出条件に、Delphi側のテキストボックスを使っているので、
>SQL文で書くしかない)
TQueryかTADOQueryを使っているかわからないのであてずっぽうでTQuery使っていると仮定すると、
「Delphi側のテキストボックス」をパラメータにして、パラメータに値を渡して結果を取得できないか?
たとえばTQuery(NameプロパティをQuery1とする)のSQL文を
SELECT Table1.*
FROM Table1
WHERE Table1.UserName LIKE :sUserName;
にしておいて、結果を取得するときに
Query1.Close;
Query1.ParamByName('sUserName').AsString := <<Delphi側のテキストボックスの値>>;
Query1.Open;
すれば、Query1.RecordCountで取得できるのではないでしょうか。
思いっきり外していたら申し訳ない。
今から会社から帰ってしまうので、理解に苦しむようでしたら明日午後以降にレスします(午前中は客先のためレス不可)。
>>357 さん
すみません
まったく些細なところにミスがありました。
選択クエリを相手に、Openではなく、Executeしてました。
(Executeでも、MoveFirstとかMoveNextとか出来ちゃったり、値をストリンググリッドに
読み込んだりできるんですね)
Openに直したら、MyRst.RecordCount でみごと件数とれました
(そもそもの目的は、件数取得というより、0件だった場合の逃げ方ですが)
>>TQueryかTADOQueryを使っているかわからないので このあたりは僕もよく分かりません ずっと前このスレで教えてもらった、パーソナル版からのレコードセットOpenやDBExecuteの やり方を真似ているだけなんです。 procedure TForm1.FormCreate(Sender: TObject); begin DNS:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='; DBF:=IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName)); DBF:=DBF + '何とかmdb'; DBOpen(DNS,DBF); end; な感じで接続して、 function RSOpen(SQL: string): variant; begin rs := CreateOleObject('ADODB.Recordset'); rs.open(SQL, cn, 3, 3); result := rs; end; とか function DBExecute(SQL: string): variant; begin rs := CreateOleObject('ADODB.Recordset'); rs := cn.execute(SQL); result := rs; end; とか
Delphiって静的変数は使えますか?
interfaceの次で変数宣言すればそのユニットをusesしているユニットすべてで有効 implementationの次で変数宣言すればそのユニットの中でのみ有効
文字コードをJISからShift-JISに変換するのにJconvert.pasか それよりお勧めのものがあれば教えてください。 Jconvert.pasは有名みたいですが、作成者HPが閉鎖してます。 DelphianWorldにもあるらしいのですが何故か検索機能が働かないし、 探しても見あたりません。 Jconvert.pasはバグがあるらしく手直しが必要だとかよく書いてますから 別のがいいのでしょうか。
Del版は使ったこと無いけどnkf.pasは?
>>359 レコードの有無を調べるなら
{ Recode Check レコードの有無を調査します。
有:true
無:false }
function RSCheck: boolean;
begin
result := false;
// rsが空でなければ処理します。
if not VarIsClear(rs) then
begin
try
// rsはレコード無しか確認
if not (rs.BOF and rs.EOF) then
begin
result := true;
end;
except
result := false;
end;
end;
end;
で可能です。
>>359 ずれてしまったのでもう一度。
{ Recode Check レコードの有無を調査します。
有:true
無:false }
function RSCheck: boolean;
begin
result := false;
// rsが空でなければ処理します。
if not VarIsClear(rs) then
begin
try
// rsはレコード無しか確認
if not (rs.BOF and rs.EOF) then
begin
result := true;
end;
except
result := false;
end;
end;
end;
367 :
デフォルトの名無しさん :04/06/04 09:58
Extended 型から 上三桁を取り出したいのですがどのようにしたら可能ですか?
Format() で文字列化してから StrToFloat() じゃアホすぎるかしら
369 :
デフォルトの名無しさん :04/06/04 11:11
Memoの内容をADOで接続したSQLServerに入れるには どのようにすればよいですか? (SQL文でサーバに投げたい) Memo.Textだと'が含まれた文字列になっているようなので。
370 :
デフォルトの名無しさん :04/06/04 11:46
DelphiのPersonal版使ってます。 フォームに日本語を使うと、DFMのその箇所がユニコードになりますが、 普通にSJISで保存出来ませんか? 又、その方法があれば教えてください。
>>363 レスありがとう御座います。
それってDLLが要るんですね。
一度試してみます。
>>348 この前そのルールのせいで
本来、書き込めないフィールドにデータを書き込むようにコードを書いてしまって
(しかも、何のエラーも警告もでない)
なんで思い通りの結果が得られないのか一晩悩んだ。
原因がわかったときには自分はなんて馬鹿なんだろうと激しくへこんだ。
>>373 私も同じ失敗をしたことがありますが,
確かに混乱しやすい仕様ではあると思います.
(C++みたいにユニット内でもアクセスできなくできればよいのですが…)
私はフィールド変数名の頭文字を某が推奨するようにFに統一してある程度回避しています.
>>372 なんか盛りだくさんで凄く便利そうな気が・・・これで大体事が足りそうな。
どうもです。
くだすれ逝けと言われて来ました。 ある型のオブジェクトがCreateされてるかどうかを判別する方法はありませんか? オブジェクトがCreateされているものをさらにCreateしようとするとエラーになります。 Createしてないものに色々代入したりするとエラーになります。 配列を使っているので、作られている時と作られていないときがごっちゃになってしまっています。
それで分かる奴はいないよ。 余計なものを省いたコード晒してみな。
var i : integer; hoge : array[0..20] of TStringList; begin i := Random(10); hoge[i] := TStringList.Create; for i := 0 to 20 do begin hoge[i] := TStringList.Create; end; end; 例えばの話、こうした場合にエラーが起きてしまいます。
>オブジェクトがCreateされているものをさらにCreateしようとするとエラーになります。 これ、エラーになるの?
380 :
デフォルトの名無しさん :04/06/04 20:19
Delphi7始めて2時間くらいです。 タイプライブラリにDirectX7と8があるようですが どちらも「for Visual Basic」となっています。 これはどういう事でしょうか? DirectXはC向けとVB向けで宣言とか使い方が多少異なりますが Delphiで使うには、VB用の制限された奴で使うしかないのでしょうか? それともCと同じように直接dllを使えるのでしょうか?
そのコードじゃエラーにならないだろ。 メモリリークのバグはあるにしても。
本当に申し訳ないです。やっと原因に気づきました。。。 動的配列だったので、配列数の設定をしてませんでした... ほんとにお騒がせしました。
>>380 そのタイプライブラリはどこにあるのですか?
>>383 メニューの「プロジェクト」の「タイプライブラリの取り込み」です。
取り込んでみたらエディタウィンドウにズラズラ書式が出て来た・・・
これだけの機能・・・かな?
>>385 ありがとうございます。
うわー、英語だ・・・でもそれっぽい。
どっちでやろうかな?
>>365 ,366さん
すげっ!
感謝します。
VarIsClearってのは初めて見るんですけど、ムズい関数ですね。
// rsが空でなければ処理します。
if not VarIsClear(rs) then
↑
この2行、じーっと見つめてると何となく分かったような気分になってきますけど、
本当に理解できたかどうかは何とも。。。
取りあえず、何かレコードセット開いて、if RSCheck=false then とやれば、0件の場合の
逃げ道を作れることだけは分かりました(レコードセットが開かれてさえいれば、それがこの場合の
rsと名付けられた変数 ってことで、Delphiは勝手に納得してくれてるんですかね。いや、何ていうか、
このRSCheck関数は、処理の流れから考えると、たとえば、if RSCheck(MyRst)=false then みたいな
書き方をしたい気分に。。。)
ところで。
もしかして、以前レコードのいじり方教えてくれた方と同一人物ですか。
ファンクション名の付け方に、そこはかとなく共通成分の香りが。。。
389 :
デフォルトの名無しさん :04/06/05 01:22
すみません、質問です。 フォームの上にScrollBox1を貼ってalClientに広げまして、その上に640×480のサイズのImage1を貼ってあります。 Button1を押すとイメージダイアログが開いて任意の画像(BMP)を、 そのときに動的にTImageを生成して読み込みます。(parentプロパティはScrollBox1) いくつでも開けて、さらにマウスで移動できるようにしてあります。(読み込んだ画像をレイアウトするため) しかしImage1を印刷するためにImage1.Picture.Bitmap.Canvas.Draw(〜〜〜)などで 動的に生成してあるTImageオブジェクト→Image1へ描画しなければなりません・・・よね? 動的生成でなければ、例えばImage2→Image1への描画なら、 Image1.Picture.Bitmap.Canvas.Draw(Image2.Left,Image2.Top,Image2.Picture.Graphic) でいいと思うんです。 で、わからないのは、上のようにいくつ生成されるかわからないTImageオブジェクトをあるときすべてとらえて Image1に描画することです。 もし可能なら、印刷用のButton2のクリックイベントハンドラに記述するつもりなのです。 どなたかご教授願いませんでしょうか・・・m(_ _)m
begin //main writeln('Sinの値を求めるラジアンxと計算回数nを入力してください'); readln(x,n); i:=1; repeat c:=i div 2; ←―――――― f:=i-c*2; d:=1; if f=0 then d:=-1 ; e:=2*i-1; ke:=pow(x,e); x:=x+d*ke; i:=i+1; until (i>n) or (abs(ke)<0.00001); readln; end. これで、35行目(矢印のあるところ)が「この型には指定した演算子が使えません」と出ます どうしてか、1日中考えても分かりません お願いします、誰かお教え下さい _no
別に起動しているDOS窓にコマンドを送りたいのですが やっぱりAPIとか使わないと無理ですか?
>>389 転送先の Image1 を ScrollBox1 の上に乗せる必要はないのでは?
操作がややこしくなるのでやめた方がいい。
見えてる部分の転送は ScrollBox1.PaintTo() で簡単にできるはず。
見えてない部分も含めて ScrollBox1 上の TImage のイメージを
描画したければ、ScrollBox1.Controls[] を使って反復処理したら?
for I := 0 to ScrollBox1.ControlCount - 1 do
if (ScrollBox1.Controls[I] is TImage) and (ScrollBox1.Controls[I] <> Image1) then
Image1.Canvas.Draw(ScrollBox1.Controls[I].Left, ScrollBox1.Controls[I].Top,
TImage(ScrollBox1.Controls[I]).Picture.Graphic);
>>392 うおっ凄い
早速やってみます。ありがとうございました。
Image1は、作ってるプログラムの関係上TImageのほうが都合が良かったので使ってたんです。
>>390 どうしてって、div の使えない型なんだろ
div は右辺、左辺ともに整数型な必要がある
>>390 プログラムが何をしたいのかよくわからないけど、エラーの意味は
div 演算子は左辺も右辺も整数型でなければならないのに
そうなってないことを指摘してるんだと思う。
整数から実数への変換は自動で行われるけど、逆はできない。
c が実数で 2 で割った結果の小数部を切り捨てたいなら
c := Int(i / 2);
にしてみたら?
396 :
デフォルトの名無しさん :04/06/05 02:22
超初心者です。 Visual C.netをインストールしたいのですが、setup.exeを開くと 「このシステムにMicrosoft Visual C.net Standardをインストールするために必要な条件を満たしていません。Windowsコンポーネントアップデートセットアップをじっこうして 下さい」 とのメッセージが出てきます。 もうどうしたらいいのか分からないのでどなかか教えてください。
>>396 スレタイ100回音読して来い
話はそれからだ
>>394 >>395 すばやいレスありがとうございました
整数から実数への変換が自動で行われていたので、全く意識することがありませんでした _no
左右ともに整数型なんですね…ありがとうございました
100回読んできました、済みません。ちょと質問が高度すぎたようですね(笑) ここでは回答する方に回りたいと思います。
>399 「Visual C.net」ってなんですか? 「Visual C# .NET」または「Visual C++ .NET」ならよく聞く名前ですがね。 回答しろよ。おらおら。
401 :
デフォルトの名無しさん :04/06/05 03:26
C#板に逝け
402 :
デフォルトの名無しさん :04/06/05 04:01
データーベース使ったことないのに会社内のC/Sシステム作ることになりました。 お金ないのでLimuxサーバーとWinクライアントでFireBirdかInterBase6使おうかと考えてます。 そこで質問なんですが、アプリ開発中はデル付属のIBで開発してていいんでしょうか? IBE使って作成したアプリはFireBirdとかで問題なく使えるものなのでしょうか? デルファイ5proです。 よろしくお願いします。
>>392 できました!
報告までに。
マジでありがとうございました。
>>402 上司に聞けよ。
ここでの答えを鵜呑みにして社内システムを作らないでくれ。
頼むから。
そもそも簡易でいいから検証環境を作っ(ry
ツールバー用の良い感じのアイコンないですか? Windows標準っぽいの。
407 :
デフォルトの名無しさん :04/06/05 12:36
使いやすいHTMLエディタ教えてください。
FrontPage
>>388 > VarIsClearってのは初めて見るんですけど、ムズい関数ですね。
> // rsが空でなければ処理します。
> if not VarIsClear(rs) then
rsにレコードセットが返らないときもあるのでエラーにならないように書いています。
> もしかして、以前レコードのいじり方教えてくれた方と同一人物ですか。
> ファンクション名の付け方に、そこはかとなく共通成分の香りが。。。
たぶんそかも...
>>388 もしAccessのmdbファイルを使用しているなら下記を参照すると吉です。
Delphiでmdbを操作 - 001と002
http://www.geocities.jp/fjtkt/program/_frame.html Delphiでmdbファイルを作成してテーブルの設定をする方法が紹介されています。
なお、ADO・ADOXはADOのヘルプに使い方がVBで書かれています。
ADOのヘルプはWindowsのファイル検索でキーワード「ADO」で見つかると思います。
私のPCでは「Ado210.chm」がインスコされていました。
では
function foo(bar: dword): boo; external 'baz.dll' って自動的にstdcallになるんですか?
ならないのか・・・やられた・・・
質問させて下さい。 D&Dによる入力は理解できたけど、出力はどうやるんですか? リストボックスで選択されたファイルを他のアプリケーションに渡したいんですが… ヒントだけでもお願いします。
>>413 IDropSource
おまいさんの言う「入力」がDragAcceptFiles APIでファイルを受け取る動作なら道は険しいかもしらん
>>414 資料が見つかりました、ありがとうございます!!
がんがって搭載してみます。
416 :
デフォルトの名無しさん :04/06/05 18:29
procedure TForm1.Button1Click(Sender: TObject); var i:integer; j:integer; begin Edit1.Text :=IntToStr(2); Edit2.Text :=IntToStr(3); i := strtoint(Edit1.Text); j := strtoint(Edit2.Text); showmessage(i / j); end; end. i/j (=2/3) がExtendedだといわれてエラーがでます。 0.6666666 とか表示させたいのですがどうやたらいいですか?
>>416 関連してすこしだけ
integer 型は整数型なので、小数点とか扱うのは別の型で。
たぶん、最初のときだとinteger型で、ある程度ごまかしきくけど
今回のような計算には小数点以下を扱える Real やDoubleを使うといいです
var i,j:Double;
という感じで、型変換は、417さんの書いてある通り
IntToStr()を
FloatToStr()にしてあげればOKです
419 :
デフォルトの名無しさん :04/06/05 19:59
bmp := TBitmap.Create; Jpeg :=TJpegImage.Create ; Jpeg.LoadFromFile(Form2.Label1.Caption) ; bmp.assign(Jpeg); Form2.PaintBox1.Canvas.StretchDraw(Rect(0, 0, Round(bmp.Width),Round(bmp.Height)),bmp); こんなかたちでPaintBox上にJpgファイルを連続表示させているのですが 前に表示した画像より後に表示する画像のほうが小さい場合 前の画像の一部が残ったままになってしまいます。 どのような解決方法がるかお教えください。
420 :
デフォルトの名無しさん :04/06/05 20:01
Memo1.Lines.Addするとカーソル位置がクリアされてしまうんですが それを回避するにはどうすればいいですか?
>>419 StretchDrawする前にPaintBoxを塗りつぶす。
422 :
デフォルトの名無しさん :04/06/05 20:23
「塗りつぶす」に関して調べてみたのですが Canvas.Brush.Style := bsClear; だとまったく効果が現れませんでした。やっていることがまったく見当はずれなのでしょうか?お教えください
>>422 procedure TForm1.Button1Click(Sender: TObject);
begin
PaintBox1.Canvas.Brush.Color := cl3DLight;
PaintBox1.Canvas.FillRect(Rect(0,0,PaintBox1.Width, PaintBox1.Height));
//ここに描画処理
end;
やってる間は画面のアップデート止めないとちらつくだろうからそこは適当に
424 :
デフォルトの名無しさん :04/06/05 20:45
ありがとうございました!!!!!
425 :
デフォルトの名無しさん :04/06/05 20:54
可能か不可能かと問われれば、可能だろう。
427 :
デフォルトの名無しさん :04/06/05 22:23
もしご存知でしたらその方法を教えていただきたいのですが・・・・
Delphi ↑すいません、これなんて読むんですか? でるふぃー?
>428 でるふぁい
>>430 素のレスだったんですね・・・
StringListの特定の行の特定の場所に文字を挿入したいんですが、
どうすればできますか?
Insertメソッド
property ViewImage: TViewImage; = 縮小画像設定関連(ImgShare 参照) property VisibleCount: integer; = 表示アイテム数 property VisibleColCount: integer; = 表示列数 property VisibleRowCount: integer; = 表示行数 //ImgShare property LookAhead: Boolean; = 画像の先読み機能のOnOff(False の場合は、アイテムが表示されるまで画像の読込を行わない)
訂正 ×Insertメソッド ○Insert関数
>>432 どうもです。
ついでにもう一個、Delphi版のTP Lex/Yaccの使い方が分かりませぬ。。
どう使えばいいのか、親切な方教えてください。。。
436 :
デフォルトの名無しさん :04/06/05 23:15
>433 ありがとうございました。 このコンポーネントのヘルプに関しましては私の見る限りそこまで詳しく知ることができなかったのですが 皆様はどのようにしてそこまで各コンポーネントの詳細情報を得ることができるのか参考までにお聞かせください。
>>436 ついてきてたテキストファイルをコピペして貼っただけなのだが
438 :
デフォルトの名無しさん :04/06/05 23:27
//ImgShare property LookAhead: Boolean; = 画像の先読み機能のOnOff(False の場合は、アイテムが表示されるまで画像の読込を行わない) こいつだけは探し出せませんでした・・・・なんでだろう。 お手数かけましてすみませんでした。
ImgShare.txt
440 :
デフォルトの名無しさん :04/06/05 23:36
そのtxtは同封されてませんでした・・・・ Delphi5 Delphi6 Sample ImgPanel.txt ImSub.tct readme.txt のみでした。 img115.lzhだったんですがヴァージョン違いなのかな?
441 :
デフォルトの名無しさん :04/06/06 00:09
事故報告 ImgShare.txt は ver110のほうについでました。
442 :
デフォルトの名無しさん :04/06/06 01:04
form と paintboxが 一体化したような状態になり formの大きさが自由には変えられず paintboxを動かすことによってしかformサイズが変わらなくなってしまいました どうしたらいいですか?
>>442 Form の AutoSize プロパティが True になってないか?
TreeViewコントロールの選択アイテムを デスクトップやエクスプローラーにドラッグ&ドロップするにはどうすればいいのでしょうか?
Delphi OLE DragDrop で検索汁
TStringListのCommaTextを利用して、タブ文字区切りのCSVファイルを読み込んでいたのですが データ中の半角スペースまで区切り文字と判断してしまいます。 データ中によく半角スペースが出てくるのですが、 CommmaTextは諦めて、自前で処理するしかないのでしょうか?
447 :
デフォルトの名無しさん :04/06/06 09:30
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, ShellCtrls, StdCtrls, FileCtrl, ImgPanel, Jpeg, Unit2; procedure TForm1.Button1Click(Sender: TObject); begin Form1.Label1.Caption :='123'; Form2.Show; Form2.Label1.Caption :='1234'; end; なぜたかForm2.show; がとおりません?なんででしょうか?
デバッガでステップ実行してみた?それでも駄目?
449 :
デフォルトの名無しさん :04/06/06 09:41
すみませんがステップ実行というものがよくわかっておりません・・・・ Form2.Show; Form2.Label1.Caption :='1234'; この2行に関しまして両方をコメントアウトした場合は問題ないとおり、 どちらか一行でも有効にした場合には 「アドレスxxxxxxxxxxx でアドレスxxxxxxxxxxxxxxに対する読み込み違反が起こりました」とでます。
Form2 が自動生成の対象からはずれてるんだろ。 Form2 := TForm2.Create(Application); Form2.Show; Form2.Label1.Caption :='1234'; とかしてみれば
|\ ,. ‐''":::::::::::::;::::`'-、 |ヘ| /::::::::::::::;:/´ヾヘ;:::::::::ヽ |ヘ| /::::::::::((,/ `、::r、:::゙, | ̄| ,'::::::::::::i゙ \ / i::::i うぜーDel (∃⊂ヽ !::::::::::::| ● ● l::::| / 〉 使えないDELうぜってー! ─── └┘\ !::::::::::::! !:::!/\/ \/ \::::::::!"" ____ ""!::| \/ ──── ヽ |::::::| l, / ノ::i / `、 i:::::l、ヽ.,_ `''''" _,..イ:::::i / ───── ゙、 ヽ;i \ヽ,.l ̄_,l |:::/ / ゙、 ヽ`、 | / レ' / ────── ゙、 / `ヽ''" i. / / NEVADA |/ ─────── / |
ちなみにプロジェクトソースも見てみることをすすめる
453 :
デフォルトの名無しさん :04/06/06 09:45
StrToDWordってないですか? StrToIntだとDWordとの比較で警告されます。 無理やりキャストするのもあれですし。
454 :
デフォルトの名無しさん :04/06/06 09:47
結果変わりませんでした・・・・・一応もうちょっといろいろ試してみます。
ときどきDelphiに挑戦して挫折したのがアラシにくることはいつもどおりだな VB厨を名乗ってくるのもたいてい挫折したのだよね。
> StrToIntだとDWordとの比較で警告されます。 DWORD にキャストしたら
Del再起動書けたら問題なく動きました。ご迷惑おかけしました。 それにしてもこんなの初めてだよ・・・・・いみわかんっす。 いろいろどうもでした。
>>447 [プロジェクト|オプション]のフォームの自動生成の対象にForm2が入っているか確認。
入っていなければ"<"を押して追加する。
> 無理やりキャストするのもあれですし。 あれってなに。プログラマが十分承知していればキャストは無害だよ。
integer → DWORD のキャストって、符号の有無だけでしょ。 integer がつねに正であることが確実な場合は、キャストしてしまえばいい
>>446 CommaText に設定するまえに、半角空白を _ などに StringReplace で変換しておけば
設定後に再変換して半角空白にもどす
>>446 データの両端を ' ' でくくればいいんでないかい?
CommaTextの書式が違うんじゃないか?
> データの両端を ' ' でくくればいいんでないかい? データ区切りを自動化するために CommaText を使うわけだろ。そのまえに 分かっていればつかう必要はない
> CommaTextの書式が違うんじゃないか? わけわか
>>462 さんの方法でうまくいきました。
レスをくれた方ありがとうございます。
468 :
デフォルトの名無しさん :04/06/06 21:13
導入したコンポーネントを削除するにはどうしたらいいのですか? Indv Cliants Indv Servers Indv Intercepts Indv I/O Handlers Indy Misc かつて試しに入れてみたのですが今のところ必要ないので消しておきたいのです。隠すのではなく削除する方法を教えてください。
プロジェクトオプションから[パッケージ]を選んでいらない物を削除 デフォルトのチェックをONにするのを忘れずに。
DelphiってVBと同じに思えるんですが・・・
> DelphiってVBと同じに思えるんですが・・・ たとえばどこが?
全体的に
>>470 VC#やVC++やJBuilderやBCBも同じようなもんだよ
475 :
デフォルトの名無しさん :04/06/06 22:39
同じだと思うならとりあえずDelphi道を歩むことを薦めるね。 だんだんと先細りの道であるとことは否めんがスタート時の道幅は広く(スタートしやすい)それなりに道も整備されており(コンポの充実) 何より他より楽しい。 難点は地図(指導書)がないことかなぁ・・・・ とりあえず俺はそう思う。
同じだと思うならDelphiは進まないほうがいいだろ。 Delphiを作っているのはたった一社のBorlandだし、 そのBorlandでさえ.NETではDelphiよりもC#に力を入れている。
> Delphiを作っているのはたった一社のBorlandだし、
VB は複数の会社でつくってるのか?
> そのBorlandでさえ.NETではDelphiよりもC#に力を入れている。
だから、VB にしとけってか?
>>476 は全体に意味不明
同じに思えるんだったら好きにしたらいいだろ。
> そのBorlandでさえ.NETではDelphiよりもC#に力を入れている。 MS だって .NETでは VB よりも C# に力を入れている、と思うよ。
素人は見た目のポトペタ部分が同じにみえるんだろうなぁ。だから
>>473 は
ある意味正しい。そんな程度なら、何使っても同じだろうな。まったくのはじめて
プログラミングに入門するのがVBからだと思うと、ちょっと悲しい。まぁ、いいけど。
テキストボックスについて教えてください。 SendMessage(GetDlgItem(hWnd, IDC_MCDBEDIT), EM_REPLACESEL, 1, Longint(PChar('kkk'))); これでテキストボックスに文字(kkk)が追加されたのですが、取得ができません。 以下の記述ではダメでしょうか?なにか足りませんか? var buffer:string; 略 SendMessage(GetDlgItem(hWnd, IDC_MCDBEDIT), EM_GETLINE,100, Longint(Pchar(buffer))); MessageBox(hWnd, PChar(buffer),'取得', MB_OK);
>>480 procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
num:integer;
begin
num := SendMessage(GetDlgItem(hWnd, IDC_MCDBEDIT),WM_GETTEXTLENGTH,0,0);
s := StringOfChar(#0,num+1);
SendMessage(GetDlgItem(hWnd, IDC_MCDBEDIT),WM_GETTEXT,num+1,LPARAM(s));
MessageBox(Handle, PChar(s),'取得', MB_OK);
end;
あっ、EM_GETLINE か。 とりあえず、buffer の長さを確保していないのが誤り。StringOfChar() か SetLength() で十分な長さを予め確保しておくこと。
しかし、いまどきダイアログリソースを使う人がいるんだな、驚いた。
>>481 ,482
どうもです。
無事出来ました。ありがとうございました。
ネットで調べても分からなくて、本屋に参考書買いに行って
一冊もdelphi置いてなし、、、助かりました。
>>483 AL-mailのプラグインを作りたくて奮闘中です。
初めてのプログラミングなのでヨチヨチです・・・
> AL-mailのプラグインを作りたくて奮闘中です。 あっ、そういう事情ですか。失礼しました。がんばってください。
487 :
デフォルトの名無しさん :04/06/06 23:57
name : String に対して ある文字列(たとえば '木’ )が含まれているかどうかの判別方法を教えてください
>>487 AnsiPos() がゼロ以外を返すかどうかで判断
>>479 ExcelやWordなどでVBAが導入されているので、VBの構文に触れておくことは
決して悪いことではではないと思うよ。
まあVB6以下では真のプロにはなりにくいことも実感できると思うけど。
491 :
デフォルトの名無しさん :04/06/07 00:21
>>477 > だから、VB にしとけってか?
意味不明なのはお前の方。
>>476 のどこにVBにしとけってかいてあるんだ?
はっきり言ってお前、VBにコンプレックスあるだろ?
>>491 > VB は複数の会社でつくってるのか?
これには答えないつもりかよ?
>>491 疑問文であると分かりませんか? 日本語なんですけど。
StrUtilsって結構便利な関数多いよな。 今まで自作してたのと同機能のやつが2,3個あった・・・・あの手間はいったい//
おまいらマターリ汁
> あの手間はいったい 自作で間に合ってるようなのが多いでしょ。Delphi の最近のバージョンアップ ってそんなのばっか。
497 :
デフォルトの名無しさん :04/06/07 01:20
ImgPanelに関して質問です。 各サムネイル画像から少しずれたところをクリックすると アドレスxxxxxxxxxxx でアドレスxxxxxxxxxxxxxxに対する読み込み違反が起こりました と表示されます。 FrameやSpaceなども変えてみたのですがどうも変化がありません。 最も近い座標のパスを取得する もしくは エラーメッセージを出さない方法を教えてください。
>488 AnsiPos() こちらで実現可能でした。どうもです。 >489 AnsiContainsStr こちらは未定義の識別子と出てしまいました USESに何らかの追記が必要なのでしょうか?
499 :
デフォルトの名無しさん :04/06/07 01:30
>>492 いいかげんさぁ、VBを持ち出して対抗するの止めたら?
だから、Del厨はVBにコンプレックスあるといわれるんだよ。
言われるも何も真実だろw Del厨がVBにコンプレックスがあるのは。
502 :
デフォルトの名無しさん :04/06/07 01:35
>>494 そういうのを知らずに自分で作ってしまうことはよくあるね。
でもその努力は決して無駄なことじゃない。あなたは遠回りしたようだがいい体験をした。
>>500 そんなものはないよ。
向こうが勝手に粘着してくるだけだ。
それを無視できないのがDel厨の問題だけど。
>>410 さん
(何かこのスレ、伸びるの早いですね。ほんの1日か2日なのに、すごい亀レスしてるみたい)
情報ありがとうございます。
サンプルDLして試してみました。
mdb操作、かなりおもしろいです。
DelphiからのSQL発行はこれまでも実験的に何度かやってましたけど、
(まあ実際にはmdb側にアクションクエリつくって、Execute('クエリ名')
のケースが多い。おかげでmdb内はクエリだらけ)
DB自体つくれちゃうってのはかなり驚き。
いま職場では、PCの台数分Access入れてますけど、Delphiをモノにすれば
Accessのパッケージは1個で済む、かも(そもそもDelphiに手を着け始めたのは
それがもくろみ、つか、ささやかな希望)
すでにパーソナル版でつくったモノを、職場の比較的あたりさわりない業務で使って
ますが、自信がついたらPRO版買います(パーソナル版のストリンググリッドでは
あまりにもショボい。PRO版ならもっと見栄えのいい入出力画面が作れるはずですよね)
>>ADOのヘルプ
検索したらCドライブじゃないところから見つかりました。
AccessのCDを丸々コピーしたドライブ。。。インストールしてなかったのか(゚Д゚)
507 :
デフォルトの名無しさん :04/06/07 02:32
> Del厨がVBにコンプレックスがあるのは。 最高! 可笑しくて涙出た。VB は何しに来てるん?
>>453 既に解決してるかも知れないけど StrToInt64 の戻り値を
DWORD にキャストする。
VBとDelphiって、韓国と日本の関係に似ているね。
> あなたは遠回りしたようだがいい体験をした。 ぜんぜん遠回りではないよ。自分の実現したい機能が既存の関数にあるかどうか を必死に探すのもいいけどね。それがいつもあるわけではない。自分でつくって 十分テストできればそれで十分だろう。そうやって、基本的な関数を利用して より高度な機能の関数をつくって貯めていけば自分の財産となる。論理は言語が かわっても変わらないから、他の言語に対しても応用が効くし。 Delphi のように構造化言語とクラス型OOPLの中間のような場合では関数や 手続きがクラスの外に単独で実装できるが、Java や C# のような場合は、クラスの static メソッドにしなければならないね。そうやって、クラスも自作できるように なってくれば自然だよね。とにかく、このスレだけでなくて初心者の質問を見てみる と何でも既存の関数やコンポーネントやメソッド、プロパティーの設定だけで、すべ てのプログラムができてしまうんじゃないか、と勘違いしているように感じられる。 なんでも自作するのはそれはそれで問題だけど、自作しなくちゃできないものの方が 本当はオリジナルなものなんだ、と思うんだけどなぁ。
またVB厨かよ わざわざDelphiの質問スレまで来てご苦労な話だな
513 :
497だけど議論に埋もれたのでもう一度・・・・・ :04/06/07 11:54
ImgPanelに関して質問です。 各サムネイル画像から少しずれたところをクリックすると アドレスxxxxxxxxxxx でアドレスxxxxxxxxxxxxxxに対する読み込み違反が起こりました と表示されます。 FrameやSpaceなども変えてみたのですがどうも変化がありません。 最も近い座標のパスを取得する もしくは エラーメッセージを出さない方法を教えてください。
TLabel内のキャプション(文字列)を横書きじゃなくて 縦書きで表示させたいんですけど、なんていうプロパティをいじれば いいのでしょうか?宜しくお願いします。
>>506 私も最初は無料パーソナル版+ADOで遊んでいました。
現在はPRO版を購入してmdbとFirebirdを使用しています。
パーソナル版でDB処理を扱いだすとPRO版が無性にほしくなりますね。
516 :
よくわからない小僧 :04/06/07 12:21
Delphi8はDelphi6みたいに、ネイティブは開発できないのですかね?
>>514 改行したいキャプションが存在するFormでalt+F12でソース表示し
目的のキャプションの文字列のところを '一行目'#13'二行目' 等にする。
これを使えば一行くらいならちゃんと読める縦書きになります。
他のやり方は分からないので他の人にバトンタッチを(´ω`)
> 縦書きで表示させたいんですけど、なんていうプロパティをいじれば > いいのでしょうか? Font プロパティーをいじればいいですけど、簡単ではないです。
>>514 Delphi の TFont は回転に対応していないので、代わりに CreateFont API を
使って論理フォントを作る必要がある。(CreateFontIndirect でも OK)
このとき nEscapement パラメータに 2700 を指定し、lpszFace パラメータが
指すフォント名の頭に '@' を付ける。
作ったフォントが不要になったら DeleteObject で解放すること。
523 :
デフォルトの名無しさん :04/06/07 21:52
WINDOWサイズより大きな画像ファイルを表示させるとスクロール時にスムースに動きませんどうしたらいいですか?
>>523 WINDOW とは何のウィンドウですか?
画像ファイルはどんな形式でどのような方法で表示させているんですか?
スクロールとは何をスクロールしてるんですか?
画像を表示するのによく使われる TImage はウィンドウコントロールでは
ありませんし、当然スクロールバーもついてませんよね。
いまいち状況がよくわかりませんが。
525 :
デフォルトの名無しさん :04/06/07 22:24
アドレス07DE5059 で アドレス FFFFFFFF に対する読み込み違反が起こりました。 このメッセージはどういったことを意味し どうすることによりエラー回避が可能になるのでしょうか?
>>523 Form1.DoubleBuffered := True;
とか?
>>525 配列の範囲を越えてアクセスしてるとか、オブジェクトを2回Freeしてるとか、
CreateしてないオブジェクトをFreeしてるとか・・・あとどんなのがあるかな?
527 :
デフォルトの名無しさん :04/06/07 22:29
526 ありがとうございました。たしかにFreeの重複がありました。 あれらの文字列からどのようにそれらの情報を読み取ることができるのでしょうか?
>>527 「読み込み違反」は割り当てられてないメモリ領域にアクセスしたときに
発生すると思うので、それっぽい状況を想像してみただけ。
アドレスとかは全然見てない。
bmp := TBitmap.Create; Jpeg :=TJpegImage.Create ; Jpeg.LoadFromFile(Form1.Label1.Caption) ; bmp.assign(Jpeg); PaintBox1.Height := bmp.Height; PaintBox1.Width := bmp.Width; PaintBox1.Canvas.Brush.Color := cl3DLight; PaintBox1.Canvas.FillRect(Rect(0,0,PaintBox1.Width, PaintBox1.Height)); PaintBox1.Canvas.StretchDraw(Rect(0, 0, Round(bmp.Width),Round(bmp.Width)),bmp); 上記の形でPaintBoxサイズが大きくなりそれにともないformサイズが大きくなった場合Formスクロールするごとに画像を読み込みに一定いるような感じがあります。 よりスムースに表示させる方法をお教えください。
>>529 念のため確認しておきますが、最初の行から全部を PaintBox1.OnPaint に
書いてるわけじゃないですよね?
読み込み時
ビットマップへの転写は Assign じゃなくて、Width と Height を設定してから
bmp.Canvas.Draw を使うべき。(リサイズを伴う場合は StretchDraw)
これは TJPEGImage の内部データはインスタンスの外部で保持されていて、
メンバーへのアクセスはメソッドで提供されるので、アクセス回数を可能な限り
減らすことで高速化できるため。
描画時
FillRect はしなくてもいいんじゃないの?
PaintBox1 への描写時にはリサイズしないので Draw を使うべき。
その他
透過しないなら csOpaque を PaintBox の ControlStyle に加えておくと
クリッピングしないのでちらつきが抑えられる。
532 :
デフォルトの名無しさん :04/06/07 23:27
>419-423 でFillRect使うことを教わりこれでうまいこといっていたのですが、どのような問題点が考えられるのですか? その他のこともいろいろためさせていただきます。ありがとうございました。
>>532 PaintBox1とbmpのサイズが同じなら、DrawでPaintBox1全体に描画される
から、FillRectで塗り潰す意味がないんじゃないの?という話なんだけど。
534 :
デフォルトの名無しさん :04/06/07 23:36
なるほど!!! 無知な私にここまで付き合っていただきありがとうございます。
PaintBoxを元のサイズより小さくした場合、Formに前回描画したものが
残るかどうか覚えてないんだけど、もし残ったと仮定してPaintBoxを小さくした
後にFillRectしても塗り潰されるのは小さくなったPaintBox内だけだから
やっぱり意味がなく、無駄に遅くなるだけ。
>>419-423 とは状況が変わってきてるから、そのままでは適用できなく
なってきてるよ。
文字の幅を得る時に、Canvas.TextWidthだと遅いので、 Canvas.TextWidthよりも高速に文字幅を取得する方法があったら教えてください。
537 :
デフォルトの名無しさん :04/06/08 00:11
bmp := TBitmap.Create; Jpeg :=TJpegImage.Create ; Jpeg.LoadFromFile(Form1.Label1.Caption) ; Form2.PaintBox1.Height := Jpeg.Height; Form2.PaintBox1.Width := Jpeg.Width; bmp.Canvas.Draw(0,0,Jpeg); Form2.PaintBox1.Canvas.Brush.Color := cl3DLight; Form2.PaintBox1.Canvas.Draw(0,0,bmp); 教えていただいたことをいくつか取り入れてみたつもりなのですが一向に反応がありません・・・・ Jpegまでは問題なく取得で着てはいるのですが。
538 :
デフォルトの名無しさん :04/06/08 00:13
寸ませんおおボケしてました・・・・ Paintbox.Height Width ではなく bmp.Height 二修正したら問題なく行きました。本と寸ませんです。
539 :
デフォルトの名無しさん :04/06/08 00:26
>529 >537 で比べるとかなり体感速度が遅くなったように感じちょっと厳しいっす。 より高速な処理を望むにはどうしたらよりでしょうか?
質問者は、どんなイベントハンドラでコードを実行しているのか一向に答えない。 なぜ、TImage ではなく TPaintBox なのか? なにをどうスクロールしているのか? 普通は TForm のスクロールを利用するんじゃなくて、TScrollBox の中に TImage を入れるんじゃないの? そうすると、画像の設定は一回で済む。あとはコードいらず。
> 文字の幅を得る時に、Canvas.TextWidthだと遅いので、 どのように「遅い」のですか? なにと比較して遅いのですか? > Canvas.TextWidthよりも高速に文字幅を取得する方法があったら教えてください。 そういう方法があったら、Canvas.TextWidth は誰も使わないだろうな。っていうか、 このメソッドはその方法で実装するだろうね。
>>536 状況によっては GetTextExtentPoint32 などの API を直接呼ぶ方が
わずかに速いかも。Canvas がなくてわざわざ作る場合とか。
DC 使わずにフォントを操作するのは初心者レベルじゃないと思いますよ。
>>539 素直に TImage を使ったらどうなの? パレットの面倒も勝手に見てくれるし。
543 :
デフォルトの名無しさん :04/06/08 00:56
大変失礼しました。 画像ヴューアーを作っておりimgPanelより取得した画像ファイルをPaintBoxに出力。 そのごPaintoBoxをマウス左右クリックすることにより同フォルダ内の画像を順順に表示させたいと考えております。 以下に現在のソースの一部を示します。 procedure TForm2.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var Jpeg :TJpegImage; bmp:TBitmap; i:Single; j:Single; begin {1} if Button = mbLeft then begin {2} if StrToInt(Form1.Label2.Caption) < Form1.FileListBox1.Items.Count-1 then {Form1.Label2.Caption := IntToStr(FileListBox1.Items.IndexOf(ImgPanel1.Selected.DisplayName));) begin {3} Form1.Label2.Caption := inttostr(strtoint(Form1.Label2.Caption) +1); Form1.Label1.Caption := Form1.FileListBox1.Items[strtoint(Form1.Label2.Caption)]; bmp := TBitmap.Create; Jpeg :=TJpegImage.Create ; Jpeg.LoadFromFile(Form1.Label1.Caption) ; bmp.assign(Jpeg); i := Form2.PaintBox1.Height/bmp.Height; {以下 画像をFormいっぱいにする} j :=Form2.PaintBox1.Width/bmp.Width; Form2.Caption := Form1.Label1.Caption; if j<i then begin {4-2} PaintBox1.Canvas.Brush.Color := cl3DLight; PaintBox1.Canvas.FillRect(Rect(0,0,PaintBox1.Width, PaintBox1.Height)); PaintBox1.Canvas.StretchDraw(Rect(0, 0, Round(bmp.Width*j),Round(bmp.Width*j)),bmp); Form2.Caption := Form1.Label1.Caption; end; {4-2} end; {3} end; {2}
TImage を使うことで画像のサイズの変化に伴う比例計算も再描画も背景描画も 全部自動的に解決する
そうか・・imgPanelの質問をしてたのもキサマだったのか。
TImageって重くね?
> TImageって重くね? べつに
TPaintBox 肉ラベルと10倍くらい遅いらしい
>>543 jpg → bmp の変換は無駄。Canvas.StretchDraw() では jpg も描ける
> PaintBox1.Canvas.Brush.Color := cl3DLight;
> PaintBox1.Canvas.FillRect(Rect(0,0,PaintBox1.Width, PaintBox1.Height));
これは画像変更にともなう背景の更新をするものだろうが
PaintBox1.Refresh;
で OK 。再描画に OnPaint イベントハンドラを使っていなければね。
×肉ラベル ○に比べる 俺のIMEはアフォか…○| ̄|_
551 :
デフォルトの名無しさん :04/06/08 01:37
>545 Imgpanelなどのことに関する質問で何らかの不快な思いをさせてしまっていたのなら大変申し訳ありませんでした。 できれば今後もこのスレにはお世話になっていきたいと思っておりますので、皆様を不快に感じさせないようもう少し気をつけて書き込みさせていただきます。 このたびは大変申し訳ありませんでした。
> TPaintBox 肉ラベルと10倍くらい遅いらしい 迷信
> Imgpanelなどのことに関する質問で何らかの不快な思いをさせてしまっていたのなら 別に不快ではないが、標準以外のカスタムコンポーネントについて延々と質問するのは ちょっと筋違いな気がするね。作者に訊くのが本筋だと思うよ。
555 :
デフォルトの名無しさん :04/06/08 01:41
>554 アドヴァイスありがとうございました。以後そうさせていただきます
TPaintBox では再描画をするために普通は OnPaint イベントハンドラに
描画コードを書く。TImage は自分で画像バッファを持っているので再描画を
自動的にするだけ。
>>543 のようなコードでは再描画されないので、例えば
最小化から復帰したときなどでは画像が消えてしまう。
JPEG の場合、読み込みに時間がかかるので、画像ビューアみたいなのだと 暇なときに何枚か先まで読んどいて必要な時に Picture に放り込めば あまり気にならないと思う。
558 :
デフォルトの名無しさん :04/06/08 03:55
SpeedButtonにイメージエディタで作ったicoふぁいるを表示させたいのですがどうしたらいいですか?
>>558 TSpeedButtonのプロパティに Glyphだかなんだかがあるので
オブジェクトインスペクタで設定できる と思う。
(゚д゚)俺いま嘘付いた・・・
(゚д゚)読めた! TimageListにicoファイルを読み込んでおいて imageList1.GetBitmap(0,SpeedButton1.Glyph); だ。確か左下の1ピクセルの色がが透明色になっちゃうので注意、と。
(゚д゚)ごめんやっぱりこれだとダメかもしれん。 うまくいかなかった。次の人タノム
おねぇさんが
>>560 への罵倒が来ないようにおまじないしてあ・げ・る♥
おまじないの効果により、おねぇさんを罵倒するスレになりました。
自分で尻をたたけ! (;´д`)ハァハァ
>肉ラベル おもいっきり笑った。 腹いてーよ。
559でOKなんじゃないの? え?なにがまずいの?
TSpeedButtonのGlyphはビットマップオンリーです。 自前でicoをビットマップに変換してから使いませう。
569 :
デフォルトの名無しさん :04/06/08 15:32
Delphiのイメージエディタでアイコン作成してTSpeedButtonのGlyph で読み込ませてみたのですが 黒色にさせるつもりのところが灰色(透過色?)に表示されてしまいます。どうしたらいいですか?
ちょっとはヘルプ読んでよ。 注意ビットマップの左下のピクセルは「透過」色用に予約されています。 ビットマップで左下に位置するピクセルはすべて透過になります。
delphi7を買おうと思うんだけど高いよね?
8買うとおまけで7ついてくるよ
なにと比べて高いの?
575 :
デフォルトの名無しさん :04/06/08 16:39
ただより高いものはなし
で、7か8どっち買えばいいの?
577 :
デフォルトの名無しさん :04/06/08 16:46
現在DElphiを起動する際 Project1.dpr ファイルをクリックもしくは Delphiを起動しファイル→開くから Project1.dpr ファイルを選択しております。 Form1 Form2 を二つ使うアプリを作成中なのですがForm1(Unit1.pas)のみがともに起動し そのあと手動でUnit2.pasを起動しております。 これをみっつのファイル同時に開かせるにはどうしたらよいですか?
[ツール|環境オプション]設定-自動保存の設定-プロジェクトデスクトップ
>>577 開くダイアログで複数選択する。
dpr が一番左になるようにしないと駄目みたい。
580 :
デフォルトの名無しさん :04/06/08 17:08
program Project1; uses Forms, Unit1 in 'Unit1.pas' {Form1}; ここらへんとか {$R *.res} begin Application.Initialize; Application.CreateForm(TForm1, Form1); ここらへん Application.Run; end. dprにUnit2追記とかして何とかなったりするのかな?
「ファイルを開く」と Form2.Show を混同してるんじゃないの
>>581 > そのあと手動でUnit2.pasを起動しております。
たしかに
583 :
デフォルトの名無しさん :04/06/08 17:16
混同しているのではないのだと思いますが、 >579 さんがおっしゃっていることに起こる動作をワンタッチでできないものかなぁという質問でした。
[ファイル]-[開き直す]
[表示]-[プロジェクトマネージャ]
586 :
デフォルトの名無しさん :04/06/08 17:37
579ga 一番手っ取り早いのかなぁ・・・なんとかしたい。
>>586 578に書いてあるやつでいいんじゃないの?
578に書いてあるように設定して, unit2とか必要なものを開いてからdelphiを再
起動すればよし.
588 :
デフォルトの名無しさん :04/06/08 17:58
おおなるほど!!! dprからではなく Delphi起動によって閉じたときに使っていたものもひらかれるんですね。 ありがとうございました。
ずーっと開かれ続けるんじゃ
590 :
デフォルトの名無しさん :04/06/08 18:42
jpeg画像の拡張子に関しましていろいろ調べてみたのですが jpg JPG jpeg *.jfif *.jpe 下記二つに関しては見たことはありませんが、調べたらこんなんまででてきたので値とびっくりです。 上記三つ以外に一般的に使われていると思われるのありますでしょうか?
バーチャルメモリーが4096以上残る場合 どこか解放を忘れてると思って間違いないですか? Delphi6です クラスをいっぱい作ってるのですが 全部解放してるかどうかの確認はしてないので不安です
MemCheck使え
ちょっと意見を聞かせてください。 現在、とあるプログラムを製作中で半年ほどかけて全体の半分ぐらいまで出来てきました。 一番多用されるデータがあるのですが、このデータの形式を変えれば 劇的にデータサイズが減らせることに最近気が付きました。(データのサイズが1/3程度になる) しかし、データの形式自体が変わってしまうためプログラムの多くの部分を改修せねばなりません。 プログラムの大部分の改修を覚悟してデータ形式の変更を実施したほうがいいのでしょうか?
>>593 バックアップしてすこし試してみればいい。
>>593 データの量が莫大なら仕様変更。
量が少なくてそれほどメモリ食ってないならそのまま
>>593 ・現状データサイズの大きさが問題になっているか
・仕様変更による遅延が問題になりうるか
・完成した後に変更した場合、すぐ修正する場合と比べて修正箇所が倍になるか、
データのコンバート等の余分な作業が発生しないか。
・データ構造はそのままで、データにアクセスする部分を一元化して、
後から最小限の修正でデータ構造を差し替えられるように変更することは可能か
あたりを考えてみればいいんじゃないの。
一般論としてはなんとも言いようがないよ。
>>593 データに変更があってもプログラムの多くを改修しなくて良いように、
DB−DOC−FORM
の構造に作り直しとけ。
話はそれからだ。
・FORMはDOCクラスしか見ちゃいけない。
・DOCは構造体配列+データのロード、更新メソッド
>DB−DOC−FORM なんだこりゃw
みなさんありがとうございます。 結局、現状のバックアップをとって改修することに決めました。 ああ、恨むべきは自分の才能の無さかなぁ・・。 なんで最初にデータの仕様を考えたときに思いつかなかったのかな・・。
CPad for LSI C-86を設定してみたのですが、 ファイルを保存するときは ファイル名.exeとしなければならないのでしょうか?
お前ら毎日毎日スレ速ぇ・・・ マターリ頼む。 まるで売れてて流行っとるみたいじゃんか。
売れてて流行っとるんだが。
>>603 レスありがとうございます。
そういうふうにしたら、コンパイルのときに
c\〜.exeがみつかりませんとなるのですが…
605 :
デフォルトの名無しさん :04/06/08 21:22
Delphiの練習で神経衰弱ゲームを作ろうと思ったのですが、 52枚のカードに対応した52個のスピードボタンとOnClickイベントを ダラダラと52回並べて書くのはいかにも効率が悪いと感じました。 こういう、同じようなイベント処理がたくさん出てくる時に 使うべきテクニックを教えてください。 キーワードがわかれば、あとは自分でぐぐって調べてみます。 よろしくお願いします。
606 :
デフォルトの名無しさん :04/06/08 21:26
どなたかこのスレのpart13 htmlにしてどこかにあげていただけないでしょうか?お願いします。
スピードボタンの Tag に数値を設定するとイベントハンドラは一つで済む。 Sender を TSpeedButton にキャストして Tag の数値を見れば、どのカードが クリックされたのか分かる。 101 スペードにエース 102 スペードの2 ... 413 ダイヤのキング とか。
デコードを簡単にするためには $11 スペードのエース $12 スペードの2 ... $1D スペードのキング ... $4D ダイヤのキング
>>605 1.各スピードボタンのTagプロパティに固有の番号を与える
2.スピードボタンを全部複数選択
3.OnClickイベントを作成(各スピードボタンのイベントを一つのメソッドで共有できる)
4.Sender引数をスピードボタンにキャスト(Senderにはそのイベントを起こしたボタンのオブジェクトが入る)
5.キャストしたSenderのTagプロパティを見て処理を分岐(case文使うかな?)
こんな感じ
procedure TForm1.ButtonClick(Sender:TObject);
begin
case (Sender as TSpeedButton).Tag do
〜〜〜〜〜〜
end;
end;
>>606 ABoneのdatファイルをDelWikiの2chミラーにうpした。
htmlへの変換がわかんないから自分でやっとくれ。
>>590 jpegってのは作業部会の名前(Joint Photographic Experts Group)の略であって、画像フォーマット名じゃないよ。
で、いわゆるjpeg画像の中で一般的に使われるフォーマットがJFIFというのがあるんで、jfifという拡張子が付いている画像もあるんじゃないんだろうか。
jpgとjpeは拡張子が3文字しか対応していないシステム向けの設定ですね。普通はjpgとするけど、jpegをそのまま持ってきたときに最後の一文字が削られてjpeになる可能性もあるので、それも登録してあるという話。
jfif以外にJPEG-TIFF形式とかExif形式とかの形式もある。
Frm1, Frm2, ・・・複数のフォームから自由に使える関数ってのは、 どこに書けばいいんですか
publicにでも書いとけば?
privateに書くとそのフォームからしか使えない publicに書くとっどこからも使える
そういう意味じゃなくてグローバル変数のことじゃない? var Form1: TForm1; のところに書けばいいと思う。
CGIプログラムをWeb App Debbugerでデッバグしたいと 考えてるんですが、どうやっても対象プログラムが Form1の表示前後で止まって、フォーム上で砂時計 のままです。 停止させると、いつもntddl.NtWaitForSingleObject:で ループしてるみたいです。もしかして、これが普通? なお、プロジェクト作成時に自動的に付加される部分は まったく触ってません。 なにかヒントはないでしょうか?
>>615 >privateに書くとそのフォームからしか使えない
×フォーム
○ユニット
だな
>>613 IntToStr() はどのユニットからも使えるよね。正確にいうと、uses に SysUtils を
含めるとどのユニットからも使える。汎用の関数は、Form を定義しているユニットから
独立させて、それ専用のユニットファイル、例えば MyUtils.pas などのユニットの
interface 部に宣言しておくと、そのユニットを uses するとどのユニットファイルか
らも使えるようになる。
新規作成 - ユニットファイル で骨組みつくってから、名前を付けて保存ね。
↓以下の文書いて投稿して寝ようとしたところで、
>>621 氏のカキコ目にしたら目が覚めました。
もうひと頑張りいきます
>>613 , 614, 615, 616
レスかんしゃです
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
これの、public と end の間に function〜書いたら怒られました
var
Form1: TForm1
のところに function 書いてもやっぱり怒られました。
どのフォームからでも使える関数を、フォーム1のパスに書くというのも何だか変な気がしたので
ためしに1つ上の階、というか、project1のソースのところに適当に書き散らしてみたら、
やっぱり怒られました。
自分的にはもはや打つ手なしという感じなので、ダメなら各フォームごとに
同じ関数くりかえし書くという妥協案を用意した上で、取りあえず寝ます
(本日はくたくたです)
ソースファイルを見てみることをすすめるよ。SysUtils.pas とかの。 personal ユーザなら宣言部だけの SysUtils.int があるはずだから それをみると感じがつかめる。
例 ------------------------------ unit MyUtils; interface uses SysUtils; function SumTwo(const V1,V2:integer):integer; implementation function SumTwo(const V1,V2:integer):integer; begin result := V1 + V2; end; end. -------------------------------
使用例 var Form1: TForm1; implementation {$R *.DFM} uses MyUtils; procedure TForm1.Button1Click(Sender: TObject); begin Label1.Caption := IntToStr(SumTwo(3,5)); end;
>>614 様---
>>626 様、お騒がせしました
ようやく、できました
心安らかに寝れます。
{$R *.dfm}
↑
↓
uses unit何ちゃら, unit何ちゃら・・・;
この二つはどっちが上でもいいのかな。
どっちも問題なく実行できちゃいました。
何はともあれ、おやすみなさい
629 :
デフォルトの名無しさん :04/06/09 13:47
過去ログdat&htmlあげてくれた方ありがとうございました。 このスレの方々は皆さんとても親切な方が多くチョコチョコ見させてもらっております。 とてもいい雰囲気のスレですね。
630 :
デフォルトの名無しさん :04/06/09 14:14
>612 ファイルの形式を調べる方法に関して拡張子によつ判別しか思いつかず 以下のような見苦しいものになってしまっているのですが もう少しスマートな方法などありますでしょうか? AnsiCOntaintStr の引数[2]にOrなどが使えればと思うところなのですが適切な関数などもありますでしょうか? count := 0; if(AnsiContainsStr(Form1.ImgPanel1.Selected.DisplayName,'jpg') = True) { 文字列にjpgがふくまれていたら count++} then begin count := count+1; end else if(AnsiContainsStr(Form1.ImgPanel1.Selected.DisplayName,'jpeg') = True) { else 文字列にjpgがふくまれていたら count++} then begin count := count+1; end else if(AnsiContainsStr(Form1.ImgPanel1.Selected.DisplayName,'JPG') = True) { else文字列にjpgがふくまれていたら count++} then begin count := count+1; end if count > 0 then {countが1以上ならJPEGファイル} begin
if AnsiMatchText(ExtractFileExt(DisplayName), ['.jpg', '.jpeg']) then // 大文字小文字を区別せずに判定
var FileName: string; begin FileName := 'C:\test.jpg'; if AnsiLowerCase(ExtractFileExt(FileName)) in ['.jpg', '.jpe', '.jpeg', '.jfif', ] then begin //もにゅもにゅ end; end;
>in ['.jpg', '.jpe', '.jpeg', '.jfif', ] ネタか?
634 :
デフォルトの名無しさん :04/06/09 14:41
>631-633 ありがとうございました。
635 :
デフォルトの名無しさん :04/06/09 19:06
大学でDelphi6を使って計算とかしてるんですけど、 そもそもDelphiってどんなことができるんですか? 物凄く可能性が大きいプログラム開発ソフトなんですか? PC初心者なので、いまいちよくわかりません。 どなたか教えてください。
PByteArrayの要素数を求めたいのですが、Lengthだと求められません。 なにか良い方法はないですか?
ない。 ポインタと一緒に要素数を受け取るしかない。
>>636 PByteArray は Byte 配列へのポインタであって、Byte へのポインタの配列ではない。
1 つのポインタに対して要素数という概念は存在しない。
type
PByteArray = ^TByteArray;
TByteArray = array[0..32767] of Byte;
>>635 windowsアプリケーションを作成するためのソフトです
OSを書くといって用途には向かないでしょう
>>635 >そもそもDelphiってどんなことができるんですか?
Delphiで何かをするというよりは、Delphiで作ったソフトウェアで何かをする。
641 :
デフォルトの名無しさん :04/06/09 21:39
>物凄く可能性が大きいプログラム開発ソフトなんですか? Delphiに限った話ではないが、プログラマ次第。
643 :
デフォルトの名無しさん :04/06/10 12:23
DirectX7のDirect3DXをDelphiで使うには、どうすればいいですか?
644 :
デフォルトの名無しさん :04/06/10 16:47
finalization部で発生するEAccessViolationをexceptしたいんですが、 Runtime Error216で強制終了してしまいます。 どうすればexceptできるようになりますか?
二重にFreeしてるとか? まず例外を起こさないようにすることが先決では?
finalization 部に実装コードを書かずに interface 部で宣言した手続きを 呼び出す形にして、その手続きの中で例外処理したらどうですか?
>>645 バグがあるわけではなくとあるデバッグ用に意図的に起こしてるんです。
>>646 既にそうなってるんですが、駄目みたいです。
よく考えたらSysUtilsをusesしてないので
exceptしようにもその例外クラス(SysUtils.Exception)が存在していことに気がついた・・・
exceptは諦めるとして何とか終わらないで済む方法はないですかね。
例外オブジェクトを扱うには SysUtils を uses しないと駄目でしょ。 interface 部で uses すれば finalization 部でも使えると思います。
質問です。 今プリンタにAPIを使用して印刷処理をしています。 印刷中止ボタンが押されたら AbortDoc(FHandle); で中止処理をしたいのですが、ジョブが削除できません。 これだけではだめなのでしょうか?
レスありがとうございます。
色々検索して試したりしながら、やってみたのですがどうしても上手くいきません。
改行コードを使ってもいいのですが、縦書きでの()を表示しないといけないので、そうすると
(
テ
ス
ト
)
このようになってしまうのです。
何かいい方法がないでしょうか?
>>521 もしよかったらサンプルコードなどを載せていただけないでしょうか?
ちなみにネットで見つけた↓のようなサンプルコードを試してみたのですが、上手くいきませんでした。 何かコードに問題があるようでしたら、指摘して下さい。宜しくお願いします。 // テキストを縦書き(回転)描画する procedure TForm1.TextOutTategaki(Canvas: TCanvas; x, y: Integer; s: String); var lfText: TLOGFONT; // フォント情報(SDK の‘LOGFONT’を参照) hfNew, hfOld: HFONT; // フォントハンドル begin // フォント情報を Canvas.Font から取得 GetObject(Canvas.Font.Handle, sizeof(TLOGFONT), @lfText); // フォント情報の変更(この場合は表示角度:反時計回り) lfText.lfEscapement := 270 * 10; // 任意の角度を指定可能 lfText.lfOrientation := lfText.lfEscapement; lfText.lfClipPrecision := lfText.lfClipPrecision or CLIP_LH_ANGLES; // 変更したフォント情報を用いて、新しいフォントハンドルを作成 hfNew := CreateFontIndirect(lfText); // 新しいフォントハンドルをデバイスコンテキストに選択し、 // それまで選択されていたフォントハンドルを保存 hfOld := SelectObject(Canvas.Handle, hfNew); // 選択したフォントハンドルを用いてテキストを描画 // この回転角度の場合は、座標(x, y) が描画領域の右上隅になる Canvas.TextOut(x, y, s); // 元のフォントハンドルハンドルを選択し戻す SelectObject(Canvas.Handle, hfOld); // 作成したフォントハンドルを削除 DeleteObject(hfNew); end;
GetObject 〜 CreateFontIndirect の間を次のようにしてみて。 GetObject(Canvas.Font.Handle, SizeOf(TLogFont), @lfText); // 回転角の指定 lfText.lfEscapement := 270 * 10; // フォント名を 1 バイト後ろにずらす StrMove(@lfText.lfFaceName[1], @lfText.lfFaceName[0], LF_FACESIZE - 2); // フォント名の先頭に '@' を入れる (縦書きフォント) lfText.lfFaceName[0] := '@'; // 変更したフォント情報を用いて、新しいフォントハンドルを作成 hfNew := CreateFontIndirect(lfText);
GetObject() する前に Font.Name := '@'+Font.Name; の方が簡単では?
>>652 レスありがとうございます。
ご指摘通りにしてみたのですが、相変わらず上手くいきませんでした。
何か単純なミスがないかもう一度ソースを見直してみます。
どううまくいかないかを書かないんだよなぁー、初心者って。
>>655 すみません。テキストが横書きのまま何も変化しない、ということです。
失礼しました。
Delphi6 で TWebBrowser を使用しているのですが、 TIdHTTP.Get で取得したHTMLの文字列を直接ブラウズするには どうすればよいでしょうか? TWebBrowser.Document にセット出来ればよいのですが。
CreateFontIndirect の前で止めて lfText の中身を確認してみたら? lfFontName の先頭に '@' が入ってますか? あと、Canvas.TextOut の代わりに TextOut(Canvas.Handle, X, Y, PChar(S), Length(S)); にしてみたらどうなりますか?
Thu, 10 Jun 2004 09:53:32 GMT をTDateTimeに変換するにはどうすればいいでしょうか?
>>657 紹介頂いた方法でできました。
ありがとうございます。
>>659 指摘通りにしましたが、相変わらずです。
@もちゃんと入ってました。
何でこちらだとできないんでしょう?
>>660 procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
st:integer;
dt:TDateTime;
begin
s := 'Thu, 10 Jun 2004 09:53:32 GMT';
st := Pos(' ',s);
dt := VarToDateTime(Copy(s,st+1,Length(s)-st-4));
Label1.Caption := DateTimeToStr(dt); // 確認
end;
>>662 私の環境では以下のコードでうまくいくようですがおかしいですね。
PaintBox1 の OnPaint を使って描画しています。
procedure TForm1.PaintBox1Paint(Sender: TObject);
var
S: string;
X, Y: Integer;
LF: TLogFont;
NewFont, OldFont: HFONT;
begin
S := '「文字列。」';
X := 20;
Y := 10;
GetObject(PaintBox1.Font.Handle, SizeOf(TLogFont), @LF);
LF.lfEscapement := 2700;
StrMove(@LF.lfFaceName[1], @LF.lfFaceName[0], LF_FACESIZE - 2);
LF.lfFaceName[0] := '@';
NewFont := CreateFontIndirect(LF);
OldFont := SelectObject(PaintBox1.Canvas.Handle, NewFont);
TextOut(PaintBox1.Canvas.Handle, X, Y, PChar(S), Length(S));
SelectObject(PaintBox1.Canvas.Handle, OldFont);
DeleteObject(NewFont);
end;
Del6パーソナルをインストしたのですが、プログラム未経験の私でも 参考になるHPを見ながら勉強すれば、アプリの1つくらい作れるようになりますでしょうか。
>>665 やる気次第。
「お前には無理」と言ったらどうするつもりなのだろう?
>>665 メモ帳もどきぐらいならすぐ作れるよ。
機能面で高望みしないならインターネットブラウザーなんかも。
TMenuItemのショートカットキーを一時的に無効にしたいのですがどのようにすればできるでしょうか?
いくら「くだすれ」でも、サンプルコードを要求するのは図々しいと思う。
そう思うんだったら、無視するとよいのでは。 ごちゃごちゃ説明するより、コードを示して解決するのが早道という場合もあるさ。
>>671 いや、オレはサンプルコードも出されないヘタレだけどさ。
「図々しいな」と思ってる人もいるぞ、と。
そう思いながらレスしてもらいたい、と。
>>672 >「図々しいな」と思ってる人もいるぞ、と。
はい、そう思っている人もいるんだな、ということは想像できます。
ま、しかし、
自分が持ってるコードや簡単にコピペで示すことが出来る場合は、コードで
解決できればそれに超したことはない、と思っているひともいると。
>>674 そんな倉庫みたいなとこに貼れるかよ。
ここに貼るなというのも図々しい要求だと思うぞ。
くだすれの数スレ前はけっこうバンバン貼られていたんだけどな。 別に要求することもされることもなく自然に。 最近自分で調べないクレクレ君が増えているのではないかと思う。
つーか、誰がサンプルコード要求してるの? サンプルコードを要求するレスがあって、それに対して「図々しいな」ならわかるが、 いきなり「図々しいな」といわれれても話にのれない。
また変なのが涌いてきたな 別にここは回答するのが義務じゃないんだよ 出したくないものは出さなくてもいいし 出せるものは出す 何か問題でもあるか? ここのレベルが低すぎて気に入らないならワンランク上のスレに移動するがよろしい
ちょっと前のコードはバグが潜んでいるよ。
682 :
デフォルトの名無しさん :04/06/11 09:11
RSSのコンポーネントないっすか? マウスジェスチャ対応のタブでジャンル分けできるRSSリーダーを作りたいっす。
>>684 おぉおおう!
なんちゅー完成度。
これ使います(^^;
ありがとうございました。
RSSって何?
>>686 スレ違い。検索したらいくらでも出てくるから自分で調べろ。
クイックリポート使って印字プログラムを作成しているのですが、斜線の出し方が分かりません。 印字内容はエクセル風な単純な表なのですが、一つのセルの中に斜線を表示したいのです。 QRShapeのプロパティをいじれば、この斜線は出せますでしょうか?宜しくお願いします。
昔の話になりますが、N88-BASICにはブリンク色(点滅)があって便利だったのですが Windowsにはこういう点滅色のような概念はあるのでしょうか? また、これを実現するにはTimerのOnTimeイベントを使って手動で点滅させるしかないのでしょうか?
1文字点滅させるならでかいキャレット作ればいいけどね
点滅という単純な表現技法がこれほどめんどくさいものとは・・
692 :
デフォルトの名無しさん :04/06/11 21:51
TListの中に、独自のレコード型TGroup、TDataへのポインタが混在しているとして それらを判別する方法はありますか?
○TGroupe ×TGroup
無い。無いからTGroupやTDataの頭1バイトを識別用のフィールドにするとか。
TListを拡張して識別用変数を追加すれば?
>>692 レコード型でなければならない理由がないなら、クラス型にする。
692ではないけどクラスへのポインタは識別できるの?
まず、ポインタを TObject にキャストしてから is が使えるから識別可能
一長一短だよね。レコード型なら、694さんのように最初のフィールドを 識別用に設ける。クラスにすると、いちいちコンストラクタで生成する必要が ある。
レコード型でも動的にに作成する場合と比較すると、クラスの方が便利だね。
>>696 仮に以下のような定義だったら、
TGroup=recoed
ID:Byte;
Param1:Integer;
Param2:Integer;
end;
TData=recoed
ID:Byte
Data:array[0..7] of Byte;
end;
PGroup=^TGroup;
PData=-^TData;
TGroup型変数のIDには1を、TData型変数のIDには2を代入しておく
その後TListに追加。
TListからデータを使うときには、
まずPBYTE(^Byte)にキャスト、逆参照して値を調べる
するとPGroup由来かPData由来か解るので、次に適切な型にキャストしてデータを利用する。
なお、Delのクラス(オブジェクト)はC++とは違って
余計な物が沢山ぶら下がっておりリソース負荷が大きい。
データ保持目的だけならあまりおすすめ出来ぬ。
>余計な物が沢山ぶら下がっておりリソース負荷が大きい。 ぜんぜん大きくないが。 インスタンスにはVMT分の4バイト増えるだけ。 クラスだってテーブルが微妙に増えるだけ。 それすら問題になるような用途ではそもそもDelphi自体が無駄の塊。 Delphi使うならそんなそんなせこいコードを人に勧めるべきじゃないね。
クラスを使うとこんな感じ。解放も自動化できるよ。 type TGroup = class; TData = class; var list: TObjectList; i: Integer; begin list := TObjectList.Create(True); list.Add(TGroup.Create); list.Add(TData.Create); ... for i := 0 to list.Count-1 do begin if list[i] is TGroup then TGroup(list[i]).GroupMethod else if list[i] is TData then TData(list[i]).DataMethod; end; list.Free; // ぶらさがったオブジェクトも解放。 end.
レスをくださった皆様ありがとうございました。
クラスをまだちゃんと理解していないので、
学習を兼ねて
>>704 さんの方法に挑戦してみます。
>>704 list.Free; // ぶらさがったオブジェクトも解放。
これでオブジェクトも一緒に解放されるのですか?
いつもこんなコード書いてるんですけど無駄な事してるのかな・・・・
destructor list.destory;
begin
while list.count>0 do begin
p:= list[list.count-1];
p.free;
end;
inherited Destory;
end;
>>707 TObjectList.Constructorミロ
StatusBar1.Panels[0].textのフォントを変えることはできますか? もしできるのであれば変更の仕方を教えて下さい。
ボタンのクリックイベント中などにタイマーイベントが発生した場合、 処理はどちらが優先されるんですか?
標準のタイマーは処理が終わるまで待つんじゃなかったかな? 特製タイマーでタイマーの処理中にタイマーが呼び出されて大変なことになったことはあったが
>>709 StatusBar1.Fontをオブジェクトインスペクタから変更
>>710 TObjectListのヘルプのメソッド
>>711 大麻イベントが発生するのは
ボタンクリックのイベントハンドラを抜けてから。
あるいはハンドラ内でAppliation.ProcessMessageを呼び出したら。
>>713 レスありがとうございます。
それではPanel[1]やPanel[2]のフォントまで
変わってしまいませんか?
Panel[0]のフォントだけ変えたいです。
>>714 Panels[0]だけなら無理。
直接Canvasに書き込むか、LabelをPanel[0]領域に貼り付けるとかするしかない。
>>715 ほんまですか…。
ほんま親切にありがとうございました。
よく勘違いされてるけどTTimerはタイマイベントが送られてくるだけで タイマ割り込みじゃないよ。
>>709 > Panel[0]のフォントだけ変えたいです。
・Panel[0] の Style プロパティを psOwnerDraw に設定
・TStatusBar.OnDrawPanel で何でも描画できる。フォント変更も可
・TStatusBar.OnDrawPanel イベントのヘルプに例がある
・TStatusPanel.Style プロパティーのヘルプも読む
720 :
デフォルトの名無しさん :04/06/12 14:39
WebBrowserに自分でHTMLを作って表示したいのですが、 文字列をどんどん足していくにはどうすればいですか?
PageControl で動的に Tab を追加して、そこへ動的に貼り付けたオブジェクトのイベントが発生した時 そのイベントの中で自分が張り付いている Tab を参照するには、どうすればいいでしょうか?
723 :
デフォルトの名無しさん :04/06/12 17:37
Tspeedbutton に
>>722 動的に貼り付けるとき、ParentとOwnerはどうしてるの?
.Parent := TabSheet; ってやってます。Owner はちょっと判りません。
なら.Parent as TTabSheetってすればいい
判りました、ちょっと試してみます。
public Point : TPoint; これだとPoint.xに代入できるのですが private FPoint : TPoint; public property Point : TPoint read FPoint write FPoint; これで Point.xに代入しようとすると 代入できない左辺値です と言うエラーが出るのですがどうしてでしょうか?
皆さん親切に教えていただいてありがとうございました。 教えていただいたサイトを見ながら、頑張っていきたいと思います。
>>726 すいません、試してみたのですがどうにも判らないので、具体的に書かせてもらいます。
・TTabSheet.Create(Self)でタブを動的作成。
・作成したタブ上に WebBrowser を作成。
・WebBrowser で Navigate を実行。
・TitleChange イベント発生時に、変更されたタイトルを親タブのCaptionに反映させる。
以上、よろしくお願いします。
TMemIniFileのメソッドを使ってiniファイルにコメントを書くにはどうすればい いのでしょう? AssignFileでやるしかないでしょうか?
>>730 procedure TForm1.Button1Click(Sender: TObject);
var
ts:TTabSheet;
wb:TWebBrowser;
begin
ts := TTabSheet.Create(self);
ts.PageControl := PageControl1;
ts.Caption := 'AAAAAA';
wb := TWebBrowser.Create(self);
wb.ParentWindow := ts.Handle;
wb.Tag := integer(ts); // ここに注目!
wb.OnTitleChange := WebBrowserTitleChange;
wb.Navigate('
http://www.google.com/intl/ja/ ');
end;
procedure TForm1.WebBrowserTitleChange(Sender: TObject;
const Text: WideString);
begin
TTabSheet((Sender as TWebBrowser).Tag).Caption := Text;
end;
>>732 ありがとう御座います。無事に処理出来ました。
>wb.Tag := integer(ts); // ここに注目!
これがかなりミソのようですね。
>>728 property Pointが受け取れるのは「TPoint型」だが
Point.xは「integer型」だから
>>734 に補足しておくと、Point関数を使えばいいと思う。
VBでいう On Error GoTo 処理のやり方がよく分からず、Web上のサイトをいくつか参考にしながら 下のように書いてみたんですが、これは正しいんでしょうか。 わざとエラー状態をつくって(処理に必要なテーブルを消したり、MDBファイル自体を消したり) 試したところ、Exeファイルからだと望み通りの結果が得られますが、dprファイルからだと、 面倒なステップ実行を求められます。
procedure TForm1.Button1Click(Sender: TObject); begin Screen.Cursor:=crHourGlass; 処理〜 FDDからAccessMDBファイルををコピー(FDDが空っぽの場合の処理は書いてあります) try MDBに接続して色々SQLでごちゃごちゃやって それが済んだら DBとの接続切って Screen.Cursor:=crDefault; Form1.Release; Form1.Close; except on E:Exception do ←これが分からない。書いても書かなくてもexeファイルからの実行結果は一緒 begin Screen.Cursor:=crDefault; |とにかく処理中に何か ShowMessage('何だか予想外の事故、取りあえずこれにて終了'); |おかしなことが起こったら Form1.Release; |一気にここまで飛んじゃって Form1.Close; |ほしい end; end; 現実にありそうなこととして想定しているのは、フロッピーディスクからコピーした MDBファイルの破損です。
例外オブジェクトには、EIntError とか EComponentError のように
エラーの種類によっていくつかのクラスが存在する。
Exception はすべての例外オブジェクトの上位クラスなので、結局
すべての例外を処理していることになる。
>>737 のように例外オブジェクトのクラスによって処理を分けない
場合は特に書く必要はない。(ヘルプの try..except 文を参照)
Screen.Cursor := crHourGlass;
try
try
{エラーが起こるかもしれない処理}
except
ShowMessage('エラー');
end;
finally
Screen.Cursor := crDefault;
Release;
end;
TPointがクラス型なら、 Point.X := 0 でエラーは出ないよ。 どうして?
プロパティは、単なるフィールドと違って読み取りと書き込みという
処理が行われる。
>>728 を
private
function GetPoint: TPoint;
procedure SetPoint(Value: TPoint);
public
property Point: TPoint read GetPoint write SetPoint;
に置き換えてみるとわかるが、
Point.X を参照するときには GetPoint メソッドが実行され、
Point に何か代入するときには SetPoint メソッドが実行される。
関数の戻り値に書き込みはできないので Point.X への書き込みはできない。
TPoint がもしクラス型だったら GetPoint が返すオブジェクト (参照) の
X プロパティへの書き込み (例えば TPoint.SetX) になるので可能。
処理の途中で、処理を5秒間だけ停止したいのですが その停止中もフォームの移動とかの応答はできるようにしたいのです どのようにしたらよいのでしょうか? こんな感じで試したのですが時間がだいぶずれてしまいます。 procedure TForm1.Button1Click(Sender: TObject); var i:integer; begin Button1.Caption := 'A'; for i := 0 to 500 do begin Sleep(1); Application.processMessages; end; Button1.Caption := 'B'; end;
>>741 Timer使えば?
ボタンをクリックしたときタイマーを有効に。
んでタイマー内に処理したいことをかき、
最後にタイマーを無効に。
>>741 五秒経過したかの判定はこんな感じ
var
startTime: DWord;
begin
startTime := GetTickCount;
while GetTickCount - startTime < 5000 do
;
// 5秒経った
end;
>>743 なるほど。そんな単純なことでよかったのですね。
ありがとうございました。
745 :
デフォルトの名無しさん :04/06/13 22:04
以前作った,paradoxデータベースにアクセスして処理を行うプログラムを作り直そうと思ったんですけど データベースやクエリーコンポーネントのプロパティの設定方法がわからなくなってしまいました。 前のプログラムなくしちゃってわからない・・・
> 前のプログラムなくしちゃってわからない・・・ じゃ、作り直しできないじゃん
>747 イチから作りなおすのです・・・。 >748 データベースとクエリーコンポーネントの設定方法をおしえてください・・・。
>>738 さん
ありがとうございます
>>Exception はすべての例外オブジェクトの上位クラスなので、結局
>>すべての例外を処理していることになる
なるほど、何となく、ですが(というか、そもそもクラスという概念自体
よく分かっていないんですが)、書いている単語の意味と処理の流れから、
そんな気はちょっとだけしてました。
finallyというのはどこかでみたような気がします。
「どっちにしろ何が何でもやってもらわなきゃならないこと」を
外側にまとめちゃう、ってことでいいのかな。
このほうが形はスマートになりますね。
Main とは違う場所に Procedure を作成し、Main からそれを呼び出し その処理結果を構造体変数のように参照する事は可能ですか? AAA_Proc(Valur); BBB := AAA.Item1; CCC := AAA.Item2; つまり一度の処理で、複数の結果を得たいと言う事ですが。
>>751 意味がよくわかんないけど
わたしの理解が合っていれば可能です。
type
res_items = record
Item1:integer;
Item2:integer;
procedure Proc(var res
間違って送信してしまった。 type TResult_items = record Item1:integer; Item2:integer; end; procedure proc(var res_items:TResult_items ;const Value:integer); begin res_items.Item1 := Value div 2; res_items.Item2 := Value * 2; end; procedure TForm1.Button1Click(Sender: TObject); var AAA: TResult_items; begin proc(AAA,10); Button1.Caption := IntToStr(AAA.Item1)+':'+IntToStr(AAA.Item2); end; こんな感じ
>>752 すいません、質問が判りにくかったようです。
通常 Function だと
Ret = AAA_Func(Value);
という感じで1つの値しか返す事が出来ないので、なんらかの方法で複数の値を返したいのです。
そこでDelphiの場合の一般的な方法を教えて頂きたいのです。
自分の考えられる方法だと、あらかじめグローバル変数を用意して、そこへ値をセットするぐらいなので。
>>754 procedure AAA_Func(Value: TValue; var Ret1, Ret2, Ret3: Integer);
とやって引数に渡した変数にセットしてもらう。
>>754 >Delphiの場合の一般的な方法
うーん。
一般的には、varパラメータで変数を渡すとか
それ専用のデータ型を用意するとかしかないと思うけどな。
複数の値をまとめた構造体を作って使うとか
って、すでに出てるやん。すまん。
>>753 の procedure procを functionにして、
パラメータで varで渡す代わりに、
TResult_itemsを returnする
>>734-735 ,740
ありがとうございます。
どうしてエラーが出るのかだけでなく
解決方法まで書いてもらって。多謝
構造体を関数の戻り値にするのは無駄なコピーが発生する可能性があるのでお勧めできない。 大抵は問題ないけど。 情報のセットをクラスにまとめてインスタンスのの参照を渡していじってもらうのが最も一般的なやり方。
それの方がオーバヘッドが大きそう
FindFirst() はかなり大きなレコード型を返すよな
プログラム単体で終了時のwindowサイズや位置の保存はできますか?
できます
> プログラム単体 ははぁ、外部のレジストリやiniファイルを使わないで、というなら無理
己自身をコピった後exeを書き換えてしまうプログラムか
windowのサイズを記録したいだけです 外部ファイルの頼る方法はわかるのですが それが不要な方法があればすっきりしていいかなぁとおもったんです
ありがとうございました
TShapeを使って三角形の図形を描くことは可能でしょうか?
できない
様々な回答ありがとう御座います。
今回は戻す値が少ないので、引数に直接返す方法を使ってみます。
ただ後々の技術向上の為、
>>760 のクラスにまとめる方法を教えて頂きたく。
これに関しての説明サイトでもあれば良いのですが...
Delを使ったデータベースの本に、[is][as]演算子の解説で、 「型キャストするより、多態性を利用すればずっとスマートに解決することが 出来ます。」 って書いてあるんですけど、そうなの? 多態性って聞いただけでめんどくさそうに感じるので 誰か解説して。
Nakigoe という抽象メソッドを持つ TAnimal クラスから派生して、TNeko の Nakigoe メソッドをニャーとして実装し、TInu の場合はワンとして実装し、どちらも TAnimal クラスのインスタンスとして受け取ったとき、Nakigoe メソッドを実行するとと TNeko クラスのインスタンスはニャー、TInu クラスのインスタンスはワンとして 実行されること。Nakigoe メソッドを呼び出す時点で、どっちのクラスのインスタンス か気にしなくても良い。
> 多態性って聞いただけでめんどくさそうに感じるので 面倒なことは他人に説明させるのですか? プログラマには向いてませんね。
そのうち、プログラミングがめんどくさそうに感じるので、とか言い出す
>>774 >そうなの?
そうでもない。というか多態とis/asは適切に使い分けるべきで
どっちがスマートでどっちは使うべきじゃないとかって問題ではないよ。
例えばTObjectListにTButtonとTCheckBoxぶら下げて、
処理を分岐させたいとき継承多態を使ったコードを書くのは現実的ではないでしょ。
やるとしたらVCL改造してTObjectListedButtonOrCheckBoxを無理やり継承でもさせるのかね。
> 現実的ではないでしょ。 だから、その本に書いてある文脈では多態性を利用した方がスマートなんだろ。
>>781 だからってなに?
その文脈とやらが示されるまでは一般論として話をする以外にないと思うけど。
> 「型キャストするより、多態性を利用すればずっとスマートに解決することが出来ます。」 って書いてあるが。こういう場合があるか、って質問なのでは? >そうなの?
作りたいのにあった書き方が一番スマート
だいたい
>>779 での前半に
> どっちがスマートでどっちは使うべきじゃないとかって問題ではないよ。
といっておきながら、後半では、継承多態には不向きな例を出してるし。
私のクラスは3年B組ですが
> 作りたいのにあった書き方が一番スマート 多態性を知らないひとにとっては、選択の余地が無いのでスマートかどうかは無関係
>>783 >774をそう読み取ったんなら、それについてレスをつければいい。
自分はそうは読み取らなかった。
>>785 一般論としての
> 「型キャストするより、多態性を利用すればずっとスマートに解決することが出来ます。」
に対して型キャストにも用途がある事を示したまでだよ。
>>785 =
>>774 でないなら妄想でケチつけないでくれよ。
質問の内容を適切に読みとりましょう。
> 型キャストにも用途がある事を示したまでだよ。 型キャストにも用途があるかどうか、どこに質問があるのよ?
皆さん、ありがとう。 [is][as]って、プログラムで動的にボタンとかを作った場合、 データの送り主が、ほんとうにTButtonなのか調べたり、 A型からB型へ変える場合に使うと思っていたもんで。 って、そうなんだけど、わざわざ多態性を使ってって言われると、 何でそんな大げさなって思いましたとさ。
多態性を使った方が圧倒的に便利の場合も多いよ。VCLでは、TStream だとか TStrings のような抽象クラス型の引数を持ったメソッドがいっぱいあるのもそのため
共用体ってどう使うの?
どう使うって、コード補完で出るでしょ。共用体に相当するDelphiのレコード型 に対する用語は知らないけど、要は同じメモリのマップの仕方が複数あるレコード型 だよ。
VBからDelphiに移植しようとしてるんだけど Unit1というユニットファイルしかない。 プロジェクトファイルってどこにある? プロジェクトファイルはコンソールアプリでしか使われないの? interfaceやらimplementationやら・・・こいつら順番あるんかい。コンパイラに叱られたし。
ま、超初心者用のサイトで勉強すべし。
ここは役に立たない超初心者スレだね
ある程度の知識を前提としないと、教えるにも限界がある。ユニットファイルの構造 から教えるのは非生産的だな。そんなのは最低、自分で勉強しなよ。
ヘルプにも書いてあるし。
>>796 プロジェクトは保存しないと作られない。
>コンパイラに叱られたし。
忠告はしっかり聞いておけ。少なくとも型の違いによるバグは出なくなる。
program ks001(input,output); type Days=(Mon,Tue,Wed,Thu,Fri); var day : Days; a,total : integer; procedure writeSday(day:Days); begin; case day of Mon:writeln('月'); Tue:writeln('火'); Wed:writeln('水'); Thu:writeln('木'); Fri:writeln('金'); end; end; begin total := 0; for day := Mon to Fri do begin; writeSday(day); write('曜日の時間数は?'); readln(a); writeln; total := total + a; end; writeln('1週間の時間数は ',total:4,' 時間です.') end. 新規作成のコンソールアプリケーションからこのソースを書いたのですが、Delphi6でいざ実行すると「Runtime error 105 at 004026AC」と出ます ちゃんとパッチも全部当てたのに何でなるのやら _no 誰か教えてください、お願いします (´・ω・`)
>>802 1行目と2行目の間にあった
{$APPTYPE CONSOLE}
はコメントじゃないので消しちゃ駄目。
> プロジェクトは保存しないと作られない。 嘘を教えないように
> program ks001(input,output); こんなプロジェクト名は有りか?
コマンドライン引数を知らないの? なんか、ほんとに大丈夫? ヘルプの最初ぐらい読んだ方がいいよ。
コンソール版の Hello,World からやった方がいいかも
> program ks001(input,output); 練習問題ならあるんじゃない? Cのテキストで勉強してるのかも。
あっ、Pascal かも。
すみません、PascalのやつをDelphiでやってるんです 学校がLinux Pascalで、家でどうにか作ろうと _no
うわぁぁ、マジだ。{$APPTYPE CONSOLE} を入れたらちゃんと動きます ありがとうございました m(´・ω・`)m
> program ks001(input,output); これは超クラシックなPascalだな。
ていうかDelがモダンすぎるだけ…
>>812 Delphiでも標準入出力を使えば
自動的にinput, outputは挿入されるけど。
そういう意味ではなく?
経験上から言って、With文は使わないほうが良いのですかね? 逆に読みづらくなって苦労する事もあるとか、原因不明のバグを生みやすいとか。
>>816 「原因不明なバグ」かどうかはともかく、思い込みでデバッグに時間がかかる場合はあるかも。
不安があるなら使わなければいいんじゃない?絶対必要というわけではないし。
本人が使いにくいなら使わないでいいんじゃない? 漏れはコードの転用とか可視性とか考えても十分使いやすいと思うけどね
コンパイル時にはwithを展開してからコードを生成するそうだから プログラムとしては同じ。本人の利便性・可読性の問題だけ。 漏れは頻繁に利用してる。 ただ、ネストすると知らないうちにバグを引き込みそうで怖いってのはあるな。
書籍には見られないけど、結構ネット上のサイトではwith文を2層や3層もネスト して利用している筆者もいるけど、with文のネストは可能な限りやめた方が良い with文を使うとすれば出来るだけwith文の中にwith文を含ませるような事はしないで1層で利用すべし。 その他にもFindCompornent関数などをwithで挟むと、非常に読みづらくなる。 VBだったら目印があるし、多用しても良いのじゃないかな。
Delでクォータニオンを解説してるサイト教えて。 ググってみたけど、無いみたいなの。
C++ので我慢しとけ
with使わないとデータベース関係は凄い事読みにくい事になっちゃうな、おれ。 使うとすっきり。
with使用中にステップ実行とかしてるときにコードにカーソルあてて値を インスペクト出来ないのはなぜ? 出来ると凄く便利なのに。
個人的には with はない方がいいと思っている。with のせいで分かりにくい エラーが出る例は ML の過去ログにたくさんある。C# は Delphi と同じ人が 言語設計したみたいだけど with に相当するものはなくなってる。 Delphi のコードを書いていても with を使わなくても不便と思ったことはない。
普通のイベントハンドラは、そのフォームの with がかかっているのと同じ。 Canvas と書くと、self.Canvas のことだし。with を使うと、TForm と 重なってるプロパティーやメソッドに対して二重に with がかかっているような 危うさを感じる。
レコード型にだけ使う>with
828のところに書いてあったんだけど >あるいは参照を利用して以下のように書ける。 > var > shortcut: TFooBarBaz; > begin > shortcut := foo.bar.baz; > shortcut := 1; > shortcut := 'aaa'; > shortcut := Self; > end; これってどういうこと? 「参照」ってなに?漏れには未知の技術だ。
「参照」はなんとかわかったけど それぞれの値がなんで適切な場所に代入されるのかがわからない・・。
>>830 それ、たぶんProp1〜3が抜けてるだけかと。
なんだそりゃ・・(汗 なんか特別な技術で代入先を選んでるのかと思った。
代入演算子のオーバーロードがあるのかと思った。
with についていろいろな議論がある、ということはとりあえず使わない方 がいい、ということだよ 使わわないと実現できない機能というのはないのだから
なら自作のクラスも不要だしDelphi自体いらないな。 C+SDKで十分。
それでは、
>>835 は無条件でスルーして、次行ってみよう。
C++のリファレンスのようなものがあれば良かったが無いモンは無い。 せいぜい10行以内に収まるようにWithを使うべきです。
まだwithネタ引っ張る気かよ・・・ 俺基準はそのメリットを書いてWikiに追加しる
FormのBorderStyleをbsNoneにすると Formのサイズ変更ができなくなりますよね? タイトルバーを消して、サイズ変更はできるようにするには どうすればいいか教えて下さい。
あ、できましたすみません。 CreateParamsをoverrideすればいいんですね。 スレ汚しスマソ
C:\にある、Hoge.txtというファイルの名前の尻尾に本日の日付をつけて(たとえばHoge20040616.txtというふうにして)、D:\に保存したいんですが var Hiduke:string; begin Hiduke:=FormatDateTime('yyyymmdd',date); CopyFile('C:\Hoge.txt','D:\Hoge' + Hiduke + '.txt',False); end; てな書き方をすると、何だか型がちがうみたいで怒られます。 CopyFile('','')の中に入るものは、string型じゃないんでしょうか。
PCharだよ CopyFile(PChar('C:\Hoge.txt'),PChar('D:\Hoge' + Hiduke + '.txt',False)); これでどうよ?
Delphi の動的配列では、確保できる上限があるのでしょうか? CのポインタのようにGetMemで確保すればメモリがある限り 確保できるのかと思っていたのですが、コンパイルが出来ても 実行中にエラーが出てしまいます。どうなんでしょうか? Delphi6personalです。
>>ぴーちゃー は、はやい 感謝します
>>843 制限はOS側のもののみのはずだけど。
エラーの内容は?
>>842 細かくて悪いが、Falseまでキャストするなよw
CopyFile(PChar('C:\Hoge.txt'),PChar('D:\Hoge' + Hiduke + '.txt'),False);
>>843 動的配列はGetMemじゃなくてSetLengthで領域確保するんだけど。
848 :
デフォルトの名無しさん :04/06/16 01:27
>845 はやい、レスありがとうございます。m(_ _)m やりたい事は、画像ファイル(960*1280)の全ピクセルのY値(輝度)を double型の配列にいったん格納したいだけなんですけど、 まず、コンパイル時にGetMemをしているのに 初期化されない可能性があると警告が出て 実行すると、EAccessViolationクラスの例外を生成しました。 アドレス00405948でアドレス0337FFFCに対する書き込み違反が起きましたと 言うエラーメッセージがでて止まってしまいます。
849 :
デフォルトの名無しさん :04/06/16 01:28
>847 あSetLengthでも同じで、ある値以上を確保しようとするとだめです。。。
>初期化されない可能性があると警告が出て そりゃなんかの変数が初期化されてないんだよ。 単純なバグ。 変数を初期化し忘れると滅茶苦茶な値が入っててその値を使ってしまってるっぽい。
851 :
デフォルトの名無しさん :04/06/16 01:36
>850 たしかに、そんな感じですね、配列の確保とかそういう問題では 無いかもしれないですね。もう一度調べてみます、ありがとうございました。
objectlistの中にobjcectlistを使っているクラスを入れてるのですが 頂上のクラスを破棄すると底まですべて破棄されるのでしょうか?
853 :
デフォルトの名無しさん :04/06/16 02:49
>>852 TObjectList.OwnsObjects の値による
Delphiでは、VC++のようなDebug用のコンパイルと 高速最適化されたrelease用のコンパイルのような設定はあるのでしょうか?
無い。
ショートカットキーに Shift+Ctrl+Z を使いたいので、 SecondaryShortCuts に設定したのですが、 メニューのキャプションに表示されません。 どうすればキャプションに表示出来ますか。 因みに ShortCut に設定すると、うまく動作しませんでした。
Secondaryはいくつも登録できるから表示しないって仕様なんじゃないの。 ShortCutが空ならSecondaryの先頭からコピーってコードでも書いたら。
ShortCutに Shift+Ctrl+Z を設定してもイベント起きないんですよ。 多分、リストの中にあるものしか正常に働かないんだと思っているのですが。 メニューとかのキャプションにショートカットキーを書いても、 表示位置か違うのでみっともないのです。
キーが重複してるなんてことないか? 俺はそれで何時間も悩んだことある。
キー重複ぐらい報告しろよ。糞エディタが。
たまたま、PC再起動させなきゃいけなくなって、 再起動させたら思い通りに動くようになりました。 はぁ〜?
>>861 そういうことはたまにある。
愛を持ってDelphiに接してあげてください。
DateTime型を "Fri, 30 Mar 2001 22:35:45 GMT" の形式に変換する方法はありますか?
なんて一貫性のない構文なんだ・・・ var c: WideChar; begin case c of 'x', 'y', 'z': if c in [WideChar('x'), WideChar('y') then ...
>>865 >>660 と同じ人?
その逆についてしばらく前にレスしたが、なんの応答もなかったな。どうしてかな?
>>866 var
c: WideChar;
begin
case c of
一貫性よりも、初期化もされてないローカル変数で case of って.....?
ord() 使えばもっときれいに書けそう
>>865 ない。DateTime型なんていう型はないから。
>>865 Format('%s, %d %s %d %d:%.2d:%.2d GMT', Copy('MonTueWedThuFriSatSun',
Succ(Pred(DayOfTheWeek(Value)) * 3), 3), DayOf(Value),
Copy('JanFebMarAprMayJunJulAugSepOctNovDec',
Succ(Pred(MonthOf(Value)) * 3), 3), YearOf(Value), HourOf(Value),
MinuteOf(Value), SecondOf(Value)]);
すまん括弧が閉じてなかった。 Format('%s, %d %s %d %d:%.2d:%.2d GMT', [Copy('MonTueWedThuFriSatSun', Succ(Pred(DayOfTheWeek(Value)) * 3), 3), DayOf(Value), Copy('JanFebMarAprMayJunJulAugSepOctNovDec', Succ(Pred(MonthOf(Value)) * 3), 3), YearOf(Value), HourOf(Value), MinuteOf(Value), SecondOf(Value)]);
>Copy('MonTueWedThuFriSatSun', Succ(Pred(DayOfTheWeek(Value)) * 3), 3), おまいはN88ベーシッカーか
なんか壮大なネタが繰り広げられてるような… formatdatetime('ddd, d mmm yyyy hh:nn:ss',now-(9/24)); じゃだめなの?
あ、後ろに' GMT'くっつけるの忘れた
GMTってリテラルで埋め込んでいいものなのか?
Indyにそのままズバリなコードは載っていないの?
そういえば愚痴って言うか独り言だけど Indyをインストールして、初めてIndyを組み込んだアプリを作ったとき とあるエラーが必ず出て10分ぐらい悩んだ。 結局ネットで調べたら「コネクションがクローズされたときに発生する無害な例外」ということで 無視例外リストに登録しておけばいいということだったけど せっかくインストーラでインストールしてくれるだからその登録とかも自動でやってくれればいいのにと思った。
IdGlobal.DateTimeToInternetStr() か? これ AIsGMT を True にしても '+0900' になるみたいだけど。 そもそも何を指定するのか書いてないし。
メールヘッダは+0900になるけど、HTTPのヘッダはGMTなの?
882 :
デフォルトの名無しさん :04/06/17 09:16
DirectX 7.0でプログラミングしているのですが、 Direct3DX ユーティリティ ライブラリが使えないようなので、 代わりに使えるようなライブラリやソースを教えてください。
D7のアップデート1を当てている人いる?
ToolBarをControlBarからドラッグして外すにはどうすればいいのですか?
モジュールエクスプローラーみたいなの作りたいんだけど。 ツリーにプロシージャーとかを表示させてから、 エディタでプロシージャーの行が変わったり、名前が変わったり したのをすぐツリーに反映させるのってスレッドを別に作って裏でずっと 監視するのかな。 やり方なんて色々あるんだろうけど、プロの人はどうやってるのか 考え方で良いんで教えて。
できました。フォローティングっていうんですね。 ツールバーを閉じた時に起きるイベントはどれなんでしょうか?
PopUpMenuのメニューデザイナでメニューを登録すると、実行時に語尾に 勝手に(Z)とか割り振られちゃうんですが、 表示させたくない項目の場合はどうすればいいでしょうか?
PopupMenu.AutoHotkeys ヲ maManual ニスル
あ、項目ごとのAutoHotkeysぢゃなくてPopUpMenu本体の方でしたか ヘルプ動作が違うなと思ってたら・・・ どうもです。
タスクバーの高さを得るにはどうすれば良いですか?
タスクトレイのハンドルからRectを取得してボトムからトップを引いた
2桁以上の数字の、1の位を抽出するにはどうすればいいでしょうか。 最初の1桁であれば、[1]のように添え字を用いて指定できますが、 1の位は桁数によって変わりますよね。 []の中に、Length - Length + 1というような変数を入れれば出来ると思ったんですが、 []の中身はInteger型でなくて純粋に数字しか受け付けないみたいで無理でした。
文字列のこといってるの? integer?
s[Length(s)]
procedure TForm1.Button1Click(Sender: TObject); var s:string; begin s := '123456789'; ShowMessage(s[Length(s)]) end;
すいません勘違いしてました。 Length - Length + 1じゃあ、何をやっても1になるに決まってるし、 Lengthだけでいいんですね。 []の中に数字しか入らないというのも誤解で Integer型なら大丈夫みたいですね。今やったら出来ました。 とにかくありがとうございました。
なんか・・・なんかもっと合理的な・・かしこい方法があるような・・。x
X mod 10
数値 じゃなくて 数字 だよ。
IntToStr( X mod 10)
Chr(X mod 10 + 48)
X が文字列ってこと!
AnsiLastChar(X)^
> s[Length(s)] これの方がいいな。一目瞭然だし。インデクスの計算だけだし。
907 :
デフォルトの名無しさん :04/06/18 08:13
コンソールアプリケーションにアイコンとバージョン情報を設定するにはどうすればいいですか?
.dpr ファイルに {$R *.res} があると、リソースをリンクしないといけないオプションが有効になる。 アイコンは、以下のモジュールをコピー/uses 文に追加して .dpr の begin - end の間に Application.initialize; の一行を追加すればよし。 ====================== unit ConsoleApp; interface type TApplication = class procedure Initialize; end; var Application : TApplication; implementation procedure TApplication.Initialize; begin end; initialization Application := TApplication.Create; finalization Application.Free; end. ======================
フォームアプリ作ってUnit1削ってProject1のソースを下のように削ったらうまくいきましたが
>>908 のユニットって使う必要あります?
program Project1;
{$APPTYPE CONSOLE}
//uses
// Forms,
// Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
Writeln('hello,world');
Readln;
//Application.Initialize;
//Application.CreateForm(TForm1, Form1);
//Application.Run;
end.
うまくいけばいいよ。 >Application.Initialize; がないとアイコン設定が無効になるようだったからダミーを入れてみたのだ。
909の方法は一度アイコンを指定して *.res ファイルを作っておいて、それからフォームアプリから コンソールアプリに変更してるんだね。なるほど。
912 :
デフォルトの名無しさん :04/06/18 12:54
DelphiIDEのCTRL+SPACEのように補完機能をもったテキストエディタコンポはありませんか?
913 :
デフォルトの名無しさん :04/06/18 13:11
IEEE経由のDVカメラからの映像を、VFW経由のPCカメラのようにキャプチャすることは 出来ないもんでしょうか。静止画を取得できさえすればよいのですが。
ファイルのコピーの方法を教えてください。 通常はAPIのCopyFileを使うんですが、 CLXで使えるファイルコピー関数ってないんでしょうか? ちょっとHelpを探したんですが、見つかりませんでした。 やっぱ、ファイルストリームを読み込んで、書き込むという 操作が必要なんでしょうか? よろしくお願いします。
文字コードを調べる方法はありますか? 変換する方法はわかったのですが・・・
918 :
デフォルトの名無しさん :04/06/18 18:31
PopupMenuをぶら下げられる単体で使えるツールバーのドロップダウンボタンってない? ボタンを押すとべろっと下にPopupされるようなやつ
TTreeNodeの子ノードを列挙するとき GetNextChildメソッドとか使うのと、 AbsoluteIndexとLevel見ていくほうではどっちが高速ですか?
procedure TfrmMain.CutTheSea(Be:TBitmap;Af:TBitmap); begin Af.Canvas.CopyRect(Rect(0,0,32,32),Be.Canvas,Rect(0,0,0,16)); end; ↑のようなコードを実行しても、以前描かれていた内容がそのままはき出されてしまいます。 どうしたら描き換えられますか?
>>918 よく考えてみたら、わざわざサードパーティVCLを使わずとも
TToolbarのStyle := tbsDropDown にして、
DropDownプロパティに PopupMenuを指定してあげればできたわ。
>>923 > Rect(0,0,0,16));
幅が0でしょ
>>925 さん
おおっ!するどいツッコミをありがとうございます!
お陰様で正しく表示されました。
本当にありがとうございました(ノД`)
>>915 レス、どうもです。
ただ、最終的にはLinuxでも使いたいんで
Windows APIは使いたくないってことで。。。
928 :
デフォルトの名無しさん :04/06/18 22:39
海外のDelphiのサイトでお勧めを教えてもらえないでしょうか また、ググルと結構中国語のサイトが結構表示されるのですが 中国ではDelhiは人気があるのでしょうか
930 :
デフォルトの名無しさん :04/06/18 23:15
TObjectListに、TObjectListを持っているクラスを追加して Parent[i].Child[n]みたいなアクセス方法は可能ですか?
そのままじゃ無理。キャストしる。
932 :
デフォルトの名無しさん :04/06/18 23:37
>>931 ありがとうございます。
成功しました。
try
>>1-1000 except
on ENullPointerException do
writeln("ガッ");
end;
データベースデスクトップで、テーブルのデータを作る時って メモ型とかって、どうするの? 項目をクリックしても反応しないんですけど。
>>935 へ?下に出てる説明どおりやれば出来るけど?
>>936 下へ出てる説明とは何処のことでしょうか?
MBファイルがどうのってやつですか?
何か俺へたれっぽい orz
スレッドを使ってダイアログを表示した後、 メインスレッドからダイアログを消すだけの簡単なプログラムです。 FreeOnTerminateをTrueにしてスレッド終了後自動破棄にしてます。 普通に実行、終了すれば何とも無いんですが、 別アプリでCPU使用率100%の状態を作り、実行、終了すると 「例外 不明なソフトウェア例外」その次に 「EWin32Errorがモジュール・・・で発生しました。Win32エラー。コード5」 などとエラーが出ます。 実行後に直ぐ終了せずに20秒ほど待てば発生しません。 CPUビジー時にもエラーが出ないようにするにはどう対策すればいいのでしょうか?
ひょっとして、質問の仕方が悪かったですかね。 テーブルを作った後のデータを入れていく時に、 メモ型のところへは、どうすればいいのでしょうか? ってこと何ですが。
>>938 ダイアログを必ずメインスレッドから閉じるなら
メインスレッドで閉じてから破棄すればいい。
あるいはダイアログの状態を監視して閉じられたら破棄するようにすればいい。
変数名や定数名をstringで取得する方法はありますか?
>>940 レスありがとう御座います。
やってみます。
マイコンピューターの、ドライブ名の一覧を取得するにはどうすればよいのでしょう。 マスストレージなども含めて取得したいのですが。
Edit1のカーソルがある部分にテキストを挿入したいんですが どうすればいいですか。
メインフォームとタスクアイコンを表示しないアプリを作ってます。 それにはプロジェクトソースで Application.ShowMainForm := False; とやればよいのですが、実行中ダイアログを呼び出すとタスクアイコンが 出てしまいます。それを防ぐには ShowWindow(Application.Handle, SW_HIDE); とするらしいのですが何故かOnShow内で実行しないと作動しません。 ですのでOnShowイベントを実行させるためにプロジェクトソースの Application.ShowMainForm := False; を消し、 メインフォームの高さ、幅を0、Left, Topの値を画面外、のちにHideしました。 これで一応解決なのですが、いまいちすっきりしません。 もっとスマートな方法があると思うのですが。
> 実行中ダイアログを呼び出すとタスクアイコンが出てしまいます。 ダイアログって何のダイアログかしらんけど、それの OnShow で実行したらいいんじゃないの
>>947 EnumWindowsで全ウィンドウに対してShowWindow(hwnd, SW_SHOW)してみればそんな疑問は吹き飛ぶと思いますよ>w<
>>948 MessageDlgです。なので細かい制御できないかと。
>>949 EnumWindowsですか・・・確かややこしかったような。
調べてみます。
controlbarの中にtoolbarを2つ縦に並べて入れて toolbar controlbarともにautosizeをtureにしてるのですが 設計時には綺麗に収まっているのに 実行するとtoolbarが離れてしまいますなぜでしょうか?
>>950 MessageDlg の直前に PostMessage(Application.Handle,WM_APP,0,0); を実行し
ApplicationEvents。OnMessage でそれを受け取って ShowWindow(Application.Handle, SW_HIDE);
を実行
>>954 できました、こんな方法があるんですね。
でも一瞬タスクアイコンが表示されちゃってますが。
>>952 ControlBar の RowSnap が True になってるんじゃない?
>>955 通常、タスクバーに表示されるのは Application ウィンドウなので、表示しないように
するには、常套手段ではプロジェクトファイルの uses に Windows を加えて
program Project1;
uses
Forms,Windows,
Unit1 in 'Unit1.pas' {Form1};
{$R *.RES}
begin
Application.Initialize;
SetWindowLong(Application.Handle,GWL_EXSTYLE,GetWindowLong(Application.Handle,GWL_EXSTYLE) or WS_EX_TOOLWINDOW);
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
のように Application ウィンドウに拡張スタイル WS_EX_TOOLWINDOW を
追加しておくと、ダイアログが表示されても大丈夫なのでは?
>>956 おぉ、ちゃんとなりました^^
ありがとうございます。
そうでもない
>>920 補完機能やキーワード強調などまさに理想のコンポーネントでしたが
利用しているのが6Personalだったのでdbrtlなどがなくインストールできませんでした。
>>944 Edit1.SelText := '挿入したいテキスト';
>>920 何か、これすごいね。
誰か、日本語仕様にしてくれないかな。
キャレットが変にちらつく
Demoをやってみたけど、今一かもしれん。
どうイマイチなんだ?
確かに、何か挙動がイマイチ綺麗じゃないね
確かに、Demoにあるやつはどうも挙動不審だ
前スレで紹介されていた、HTMLを直接書き込む処理ですが OleVariant(WebBrowser.Document as IHTMLDocument2).write('文字列'); これを1度行った後 WebBrowser.Navigate を行うと、どうも不安定になります。 また、続けてwriteを行うと追加されてしまうので、一度クリアする方法は無いでしょうか?
OleVariant(WebBrowser.Document as IHTMLDocument2).Close; してないからじゃない?
>>971 はい、Close はしてないです。
一度 Write を行うごとに Close を行い、2回目はそのまま Write でOKですか?