1 :
デフォルトの名無しさん :
2006/08/11(金) 11:25:38
まだ早い。だが乙
もういらね。だが乙
こ、こんなスレなんて要らないんだからねっ >1がかわいそうだったから書き込んだんたからねっっ
フォームの中にフォームを表示できますか? vb.netではできるんですが
できるが、厨房と初心者プロしかそんなことしない。
>>9 MDIのことなら、MDIでぐぐれ。
意味があると思えないUIなら、
FormChild.Parent := TWinControl(FormParent);
FromChild.Show;
13 :
デフォルトの名無しさん :2006/08/12(土) 08:18:39
>>9 vb.netではできるんですが X
.netのAPIには実装されているんですが ○
15 :
デフォルトの名無しさん :2006/08/12(土) 10:36:52
なんかいつもDelphiスレが他のDelphiスレと一緒に並んでるのは気のせい?
16 :
デフォルトの名無しさん :2006/08/12(土) 19:02:44
>>16 日本語の無料版はいつダウンロード開始ですか?
19 :
デフォルトの名無しさん :2006/08/12(土) 22:36:15
何でDelphi使いって日本語に拘るんだろうね。 このインターナショナルなワールドワイドがグローバルの時代に。 俺たちVB使いには理解できないよ。
ロクな日本語ヘルプも提供されないVBカワイソス DirectXにいたっては無かったことにされてるしw
21 :
デフォルトの名無しさん :2006/08/12(土) 23:11:08
Turbo Delphi ちょいと興味がそそられた。 今じゃWebアプリしか作らん自分だが、その昔はずいぶんボーランド製品 使ってたからなあ。 たまにはバリバリのWindowsアプリも作りたいと思う今日この頃。
なにつくるの?
>DirectXにいたっては無かったことにされてるしw 俺みたいな日曜グラマーにはDirectX使いづらくなってるよ(´・ω・`) 堀さんやSandmanさんが活発にやってくれてた頃は週末が楽しみだったのに。
なぜ、使いやすくなってるけど。きみが他人頼みだから退化してるんでは?
>使いやすくなってるけど 使いやすくなってんの? 7から買ってないからわからん。 8以降のネットでの評価があんまりにも悪かったから。
DirectXのヘッダは昔と比べて使いやすいものが出てる もともと複数の関数で同じ引き数だったものが それぞれ別のユーザー定義型になってる、なんていう間違いが減ってる サンプルもちゃんと移植されていい感じ Delphi用のライブラリってもう新しいのが出てこないけど C++用だって新機能を積極的にサポートしようとするのは無いよ みんな保守ばかり .NETの事情は知らんけどどうなの?
>Clootie graphics pages >delphi dot dx ググッたらこんなの出た。 どっち使ってるの?
delphi dot dxはサイトごと消滅してないか?
TStringListのcommatextを使ってCSVファイルを書き出しているのですが、 文字列をダブルクオーテーションでくくらないようにするにはどうすればいいですか。
LANで繋がっている他のPC上のファイルをコピーしたり他のpcにファイルを書き出したり したいのですが、assignfileやTFilestreamでファイル名の指定をどのようにすればいいでしょうか。 OSはXPでLANはTCP/IPです。
>>29 TStrings.CommaText を使わず、自前で分割する。
若しくは代案として、ダブルクォーテーションで括られても構わないように実装する。
","を置換すればいいんじゃね
>>30 アクセス先のPC/フォルダが共有されており、同一ワークグループ内であれば、
\\(コンピュータ名)\(共有名)\パス
とか。
マイネットワークから実際にアクセスしてみて確認して見れ。
34 :
デフォルトの名無しさん :2006/08/15(火) 04:48:01
任意のディレクトリを基準にして相対パスを絶対パスに変換する方法教えて。 GetFullPathNameだとカレントディレクトリを基準した変換しかできない。
a案 任意のディレクトリをカレントディレクトリに設定してGetFullPathName。 b案 任意のディレクトリを基準にして相対パスを絶対パスに変換するコードを書く。
36 :
デフォルトの名無しさん :2006/08/15(火) 07:53:23
IndyってMoziall Public License 1.1 (MPL 1.1)だよな? これって配布する時ソースも配布しろってこと?
パソコンに入れてパソコンごと配布しる!
39 :
デフォルトの名無しさん :2006/08/15(火) 23:25:29
stringgridに書いたデータの保存方法を教えてください。 ネットで調べたところ、 var F : TextFile; I,J:Integer; begin AssignFile(F,'Grid.dat');・・・@ ReWrite(F);・・・A for I:=0 to StringGrid1.ColCount-1 do・・・Bの1 for J:=0 to StringGrid1.RowCount-1 do・・・Bの2 Writeln(F,StringGrid1.Cells[I,J]);・・・C CloseFile(F);・・・D end; という方法が載っていたのですが、ヘルプを見てもあまり意味が理解できませんでした。 @は「これからF=Grid.datを指す」という意味で、 Aは「grid.datという名前の新しいファイルを作成する」という意味でしょうか? もしかすると全然的外れなことを書いているかもしれませんが、よろしくお願いします。
MPLも「改変した場合は」差分を公開する等の必要があるってだけだし
MPLは、ソースの改変にはGPL並の厳しさがあるけど、 ソースを改変せずに自分のプログラムに組み込む分にはえらく甘い。 MozillaのFAQサイトによると、MPLなライブラリを自分のアプリに組み込む場合は、 MPLなライブラリの著作権を明示、そしてどこでライブラリのソースが手にはいるか明記して、 さらに自分のアプリのドキュメントにライセンスに関する記述があるならば、MPLの条文をコピーしろ とか書いてある。 でも、Indyの場合は、IndyのFAQで更に甘く設定されていて、単純にcopyright(c)以下略を書けばそれで良いと書いてあったはず。
>>39 HelpでRewriteを読めば分かる。
>39 まあ大体解釈合っているけど、 これはかなり原始的な手段だ。 VCL覚えた方が楽よ。TStringListとか。
image[1]:=Image1; image[2]:=Image2; image[3]:=Image3; ・・・ をfor文を使って書くにはどうすればいいんでしょうか?
FindCompon
46 :
デフォルトの名無しさん :2006/08/16(水) 15:14:00
>>41 ありがとう。
tb2k等もMPLなので助かります。
こういう著作権関係の情報を
噛み砕いて教えてくれるところってどこかありますか?
48 :
デフォルトの名無しさん :2006/08/16(水) 15:37:59
>>39 のプログラムを見て、いつも、turbo pascalから引きずっている、組み込み
手続きを懐かしく思うんだよなぁ。object pascalにstreamって概念なかったっけ?
DBGridの特定行の色を変えたくて、金井利美男って人の書いた本のとおりに次のコードを書いてみました。 procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect:TRect; DataCol:Integer; Column: TColumn; State:TGridDrawState); をprivate部に宣言 で、implementationで procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect:TRect; DataCol:Integer; Column: TColumn; State:TGridDrawState); begin if (Table1.FieldByName('Age').AsInteger>16) then // 歳が16より高ければclAquaに変えたい begin DBGrid1.Canvas.Brush.Color := clAqua; DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); end; end; と、ほぼ本に書いてある通りに打ち込んだんですけど、色が変わってくれません。 おそらく、DBGrid1DrawColuumnCellを呼んでないせいだと思うんですが、本ではどこで呼べとは書いてなくってそのままコンパイルしてみたんですが。 どうすればいいんでしょうか?
なんだっけ、ほら、
つか、マルチポストかよ
>>49
ありゃ? 前スレに
>>49 書いたの僕ですが、こっちのスレには書いてませんよ?
誰かが移してくれたんですね。
コマンドラインで、条件定義他を切り替えて、コンパイルできませんか? コンパイルといか再構築というか。 リリース版とデバッグ版を一度に生成したいのですが。
>>47 サンクス。
でも私にはそこ見てもよくわからなかったよ。
InnoEditXが色々なMPLのコンポつかって配布してあるようなので
これを参考にしたいと思います。
アプリ起動時に例えばShiftキーを押しっぱなしなら別の処理をするような場合はどうすればいいんでしょう?
>>54 イベントが使えないから、
GetAsyncKeyStateかな〜
56 :
54 :2006/08/16(水) 20:54:03
単一ListBox 内で項目の並べ替えをドラッグドロップで実現しようと、こういうコンポを調べていたんですがリンク切ればかりで困っています。 やり方を知っているか、生きているサイトorコンポの所在を知っている方がいたら助けてください。
ListのDragModeをAutomaticにしとく procedure TForm1.ListBox1DragDrop(〜 var i: integer; begin i:= ListBox1.ItemAtPos(Point(X, Y), True); if i<0 then i:= ListBox1.Count-1; ListBox1.Items.Move(ListBox1.ItemIndex, i); end; procedure TForm1.ListBox1DragOver(〜 begin Accept:= (Sender=ListBox1); end;
>>58 ありがとうございます!
今いじってて、DragModeってなんの役に立つんだ〜
って悩んでいたとこでした。
助かります!
む、俺の環境では
>>58 のコードが通らないのはなぜだ?
61 :
60 :2006/08/17(木) 12:32:28
いやいや、Items.Countでしたね。 単純なことでした。
image[2].parent によってコントロールの親を参照できるように 親から子を参照する方法はあるのでしょうか?
Controls プロパティは,すべての子コントロールを表示します。
Delphi 6 Personal で質問があります。 設計時パッケージとして設定できません。 パッケージをインストールした後、誤ってそのファイルを消してしまい、 次に Delphi を起動した時に、よく覚えてないのですが、 「次からはを読み込まない」みたいなことを尋ねられ、 「はい」と答えた後、再度パッケージをインストールしたのが、原因なのかもしれません。 また、パレットも再度インストール時に指定したものではなく、 パレットの設定で既に削除した筈の以前のパレットが勝手に復活して、 そこに設定されてしまいます。 何度もやってみたのですが、駄目でした。 何か情報が残ってしまってる感じがするのですが、 ちゃんとインストールするはどうしたら良いのでしょうか?
レジストリに残っているのでは HKEY_CURRENT_USER\Software\Borland\Delphi\6.0\Known Packages のエントリを消すと 直るかも。
StringListでアイテムを重複無しにするため、何かプロパティがないか見てたんですが、Duplicatesっていうのがあって、これをdupIgnoreにすれば、重複は防げるようです。 ところが、dupIgnoreにするには、前提としてStringListをソートしとかないとダメみたいなんですが、使う頻度の高いものから上にしたい事情があって、ソートで順番を崩したくないんです。 forの二重ループでなんとかこの問題を解決できないか頭を捻ってみたんですが、いいアイデアがうかばず、それ以前にループなど使わなくても簡単にする方法があるのではないかと思い、質問します。 誰か、アイデアください!
>>66 StringListを継承したクラスを作ってAddメソッドをオーバーライド。
Addの先頭で重複チェック処理を追加して、重複が無ければinheritedでStringList.Addを呼び出す
重複チェックしてからAddするのと変わらんくね? 要するに「重複チェック処理」が知りたいんだとオモ マンドクセけど、Strings[hoge]のアイテムと同じものがStrings[hoge]のライン以前にあればAddしないようにすればいいんじゃね?
70 :
66 :2006/08/18(金) 12:06:13
>>67-69 レスありがとうございます
悩んでるんですけど、一つの方法としてstringList.IndexOf('hogehoge')>-1なら足すって感じがどうかなって思ってます
どっちみちforループは使わないとダメみたいですね
どなたか、メモリリークがしてないかのチェックの仕方を教えてください。
>70 だから Values って言ってんだろ!
>71 MemCheck
Values? =が無いのにどこで使うんだ?
質問させてください! DBGridで、フォーカスが外れても選択されたままにしたい(TListViewのHideSelection := falseのようなことをしたい)んですが、どうすれば実現できますか?
76 :
66 :2006/08/18(金) 15:25:07
>>67-69 >>72 なんとか、stringList.IndexOfで初期の目的を達成しております。ありがとう。
>>75 OptionsにdgAlwaysShowSelectionをインクルード汁。
Delphiでファイルの結合コピーってできますか? MS-DOSの copy /A 1.txt+2.txt 3.txt みたいな事をしたいのですが、何かいい方法あるでしょうか?
AssignFileしてAppendで開いてEofまでループ回すとか StringListに1行ずつAddして最後にSaveToFileとか TFileStream使ってファイルサイズ取得してWriteBufferでドカッと書いちゃうとか
79です。 そうですか、やはり地道にやるしかないのですね。 ありがとうございました。
84 :
66 :2006/08/19(土) 06:17:05
>>71 Delphi2005以降なら、
dprのbeginの次に、
ReportMemoryLeaksOnShutdown := True;
でおk
Delphiから使えるテンプレートエンジンはないですか Rubyでいえば、erbみたいなものです
Delphiが大好きだ でも、無くなってしまうのが残念だ
Delphiが犬好きだ でも、仕事場では使わせて貰えないの
90 :
デフォルトの名無しさん :2006/08/20(日) 06:16:43
>>88 ラザスルがあるぞ。
コンパイルが遅いのが難だがまあまあ使える。
>>87 DMonkeyはちと違うような・・・
単なるスクリプトですよね?
これを組み込んで、解釈すればってことでしょうか?
ラザスル? ぐぐっても見つからないけど
Turbo Delphiが出るというのに何故ラザラス
Turboって名前が嫌いだからにキマットル
WebBrowserを使ってHTMLソースを手軽にイジル方法はありませんか? 今の所、Webで調べてWebBrowserからソースを取り出すことは出来たんですが、 それを戻したときにページのリンク先によってはうまくジャンプできなくなってしまいます。 バージョンはDelphi6です。何かよい方法があれば、よろしくお願いします。 var StrList1: TStringList; ms: TMemoryStream; begin StrList1 := TStringList.Create; ms := TMemoryStream.Create; StrList1.Text := OLEVariant(WebBrowser1.Document as IHTMLDocument2).Body.InnerHTML; //ソースをいじる処理 StrList1.SaveToStream(ms); ms.Seek(0, 0); if Assigned(WebBrowser1.Document) then (WebBrowser1.Document as IPersistStreamInit).Load(TStreamAdapter.Create(ms)); StrList1.Free; ms.Free; end;
//ソースをいじる処理 がなんだか分からないとコメントしようがない
これは駄目なん? (WebBrowser1.Document as IHTMLDocument2).Body.InnerHTML := StrList1.Text;
Delphiで,マウスカーソルをプログラム側で動かすには,どうすればいいですか?
The SetCursorPos function moves the cursor to the specified screen coordinates SetCursorPos(X, Y) API
101 :
96 :2006/08/21(月) 14:17:48
なんかTurboC++に駆逐されそうな気もしないでもない
独り言はチラシの裏へ
Memoコンポーネントで現在表示されている行数を取得するというテクニックはWeb上でも割と見られるものですが、
http://202.33.253.145/qanda/delphi/d0002808.html (↑これなど)
では、Memoコンポーネントで、現在最上段に表示されている行のインデックスと、最下段に表示されている行のインデックスを取得する方法はあるんでしょうか?
アマチュアの僕には方法も思いつきません(APIか!?)
マスター、導師、鉄人クラスの方、ご指南おねがいします。
EM_GetLineCount EM_GetFirstVisibleLine
下=上+表示行数
そうなのか… ありがとうござんッス
copyrect はjpegに対して使用することは出来ないんでしょうか? また、それに準じる何らかの方法はありますか?
110 :
デフォルトの名無しさん :2006/08/22(火) 00:34:22
こんばんは。教えてください。 フォームにストリンググリッドが張り付けられたプログラムがあるのですが、 メモ欄は小さいのにフォームだけが無駄に大きいので、フォームの隅をドラッグして フォームだけ小さくしようと思いましたが、一定の距離ストリンググリッドに近づくと、 まだフォームの方が随分大きいのに、ストリンググリッドにスクロールバーが表示され、 一緒に狭くなってしまいます。 どうしたらフォームをストリンググリッドギリギリまで狭くできますか?よろしくお願いします。
>109 BitmapにAssign(jpeg)するとか? >110 Constraints
エスパーな人に質問です どうしてDelphiのアレって、アレなんですか?
よくもまあ、そんなアホな書き込みができるな。
だからアレだよ? 夏だな。
そのわりに、入門者がほとんどいない、という現実。
>そのわりに、入門者がほとんどいない、 ここにいます! MainMenuの意図した場所に動的にアイテムを追加して、そのアイテムをクリックで使えるように(自分で書いた処理とイベントをつなぐ?)にはどうしたらいいでしょう? 適切なサイトが見つからず、困っています。
自作のプログラム内で圧縮した外部ファイルを展開するには、どういう方法があるんでしょうか?
>アイテムをクリックで使えるように(自分で書いた処理とイベントをつなぐ?) ヒント:OnClickプロパティ
>>117 var
MI: TMenuItem;
begin
MI := TMenuItem.Create(Self); // 新しいメニュー項目のインスタンスを生成
MI.OnClick := MenuItemClick; // OnClick イベントハンドラの設定
MainMenu.Items.Insert(0, MI); // MainMenu の適当な位置に挿入
>>118 圧縮するためのプログラムを自分で組んだのならば、
展開するためのプログラムも同様に組んだらいいじゃない
121 :
109 :2006/08/22(火) 15:59:01
118です。
>>120 いいえ。LHASAなんかの別のアプリで圧縮したファイルを同一フォルダにでも置いて、実行時に展開しようかと思ったんです。
暗号化が精一杯で圧縮まで出来ませんです。
>121 何が分からないのか書け。
>>124 BitmapにAssign(jpeg)する
という意味がよく分かりません。
一応ググってみてあたりをつけて何度か試してみたのですが画像のロード時にエラーがでてしまいまして
procedure TForm1.Button1Click(Sender: TObject); var j: TJpegImage; b: TBitmap; begin j:= TJpegimage.create; j.LoadFromFile( '〜〜〜.jpg' ); b:= TBitmap.create; b.Assign(j); Canvas.CopyRect(ClientRect, b.canvas, ClientRect); j.Free; b.Free; end; copyrectを使うなら、CanvasプロパティがあるBitmapなどを使えば? という事だけど、それ以前にcanvasとかは分かるのか?
a
>つ 専ブラ ギコナビで書き込めなくて書くときだけブラウザ起動してるんだけど、 専ブラの種類によっては書き込めるの?
>>129 クッキー対応した最新の専ブラにバージョンアップ
131 :
デフォルトの名無しさん :2006/08/22(火) 19:30:54
助言くだされ。 Web(http/https)にアクセスしてタイトルだけ とってきたいんだけど、どれが一番適切なんでしょう? 1.WinIntでとってくる (文字のエンコードがやっかい.jconvertで全てを対応できない) 2.Indy (httpsとかdll配布しないとだめだから、却下) 3.WebBrowser (いい、けどマルチスレッド使えない。文字のエンコードが必要ない。後、微妙に無駄な気がする) 出来ればマルチスレッドでがんがんまわしたいんだけど 中々いい手法が思いつきません。 文字コード変換はjconvert一本じゃ手に負えないし どうか助言くださいませんでしょうか。
>>130 ギコナビからどれにバージョンうpすれば良いでつか?
>>132 ギコナビの最新バージョンにすれ。
別にギコでなくてもいいけど、とりあえず最新版。
あ、本当だ、書けた。
135 :
デフォルトの名無しさん :2006/08/22(火) 22:41:11
TurboPascalやTurboを使っていたおじさんとしては TurboC++の復活はうれしいけど、(もちろんTurboC#もうれしい) Turbo Delphiは ゆ る せ ま せ ん 何ですかこのネーミング。 みなさん許せますか? TuboPascalのDOS/V版がでるのを夢見て、PC-9801用のVer6から使える部分だけ 抽出してDOS/V上で動かしていた頃が懐かしい。結局、TurboPascalはDelphiへ 進化したわけで、いまさらTurboを付けてほしくない。 21世紀の「コンパクトで安くて初学者向けのコンパイラ」=TurboPascal を 出してほしい。たとえ中身がDelphiでも、Delphi100%互換コンパイラ「TurboPascal」と して販売してほしい。
136 :
デフォルトの名無しさん :2006/08/22(火) 22:51:55
元より君の許しは必要ない
くだらん
Delphi言語に今さらPASCALなんて名前つけて売るなよ
じじいの懐古趣味だろ
そもそもDelphiとPascalは別の言語だろ
Basic と VB の違いみたいなもんか?
Basic → 言語 VB → 開発環境 Delphi → 言語 Pascal → 言語
言語名がDelphi言語になったのを知らないで言ってるんだろw
>>143 その話は夢でした。
インプライズって社名に変わったということも夢でした。
editに文字が無いときはイベントを起こさない という風にしたいのですが、 editに文字があるかどうかを判定するには どうすればよいのでしょうか。
if trim(edit.text)='' then
if Length(Edit1.Text) = 0 then
148 :
145 :2006/08/23(水) 10:26:15
出来ました。ありがとうございます
trimで判定? こんなの初めてみた。Length とどっちがいいんだろう。
別にTrimで判定してるわけじゃないだろw Trimはトリムしてるんだろwww まあ、この場合はTrimいらないと思うけど。
begin 活性水素; 日本トリム; end;
if Edit1.Text<>'' then begin 〜 じゃ、いかんのん?
もうそれは済んだ
if trim(edit.text)='' then if Length(Edit1.Text) = 0 then if Edit1.Text<>'' then どれが一番速いの?
つCPUウィンドウ
そんなものの速さが気になるなら、そもそもVCLは使わないようにしないと
>>154 100万回ループさせて試してミリ!
つーかそれよりこのDBの最適化を何とかシリ!無茶苦茶ya
スピードはLength>''>Trimの順番だと思う TEdit.Textプロパティは長い文字列だから参照カウンタを持ってる なのでそれを見るのが一番速い ''との比較もTrimも文字列操作だからそんなに変わらないと思うけど なんとなく''との比較のほうが速そう
一定時間ごとに音を鳴らすタイマーみたいなのを作る場合 タイマーコンポーネントを使うのが一番ですかね? Timer1.Interval:=min*60+60000*sec みたいなやり方でやってるんですが。
タイマーつくるために TTimer をつかうことになんの疑問が?
10ミリ秒毎に音を鳴らしたい場合TTimerだと分解能が足りないんです 2400日後にアラームをならしたい場合もTTimerだとオーバーフローします
じゃあApplication.OnIdle
>>163 2400日後に10ミリ秒の精度でアラーム鳴らすの?凄いね。
NextTime := now + 2400;
Timer1.Interval := 10:
と、コンストラクタで初期化して、タイマーイベントで
if now >= NextTime then 〜
で判定すれば良さそうだがどうか。
それじゃだめ
電源入れっぱなしだと日付が初期化されなかった?
なんで誰もTrimに関して突っ込まないんだぜ? Edit1.Textが「 」だった場合にも反応するぜ? Lengthでの判定と明らかに結果が違う
169 :
165 :2006/08/24(木) 07:12:54
何が駄目なんだ。w じゃあTTimerと同じようなコンポーネントでも作ったら。 スレッドで時間見てイベント発生させるだけだし。
2400日後? ずーっとパソコンの電源入れっぱなしにするの? 何に使うんだろう。
ネタスレだろここw
>>161 精度がほしいならマルチメディアタイマー。
ただし、マルチスレッドになるので、マルチスレッドの知識がないと変なところでバグだすことも。
気をつけれ。
あとは、OnIdleか?
imageコンポーネントに読み込んだ画像が大きかったとき画像をimageコンポーネントのサイズにあわせて縮小することはできますか? Proportionalプロパテぃがそれに該当するかと思われたのですが駄目でした。
Streatch := True
うわーありがtぷ 勘違いしてた
>>171 なんだか、Delphi 2.0,3.0用って書いてあるけど、Delphi6や7に入れてもだいちょぷなの?
API のラッパだろ。バージョンはあまり関係ない
179 :
デフォルトの名無しさん :2006/08/24(木) 19:43:15
WINDOWS VISTAに対応しますか?
コンポーネントの状態の更新に、 TActionList.OnUpdateを使いたいのですが、 空のTActionListをフォームに置いただけでは、OnUpdateを呼ばれないようです。 OnUpdate互換のイベントは何かありませんか? もしくは、TActionList.OnUpdateを呼ばせる方法はなにかありませんか?
BDS2006なんですが、Update2あてたころからか、 コンパイルすると、ヒントが出たときに、なぜか外のウインドウに表示されます。 デスクトップの設定を「Default Layout」にすると、ドッキングされるのですが、 その後、実行して、再度ヒントが出ると、また別にウインドウが開きます。 別のウインドウがこれまた小さくて、エラーが見えづらいのです。 必ず起こるので、こまってます。 これって、バグなんでしょうか?
バグでないと余計困るだろ。
>>180 TApplication.OnIdle
でました、StringReplace と同じくらい万能の TApplication.OnIdle
>>183 OnIdleってつねに呼ばれ続けませんか?
ポーリングするときに使うもんだと思ってました・・・
そりゃ、メッセージループでメッセージが途切れたらそこで呼ばれる。 逆に最小化されたりして、メッセージが飛んでこない時は一度も呼ばれない。
Delphi覚えればメシが食えますか? どのくらい使いこなせれば食えますか?
使えなくても食えるから覚えなくていいよ
189 :
デフォルトの名無しさん :2006/08/25(金) 08:10:07
Delphiをはじめてた初心者です どうぞよろしくです Editを3つ貼り付け、2つの数字と答えを出す ごく初歩的な物を試しに作ってみたのですが 思ったような動きをしてくれません・・・ Procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); var i,j,k ; integer; begin i := StrToInt(Edit1.Text); j := StrToInt(Edit2.Text); k := i + j; Edit3.Text := IntToStr(k); end; 1.数字のみのキー入力に制限するのには??? 2.Editコンポーネントに数字を入れた直後に答えを表示させたい いまはEnterを押さないと計算してくれません 凄〜〜く素人な質問をしてるのは十二分に分かっていますが こんな僕にやさしく教えてください
procedure TForm1.Edit1Change(Sender: TObject); begin if (Edit1.Text <> '') and (Edit2.Text <>'') then begin try Edit3.Text := IntToStr(StrToInt(Edit1.Text) + StrToInt(Edit2.Text)); except ShowMessage('値が不正ですぅ・・・'); end; end; end; procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if not (key in ['0'..'9']) then Key := #0 end;
>>187 ソフトハウスなどでは、ユーザー先がVB使っているから、
仕方無しにVBで開発っていうケースが多いと日経バイトか何かで読んだ。
うちの会社は全員Delphi使いだからVB使いは仕事無し。
結局、働く環境によるってことじゃない?
192 :
189 :2006/08/25(金) 12:31:34
>>190 こんなに早くのレスにびっくりです!
ありがとうございます!
ChangeとKeyPressの2段構えにしたのと
例外処理を書かないとダメなんだと言うのが勉強になりました
でも Edit○.Text <> " と Key:=#0 は何でしょうか?
参考書と睨めっこしたんですが分からなかったです・・・
>>192 >Edit○.Text <> ""
今現在Edit○に何か入力されているかを判定。
>Key:=#0
今入力されようとしている文字を『何も入力されていない』ものとみなす。
>>192 おにーさんはヒマだからいつでも質問待ってるよ
キミが可愛い男の子となら尚更だ
アホか。
197 :
189 :2006/08/25(金) 13:36:58
>>193-194 またありがとうございます!
意味がやっと分かりました!
KeyPressで、数字以外は何も入力されてないようにして
Changeで、"空"以外の入力があったら目的の計算
例外処理が発生したら、値が間違ってるよと表示
とっても納得です!
意味が分かるととっても楽しいです〜
可愛い男の子かどうか分からないですけど
大学生1回生なので、中高生と違うから
あんまり可愛くないのかもしれないです。。。
これから図書館に行ってDelphi本を借りて勉強しようと思ってますが
また分からないことが出ちゃうと思うのでまた良かったら教えてください
ホントにありがとうございました
>>191 Delphiだけでも食えることは食えるんですね。
最低でもプロになるにはVS.NetでC++使えないとダメだとおもってました。
実はVS.C++の前のステップに、とおもってDelphiやりはじめたんですが…
ところで、Panel1.Anchorsをコード上で設定したいんですが、どういう風に書けばいいんですか?
今じゃ言語指定の仕事なんて少ないんじゃないかな 言われればVCでもDelphiでもVBでもJavaでも作るけど VBだけは勘弁して欲しい Panel1.Anchors := [akLeft, akTop];
BDSで生成される.identcacheって消していいのかしら・・・ これってなんに使ってるんだろ? バージョン管理ソフトにつっこんでいいんのか
名前から察するに識別子のキャッシュ・・・入力支援で使われる物かな? キャッシュなら消してもまた生成される気がする。
財布から俺のキャッシュが消えるのが禿げしいんですが、どうすれば…
最初から財布を空にしておけば良い。 ところでホモプログラマなんているの?
D7のQuickReportで罫線をbandのframeで描いているのですが、width=1でも太さがちがうとゆう現象に悩まされています。 途中の横線より一番上や一番下の線が明らかに太いので、同じ太さにしたいのですが、どうしたらよいでしょうか。
BANDで描かないで、QRShapeで描くと良い
>>206 QRShapeだとプレビューと印刷のイメージが違いすぎるので使わなかったんですが、
これもどうにかならないんでしょうか。
罫線用のフリーのコンポーネントって無いのかな。
208 :
デフォルトの名無しさん :2006/08/26(土) 14:51:43
×ゆう ○いう
QRShapeはBandの境界付近はクリッピングの対象になるから気をつけろ。 ぎりぎりに配置するんじゃなくて数Pixel分余裕をもたせ。
テキストファイルなどを、関連付けしているプログラムで開くならば ShellExecute(Application.Handle,'Open', PChar('c:\aaa.txt'), '', '', SW_SHOW); で、できたのですが、アプリを指定したい場合にはどうすればよいでしょうか? よろしくお願いします。
CreateProcessでググレ
ありがとうございました。 調べます
DBGridで特定の列だけ右寄せにするにはどうすればいいですか?
ShellExecute(Application.Handle,'Open', 'notepad.exe', PChar('c:\aaa.txt'), '', SW_SHOW);
Delphi6 personal で使用できるフリーなファイルDBライブラリを探しています。 sqliteなどのライブラリをみつけたのですが、vcldbが見つかりませんとなりコンポーネントのインストールすらできません。 (ちなみにvcldbはpro以上に付属してくるライブラリ) いろいろ調べてるのですが、もし知っていらっしゃる方がいらっしゃれば教えてください。
拡張子がwavのサウンドを鳴らすためには MediaPlayerコンポーネント使うのが一番簡単なほうほうでしょうか MediaPlayer使わなかったらwav鳴らせないよね?
うんや 鳴らせる
ググッたらすぐ出るだろ
検索ばかりしてると馬鹿になるらしいから、ゴーグルは使いません。
VBなら検索しなくていいのにね
グーグルだし・・
sndPlaySoundだっけか? 使わないから忘れたけど、確かいっぱい出てくるはず。 >DBGridで特定の列だけ右寄せにするにはどうすればいいですか 横やりすまないけど、これどうやるの? こっちも知りたいし
>>209 クリッピングって何でしょうか。
間空けると隙間出来ないですか?
追加で質問です。
クイックレポートのプレビュー画面で印刷ボタンを押すとすぐ印刷が始まりますが
ページ設定のダイアログを出してから印刷するように出来ないでしょうか。
一部だけ印刷したいときにうっかり印刷ボタンを押してしまって失敗することが無いようにしたいのです。
クリッピングくらいぐぐればすぐでるだろ・・・
VBならぐぐらなくてもいいのにね
> 一部必須ファイルがなく、使えないようです。 聞いたことが無いが、具体的には?
230 :
228 :2006/08/28(月) 03:11:22
例えば、1.exeから、2.exeを起動し、2.exeの処理が終わった時に、結果の文字列を1.exeに返して終了したい場合、 ファイルやDBを使わずにどのような方法があるでしょうか。 PostMessageや、標準入出力を使うにしても、どのようにすると実装できるのかわかりません。
>>232 ありがとうございます。使うことが出来ました。
>>231 「CreateProcess CreatePipe Delphi」でぐぐる
TWebBrowserを非表示にしたままで、JavaScriptでタイトルを変更するHTMLを読み込むと、 JavaScriptでのタイトル変更時にTitleChangeイベントが発生しません。 TWebBrowserを表示してからNavigateすると発生するのですが、一度も表示させずにTitleChangeイベントを 発生させる方法はないでしょうか。
ついでに、StatusChangeイベント等も発生しないようです。 もしかすると、TWebBrowserを非表示にしてページを開くと、Javascriptが実行されないのでしょうか? そうだとすると、実行させる方法は無いものでしょうか。
自分のコードで呼んだらいいんでは
>>236-237 IEコンポは非表示の場合は描画が発生せず、イベントも起きない。
フォームの端っこに一ドットでも表示されているとイベントは起こる。
>>239 それは知っているのですが、フォームを表示してしまうとフォームにフォーカスが移るため、それを避けたかったのです。
現在の構成は、メインアプリからブラウザ専用アプリを呼び出し、ブラウザ専用アプリで取得したWebページのタイトルを、メインアプリに返すというものです。
この時、ブラウザ専用アプリを表示してしまうと、メインアプリのフォーカスが奪われるため、困っていました。
フォーカスを奪わずに、アプリを起動させることができれば問題無いのですが、少なくともShellExecuteでSW_SHOWNOACTIVATEを指定しても駄目でした。
WebBrowserにメッセージを送るなどして、表示されたかのように思わせる事はできないものでしょうか。
非表示でもかまわないなら、なぜ WebBrowser をつかうんですか? メインのプログラムから、テキストとして Get して、タイトル部分を抜き出しらいいんでは
242 :
240 :2006/08/28(月) 16:21:00
>>241 javascriptがタイトル部分を生成するので、テキストでGetする場合はjavascriptを自前で実行しなければならなくなるんです。
Enable:= false
DisEnable:= true;
配列の要素の最小値と最大値を返す関数ってなんだっけ? for i := Min(HogeArray) to Max(HogeArray) do みたいなの
Low,High
dくす
MinIntValue, MaxIntValue
249 :
240 :2006/08/29(火) 00:18:31
>>243 メインフォームのEnableをfalseにしても効果無しです。
ブラウザがあるフォームのEnable
251 :
デフォルトの名無しさん :2006/08/29(火) 02:06:28
100000など6桁の数字の中にカンマではなく#2Cという文字を入れるには どうすればいいですか? 100#2C000 このようにしたいんです。
質問させてください TableのFilterには条件式をシングルクォーテーションで包んで書けっていうのをみつけたんですが、 この条件式を Table1.Filter := '([コード]>=1000)and([年齢]>=Edit1.Text)' のようにEdit1.Textの値如何の式にしたい場合は''の中をどのように書けばいいんですか?
フォーカスをどこに移していてもOnKeyPress時に実行するプログラムを作りたいのですがどうしたらいいですかね? procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char;); begin If (Key='a') then ShowMessage('Aが押されました'); end これだとフォーカスがButton1になってる場合キーを押しても何も起きないので Button1にもButton2にも同じようにaを押されたときの処理をコピペしてるのですが非効率的です フォーカスにかかわらずOnKeyPressイベントを発生させるためにはどうやればいいでしょうか?
>>253 一番わかりやすいのは Button1.onKeyPress := Form1.onKeyPress;
最近ポインタを扱い始めましたが、メモリリークなどが発生するかどうか不安です。 下記のような書き方は問題ないですか? type PMyRecord = ^TMyRecord; TMyRecord = record a, b: Integer; end; var L: TList; procedure Form1Create; // フォームが作成されたとき var i: Integer; p: PMyRecord; begin L := TList.Create; for i := 0 to 10000 do begin // 適当な回数 New(p); p^.a := Random(10000); // 適当な数 p^.b := Random(10000); L.Add(p); end; end; procedure Form1Destroy; // フォームを破棄するとき var i: Integer; begin for i := 0 to L.Count - 1 do Dispose(L[i]); L.Free; end;
また、下の3つのコードは、どれも結果としては同じ処理になるのでしょうか。 var i: Integer; begin for i := 0 to L.Count - 1 do Dispose(L[i]); L.Free; end; ------------------------------------ var i: Integer; begin for i := 0 to L.Count - 1 do Dispose(PMyRecord(L[i])); L.Free; end; ------------------------------------ var i: Integer; p: PMyRecord; begin for i := 0 to L.Count - 1 do begin p := L[i]; Dispose(p); end; L.Free; end; ------------------------------------ 最後に、このコードで、レコード型にStringを含めても大丈夫でしょうか。
ネタかと思ったぜ
>>256 Dispose(PMyRecord(L[i])); にすべき。
>>257 最初だけ違う。それだとリークする。ニ番目と三番目は同等で、それでOK。
New() Dispose() を使う限り、string 入れてもOK。
おれだったらクラスにして TObjectList を使うが。
TTreeViewで @親があるかどうか Aあったとして親のキャプション を知るにはどうしたらいいんでしょうか? 子があるか知るにはHasChildrenがあるんですが、親の場合、わかりません…
TTreeViewではなくて、TTreeNodeのプロパティを使う。 例えばTTreeView.Items[a].Parent でよい。 TTreeNode.Parent は、一番上のノードの場合にはnilになる。 子の場合は、TTreeNode.Count TTreeNode.Item を使う。
なるほど、 if TreeNode1.Parent=nil then 親 でいいですね。 それで子を選択したとして、その子の直親のキャプション名を取得するにはどうしたらいいんでしょう?
例えば TreeView1.Items[1].Parent.Caption とすれば、Item[1]のcaptionが得られるのはわかるよね。 勿論、この処理の前に、if TreeView1.Items[1].Parent<>nil を入れてな。
265 :
264 :2006/08/29(火) 18:03:16
> TreeView1.Items[1].Parent.Caption とすれば、Item[1]のcaptionが得られるのはわかるよね。 もとい TreeView1.Items[1].Parent.Caption とすれば、Item[1]の親のcaptionが得られるのはわかるよね。
あー なるほど。 ParentはTTreeNodeで、Captionを持ってるんですね? よくわかりました! ありがとう
Jane系はDelphiで作られているようですが、 Doeの表示部分のコンポーネントは何を使っているのですか?TRichEditでしょうか
ソース公開されてるから探せ
269 :
240 :2006/08/29(火) 20:21:26
TWebBrowserを表示せずにjavascriptの実行及びイベントを発生させる件ですが、方法が見つかり無事解決しました。 有り難うございました。
方法は未公開ですか。そうですか。
OpenJaneのソース見ろや。
272 :
質問です :2006/08/29(火) 23:26:02
Delphi 6 Personal版です。よろしくお願い致します。 自作のプロシージャ内でコンポーネントに変更を加えようとするとエラーになります。 例えば、フォームにEdit1を置き、またSUB1というプロシージャを作り、その中でEdit1の値を変更しようとすると、 『')'が必要な場所に':='があります』『未定義の識別子:'Edit1'』と表示され止まってしまいます。 implementation // ここから上は何も変更していません {$R *.dfm} // ↓このプロシージャを追加しました procedure SUB1; begin Edit1.Text := 'ABC'; //←ここでエラーになります end; // ↑ここまで procedure TForm1.FormCreate(Sender: TObject); begin //Edit1.Text := 'ABC'; //←ここで変更すると上手くいきます SUB1; end; end. コンポーネントの値を変更する時は、上の方で何か宣言が必要なのでしょうか?
>>272 Pascal≠Cですよ。
endの前の ; は邪魔です。削りましょう。
Form1.Edit1.Text := 'ABC'; とすればよい。
>>273 別につけたって構わんし、普通はつける。
C++で言うと、TForm1:: が抜けているのと同じ感覚だな。 クラス外からprivateメンバにアクセスする事なので、見つからない。
private じゃないけどな。
スコープ外 procedure SUB1は汎用的な手続き procedure TForm1.FormCreate(Sender: TObject)はForm1に属する手続き
純粋に俺が無知でわからないのだけど、
>>273 は具体的にどこの ; のこと?
procedure TForm1.hoge begin なんたらかんたら〜 end; ←ここのend ;が文の終わりを表すCと;が文と文の区切りに過ぎないPascalの違い棚
遅れてすみません、皆さんどうもありがとうございます!! //書き込み直後のリロードでは自分の投稿しか表示されないのに気づかず、 //ずっと更新ボタン押してました… できました。昨日からずっとネットや書籍で調べていたのですが、分かりませんでした。 本当にありがとうございました。
282 :
279 :2006/08/29(火) 23:59:52
>>280 へ〜、そこのendの前の ; はつけなくてもいいんだ
漏れも ; が文の終わりだと勘違いしてた
サンクス
> 昨日からずっとネットや書籍で調べていたのですが、分かりませんでした。 クラス、スコープ、self について勉強するといいよ。
困ったらまたおにーさんが教えてあげるよ キミが可愛い美少年なら尚更
YOUはこっち来なよ
YOUはSHOKC!
shock
よくprivateなメンバ変数の名前は、F〜ってなってるけど、このFって何の略?
フィールド
藤井フミヤだよ!
/ ̄ ̄ ̄ ̄\,, /_,, ,,_ \ /_____ ヽ / (@)ヅ=ヾ(@));;;;; \ | ─ 、 ─ 、 ヽ | | / /〆"●⌒ヾ;;;;;\ ヽ | @ | @ |─ |___/ |三(__|___)三、 | |` - c ヾー' ;;;;; 6 l |. | | | ノ::ヾ | | . ヽ ィエエエエ》ヾ,,,-′ | Y ̄Y ̄Y ̄Yノノ | l ヽ ___ /ヽ ヽ と ̄^ ̄^ ̄^"シ / / / |/\/ l ^ヽ \ """""" / / | | | | l━━(t)━━━━┥
294 :
デフォルトの名無しさん :2006/08/30(水) 18:22:29
Paradox <- TQuery <- TDataSetProvider <- TClientDataSet <- TDataSource <- TDBGrid の構造の時に一旦設定してしまったDBの特定のフィールドを無効値(Null)に 設定しなおすのはどうやればいいのでしょうか?
Paradox のテーブルを作り直して データを入れなおす?
296 :
デフォルトの名無しさん :2006/08/30(水) 18:38:19
ちなみに、 Quety1.Open; Query1.Edit; Query1.FieldByName('フィールド名').Assign(Nil); だと、「書き込み禁止のデータは変更できません」とか言われます。 同じフィールドをSQLを設定してからExecSqlを使って更新するとちゃんと 更新できるのになぜ書き込み禁止と言われるのかもよくわかりません。
さっぱり意味わからんが キャッシュアップデートと、updatesqlで解決。
Query1.FieldByName('フィールド名').Clear とか無かったか。
WinXp SP2でBDS使ってます(SP2あててます) 今までずっとBCBしかいじってなかったので、ASP.NETに興味ががありまして(ネット関連は殆どやったことなし)、 書籍のサンプルコードをDELPHI.NETで入力し、指定のフォルダに置いて実行してみたのですが エラーになりました。 IISはインストールしてあったので、理由がわかりません。 そこで、書籍に紹介されていた「Cassini」というローカルサーバ(というのでしょうか?)をインストール してみたら、期待通りの結果が得られました。 BDSのプロジェクト→オプション→デバッガ→ASP.NETでは、IISかCassiniを選択できるのですが、なぜIIS だとエラーになってしまうのでしょうか? ちなみにエラーメッセージは「仮想ディレクトリ”xxx”がASP.NET version 1.1で設定されていないため、 プロジェクトがデバッグできません。 aspnet_regiis.exeを使ってローカルIIS Web サーバを設定してください」 という内容です。 aspnet_regiis.exeを「ファイル名を指定して実行」すると、一瞬、コマンドプロンプトが表示されてすぐ消えてしまいます。 どうぞよろしくおねがいします。
>>251 L := N div 1000;
R := N mod 1000;
Result := IntToStr(L) + '#2C' + IntToStr(R);
でどうかな。
123056 だと 123#2C56 になるでしょ、それだと。
まず文字列にしてからInsertするんだな。
304 :
240 :2006/08/31(木) 08:34:45
>>300 コマンドプロンプトを開いてから実行すれば消えないよ。
TEditに数字だけを入力させる方法はわかりました。 次に、TUpDownをアソシエイトして、かつEditからも数字を入力できるようにしたいんですが、TUpDownのMaxがSmallIntなのでSmallIntの最大値より大きな数はEditに入力できないようにしたいんです。 そこで、TEditのOnkeyPressに // constで // EDIT_MAX=32767; を宣言している if EDIT_MAX-1 < StrToInt(Edit1.Text) then Edit1.Text=IntToStr(EDIT_MAX); と書き加えたら、「プロセスは停止しています」とエラーが出てしまいました・・ UpDown付きのEditに、ある数以上の数を入力した場合、設定してある最大値に下げるには、どうやってるんでしょうか?
キーが押された時じゃなくて離した時点で判定を行うから onKeyPressじゃなくてonKeyUpイベント内に記述する Edit1.Textが空白ならIntToStrで例外が発生するから対策をしておいて 数字以外の入力を防ぐためKeyPressイベントにも記述する procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Edit1.Text = '' then exit; if EDIT_MAX-1 < StrToInt(Edit1.Text) then Edit1.Text := IntToStr(EDIT_MAX); end; procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if not (Key in ['0'..'9']) then Key := #0; end;
文字列からクラスに変換する方法ってありませんでしたっけ・・・ googleってもいまいちやり方が出てこない・・・
308 :
デフォルトの名無しさん :2006/08/31(木) 15:31:54
意味不明
309 :
307 :2006/08/31(木) 15:33:46
えっとですね。 StringToClass("TString").Create みたいにしたいのですが・・・ ちょっと調べた限り、 RegisterClassとFindClass使うようなのですが、 TPersistentClass継承していないと無理なようですね・・・
任意の文字列を渡してその文字列名クラスを作りたいのね TStrings.Create→StringToClass("TStrings").Createこういうノリか ごめんシラネw 蛇足だけどTStringsは抽象クラスだから 直接インスタンスを生成したらDelphiの神様の天罰が下ります
311 :
デフォルトの名無しさん :2006/08/31(木) 15:42:53
みなさんこんにちわ(o*。_。)o お尋ねしたい事があり書き込みさせて頂きます。 色々なサイトでIDやPassを自動配信するシステムがありますよね? そのシステム方法を教えて頂けないでしょうか。 探してみて無料配布しているところなど探してみたのですが 見当たりませんでした。配布されているものじゃなく作る物なのでしょうか? もし、作る物であるのならわかる方に教えて頂きたく思います。 どうぞ宜しくお願い致します(*- -)(*_ _)
>>311 たとえば何処?例をあげないと、いろいろあるからやりたいことが特定できないと思うよ
Delphi じゃなくて Perl や Ruby や Python のすれにいくべきだと思うが
314 :
デフォルトの名無しさん :2006/08/31(木) 16:10:16
312さん、ありがとうございます。 例えば、yahoo等でもIDをもらう前に登録をしますよね。 その際に、IDやPassがyahooから自動的に送信されますよね。 そのシステムを知りたいのです。 説明が下手で申し訳ありません(*- -)(*_ _)
316 :
デフォルトの名無しさん :2006/08/31(木) 16:17:16
313さん申し訳ありませんでした。
317 :
307 :2006/08/31(木) 16:19:28
>>310 TStringsは適当です。ごめん。
TPersistent継承してれば、以下のような形で生成はできるっぽい。
RegisterClass(THoge);
が、めんどくせーよ。クラスがたくさんあると大変だ orz
type
THoge = class(TPersistent)
procedure Print;
end;
{ THoge }
procedure THoge.Print;
begin
OutputDebugString('Hello in THoge.Print');
end;
Javaのクラスローダーみたいなもんか
319 :
307 :2006/08/31(木) 16:30:15
procedure Nontoka; var Hoge: THoge; begin Hoge := THoge(GetClass('THoge').Create); try Hoge.Print; finally Hoge.Free; end; end; initialization RegisterClass(THoge);
キャストするのが泣かせるねぇー。
クラスローダーの様な実行時バインディングはネイティブアプリである Delphiではどちらかというと不向きではあるが・・・ 実際は抽象化されたスーパークラスやインターフェースで具象クラスを 隠すべきなのだろうな。DelphiのインターフェースはCOM用に拡張されたもの なので若干扱いが面倒だが。
322 :
305 :2006/08/31(木) 18:05:07
323 :
デフォルトの名無しさん :2006/08/31(木) 18:18:05
次のような動作をするアプリケーションAを作るにはどうすればよいのでしょうか? 1)アプリAを前もって起動させておく 2)他のアプリがアクティブな状態で、例えば、CTRL+ALT+A を押すと アプリAにある特定の処理をさせる。(フォーカスはそのまま) フック関数を使って、メッセージを横取りする方法しかありませんか。 よろしくお願いします。
グローバルフックでググレ
クラスの概念がまったくわからん 構造体じゃ駄目なのか?
構造体で用が足りるなら別にそれでいい。設計の問題だ。
C++なんかでは元々差がないしな。 Delのレコード型もメソッド持たせられるようになったからクラスとの差がかなり縮まった気はする。 でもレコード型は継承できないから多態させることができない。これは大きい。
>>325 スレッドまるまる費しそうな質問だな。(w
とにかくその手の質問は自転車に乗ったことの無い人に
乗り方を教えるぐらい説明が難しい。
自転車の概念がまったくわからん 徒歩じゃ駄目なのか?
概念とかいってるより、まず、使って見れ。作って見れ。 だんだん分かってくる。自転車は、徒歩よりずっと便利な場合が多い。 もちろん、徒歩でも十分な場合もある。トイレいくとき、とか。
自転車なんて自作するようなものじゃないだろ
クラスなんか自作するもんじゃないだろ。適当にひろってくるものなんだ。なぁ、
>>331 ?
Delを使えば嫌でもクラス自作することになるのだが。
拾いもので済む程単純なクラスで間に合うのなら、それでいいだろうな。
TShapeを拡張したのを自分で作ったは良いが、後で見つけた同じような コンポーネントの方がよっぽどマシだったことがある。くやしかった。
その悔しさを本当に無駄にするかどうかは自分次第。
>>333 フォームのイベントハンドラを実装している行為そのものがそうだからね。
あまり意識されてないけど。自分では自転車に乗れないと思い込んでる
人が足元を見てみたらペダル漕いで進んでたみたいなもんだな。
そうなんだ。原理をしらないDelphiユーザ大杉。Win32も知らなさすぎ。
お前だけだろw
>>301 せっかくだからdivmodつかったらどうよ
じゃこう。 Result := Format('%d#2C%.3d', [N div 1000, N mod 1000]);
341 :
300 :2006/09/01(金) 08:07:33
>304 レスアリガd 確かに消えずに見れました! で、help見てみたんですがさっぱり用語が分かりません^^; まず、意味の分からない用語から調べてみます。 また何かありましたらよろしくです。
過疎スレsageておきますね^^
使わないからド忘れしてるんだけど、ボタンを押しっぱなしにできるコンポは標準でなかったっけ? TSpeedBtnにあったと思ったんだけどプロパティが見つからん。
345 :
344 :2006/09/02(土) 07:25:17
ごめんちゃい。 自己解決。
StringReplace使えよ。 S := FormatFloat('#,##0', N); S := StringReplace(S, ',', '#2C', [rfReplaceAl]);
StringReplaceは万能だからな
Windows APIのBitbltやTCanvasクラスのDrawメソッドを使って画面上に 画像を描写した場合、画像の上にウインドウが重なると重なった部分が削除 されてしまいます。 うまく、ずっと表示させておく方法を教えてください。
1. 再描画が必要になるたびに描き込む。 2. TImage コンポーネントを使う。 好きなほう選べ。
ListViewのアイテム数分処理を繰り返す時に for i := 0 to ListView1.Items.Count - 1 do begin S := ListView1.Items[i].Caption; 他の処理 end; こんな感じの所があるのですが、例えばListViewにアイテムが5個ある時、何故かループ用変数「i」が4で止まらずに 延々ループしてしまう現象に出くわしました。 ListView1.Items[5]が無いのでエラーが出ます。 今までは上記のような記述でうまくいっていたので何故i=4の時点でループを脱出しないのかさっぱりわかりません。 何かおわかりになられる方はおられますでしょうか?
>>349 ありがとうございます。それぞれの方法を模索してみます。
>>350 ループの中で変数iを弄ってたりするのではないでしょうか。
単純化してまたそれが起こるような事はないと思います。
352 :
350 :2006/09/02(土) 20:57:27
>>351 ループ中に変数iを弄るような事はしてませんです。
色々コメントアウトしてみた結果、どうやら正規表現のマッチングを調べる自作関数を呼ぶとおかしくなるようです。
正規表現部分はググり先から拾ってきた物を関数化した物です。
ループ中に何度も呼ぶのでどこかでおかしくなってるのかもしれません。
という事でお騒がせしました。ちょっとやり直しのようです。
353 :
デフォルトの名無しさん :2006/09/02(土) 23:31:20
with dmRirekiEdit.SHOMQuery do begin Close; Parameters.ParamByName('TOKU_CODE').Value := W_TOKU_CODE; Open; if recordcount <> 0 then begin First; While not EOF do begin with dmRirekiEdit.RIREKIQuery do begin Close; Parameters.ParamByName('TOKU_CODE').Value := dmRirekiEdit.SHOMQuery.FieldByName('TOKU_CODE').Value; Parameters.ParamByName('SHOU_CODE').Value := dmRirekiEdit.SHOMQuery.FieldByName('SHOU_CODE').Value; Open; if recordcount <> 0 then begin for i := 0 to 30 do begin SG2.Cells[i*2+7,y] := IntToStr(FieldByName('OUT' + IntToStr(i + 1)).AsInteger); end; end Next; end; end;
354 :
353 :2006/09/02(土) 23:32:23
上記SQLでStringGridへのセットをおこなっていますが、 表示までに1分近くかかります。 内側のSQLをやめて外側のSQLからのタイトルセットだけにした場合は2秒ほどで表示されます。 根本的におかしな使い方をしているのでしょうか? 解決するまで帰れません orz
外側でレコード件数が何件あるか分かりませんが、 素直にタイトルと履歴情報を含めて一発でデータ取得した後に、処理すればいいような気がする
end
357 :
353 :2006/09/03(日) 01:42:30
>>355 ありがとうございます。
400件ほどです。
一発でやれれば良いのですが、商品マスタがあっても履歴情報がない場合は
空白を埋める必要があるのでできないのです。
最初一発でやっていて早かったので安心していたのですが
商品マスタが全部表示されてないと指摘され変更したところ
動きが遅くなってしまいました。
>>356 コピペミスです。
念のためNextの位置は見直しました。
withのネストは関心しない。
359 :
353 :2006/09/03(日) 03:08:56
>>358 修正します。
が、明日出勤してからすることにします。
無理せずACCESSのVBAで組めよ。楽だぞ。
361 :
デフォルトの名無しさん :2006/09/03(日) 03:59:48
エスパー募集中な予感・・・
自分で文字列パースしる
function Mae(s: string):string;
begin
s := StringReplace(s, '//', '++', [rfReplaceAll]);
result := Copy(s, Pos('++', s)+2, Pos('/',s) - Pos('++', s) - 2);
end;
function Usiro(s: string):string;
begin
s := StringReplace(s, '//', '++', [rfReplaceAll]);
result := StringReplace(Copy(s, Pos('/',s)+1, Length(s)), '++', '//', [rfReplaceAll]);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Caption := Mae('
http://news.google.co.jp/news/aaa?q=aaaaaaaaa ');
Label2.Caption := Usiro('
http://news.google.co.jp/news/aaa?q=aaaaaaaaa ');
end;
訂正 function Usiro(s: string):string; begin s := StringReplace(s, '//', '++', [rfReplaceAll]); result := Copy(s, Pos('/',s)+1, Length(s)); end;
TListViewで、OwnerDrawをTrueにすると、アイテム数が多くても軽く表示できる、と聞きました。 このOwnerDrawというのは具体的には何なのでしょうか。ヘルプには「仮想リストビュー」とありますが、理解できません。 実際にTrueにし、いつも通りアイテムをAddしても何も表示されず、メモリリークしているようです。 どのようにして使うのか、ご教授下さい。 (OwnerDraw Delphi でググりましたが、最適なページを見つけられませんでした
367 :
365 :2006/09/03(日) 05:08:53
↑ごめんなさい。本文全て OwnerDraw ではなく、 OwnerData の間違いです。
StringReplaceの人気に嫉妬。
どうぞよろしくお願いします Delphi7.0上で、3層の情報系の業務アプリケーションを構築しています データベースはOracle9iです UIでは、ADOレコードセットを入力データソースするMicrosoftのActiveXコンポーネント を使用しています BDE、DBExpressやBizSnapを利用すれば3層のデータアプリケーションは作成できる ことは分かりました データセットプロバイダ経由でデータを取得しようとすると、クライアント側はClientDataSet として受け取ることになるのですが、どこかでADOレコードセット形式に変換しなければなりません 試しにClientDataSetをまわしながらADOレコードセットにフィールド定義とデータ値をコピーする 方法を試してみましたが、処理時間とCPU負荷が半端ではなく、とても採用できませんでした 他には、BizSoapを利用した形式では、サーバー側でADOレコードセットとしてデータ取得後に Saveメソッドを利用してXML形式で一旦データ出力し、Soap経由でテキスト送信し、クライアント 側では受信内容をファイルとして出力しADOレコードセットのLoadメソッドをCallしてXMLファイル から復元する方法を試したみましたが、これも採用できるものではありませんでした 素直にクライアント側でADOレコードセットとして取得可能な方法としては、リモートデータセット (Microsoft RDS)を利用したDComアプリケーションとして構築する方法もあるので試してみました これは、非常に高速で20万件程度のデータもほぼ一瞬でクライアント処理でき驚いたものですが、 MicrosoftのサポートページではRDS自体が今後は非推奨の技術として明記されており、その点 が引っかかっております どうしてもクライアント側で扱うデータ量が数十万件程度あることでパフォーマンスが重要になって しまいます。 オーバーヘッドがなるべく最小の形でClientDataSetからADOレコードセット形式に変換する方法は ないものでしょうか もしくは、素直にADOレコードセットとしてクライアント側で一発でデータ取得できれば嬉しいです 長文になってしまい申し訳ありません どうぞよろしくお願いいたします
すなおにMicrosoft RDS とやらを使ったほうがいいと思うが・・・ お仕事系は2chよりMLで聞いた方がいいよ。
StringReplaceって、gsubとか、subないDelphiには、重宝されそうだなw
自分で作ればいい
374 :
デフォルトの名無しさん :2006/09/03(日) 18:03:22
Wininetでhttpのヘッダ取得したいんだがどうやるんだ? HttpQueryInfoやらでやっても取得できん。
375 :
デフォルトの名無しさん :2006/09/03(日) 18:17:30
あ、それらしいの引数あったわ。(HTTP_QUERY_RAW_HEADERS) で、この返り値がnull区切のデータなんだが これを簡単にパースするのはどうするんだ? こんな感じのデータを Buf = ['a','b','c',#0,'d','e','f',#0,〜] Buf1 = 'abc' Buf2 = 'def' 〜 としたい。
TParser
多分基本的なことなんだと思うんだけど、 TObjectの子クラスのデストラクタは必ず親クラスのデストラクタ(TObjectのDestroy)を呼び出さなきゃだめなの?
へ?
Destroyにinherited指令を付けるってことか? 上位クラスにアクセスしなければ必要ないけど 付けても実害は(たぶん)ないからいつも付けてる
>上位クラスにアクセスしなければ必要ないけど what?
矢印キーを押したときに反応するようにするにはどうすればいいのでしょうか?
常に呼び出す習慣をつけておけば良い。
子クラスのDestory で、 inheritedは必須。覚えとけ。
385 :
デフォルトの名無しさん :2006/09/04(月) 04:58:35
文字コード変換でISO-8859-1からShift-JISに変換するライブラリある? jconvertだけじゃ無理ぽ。
TWebBrowserでリンク先へマウスのポインタを置いたときに、そのリンク先へのURLを文字列として取り出す(できればそのリンク先になってる文字列も)方法ってありますか? 素人なのでOLEとかサッパリ解らんとですバイ。
>>385 ISO-8859-1 -> Unicode -> Shift-JIS かな。
>>386 OnStatusTextChange かな。
他のプログラムをフックして、 WM_INITMENUPOPUPのタイミングで、 PostMessageを送りメニュー選択しています。 この時、メニューの枠が一瞬表示されるのですが 表示させない方法はありますか?
ない
Delphi6PerでWebをみながらWebBrowserをつくりはじめています。 ところでTWebBrowserにはOnMouseDownとかOnClickとかがないんですけど、代わりに使える方法はないんですか?
ない
393 :
デフォルトの名無しさん :2006/09/05(火) 00:05:02
以下の手続きで、フォームのコントロールを取得するとして ctrl変数に入る順番はどのような基準で決まるのでしょうか? procedure TForm1.test; var i: Integer; ctrl: TControl; begin for i := 0 to Form1.ControlCount-1 do begin ctrl := Form1.Controls[i]; ・・・・・ end; end;
コンストラクタの直後に親に設定された順番じゃないの? いずれにしても、この順番に依存したコードは書くべきじゃないと思う。
395 :
393 :2006/09/05(火) 00:32:50
>>394 そうなんですか、設定された順番とかって何かで分かるんでしょうか?
動的に生成した大量のコンポーネントの情報をループで回して
設定ファイルに保存しようと思ったんですが。
作法上、あんまよくないんですかね。
何か他に方法考えてみます。
TObjectList に自分で登録する分には、順番は保証されるね。
このスレって簡単な事しかこたえられないようだな。 もしかして超初心者用って回答者のこと?
YES
>>391 elementFromPoint は?
400 :
393 :2006/09/05(火) 06:21:54
>>396 ありがとうございます。
試してみます。
タスクバーのメニューに「移動」を追加するにはどうしたらいいのでしょう? 使用しているのはDElphi5なのですがデフォルトでは ・最小化 ・元のサイズに戻す ・閉じる の3つしかありません。
Application ウィンドウは目に見えないので移動しても無意味
>>397 文句しか言えないお前よりは超初心者の方が数億倍マシ
>401 俺の6パーでは、↓だけ書けばいける。5は知らん。 procedure TForm1.FormCreate(Sender: TObject); begin GetSystemMenu(Application.Handle, true);
405 :
404 :2006/09/05(火) 10:59:04
すまんIDEから実行した時しか効かなかった。
>>404 ありがとう。できました。が・・・・・
しかし、メニューの移動をクリックしても普通ののアプリのようにマウスカーソルがウィンドウのタイトル欄
(DelphiのForm1.caption)に移動でずフォームの中ほどで止まってしまいます。
タスクバーのウィンドウは Application ウィンドウなんだ。 >Application ウィンドウは目に見えないので移動しても無意味
アメリカではTurbo Delphiは7〜9月に出るって書いてたけど、日本語版はいつでるんッスか?
そのうち
>>407 じゃあどうすれば仏のアプリのような動作ができるのですか?
それともDelphiじゃ無理なのでしょうか?
仏の⇒普通の(^^; いまここをJaneで見てるのですが確かこれもDelphiアプリのはず。やはりタスクバーのメニューは 3つしかない。やはりDelphiじゃ無理なのかなあ・・・・・
普通のアプリはDelphi製じゃないってことだな。
WS_EX_APPWINDOW
そんなにDelphi製であることを隠蔽したいの? やぱりDelphi製には著作権がないから?
VBなら著作権あるのにね
>>411 可能。VCLを使わず、Win32APIで書けばいい。
俺はそうしている。
それなら Delphi より VC++ の方がいいね。普通のアプリもそれで作られてるし。
テーブル1 {'い','jfie'}, {'ろ','fdsa'}, {'は','dsas'} テーブル2 {'い','gsgs'}, {'ろ','ydjs'}, {'は','osas'}, {'に','saas'} たとえば上みたいなテーブルを2つをconst定義でソースの中に固定変数としてもたせて CONST_TABLE_A {テーブル1,テーブル2}; CONST_TABLE_A[0][1] とやったら'jfie' を返すような宣言の仕方はどうやったらできますか? CONST_TABLE_A[3][0] で 「に」を返すような感じです。 constとしてやらないならTStringとか使ってできるのだけれども、constで持たせたいのです。 アドバイスをお願いいたします。
他人が使う開発環境にいちいちケチつけてる暇があるなら、 誰もが認める開発環境でも作っててくださいよ。
420 :
418 :2006/09/05(火) 23:09:36
constとしてやらないならTStringとか使ってできるのだけれども、constで持たせたいのです × TString ○ TStringList
Object Pascal 言語ガイド 配列型定数
|,,∧
>>416 |Д゚彡 おいおい。
| U それじゃ質問の回答になってないって
| ミ
| U
//Project1.dpr
begin
//Application ウィンドウをタスクバーから消してしまう
SetWindowLong(Application.Handle, GWL_EXSTYLE,
GetWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW);
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
|,,∧ そんでもって |Д゚彡 |⊂ミ | ミ |''U //Unit1.pas TForm1 = class(TForm) protected procedure CreateParams(var Params: TCreateParams); override; procedure WMSYSCommand(var Msg: TWMSYSCOMMAND); message WM_SYSCOMMAND; procedure DoShow; override;
|,,∧ こんな感じに |Д゚彡 | ミつ | ミ |''U //MainWindow をタスクバーに表示させる procedure TForm1.CreateParams(var Params: TCreateParams); begin inherited CreateParams(Params); Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW; Params.WndParent := GetDesktopWindow; //親ウィンドウを DeskTopWindow にする end; //最小化メッセージをVCLではなく自分で処理する procedure TForm1.WMSYSCommand(var Msg: TWMSYSCommand); begin if Msg.CmdType = SC_MINIMIZE then begin DefaultHandler(Msg); WindowState := wsMinimized; end else inherited; end;
425 :
418 :2006/09/06(水) 01:12:01
>>421 テーブル1とテーブル2の要素数が違うのです・・・・。
テーブルの型は
TStrTable = record =
col1: String;
col2: String;
end;
var
table1: array[0..2] of TStrTable = (
(col1:'い',col2:'jfie'),
(col1:'ろ',col2:'fdsa'),
(col1:'は',col2:'dsas')
);
table2: array[0..3] of TStrTable =(
(col1:'い',col2:'gsgs'),
(col1:'ろ',col2:'ydjs'),
(col1:'は',col2:'osas'),
(col1:'に',col2:'saas')
);
この2このテーブルを結合して
CONST_TABLE_A[1].col1
みたいにして取得したいのです。
テーブルを2こつなげる方法がわからないのです。
説明が下手でごめんなさいm(_ _)m
426 :
418 :2006/09/06(水) 01:15:09
ソース間違ってたので一部修正 TStrTable = record col1: String; col2: String; end; const TABLE1: array[0..2] of TStrTable = ( (col1:'い',col2:'jfie'), (col1:'ろ',col2:'fdsa'), (col1:'は',col2:'dsas') ); TABLE2: array[0..3] of TStrTable =( (col1:'い',col2:'gsgs'), (col1:'ろ',col2:'ydjs'), (col1:'は',col2:'osas'), (col1:'に',col2:'saas') );
うーん…これはエスパーが必要だな。
procedure TForm1.DoShow;
begin
inherited;
ShowWindow(Application.Handle,SW_HIDE);
//タスクマネージャー内のApplicationWindowの登録を消す
end;
|∧,,∧ こんなもんでどや?
ミ,,゚Д゚ミ
>>401 |⊂ ミ
| ミ
|''∪
それだと、Form2 などの他のモードレスフォームが最小化に追随しない。
type TStrTable = record col1: PChar; col2: PChar; end; TStrTableArray1 = array[0..2] of TStrTable; TStrTableArray2 = array[0..3] of TStrTable; TTable = record case Integer of 0: (Table1: TStrTableArray1); 1: (Table2: TStrTableArray2); end; const Table: array[0..1] of TTable = ( 不明
|,,∧ ・・・
|゚Д゚彡
>>429 |⊂ミ
| ミ レス早ーじゃん
|`J さては、おぬし、このテクは既知じゃな。
//Unit2.pas
TForm2 = class(TForm)
protected
procedure CreateParams(var Params: TCreateParams); override;
procedure TForm2.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.WndParent := GetDesktopWindow;
end;
はたして、モードレスでサブフォームを持つアプリがどれほど
存在するのか、という点はさておき
モードレスサブフォームをタスクバーに登録せずに使いたいって場合は、
WndParentをForm1.Handleにしたりすることができるが
Zオーダーの関係から、おすすめしない。
※そんな挙動をするアプリは漏れの非VCL系常用アプリには存在しないし。
Application を殺して、Form 間の Owner - Owned の関係を断ち切ると、コードで修復するのは 大変だよ。移動メニューを増やすためにこんなことするのは馬鹿げてる。
TApplication.CreateHandle で 削除してるから、作り直せばいい。 SysMenu := GetSystemMenu(Application.Handle, False); InsertMenu(SysMenu, 0, MF_BYPOSITION or MF_STRING, SC_MOVE, '移動(&M)');
>>433 それの結果は
404 :デフォルトの名無しさん :2006/09/05(火) 10:47:46
>401 俺の6パーでは、↓だけ書けばいける。5は知らん。
procedure TForm1.FormCreate(Sender: TObject);
begin
GetSystemMenu(Application.Handle, true);
これと一緒。だから
406 :デフォルトの名無しさん :2006/09/05(火) 11:20:58
>>404 ありがとう。できました。が・・・・・
しかし、メニューの移動をクリックしても普通ののアプリのようにマウスカーソルがウィンドウのタイトル欄
(DelphiのForm1.caption)に移動でずフォームの中ほどで止まってしまいます。
こうなる。
これでうまくいきそう。 procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean); begin if (Msg.message = WM_SYSCOMMAND) and (Msg.hwnd = Application.Handle) and (Msg.wParam and $FFF0 = SC_MOVE) then begin PostMessage(Handle, Msg.message, Msg.wParam, Msg.lParam); Handled := true; end; end; procedure TForm1.FormCreate(Sender: TObject); begin GetSystemMenu(Application.Handle, true); end;
Application.Handleが受け取った WM_SYSCOMMAND を MainForm へ渡さないと駄目なのか。
MLでちょろっと流れてたんだけど tdump.exeってどうやって使えばいいのですか? 単体で起動してもコマンドプロンプトみたいなのが一瞬だけ出てすぐ終了されてしまう
DOS窓で実行しよう。 tdump -?
440 :
デフォルトの名無しさん :2006/09/06(水) 11:01:02
>>430 その初期化部分が知りたいです
m(_ _)m
TSpeedButtonについて質問させてください。 TSpeedButtonのGroupIndexが0以上の場合で、 SpeedButton1.DownをTrueにすると、コード上からボタンを押下することができます。 ところがSpeedButton1.DownをFalseにしてもボタンが上がりません。 コード上でSpeedButton1.Clickを実行しても上がりません。 コード上でSpeedButtonを上げる方法はないんですか?
>441 TSpeedButton.AllowAllUp
>>442 ありがとう。
ところで、いつもアンカーが
>>442 じゃなくて
>442みたいに一つの>で書いている人は同一人物なんですか?
444 :
デフォルトの名無しさん :2006/09/06(水) 18:29:14
ListBoxの文字列の上に一本の線を引きたいです。 ListBoxにはそんな機能は無いと思うので、自分でラインを引く事になると思いますが、 ListBoxの1行のRectって取得できるのでしょうか? Del/VCLのラッパコンポーネントか何かありそうだと思ったので質問してみました。 上記ができるコンポがあれば、そのまま使っても良いんですが。
445 :
444 :2006/09/06(水) 18:39:58
標準コントロール(ListBox)に、文字列に訂正線を引く機能が標準であったりはしないでしょうか?
Delphi6もこれでお役ごめんか
ボーランド、伝統ある“Turbo”ブランドを復活、開発環境の無償提供を開始
“Turbo Explorer”は無償、“Turbo Professional”は4万円以下の低価格
http://www.forest.impress.co.jp/article/2006/09/06/borlandturbo.html ボーランド(株)は、伝統ある“Turbo”ブランドを復活し、6日より開発環境の無償提供を開始した。
今回提供が開始された製品は、「Turbo Delphi for Win32」「Turbo Delphi for .NET」「Turbo C++」「Turbo C#」の4つ。
それぞれの製品には2つのバージョンが用意されており、“Turbo Explorer”バージョンは無償でダウンロードできる。
一方“Turbo Professional”バージョンは、税抜き4万円以下の低価格で、19日よりパッケージ販売が開始されるとのこと。
また“Turbo Professional”バージョンには、学生向けのアカデミックライセンスも用意されている。
2つのバージョンの違いは、開発環境の拡張・カスタマイズ機能の有無。
IDEがドットネット製なら、D6からの乗り換え対象にはなり難い。
今気づいたけどVistaって現時点で.NET1.1に対応してないからDelphi使えないよw
ダウンロードできないんだが
コンポをインストールできないから D6per の方がマシ。軽いし。
J#インスコしろって言われたんだけどふざけてるの?
なんか IDE の機能の一つが J# で書かれてるらしい。
コードの折りたたみ機能ってどうなん? あれだけでも使う価値ありそうだ。 6PerもTurboも使ったこと無い。
_________ ∧,,∧ / もれは ミ,,゚Д゚彡< BDSでOFFにしてる... ミ つ旦)~~ \ 折りたたみ 〜ミ ミ.  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ∪''∪
自作コンポインストできねぇのかよ!? 工エエェェ(´д`)ェェエエ工
J#で書かれているんじゃなくて、Javaのコンポーネントを移植するのにJ#を使ったんだ。 ちなみにTogethreなんでDelphi.NETとC#でしか使わないはずなんだが、 なぜかDelphi.W32とC++でもJ#を入れさせられる。
それって J# で書かれているってことじゃないのか。
_________ ∧,,∧ /インスコできなくて ミ;゚Д゚彡< 何を嘆くか... ミ つ旦)~~ \ 〜ミ ミ.  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ∪''∪ 嘆く事なんて、全くない もっと工夫して使いこなそうよ。 Turboの実装がどうなっているか詳細までわからんが Libraryパス通して、Createするだけで張り付くでしょ。 少し手間がかかるだけではないのかと。 IDEにインスコせずに、コンポーネントを使う方法は 工夫しだいでどうにでもなる。 RADでGUIの位置配置したい場合でも 継承元となるコンポーネントを貼り付けておいて 起動時に位置とプロパティを置き換えちゃえばよかったりする。 なんぼでも工夫できるですよ。 工夫こそ、開発者魂ですやんか。
∧,,∧ トゲザは ミ,,゚Д゚彡 Win32でも ミ つ旦)~~ うごく 〜と,,,~),,~) たぶん
開発者は開発に力を注ぐべきだろ。道具を磨くのも仕事のうちだが、 はじめから今持ってるのよりナマクラな道具を選ぶ必要はない。
462 :
456 :2006/09/07(木) 00:26:55
冷静に考えてみればオレのコンポて非ビジュアルコンポばっかりだったw
ところで TWebBrowser のような ActiveX は Explorer で使えるの?
J#を要求しているのはエディタのリファクタリング機能だった気がずる。
リファクタリングは.NETだがJ#ではないよ
>>463 TWebBrowserはExplorerに付いてたよ。
>>467 コンパイル済みなら、MSIL になってるんだろ? なぜ J# がいるんだろ?
J# 特有のアセンブリ使ってるとか
>>440 コンパイルは通ったけど、使い方はまだ不明。
const
Table: array[0..1] of TTable = (
(TableArray1: (
(col1:'い'; col2:'jfie'),
(col1:'ろ'; col2:'fdsa'),
(col1:'は'; col2:'dsas')
)),
(TableArray2: (
(col1:'い'; col2:'gsgs'),
(col1:'ろ'; col2:'ydjs'),
(col1:'は'; col2:'osas'),
(col1:'に'; col2:'saas')
))
);
これでつかえたけど。 ShowMessage(Table[0].TableArray1[0].Col1); // い ShowMessage(Table[1].TableArray2[3].Col2); // saas
とりあえず連想配列使えたりしないかなぁとか。 TStringListで代用すんのダル
ここに書き込んでまったりしてるほうがダル
Turboのミラーが増えた。
477 :
444 :2006/09/07(木) 19:42:47
>>446 有難うございます。
ItemRectで線引いてみようとおもいますが、
どのイベントハンドラで引けば良いでしょう?
>>477 オーナードローにしてOnMeasureItem
480 :
418 :2006/09/08(金) 00:27:59
>> 472 Thx!
TListBoxでアイテムのドラッグ中に次入される部分に太線を表示させたいのですが、 どうすればいいんですか?
482 :
デフォルトの名無しさん :2006/09/08(金) 01:47:58
indyのidHttpって非同期できたっけ? 後、indyってスレッド対応してる? 結果が妙におかしくなる。
483 :
デフォルトの名無しさん :2006/09/08(金) 18:00:57
ListBoxに右マウスクリックしたときに、 マウスの位置の行を選択状態にしたいのですが、 簡単にできますか?
できる
485 :
483 :2006/09/08(金) 18:24:26
記述教えて下さい。
procedure TForm1.ListBox1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var i: integer; begin if Button = mbRight then begin i := ListBox1.ItemAtPos(Point(x, y), true); if (i > -1) then ListBox1.ItemIndex := i; end; end;
Delphi.NETじゃないので、Delphi 風の.NET開発言語ありませんでしたっけ? なんていうんだっけ・・・。 ラザロスじゃないやつ
THoge = class private Fhage: Single; procedure Sethage(Value: Single); public property hage: Single read Fhage write Sethage; end; アクセスメソッドを持ったこんなクラスがあって、 Unko(@Hage.hage); みたいにhageのポインタを渡して、渡した先の手続きで値を代入させたいんだけどうまくいきません・・・ なにがいけないのでしょうか
プロパティにアドレスはない。 Sethage 渡せないの?
d:= Hage.hage; Unko(@d); Hage.hage:= d;
うーん、SethageをPublicにしたほうが良さそうですね お二方ありがとうございました
D7+FB1.5+IBXで開発してます。 DBCtrlGridを使ってみたのですが、tabで移動していくと最後のコンポーネントまでいったら 次に最初のコンポーネントに戻ってしまい新しい行が追加されません。 2度目に最後のコンポーネントまでいってtabを押すとようやく追加されます。 D7付属のデモでも同じ症状なのですが、これが正常な動きなのでしょうか。 1度で新しい行が追加されるようにするにはどうしたらいいでしょうか。
たしかに他のスレッドでは書き込めない超低レベル
2006でコンポーネントの追加ってどうすればいいんでしょう??
Turbo Delphiを手に入れました。 書店にはあまり本が無いようです。お勧めの(まずはこれは読め)本を 教えてください。 当方のスキルは 簡単なメモ帳を作れる程度です。
日本語の本ではおすすめはないな・・・
オフィシャルコースウェア
499 :
デフォルトの名無しさん :2006/09/09(土) 23:42:09
初心者です。 現在delphi2006でバッチのプログラムを書いているのですが その際にコマンドライン引数を設定してdprから起動しています。 このときはコマンドライン引数を取得しているので処理が行われますが exeから起動した場合、コマンドライン引数がとれなくてエラーで落ちてしまいます。 どなたかexeから起動した場合でもコマンドライン引数を取得できる方法を 教えてください。
たぶん、他で落ちてると思う。これ(↓)は動く。 {$APPTYPE CONSOLE} var I: Integer; begin for I := 1 to ParamCount do WriteLn(ParamStr(I)); end.
503 :
デフォルトの名無しさん :2006/09/10(日) 00:17:39
<500 エラーが起きた時はログを出力しているようにしていますが 'コマンドラインが取得できません'と表示されます。 ただし、iniファイルからは取得できています。 プログラム起動時に以下のように記述してコマンドラインを取得しています。 A = ParamStr(0) B = ParamStr(1) C = ParamStr(2) D = ParamStr(3) この記述方法ではダメでしょうか...
パラメーター入ってないからじゃないの? paramcountで有無を判断すればいいんじゃね
ParamStr(3) まで行った直後で、A〜Dを確認できます? WriteLn(A); WriteLn(B); WriteLn(C); WriteLn(D); ReadLn; して、 .exeを直接実行するときと IDEから引数渡して実行するときと比べてみて。
506 :
デフォルトの名無しさん :2006/09/10(日) 00:45:38
<504,505 アドバイスありがとうございます。 IDEから引数渡しでの実行とexe実行とでは 勝手が違うのでしょうか... 仮にexe実行で入っていないのであれば原因は何でしょうか...
>>506 まったく違う。 IDEの実行時引数はIDEから実行したときのみ有効。
ショートカットを作って引数を設定するか、
バッチファイルで引数を設定するかして。
何もしなければParamCount=0になってるよ。
あと、ParamStr(0) は実行ファイル名ね。
実行時引数がどういうものか、知らない、ってことだな。 Delphi のまえに Windows を勉強しないと
>501 サンクスコ。たすかりました。
>>510 動きます。C++がわかるなら、同社がすでに刊行しているBCB6のシリーズも
大変参考になるでしょう。
しかし、クラスの設計やオブジェクト指向について学ぶのなら
技術評論社 塚越一雄「Delphiオブジェクト指向プログラミング」を
お勧めします。この本は絶版だったのを復刊ドットコムがリクエストにより
復刊したものでもう残部が少ないのですが、絶対手元に置くべきです。
Delphiアプリケーションの動作メカニズムがしっかりわかります。
512 :
511 :2006/09/10(日) 18:21:42
しかし、技術評論社のこの本は復刊しても誤植を訂正してくれません。 まぁ、箇所は少ないし、読めばおかしいなと気づくので問題ないのですが。
513 :
デフォルトの名無しさん :2006/09/10(日) 20:07:30
タブキーでカーソルを移動する時に、移動順を指定することはできますか? 今はボタン1→2→3と移動しますが、それを1→3→2としたいのです…。
>>513 各コントロールの持つ、タブオーダーのプロパティを変更すればよし。
515 :
デフォルトの名無しさん :2006/09/10(日) 21:13:58
>>511 ご親切にありがとうございます
さっそく明日三省堂まで見に行ってみます
そんな古い本はすすめない。たしか、初代のDelphi16ビット用のだろ。 OOP なら、Delphi みたいな中途半端なやつより、Java とか C# で いい本がたくさんあるよ。
ボタン1を押すと時間のかかる処理が始まります。 ボタン2を押したときにそれを中断させて、安全にプログラムを終了させたいんですけど、 Button2.OnClickでApplication.MainForm.Close;させても反応しません。 どうしたらいいんでしょうか?
ボタン1を押すと時間のかかる処理の中で Application.ProcessMessages を 頻繁に実行しないと、Button2 が押された事に気づかない。 んで、Button2Click でなにかのBoolean変数を false にすると。 Button1Click の処理ではそれ見て抜け出すと。 そんなシナリオになる。
520 :
518 :2006/09/10(日) 21:38:48
>>519 Application.ProcessMessagesを調べてやってみます。
if BoolHoge = false then 終了させる処理; にするわけですね。
ありがとうございます。
521 :
518 :2006/09/10(日) 21:47:31
簡単なテストプログラムでうまく行ったので何とかなりそうです。 どうもありがとう。
>>517 そうかな?
Createメソッドの意味、なぜオブジェクトの開放でdestroyでなくFreeを使うのか。
メモリ上でのオブジェクト・メソッド・フィールドの関係、Application.Runで
内部的に何が行われているのか。等、初心者が疑問に思うことが書いてありますよ。
自分でクラスを設計したり、あるいはコンポーネントを設計する基礎知識の育成として
大変お勧めです。
なお、コンポーネントの設計は
インプレス 「Delphiコンポーネント設計&開発 完全解説」中村拓男
以上をお勧めします。
523 :
522 :2006/09/10(日) 21:53:42
アスキーのオフィシャルコースウエアもDel7で終わってしまいましたが、 大野さんの「基礎編」は、他の本でまかなえるとして、井上さんの「応用編」は 結構使えます。こちらでもクラスの勉強ができます。個人的によくお世話になりました。
524 :
デフォルトの名無しさん :2006/09/10(日) 22:27:08
夜遅くにすみません。教えてください。 (1)F1キーを押したらカーソルがEDIT1に移動するというのは、どのように書いたらいいでしょうか? ファンクションキーと結びつけた動きをさせたいのです。 (2)stringGridのカーソルがあたっている部分でエンターキーを押した時に、そのセルのrow位置を取得できるようにするにはどのような記載をすればいいでしょうか? よろしくお願いします。
カーソルとフォーカスがごっちゃで意味がとれないんだが。ほんとにカーソルを 移動させたいんか?
またVCLソース厨か
ドキュメント不足には、「ソース読め」と呪文を唱える。これが信者の掟。
著者もソースを読むことを勧めているはずですが。 ライブラリソースは読まなくて良いなんて言うプログラマはいませんよ。
本を買うよりVCLのソース読んだ方がいいんでしょ? なんの著者?
はいはい、私の負けです。 あなたはソースを読まなくてよろしい。
532 :
524 :2006/09/11(月) 08:44:49
>>525 レスありがとうございます。すみません、「カーソルが移動」と「フォーカスが移動」の違いを理解していないのですが、どちらも「Edit1に入力ができるようになる」ということですか?私のやりたかったことはそのようなことなのですが…。
あまり正確な表現方法を知らないため、うまく説明できないです…。
FormのKeypreviewをTrueにしとく procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var R: integer; begin case Key of VK_F1: Edit1.SetFocus; VK_RETURN: R := StringGrid1.Row; end;end;
String型で、右から三文字ごとに空白を入れるのはどうやればいいのでしょうか たとえば var s1,s2:string; s1:='あいうえabcd1234!!' だった場合s2を 'あい うえa bcd 123 4!!' にしたいのですが
535 :
524 :2006/09/11(月) 10:31:17
>>533 ありがとうございます!今からやってみます!
var s1: WideString; i: integer; begin s1:='あいうuuuunkounkoあああああfだfだfだfさgふぁgbgb'; i:= Length(s1); while 2<i do begin dec(i, 3); Insert(' ', s1, i+1); end; ShowMessage(s1); end;
DBGridでキーフィールドを修正するときに重複だったら修正前の値に戻すようにするにはどうしたらいいですか 重複のチェックはフィールドのOnValidateで行っています。
Delphiをこれから学ぼうかと考えている者です。 とりあえず、無償のDelphi6とTurbo Delphiの両方を ダウンロードしてみたのですが、 どちらの方が学びやすいとか こっちは古いから(新しいから)、初心者はやめておけとか なにかアドバイスなどいただけるとありがたいのですが・・・。
どっちでもいい そうかわらん 重くて機能制限があるのはTurbo 商用に使えないのはD6
>>538 マシンスペックが思い切り旧型(私は仕事で500MHz、メモリ192M、(;;))
でなければ、Turboの方をお勧めします。周波数1ギガ以上、メモリ1ギガ以上
であれば、まったく問題ありません。
Turboのほうが新しいぶんだけIDEも便利な機能がついていますし、
便利なコンポーネントもついています。Delphi言語も幾分強化されていますし、
これといって駄目になった部分はないとおもいます。
(初心者の間はあまり関係ありませんが、商用開発OKとかVCLソース付とか、後々
有り難味を感じることがあるかもしれませんね)
私は、コンポーネントパレットは旧タイプのほうが使いやすいと思うのですが
これはもう慣れの問題でしょう。
がんばってください。くだすれはあなたを応援します。
いまから Delphi か・・・・ 逃げ出したひとがいっぱいいるし、 もっと本がいっぱいあったり、WEB 上での情報が多かったり、 ヘルプがしっかりしている言語から始めた方がいいと思うけど
まあ、C#かJAVAの方が幸せかもね Windowsネイティブなバイナリを作りたいとかじゃなければ
このスレッドはBorland(ボーランド)のDelphi(デルファイ)について、 他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。 Delphi使いが優しくコメントを返しますが、 お礼はDelphi(の布教と初心者の救済をお願いします。
[エラー] 543(5): ')'がありません
すごく他愛のないことだけど、作ったアプリのデフォルトアイコンが オーブというかビー玉というか透き通った感じの丸いアイコンです。 デスクトップにいくつか置くと、ちっぽけな自作アプリが、自分だけの 小さな宝石みたいに見えて愛着がわきます。 BDS2006やTurboではそれが一番お気に入りです。
じゃ、アイコンだけちょうだい。D6 で使うから
俺にはオーブというより金玉に見える。
俺にはヨーヨーに見える
D6からTD2006になってパワーアップされたDelphiの文法には どのようなものがありますか?
inlineと演算子オーバーロードとfor-inぐらいじゃね あとはasmでSSE4以外対応とか
それとレコード型が旧オブジェクト型みたいにメソッドをサポートしたことかな。 どうせなら、Win32でも、C++みたいにコンストラクタ・デストラクタをサポートしてほしかったな。
552 :
538 :2006/09/12(火) 05:59:08
538のDelphiをこれから学ぼうかと考えていた者です。
みなさん、貴重なアドバイスをしていただきありがとうございます。
>>539 >どっちでもいい
>そうかわらん
どちらもそんなに変わらないですか。じゃあ新しい方がいいかな。
Delphi6はコンパイル速度が速いと聞いていたので
Delphi6も捨てがたいと考えていたのですが・・・。
>>540 >周波数1ギガ以上、メモリ1ギガ以上 であれば、まったく問題ありません。
調べてみたら、2.60GHzの376MBでした。メモリがきびしいな・・・。
>がんばってください。くだすれはあなたを応援します。
あたたかい言葉をかけていただき、ありがとうございます。
>>541 >いまから Delphi か・・・・
私が過去にいいなと思ったフリーソフトは結構Delphi製が多かったので
Delphiなら簡単にソフトが作れそうという考えから
今更ですがDelphiを学んでみようかという気になりました。
他の言語で挫折したというのもありますが(VisualC++とか)・・・。
>>542 >Windowsネイティブなバイナリを作りたいとかじゃなければ
それなんですよね。C#もJavaも多少かじった事があるので
いいのはわかってるんですけど、.netとかJVMとかがなくても
動くものを作りたいんですよね。
楽に結果を出せてネイティブとなると
自分的にはDelphiしかないのかな・・・と
こんなのはどうだ。 var S1, S2: WideString; I: Integer; begin S1 := 'あいうえabcd1234!!'; S2 := ''; for I := Length(S1) downto 1 do begin S2 := S1[I] + S2; if Length(S2) mod 3 = 0 then S2 := ' ' + S2; end;
>>538 >>Windowsネイティブなバイナリを作りたいとかじゃなければ
>それなんですよね。C#もJavaも多少かじった事があるので
>いいのはわかってるんですけど、.netとかJVMとかがなくても
>動くものを作りたいんですよね。
>楽に結果を出せてネイティブとなると
>自分的にはDelphiしかないのかな・・・と
そんなあなたに D言語
悩んでる時間があるのなら他人のコードを見て勉強しなさい
> 楽に結果を出せてネイティブとなると Delphi がそうだ、には賛成。自分もそうだし。 でも、これから入門する人にとって Delphi が楽かどうかは疑問。 情報すくなすぎ。ひといなさすぎ。ヘルプひどすぎ。 なぜ、ネイティブにこだわるのかが分からないですけど、C# をやる ことをすすめるね。
で、いつになったら begin var sl := TStringList.Create; って書けるようになるの?
>でも、これから入門する人にとって Delphi が楽かどうかは疑問。 これって大昔から言われながら問題無いじゃん。 >なぜ、ネイティブにこだわるのかが分からないですけど、C# をやる ユーザーはドトネトのアプリなんて触りたくも無いんだよ。 C丼なんて言語も変わり続け。 初心者に悪いだけでなく、何時消滅するか。
しかしお前は一体何度同じことを書き続ければ気が済むんだ。 ただの健忘症なら病院逝っとけ。
ポルトガル語でも勉強するか、と思ってる人に英語にしとけとアドバイスするバカ
>>554 プハハハハー!
「楽に結果を出せて」が読めないのかよ。
まともなGUIライブラリもない、統合環境もない、
コンパイラがベータを取れてないものをよく初心者にすすめられるなwww
563 :
562 :2006/09/12(火) 14:42:30
もしかして、俺つられた・・・?
VBなら楽に結果が出るのにね
DelphiにはStringReplaceがある
TD2006です 新規作成するとProject2、Unit2、Form2って名前がついちゃう これForm1になるように戻すにはどうすればいいんでしょうか?
バージョン依存は専用すれへ
>>569 おそらく、TD2006を起動させてから、そのままメニューから「新規作成」を
選んだのでしょうね。
いったんTD2006を全て終了させてから、もう一度起動させてください。
そしてフォームエディタのCaptionが「Form1」になっていることを確かめましょう。
がんばってね くだすれは あなたの味方
先生質問です。 Labelへの文字列出力で、クソ長い文字列を表示させたいのですが1行で書くとソースが凄く不細工です。 複数行に分けて1行の文字列を書く方法を教えてください。
label1.caption :='aaaaaaaaaaa'; label1.caption := label1.caption + 'aaaaaaaaaaaaaaaaaa';
>>572 Label1.Caption := 'あいうえお' +
'かきくけこ';
でもいいし
Label1.Caption := 'あいうえお';
Label1.Caption := Label1.Caption + 'かきくけこ';
でもOK
先生方ありがとうございます。
TD2006です デフォルトの保存位置を変更するにはどうすればよいでしょうか? Delphi6と同じように作業フォルダを変更してみましたがうまくいきませんでした
デフォルトプロジェクトオプションのディレクトリの事?
>>576 577さんがヒントを書いてくれていますが、
「プロジェクト」−「オプション」をたどって、「デバッガ」−「環境変数」
をみてください。
システム環境変数というところに、「BDSPROJECTSDIR」という部分がありますが、
ここの値を変更すればよろしいでしょう。
そうそう、どうでもいいことですが、DelphiのIDEにおいて伝統的に バージョン情報のダイアログを出しているとき・・・ Alt+「version」のタイプでバージョン番号が、 Alt+「developers」のタイプで、Delphi開発チームのリストが、 Alt+ 「team」のタイプで、Delphiチームのリストが、表示されます。 今回は、「team」のタイプをしてみてください。画面上にでかでかと 「Borland Rules!」の文字が表示され、右下の「GUNGLA」という文字を クリックすると、画面中央にサーフィンしているサルのフィギュアが表示されます。 またスタッフ名は左下のボタンをクリックすると上からドロップダウンして きます。ドロップダウンは「ESC」でキャンセルしてください。 このサル。いったいどんな意味があるのでしょうか????
日本人は黄色いサルって言いたいんじゃね?
>>573-574 定数式をコンパイル時に処理する574の上のほうが、
メモリ確保もアクセッサの呼び出しも余分がなく圧倒的に推奨ではなかんべか?
Builder使いですが、Delphiやってみようと思いました。 グローバル変数は良いとして、ローカル変数(FormCreateだけで使う変数)などは どのように宣言すればよいのでしょうか?
procedure TForm1.FormCreate(Sender: TObject); var hoge : String; begin end;
なるほどThanks
>>577 >>578 環境変数を書き換えてもうまくいきませんでした
ユーザー定義環境変数に追加したり、OSの環境変数を書き換えるのではダメでしょうか?
次善策として下記の方法をwiki(グーグルのキャッシュ)でみつけたので試してみたところうまくいきました
ここで関連した新たな疑問が発生しました
この方法では起動後すぐにプロジェクトファイルを読み込もうとしても設定したディレクトリが開きません
起動後すぐにProject1を新規作成した状態にする(Delphi6のように!)にはどうすればよいでしょうか?
----
デフォルトプロジェクトディレクトリを変更するには †
環境変数 $(BDSPROJECTSDIR)の上書き変更ができない
レジストリエディタでHKEY_CURRENT_USER\Software\Borland\BDS\3.0\Globals に DefaultProjectsDirectory?を追加して希望のディレクトリを書く。(確認済み、自己責任で)
大変そう・・・・
Dataset.Stateの変化をラベルかeditに表示したいのですがどのようにしたらいいでしょうか。
588 :
デフォルトの名無しさん :2006/09/14(木) 15:52:23
何故?
Del6Personalですが、TStatusBarをXPスタイルにするのは、無理またはかなり面倒なことになるのでしょうか。
>>585 ごめんなさい、きちんと検証してみたら、だめのようですね。
プロジェクトを保存するデフォルトディレクトリはどういうわけか、変更できません。
あなたの記述通り、レジストリをいじらないと変更できないのかもしれませんね。
>>590 StatusBarの場合、uxthemeに関する知識があるならそこそこ簡単
ていうか、起動時のカレントディレクトリじゃないのか?
何が?
ひどいデキだな TurboDelphi
ADO+Oracleでやってるんだけど、やった事ある人いる? 繋がる事は繋がるんだが、どうSQLを投げて結果を引き取って良いのやら・・・。 使い方がさっぱり分からないよ、ママンorz ダレカオシエテ
TurboDelphiにXPスタイル関係のソースが色々入ってるみたい まだ見て無いけど
600 :
デフォルトの名無しさん :2006/09/15(金) 00:16:13
>>598 ADOQueryがあるじゃん。
DataSetでもいいし、何が問題なんだ?
ほんとにちゃんと接続(ログイン)できてる?
権限もちゃんとあるよね?
Del7からThemeManagerが内蔵されてるっしょ。
おはよう。
>>600 ADOQueryって、こいつだけ単独でいけるのかな?
直に接続文字列いれてSQL投げて。
ADOConnection使ったんだけど、TNSエラーでちゃった。
まぁ、これはoracle側の問題とは思うけど。
とりあえず、今日、色々試して頑張ってみる。
ありがとう。
朝、姉ちゃんが俺の部屋に起こしに来てたんだけど
俺は連日の2ch閲覧による夜更かしで眠すぎて起きれなかったんだ
全然起きる気の無い俺を見て、姉ちゃんが部屋に入ってきて、俺に馬乗りになる
鬱陶しいなーとか思ってると、姉ちゃんが寝てる俺の耳元で
「朝だぞおおおお早く起きなさああああい」
寝起きの悪い俺は姉ちゃんにムカついてガバっと起きた
「キャッ!!」
起きた瞬間俺の唇に何か柔らかい感触、びっくりして目を開けたら
俺が急に起きたせいでベッドの上に転んでる姉ちゃん
「え・・・と、今口に何か当たったんだけど・・・」
「ん・・・んー?wなぁに?w」
二人でちょっと無言になっちゃったけど気づくと姉ちゃんの手が俺の股間に乗ってるのがわかった
「ちょっと姉ちゃん、とりあえず降りて、ベッドから降りて!」
俺は焦って、慌てて姉ちゃんをどかそうとする。
「なによwせっかく起こしてあげたのにー・・・あ、そっかwコイツのせいかw」
俺の股間の硬さに気づかれた、俺は思わず逃げようとしたが寝起きで力が入らない。
「ちょっとおとなしくしててw」
そう言うと姉ちゃんが両手で俺の股間に手を置き、触りだした。
初めて他人に触られる俺の股間・・・みるみるうちに大きく膨れ上がるのが自分でわかった
「あ・・・wおっきくなってきた・・・もうwしょうがないなぁw」
そう言うと姉は俺のトランクスの中に手を入れてきて
長くなりそうなんで続きはこっちで↓
http://hobby7.2ch.net/test/read.cgi/point/1146442166/
へ へ|\ へ √ ̄| へ ( レ⌒) |\ ( |\)| |/~| ノ ,__√ /7 ∠、 \ 厂| __厂|__ |\_/ /へ_ \) | | | |∠ | |__ | / ! | | | |__ __| \_./| |/ \ .| |( ̄ _) | ) | | i | | | _ |__ __| / / ̄~ヽ ヽ. | | フ ヽ、 ノ √| | ! レノ | !. | ヽ__/ | /┌┐ _ \ / /| | | | | |( ノ| |`、) i ノ | | \_ノ ノ / \__/ ヽ、二__ノ ヽ/ | | | | / / | | . し' ノ ノ | | / / 厂| _厂|__ \\ノ | / / | |___∠-". | | ノ / | | └┐┌─┘ \_ノ_/ / (____) し' ノ/ | |_,ノ| | | l二二l ∠-''~ ノ/ ヽ__/ ∠_/ l二二l
クイックレポートでQRShapeで表を作ってるんですが、4隅を丸めてくれと言う要望が出ました。 可能でしょうか。
○────────○ │ │ │ │ │ │ │ │ ○────────○ とりあえずこれで時間稼いでくれ
時間稼ぎがやがて正式版に
丸も微分すれば直線だ
丸を定義してください
TQRShapeを継承して拡張
音楽を繰り返し流すにはどうすればいいでしょうか?
iPod なら出来るんじゃない
>>612 「繰り返しじゃない」方法は、見当付いてるってこと?
それとも、「音楽を流す方法」も込み?
>>612 は典型的な情報不足な質問
こんなやつに付き合うのは時間の無駄
と
>>613 が申しております。
Hage: Array[0..256*1024] of Byte; という配列に TFileStream からテキストデータを読み込みました Byteを文字として扱いたいのですが、このとき1バイト文字と2バイト文字の 判別はどうしたらいいでしょうか
if StrByteType(@Char(Hage[0]), i) =
>>617 漢字コードによるが、SJISなら、
二通りある。
・コードで判定
・APIに任せる
function IsKanji1(const c: Char): Boolean;
begin
{
Result := (($81 <= Ord(c)) and (Ord(c) <= $9F))
or (($E0 <= Ord(c)) and (Ord(c) <= $FC));
}
Result := IsDBCSLeadByte(Byte(c));
end;
>>619 前者 LeadBytesは第2バイトにも含まれる 第2バイトはAsciiを含む
後者 LeadByteしか判定出来ない
うーん難しそうですね とりあえず教えてもらった関数を調べて試してみますね
WideChar('a') は問題ないですが、 なぜ WideChar('あ') はダメなんでしょうか。 WideChar($3042) とか WideString('あ')[1] とするしかないんでしょうか。
>>622 'あ'の時点で、文字じゃなくて文字列だからだよ
'あ'がSJISだからかな。 WideCharは単なるキャストで、JSIS→UNICODEの返還をしてくれるわけではないと思うぞ。
L'あ' ・・・・ごめん
627 :
デフォルトの名無しさん :2006/09/16(土) 12:34:01
Delphi 7 で、ToolButton に Image は表示せず Caption のみを表示して います。ここで ToolBar の ButtonHeight を変更しようしてもできない のですが、どうしたらボタンの高さを変更できるのでしょうか。
AutoSize := False
629 :
627 :2006/09/16(土) 16:01:30
AutoSize に False を設定しても変更できませんでした。 ShowCaption を True にしちゃうと変更できないんです。
ツールバー自体のHeightを変更してみるとか
回答者は試してから言いなさい
大変だな、回答者。こんなスレ、放置したらいいのに
同一のプロジェクトを、自分がDelphiでWindows用のソフトを、別の人がLazarusでLinux用のソフトを開発しています。 プログラムの中で、Delphiのときに行う処理とLazarusのときに行う処理の場合分けをしたいのですが、 {$IFDEF VCL} Delphiの時の処理; {$ELSE} Lazarusの時の処理; {$ENDIF} と書いても、Delphiでコンパイルしたときに Lazarusの時の処理; をしてしまいます。 どこが間違えてるんでしょうか?
Font小
>>633 そんなのは試して回答するやついるんか?
636 :
633 :2006/09/16(土) 16:54:11
>>634 VCLをvclにしてもうまく行きません。
>>635 過去に同じような経験をした人が回答してくれるかと思いました。
>633 Help 条件指令の使い方
>>633 VCLなんて定義されてないんじゃないのか。
VCLのソースには
{$IFDEF MSWINDOWS}
uses Windows, Messages, SysUtils, Variants, TypInfo, ActiveX;
{$ENDIF}
{$IFDEF LINUX}
uses Libc, SysUtils, Variants, TypInfo, Types;
{$ENDIF}
なんて記述があるからLINUXの場合はさらにKylixとLazarusで分ければいいんじゃないの。
639 :
633 :2006/09/16(土) 17:01:03
>>637 >>638 ありがとうございます。
{$IFDEF MSWINDOWS} と {$IFDEF LINUX} を使うべきだったのですね。
解決しました。
640 :
627 :2006/09/16(土) 17:09:21
私のツールボタンは解決しない…
しかたないので、
>>634 をヒントにフォントを少し大きくしてokと
641 :
デフォルトの名無しさん :2006/09/17(日) 05:31:12
TCustomShellTreeView から派生している TShellTreeView と TFileListBox を貼り付け procedure TForm1.ShellTreeView1Change(Sender: TObject; Node: TTreeNode); begin FileListBox1.Directory := ShellTreeView1.Path; end; というコードを書いただけのプロジェクトでもメモリーリークしてしまいます。 これを避けるにはどうしたらいいのでしょう?
TShellTreeView というコンポーネント自体が既にメモリリークしている模様(6Per付属の物)。 上のコンポ置いただけでなんのコードを書いてないプログラムからもリークが検出される。 コンポのソースが\Demos\ShellControls\ShellCtrls.pasにあるから、本当にリークしているのか、 誤検出なのか、検証してみてください。
みなさんは、1クラス1ファイル(pasファイル)で作っていますか? それとも、結合度が強いクラスは一つにまとめていますか? ちなみに、おいらは1クラス1ファイルで作って結合度が強いクラスを フォルダで分けています。 しかし、Delphi2006のモデルビューで見るときには複数のクラスを 一つにまとめた方が良さそうな気がしましたので聞いてみました。
> 結合度が強いクラスは一つにまとめています
最近のDelphiはともかく、 基本的にDelphiにはクラス内クラスが無いから、 他のクラスのプライベートメンバーにアクセスさせたいときだけ同じユニットにしているかな。 もちろん、パブリックなプロパティを作ってもいいんだけど、そうするとどのクラスからでも見ることができちゃうからね。
基本は1クラス1ユニット しかし俺様ライブラリは複数クラス混在型
ソースみれば分かるように、1クラス1ユニットなんか無意味だ
>>644 結合度の強いのは、1つにまとめてる。
privateでも同ファイル内ならアクセスできるのを利用している
650 :
644 :2006/09/17(日) 15:36:51
参考になりました 複数のクラスを1ユニットに結合する場合、複雑なモデルでは すぐ1万行突破とかになりませんか? でも、名前空間に階層構造が無いので、本来は機能毎にユニットを管理する のが正しいのかもしれませんね。 これを機に設計を見直そうかなぁ
さくっとカット&ペーストで別ユニットに移動できるような独立性の高いクラスは 1ユニットにまとめておいてもあまり問題を感じない。 逆にフォームとかが絡んでくるとすぐ破綻するな。
>>639 解決したんで横やりにしかならないが、
Delphiとlazarus(というかfpc)を分けたいなら、
{$ifdef FPC}
だと思う。
BSD2006と共存させて旧バージョンのDelphiを使おうと思っています。 手元にVer4,5,6,7の三つがあるのですが、みなさんどのバージョンを よく使われて(今も使って)いましたか? できるだけ、できたアプリのサイズが小さくて、IDE等のバグが少なくて 使い勝手の良かったバージョンを教えてください。
>>654 う〜ん D2はもっていないのです。
このバージョンはD1がオマケでついていたそうですね。Warp4でつかえるな。
俺は5,6,7,2005持ってるけど6使ってる 理由は特に無い
3.1 std, 4 pro, 6 per, 2005 pro ともっていて、3.1 -> 4 -> 2005 と6以外の手持ちの最新を使い続けてるね. 今は turbo delphi 2006 explorer に移行中.
>>656 D5はスプラッシュ画面がBCB見たいですが、認証しなくていいから楽ですね。
D6は私も先月まで使っていましたがHDを整理して現在消しております。
実は最近までWin2000だったもので、D7のメニューアイコンに違和感があり、
あまりD7は使っておりません。それにあの実行ファイルのチェスの駒(ナイト)
見たいなアイコンよりD6の柱のアイコンがまだ好きだったせいもあります。
D7はメニューのキャプション、たとえばファイル(F)の(F)の部分が、起動時に
なぜか表示されなくて、マウスポインタを近づけると表示するという変な挙動が
あって(私だけか?)なんか気持ち悪かった部分もあります。
今月、5年ぶりにノートパソコンを買い替え、OSもXPになり、BSDがインストール
できるようになりましたが、IDEの機能がごちゃごちゃして、イラついています。
上で毛の生えたブリーフさんが言われてますが、私はコンポーネントパレットの
使い勝手は改悪だとおもいました。オプションで旧タイプに変更できないし・・・。
アイコンの宝石化は私も好きです。できればWin32版のほうが青い宝石で あって欲しかった。右下のシンボルはいりませんね。 しかし、一番BSDで悲しかったのはHELPがいっそう使いづらくなったことです。 なんか違和感あります。うまく説明できません。 D8とBSD2005は暗黒史という人がおられますが、ほんとバグが多かったのでしょうか?
誰か宝石のアイコンリソースうpしてくれない? Del6に組み込みたい。
なんか涙が出てきた・・・
665 :
633 :2006/09/17(日) 23:01:51
>>652 追加情報ありがとうございます。
やりたいことは「もしDelphiだったら」なので、{$IFDEF WIN32}で行こうと思います。
今後「もしLazarusだったら」という場面が出たらそちらを使おうと思います。
BDS2006と、D7を使っているなあ。
バージョンUpの葉書が届いた… BDSじゃないと多言語で入れられないみたいね。 BDS買っちまうかなぁ… これが某の狙いだったりして。
でも、もうしばらくするとHighlanderがでるかもだぜ?
TTableのLocateを使おうとして if not Table1.Locate('Comment',Edit1.Text, [loCaseInsensitive,loPartialKey]) then MessageDlg('該当するデータがありません。',mtInformation,[mbOK],0); 例えば'Comment'に「わたしのカメは大きいです」という文字列が入っていたとして、Edit1に「カメ」と入力して このコードを実行しても、'該当するデータがありません。'というダイアログがでてしまいます。 OptionでloPartialKeyを指定すれば部分的に含まれると止まってくれると思ったんですが、どこがいけないんでしょうか? 仮にEdit1に「わたしのカメは大きいです」と全部入力すれば、このレコードで止まってくれます。
670 :
デフォルトの名無しさん :2006/09/18(月) 03:29:19
タブキーを押した時にカーソルが今は8マスくらい進んでしまうのですが、4マスくらい進むように設定を変えたいのですが、どこから変更できますか?
コードエディタの話? TMemoの話?
>>669 使うべきメソッドがちげーよ。
Findなんとかとかを使えよ。
StatusBarにProgressBarを組み込む方法は、Webページが見つかったのでわかりました。 これって、StatusBar.Panels[2]とかにProgressBarを組み込む方法はないんですか?
位置とサイズをpanel[2]とかに合わせるだけだ。やってみろ。
>>674 やってみますた… できました…
Parentに指定はできないんですね…
676 :
デフォルトの名無しさん :2006/09/18(月) 11:54:14
678 :
677 :2006/09/18(月) 12:20:35
リロードしてなかった。ごめん
679 :
670 :2006/09/18(月) 14:16:09
>>671 ソースを書くところのことです。前に一回変更できたような気がするのですが、思い出せません(´・ω・)
BDS2006 [ツール][オプション][エディタ設定][ソースオプション][タブ位置][4] で、いい?
Delphi 6 Personal なんですが、半角スペースの表示はできないですか?
682 :
679 :2006/09/18(月) 15:16:00
684 :
681 :2006/09/18(月) 16:35:43
>>683 エディタなどで、半角スペースや改行やEOF表示できるものは多いと思うのですが、
あんな感じで、半角スペースを表示できると把握しやすくて好ましいです。
Delphi使っててよく思うんだけど、 1フォームにつき1クラスという概念ではなく(継承ではなく) オブジェクト単位にクラスを指定できれば もっと綺麗な設計ができるのになぁと思うんだけど みなさんは如何思いますか? ターゲットアクションというデザインパターンがそうらしいけど。
何言ってるかわからない
(´・ω・`) ショボーン
同じく何を言ってるのかわからない。 どっかで新しく覚えた単語をただたんに書きたいののではと邪推してしまう。 わかる単語がある文章も(”オブジェクト単位にクラスを指定”ってとこね) さっぱり意味がわからない。
>>688 上はダウンロードできませんでしたが
下はうまくいきました
ありがとうございます
>>687 ∧,,∧ / つまり
ミ,,゚Д゚彡 < Button1じゃなくて
ミつ旦(ミ~~ \ TButton1を生成して
@ミ ミ コードかければ
∪''∪ イベントハンドラなんて持たずに
メソッド編集できてい〜〜〜なーーー、
って事?
漏れも昔、妄想したが
まあ、今のままでもいいんじゃないかとも思う。
全部の部品が決まった既存のクラスではなく
継承関係にあるってのは、それはそれでクラス大杉るんじゃないかと。
IDE上にコンポーネントを配置する、
という行為が、継承クラスではなく、
既存のクラスである必要があったりして
実装するのが楽だったんじゃないのかね?
JaneViewのビューアは、TWebBrowserのようなリッチなコントロールをイメージして コントロールを継承して機能を追加する形でプログラムを組んだのだけど、 どうしようもないくらいぐだぐだな、見るのも嫌なソースになってしまいました。 自分が初心者だったこともあるけど、やはりUIとそれ以外のロジックは別な機能で、 その間の結合はできるだけ弱めておく方がよいと思います。
JaneはFreePascalで、非Windows対応のものが出ないものか。
>>691 さん
>>693 さん
そんじゃなくて、各オブジェクトをTFromのサブクラスに配置するのではなく
指定したクラスに配置できればいいかなぁと思ってね。
同一画面上に検索する部分、データ入力する部分、その他の部分があったとすると
それらを独立したクラスで実装できると嬉しいなぁと思うけど、みんさんは
そんな風に思わないのかな?(今も、カスタムコンポーネントにすればできる
けど、初期設計から利用するのは現実的ではないと思ってね)
※例!あまり良い例ではないけど・・・
画面上の検索領域のイベント処理はAクラスで処理
入力領域のイベント処理はBクラスで処理
その他のイベント処理はCクラスで処理
のように、ターゲットクラスを指定してイベント処理を記述できれば
設計もシンプルになるだろうとおもうんだけど。。。ダメ?
フォームに置くんだから、インスタンスがフォームのフィールドになるのは極めて自然だと思う。 そんなもんが独立したクラスなら、面倒でたまらん。
>>698 でもそれじゃ、TFormのサブクラスで全部処理するか、
モデル部分だけを切り出して別のクラスで処理するか、
(これもコントロール部分が複雑になる可能性あり)
該当部門のコントローラを別のクラスに渡して処理させる
(このケースが発生するのであれば、元々別のクラスで処理できればもっと良いよね)
必要があるよね。
あー、クラス設計って難しいぃーーーーーーーーーーーー
>>697 Frame を使ったらどうでしょう。
Form にForm をはめこむ技もあります。
> でもそれじゃ、TFormのサブクラスで全部処理するか それで都合が悪いことってなに? やたらでかいユニットになるってこと?
_________ ∧,,∧ / ミ,,゚Д゚彡 < ええっと、質問、いいかしら。 ミつ旦(ミ~~ \ @ミ ミ  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ∪''∪ function ExtFileOpenExePath(Ext: String): String ってのを作りたいです。教えてくださいま。 ExtFileOpenExePath('txt') ってやると、 C:\WINDOWS\system32\notepad.exe が戻ってくるのがいい。 実在のファイルがあるときは function ExtRunExeFileName(FileName: String): String; var AppName: array[0..MAX_PATH] of Char; AppHandle: THandle; begin AppHandle := FindExecutable(PChar(FileName), nil, AppName); if AppHandle > 32 then Result := AppName else Result := ''; end; ってやると、求まるんだけど、実在のファイルがない(作りたくもない) 場合でも拡張子からExeパスを取得したい。
_________
∧,,∧ / まさにFrameか
ミ,,゚Д゚彡< データモジュールではないかと
ミ つ旦)~~ \
〜ミ ミ.  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
∪''∪
>>697 理想を最初から追うのではなく
必要になったときに、設計変更も辞さない構えで
いけばいいんとちゃうかしら。
(´・ω・`) ショボーン
再利用も考えるとTFrameだな。
中村氏もたしか多用してたよな。
まぁ、継承に若干バグがあるのが難点だが。
>>704 つか、データモジュールはこういうケースにどうつかうんだ?
>>695 マークしたTabをショートカットで閉じると全部閉じちゃうバグもそのせいという感じなのかな
チェンジイベントの使い方が原因なんだけど
とか本物か分からずに書いてみるてすと
>>687 > ターゲットアクションというデザインパターンがそうらしいけど。
つ TAction
_____
∧,,∧∩ /
ミ*゚Д゚*ミ < ありがとーう
>>705 さん
(ミ ミ \
〜ミ ,,, ミ  ̄ ̄ ̄ ̄ ̄
し' `J
TFrameって、FormCreateとFormDestroyがないんだよなあ。 生成と、破棄処理どうしてる?
ちょっとききたいのですが、 Delphiで、タブブラウザを作ろうというホームページがあったと思うのですが、 おぼえている人がいたら、教えてください。
>>711 Create とDestroy をoverride
>>714 それだと不都合があったような。・・・
ごめん確認してないけど。
Edit1のTextの文字列が、『半角スペース』か『全角スペース』のみだった場合は、Edit1.Text:='';にしてやろうと思いました。 ところが、実際コードを考えようとすると、@lengthで長さをとって、A'_(半角スペース)'か' (全角スペース)'が存在するか、 Bその場合に半角スペースか全角スペース以外の文字が存在しない。 場合にText:='' っていうとてつもなく厨なコードしか思い浮かばないので、ベテランの方ならどうやって解決するのか教えてほしいです。
3以外の必要性がわからんのだが。 まあ長さ0の時に判定を端折るというのはあるかもしれないが。
if ExecRegExpr('^[\s ]+$', Edit1.Text) then Edit1.Text := '';
オレなら面倒くせぇからとりあえずTrimしてLengthだな
D6パーで、AssinFile()のUnicode版みたいの無いス化?
エロい関数名だな
723 :
717 :2006/09/19(火) 08:35:21
あ、レスありがとうございます。
>>718 さんへ
未定義の識別子’ExecRegExpr’って出てしまいます。
Delphiはバージョン5Proです。
>>720 さんへ
Trimは全角スペースは消さないと思うです。
StringReplace2連発とか ま、普通にチェックした方が速いけど
いつもはDelphi2005を使っているのですがマシンの調子が悪いので Delphi7にソースをフォルダごと移動してデバッグしようとしたところ全く動きません。 難しいコードやAPIは使わずにボタンを押したらFunctionを読んでファイルに書き込んで 終わりってコードなのですが、Functionにすら飛びません。 これってどうすればいいのでしょうか? もしかして2005のソースは7では動かないの?
普通に if (Edit1.Text = ' ' or Edit1.Text = ' ') then Edit1.Text := ''; にするけどなー俺なら。
>>726 edit1.textが' 'だったり' 'だったらどうする?
>>725 「全く動きません」では情報不足。
どこでこけるのか、コンパイルは通るのか通らないのか、そのときのエラーメッセージは何なのか、
などの情報がないと答えようがないです。
とりあえずコンパイルが通らないならばどういうメッセージが表示されるのか、
通る場合は[F8]でステップ実行を行ってどこに原因があるのかを確認してみよう。
>>728 情報不足ですみません。
とりあえずBP設定してF8でステップ実行しようとしても、
ステップを時々すっ飛ばします。
あと、Functionに飛ばないといけないところでFunctionの中にもBPを
設定してるのに、Functionに飛ばずにすぐ下のコードを実行します。
結果Functionからの戻り値を参照しようとしても''のためにエラーになりコードが停止します。
最適化オフ デバッグ情報関連全部オンにしてリビルドしたら
>>727 あー1個じゃない場合か。
それなら正規表現かな。
>>730 駄目でした。
たしかいくつかのファイルを消してコンパイルしたら再度それらのファイルを作り直すって方法が
あったと思いますがあれってどのファイルを消せばいいんでしたっけ?
再構築すればいい。と思う。 てゆうかダメな全ソース晒せ
AnsiTrim を使え。
>>732 修正してるプログラムと
実行してるプログラムが別物。
質問というわけではないのですが、愚痴らせてください。 私はDelphiをVer1の時から知っており、Ver1はフロッピーで買いました。 当時、いろいろ入門本が発行されており、私は本のとおりにコンポーネントを フォームに置いて、プロパティを弄って、メソッドを書いてと、アプリケーションを 作っておりました。しかし、すぐにDelphiやVB、その後購入したBCBもやっぱり その程度のプログラミングで、飽きたというか留まってしまいました。 原因は、プロパティやメソッドをいくら勉強しても、他人が作ったアプリケーションと 大差ないものしかできないと痛感したからです。たとえば、テキストエディタを 作ろうとおもって、メモコンポーネントをフォームに置いて・・・を しても、Winに搭載されている「メモ帳」と同じ程度のエディタしかできません。 見栄えを徹底的に変えるとか、すごい機能を搭載するとか、拡張の仕方があるとは思うの ですが、新しくコンポーネントを設計するとかWin32APIを勉強するとか、結局 結論はそこに行き当たるわけで、楽に高度なアプリケーションを作りたいのに、 オリジナリティを追求すると決して楽じゃなくDelphi以外の知識がDelphi以上に 要求され、それをどういう順番で、何を利用して学ぶのか、道しるべが無くて いつも、入門者レベルで留まってしまうのです。
一太郎やWordの編集画面はどうやって実現するのでしょう。 両者ともにVC++でできているので、道具はVC++を持っていればそろっているはず、 またDelphiだって理屈上、VC++とまったく同じ道具として利用できるはずだから 一太郎やWordと同じアプリケーションを開発できるはず、しかし、実際、 何をどういう考えで、どういう順番で開発し、必要なコンポーネントを用意して それらを組み合わせてアプリケーション一本を構築していくのか、さっぱりわからず、 書店を探しても、WordやExcelなみのソフトウエアをどう作り上げるのか、基礎レベル から教えてくれる書籍は、私はまだ一冊も見つけたことがありません。
プロ、アマ問わず、Delphiでソフトウエアを開発して配布しておられる方は いったい、どんな書籍や講習会を通して、オリジナリティあふれる高度な ソフトが開発できるようになったのか、本当に知りたいです。 私はいつも貧弱な、誰でも一度は作ったようなソフトしか作れません。
大規模なソフトウェアの開発に必要なのは、言語に対する習熟度よりも、 ソフトウェア工学に類するような、より広範囲な、方法論的な知識が求め られるのではないか。
>>736 APIとか別に覚えるようなもんではない。
必要なとき探せればそれで無問題。
WordやExcel並みのソフトを個人で作れたら、そりゃ天才だわな。
まずはコンポーネントを自分で作れるようになってみそ。
そしたら今より世界が広がるから。
TEditor という、日本人開発者が作ったテキストエディタコンポーネントがある。 これはVCLやWindowsの、エディットコントロール機能には頼らず、処理はほぼ 時前で実装されているようだ。 エディタコンポーネントの設計と実装の実態について、これの日本語でのコメ ント付きのソースコードは、なにより具体的な参考書と成り得るのではないか。 VCLの拡張で大規模ソフトウェアの基盤となるコンポーネントを、というなら、 JCL、JVCLのソースコードも参考になる。コメントやドキュメントの英語が苦に ならないなら、膨大なコンポーネントのソースは、Delphiのいわば国語辞書になる。
>>737 > 基礎レベルから教えてくれる書籍は、私はまだ一冊も見つけたことがありません。
当たり前です。
どこの世界に、飯の種を公開する人が居るでしょう?
>>738 > どんな書籍や講習会を通して
一太郎やWordみたいなアプリを作っている会社に入るか
オープンソースや商用アプリ・コンポーネントのソースを購入して解析するか
詳しい人を探して、友達になるか。
・・・プロでも、自分の会社が作っている分野&自分が関わった範囲でしか分かりませんし
前任者や同僚の成果を頼りながら、人海戦術で作っていくので、
1から作れるかと言うと、なかなか難しいと思います。
まぁ、要するに、なぜこうするとああなるのか? という原理がわかってないんでしょ。 Word や一太郎をつくる、ってことは量的な側面は一人じゃ無理。質的な面では DelphiでもVC++でも同等の事が出来る、ってことはほんと。じゃ、何が分からないのか、 結局、自分の知りたい事がなんなのか分かってないんだよ。 メモ帳を越えるエディタは、TEditor を使えば出来る。だから、時間を惜しまず TEditor がどのようにしてつくられてるかを研究するとよい。 そういうことをしないと、なんにも具体的なことは理解できないだろう。
結局のところ、道具や材料を揃えたからといって
素人にビルは建てられません。
プロですら、色々な業者が寄ってたかって、何ヶ月もかかって
ようやく、1棟建てられるのです。
素人が1人で気軽に短時間で作れるのは、犬小屋くらいが関の山です。
>>744 > 結局、自分の知りたい事がなんなのか分かってないんだよ。
その通り!オリジナリティあふれる、高度な犬小屋を作りたい
-> 具体的には、どんな犬小屋なのか?が分かれば、解決策が見えてきます。
あとはお金の問題です。見栄えのする高度な機能の部品を買ってくれば
それなりの物が完成します。
んだ。 プロの仕事を一朝一夕にマネできるわけがない。 その道に生きる覚悟を持って日々研鑚すべきだ。
TListやTStringsらに頼らずポインタがんがん使ったプログラムにすりゃあ C波の速度が出るよあほか。 コンパイラとスクリプトとVMの区別ぐらいできるようになっとけよ。
>>743 その呼び出してる関数の中で raise 記述してたらそこでとまる?
なんですか、不躾に。
>>750 747へのレスでした。
多分、コンパイルされてないんでしょ。
DCUを消せば、動きがあると思います。
ちょっと質問です。まず自作の構造体を宣言しまして、 TKokyaku = record Myoji: string; Name: string; Age: integer; Memo: string; end; こいつをTListで管理しようと思い、 var listKokyaku: TList; … このlistKokyakuにTKokyakuのポインタを追加するには、 Kokyaku.Myoji := 'いとう'; Kokyaku.Name := 'さだのすけ'; Kokyaku.Age := 22; listKokyaku.Add(Pointer(Kokyaku)); で、追加できると思うんですが、取り出す方法がわかりません。 仮にKokyakuがinteger型だったら、Interger1 := integer(listKokyaku[2]); みたいな方法で取り出せると思うんですが、独自の構造体型の場合のinteger()のようなキャストの仕方がわからないのです。
PKokyaku = ^TKokyaku; TKokyaku = record Myoji: string; Name: string; Age: integer; Memo: string; end; var Kokyaku: PKokyaku begin New(Kokyaku); Kokyaku.Myoji := 'いとう'; Kokyaku.Name := 'さだのすけ'; Kokyaku.Age := 22; List.Add(Kokyaku); 〜 for i := 0 to List.Count - 1 do begin Kokyaku := PKokyaku(List[i]); Kokyaku.Age := Kokyaku.Age * 1024; end;
用が済んだら Dispose
ありがとうございます。
for i := 0 to List.Count - 1 do begin
Kokyaku := PKokyaku(List[i]);
ループ使わないといけないのか〜
ところで、>Kokyaku.Age := Kokyaku.Age * 1024;
なんで1024を掛けるんですか? (^^;
>>754 デストラクタで、
for i := 0 to List.Count - 1 do begin
Dispose(PKokyaku(List[i]));
end;
で、いいですか?
>>755 それでもいいが、delのソース参考にして
Clearメソッドを実装しとけ。
BDS2006は何かとクソと言われますが、バグが多いんですか?買わない方がいいんですかね
そんなん聞かれてもオラ知らんよーーーーー
>Clearメソッド procedure ClearKokyaku; var i: integer; begin for i := 0 to List.Count - 1 do Dispose(PKokyaku(List[i])); end; でつか? いや!違うな。Itemの中のある一つのKokyakuが不要になった時にそれだけDisposeですよね? どこで実装すべきか… 悩みます。
>>759 そのリストのクラスを作ったほうがよくね?
そっちの方が再利用しやすいと思うが・・・。
Add
Clear
Delete
Count
あとは各プロパティを書けば幸せになれるぞ。
こんなの TKokyakuList = class(TList) private function GetKokyaku(index: integer): PKokyaku; procedure SetKokyaku(index: integer; const Value: PKokyaku); public destructor Destroy; override; function Add(Value: PKokyaku): integer; procedure Delete(Index: integer); procedure Clear; override; property Items[index: integer]: PKokyaku read GetKokyaku write SetKokyaku; default; end;
つーかだんだんrecordじゃなくてclassにしたくなってきた、、
763 :
752 :2006/09/20(水) 11:48:23
>TKokyakuList = class(TList) いま書きかけてたんですが、俺のはFListをフィールドで作って、コンストラクタでCreateするというやつorz いわゆるhas a関係ってやつです。 継承して作るほうがスマートですけど、override(下位で再定義)の理解が曖昧なんでできません… 数日間、悶えてみます。
record型の話を756がclass型の話にしちゃったからなあ
>>763 無用なメソッドを隠蔽したいから、おれもそっち派だ。
>>764 この手の奴は普通にクラスでスマートに実装するだろ。
データとUIを簡単に繋げるし、何よりメンテしやすいしな。
この考えは規模によらず基本だろ。
>>763 それでもいいと思うぞ。
または、そのFListが上記のTList派生TKokyakuListってのもありかも。
>>766 規模によるとは思うけど、
確かにクラスにしとけば何かと楽だね。
っていうか基礎作っておけばコピペしてちょろっと書き換えてにょろーんだろ
770 :
769 :2006/09/20(水) 12:22:25
>>770 俺の予想では次のステージのどっかで怖い画像が出てくる奴と思う。
ちがうかい?
なぜBCBよりDelphiの方が初心者向きと言われているのであろうか。 BCBもRADだし、VCLが使えてDelphiと大差ないはずである。
無料分があるかないかじゃない?
C++の文法がとても初心者向きじゃないから。
ロマンチックがとまらないからじゃねーの
「->」と「.」を使い分けれ!って点でもうだめ
それは敬語と謙譲語を使い分けるのより簡単だぞ
初心者のくせに生意気な
Application.ExeName 以外で、自分自身の実行ファイル名をフルパスで取得する方法はありませんか? コンポーネントを作っているのですが、コンポーネント自身で使用されている実行ファイル名のフルパスを取得したいのです。 よろしくお願いします。
ParamStr(0)
GetModuleFileName
SpinEdit の数値を右寄せにするには、どうしたら良いのでしょうか?
昨日気づいたんだけど、Delphi7のTListSortCompareの説明が間違ってるな 符号の意味が逆だ
>784 spin.pas createparams or DT_RIGHT
>>785 ボーランドほどの大きな会社でさえ、バグや間違いだらけなんだもん。
俺らがバグだしたって不思議じゃないよなぁってことで、大変励みになるよな。
いや、それ、単なるこじつけ。悪いことは真似しないように。
789 :
デフォルトの名無しさん :2006/09/21(木) 10:46:16
D4からD2006にうpしたらHelpがあまりにも糞なのですが、Helpが昔と同じ形式で 一番最新なのはどのバージョンでしょうか。 また、そのバージョンと最新版は機能面で何が異なりますか? 教えてください。
>>790 D7のヘルプもFTPからダウンロードできるよ。
> ボーランドほどの大きな会社 大きくないって。キミの妄想。
今はググルみたいに小さい会社の時代。 大手メーカーは中核商品にイノベーションで潰されたとき負け組みに。
youtubeも従業員30人程度の小さな会社だけど、ワーナーが擦り寄ってくるぐらいだぜ?
ワーナーが擦り寄ってくる(笑)
DBを利用するソフトって、使う場合、DBがインストールされていないと使えないのですか?
そらそうだ DBエンジン自体組み込むという手もあるが
BDE がインストールされていれば Paradox は使えると思うけど。
今までのDelphiでもっとも安定し、バグも少なく、 今後もWin32下で使えるバージョンは何ですか。BDS2006がインストール できないので、過去バージョンでお願いします。
よくわからないけど、D5 理由:認証がいらない最終バージョン、D6みたいに糞なCLXが無い。 ヘルプがまだましだった頃の製品
各バージョンそれぞれにファンが居るから、難しいね。その話題は。 2ch やってて一番驚いたのは、D3 の熱烈ファンが生存していることだな。
Performance Data Helperを簡単に扱えるコンポーネントか何かありましたら教えて下さいまし。
D5はQD3が動けば使うんだけどねえ
D5だなぁ D5が駄目ならD7
そういや、グーグルで思い出したけど、グーグルの検索文字入力するところって、半角か全角スペースで何個か検索ワードを入れられるでしょ? あれをTEditで実現しようとチャレンジしたことあるんですよ。 で、Edit1.Textのlengthとって、半角スペースか全角スペースならbreakするようにしてTStringListにAddしていこうとしたけど、力不足でできなかったorz あれを実現するのはCommmaTextみたいにスペースを区切り文字として簡単にできるんですかね? 誰かトライしたことある人、教えてほしい。
正規表現を使うまでもないと思うが
ちかんすればいいのに
パーサの初歩だな
今こそStringReplaceを使う時 var hoge : TStringList; procedure addstrlist; begin Edit1.Text := StringReplace(' ',' ',[rfReplaceALL]); hoge := TStringList.Create; hoge.CommaText := Edit1.Text; end;
811 :
805 :2006/09/22(金) 05:21:14
>Edit1.Text := StringReplace(' ',' ',[rfReplaceALL]); ん?全角スペースを半角スペースにして実現できますか? そういえば全角スペース→comma、半角スペース→commaにStringReplaceして、CommmaTextにぶち込めばできますね!
フォームがある大きさ以下にならないようにするコードは見つかるんですけど、TPanelがある大きさ以下にならないようにするコードはありませんか? Panel1.OnResizeで if Panel1.Width<300 then Panel1.Width:=300; みたいにするしかないんですか?
813 :
805 :2006/09/22(金) 05:32:14
あーダメだ。 スペースが続いたらcommaも連続してしまいますね。 StringListに集めて文字がない行を削除すればいいのかな? なんか、スマートじゃないな…
#32#32 → #32 を文字列の長さが変わらなくなるまで繰り返したらどぉ?
やっぱりStringReplaceでしょ。
>>812 Constraints
それか、PanelもWindowだからウィンドウメッセージで。
TRichEditを使って自作のエディタを作成しはじめました。 例えば「procedure DeleteListItem(ItemName: string)」とRichEdit1に打ち込んだとして、「procedure」の文字の色をコード上から赤とかに変えるにはどうすればいいでしょうか? はじめから予約語を登録できるコンポなんかもありますが、勉強のためにつくってます。
>>814 ありがとう。
継承元のプロパティまで見るように習慣つけないとダメですね〜。
そんな簡単なアルゴリズムも思いつかないなんて・・・ 転職した方がイクナイ?
大丈夫か日本の技術力は…… procedure T(L: TStringList; const S: string); var F, I, CharLen: Integer; Add: Boolean; begin L.Clear; F := 1; I := 1; repeat CharLen := 1; Add := False; if I > Length(S) then Add := True else begin if (S[I] in LeadBytes) and (I < Length(S)) then Inc(CharLen); if (S[I] = #32) or (CharLen = 2) and (S[I] = #$81) and (S[I + 1] = #$40) then Add := True; end; if Add then begin if F < I then L.Add(Copy(S, F, I - F)); F := I + CharLen; end; if I > Length(S) then Break; Inc(I, CharLen); until False; end;
人間なら、文字列の先頭から見て行って、
終わりか空白があれば前に区切ったところからそこまでを塊として追加していくだろ?
そのまま書けばいい。
ってことで
>>818 >>805 な。
>大丈夫か日本の技術力は…… うん、日本にはもうギジュツが無くって、韓国のサムスンからパクってるんだって。 エンコリの韓国人が言ってた。
821 :
デフォルトの名無しさん :2006/09/22(金) 10:34:37
TStringListをつかうならdelimitedtextてメソッドあるからそれ使ってみたら、引数を複数とるプログラムの例ならコンソールプログラムに例があると思いますが・・・
>>743 レスありがとうございます。
raiseもやってみたのですが、スルーでした。
意味不明だったのでD7を再インストールしたらきちんとできるようになりました。
でも、きちんとサブルーチンに飛ぶようになっても戻り値がめちゃくちゃでして。。。
外部pasファイルも同じフォルダに置いててフォルダごと移動してるのですがなぜか
きちんと値が帰ってきません。
F8でステップをトレースしていくとサブルーチンから外部PASファイルを呼び出したとき
までは同じ動作なのですが、外部PASからの戻り値が空白になってしまいます。
こういう場合は外部PASにもBP設定してひとつずつ確認するしか無いのでしょうか。
824 :
デフォルトの名無しさん :2006/09/22(金) 11:16:11
>>822 その外部PASってやつを、プロジェクトから削除して、
同じフォルダに置いた外部PASを、プロジェクトに追加。
>>825 レスありがとうございます。
やってみたのですが、駄目でした。
外部PASやサブルーチンにBP設定してもスルーされます。
ちなみにD2005だときちんとできますしraiseもきちんと動作します。
今あるdcu を全部削除
> CPU とオペレーティングシステムにとって最適な処理効率が得られるため,通常はできるだけ汎用整数型を使うようにします。 汎用型と基本型の、それぞれのメリットとデメリットが分からない……
32bit CPUと32bit OSでは、 4バイトの整数型を使うのが速度的には一番有利なわけよ。 で、16bit CPUと16bit OSでは、 2バイトの整数型が一番有利なわけね。 で、Pascalの場合、integerと宣言した場合は、コンパイラが開発環境によって integerを2バイト型と4バイト型を自動的に使い分けてくれる。 これが汎用整数型。 でも、DLLで、エクスポートする関数の引数とか、レコード型をDLLをまたいで渡す場合、 あらかじめ整数型のバイト数を決めておかないといけないわけよ。 そう言う場合は、どんな開発環境でもバイト数が変わらないShortIntやLongIntといった基本型を使うってこと。 なお、Delphiの場合のintegerは、LongIntと一緒。 昔のPascalコンパイラでは、integerは、ShortIntと同じものと扱うものもあったんでしょ多分。
しかしx64環境ではIntは未だに32ビットなのが解せない。 まあLongとの差別化と、メモリの節約を考えたんだろうが。 Long DoubleがSSE2のせいで64bitに縮小されたのも解せない。
>>827 DCUを両方とも削除してコンパイルしてみたのですが、駄目でした。
もう全く意味不明です。。。
まあソースを晒せないって所でもう終わってるよ。。 誰もこれ以上まともに答えてくれないと思う。
>>831 ソースが少ないのなら、新規で作ってコピペ。
これで絶対直るから、やってみろ。
834 :
828 :2006/09/22(金) 13:34:28
>>828 おおおおお、まじさんくす。すごくわかりやすかったです。
有利になる理由や、コンパイルの話、DLL の話、たいへん勉強になりました。
835 :
829 :2006/09/22(金) 13:55:24
なにそのジサクジエンw
836 :
828 :2006/09/22(金) 15:05:26
正直スマンカッタ orz
>>831 参照パスがおかしいんだと思うけど…
いっそのことソースを消してコンパイルしてみたら?
意外とどっかにdcuがあってビルドが通ったりして。
FormとFrameってどう違うの?
Formの上に貼り付けるのがFrameじゃね? Formの上にFormは貼れなかった希ガス
840 :
838 :2006/09/22(金) 15:55:55
>>839 FormがなくてもFrameを新規作成できよね……
貼り付けて何か得があるのだろうか。
基本的過ぎるのか、検索しても全然わかんねぇ。
841 :
627 :2006/09/22(金) 15:57:08
Frame をいぢれば Form もかわる。
842 :
839 :2006/09/22(金) 16:01:54
いや、だから、Formに動的に生成したFrameを何枚も貼る場合に使う。 Frameだとペタペタ貼っといてそのカタマリをFormに貼れるけど、 同じことをPanelでしようと思っても出来ないじゃない。
>>840 集合コンポーネント的な部品を簡単に作れる。
844 :
838 :2006/09/22(金) 16:08:07
>>842 , 843
あぁ、なるほど。理解しました。ありがとう。
Label1.captin:='ちょっと待て'と書いた後で重い処理をさせてるんだけど、 ちょっと待ての表示がされない。 重い処理が終わった後で表示される。 すぐに表示させるにはどうすればいいの?
849 :
815 :2006/09/23(土) 07:54:42
850 :
815 :2006/09/23(土) 08:30:38
てか、ググっても出ないし orz
調べ方がわるいんでないの
turbo delphiの無料版を使用して、 ホットキー(特定のキーを押すとアクティブになる機能) の機能を付けたいのですがどうすればよいのでしょうか。 THotKeyコンポーネントを見つけ配置してみたのですが その後どうすればよいのか分かりません。
>>852 THotKeyはホットキーを設定するEditコンポみたいな物だから
実際のホットキー登録とかはAPI使わないとできない。
RegisterHotKeyでぐぐれ
>>848 俺もチラッとググたけど出ないな。
他人事だからそう熱心に調べようと思わないけど。
>>854 みたいに何でググるか書いてやったらいいとおもう。
リストボックスで、アイテムを上下に移動したいんだけど、簡単にできる方法ってありますか? 挿入や削除をやればできるんだけど、ちらつく気がする…… 横から見てて、そもそも RichEdit と Edit の違いが良く分かってないことに気がついた俺 orz プロパティ数が違うけど、どう使い分けるんだろ。
>>856 TListBox.Items.Move
RichEdit は書式付きエディット。
簡易ワープロみたいな感じ。
procedure ほにゃららForm.ListBoxDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); var Index: Integer; begin Index := ListBox.ItemAtPos(Point(X, Y), True); if Index < 0 then begin Accept := False; Exit; end; if Index > DragItemIndex then begin with ListBox do begin Items.Insert(Index + 1, Items[DragItemIndex]); Items.Delete(DragItemIndex); DragItemIndex := Index; end; end else if Index < DragItemIndex then begin with ListBox do begin Items.Insert(Index, Items[DragItemIndex]); Items.Delete(DragItemIndex + 1); DragItemIndex := Index; end; end; ListBox.ItemIndex := DragItemIndex; end;
procedure ほにゃららForm.ListBoxMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if (Button = mbLeft) and (ListBox.ItemIndex >= 0) then begin DragThreadIndex := ListBox.ItemIndex; ListBox.BeginDrag(False); end; end; マウスでドラッグしてListBoxのアイテムを移動するコードサンプル。
>>859 DragThreadIndex -> DragItemIndexでした。
861 :
856 :2006/09/23(土) 18:54:37
>>857 ありがとうございます、すぐにできました。
RichEdit の方も、分かりました。
……まんまあったのに、気が付かなかった orz
付属マニュアルが使い難くて、コード補完がマニュアル状態 ('A`)
2ちゃんのカキコでサンプルコードを書くときに、.を打ったらコード補完が始まるのを待ってる自分に気づいたさ
ちゃんと試してから、コードはコピペしろ。手打ちなんざ信用できん。
手打ちで間違えずに書く訓練をしてんねん。
ひどいスレだな、ここ。Del使いはみんなこんなの?
今頃気づいたのかよw
ツンデルだな。
・・・・え?
871 :
デフォルトの名無しさん :2006/09/24(日) 06:52:27
ApolloをDelphi2006でコンパイルしようとしているのですが、 socket.soをコンパイルしようとすると、 NMConstがない、言われてコンパイルできません。 どうやらpsock.dcuが利用しているようなのですが、 BDSのインストールディレクトリを検索してもでてきません。 これはもうサポートされないライブラリなのでしょうか?
872 :
デフォルトの名無しさん :2006/09/24(日) 06:55:46
どうやら、昔あった、FastNetというコンポーネントみたいですね。 今は、Indyにとってかわられたようですね。 なぜ、psockだけ残っているかは疑問ですが。
ツンデル、はいってる?
こりゃいかん
TTableについてなんですが、レコードの総数はRecordCountプロパティで取得できます。 ここでFilterをかけた場合、Filterに該当するレコードの数を知る方法はありませんか? While Table1.Eof doでも使って自前で数えるしかないんでしょうか?
使用してるSQLにコマンドがあるならそれを投げればいいし、ないならそれしかない
×SQL ○データーベースソフト
TabControlでテキストエディタ作ってるんだがタブ切り替え時にエディターも切り替えるにはどうすればいいんですか 教えてください
文字列を式や変数として評価したいのですが、eval みたいのってありますか?
>>875 RecordCountでとれなかったっけ?
TClientDataSet経由だと、たしか取れた気がするが・・・。
>878 OnChengeイベントに、エディターを切り替えるコードを書く。
OnChange などのイベントをコードで発生させるには、どう書いたら良いのでしょうか?
あ、単語が続いてるけど、自分は
>>878 じゃありません。
イベントハンドラを直接呼び出せばいいだけ。
>>882 TEdit.OnChange(TEdit);
こんなかんじ。
直接
TEditOnChange(TEdit);
のように読み出してもいい。
885 :
882 :2006/09/24(日) 20:25:40
>>883 , 884
ありがとうございます。解決しました。
サンプルを書いてくれて助かりました。
ってか、イベントハンドラは派生フォームのメソッドだ、ってことに気づいた? ただ呼び出すだけ。
「いつも気になってるけど、Sender: TObjectって何?」 っていうひと多そう
Sender は送り主って意味。 呼び出し側では通常 Self を渡す。 VCLソース見るとそうなってる。 複数のコンポーネントでイベントハンドラを共有するとき、 この Sender で誰のイベントか識別できる。
過疎ってて、質問なくても解説するようになったか・・・
・・・・と、朝から暇な粘着アンチですた
まだボトペタしかできない1年生です。 TTreeViewでOnMouseUpしたときに、それが「ノードを展開するためにしたクリック」なのか「アイテムを選択するためにしたクリック」なのかを判別するにはどうしたらいいんですか?? ノードを開いただけなのにアイテムを選択されたときの処理がされてしまい、困っています。
delphiでハードディスクの情報を取得するにはどうしたらいいでしょうか? 欲しい情報は 各HDDの index モデル名 サイズ HDDが持つドライブレター ドライブレター別のサイズと空き容量 です
Win32APIスレ池
誰か、CRC32を簡単に求めるを知っていませんか? Kodersのものを片っ端から試してみたんだけど、結果が合わない……
896 :
デフォルトの名無しさん :2006/09/25(月) 21:01:54
>>894 >>892 じゃないが、これはすごい。
サポート時にユーザー情報を得るのに使えると思った
freeならなあ
>>895 自作したのソースうpろうか?依存ユニットがあるから、改造しないといけないけど
897 :
デフォルトの名無しさん :2006/09/25(月) 21:08:05
CRCの算出とかってコア部分が小さいから、asm化を追求すると楽しくて燃えるよな。
901 :
895 :2006/09/25(月) 22:25:13
TMetafile に文字や画像をガンガン Draw しまくってから、 TImage に Draw して表示させているのですが、文字や画像が 表示されない場合あります。特に何かエラーが起こるわけでも なく、ただ表示されない(場合がある)のです。いったい どのようなことが考えられるのでしょうか。(WindowsXp, Delphi7です)
・縮小すると線が細くて見えない ・クリッピングされている
レスありがとうございます。まったく説明不足でしたが、例えば全く同じ 配置の画像 & 文字のグループを縦に4段くらい並べて表示させる場合が あるのですが、最後の段で表示されない画像や文字があるのです。 表示されるのもあるのです。繰り返し処理で Draw しているのですが…
メモリ不足
晒せ
907 :
895 :2006/09/26(火) 00:40:51
>>896 唯一、できましたぁ。助かりました。
>>898 cc ってなんなのさ、返り値はなんなのさ orz
buf: pbyte ということは 1byte が引数になってると思うんだけど、そこに len: integer を要求されてる時点で何が何だか orz
これで、例えば 'abc' という文字列を計算するには、どうしたら良いんだろう orz
できれば、有名そうな JclMath.pas でやってみたかったけど、さっぱり分からない。
Byte の配列を指すポインタだろ。
909 :
898 :2006/09/26(火) 02:44:29
>>907 おまいさんが、ポインタとかあんまり詳しくないなら、
その調べたいバイナリを全てTMemoryStreamに突っ込んで、
lw:=crc(0,ms.Memory,ms.Size);
とやれ。
返値がCRC32。
>>891 OnMouseUpより前のイベントでフラグを設定。
イミフメ。どうやって判別するのかを質問してる
>>911 OnMouseUpより前のイベント立てているフラグが立っているかどうかで判別する。
多分、
>>910 さんの言ってることは、MouseMoveなんかで、カーソルがノードの+マークの上にあるならbool型にtrueでも格納しろってことだと思います。
確かに、それをどうやるかが初心者には難問です・・
VirtualTree あたりのソースでも見て研究しなよ。
Del厨はソースよく読んで研究しろw
ソースをよく読まないマなんて存在するの?
ブビ(ry
デル(ry
痛いな
920 :
デフォルトの名無しさん :2006/09/26(火) 13:25:54
ブビ厨は揚げ足しか取れないから
おれ、Del使いだけどみんなでソース音読しようぜ
むしろ初心者には、どこにソースが転がってるのかわからない
これからはどんな質問にも「ソース嫁。」でよさそうだな
「Personalなのでソースありません><」 と言われる
ageるから煽られる。
読めない奴が書けるわけない
これからはどんな質問にも「ソース嫁。」でよさそうだな 「Personalなのでソースありません><」と言われるたら、Turbo Explorer DL しろ と言えばいい
定義されてないメッセージに反応するのはどうすればよいのですか?
定義すればよい。 質問の意味はよくわからんが。
分からないなら黙っててください
・・・
あっはっは。 Del厨っておもすれ。
>>934 del厨がやってるとは限らない
俺はC厨
Delは仕事で触った事があるだけ。
・・・・・・伝統あるくだスレ崩壊か・・・・・・・・・・
リストラVB厨が煽りに必死なんだ
過疎ってるし、たまに質問あっても、ソース嫁、だし、 雑談ばかりじゃ、VB 厨関係なく尻すぼみ。ひとがいなくなったな
ソース嫁に反応するのはVB使い。 VBはソース嫁ないから。 Del使いなら自然とソースを読みたくなる。 それが本当のプログラマ。
VBならソース読めなくてもプログラマになれるのにね
VBだと読みたくてもソースが付いていないからなぁw
それはマじゃなくてチュウ。 マってのは各種プログラムからライブラリまで自由に使いこなせる人のこと。 M$謹製ライブラリじゃないと、なんていうのはチュウ。
どうすればシフト+スペースができますか? if (Key = VK_SHIFT+VK_SPACE ) then begin ShowMessage( 'test' ); end;
以前、Metafile に大量の画像をDrawした場合に表示されない画像がある件に ついて質問をした者です。Delphiに関連しないかもですが、PCの画面の解像度を 変更して試すと、以下のような結果になりました。 解像度800×600 → 不完全さ大 解像度1024×768 → 不完全さ中 解像度1152×864 → 不完全さ小 解像度1280×1024 → 完全に表示 なぜ高解像度にするとちゃんと表示されるのか、見覚え聞き覚えのある方が いらっしゃいましたらお願いいたします。
948 :
944 :2006/09/27(水) 16:08:34
>>945 さま
>>947 さま
参考サイトありがとうございます。しかーし、解決にいたってません。
ビデオメモリが32MBしかないのが原因なのかなー。ビデオカード買って
こようかななどと考えています。
949 :
デフォルトの名無しさん :2006/09/27(水) 19:09:42
Metafileって、VRAM使ったけ?
950 :
905 :2006/09/27(水) 19:15:40
大漁のメタファイルなんて扱っちゃだめずら。 すぐにメモリ不足になるずら。理由は不明ずら。 きっとOSかドライバのバグずら。 つまり運任せずら。 他の方法考えた方が賢いずら。
今晩は、教えてください。 (アプリのGUI状態) 1枚のForm1にButton1が1個、Panel1が1枚、あります。Panel1のAlignプロパティは alBottomでCaptionプロパティは空です。ButtonのHintプロパティに'実験です'を書き込んでいます。 (コーディング状態) TFrom1の宣言で procedure ShowHint(Sender:TObject);を記述し、 Implementation部で procedure ShowHint(Sender:TObject) begin Panel1.Caption := Application.Hint; end; と記述しています。さらに Form1のOnCreateイベントで procedure TForm1.FormCreate(Sender:TObject) begin Application.OnHint := ShowHint; end; と記述しました。
何を教えて欲しいんだよ
以上のように記述すると、Button1にマウスポインタが入ると、 Panel1に'実験です'が表示され、マウスポインタが出ると表示が消えます。 問題は、Application.OnHint := ShowHint; の部分です。 ShowHintはメソッドの名前です。これをApplicationのOnHintプロパティに 代入するということはいったいどういうことなのかさっぱりわかりません。 このコードの作動メカニズムを教えてください。
>>953 作動のメカニズムって・・・。
ただたんに、ユーザが捜査して、ヒントを出すべき操作になったら
OnHintのイベントがよばれるだけ。
コードでしりたいなら、ソースを呼んで納得するといい。
まだDelphi言語に慣れていないのですが、右辺のShowHintはメソッド名ですから、 C/C++のように、これはメモリ上におけるメソッドのポインタを表し、Application オブジェクトのOnHintプロパティは関数や手続きのポインタを代入するプロパティと 考えて良いのかどうか不安なのです。それとButtonにマウスポインタが入った、出た というイベントはButtonに生じたはずですが、Buttonにはオブジェトインスペクタで そのイベントを関連づけていません。なのにボタンに発生したイベントに呼応してメソッド ShowHintが呼ばれています。このメソッドはどうやってButtonに関連づけているのですか。
イベントは、メソッドポインタ一つを格納するプロパティーに過ぎない。 それはボタンに関連づけられてるんじゃなくて、Button2 でも出るでしょ。 Application.OnHint はどんな場合でもヒントが表示されるべきときに呼ばれるだけ。
RichEditに改行を含んだ文字列をを挿入させたいのですが、改行文字ごとでてきます。 改行させるためにはどうしたらいいですか? RichEdit1.SetSelTextBuf('test1\ntest2\ntest3'); この場合は、test1\ntest2\ntest3 このまま挿入されます。
sLineBreak 又は #13#10
>>958 ありがとうございます。
RichEdit1.SetSelTextBuf('test1'+ sLineBreak + 'test2' + #13#10 +'test3'+ #13+'test4'+#10+'test5');
全部改行できたのですが、一般的にどれを使うのでしょうか?
解決しました。 はじめ教えて頂いた、 sLineBreak か #13#10 を使います。
普通に Clear して一行ずつ Add していけばいいのに
あぁ、SelText なわけね
RichEditで、VK_TAB キーを押したとき、 文字を寄せたいのですが、どこかにいってしまいます。 どうすればいいですか?
続きでました。、TABは、となりのボタンとかにいってました。 tabstopをtrueとかFlalseにしても移動してしまいます。 止めることはできませんか?
WantTabs プロパティに注目。 ここで聞く前に付属ドキュメントを精読する癖をつけよう。
967 :
895 :2006/09/27(水) 22:50:30
しつこくてすまないです。
>>909 で静的配列なら @ を付ければ求められたんだけど、
動的配列の場合は、Pointer ってどう求めれば良いのでしょうか?
>>967 ポインタ型にキャスト又は、@最初の要素。
TServerSocketのServerType を stThreadBlocking にしたとき、 TServerClientThread を継承してつくったクラスのClientExecute をオーバーライドしたプロシージャ内で クライアントの切断を検知するほうほうってないですか? while (not Terminated) and ClientSocket.Connected do だと無限ループになってしまうんで。
TServerSocketのDisconnectイベントは信用できない。
RichEditとListBoxでコード補完を作っています。 Richeditを下キーを押したときListBoxに移りたいのですが、 ListBox.Forcused := true だとエラーがでてしまいます。 ListBoxに移るにはどうすればいいでしょうか?
一例としては ListBox.SetFocus;
ためしにインストールしてみたが何が何だかさっぱり分らない やっぱり専門書とか買ったほうがいいのかな?
>>976 ありがとうございます。
それは、どんな本ですか?
>>976 マスタリングの本?わかりました
少し調べてみます
>>977 MarcoCantu著のやつだ。
翻訳したやつは今も手に入るか知らんが
これが全て理解できる事には中級者の中ぐらいにはなれる。
>ここで聞く前に付属ドキュメントを精読する癖をつけよう。 >これが全て理解できる事には中級者の中ぐらいにはなれる。 こういうレスがつくようになると、こういうスレの存在意味がなくならね? 俺なんて使いはじめの頃はドキュメント読んでもチンプンカンプンだったさ。 ひとつの区切り目はオブジェクト指向がおぼろにでも見える頃かなぁ…
982 :
デフォルトの名無しさん :2006/09/28(木) 14:01:42
>>981 安心しろ。
そう思ってるだけで、質問は全然してもいいから。
分かる範囲で、できるだけ答えてやるよ。
まあ、俺も最初のころは、メーリングリストの過去ログだけで、がんばったものさ。
ガムバレ!!
>>981 それが理解できるようにこのスレにくるんじゃないか。
どの本がおすすめと聞かれれば、どの本がおすすめか返す。
至極真っ当なレスだとおもうが。
984 :
デフォルトの名無しさん :2006/09/28(木) 14:03:11
コード補完を作っています。 ListBoxの単純リストを選べるところまでできました。 RichEditの文字を書いてる途中にctrl+spaceでListBoxが開き、 そのRichEditの書きかけの文字列をListBoxに反映させたいのですが、 RichEditの書きかけの文字列を取得する方法を教えてください。
986 :
デフォルトの名無しさん :2006/09/28(木) 16:35:48
onActivateイベントに、 procedure Form1Activate(Sender:TObject); begin form1.OnActivate:=nil; ・・・処理・・・ end; これで1回限り。
俺はCM_SHOWINGCHANGEDメッセージのトラップでやってるなあ。 フォームのクリエイト時にフラグを立てて、トラップ時にフラグをOFFにする感じで。
exe起動時にメインフォーム以外のフォームも一緒に表示させたいのですがどうすればいいのか教えて下さい メインフォームのOnActivateでshowさせようと思ったのですが例外で表示する事ができませんでした
>>989 メインフォーム以外のフォームのVisible:= true
992 :
989 :2006/09/28(木) 21:40:12
なんだかよくわからないけど両フォームのvisibleいじったりしてたらOnActivateから呼べるようになりました お騒がせしました
Button1をOnClickすると、Exe.exeを実行して、パラメータに「"ComboBox1.Text" "ComboBox2.Text" "ComboBox3.Text"」実行する、といったようにするにはどうすればいいでしょう?
>>995 CreateProcessなら994のリンク先に書いてあるとおりにexeのパスの後ろにずらずら書けばいいんじゃね?
ShellExecuteなら
ShellExecute(Handle,'open',PChar(exeパス),PChar(オプション),PChar(作業フォルダ),表示形式);
って感じで、オプションの部分にずらずら書けばいいんじゃね?
一番肝心なのはパラメータにComboBox1の内容を含めることでして…
PChar(Format('%s %s %s', [ComboBox1.Text, ComboBox2.Text, ComboBox3.Text]))
999 :
デフォルトの名無しさん :2006/09/29(金) 08:08:02
ume
1000 :
デフォルトの名無しさん :2006/09/29(金) 08:09:10
ume
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。