くだすれDelphi(超初心者用)その22
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
05/02/02 17:21:22もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Delphi使いが優しくコメントを返しますが、
お礼はDelphiの布教と初心者の救済をお願いします。
<前スレ>
くだすれDelphi(超初心者用)その21
http://pc5.2ch.net/test/read.cgi/tech/1104511938/l50
<その他>
ボーランド
http://www.borland.co.jp/
DelWiki
http://onigiri.s3.xrea.com:8080/delphi/
0002デフォルトの名無しさん
05/02/02 17:23:1120 http://pc5.2ch.net/test/read.cgi/tech/1101530485/
19 http://pc5.2ch.net/test/read.cgi/tech/1097454588/
18 http://pc5.2ch.net/test/read.cgi/tech/1093996761/
17 http://pc5.2ch.net/test/read.cgi/tech/1091671391/
16 http://pc5.2ch.net/test/read.cgi/tech/1089779142/
15 http://pc5.2ch.net/test/read.cgi/tech/1087823906/
14 http://pc5.2ch.net/test/read.cgi/tech/1085239007/
13 http://pc5.2ch.net/test/read.cgi/tech/1081003641/
12 http://pc5.2ch.net/test/read.cgi/tech/1076610073/
11 http://pc5.2ch.net/test/read.cgi/tech/1076609666/
10 http://pc2.2ch.net/test/read.cgi/tech/1074523803/
09 http://pc2.2ch.net/test/read.cgi/tech/1071294733/
08 http://pc2.2ch.net/tech/kako/1068/10682/1068201045.html
07 http://pc2.2ch.net/tech/kako/1065/10651/1065195699.html
06 http://pc2.2ch.net/tech/kako/1063/10632/1063202727.html
05 http://pc5.2ch.net/tech/kako/1061/10610/1061090908.html
04 http://pc2.2ch.net/tech/kako/1058/10588/1058834815.html
03 http://pc2.2ch.net/tech/kako/1055/10559/1055986736.html
02 http://pc2.2ch.net/tech/kako/1053/10537/1053757982.html
01 http://pc2.2ch.net/tech/kako/1051/10518/1051882835.html
0003デフォルトの名無しさん
05/02/02 17:36:12乙
>>前スレ994レスありが�d
前スレ993ですが
ttp://pc5.2ch.net/test/read.cgi/tech/1104511938/993
Printer.Canvas.Draw(150,650,BarImage1.Picture.Bitmap);
こんな感じでバーコード印刷しているのですが、ドットインパクト、仮想プリンタはいいんですが
USB接続のレーザープリンタでは、印刷されません。アドバイスよろしくおねがいします。
0004デフォルトの名無しさん
05/02/02 18:00:35↓自分はこの辺のAPIを使ってプリンタの解像度を求めてサイズを補正してます
GetDeviceCaps(Printer.Handle, HorzRes);
GetDeviceCaps(Printer.Handle, HorzSize)
GetDeviceCaps(Printer.Handle, VertRes)
GetDeviceCaps(Printer.Handle, VertSize)
ただ、このやりかたは
Delphi2の頃作ったプレビュー用コンポーネントで使っているものなので
今はもっとスマートな方法があるかも知れませんけど
0006デフォルトの名無しさん
05/02/02 20:07:07ここでフォームの背景を TImage を利用して変更していますが、
フレームのところだけ透明になりません。
フレームのボタン以外を透明にする方法ってないものでしょうか。
0007デフォルトの名無しさん
05/02/02 21:07:19TSub1 = class(THoge) .... end;
TSub2 = class(THoge) .... end;
という宣言をして、TSub1 や TSub2 のインスタンスを TList に Add したとします。
それらのインスタンスを解放したい時、どうすればいいでしょうか?
TList から取り出したポインタを TSuper にキャストして Free すると、
TSuper.Free が呼ばれて、メモリリークしてしまうのでしょうか?
もしダメなら、TSuper に Sub1 か Sub2 か識別する為のメンバを作りますです。
00087
05/02/02 21:08:24× TSub1 = class(THoge) .... end;
× TSub2 = class(THoge) .... end;
○ TSub1 = class(TSuper) .... end;
○ TSub2 = class(TSuper) .... end;
0009デフォルトの名無しさん
05/02/02 21:44:02要するにバイナリエディタの入り口部分の機能ですがどうしたらいいのでしょうか
0010デフォルトの名無しさん
05/02/02 21:55:430011デフォルトの名無しさん
05/02/02 22:34:37TSub1 TSub2にデストラクタ実装して、TSuperでFreeしてみたら? 自分で実際に実験してそして理解せよ。
つーか、普通はTObjectのFreeだよね。デストラクタはDestroyですよ。
0012デフォルトの名無しさん
05/02/02 22:38:20ついでのオブジェクトの種類を判定したければ
if TObject(list[0]) is TSub1 then TSub1(list[0]).Sub1Method;
つうかTObjectList使え。
0013デフォルトの名無しさん
05/02/02 22:41:21ハンドルからポインタを取得したり、GDIオブジェクトは独自解釈かな。
とりあえず、WinAPIの基礎を学べ。つーかMSDNでも見ろ。
00147
05/02/02 22:57:50>>11-12
失礼しました。
TObject.Free でいい、との事なので安心しました。
自分でも実験プログラムなど書いて試したのですが、いまいち確信が持てなかったので……。
結果的に、こういった定石のような書き方を教えて頂いたので、質問して良かったと思っています。
> つうかTObjectList使え。
全くです。というか、忘れていました。すいません……。 orz o
ついでに言うと、is演算子も忘れていました。重ね重ねすいません……。 ` rz
00159
05/02/02 23:00:07ハンドルからポインタを取得というのはこの辺りですよね
var
MyHandle: THandle;
TextPtr: PChar;
begin
ClipBoard.Open;
try
MyHandle := Clipboard.GetAsHandle(CF_TEXT); //とりあえずテキスト
TextPtr := GlobalLock(MyHandle);
finally
Clipboard.Close;
end;
ここから先は初心者では無理ということですか?
0016デフォルトの名無しさん
05/02/02 23:10:5116進数に変換する方法は、自分で決めよう。
関数使うもよし、テーブル使って高速化するもよし。
0017デフォルトの名無しさん
05/02/02 23:20:35格納されている情報の種類は一種類とは限らないよ。形式を指定しなければ
内容の保証もできないと思うけど?
0018デフォルトの名無しさん
05/02/02 23:26:55buf: array of byte;
setlength(buf, getdatasize(myhandle));
move(myhandle, buf, length(buf));
0019デフォルトの名無しさん
05/02/03 02:50:06D7ではAlt + Shift + 方向で出来たんだが。
0020デフォルトの名無しさん
05/02/03 04:50:35ちなみに、操作解除のショートカットってなんだっけ?
0021デフォルトの名無しさん
05/02/03 06:36:320022デフォルトの名無しさん
05/02/03 09:29:17OK。
左のAlt+Shiftでのみ出来た。
左手ホーム、右Alt+Shift+方向で慣れて来たけど癖を直すようにする。
0023デフォルトの名無しさん
05/02/03 10:19:440024デフォルトの名無しさん
05/02/03 14:21:25何か方法はあるのでしょうか?
例えば s := 'Name'; として、この s を基に、Hoge.Name にアクセスする方法です。
言語レベルでサポートされているなら、一番いいのですが…
よろしくお願いします。
0025デフォルトの名無しさん
05/02/03 14:55:46一応、コンパイラだから。ということになります。
RTTI を使えば、希望のことはできます。つーか、DFM のリーダーが読み込んだテキストファイルから
クラスのプロパティを特定して、値を書き換えています。
0026デフォルトの名無しさん
05/02/03 15:03:340027デフォルトの名無しさん
05/02/03 15:12:51published
property Name : string read FName write FName;
インスタンス Hoge のプロパティ Name を他の変数 s 経由で実行時に変更したい場合、TypInfo ユニットを uses 節に追加し
s := 'Name';
TypInfo.SetStrProp(Hoge, s, '新しい文字列');
とします。
0028デフォルトの名無しさん
05/02/03 16:29:40Drag&Dropしても受け付けてもらえません。
ひとつずつMenuItem.Actionを設定するしかないですかね。
0029デフォルトの名無しさん
05/02/03 19:08:44ActionList エディタで、カテゴリ単位で Drag & Drop できたような気がする。
組み込みアクションなら「編集」カテゴリを丸ごと登録するようなかんじ。
0030デフォルトの名無しさん
05/02/03 20:04:390031デフォルトの名無しさん
05/02/04 11:21:01おいて、起動するとDel4.MBとか_QSQ3.DBとかいうファイルが
たくさん出てきます。データベースのテンポラリファイルだと
思うのですが、コレを出さないようにするのはどうすれば
いいでしょうか?
0032デフォルトの名無しさん
05/02/04 11:54:010033デフォルトの名無しさん
05/02/04 12:26:00ソレが出る。ってことは BDE を正しく終了させていないということですが、大丈夫ですか?
もちろん、デバッグ中にアプリを強制終了させた場合など、作業ファイルが残るケースはよくありますが、
通常使用時にも「たくさん」残るのであればプログラムを見直したほうがよいでしょう。
BDE の作業ディレクトリは、TSession の PrivateDir プロパティで変更できます。
0034デフォルトの名無しさん
05/02/04 14:08:15このアプリが起動した瞬間に起動元のアプリにフォーカスを戻したいです。
起動した瞬間に、今までアクティブだったウィンドウにフォーカスが移る、
といった事は出来ないでしょうか?
ヘルプを読むとApplication.BringToFrontがそれっぽかったのですが、どうやら違ったみたいです。
もしくは、フルパスからウィンドウハンドルかメインウィンドウのクラス名を得る手段でもいいです。
ウィンドウハンドルが得られればSetForegroundWindowが使えますので。
どちらの手段でも結構です。知ってる方、どうかよろしくお願いします。
0036デフォルトの名無しさん
05/02/04 14:19:370037デフォルトの名無しさん
05/02/04 14:25:33呼び出し側が自力で戻るのは駄目なのか?
handle := GetForegroundWindow();
CreateProcess
SetForegroundWindow(handle)
SW_SHOWNOACTIVATE指定するとか
0038デフォルトの名無しさん
05/02/04 14:30:310039デフォルトの名無しさん
05/02/04 14:35:18何の普通だか知らないけど、普通は戻れる。
FGの戻り値が不安ならForm1.Handle使えばいいし。
0040デフォルトの名無しさん
05/02/04 14:41:34004134
05/02/04 14:42:54起動元のアプリは自作じゃないものです。
0042デフォルトの名無しさん
05/02/04 14:47:570043デフォルトの名無しさん
05/02/04 17:04:060044デフォルトの名無しさん
05/02/04 17:55:390045デフォルトの名無しさん
05/02/04 18:02:36まだウィンドウが開いてないから元のハンドルが取れるんでないの
0046デフォルトの名無しさん
05/02/04 18:26:49Delphiで、リソースファイル *.rc を使ってフルカラーbitmapを読み込ませようとすると、
[RC エラー] hoge.rc(10): Invalid bitmap format
ってなるんですけど、どうすりゃいいのですか?
0047デフォルトの名無しさん
05/02/04 18:53:07bitmapを減色してリソースファイルを再作成するちゅうのはダメかい?
0048デフォルトの名無しさん
05/02/04 19:12:52うーん、DLLに食わせるリソースファイルで、リソース本体を読みにくるのは他人の作った別のEXEで、
仕様書曰くフルカラーBMPだよん、って書いてあるんですわ。
リソースコンパイラだけ、どっかでフリーで入手できないんですかね?
004946
05/02/04 19:38:08BMPを保存しなおしたらコンパイルできました。
他人から貰ったBMPだったので、規格外だった模様。
暇があればBMPのバイナリ眺めて苦言を呈したいと思います。
0050デフォルトの名無しさん
05/02/04 19:39:3300519
05/02/04 20:15:30>>18も大体意味は分かり良い方法だと思うのですがなかなかうまくいかないため
余裕ができるまで>>16の方法で進めてみます。
ありがとうございました。
0052デフォルトの名無しさん
05/02/04 23:54:58VCLなフォームやフレームを埋め込むことって出来ますか?
それが無理だとして、普通のWin32APIであれば使えば可能ですか?
0053デフォルトの名無しさん
05/02/05 00:11:260054デフォルトの名無しさん
05/02/05 01:18:210055デフォルトの名無しさん
05/02/05 01:52:24設定変更できるプロパティはありますか?
0056デフォルトの名無しさん
05/02/05 01:57:490057デフォルトの名無しさん
05/02/05 02:07:35005834
05/02/05 06:04:28ありがとうございます。
それで元のハンドルを取得して、OnActiveでSetForegroundWindowを実行で、
思い通りの事ができました。
0059デフォルトの名無しさん
05/02/05 07:18:550060デフォルトの名無しさん
05/02/05 19:49:00どうすればいいでしょう?
OnKeyPressに
if key = #40 then ComboBox1.Perform(CB_SHOWDROPDOWN, 1, 0 );
の様に書いたのですがうまくいかず、
試しにキーをEscに変えて
if key = #27 then ComboBox1.Perform(CB_SHOWDROPDOWN, 1, 0 );
としてみた所、一瞬ドロップダウンされるのですが、すぐに消えてしまいます。
↓を押したらドロップダウンして、その中から選べるようにするのが理想です。
よろしくお願いします。
0061デフォルトの名無しさん
05/02/05 20:03:10CRLF(0D 0A)が勝手に付いてしまいますが
これを回避する方法はありますか?
0062デフォルトの名無しさん
05/02/05 20:06:54DroppedDown := True
>>61
ない
0063デフォルトの名無しさん
05/02/05 20:06:590066デフォルトの名無しさん
05/02/05 20:17:09KeyPressじゃたぶん無理。KeyDownで取って最後にKey = 0
>>65
AssignFile, Reset, Write
http://onigiri.s3.xrea.com:8080/delphi/index.php?%5B%5B%A5%D5%A5%A1%A5%A4%A5%EB%A4%F2%C6%C9%A4%DF%BD%F1%A4%AD%A4%B9%A4%EB%A4%CB%A4%CF%5D%5D#content_1_2
0068デフォルトの名無しさん
05/02/05 20:45:02改行されたくないのにTStringListを使うのはなぜ?
俺ならTMemoryStreamとかTFileStreamを使うけど。
0069デフォルトの名無しさん
05/02/06 01:34:17バッチを当ててからThemeManagerD6.dpkを開いてインストールしても
---------------------------
ThemeManagerD6.bpl を登録できませんでした。
このパッケージは設計時には使えません。
---------------------------
というメッセージが出て正常にインストールできません。
どなたかうまくいく方法を教えて頂けませんでしょうか?
0070デフォルトの名無しさん
05/02/06 11:49:01PitchプロパティをfpFixedにしたのですが文字幅がバラバラのままです
何か勘違いがあるのでしょうか
0071デフォルトの名無しさん
05/02/06 11:56:42RichtextやMemoコンポーネントで、テキスト編集領域の背景に
色ではなく画像(壁紙)を設定する方法はないでしょうか?
もしくは、RichtextやMemoコンポーネントよりも前面にImageコンポ(もしくはそれに類するもの)を
持ってくる方法はないでしょうか?
(「コントロール→前面・背面移動」を選択しても、どうしても順番が入れ替えられない)
0072デフォルトの名無しさん
05/02/06 12:10:28fpFixed は「他の条件を満たした上で、もし固定幅のフォントを作成できるならがんばれ」
という条件を追加するフラグ。
「MS Pゴシック」フォントは固定幅にはできないフォントなので fpFixed をつけても無視される。
「MS ゴシック」を使うこと。
これは Windows の Font API の仕様なので避けられない。
0073デフォルトの名無しさん
05/02/06 12:28:35テキスト処理にTStream使う奴はアフォ
0074デフォルトの名無しさん
05/02/06 12:33:57ありがとう
大好き
0075デフォルトの名無しさん
05/02/06 12:39:26ThemeManager ってのがなんだかわからんが、設計時に使えないということは
IDE に登録してはいけないわけで... ドキュメント読み直したら?
0076Delフサギコ ◆A6VzDeLphI
05/02/06 12:55:45⊂,,,,,,,,,つ,,゚Д゚ミつ
>>71さん
RichEditでは背景画像不可能だった気がします。
TMemoなら、
http://homepage1.nifty.com/cosmic/delphi/vcl.html
こちらの「背景透明化可能 拡張エディット&メモ 」を
使うとよいでしょう
0077デフォルトの名無しさん
05/02/06 13:00:50ListViewの上端を掴んで上にドラッグするとゴミが出るんですけど、これウチだけ?
ゴミ出ないようにしたいです。
再現手順。
Win32のListView1を配置。
ListViewの、
DragModeをdmAutomaticに、
Itemsに適当な名前で項目を追加、
ViewStyleをvsListに(vsIconでは問題なし)。
実行。
ListViewに表示されたItemの上端を掴んで、上方にドラッグ。
そのまま(ドロップしないで)ドラッグでマウスカーソルをぐるぐる動かす。
007871
05/02/06 13:18:57ありがとうございます!
テキスト編集画面を透明化して、その下にImageを持ってくるだけで壁紙っぽく見せられますね!
(やはり、Imageコンポを前面に持ってくるのは無理みたいですね)
実は、RichtextコンポとMemoコンポの大きな違いまだ把握してないのですが
(Memoは制作可能文書サイズが64KBまで?)
とりあえず紹介していただいたコンポを使ってみたいと思います。
0079デフォルトの名無しさん
05/02/06 13:36:46procedure hoge(src: TString; dst: TStream);
var s: String; i: Integer;
begin
for i:=0 to src.Count-1 do begin
s := src[i];
dst.WriteBuffer(s[1], Length(s)*SizeOf(Char));
end;
end;
こんな感じでどうぞ。
0080Delフサギコ ◆A6VzDeLphI
05/02/06 13:38:53ミ,,゚Д゚彡 さむいどすな
ミ つ旦)~~
〜と,,,~),,~)
>>78さん
RichとMemoはWindowsのコントロールで
それぞれワードパッドとメモ帳が使っている部品ですよ。
Richは文字毎に色とかフォントとか変えれますね。
Memoの64K制限はWin9x系だけだった気がしますが
独自実装している
TSonEditやTEditorとかも検討してもいいかも。
0081デフォルトの名無しさん
05/02/06 13:38:540082デフォルトの名無しさん
05/02/06 13:42:57出た
http://land.issaigassai.com/cgi/upload/source3/No_0942.jpg
Delphi4 Winxp HOME SP2
ATi Radeon9600 CATALYSTドライバ
0083デフォルトの名無しさん
05/02/06 13:52:400084デフォルトの名無しさん
05/02/06 14:03:26fumika氏のCuteEditはDelphi7じゃ動作しなかったはず
008577
05/02/06 14:11:06検証と画像ありがとう。
うちでも、メインのノート(MOBILITY RADEON 9600)と
サブのデスクトップ(GeForce4 MX 440)とで試してみたけど、同じでした。
両方ともWinXP Pro SP2で、ビデオドライバはメーカーのもの。
ちなみにデスクトップのデザインはクラシックスタイル。
0086ミ;゚Д゚彡 ◆A6VzDeLphI
05/02/06 14:20:12D2005で試したところ、
ちょっと画面更新のタイミングが変気味だけど
一応動いているけど・・・
D6/7/2005w32で、何か目だった変化ある?
0087デフォルトの名無しさん
05/02/06 14:35:08ごめん書き方が悪かった
正しくは、「XPmanifestを適用すると透明化が解除されてエリア下がバグる」
XPmanさえ使わなけりゃ正常動作する
あと、スクロール時に点滅するのは仕様だってさ
0088デフォルトの名無しさん
05/02/06 14:41:44Richtext・Memo・CuteMemoそれぞれに
FontをMSPゴシック12pt設定してAAを貼ってくらべるとよくわかる
0089Delフサギコ ◆A6VzDeLphI
05/02/06 15:13:13ミ ゙''゙゙゙つ ________
ミ∧,,∧ /
ミ,,゚Д゚彡 < 使い込んでるね。
U U \
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
>>87-88さん、報告�dクス
009088
05/02/06 15:16:19http://www.borland.co.jp/qanda/delphi/d0009386.htmlが応用できれば一番なんだけど
そこまでの技術がない・・・
0091Delフサギコ ◆A6VzDeLphI
05/02/06 15:26:35ミ ゙''゙゙゙つ 何人かが過去タドタ道ですが
ミ∧,,∧ Delphiマガジンの記事で
ミ,,゚Д゚彡 Memo透明化の記事があったはずなので
U U それを参考にしてみると、
技術向上できるかもね。
なんにしてもRichでは無理ぽだったはず。
Winのコントロールに依存するんだから仕方ないでつ。
超上級レベルだと思われですが、
TEditorやTSonEditの
ソース解析などの道もあるかと。
0092Delフサギコ ◆A6VzDeLphI
05/02/06 15:28:48⊂,,,,,,,,,つ,,゚Д゚ミつ エディタ部分の[×]がついた
タブコントロールは、どうやって作るのですか?
0093デフォルトの名無しさん
05/02/06 16:56:08このコントロールを使ってみるといい。
http://www.cooldev.com/coolcontrols.html
Memoその他のかなりコントロールの背景に画像を指定できる。
ただし、Memoだけで、RichEditはなかったと思う。Memoのソースコードを参照して
RichEditをつくることはできるかもしれない。
0094デフォルトの名無しさん
05/02/06 18:42:25といった事をやりたいのですが、行き詰ってしまいました。
TTmierとonKeyPressで出来そうだと思ったのですが、
回数をどうやって取ったらいいのか全然わかりません。
どうか教えてください。
009587
05/02/06 18:53:00ごめんD2005持ってないんだ
答えられなくて申し訳ない
>>93
CoolMemoで試してみたけど
やっぱりXPmanifestを適用すると透明化が解除されてエリア下がバグるね
スクロール時に背景も乱れるけどCuteEditの点滅に比べたらマシかも
0096デフォルトの名無しさん
05/02/06 19:51:36本当ですか?
009793
05/02/06 20:00:42検証ありがとう+乙。>>87タンはD2005持ってないとするとD7かな?
CoolDevにその旨Postしておきます。
最近バージョンアップされていないから望み薄かも。
0098デフォルトの名無しさん
05/02/06 22:12:161.6.0personal使ってますが、
TServerSocketやTClientSocketのヘルプがありません。
どっかにありませんか?
2.↑が無い場合の質問。
TServerSocketやTClientSocketのOnWriteイベントって、
どういうとき発生しますか?
「相手になにか送信が完了したときに発生」するものだと
感覚で思っていたのですが、
SendTextしても発生しません。
0099Delフサギコ ◆A6VzDeLphI
05/02/06 22:30:30⊂,,,,,,,,,つ,,゚Д゚ミつ
TServerSocketのOnAcceptや
TClientSocketのOnConnect直後
接続時に発生するみたいだよ。
0100デフォルトの名無しさん
05/02/06 23:47:14そりゃ展開する分Jpegの方が重くなるだろ。
一方bmpの方がサイズが大きい分ディスクIOが余分に発生するが。
0101デフォルトの名無しさん
05/02/07 00:40:02ありがとうございます。
そうか、WriteというわりにはReadの反対ではないのね。
腑に落ちないけど、そういう仕様なんだからしょうがない。
0102Delフサギコ ◆A6VzDeLphI
05/02/07 00:56:14∧,,∧___ /D2005のタブは
/ミ,,゚Д゚ミ/\< こんなのです
/| ̄∪∪ ̄|\/ \_>>95
|____|/
ipentacさん。
http://www.ipentec.com/delphi2005/categorybuttons/index.html
D2005はほぼPureWin32らしいから
このタブもWin32で実現が余裕で可能っぽいのだが
コンポーネント配布してくれよん>>某
あと、TDockTabSetあたりの
ドキングもあと2005倍くらいは
使いやすくしてくれ。
>>101
漏れも"フニ"は落ちませんがそういうもんらしいです。
参考どぞ
Winsockを使ってみようぜ : http://www.asahi-net.or.jp/~nk2w-ishr/winsock0.htm
0103デフォルトの名無しさん
05/02/07 01:01:130104デフォルトの名無しさん
05/02/07 01:40:162つの値が連動して困ってます(Sizeを12にするとHeightが-16、Sizeを9にするとHeightが-12に・・・といった具合)
フォントのサイズ(pt)は固定したまま改行幅を広げたり狭めたりできないものでしょうか?
0105デフォルトの名無しさん
05/02/07 02:15:470106デフォルトの名無しさん
05/02/07 04:20:15チャトラン思い出した(w
>漏れも"フニ"は落ちませんがそういうもんらしいです。
切るとこ違うよ。
"ふ"に落ちない。
0107デフォルトの名無しさん
05/02/07 08:54:01文字の大きさと改行幅は別物だから。
0108デフォルトの名無しさん
05/02/07 09:44:44とりあえずここ見れ。と、既存VCLで安易に解決したりなんかしてみる…
ttp://www.tmssoftware.com/apc.htm
「どうやってつくるか」は、ソースコード見てみないとわからないスマンコ。
0109デフォルトの名無しさん
05/02/07 10:41:55Winsockの内部での都合を考えてくださいませ。
0110デフォルトの名無しさん
05/02/07 14:39:52プロパティをつかってバーにヘルプボタンを表示させる方法ならわかるん
ですが、一太郎のようにツールバーのボタンを押したときにヘルプモードに
する方法がわかりません。Toolbar1OnClickにどう書けば良いでしょうか?
0111デフォルトの名無しさん
05/02/07 14:41:280112デフォルトの名無しさん
05/02/07 15:52:270113デフォルトの名無しさん
05/02/07 15:57:590114デフォルトの名無しさん
05/02/07 16:10:46グローバルで受け付け時間内だけTrueになるフラグ用意して、カウンタ用の変数も1つグローバルで用意。
OnShowでタイマーイベント開始(Interval=100000=10秒)と共に受け付けフラグをTrueへ立てる。
フラグがTrueの間はKeydownイベント内でのスペースキーの押下をカウントアップしてEdit1へ表示するようにする。
オンタイマーイベントで指定時間がきたらフラグを降ろしてタイマーも止めて(Interval=0)計測終了。
というのを考えてみた。
0115デフォルトの名無しさん
05/02/07 16:11:45Form1: TForm1;
Flg:Boolean = False;
KeyDownCount:Integer;
implementation
{$R *.DFM}
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Flg := not Flg;
Timer1.Interval := 0
end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key = VK_SPACE) and flg then
begin
Inc(KeyDownCount);
Edit1.Text := IntToStr(KeyDownCount)
end
end;
procedure TForm1.FormShow(Sender: TObject);
begin
Timer1.Interval := 10000;
Flg := True;
KeyDownCount := 0
end;
end.
0116デフォルトの名無しさん
05/02/07 16:13:190117デフォルトの名無しさん
05/02/07 16:25:100118デフォルトの名無しさん
05/02/07 17:29:280119デフォルトの名無しさん
05/02/07 18:47:31いや、別物じゃないから
試せばわかる
0120デフォルトの名無しさん
05/02/07 21:27:49つーか、普通はフォントのsizeとheightは単位が違うだけで、
どちらもフォントの高さを示してる。
文字幅はlogfontで指定する。
0121デフォルトの名無しさん
05/02/07 23:27:59Delphi6のヘルプ→ クイックスタート: チュートリアル→「
フォームへのコンポーネントの追加」ページにて
--------------------------------------------------------------------------------------------
4 テキストエディタで編集中のファイルのパスと名前を表示する場所をステータスバーに作成します。
・ステータスバーを選択します。
・SimplePanel プロパティを True に設定します。
・SimpleText プロパティを untitled.txt に変更します。このテキストエディタを使うときに,編集中のファイルが
まだ保存されていない場合,その名前は untitled.txt になります。
・Panel プロパティの[(TStatusPanel)]省略記号をクリックして,[StatusBar1.Panels の編集]ダイアログボックスを表示します。
・ダイアログのツールバーにある[新規追加]ボタンをクリックして,ステータスバーにパネルを追加します。
--------------------------------------------------------------------------------------------
とあるんですが、この通りに実践すると
「テキストエディタで編集中のファイルのパスと名前」が表示されず、外部ファイルを開こうが新規ファイルに名前を付けて保存しようが
表示が「untitled.txt」のままでした。
あれこれ試行錯誤しているうちに、「SimplePanel プロパティを False」のままにしておく(SimpleText プロパティは適用されなくなる)と
解説通りの効果が得られるようになりました。
これは、ヘルプのこの項目の説明文が根本的に間違えていると解釈してよろしいのでしょうか?
0122デフォルトの名無しさん
05/02/07 23:33:220123デフォルトの名無しさん
05/02/08 00:57:26これって何かメリットがあるんでしょうか?
0124デフォルトの名無しさん
05/02/08 01:01:040125デフォルトの名無しさん
05/02/08 01:04:41ちなみにデメリットはありますか?
0126デフォルトの名無しさん
05/02/08 01:07:16書き手次第
0127デフォルトの名無しさん
05/02/08 01:10:06呼び出し元のローカル変数にアクセスできるよ。
0128デフォルトの名無しさん
05/02/08 01:10:47>>126
分かりました。
どうもありがとうございました。
0129デフォルトの名無しさん
05/02/08 01:14:13そういう使い方が出来るんですね。
便利そうですね。
0130デフォルトの名無しさん
05/02/08 01:25:33どうやればいいのでしょう?
GetCaretPosあたりを使えば良さそうだと予想したんですが、
調べても良く分かりませんでした。
0131デフォルトの名無しさん
05/02/08 01:26:21変数と、ローカル関数の記述の順番によるけどね。
便利だよね。
0132デフォルトの名無しさん
05/02/08 02:44:52その書き込みだと、GetCaretPosで出来たかどうかは解らない。
出来るんならそれでいいし、 出来なかったのならそう書いて欲しい。
0133デフォルトの名無しさん
05/02/08 05:52:01あと、作ったブログラムってBCBのように共有ライブラリ使ってないですよね?
0134133
05/02/08 05:52:390135133
05/02/08 06:07:12>>あと、作ったブログラムってBCBのように共有ライブラリ使ってないですよね?
共有ライブラリを含んでいる
0136デフォルトの名無しさん
05/02/08 06:18:48サンクス
0137デフォルトの名無しさん
05/02/08 07:09:33プロジェクトメニュー→オプション→アプリケーション
0138デフォルトの名無しさん
05/02/08 09:29:01ヘルプでlogfontの項目が見当たらないんですが
0139デフォルトの名無しさん
05/02/08 10:30:13APIのヘルプか MSDN へどうぞ
0140デフォルトの名無しさん
05/02/08 11:22:40TMemoとかが連動させてるだけで、自力で描画する分には関係ないよ、と言う話。
0141デフォルトの名無しさん
05/02/08 13:20:57Unit a;
interface
const HOGE=8;
implementation
end.
------ b.pas ------
Unit b; {b.pas}
interface
uses a;
var FUGA : array[0..HOGE] of string;
implementation
........(略)
end.
ってプロジェクトをコンパイルすると、
未定義の識別子:HOGE
ってエラーになるんですがこれは仕様ですか?
あるファイルで宣言した定数を他のユニットでも使いたいときには
どうしたらいいんでしょうか?
0142デフォルトの名無しさん
05/02/08 13:34:490143141
05/02/08 13:35:190144141
05/02/08 13:43:17a.pasのファイル名を変更して、bの方のuses節を変更したらビルドできました。
30秒違いで…
>142 thx
0145130
05/02/08 15:31:24全くできませんでした。
var
pntCaret : TPoint;
begin
........(略)
GetCaretpos(pntCaret);
Top := pntCaret.Y;
Left := pntCaret.X;
ShowMessage('('+IntToStr(Top)+','+IntToStr(Left)+')');
end;
こんな感じで書いても、(0.0)しか返ってきません。
例えばメモ帳だったらどうやってやるのでしょう?
0146デフォルトの名無しさん
05/02/08 15:47:16pntCaretをClientToScreenに変換してそのまま使え
0147デフォルトの名無しさん
05/02/08 17:11:31小数点以下が切り捨てられるのはわかったのですが、
これを 3.1 や 3.14 などと表記する方法はないでしょうか?
0148デフォルトの名無しさん
05/02/08 17:32:36こんなん使ってますが。nが小数点以下の桁数。
function HalfAdjustN(x: Double; n: Integer): Double;
begin
Result := Int(x * IntPower(10, n) + Sign(x) * 0.5) / IntPower(10, n);
end;
0149デフォルトの名無しさん
05/02/08 17:35:57Delphi7 のエンタープライズ版が
ナイス値段ででてる!
買いたいけど金ねー
くそー
0150デフォルトの名無しさん
05/02/08 17:37:27どうやったらカットで期末か?
0151150
05/02/08 17:39:050152デフォルトの名無しさん
05/02/08 17:39:15使ってみます。
ありがとうございました。
0153デフォルトの名無しさん
05/02/08 17:41:25AnsiReplaceStr(Text, sLineBreak, '')
0154デフォルトの名無しさん
05/02/08 17:42:500155150
05/02/08 17:46:06>>153
それだと、全改行コードが消えそうな...
>>154
TrimRightすると、最後の改行コード(と空白スペース)を消してくれるんですか?
なら、完璧でつ。
0156150
05/02/08 17:52:090157130
05/02/08 18:32:48いや、ですから、pntCaret自体が取得できないのです。
もう一度質問を書きますね。
メモ帳などのエディタのキャレットの位置を取得するにはどうしたら良いのでしょう?
0158デフォルトの名無しさん
05/02/08 18:36:33Stringの場合、「〜:= '文字列';」で問題ないのですが
TStringsの場合、「〜:= '文字列';」だと上手くいきません
どうしたらよかとですか?
0159デフォルトの名無しさん
05/02/08 18:36:53やるなら、ターゲットプログラムで発生するすべてのイベントを監視する
とか?
0160デフォルトの名無しさん
05/02/08 18:37:37TrimRightでうまくいったん?
0162デフォルトの名無しさん
05/02/08 18:55:16Textに突っ込め。っていうかTStringListのプロパティ全部嫁
0163デフォルトの名無しさん
05/02/08 19:44:09TStringsは文字列リストだから代入という概念は無い
TStrings.Textは個々のリストに格納されている
文字列全部だからちょっと違うし
0164デフォルトの名無しさん
05/02/08 20:32:29どうもです
てことは、例えばRichTextやMemoのLinesプロパティにも文字列を直接指定できないってことですね
TStringListについてこれから調べてみます
0165デフォルトの名無しさん
05/02/08 20:52:33ファイルのコピーについてですが
現在サブフォルダのファイル全て変数(hoge1)に入れて(SrchFileを使わせてもらってます)
CopyFile(PChar(hoge1),PChar(hoge2),True);
で複数のファイルをコピーしようとしているのですが上記の場合ファイルが一つの場合のみ大丈夫なのでしょうか?
また複数コピーする場合どうすればいいのでしょうか?よろしくお願いします
0166130
05/02/08 21:21:09procedure GetCaretPosEx(var Ps: TPoint);
var
Rect: TRect;
CPos: TPoint;
ActiveWnd: HWND;
hForeground: HWND;
dwFrom, dwTo: DWORD;
begin
ZeroMemory(@Rect, sizeof(Rect));
dwFrom:=GetCurrentThreadId;
hForeground:=GetForegroundWindow;
if hForeground<>HWND(nil) then
dwTo:=GetWindowThreadProcessId(hForeground, nil)
else
dwTo:=HWND(nil);
if (dwFrom and dwTo)<>0 then
begin
if AttachThreadInput(dwFrom, dwTo, true) then
begin
if not(GetCaretPos(CPos)) then
OutputDebugString('失敗');
ActiveWnd:=GetFocus;
if ActiveWnd<>HWND(nil) then
GetWindowRect(ActiveWnd, Rect);
AttachThreadInput(dwFrom, dwTo, false);
end;
end;
Ps.X:=CPos.X+Rect.Left;
Ps.Y:=CPos.Y+Rect.Top;
end;
0167デフォルトの名無しさん
05/02/08 21:45:07乙
汎用性高そうな関数だね
0169デフォルトの名無しさん
05/02/08 23:26:570170デフォルトの名無しさん
05/02/09 00:22:59関数名がずらっと出てくるのですが、
選択時、一個飛ばしで選択されて、
必要な関数名を選ぶ事ができません。
設定の変更はできますでしょうか?
0171デフォルトの名無しさん
05/02/09 00:24:04Delphi6のpersonal版でosはxpです。
0172デフォルトの名無しさん
05/02/09 01:45:450173デフォルトの名無しさん
05/02/09 02:30:52ネットで見つかる原因(TInternalError = type TObject;)
以外にどんな原因が考えられますか?
Google 検索: L1086 Delphi
http://www.google.com/search?q=L1086+Delphi&num=50&ie=Shift_JIS&hl=ja&lr=&lr=
ネットで見つかるのは
"Fatal Error: ...: Unit SysUtils was compiled with a different version of System"}
も出るみたいですが、 私のは出ません。
また、クラッシュはせず、 もう一度コンパイルすると出なくなります。
コンパイル対象がすでに1万行超えているので、 少しずつ消していく方法以外でなんとか…。
0174デフォルトの名無しさん
05/02/09 02:33:22よく分からんけど、その状態になったこと無いな。
>>173
こっちはある。
「たま〜に」だから、気にしないようにしてる。
0175デフォルトの名無しさん
05/02/09 02:34:350176デフォルトの名無しさん
05/02/09 02:37:02ループのない所で Break したら T2541 が出ませんか?
0177174
05/02/09 02:47:12失敬。
「内部エラーはたまに出るけど気にない」と。
0178デフォルトの名無しさん
05/02/09 08:32:300179デフォルトの名無しさん
05/02/09 09:44:23前回終了時にShellTreeView1.PathをIniFileに保存し、次の起動にそのパスをShellTreeView1.Pathに
設定していますが、この方法だと仮想フォルダの場合、実際のフォルダが選択されてしまいます。
仮想フォルダを選択させる方法がわかりません。えらい人教えて。
0180デフォルトの名無しさん
05/02/09 10:42:38TStringListに読み込むと、全てのLFがCRLFに変換されてしまいます。
さらに既存のテキストファイルに追加で書き込む事は可能でしょうか?
0181デフォルトの名無しさん
05/02/09 10:46:44嫌ならバイナリだか形無しモードで自分で書く以外ないよ。
0182デフォルトの名無しさん
05/02/09 11:00:270183デフォルトの名無しさん
05/02/09 11:02:47LineBreak プロパティで変更可能ですよ。
0184デフォルトの名無しさん
05/02/09 11:24:44再起動しましたら直りました。
ありがとうございました。
0185デフォルトの名無しさん
05/02/09 13:00:44使用していますが、それでは他のマシンで動作させるためには下準備が必要なので、
自前で内蔵できるように(=極端な話exeファイル1つで動作できるように)したいのですが、
自分の探せる範囲ではいまだ見つかりません。
ヒントとかを教えてください。
0186デフォルトの名無しさん
05/02/09 13:03:350187デフォルトの名無しさん
05/02/09 14:34:130188デフォルトの名無しさん
05/02/09 14:44:080189デフォルトの名無しさん
05/02/09 14:44:530190デフォルトの名無しさん
05/02/09 15:04:35型の使い方が違っていました。
var
s: String;
i: Integer;
にして、
s := 'abcde';
i := Length(s);
s := IntToStr(i);
ShowMessage(s);
これで出来ました。感謝します。
0191デフォルトの名無しさん
05/02/09 15:05:290192デフォルトの名無しさん
05/02/09 15:09:47え? できません。
0193デフォルトの名無しさん
05/02/09 15:10:210194デフォルトの名無しさん
05/02/09 15:15:100195デフォルトの名無しさん
05/02/09 15:17:280196デフォルトの名無しさん
05/02/09 15:17:320197デフォルトの名無しさん
05/02/09 15:23:470198デフォルトの名無しさん
05/02/09 15:26:180199デフォルトの名無しさん
05/02/09 15:27:340200デフォルトの名無しさん
05/02/09 15:30:470201デフォルトの名無しさん
05/02/09 15:32:40文字数じゃない
0202デフォルトの名無しさん
05/02/09 15:34:020203デフォルトの名無しさん
05/02/09 15:36:47SJISには対応して無いな。
0204デフォルトの名無しさん
05/02/09 16:05:230205デフォルトの名無しさん
05/02/09 16:16:15D2005は素人にはおすすめ出来ない。ヤフオクでもいいからD7以下を手に入れるべし
0206デフォルトの名無しさん
05/02/09 16:18:140207デフォルトの名無しさん
05/02/09 16:21:21スクロールは出来るんですが、読み出す事出来ない・・・
0208デフォルトの名無しさん
05/02/09 16:21:350209デフォルトの名無しさん
05/02/09 16:26:250210デフォルトの名無しさん
05/02/09 17:16:32SetScrollRange(ListView1.Handle,SB_HORZ,0,0,True);
ShowScrollbar(ListView1.Handle,SB_BOTH,False);
Sendmessage(ListView1.Handle,LB_SETHORIZONTALEXTENT,0,0);
ハンドルを ListView1.Items.handle にしても駄目です。
Form1の場合はちゃんと消えるんですが。
0211デフォルトの名無しさん
05/02/09 17:17:51積極的にpropertyにしちゃっても問題ないですか?
それともケースバイケース?
デル6パー。
0212210
05/02/09 17:23:30・・・ってか愕然としました。FlatにしたとたんAPIは全て受け付けないなんて。
0213デフォルトの名無しさん
05/02/09 17:38:5801:for X := 0 to 15 do
02: begin
03: Y := 0;
04: repeat
05: TChr[X,Y].Yposition := Y * s + 10;
06: NoD[X] := Y;
07: Y := Y + 1;
08: until TCar[X,Y].YposE > 4800;
09: end;
5行目で引っ掛かってしまいます。
右辺が計算式だとエラーが発生するようなのですが・・。
Delphi6でOSはWindowsXPです。
0214デフォルトの名無しさん
05/02/09 17:45:06TChrとTCarの変数宣言くらい書いてくれないと
これだけじゃわからない
0215デフォルトの名無しさん
05/02/09 17:46:460216213
05/02/09 17:52:47すみません。必要事項を書き忘れてる上に、一部書き間違えていました。
01:for X := 0 to 15 do
02: begin
03: Y := 0;
04: repeat
05: TChr[X,Y].Yposition := Y * s + 10;
06: NoD[X] := Y;
07: Y := Y + 1;
08: until TChr[X,Y].YposE > 4800;
09: end;
TChrは、レコード型Chrとして、配列で宣言しています。
フィールドのYpositionはExtended型です。
0217213
05/02/09 17:55:37エラーメッセージは以下の通りに出てきます。
プロジェクトProject1.exeがEInvalidOpクラスの例外を生成しました。
’不正な浮動小数点演算命令’
0218デフォルトの名無しさん
05/02/09 17:57:350219デフォルトの名無しさん
05/02/09 17:59:010220デフォルトの名無しさん
05/02/09 17:59:12レコード型の宣言がみせろよ
0221デフォルトの名無しさん
05/02/09 18:24:17TstringListなどを使った場合、終了する前にFreeをしてあげないと
メモリの解放などは行われないのでしょうか?
それとも、終了した時点で割り当てられたメモリなどは解放されるのでしょうか?
0222デフォルトの名無しさん
05/02/09 18:29:01FormDestroyでFreeでいいのでは?
0223213
05/02/09 18:37:29誤解を招く内容を書いてしまったことをお詫びします。
01: ss := StrToFloat(Form1.Edit1.Text);
02: s := Round(32 + ss * 8);
03:for X := 0 to 15 do
04: begin
05: Y := 0;
06: repeat
07: TChr[X,Y].Yposition := Y * s + 10;
08: NoD[X] := Y;
09: Y := Y + 1;
10: until TChr[X,Y].Yposition > 4800;
11: end;
レコードは以下のように宣言しています。
type
Chr = record
Xposition : Extended;
Yposition : Extended;
Xplus : Extended;
Yplus : Extended;
graph : TRect;
end;
0224213
05/02/09 18:38:00ss : Extended;
s : Integer;
X : Byte;
Y : Word;
TChr : array[0..15,0..1000] of Chr;
NoD : array[0..15] of Word;
コンパイルは出来るのですが、実行させると上記コードの07で止まってしまいます。
エラーメッセージは>>217の通りです。
(上記コードはボタンクリックのイベントとして書いています。)
0225デフォルトの名無しさん
05/02/09 18:51:080226デフォルトの名無しさん
05/02/09 18:52:090227デフォルトの名無しさん
05/02/09 18:52:180228デフォルトの名無しさん
05/02/09 19:01:4101: ss := StrToFloat(Form1.Edit1.Text);
02: s := Round(32.0 + ss * 8.0);
03:for X := 0 to 15 do
04: begin
05: Y := 0;
06:while (TChr[X,Y].Yposition<=4800.0) and (Y<=1000) do
07:begin
07:TChr[X,Y].Yposition := Y * s + 10.0;
08:NoD[X] := Y;
10:inc( Y );
11:end;
12:end;
0229213
05/02/09 19:09:06確かに、ssの値に1か0を代入すると、Yは1000を超えてしまうのですが、
ssが30以下の値だと、現象的に不自然なので、(説明が長くなるので理由は省略しますが)
下回らないように書き換えておきます。
しかし、プログラム事態は、07を一度も通過せずに止まってしまうんです。
0230213
05/02/09 19:26:11ご指摘の通りに書き直してみたところ、エラーも無く実行できました。
本当にありがとうございました。
0231228
05/02/09 20:18:09・普通、自分で定義したレコード型やクラスなどの型は、頭にTをつけるのが普通
・ゆえにTChrなんてつけかたは、普通、型に使う名前で勘違いされやすい
・万が一のコンパイラの勘違いを防ぐため、浮動小数点小数を意味する場合は、
4.0とか6.0とか、.0を付けること。代入される変数の意味もわかりやすくなる。
・repeatは、条件が後に来るので見づらい。どうしてもという所以外、whileの方が見やすい。
ということを気を付けるだけでも、他の人が見てもかなり見やすいコードになると思うよ。
0232228
05/02/09 20:24:58・ByteとかWordとかは、ここぞという場所以外使わない。
範囲外へ行ったときの不具合見つけるのが大変面倒。
一般的な32bitCPU+32bitOSでは、速度面でも不利なので、
なるたけ、IntegerかCardinalを使うことをおすすめする。
今回のコードのような使い方程度なら、メモリのムダとか考える必要はないので。
0233デフォルトの名無しさん
05/02/09 20:46:01検索してみたのですが思っているようなものが見つかりません・・・
Delphi6Personalを使っているのですが、http://www.wwlnk.com/boheme/delphi/tips/tec1380.htmこういうのは使えないんでしょうか?
解説しているページのURLでもいいのでどうかよろしくおねがいします。
0234213
05/02/09 21:03:33ご丁寧に教えていただいてありがとうございます。
初心者の私にとっては、大変参考になることばかりです。
確かに、分かりにくいコードでした。
今後は他の方が見ることも念頭においてコーディングするよう努力します。
0235デフォルトの名無しさん
05/02/09 21:12:53ありがとうございます。
なんとかやってみます。
0236デフォルトの名無しさん
05/02/09 21:31:55素直にIE使えばいいのに。
0237デフォルトの名無しさん
05/02/09 22:10:27・・・
0238デフォルトの名無しさん
05/02/09 22:25:48現在自作のHTMLエディタにIE・Geckoエンジン両方のプレビュー機能の実装を予定していて、
前述どおりActiveXであれば両方とも実装は完了しているんですが、そうなると色々と不都合があるので。
0239デフォルトの名無しさん
05/02/09 22:28:05何で、ソースを自分に取り込むのかがワカリマセヌ?
0240デフォルトの名無しさん
05/02/09 22:53:44COMだと他のマシンで使おうとすると、あらかじめCOMを入れておく必要があるので、多少サイズが大きくなってでもexeのみで動作できるようにしたいんです。
もし、他に方法があればヒントとかを教えてもらいたいのですが。
0241デフォルトの名無しさん
05/02/09 23:00:57配布問題ですね。なーる。
趣味の範囲ではなさそうだな。
バグが出たとき毎回コンパイルして配布するのか?
バグが出たらDLLを配布するのか?、
私なら後者のほうだな
0242デフォルトの名無しさん
05/02/09 23:17:17Geckoエンジンを使ってページを作ったけどFirefoxで動作確認しない。
というユーザーを想像するのは難しい。
0243Delフサギコ ◆A6VzDeLphI
05/02/09 23:18:00⊂ミ゚Д゚⊂,,,,,,,`つ がんがれー。
0244デフォルトの名無しさん
05/02/09 23:25:58自分の今のスキルではまだDLLの使い方(動的参照とか静的参照?)がいまいち理解しきれてないので、どちらかといえばDLLは使いたくないです。
このソフト自体は学校の授業中に思いついたソフトで、一応趣味のソフトですし、配布の予定は無いですが、やれるならやってみたいと思います。
(ケータイからなのでレスが大変です)
0245デフォルトの名無しさん
05/02/09 23:28:15勝ち組ですみません。
0246デフォルトの名無しさん
05/02/09 23:32:18少しは文句書け
0247デフォルトの名無しさん
05/02/09 23:33:15人生の負け組みはあっち池
0248デフォルトの名無しさん
05/02/09 23:34:480249デフォルトの名無しさん
05/02/09 23:39:150250デフォルトの名無しさん
05/02/09 23:40:190251デフォルトの名無しさん
05/02/09 23:51:420252デフォルトの名無しさん
05/02/10 00:10:440253デフォルトの名無しさん
05/02/10 00:57:08タブは8だし
フリーカーソルだし
行先頭から左押しても1つ前の末端までいかないし
複数行選択してタブ押しても消えるし
0254デフォルトの名無しさん
05/02/10 01:08:240255デフォルトの名無しさん
05/02/10 01:09:070256デフォルトの名無しさん
05/02/10 04:49:26現在はUTF-8をShift Jisに変換して処理してるのですが、特定の文字で化けが起きてしまいます。
内部をUTF-8扱う方法か、文字化けが起きない方法はないでしょうか?
0257デフォルトの名無しさん
05/02/10 05:10:11その分言だと、Utf8ToAnsi()関数はまだ使ってないのかな
まだだったら試してみそ
ヘルプにものってるよ
xml自体をTStringListとかで読みとって、各行を全てUtf8ToAnsi()に
かければいい。
0258デフォルトの名無しさん
05/02/10 12:16:510259デフォルトの名無しさん
05/02/10 18:22:52表示→ManualDockでDockさせると一瞬Dockされてない状態が見えてションボリです。
0260259
05/02/10 18:30:26ManualDock→表示→ManualDock
で上記問題は解決しましたが理由がわかりません。。
もっとスマートな方法をご存知の方、教えてください。
0261259
05/02/10 18:42:16JEDIコンポーネントのJvDockServer, JvDockClientを使っていたので、通常と異なる動作をしていたようです。
Form2.ManualDock(JvDockServer1.LeftDockPanel);
JvDockServer1.LeftDockPanel.ShowDockPanel(True, Form2);
上記のようにJvDockServerにManualDockした後、ShowDockPanelを呼び出すことで解決できました。
お騒がせしてすみません。
0262デフォルトの名無しさん
05/02/10 21:18:530263デフォルトの名無しさん
05/02/10 21:50:13ファイルサイズが変更しない正しいClipboard上でのBitmapの扱い方を教えて下さい。
var
BMP: TBitmap;
begin
BMP:= TBitmap.Create;
try
BMP.LoadFromFile('Hoge.bmp');
Clipboard.Assign(BMP);
BMP.Assign(Clipboard);
BMP.SaveToFile('ClipHoge.bmp');
finally
BMP.Free;
end;
end;
0264Delフサギコ ◆A6VzDeLphI
05/02/10 23:45:19⊂ミ゚Д゚⊂,,,,,,,`つ≡≡(´⌒;;;≡≡≡
おそくなりすぎた
>>233さん、ここなどどうか。
http://hpcgi1.nifty.com/MADIA/DelphiBBS/wwwlng.cgi?print+200412/04120006.txt
0265デフォルトの名無しさん
05/02/10 23:47:300266デフォルトの名無しさん
05/02/10 23:52:37「思っているようなもの」を具体的に。
0267デフォルトの名無しさん
05/02/11 00:37:07FormにDirectoryListBoxとFileListBoxを配置して実行、
DirectoryListBoxの階層をいろいろ変えましたがFileListBoxのほうに反映されてません
ヘルプによると、FileListBoxはカレントディレクトリを表示するコンポだそうですが
DirectoryListBoxのなんらかの値を手動で渡してやらないとダメなんでしょうか?
0268デフォルトの名無しさん
05/02/11 00:38:410269デフォルトの名無しさん
05/02/11 00:45:11DirectoryListBoxのFileListプロパティで指定してやったらうまく行きました!
てっきり子側(FileListBox)で設定するんだという固定観念に囚われすぎてた・・・
ありがとうございました!
0270デフォルトの名無しさん
05/02/11 13:06:48したときの動作がうまくいきません。(4)を実現するためにOnDeletionで
for j := 0 to FUndoList.Count-1 do //FUndoList: TList
if FUndoList[j] = Nil then FUndoList.Delete(j);
とやってみましたがダメでした。何か方法はないでしょうか?
◇R (1)★Pと▼Xと◆Cをクリック
├−−◆A (2)TListで★Pと▼Xと◆Cを保存
│ │ (3)◆Aを削除
│ ├−−▼T (4)TListから★Pと▼Xを削除
│ │ │
│ │ └−−★P
│ └−−▼X
│
◇Z
└−−◆C
│
◆V
0271270訂正
05/02/11 13:07:520272& ◆aXEE0ljRWg
05/02/11 14:06:39if No > -1 then FUndoList.Delete(No);
でOKでした。
0273デフォルトの名無しさん
05/02/11 18:14:18現在POS関連のプログラムを作っております。
POSの制御にActiveXコントロールを使用するのですが、
フォームを持つDLLにこれを乗せて使用してもエラーが出て使用できません。
色々試した見たところActiveXであればどんなものでも上記の現象が起きるようです。
ぐぐってみたところCoInitialize及びCoUninitializeというのがキモであるように書いてありましたが
initailzation節及びfinalization節にこれらを書いてもうまくいきませんでした。
解決策を知っておられるかたがいらっしゃいましたらお教え願いますでしょうか?
ちなみに、アプリケーションの制約上どうしてもPOSのコントロールを持つフォームを
DLLとして使わなければなりません。
どうかよろしくお願い致します。
0274デフォルトの名無しさん
05/02/11 18:16:51付属のサンプル試してみるとか。
0275デフォルトの名無しさん
05/02/11 19:25:19CoInitialize(nil);
0276デフォルトの名無しさん
05/02/11 19:29:43間違っていたらごめんよ
0277デフォルトの名無しさん
05/02/11 19:33:51それともアプリ実行時に一度唱えておけばOK?
アプリ実行時に唱えておいたらスレッド関連でエラー起こした記憶があるから、
クラス化しちゃってコンストラクタとデストラクタで呼ぶようにしちゃいました。
問題ないかな?
0278デフォルトの名無しさん
05/02/11 19:41:371度最初で唱えとけばOK
0279デフォルトの名無しさん
05/02/11 19:41:460280デフォルトの名無しさん
05/02/11 19:42:320281デフォルトの名無しさん
05/02/11 22:10:38EPSONのOPOSActiveXだったら、上手くやっているから答えることができるけど、
他の会社だったら自分はこたえられない。
よかったら何を使っているのか教えてください。
0282デフォルトの名無しさん
05/02/11 22:58:01http://forum.nifty.com/fdelphi/samples/01348.html
http://forum.nifty.com/fdelphi/samples/01349.html
http://forum.nifty.com/fdelphi/samples/01350.html
を使ってみたいのですが、どうやってソースを組み込むのかがわかりません
新規Form(Unit1)にStringGridを貼り付けて、さらにUnit1のソースの最後の「end.」直前に
ペーストしたりしたのですが、根本的に間違ってますか?
なんか、Power関数(?)も宣言(?)が必要みたいだし、さっぱりどうしたらいいのかわかりません
とりあえず、OpenDialogを使って一つのJPEGファイルを指定して、そのEXIF情報を表示するところまで
実現させてみたいのですが・・・Delphiの優しい先輩方、助けてください
0283デフォルトの名無しさん
05/02/11 23:09:09なんだから、TForm1 の public 部か private 部に
procedure ExifRead(ExifFile: String);
という宣言を手動で追加してから、implementation 部の下に、あの実装コードを
コピペするとよい。
> Power関数(?)も宣言(?)が必要みたいだし、
uses に Math を追加する。どのユニットを追加すべきかは、ヘルプを見ると分かる。
0284デフォルトの名無しさん
05/02/11 23:12:37で行う事。いじょ。
0285デフォルトの名無しさん
05/02/11 23:25:51どう済んだよw。誰が責任取るんだよ
0286デフォルトの名無しさん
05/02/12 00:23:12笑うとこ?
真面目なレス?
分からない…。
0287デフォルトの名無しさん
05/02/12 00:30:40Project1.ini
[Section1]
key01=test
var
str,Ini_Path2 : String ;
MAX_PATH : LongInt ;
begin
Ini_Path := ChangeFileExt(Application.ExeName, '.ini');
GetPrivateProfileString('section', 'key01', not_use', PChar(str), MAX_PATH, PChar(Ini_Path));
end;
と書いて、コンパイルは出来るものの実際に実行すると例外が発生します。
引数の宣言に問題があると思うのですが、google等で調べてもなかなか解決しません。
助言お願いします。
0288デフォルトの名無しさん
05/02/12 00:31:450289273
05/02/12 00:44:53>>274 その方法で試しております。
>>275 initializatin節でCoInitialize(nil)、finalization節でCoUnitializeを行ってます。
>>281 残念ながらSHARPでして…でもOPOSなのでよろしければご教授願えますでしょうか?
>>284 フォームのCreateにもShowにも何も書いておりません。
0290デフォルトの名無しさん
05/02/12 02:55:43ありがとうございました。
その2つのキーワードでググったら参考になるサイトが見つかって完成させることが出来ました。
0291デフォルトの名無しさん
05/02/12 08:57:53|
|
(=) /V\
J /◎;;;,;,,,,ヽ> 悪いけどこっちも
_ ム::::(゚Д゚,,)::| 忙しいから
ヽツ.(ノ:::::::::.:::::.:..|)
ヾソ:::::::::::::::::.:ノ
` ー U'"U'
0292デフォルトの名無しさん
05/02/12 09:40:43複数のUnitに分割するのと一本のUnitにまとめるのでは、どっちがオススメなんでしょうか?
やっぱり個人の好みの問題?
0293デフォルトの名無しさん
05/02/12 09:57:51複数のUnitに分散しる。
0294デフォルトの名無しさん
05/02/12 10:00:56吐き出されるexeのサイズからいって一本まとめが正解
0295デフォルトの名無しさん
05/02/12 10:26:10整理することは、再利用のための一歩。
0296デフォルトの名無しさん
05/02/12 10:31:47分割は目的ではない。
ソース、クラス、ロジックの分割は、ソースコードやクラス階層やロジック構造の整理の結果。
また、GUI 以前の開発環境は高々 80x25 のコンソールしかなかったので、上下左右にでかいコードは
疎んじられた。開発環境も思考を束縛するものだということ。
なので、オススメ。という物は無い。
0297デフォルトの名無しさん
05/02/12 10:39:54「CD1枚に収めたい」みたいな目的がなければ、exeのサイズは
あまり気にしなくても良い。
>>292
可読性や再利用性を考えたら、やっぱり徹底的な分割と
グループ化が必要。
あとは構成管理かな。
0298デフォルトの名無しさん
05/02/12 10:50:49> オススメ。という物は無い。
でっかいコードやクラスを書けという人は、古今東西一人も居ない。
0299デフォルトの名無しさん
05/02/12 11:04:540300292
05/02/12 11:08:38自分の場合、二重起動防止等をあらかじめ追加した自前のデフォルトdprを用意しといて
新規でアプリを作るときにはそこから始めてたんですけど、そこらへんも含めて
分散化して管理する方向に切り替えてみようかと思います
0301デフォルトの名無しさん
05/02/12 11:10:561unitだとプリントアウトが楽っていう利点もあるぞw
0302デフォルトの名無しさん
05/02/12 11:12:00for a := 1 to 3 do
begin
Label1.Caption := IntToStr(a);
Label2.Caption := IntToStr(a);
Label3.Caption := IntToStr(a);
end;
このような感じをねらっています。
for a := 1 to 3 do
begin
Label[a].Caption := IntToStr(a);
end;
0303デフォルトの名無しさん
05/02/12 11:21:12http://onigiri.s3.xrea.com:8080/delphi/index.php?%5B%5B%C5%BA%BB%FA%A4%F2%BB%C8%A4%C3%A4%C6%A5%B3%A5%F3%A5%C8%A5%ED%A1%BC%A5%EB%A4%F2%BD%E8%CD%FD%A4%B9%A4%EB%A4%CB%A4%CF%5D%5D
0304デフォルトの名無しさん
05/02/12 13:03:53Delphiではunit=namespaceだからその単位で分割する。
数学・数値処理ならMathユニットに放り込んであるし
文字列処理関数はStrUtilsでカテゴライズしてある。
Form1に関連する処理はUnit1に記述する。
現実的には常に1unitというのはありえない。
0305282
05/02/12 13:12:59ありがとうございます!
ただ、まだどうしても「[エラー] Unit1.pas(517): 未定義の識別子 : 'GetJpegSize'」が出てしまいます・・・
「GetJpegSize」をヘルプで検索したのですが見つかりませんでした
0306デフォルトの名無しさん
05/02/12 13:16:160307デフォルトの名無しさん
05/02/12 13:27:09http://forum.nifty.com/fdelphi/samples/00544.html
0309デフォルトの名無しさん
05/02/12 13:54:30TPaintBoxをフォーム上にalClientで置いて、そのOnPaintイベントで、
そのときのTScrollBarの位置に応じてTBitmapの一部を切り取って
bitbltで転送しています。
スクロール程度でしたら問題ないのですが、フォームをリサイズすると、
白い帯状のノイズが目に付きます。
OnPaintイベント内では、再入防止のための変数のチェック以外の
特別な処理は行ってません。
どうにか改善する方法はないでしょうか? よろしくお願いします。
0310デフォルトの名無しさん
05/02/12 14:26:26ライブラリとしては、Unit=Namespaceでも良いのだろうけど
アプリケーション(の部品)としては、使い勝手が悪い。
VCLは古ぶるしく、今ひとつ参考にならない。
0311デフォルトの名無しさん
05/02/12 14:27:350312デフォルトの名無しさん
05/02/12 14:29:36Unit1.pas の 588 行目にある GetJpegSize の呼び出しコードの、
二つ目または三つ目の引数が Word 型ではない。
としかわからないな。01350.html を元にしているのなら、X と Y の定義を
何にしましたか?
0313273
05/02/12 14:33:27デバイスの開閉をFormCreate部分から除き
別の場所で行うことによって正常に動作しました。
うまく動かなかったのはDLL側の記述の不備がありました。
お騒がせいたしましたm__m
0314デフォルトの名無しさん
05/02/12 14:34:49自分で試行錯誤してみる事が大切。
0315デフォルトの名無しさん
05/02/12 14:36:34Windows の宿命で、イベントキューが埋まった場合に WM_PAINT は後回しに
されます。かつ、複数の WM_PAINT はひとつに融合されてしまいます。
そのため、OnPaint が呼ばれるタイミングが遅くなるときがあります。
どうしても描画を優先させたければ WM_PAINT だけでなく、要所要所で描画することを
考えないといけない。この場合だと、枠のリサイズ時にも描画するとか。
あとはダブルバッファかな?
0316デフォルトの名無しさん
05/02/12 15:34:51ありがとうございます。
0319デフォルトの名無しさん
05/02/12 18:16:15一般的に、delphiでは配列は0から始めるべきでしょうか、
それとも1から始めるべきでしょうか。
自分はC人間なので0からにしたいのですが、
ヘルプだと1からの例ばっかりだったので。
みなさんの主観でよいので回答願います。
0320デフォルトの名無しさん
05/02/12 18:17:08Stringは歴史的経緯から1になってるだけ。
0321282
05/02/12 18:27:43>>282のhttp://forum.nifty.com/fdelphi/samples/01348.htmlの通り
「I,K,Hd,Hd2,Pt,X,Y: Integer;」でX,YはいずれもIntegerです。
試しに>>307の「GetJpegSize」の
-----------------------------------------
function GetJpegSize(const FileName:String;
var JWidth,JHeight:Word):String;
-----------------------------------------
のWordをIntegerにしてみたのですがダメでした。
>>282内で使われている「GetJpegSize」関数と
>>305の「GetJpegSize」関数はまったく互換性がないみたいですね。
これでまた振り出しに戻ってしまった・・・
0322デフォルトの名無しさん
05/02/12 18:30:53別に状況によりけり。
Cと違って添え字は順序型なら何でも良いわけだし
0323デフォルトの名無しさん
05/02/12 19:14:07他のユニット、例えばclasses.pasを改造するようにsystem.pasを
書き換えたものをプロジェクトに登録しても、
そのsystem.pasではなくデフォルトのsystem.dcuが使われてしまいます。
dprのusesでsystem in '……',を先頭に持ってきても同じでした。
これはsystemが暗黙にusesされるためだと思いますが、
独自のsystem.pasを使う方法があったら教えてください。
0324デフォルトの名無しさん
05/02/12 20:00:09case で書けるものを敢えて if で書くと何かデメリットがありますか?
0325デフォルトの名無しさん
05/02/12 20:01:470326デフォルトの名無しさん
05/02/12 20:56:20レスどうもです。
じゃあ0にしときます、とりあえず。
0327デフォルトの名無しさん
05/02/12 22:06:33お答えありがとうございます。case にします。
0328282
05/02/13 01:00:320329デフォルトの名無しさん
05/02/13 01:02:150330309
05/02/13 01:32:08> あとはダブルバッファかな?
結局、いろいろやって、アドバイスの通り、
フォームの DoubleBuffered でチラツキが
完全に消えました。メモリもそれほど
消費してないみたいです。
ホントにありがとうございました。
0331デフォルトの名無しさん
05/02/13 01:34:200332デフォルトの名無しさん
05/02/13 02:01:14Exif を読む分には GetJpegSize は必要ないんだから、削っちゃえばいいじゃん。
if GetJpegSize(ExifFile,X,Y) then begin
・・・
end;
を削れば動くでしょ?
どうしてもサイズが取得したいなら、>>307 の引数を Integer にしたバージョンをがんばって作るか、
Jpeg ユニットを uses して TJPEGImage でも使えば?
0333332
05/02/13 02:05:53新たに WordX, WordY: Word とでも宣言して
if GetJpegSize(ExifFile,WordX,WordY) then begin
StringGrid1.RowCount:=StringGrid1.RowCount+1;
StringGrid1.Cells[0,StringGrid1.RowCount-1]:='画像サイズ:';
StringGrid1.Cells[1,StringGrid1.RowCount-1]:=IntToStr(WordX)+'×'+IntToStr(WordY);
end;
でもいいよね。これなら、GetJpegSize を書き換える必要もないし。
0334デフォルトの名無しさん
05/02/13 11:04:43同じフォームの別のLabelに反映させるには
どうすればいいでしょうか?
0335デフォルトの名無しさん
05/02/13 11:15:01Label.Caption := Edit.Text
するとか
0336デフォルトの名無しさん
05/02/13 11:46:31バッチリ上手くいきました!
どうもありがとうございました。
0337デフォルトの名無しさん
05/02/13 11:52:110338デフォルトの名無しさん
05/02/13 12:36:060339デフォルトの名無しさん
05/02/13 13:41:40OnChangeの方が広く対応できるということですね。
アドバイスありがとうございます。
0340デフォルトの名無しさん
05/02/13 17:00:120341デフォルトの名無しさん
05/02/13 17:09:590342341
05/02/13 17:11:050343263
05/02/13 17:12:02>>263お願いします
試しにCommon Files以下のにある「CHEMICAL.BMP」で試したところ、
43.2KBが169KBにまで膨らんでしまいました
何が間違っているのでしょうか?
0344340
05/02/13 17:19:528(4or以下)ビット画像を24(32)ビット画像で保存しているのでは?
0345デフォルトの名無しさん
05/02/13 17:20:43俺は340じゃないが、
ようするに、クリップボードを通すと、
256色が、なんで16bitとか24bitとかに化けるのかって意味?
0346263
05/02/13 17:32:18>>345さま
Assignした後のPixelFormatが何故かpfDeviceになっていたので、
pf8Bitを明示的に指定したところ問題がなくなりました
ありがとうございました!
0347340
05/02/13 17:35:08TBitmap.LoadFromClipboardFormatのヘルプ例を参考にしてみ
0348263
05/02/13 17:44:28Loadは出来たのですが、今度はSaveが…
TBitmapのヘルプのSaveToClipBoardFormatの例を実行したのですが、
クリップボードへ出力してIrfanView等で読み込むと
何故かファイルサイズが膨らんでしまいます… orz
>>345さまのおっしゃるようにbitが化けているようなのですが、
どうやったら8bitとしてクリップボードへ保存出来るのでしょうか?
procedure Hoge;
var
MyFormat : Word;
Bitmap : TBitMap;
AData: Cardinal;
APalette : HPalette;
begin
Bitmap := TBitmap.Create;
try
Bitmap.LoadFromFile('CHEMICAL.BMP');
Bitmap.SaveToClipBoardFormat(MyFormat,AData,APalette);
ClipBoard.SetAsHandle(MyFormat,AData);
finally
Bitmap.Free;
end;
end;
0349デフォルトの名無しさん
05/02/13 17:48:56Del側で取得した文字列を引数としてバッチを呼び出しているのですが
(複数の文字列情報をバッチ側で処理したいんです)、
まとめて一文としているためか256文字以上になると
バッファオーバーフローと表示されてしまいます。
複数ある引数を一つずつ渡せば回避できるかもとか考えたのですが、
上手い方法はないでしょうか?
0350340
05/02/13 17:50:020351340
05/02/13 17:52:32バッチ側のプログラムが悪いんだろ
0352デフォルトの名無しさん
05/02/13 17:53:230353263
05/02/13 17:54:126Personalのヘルプの例では「AData,APalette : THandle;」と宣言されているのですが、
コンパイルしようとすると
「変数実パラメータと変数仮パラメータとは同一の型でなければなりません」
と怒られてしまうため、同一の型に適当に変更してしまいました
0354デフォルトの名無しさん
05/02/13 17:56:270355デフォルトの名無しさん
05/02/13 17:59:32VCL内部で勝手に、pfDevice にしてClipboardのハンドるで取得したHBitmapからBitBltで複製してるから
元のクリップボードの色数とかは反映されない仕掛けのようだから、
自前で、TBitmap.LoadFromClipboardFormatを参考にして
ClipBoard.GetAsHandle(cf_Bitmap) して
GetObject(AData, sizeof(DIB), @DIB);
で 収得したDIBのメンバーから色数とか調べて設定してからという処理が必要になるんじゃないかな
このあたりはVCLのコードとWindowsのヘルプを参考に見てゆくしかないよ
0356355
05/02/13 18:15:27つまり
http://www.asahi-net.or.jp/~HA3T-NKMR/vcl2-7.htm
CF_DIB 形式のビットマップはサポートされてなくて
CF_BITMAP 形式しかサポートしないから
TBITMAPのクリップボード機能では結局はやりたい事は出来ないという事みたいだよ。
だから、やりたいなら自前でCF_DIBに対応しなければいけないようだよ。
0357デフォルトの名無しさん
05/02/13 18:26:31今回もTBitmapのかわりにTNkDIB使ってみたら?
0358デフォルトの名無しさん
05/02/13 18:47:48>>352
舌足らずですみません。
バッチ側が悪いというよりはWinのシェルが一回のコマンドで
受け付けられる文字数が最大255文字だそうです。
一度にすべての情報を渡すとオーバーしやすいので
なんとかDel側で複数に分けて同じバッチのプロセスに
引数として文字列を突っ込む方法はないでしょうか?
という意図の質問でした。
ちなみにエラーが出たのはDel側で、256文字以上の文字列を
WinExec関数で実行させようとすると出てきました。
説明がヘタクソですみません。
0359デフォルトの名無しさん
05/02/13 18:52:27cmdバッチじゃ無理だろう
0360デフォルトの名無しさん
05/02/13 18:58:380361263
05/02/13 20:46:31>>357
とてもご丁寧にしてくださり、恐縮です
…が、最近Pointerを理解し始めた程度の初心者ですので、
そこのサイトに何が書いてあるのかイマイチわかりません…
でも、泣き言言っててもしょうがないので、とりあえず
357様の推薦してくださったNkDIBを使って頑張ってみます
本当にありがとうございました
0362358
05/02/13 20:48:56その後も表記されるエラーはEAccessViolationで、
WinExecを実行する前のStrAllocで確保するとき
多めのバイト数を指定することで問題を回避できました。
256文字以上でも平気で実行されるのが少し気になっているのですが…。
(128or255が最大っていう表記は結構見かけたんですが何か勘違いしてるっぽいです)
もう少し調べてみます。
>>359
プロセス間通信は試したことがないので方法に見当がつきません…。
改めて調べてみます。
>>360
テンポラリファイルを作るのは考えつかなかったです。
大きなデータを扱う時に試してみたいと思います。
0363デフォルトの名無しさん
05/02/13 22:01:340364デフォルトの名無しさん
05/02/13 23:42:59Delphiのエディタにあるように、特定の文字の上にカーソルが来ると、
定義場所を示すような黄色背景のヒントがすが、これの実現方法が
分かりません。
Application.OnShowHint なんかとは違うような気がするんですが、
どうなんでしょう。
よろしくお願いします。
0365デフォルトの名無しさん
05/02/13 23:45:390366デフォルトの名無しさん
05/02/13 23:53:01Javaで言えばやさしいJava(高橋氏)、Cでいえば、C言語1(倉薫氏)くらい簡単なのがよいです
よろしくお願いします。
0367デフォルトの名無しさん
05/02/13 23:53:280368デフォルトの名無しさん
05/02/14 00:02:08そこ見たんですが、基礎からわかるDelphi6とカンタン!Delphiプログラミング はもう売ってないみたいですし、
Delphiはじめの一歩 やさしいプログラミングはアマゾンで不親切とあります
やはりデルヒはほかの言語をマスターしてからじゃないとつらいんでしょうか
0369デフォルトの名無しさん
05/02/14 00:10:19悲しいことに、おすすめの本はいまや古本屋でしか入手出来なさそう。
0370デフォルトの名無しさん
05/02/14 00:13:38でもあんた、目的意識がなけりゃどんな本見ても無意味ですから
0371デフォルトの名無しさん
05/02/14 00:15:26そうなんですか。
新品での購入はあきらめます。ありがとうございました。
0372デフォルトの名無しさん
05/02/14 00:16:29分からないところはオンラインの解説サイトもいくつかあるから
そこを参照するなりここで聞くなりすればいいし。
0373デフォルトの名無しさん
05/02/14 00:24:44まあ、seventh delphiというサイトを最初は見るのがいいよ。
あそこの旧Delphi入門
0374デフォルトの名無しさん
05/02/14 00:40:24なるほど。HintWindowClass ですか。
コントロールの ShowHint を細かく切り換えて、
OnShowHint で位置などを指定してたんですが、
これじゃ、一定時間後にヒントが消えちゃいますものね。
THintWindow のヘルプを読んでみます。
ありがとうございました。
0375デフォルトの名無しさん
05/02/14 01:53:11exe埋め込みwave再生したいのですが、
tips本のとおりやっても再生できません。
ご指摘お願いします。
具体的にはpsoundに "RIFF、f"が代入され,sndPlaySoundでエラーです。
procedure oto(a:integer);
var h,hwave:thandle;
psound:lpstr;
t:string;
begin
hwave:=0;
psound:=nil;
t:=inttostr(a);
if length(t)=1 then t:='0'+t;
t:='sound'+t;
h:=findresource(hinstance,pchar(t),RT_RCDATA);
if h<>0 then
begin
hwave:=loadresource(hinstance,h);
if hwave<>0 then
begin
psound:=lockresource(hwave);
if psound<> nil then
sndPlaySound(psound,SND_ASYNC)
end;
end;
end;
0376375
05/02/14 01:54:35sound01 RCDATA "1.wav"
sound02 RCDATA "2.wav"
sound03 RCDATA "3.wav"
sound04 RCDATA "4.wav"
sound05 RCDATA "5.wav"
sound06 RCDATA "6.wav"
sound07 RCDATA "7.wav"
sound08 RCDATA "8.wav"
sound09 RCDATA "9.wav"
インデント解除されているようで見難くてすいません。
0377デフォルトの名無しさん
05/02/14 02:57:37そのソース(じっくり見てないけど)にこだわるのも「あり」だけど、
他のやり方(結局は同じだけど)を探すのも「あり」かと。
↓
ttp://leed.issp.u-tokyo.ac.jp/~takeuchi/delphi/article/012/012038.html
は読んでみた?
0378377
05/02/14 03:04:24ttp://leed.issp.u-tokyo.ac.jp/~takeuchi/delphi/search.cgi
Delphi-ML過去ログ検索
を探してみるといいよと。
0379デフォルトの名無しさん
05/02/14 03:07:00あと、Formatの使い方を覚えよう。
0380デフォルトの名無しさん
05/02/14 12:03:020381デフォルトの名無しさん
05/02/14 12:46:49Format関数。
VB風の書式化文字列はFormatFloatやFormatDateTimeだな〜ん。
0382デフォルトの名無しさん
05/02/14 13:55:35例えば、同ディレクトリ内に logディレクトりを作り
そのlogディレクトリ内のファイルを出力させる場合を教えてください。
Maskを *\log\*.txt ではなんともならなく、
他にディレクトリを指定できるところもなく、弱っています。
どうすればいいでしょうか?
0383デフォルトの名無しさん
05/02/14 14:20:35ありがとうございます。わかりました。
FileListBox1.Directory := 'log';
で出来ました。お騒がせしました。
0384デフォルトの名無しさん
05/02/14 14:25:58TFileListBox.DirectoryにTDirectoryListBox.Directoryから取り出したパス文字列に
\logを付け足して動的にセットしてやるといいんでは?各階層に\logフォルダの存在チェックもしつつ。
procedure TForm1.DirectoryListBox1Change(Sender: TObject);
var
path,logpath:TFileName;
begin
path := DirectoryListBox1.Directory;
logpath := path + '\log';
if DirectoryExists(logpath) then
begin
FileListBox1.Directory := logpath
end
else
begin
FileListBox1.Directory := path
end;
end;
0385デフォルトの名無しさん
05/02/14 15:01:31ありがとうございます。
とてもいい感じにうまく動作しました。
これより、どのようになってるか理解していきます。
0386デフォルトの名無しさん
05/02/14 16:01:03DelphiでDLL作って、DLLの呼び出し元からウィンドウハンドルもらって、
Delphiで作ったフォームをそのウィンドウハンドルのモーダルウィンドウとして
表示したいのですけど、どのやうにすればいいのでしょうか?
0387デフォルトの名無しさん
05/02/14 16:01:500388デフォルトの名無しさん
05/02/14 16:02:490389デフォルトの名無しさん
05/02/14 16:03:390390デフォルトの名無しさん
05/02/14 16:34:440391デフォルトの名無しさん
05/02/14 16:36:26それをDLL側にて自身のApprication.Handleへ代入。
DLL側で自身の初期処理用手続きを書いてそこで引数(Handle)受け取ってやるといい。
それが終わったら同じ初期処理内で自身をShowModal。
0392デフォルトの名無しさん
05/02/14 17:05:14Formのインスタンスを作るときの、コンストラクタの引数は何にすればいいんでつか?
0393デフォルトの名無しさん
05/02/14 17:25:34Apprication 変数を使うか、
ShowModal するんだからnilでも
0394392
05/02/14 17:29:28しりませんでした。つーか、この辺の処理をよく理解していない(汗
0395392
05/02/14 17:46:10TApplication.Handleのヘルプに、
>これにより,ホストアプリケーションの DLL のフォーム部分が作成されます。
>このハンドルは EXE 内の Handle プロパティに割り当ててはいけません。
って書いてあったんですが、よう意味がわかりません。
偉い方、教えてください。
0397375
05/02/14 21:00:040398デフォルトの名無しさん
05/02/14 21:28:28リソースストリームで読み込んで、マルチメディアAPIでガシガシ再生すれば?
あと、某有名MP3プレーヤコンポはストリーム再生もサポートしているから、
WaveをMP3にして、リソースストリームを直接再生してやると、Waveのサイズによっては
EXEが小さくなってお徳かも。
0399デフォルトの名無しさん
05/02/15 02:33:530400デフォルトの名無しさん
05/02/15 04:27:080401デフォルトの名無しさん
05/02/15 10:58:47たとえば
data := 'test';
と変数'data'に'test'というデータを格納し
dataの中の test を変数名として
test := '中身';
ということをしたいんです。
perlでいうあらわすと
$data = "test";
$$data = "中身";
print $test;
と、すると 「中身」と表示される。
よろしくお願いします。
0402デフォルトの名無しさん
05/02/15 11:21:300403デフォルトの名無しさん
05/02/15 12:33:53Strings.Objects[Strings.IndexOf('hoge')]
みたいにやって代用できなくもない。
しかし面倒。しかもアイテムが数千、数万になると悶絶しそうな遅さ。
実用性を考えるなら、ハッシュ値で絞り込むようなデータ構造を自分で作るべし。
ここでTemplateが使えないというDelphiの悲しさが・・・
0404デフォルトの名無しさん
05/02/15 13:09:230405デフォルトの名無しさん
05/02/15 13:49:09>>401 は頑張ればできる。
0406デフォルトの名無しさん
05/02/15 14:18:19それに近いのはプロパティかな。
実行時型情報の仕掛けでプロパティにアクセスするようにするといいよ。
0407デフォルトの名無しさん
05/02/15 14:25:37Delphiでは出来ない。データ構造ではなく、言語使用の問題だから。
0408デフォルトの名無しさん
05/02/15 14:26:310409デフォルトの名無しさん
05/02/15 14:27:59回答マダー?
0410デフォルトの名無しさん
05/02/15 14:28:11要dcc32w
0411デフォルトの名無しさん
05/02/15 14:31:330412デフォルトの名無しさん
05/02/15 14:32:47function getvaraddr(varname: string): pointer;
begin
if varname = 'test' then Result := @test;
end;
0413デフォルトの名無しさん
05/02/15 14:34:310414デフォルトの名無しさん
05/02/15 14:35:050415デフォルトの名無しさん
05/02/15 14:35:07変数とプロパティの区別ってなんですか?
0416デフォルトの名無しさん
05/02/15 14:36:040417デフォルトの名無しさん
05/02/15 14:38:000418デフォルトの名無しさん
05/02/15 14:54:250419406
05/02/15 15:43:49published
property hoge:Integer;
で、ctrl+ALT+Cで後の定義はやってくれる。
そうすると、こいつは実行ファイルに、プロパティ名が埋め込まれる。
実行時型情報という奴だ。
uses TypeInfo して
GetPropValue / SetPropValue でアクセス出来る。
例 SetPropValue(Self,'hoge',data);
ね? これなら簡単だし、手間不要でしょ?
しかもプロパティだから、書き込み時にアクションさせる事も出来るし
0420406
05/02/15 15:53:08外部アクセス可能な変数だけのクラス作りたいとかいう場合は、
{$TYPEINFO ON} するか
TPersistent から継承するといいよ
0421デフォルトの名無しさん
05/02/15 15:54:44フサスレ池
0422デフォルトの名無しさん
05/02/15 15:54:510423デフォルトの名無しさん
05/02/15 15:56:38回答マダー?
0424406
05/02/15 16:02:30ああ、事前に定義しないで自由に変数を使いたいわけね。
それはインタプリタの技術を応用するといいよ。
トイインタプリタとしてギコbasicがあったんだけど・・・
0425デフォルトの名無しさん
05/02/15 16:18:390426デフォルトの名無しさん
05/02/15 16:20:290427406
05/02/15 16:25:12http://pc5.2ch.net/gamedev/kako/1013/10131/1013170036.html
この
ugikoscr.txt が残っていればよかったんだけど、検索してもみつからないや。
俺のHDDにはあるんだけど・・・・いるかい?>>401 いるならどこかアップローダ指定して
0428デフォルトの名無しさん
05/02/15 16:48:43文字列からハッシュ値計算して、ハッシュ表から該当するポインタ取って来て、
そこにアクセスするデータ構造くらいすぐに作れるだろ?
まさかわからん?(´,_ゝ`)プッ
0429デフォルトの名無しさん
05/02/15 16:48:540430デフォルトの名無しさん
05/02/15 16:51:030431デフォルトの名無しさん
05/02/15 19:05:08その間、フォームが表示されませんよね。
この重い処理をフォームが表示されてから行いたいのですが
どうすればよいのでしょうか。
その間Screen.Cursorを砂時計にしているのですが、フォームが表示されていないので
カーソルも変わらず、アプリが動いているのかすらわからない状態で困っています。
0432401
05/02/15 19:09:33なんか荒れてしまったようですね・・・
回りくどいことして実装する気はないので
別の方法を考えます。
いろいろ提案をありがとうございます。
0433デフォルトの名無しさん
05/02/15 19:13:41OnShowでやらずにタイマーを貼り付けてタイマーのイベントで1回だけ実行するとか
0434デフォルトの名無しさん
05/02/15 19:13:540435デフォルトの名無しさん
05/02/15 19:15:54TForm1 = class
private procedure CMShowingChanged(var Msg:TMessage); message CM_SHOWINGCHANGED;
procedure TFormEx.CMShowingChanged(var Msg: TMessage);
begin
inherited;
if Visible then
begin
Update;
// todo:ここに処理を記述
end;
end;
0436406
05/02/15 19:20:28http://onigiri.s3.xrea.com:8080/delphi/index.php?%5B%5Bgikobasic%5D%5D
たとえば
data := 'test'; と変数'data'に'test'というデータを格納し
dataの中の test を変数名として
test := '中身'; ⇒ GikoScript.LET(test + '="中身"' );
結果を得るには
GikoScript.ExecToVar( test );
"で囲んだら文字列
数字なら四則演算も出来るから
0437デフォルトの名無しさん
05/02/15 19:33:22初期処理に時間かかる場合はスプラッシュフォーム出して、その間に処理。
それからMainFormを表示という定番の手も。
その初期処理を考え得るだけ最適化(効率化)する事に努めるのも大事。
0438431
05/02/15 20:15:07アンタ俺のネ申だ!
バリバリ最高でスッキリしますた。
>>433
とりあえずそれで回避していましたが禿しく不満だったので質問しますた。
>>437
当然、限界まで最適化したつもりですが、ショートカットにD&Dされたファイルの処理なので
無数のファイルをD&Dされるとどうしても数秒かかる。
スプラッシュは昔から好きじゃないので。
みなさん、どうもありがとう。
0439デフォルトの名無しさん
05/02/15 22:04:43又、その逆も。
0440デフォルトの名無しさん
05/02/15 22:26:48http://www.borland.co.jp/qanda/delphi/d0000842.html
か、QueryとTStringListのcommatext通して自前でガリガリPOSTorファイル書き出し処理を書くか。
0441デフォルトの名無しさん
05/02/15 23:23:03参考にさせてもらいます。
0442デフォルトの名無しさん
05/02/15 23:31:51http://www.google.co.jp/search?hl=ja&q=%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%81%8C%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%81%9F%E7%9B%B4%E5%BE%8C%E3%81%AB%E4%BD%95%E3%81%8B%E3%81%AE%E5%87%A6%E7%90%86%E3%82%92%E8%A1%8C%E3%81%86+delphi&lr=
がいいと思う。
0443デフォルトの名無しさん
05/02/16 01:57:14自分が作ってるブラウザに串を設定するための処理を書いてるんですが
通そうとする串が生きてるか死んでるかを判定する方法が分かりません。
串の状態を取得して生き串か折れ串なのかを見分けるにはどうすればいいんですか?
ちなみに串の設定にはUrlMkSetSessionOption()を使っています。
0444ミ,,゚Д゚彡 ◆A6VzDeLphI
05/02/16 02:16:50435さんの内容はここに書いてあるです。
http://hp.vector.co.jp/authors/VA009712/take/delphi/kabedel.htm#showingchanged
0445デフォルトの名無しさん
05/02/16 02:44:50パネル張ったときのこの出っ張りどうにかならない?
0446デフォルトの名無しさん
05/02/16 02:46:320447デフォルトの名無しさん
05/02/16 10:16:02procedure TForm1.ApplicationEvents1Idle(Sender: TObject;
var Done: Boolean);
begin
ApplicationEvents1.OnIdle := nil;
ShowMessage('OnShow以降、ここで初期化できるよ');
end;
0448デフォルトの名無しさん
05/02/16 12:25:020449デフォルトの名無しさん
05/02/16 13:24:320450デフォルトの名無しさん
05/02/17 10:08:44やりたいことは指定したページを表示させたいです。
0451デフォルトの名無しさん
05/02/17 10:35:04する必要がある。
http://hogehoge2001.at.infoseek.co.jp/note-delphi.html
が参考になる。あとは、TWEBBrowser Delphi でググルとたくさんコード例が見つかる。
0452デフォルトの名無しさん
05/02/17 10:46:18ありがとうございます。
0453デフォルトの名無しさん
05/02/17 11:59:26目的はデザインパターンのファクトリーメソッドパターンをDelphiでやりたいと思っています。
JavaでいうClassクラスのようなものはDelphiには存在しないのでしょうか?
ご存知の方がいらしたらご教授下さい。
0454デフォルトの名無しさん
05/02/17 12:11:490455デフォルトの名無しさん
05/02/17 12:14:23文字列からクラス名を識別してそのクラスインスタンスを作成したいなら
実行時型情報の仕掛けを使う事になるでしょ。
TypeInfo をあちこち覗いてみたら?
0456デフォルトの名無しさん
05/02/17 12:33:04Application.CreateFormがやってるようにクラス参照型で渡す。
広い範囲ならCOMにしてCreateOLEObjectなどを使う。かな?
0457デフォルトの名無しさん
05/02/17 13:25:00Demoのは難しくてわかんない。
0458453
05/02/17 13:28:22レスありがとうございます。
教えて頂いたことをヒントに頑張ってみます!
0459デフォルトの名無しさん
05/02/17 13:34:52Demo のどこら辺が理解できなかった?
Virtual ではない ListView を使わない理由は?
0460457
05/02/17 13:56:15> Demo のどこら辺が理解できなかった?
OnDataFindイベントの発生するタイミングと引数の意味がわかりません。
> Virtual ではない ListView を使わない理由は?
フォルダ内の画像ファイルのサムネイルを表示したいのだが、Virtualでないと
ファイル数が多い場合にかなり時間がかかるから。
0461デフォルトの名無しさん
05/02/17 14:51:04Object Pascalってクラスのインスタンスを生成(破棄)したときに自動的にコンストラクタ
(デストラクタ)を呼ばないの?例えばC++なら
void cpp(void)
{
AClass instance; // AClassのコンストラクタAClass::AClass()が呼ばれる
:
:
} // 関数cppのスコープを出る時にAClassのデストラクタが呼ばれinstanceを破棄
Object Pascalの仕様では明示的にコンストラクタ、デストラクタを呼ばなければならない
のでしょうか?
0462デフォルトの名無しさん
05/02/17 14:54:340463461
05/02/17 15:00:26おおっ、すばやいご回答有難うございます。
C++の感覚でコーディングしてうっかりコンストラクタ/デストラクタを呼び忘れたら
原因を特定しにくいバグをこしらえてしまいますね。気をつけようと思います。
0464デフォルトの名無しさん
05/02/17 15:22:230465デフォルトの名無しさん
05/02/17 16:14:57Delphiでは、クラスは、動的にしか使えんのですよ
静的にも使えるObject型はDelphi8で消えたしな
あと、デストラクタは、Freeとnil代入を行うFreeandNil()が便利
0466デフォルトの名無しさん
05/02/17 17:05:30現在、親フォームと子フォームを持つ(Unitを二つ持つ)プログラムを作っています。
同一の変数を複数のUnitで使うには、uses節に該当するUnit名を追加すればよいということは分かったのですが、
それでは、関数(手続き)をUnit間で共有するためにはどのようにすればよいのでしょうか(そのやり方が分からないため、現在は、全く同じ関数をUnitごとに書いています)。
ヘルプの「複数のユニットの参照と間接的なユニット参照」の項には、関数は共有できるというようなことが書かれているのですが、やり方がイマイチ判然としません。
具体的なソースコードが分かれば大変助かります。どうぞ、ご教示下さい。
0467デフォルトの名無しさん
05/02/17 17:38:53実装する。ソースが見られるなら、VCL でも同じになってるよ
0468デフォルトの名無しさん
05/02/17 17:40:22関数を定義した、別のユニットを用意すればいかがですか?
0469デフォルトの名無しさん
05/02/17 17:41:47君は IntToStr() 関数を使ったことがあるだろ? Unit1 でも Unit2 でも
Uses に SysUtils を含めると使える。だから、たとえば MyFunc.pas とか
のユニットファイルを作って >>467 のようにするだけ。
0470デフォルトの名無しさん
05/02/17 19:28:36unit Unit2
interface
procedure Foo;
implementation
procedure Foo;
begin
end;
end.
unit Unit1;
interface
implementation
uses Unit2; // implementationの下でusesする
procedure bar;
begin
Foo; // unit2のFooをコール
end;
end.
0471デフォルトの名無しさん
05/02/17 19:33:250472デフォルトの名無しさん
05/02/17 21:24:53とりあえずその関数の宣言をPrivateからPublic宣言に移動させてみては。
それでとりあえず効果は確認できると思う。
スマートにやるならやはり別ユニット方式で、
新規に関数専用ユニットを作って各Unitからそれをuse。
0473デフォルトの名無しさん
05/02/17 21:26:27どうすればできるでしょうか?
0474デフォルトの名無しさん
05/02/17 23:03:07Private・Public宣言はクラス内の宣言だと思うのだが?
>>473
日本語のWin32ヘルプがCDROMに付いてた筈。
それでエディット コントロールの概要を見てみたら?
>WM_COPYメッセージは、 エディット コントロールで現在テキストが選択されていれば、
>選択範囲のテキストを削除せずにエディット コントロールからクリップボードにコピーします
0475デフォルトの名無しさん
05/02/18 10:47:19現在使ってるものに少々手が届かなくて歯がゆいんですが、
一から作るのは実力的にきついものがあるので。
0476デフォルトの名無しさん
05/02/18 11:09:11ttp://www.kobira.co.jp/sakura/d_Con_Cgi.htm
0477466
05/02/18 12:18:23頂いた情報を元にして、とりあえず動くものはできました。
解説の意味内容を本当に理解するには、オブジェクト思考プログラミングについてもっと勉強しなければならないということだと思います。そちらについても、徐々に勉強していきます。
わざわざ回答して頂いて、ありがとうございました。
0478デフォルトの名無しさん
05/02/18 12:20:450479デフォルトの名無しさん
05/02/18 12:39:31文字列からインスタンスの生成でこんなのがあった。
ttp://www.borland.co.jp/qanda/delphi/d0003116.html
0480デフォルトの名無しさん
05/02/18 14:02:37「処理中です」ってウインドウを出したいんです。
もちろん処理が終わるとそのウインドウも自動で閉じるって感じのやつで。
どうやってだすんでしょう?お願いします。
0481デフォルトの名無しさん
05/02/18 14:28:520482480
05/02/18 14:36:57その方法って、新しく作るフォームに処理を書かないとダメな気がするんですが・・・。
ShowMessageみたいなヤツが希望なんですけども、
無いならば481氏の方法でやります。481サンありがとう。
0483デフォルトの名無しさん
05/02/18 14:55:220484デフォルトの名無しさん
05/02/18 15:23:02動的に作ればいいの?
procedure TForm1.Button1Click(Sender: TObject);
var f:TForm;
procedure msg(s:string);
begin
f.width:= f.Canvas.TextWidth(s)+20;
f.Canvas.TextOut(10,10,s);
end;
begin
try
f:=TForm.Create(nil);
f.Caption:='メッセージ';
f.Show;
msg('今ナニしてるからちょっとまって');
Sleep(1000);
msg('もうすこし');
Sleep(1000);
finally f.free end;
end;
0485デフォルトの名無しさん
05/02/18 15:25:33ギコbasicはどう?
http://onigiri.s3.xrea.com:8080/delphi/index.php?%5B%5Bgikobasic%5D%5D
0486デフォルトの名無しさん
05/02/18 16:31:080487デフォルトの名無しさん
05/02/18 16:32:110488デフォルトの名無しさん
05/02/18 16:35:360489デフォルトの名無しさん
05/02/18 16:44:240490デフォルトの名無しさん
05/02/18 16:48:270491デフォルトの名無しさん
05/02/18 16:52:57Del6以降はInt64のSeekがあるよ
0492デフォルトの名無しさん
05/02/18 16:54:110493デフォルトの名無しさん
05/02/18 17:45:14DMonkey
0494デフォルトの名無しさん
05/02/18 19:56:14具体的には、http://forum.nifty.com/fdelphi/faq/00190.htmがやりたいのですが、
プロジェクトファイル内の「CopyDataToOld(Wnd,ParamCount);」の部分で、
「未定義の識別子」と言われてしまいます。
ユニット側やプロジェクトファイル内に何か宣言みたいな物が必要だと予想したんですが、
どこに何を書けばいいんでしょう?
0495デフォルトの名無しさん
05/02/18 20:05:17ユニット名.CopyDataToOld(Wnd,ParamCount);
クラス名.CopyDataToOld(Wnd,ParamCount);
とかすればいいのでは?
0496デフォルトの名無しさん
05/02/18 20:15:050497デフォルトの名無しさん
05/02/18 20:54:150498デフォルトの名無しさん
05/02/18 23:32:460499デフォルトの名無しさん
05/02/19 01:19:120500494
05/02/19 04:31:07ユニット名でもダメでした。フォームがないユニットなのでクラス名は無いです。
>>496
それはDelphiさんが勝手に付けてくれたので付いてました。
0501デフォルトの名無しさん
05/02/19 04:46:220502494
05/02/19 05:03:26そのユニットのinterface部にprocedureのヘッダを書いてあげればよかったみたいでした。
もしかして>>496はそういう事を言ってたのかな。
0503デフォルトの名無しさん
05/02/19 10:42:55コンパイルすると未定義の識別子エラーになります。
USESに何か足らないと思うのですが分かりません。
何を追加すれば良いですか?
0504デフォルトの名無しさん
05/02/19 10:59:05JCL ダウンロードして、LM ユニットを uses に追加。
JCL は ttp://sourceforge.net/projects/jcl/ から 1.94 を落とせば良し
0505デフォルトの名無しさん
05/02/19 12:26:240506デフォルトの名無しさん
05/02/19 12:41:12TStrings はエディタのような文字列が集まった構造を扱うもので文字列とは違います。
TStringsのインスタンスのメンバー Text や Strings[ ] がString 型です
-------------
で私の質問
const c=[1,2,5] みたいに定義した集合の、全部の要素にアクセスする一番良い方法は?
for i in c do みたいな構文があればいいのですが
0507デフォルトの名無しさん
05/02/19 13:08:03さんくす!
0508506
05/02/19 13:20:440509デフォルトの名無しさん
05/02/19 13:22:07こんな感じ?
const
Hoges: array[0..2] of Integer = (1, 2, 5);
var
i: Integer;
for i := Low(Hoges) to High(Hoges) do
ShowMessage(IntToStr( Hoges[i] ));
0510509
05/02/19 13:23:130511506
05/02/19 14:15:42うん。 動的配列を返す関数でも作ろうと思ったけど、結局集合要素に効率的にアクセスする方法が無くて格好悪い
low(c)で最小要素 とかがあればいいんだけど、集合構成子には効かないし
0512デフォルトの名無しさん
05/02/19 14:34:49> フォームで開いた画像の色
0513デフォルトの名無しさん
05/02/19 15:12:46const c=[1,2,5];
var a: set of Byte;
a := c;
i := 0;
while a <> [] do begin
if i in a then begin
// いろいろ
Exclude(a,i);
end;
Inc(i);
end;
こんな感じでどう?
High, Low が集合型に使えれば便利なのに・・・
for item in set do ... 構文は、次のDelphi言語の拡張で実装されますね・・・
0514デフォルトの名無しさん
05/02/19 15:32:07解決しました。ありがとうございました。
0515デフォルトの名無しさん
05/02/19 16:28:42ちょっと違うけど
type
Tc = (c1, c2, c5);
cs = set of Tc;
var
c: Tc;
f: cs;
begin
f := [];//集合
for c := Low(Tc) to High(Tc) do
begin
if c in f then ; //処理する
end;
end;
これではだめかい
0516506
05/02/19 19:05:35ありがとう。 似たような方法でやってたけど、結局>>509に近い方式にしちゃった。
>>515
それはダメなんだ。
実は要素は大きな列挙型で定義されてて、そのうちの何個かの集合を効率良く操作したかったの
0517デフォルトの名無しさん
05/02/21 10:05:57Shift: TShiftState; X, Y: Integer);
begin
MyEdit := TEdit.Create(self);
MyEdit.Parent := self;
MyEdit.BorderStyle := bsnone;
MyEdit.Left := x;
MyEdit.Top := y;
Myedit.SetFocus;
end;
こんな感じでフォーム1をクリックしたときにTEditを表示して
フォーカスを当てるようにしたんですが、
MyEditのonchangeイベントはどのように書けばいいのでしょうか?
0518デフォルトの名無しさん
05/02/21 11:11:10よく分かりません。例えば
type
AClass = class
destructor Destroy;
procedure CleanUp;
end;
AClass.Destroy;
begin
CleanUp;
end;
とした場合
var
instance : AClass;
begin
.
.
instance.CleanUp;
end.
としてはまずいのでしょうか?
0519デフォルトの名無しさん
05/02/21 11:24:01一般的な方法に従っておいたほうがバグを減らせる。(そういう意味で、命名規約にも従いましょう。)
それに、オーバーライドされたデストラクタで解放処理をまとめて行えば、他のオブジェクトに
インスタンスを所有させるなどの処理がやりやすい。
例えば、TObjectListとかに放り込むような処理がやりやすくなる。
0520517
05/02/21 11:27:040521デフォルトの名無しさん
05/02/21 13:47:01もしCleanUpの中でAClassが持つフィールド等の破棄をしているだけなら、
instance自身が格納されているメモリ領域は開放されない。
0522デフォルトの名無しさん
05/02/21 13:57:43Edit1をdestroyしたいんですがどうしたらいいですか?
0523デフォルトの名無しさん
05/02/21 14:33:120524522
05/02/21 21:08:580526デフォルトの名無しさん
05/02/21 22:04:05こうやって入力すると遅くなってしまいます。
皆さんはIntToStrのようにしてますか?
それともinttostrとしてますか?
0527デフォルトの名無しさん
05/02/21 22:09:550528デフォルトの名無しさん
05/02/21 22:28:20他人に見せないなら好きにしたら良い。
>>527
情報不足
0529527
05/02/21 22:44:30implementation
function
procedure
function
↓
procedure
implementation
function
のようにしたいのです。つまりまったく同じ内容の行は1行だけにしたいということです。
0530デフォルトの名無しさん
05/02/21 22:59:14SL: TStringList;
i, j: Integer;
SL := TStringList.Create;
try
SL.LoadFromFile(FileName);
for i := 0 to SL.Count-1 do
for j := i + 1 to SL.Count-1 do
if SL[i] = SL[j] then SL.Delete(j);
SL.SaveToFile(FileName);
finally
SL.Free;
end;
試してないから間違ってるかも
0531デフォルトの名無しさん
05/02/21 23:09:05SHIFTはもう無意識に押してるかんじ。
一回inttostrとやってもなんかスッキリしないから戻って打ち直すし。
0532デフォルトの名無しさん
05/02/21 23:10:08procedure TForm1.Button1Click(Sender: TObject);
var
sl:TStringList;
i,j:integer;
begin
sl := TStringList.Create;
i := 0;
try
sl.Add('procedure');
sl.Add('implementation');
sl.Add('function');
sl.Add('procedure');
sl.Add('function');
while i < sl.Count-1 do
begin
for j := sl.Count-1 downto i+1 do
if sl[j] = sl[i] then sl.Delete(j);
Inc(i);
end;
finally
Memo1.Lines.Assign(sl);
sl.Free;
end;
end;
0533デフォルトの名無しさん
05/02/21 23:11:23全てはコード補完に任せてる。
小文字で intt まで打って補完。
予約語は全部小文字にしてます。
ちなみに then や do の後ろに改行せずに begin を書いています。
0534527
05/02/21 23:34:25ありがとうございます。私が考えついたのは恥ずかしながら以下のようなものでした。
Addしているぶん容量が大きくなると遅いでしょうね。勉強になりましたです。
function DuplicateLineDel(S: string):string;
var
SR,DE: TStringList;
No : Integer;
dmy : string;
begin
if S <> '' then
begin
SR := TStringList.Create;
DE := TStringList.Create;
DE.Text := S;
while DE.Count > 0 do
begin
dmy := DE[0];
DE.Delete(0);
repeat
No := DE.IndexOf(dmy);
if No > -1 then DE.Delete(No);
until No = -1;
SR.Add(dmy);
end;
Result := SR.Text;
SR.Free;
DE.Free;
end;
end;
0535デフォルトの名無しさん
05/02/22 00:06:04chrの反対の動作です
0536デフォルトの名無しさん
05/02/22 00:08:460537デフォルトの名無しさん
05/02/22 00:09:26ord
0540デフォルトの名無しさん
05/02/22 00:19:10ヘルプより
Duplicates プロパティは,ソートされたリストに重複文字列を追加できるかどうかを指定します。
今回のとは機能が違うんじゃないの?
0541デフォルトの名無しさん
05/02/22 00:29:320542539
05/02/22 00:34:12Sorted:=True;
Duplicates:=dupIgnore;
にすれば、重複の判定が要らない分コードがすっきりするかと思ったんだけどね。
おそらく内部的にはバイナリサーチしてそうだから、普通にループ回すよりこっちの方が早いかも。
ソース見てないから断定はできないけど。
0543デフォルトの名無しさん
05/02/22 00:37:43procedure
implementation
function
procedure
function
↓
procedure
implementation
function
0544デフォルトの名無しさん
05/02/22 00:39:58「同じ内容の行は1行だけにしたい」というだけで。
0545デフォルトの名無しさん
05/02/22 00:53:43変えたいのですが、以下のコードでは当然ながらいったん数値が変更されたとき以降で
ないとIncrement値も変更されません(スピンエディタにはOnChangingイヴェントがない)。
何か方法はないでしょうか?
TForm1.SpinEdit1Change(Sender: TObject);
begin
if GetKeyState(VK_SHIFT) >= 0 then // SHIFTキーが押されてないとき
SpinEdit1.Increment := 1
else
SpinEdit1.Increment := 10;
end;
0546デフォルトの名無しさん
05/02/22 00:57:16TSpinEdit.WindowProcをサブクラス化してクリックのタイミングを取得。
0547デフォルトの名無しさん
05/02/22 02:56:24実行速度を測ってみました。Delphi6 in Win2k
ランダムに三桁の数字を発生させて、3万行のテキストファイルをつくりました。
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
sl:TStringList;
begin
Randomize;
sl := TStringList.Create;
for i := 1 to 30000 do
sl.Add(IntToStr(Random(900)+100));
sl.SaveToFile('c:\Test1.txt');
sl.Free;
end;
0548デフォルトの名無しさん
05/02/22 02:57:11procedure TForm1.Button2Click(Sender: TObject);
var
sl:TStringList;
i,j:integer;
start,stop:DWORD;
begin
sl := TStringList.Create;
sl.LoadFromFile('c:\Test1.txt');
Start := GetTickCount;
i := 0;
while i < sl.Count-1 do
begin
for j := sl.Count-1 downto i+1 do
if sl[j] = sl[i] then sl.Delete(j);
Inc(i);
end;
stop := GetTickCount;
Label1.Caption := IntToStr(stop-start);
Label2.Caption := IntToStr(sl.Count);
Memo1.Lines.Assign(sl);
sl.Free;
end;
0549デフォルトの名無しさん
05/02/22 02:58:00procedure TForm1.Button3Click(Sender: TObject);
var
sl1,sl2:TStringList;
i:integer;
start,stop:DWORD;
begin
sl1 := TStringList.Create;
sl1.LoadFromFile('c:\Test1.txt');
Start := GetTickCount;
sl2 := TStringList.Create;
sl2.Sorted := true;
sl2.Duplicates := dupIgnore;
for i := 0 to sl1.Count-1 do sl2.Add(sl1[i]);
stop := GetTickCount;
Label3.Caption := IntToStr(stop-start);
Label4.Caption := IntToStr(sl2.Count);
Memo1.Lines.Assign(sl2);
sl1.Free;
sl2.Free;
end;
0550デフォルトの名無しさん
05/02/22 02:58:40何度か実行させると値がばらつくものの、542の方法が532の方法より30倍以上
速いです。ソート+バイナリサーチの威力が分かりました。
0551デフォルトの名無しさん
05/02/22 07:29:42what? what? (w
やはり難しいのですね。
0552518
05/02/22 09:36:42>>521
レス、どうもです。つまり、デストラクタはDestroyという名前にして必ず仮想メソッドとする
そして動的に割り当てたインスタンスを破棄するにはdisposeではなくfreeを使う
という理解でよいですか?
0553デフォルトの名無しさん
05/02/22 10:09:23ある文字列「---,--,----,----」から、例えば2つめと3つめのコンマで
囲まれた文字列を取り出すにはどうしたらよいですか。
各コンマで囲まれている文字数は決まっていません。
0554デフォルトの名無しさん
05/02/22 10:28:340555デフォルトの名無しさん
05/02/22 10:36:20> そして動的に割り当てたインスタンスを破棄するにはdisposeではなくfreeを使う
dispose は動的にメモリを割り当てられた型付ポインタのメモリを開放する
インスタンスの破棄とはそもそも無関係。
仮想メソッドでない TObject.Free をよぶことによって、仮想メソッドである
Destroy が下位クラスの実装から順に多態的に呼ばれることが保証できる。
0556デフォルトの名無しさん
05/02/22 11:26:09TStrings.LoadFromFileのリファレンスにこうありますが
では、Addメソッドで一行ずつファイルから読み込む事はできないのですか?
0557デフォルトの名無しさん
05/02/22 11:32:26TStringsを二つ用意して、一つ目で全体読み込んで、
二つ目ので、一つ目のaddしたい行をaddすればいいんじゃないの。
//stra , strb : TStrings;
stla.add( strb[3] );
みたいに。
あと、TStringsは抽象クラスだから、実際にはTStringListを使うことになるんだけど。
0558デフォルトの名無しさん
05/02/22 11:38:20なるほど思いつきませんでした
もしかしてReadlnってのがこういう用途に使えるんですかね
0559デフォルトの名無しさん
05/02/22 11:42:050560デフォルトの名無しさん
05/02/22 12:54:05区切り文字がカンマじゃなかったらStringReplaceで置換すればいいし
0561デフォルトの名無しさん
05/02/22 13:06:350562553
05/02/22 13:08:41テキストファイルに、単語、品詞名、意味、例文の順に書いておいて、
例えば、エディタ1に単語を入力したらエディタ2に意味を出力する様に
したいんですが、どうしたらよいでしょうか。
エディタ1に入力した単語をテキストファイルから検索し、あったら
その行の2つめと3つめのコンマにはさまれた文をエディタ2に表示する。
こういう流れだと思いますが、プログラムはどうなるでしょうか。
0563デフォルトの名無しさん
05/02/22 13:22:54で、どの部分が分からないの?
0564名無し募集中。。。
05/02/22 13:26:16sLineList := TStringList.Create;
sDataList:= TStringList.Create;
try
sLineList.LoadFromFile(テキストファイル名);
for i := 0 to sLineList.count -1 do
begin
sDataList.clear;
sData := sLineList.Strings[i];
sDataList.commatext := sData;
if AnsiCompareStr(sDataList.Strings[0], 単語名) = 0 then
begin
hinsi := sDataList.strings[1];
imi := sDataList.Strings[2];
reibun := sDataList.Strings[3];
break;
end
end;
finally
sLineList.Free;
sDataList.Free;
end;
0565553
05/02/22 14:10:27ありがとうございます。
やってみます。
0566デフォルトの名無しさん
05/02/22 14:17:01DataSource1.Dataset.Deleteをループさせてやってみたら、カウンタ型が
初期化(?)されず、続き数字になってしまいます。
0567デフォルトの名無しさん
05/02/22 15:01:19ただし空白やダブルクォートを含んでいると思わぬ結果になる事があるので注意。
0568デフォルトの名無しさん
05/02/22 15:01:51SQL文発行した方が体に良さそうだと思う
0569デフォルトの名無しさん
05/02/22 15:09:50””でくくればその中にカンマがあろうと半角スペースがあろうと
全角スペースがあろうと問題ないよ
でも”があるとそこで切れるので”はStringReplaceで置換するしかない
0570デフォルトの名無しさん
05/02/22 17:40:47"は二つ続けて""とすればよい。
0571デフォルトの名無しさん
05/02/22 17:46:02グリッド毎にスクロールバーを表示したくありません。
グリッド3つを同時に横スクロールしたいのです。
スクロールバー内に3つ並べてみたのですが、画面外のセルにフォーカスを移動しても移動しません。
何かコーディングが必要なのでしょうか?
0572デフォルトの名無しさん
05/02/22 17:55:13procedure TForm1.StringGrid1TopLeftChanged(Sender: TObject);
begin
StringGrid2.TopRow:=StringGrid1.TopRow;
StringGrid2.LeftCol:=StringGrid1.LeftCol;
end;
0573デフォルトの名無しさん
05/02/22 19:03:16ソートしないときもっといい方法はないんだろうか?
0574デフォルトの名無しさん
05/02/22 19:36:060575デフォルトの名無しさん
05/02/22 19:58:100576デフォルトの名無しさん
05/02/22 20:03:450578デフォルトの名無しさん
05/02/22 20:42:28重複を取り除くだけなら辞書順に並ぶ必要は無いから、ハッシュ値でソート&二分探索すれば、
大量の文字列比較処理を単なる整数比較に置き換えられて高速化できる。
0579デフォルトの名無しさん
05/02/22 21:21:170580デフォルトの名無しさん
05/02/22 22:21:21>>549 と比較してみてよ。データ処理時間も考慮して。
0581デフォルトの名無しさん
05/02/22 22:30:38で、それを使った処理速度比較plz
0582デフォルトの名無しさん
05/02/22 22:52:020583デフォルトの名無しさん
05/02/22 22:56:250584デフォルトの名無しさん
05/02/22 23:11:370585デフォルトの名無しさん
05/02/23 01:48:31http://www.42ch.net/UploaderSmall/source/1109090682.lzh
ほらよ、でかくなったからアップロードしといた。
ハッシュと二分木使えば、出来合いのライブラリより10倍以上軽く高速化できるぞ。
単純二分木をバランス木にすれば、さらに倍速くらいいけるんじゃないかな?
つーか、パスカルプログラマなら
「アルゴリズム+データ構造=プログラム」
って言葉くらい聞いた事あるよな?
0586デフォルトの名無しさん
05/02/23 07:28:22お疲れ様。 さらに早くするには、ハッシュを添字に行番号配列を持った配列を作る事かな。
データ数が2倍になる都度、配列サイズも2倍にして作り直すと
0587デフォルトの名無しさん
05/02/23 14:06:45新しいファイルを作らないと駄目でしょうか?
0588デフォルトの名無しさん
05/02/23 14:33:270589デフォルトの名無しさん
05/02/23 15:01:30テーブルのリサイズ・データの挿入のコストは無視ですか。
扱うデータの種類によるけど英単語の重複程度のチェックなら
出てくる単語の種類は高々数万(手持ちのspell.dicは52,000個)。
サイズ決め打ちのハッシュテーブルに突っ込めば十分。
にしても今時ツリーだのハッシュだのを手書きする
OOPLはDelphiくらいのもんだな。
0590デフォルトの名無しさん
05/02/23 15:50:170591デフォルトの名無しさん
05/02/23 16:59:50http://forum.nifty.com/fdelphi/faq/00074.htm
これには別ドライブへの移動は不可とありましたが、
試してみたらできました。。この情報が古いからでしょうか?
問題なく動作はするのですが、ちょっと不安なので質問させてもらいます。。
当方Delphi6です。。
0592デフォルトの名無しさん
05/02/23 19:50:420593デフォルトの名無しさん
05/02/23 19:53:24D7だと、RenameFileは内部でMoveFile APIを呼び出してる。
MoveFileは別ドライブでも可らしい。だから情報が古いのではないかと。
>>592
標準ではないと思う。
0594デフォルトの名無しさん
05/02/23 20:02:53Delphi6ではコード整形プラグインのDelForExを愛用していたのですが、
Delphi2005でも使えるでしょうか??
もしくは、Delphi2005開発環境中から簡単に呼び出せるコード整形ツールは存在するでしょうか。
0595594
05/02/23 20:05:42DelForExpの配布元を改めてよく見てみたら対応したと出ていました。
スレ汚し失礼しました。
0596デフォルトの名無しさん
05/02/23 20:29:16var
H : HWND;
-------------------------------------------
begin
H:=FindWindow('notepad',nil);
↑↑↑↑メモ帳の場合↑↑
H:=FindWindow('IEFrame',nil);
↑↑↑↑インターネットエクスプローラーの場合
なぜiexploreじゃなくてIEFrameなんですか?
H:=FindWindow('XXXXXXXXX',nil);の中の
'XXXXXXXXX'はどのようにして決められるんですか?
0597デフォルトの名無しさん
05/02/23 20:42:48決めるのは作ったプログラマ自身
0598デフォルトの名無しさん
05/02/23 21:36:56>にしても今時ツリーだのハッシュだのを手書きする
>OOPLはDelphiくらいのもんだな。
べつにC++とかやってても、一般的でないデータ扱うときはツリーくらい書くけどなぁ…
ハッシュ関数だって、イレギュラーな偏りのあるデータとかなら自分で書いた方が高速化できるし。
なんでもかんでもライブラリに隠蔽されたおかげで、どのような場面でどのようなアルゴリズムを
使えばよいか解らない奴がワンサカいるし。
C#なんか勉強する前にヴィルト先生(できればクヌース先生)の本でも嫁、と言いたい。
0599デフォルトの名無しさん
05/02/23 22:15:200600デフォルトの名無しさん
05/02/23 22:48:07使いたいのですが、
どのパネルからポップアップさせたかを知るにはどうすればいいですか?
0601デフォルトの名無しさん
05/02/23 22:50:45おまえが4ね
0602デフォルトの名無しさん
05/02/23 22:52:150603600
05/02/23 22:56:03これはどこに書くのですか?
OnPopupに書いたら駄目でした。
0604デフォルトの名無しさん
05/02/23 22:57:320605600
05/02/23 23:11:45騙しレスかよ!!!!
初心者騙して釣っておもしろいですか?
もういいです。帰ります。
0606デフォルトの名無しさん
05/02/23 23:40:030607デフォルトの名無しさん
05/02/23 23:41:28TPanelのOnContextMenu辺りにでも書いとけばいいんじゃね
もちろん、そのOnContextMenuはPopupつけてるコントロールで共有
0608デフォルトの名無しさん
05/02/23 23:44:180609デフォルトの名無しさん
05/02/23 23:47:20begin
Label1.Caption := PopupMenu1.PopupComponent.Name;
end;
だから
if PopupMenu1.PopupComponent = Panel1 then
とかでOK
0611デフォルトの名無しさん
05/02/23 23:49:27質問した場所をわきまえて・・・逆ギレは見苦しい。
ちゃんとした回答が欲しければそれなりのところへどうぞ
0612600
05/02/23 23:54:25いろんな方法があるのですね。
>>607さんのがカコイイと思うのでこれでやります。
0613デフォルトの名無しさん
05/02/23 23:55:35Senderはasで確認したほうがいい
if (Sender as TPopupMenu).Name = Panel1 thenとか
0614デフォルトの名無しさん
05/02/23 23:58:56まさか「トリップって何?」って人はいないよね?
0615デフォルトの名無しさん
05/02/24 00:13:19なに滅茶苦茶いってるの? TPoupuMenu の名前に Panel1 とか付けるアフォ発見
0616デフォルトの名無しさん
05/02/24 00:14:090617デフォルトの名無しさん
05/02/24 00:15:16どこが違うの?
0618デフォルトの名無しさん
05/02/24 00:16:19ヘルプより
PopupComponent プロパティは,右クリックに応答して最後にポップアップメニューを表示したコンポーネントを示します。
これを使わないのは変
0619デフォルトの名無しさん
05/02/24 00:19:44Name プロパティーは string 型だろ。どうやって = Panel1 とかの
インスタンス変数と比較できるわけ?
0620デフォルトの名無しさん
05/02/24 00:22:16えらそうにレスなんかつけるなよ
0621デフォルトの名無しさん
05/02/24 00:25:090623デフォルトの名無しさん
05/02/24 01:09:37これってどうしたらええんでしょう?
ソースの部分は
>Edit1.Text:=inttostr(timeGettime-tm);//かかった時間の計算
なんですけれども。
一応実行して普通に動いてるのだけれども不安で・・・
0624デフォルトの名無しさん
05/02/24 01:14:19timeGettimeとtmの型が合っていない
宣言を見てみ
0625デフォルトの名無しさん
05/02/24 01:56:03そっちにあわせなきゃだめだね
0626デフォルトの名無しさん
05/02/24 01:59:56思いっきりFAQな気がしますがぐぐってもそれらしい情報が見付かりませんでした。
もし既出ならご容赦ください。
0627デフォルトの名無しさん
05/02/24 02:01:43ソースをbccでビルドしてobjをリンクすることは可能
0628デフォルトの名無しさん
05/02/24 02:06:25お答えありがとうございました。
0629デフォルトの名無しさん
05/02/24 02:11:18BCCは無料で使えるよ
0630デフォルトの名無しさん
05/02/24 02:12:38http://pc5.2ch.net/test/read.cgi/tech/1091066805/l50
0631デフォルトの名無しさん
05/02/24 08:21:39THoge=1..50;
THoges=set of THoge;
var
Hoge:THoges;
begin
Hoge:=$000001;
とかやると怒られます。
0632デフォルトの名無しさん
05/02/24 08:52:210633デフォルトの名無しさん
05/02/24 09:57:47さんくす。
ついでにお願いします。集合型の値を表示したいのですが、
THoge=1..12;
THoges=set of THoge;
var
Hoge:THoges;
begin
Hoge:=[];
Include(Hoge,2);
ShowMessage(IntToStr(Word(Hoge)));
これは表示されますが、THoge=1..50とかにすると、THogesのサイズが7バイトになり
正しくない型キャストと怒られます。こういう場合はどうすればよかですか?
0634デフォルトの名無しさん
05/02/24 10:17:51>これは表示されます
とありますが、集合型として表示されているわけではないですね?
0635デフォルトの名無しさん
05/02/24 10:21:28Integer 4 バイトに収まるまではごまかしが効きます。4 バイト = 32 要素を
超えた場合はごまかせません。
集合型の内部表現は 32 byte までありうるので、32個の byte 型フィールドを
持つ Packed array を用意するのがひとつの手でしょう。
そもそも何をしたいのですか?
0636633
05/02/24 10:45:30単に現在の値を目で見たかっただけですが、
他にもINIファイルへの保存などで整数型にキャストしWriteIntegerで書き込みたいのです。
0637デフォルトの名無しさん
05/02/24 10:57:21そのBitMapの色情報(色数と色とかです)はどうやって、
所得するんですか?
0638デフォルトの名無しさん
05/02/24 11:49:29Image1.Picture.Bitmap.PixelFormat
Image1.Picture.Bitmap.Canvas.Pixels[X,Y]
Image1.Picture.Bitmap.Scanline[Row]
0639デフォルトの名無しさん
05/02/24 15:53:53直接は無理なので集合型変数をメモリの塊として処理する。
# そもそもサイズが合わない可能性があるからIntegerとの変換は無理
ms := TMemoryStream.Create;
ini := TInifile.Create(ParamStr(0)+'.ini');
ms.Write(Hoge, SizeOf(Hoge));
ini.WriteBinaryStream('Sec', 'Hoge', ms);
またはBinToHex, HexToBinで文字列に変換する。
var s: String;
SetLength(s, SizeOf(Hoge));
BinToHex(@Hoge, PChar(s), SizeOf(a));
0640デフォルトの名無しさん
05/02/24 18:13:00そのまま渡しても大丈夫でしょうか?
例えば、呼び出し側のFormのインスタンスをもらい、
Captionを変更する以下の処理は問題ありでしょうか?
// 呼び出し側
procedure TForm1.Hoge;
begin
(略)
ChangeCaption(Self);
end;
// DLL側
procedure ChangeCapton(Form: TForm);
begin
Form.Caption:= 'Hoge';
end;
0641デフォルトの名無しさん
05/02/24 18:23:580642デフォルトの名無しさん
05/02/24 19:48:19同一プロセス内で動いてる以上無問題
0643640
05/02/24 20:03:37レスありがとうございます。
しかし、出来ればDLL内に直接処理を書きたかったので…。
>>642
レスありがとうございます。
そうなんですか、良かった…。
TFormにはString型のPropertyがテンコ盛りということで、注意書きの
「構造体やクラスに埋め込まれている場合も含め String 型を DLL と…」
の「埋め込まれている場合」に抵触していないか心配だったのです。
0644デフォルトの名無しさん
05/02/24 20:27:03String型は使えない
char型使え
>>642
初心者に嘘教えるなよw
0645デフォルトの名無しさん
05/02/24 21:12:140646デフォルトの名無しさん
05/02/24 21:37:15Delphiアプリ専用DLL?
0647デフォルトの名無しさん
05/02/24 22:15:16TBitmap の ScanLine に対応するものとして char 型の二次元配列を考えています。
引数や戻り値で P: PByteArray と char ** c が対応するという理解で良いですか?
0648デフォルトの名無しさん
05/02/24 22:18:100649デフォルトの名無しさん
05/02/24 23:18:23一般に共通のパッケージを使う以外で、クラスのインスタンスをDLLとやりとりする
ことはできません。同じバージョン、同じパソコン内のDelphiで、別々にコンパイルさ
れたDLL内のインスタンスのVMTとEXE内のインスタンスのVMTは同一ではありません。
0650デフォルトの名無しさん
05/02/25 01:03:56> 16 ビット Unicode 文字から成る
なのでUCS-2ですよね?
UTF-8をWideStringに変換したら表現できない文字もあるって認識でOKですか?
0651デフォルトの名無しさん
05/02/25 01:31:02半分合ってて半分合ってない。
ポインタのポインタを単純に二次元配列と同等としか解説していないサイトが多いけど、
そう単純じゃない。
おまいさんの使い方の場合、y行分の各ポインタを渡してやりたいんだろうから、
今日日の32bitポインタの場合、4バイト*yバイトのメモリ領域をallocmemとかで用意して、
そこに各ポインタを入れて、先頭のポインタ(アドレス)をdllで渡してやることになる。
つまるところ、C側は、char*でもint*でもポインタなら何でも良い。
どうせキャストするだろうし。
一般的に、DLLでデータをやりとりする際、ポインタのポインタを引数とする関数を
externalするようなわかりにくいことはしないよ。
0652651
05/02/25 02:39:48まあ、ポインタなら間違いじゃないよ。
0653デフォルトの名無しさん
05/02/25 02:41:34a,b,c:integer;
と、宣言した上で、a,b にいろいろ値を入れた後、
c:=trunc(a/b);
を実行すると、たまに不正な小数点演算 というエラーが出ます。
宣言を
var
a,b,c:integer;
d,e:double;
として、
d:=a;
e:=b;
c:=trunc(d/e);
とすると、特にエラーが出ません。
Delphi7 です。何ですかね、これ。
0654デフォルトの名無しさん
05/02/25 03:27:36何かの拍子に、bに0が入っているっぽいような。
truncの直前に、
assert(b <> 0 , '0除算');
を付け加えても、assertにひっかからずにエラーでる?
0655デフォルトの名無しさん
05/02/25 05:01:160657デフォルトの名無しさん
05/02/25 07:46:10一応、resultがint64の範囲外の時は例外を出すと
ヘルプに書いてあるが、今回は関係なさそうだね
0659名無し募集中。。。
05/02/25 10:56:15integerは整数型だから除算はdiv、/は浮動小数点除算に使う
そこらへんが怪しいと
0660653
05/02/25 11:19:08結局例外の原因となっていたのはこういう処理でした。
var
a:integer;
b:double;
f:double;
begin
a:=50000;
b:=a;
f:=sqr(a); //OK
f:=sqr(b); //OK
f:=sqrt(sqr(a)); //NG
f:=sqrt(sqr(b)); //OK
f:=sqrt(a*a); //NG
f:=sqrt(b*b); //OK
end;
計算部分でNGとあるものが、例外の発生するものです。
50000を2乗するとintegerの桁を超えるのが原因のようです。
ただ不思議なのは、Double型に代入する
f:=sqr(a);
には問題が無く、Double型を引数とすると思っていたsqrt関数で
f:=sqrt(sqr(a));
で例外が発生するのは、単にsqrtにintegerで受け取るoverload関数があったと言う事でしょうか・・。
お手数かけました。すいませんどうも。
0661653
05/02/25 11:25:42f:=sqr(a); の結果は、桁が溢れた -1794967296 でした。
負の数でsqrtしたら例外が出て当然ですね。
本当にご迷惑かけまして、すみません・・。
0662653
05/02/25 11:37:51var
a:integer;
f:double;
begin
a:=50000;
f:=sqr(a);
end;
これにより、f=-1794967296になるのは、sqrに
function Sqr(X: Integer): Integer;
というoverload関数があるから桁あふれしたのだと納得したつもりだったのですが、
f:=a*a;
としても、f=-1794967296 になってしまうのはなぜなんでしょう・・。
a*aの演算時は、結果をaと同じintegerに格納し、それからDouble型に直してfに入れるという事でしょうか・・。
一部でも大きな桁になる可能性のある計算式には整数型の変数を使ってはいけないという教訓ですかね。
失礼しました・・。
0663デフォルトの名無しさん
05/02/25 11:37:58|
∩
∪
__
/ /|
| ̄ ̄|/
 ̄ ̄
>>661
スレのみんなで君の晴れ舞台を用意したよ。
0664デフォルトの名無しさん
05/02/25 12:51:450665デフォルトの名無しさん
05/02/25 13:00:42TListViewにてViewStyleをvsReportにてした場合でも
アイコンを表示する方法はありますでしょう?
0666デフォルトの名無しさん
05/02/25 15:46:16SmallImagesに小さいアイコンを入れたTImageListを設定する
0667デフォルトの名無しさん
05/02/25 16:04:55データ形式が特殊な為時間がかかり困っています。
頭2桁がアルファベット、そこから下2桁が12進数(10→A,11→B,12→C)の品種データがあり、
その品種名とデータをエクセルに順番にコピーするのですが、品種が順番に並んでいないので
今はエクセルのセルに総当たり戦で並べ替えています。
データベースにめちゃくちゃな順番で品種が入っているのでどうしても総当たり戦をせざるを得ず、
そうすると、膨大な時間がかかってしまっています。
ローカルにデータベースを作ってそこにデータをコピーして並べ替えられればベストだと思うのですが、
このような特殊なデータフォーマットの並べ替えに対応しているデータベースはありますでしょうか?
また、良い方法がありましたら教えてください。
0668デフォルトの名無しさん
05/02/25 16:10:20Oracleから取り出すときにソートすれば?
0669デフォルトの名無しさん
05/02/25 16:42:406番目7番目の文字が欲しい場合はどのようにすればいいでしょうか?
0670デフォルトの名無しさん
05/02/25 16:45:52honya(Sender).Name[6] + honya(Sender).Name[7] ででました。
0671デフォルトの名無しさん
05/02/25 17:05:150672デフォルトの名無しさん
05/02/25 18:32:05三文字以上とかになると激しくアレだから671がお勧め
0673デフォルトの名無しさん
05/02/25 18:51:28確かにUTF-8ではUCS-4に含まれる文字もエンコードできるから、UTF-8からUTF-16だと
欠落する文字が皆無とは言えない。
でも、現実にはWindows上でUCS-4にしか含まれない文字なんてほとんど使われないし、
サロゲートペアで多少は回避できるので、気にしなくてOKだと思いまつ。
0674デフォルトの名無しさん
05/02/25 18:53:31GExperts ?
0675デフォルトの名無しさん
05/02/25 19:02:23代替手段等あれば教えてください
0676デフォルトの名無しさん
05/02/25 19:09:47最近のこの質問多いね
0677デフォルトの名無しさん
05/02/25 19:18:420678デフォルトの名無しさん
05/02/25 19:20:58DMemo: array[0..9]of TMemo;
for i := 0 to 9 do
DMemo[i] := TMemo.Create;
後は好きなように・・・・
0679デフォルトの名無しさん
05/02/25 22:19:45おお、すごいすっきりしました。
ありがとうございました。
0680デフォルトの名無しさん
05/02/25 22:32:400681デフォルトの名無しさん
05/02/25 23:36:09TQueryをレポートを呼び出すフォーム側とQuickRep側のどちらかに貼らなかった場合に
エラーが起きる等の話を聞いたことがありませんか?
あるシステムを開発していて、大量の帳票を作成したのですが、
いくつかの帳票でうまく出力されないエラーが起きています。
聞いたことがある方、ご存知の方がいましたら教えてください。
Delphi6使用です。
よろしくお願いします。
0682デフォルトの名無しさん
05/02/26 01:47:54ぐぐってみてもBDEだのDAOだのODBCだので、どれを使っていいのか分かりませんし...。
どこかに詳しく解説されているサイトとかありませんか?
0683デフォルトの名無しさん
05/02/26 02:37:180684デフォルトの名無しさん
05/02/26 03:24:20TListじゃだめか?C言語のqsortみたいに自分で比較関数を定義できるのだけど。
メモリやHDにデータを読み込んで、それをTListで並べ替え。
0685664
05/02/26 04:30:10やっとの事で自己解決しました。
gexpertsでした。
0686デフォルトの名無しさん
05/02/26 04:34:38ありがとうございました。
レスに気がつかずに必死で調べていました。
無視してすみませんでした。おやすみなさい。
0687デフォルトの名無しさん
05/02/26 11:22:39上記のJmEditorで使っているようなスピンエディタはどこかで公開されてないかな?
Delphian World にはないみたいだ。
0688デフォルトの名無しさん
05/02/26 14:46:31トップページにソース公開されてるよ。自作コンポみたい。
0689デフォルトの名無しさん
05/02/27 01:34:18教えてくださいませ。 orz
0690デフォルトの名無しさん
05/02/27 07:21:17よく使いますか? アプリとコンポではかなり違うと思いますが。
0691デフォルトの名無しさん
05/02/27 10:04:58繋がらないんですが('A`)
0692ミ,,゚Д゚彡 ◆A6VzDeLphI
05/02/27 11:32:09使うのは複数行コメントアウトの時や
他のコード見ながら入力するときのソース閲覧として使います。
>>691 うちからも。
0693デフォルトの名無しさん
05/02/27 14:24:091回目は成功するのですが、2回目以降は�@の部分でプログラムが固まります。
何がいけないのでしょうか?
nh:=TNMHTTP.Create(Application); ・・・・�@
try
nh.InputFileMode:=False;
nh.Get(Url);
finally
nh.Free;
end;
0694デフォルトの名無しさん
05/02/27 15:59:31知るだけならパフォーマンスカウンタで良いんじゃない?
0695デフォルトの名無しさん
05/02/27 16:53:50IDEはオートインデントとかマクロが弱いから、ちと不満。
0696デフォルトの名無しさん
05/02/27 18:16:450697デフォルトの名無しさん
05/02/27 18:39:56MinIntValue MinValue 関数を発見したのですが、使い方がわかりません。 これはどのように使えばいいのでしょうか?
また一番近い数を取り出す良い方法がしってましたら教えてください。 現状はこんな感じなのです・・・。
procedure TForm1.Button1Click(Sender: TObject);
var
a : array [0..3]of Integer;
b : array [0..3]of Integer;
i,j,u,min : Integer;
begin
u := 30;
a[0] := 10;
a[1] := 33;
for i := Low(a) to high(a) do
begin
b[i] := a[i] - u ;
if b[i] < 0 then
begin
b[i] := b[i]*-1;
end;
end;
min := b[j];
for j := Low(b) to High(b) do
begin
if min > b[j] then
begin
min := b[j];
end;
end;
Memo1.Lines.Add(IntToStr(min));
end;
0698デフォルトの名無しさん
05/02/27 18:42:050699デフォルトの名無しさん
05/02/27 18:55:40たとえば
99 100 101
とあって、100に一番近い数字はどれにしたいのか。
仕様を明確にすべし。
0700デフォルトの名無しさん
05/02/27 22:04:48レスありがとうございます。
u:Integer 値が100の時、 配列がaの要素 99 100 101 の中で一番近いのはどれか? です。
何に使うかといいますと、ビットマップの1ピクセルの色の置換えになります。
ご教授おねがいします。
0701デフォルトの名無しさん
05/02/27 22:16:07減色でもするの?高品位の減色は難しいよ。
http://www.cmagazine.jp/
ちょうど最新号のCマガが減色特集をしてますよ。
0702デフォルトの名無しさん
05/02/27 22:28:43MinIntValue(b); 単にこれで出てきました。
しかしながら何番目の要素なのかは分からないんですね。
んー、いい方法ないかなあ。
>>701
ありがとうございます。
簡易的なものを作ろうと思って、その本を
今日、近所の本屋に行ったのですが、田舎なのか売ってなかったです。^^;
注文したほうがよさそうですね。
0704デフォルトの名無しさん
05/02/27 22:55:22漏れ、減色ソフトつくってるんだけど、あの記事はなんだかなあ、とか思ったり。
R>=G>=B
って本当なんかな。
0705デフォルトの名無しさん
05/02/27 23:02:19DelphiやMySQLのバージョン。エディションが不明だが
速いのはdbExpress。手軽さはMyODBC
0706デフォルトの名無しさん
05/02/27 23:15:420707デフォルトの名無しさん
05/02/27 23:50:57G>R>B です。
2箇所書いてあったから誤植じゃないっぽいなあとぽかーんしますた。
内容も今までに何度か出てきていたメディアンカットの記事に毛がはえた程度だったし・・・。
0709デフォルトの名無しさん
05/02/28 01:35:41著者が理解してなくて資料片手に原稿書いたと思われ
0710デフォルトの名無しさん
05/02/28 02:07:37名前でぐぐると、一応、画像処理のシェアウェア作者らしいんだけどな・・・
0711ミ,,゚Д゚彡 ◆A6VzDeLphI
05/02/28 02:53:55生暖かい目で生易しく見守ってあげたり指摘してあげたら、
素敵な人になれるのではないかしら。
0712デフォルトの名無しさん
05/02/28 14:47:14まあ一般的にはそうなんだけど、Cマガはそういうの大杉。
「オリジナルOSを作ろう!」という特集なのに肝心のOSがなかったりとか。
ところで、>>697は a[2], a[3] の初期化をどこでやっているんだろう?
0713デフォルトの名無しさん
05/02/28 17:19:340714デフォルトの名無しさん
05/02/28 22:20:27showmessage('なんで?');
なんで'|'が'ポ'に含まれてるのですか?
0715デフォルトの名無しさん
05/02/28 22:29:49'ポ'=83 7C
ShiftJISだからと思うよ
0716デフォルトの名無しさん
05/02/28 22:31:58| は 7C
ポ は 837C
0717デフォルトの名無しさん
05/02/28 22:53:270718714
05/02/28 23:12:120719デフォルトの名無しさん
05/02/28 23:14:510720デフォルトの名無しさん
05/02/28 23:19:08吹き出した
0721デフォルトの名無しさん
05/03/01 01:19:26必ずAnsiPosを使った方がいいのですか?
Posより遅くなりますか?
0722デフォルトの名無しさん
05/03/01 02:36:460723デフォルトの名無しさん
05/03/01 03:06:19画像関係は数式だけ何処かから持ってくれば
なぜそうなるか理解してなくても
それなりに動作するものが作れるから
0724デフォルトの名無しさん
05/03/01 08:33:05Cマガで画像処理関連の連載を長いことやってた人だよ。
0725デフォルトの名無しさん
05/03/01 10:14:310726デフォルトの名無しさん
05/03/01 11:32:08a : array[0..5];
a := (1,2,3,4,5,6);
0727デフォルトの名無しさん
05/03/01 11:50:33同じ型同士なら代入互換性があるから
定義時に初期値をいれておいて代入したら?
同じ型でなければいけないよ。
0728デフォルトの名無しさん
05/03/01 14:31:32印刷プログラムを作るには、QuickReportを使用する
のが無難ですか?
大量に印刷するんで速度も重視したいんですが・・・
0729デフォルトの名無しさん
05/03/01 16:19:28無難。
0730デフォルトの名無しさん
05/03/01 18:32:591つのアクションを複数のメニューから実行できるようにしておいて、
実行時に選択されたメニューによって動作を変えたいときは
どうすれば良いでしょうか。
Senderにはアクション自身が入っていてちょっとがっかり。。
0731デフォルトの名無しさん
05/03/01 18:45:05TMenuItemのActionはカラにしといて、
OnClickにTActionのOnExecuteを直接指定してみては?
それならSenderにはTMenuItemが入っているはず
0732デフォルトの名無しさん
05/03/01 18:52:19ある程度の融通利かせたいならこれとか。
http://www.borland.co.jp/dbase/pt32up.html
0733デフォルトの名無しさん
05/03/01 19:25:02このDLLはいわゆる入出力プラグインと呼ばれる物で、DLL経由でデータの入力/出力を行います。
DelphiからDLLへデータを渡す場合(Export)はDelphiでGetMemしたポインタを渡して処理が実現できているんですが、
そもそもこれがうまくいくのがよくわかりません。
DLLは呼び出し側とメモリ空間は共通なんでしょうか?
でも逆にDLL側で確保したメモリを呼び出し側(Delphi)で参照するとアクセス違反が起きます(これは納得)。
(普通、メモリ共有はCreateFileMapping()を利用すると思うのですが、
これは面倒なので他の手段を試しているんです)
0734デフォルトの名無しさん
05/03/01 19:33:4532ビットアプリなら、DLLとアプリは同じメモリ空間。
DLL側でどうやって確保してるの?
0735733
05/03/01 19:39:06> 32ビットアプリなら、DLLとアプリは同じメモリ空間。
あ、そうなんですか?
それなら話は早いですね。
DLL側ではGlobalAlloc()で確保してます。
Delphi側でGlobalFree()で破棄してるんですがこれがまずいんでしょうか?
0736デフォルトの名無しさん
05/03/01 19:59:54それで問題無いと思うよ。
同じ事をDLLでなくDelphi側で試験コード作ってやってみたら?
それで問題無いなら、たぶんDLLの呼び出し時のミスだと思うよ。
cdeclとかの呼び出し規則のミスか 構造体のアライメントのミスか
0737デフォルトの名無しさん
05/03/01 20:03:51ありがとう。それだとActionじゃなくて普通の関数でいいですよねえ。
ん〜Actionは単純な場合しか使えないのかな。
0738735
05/03/01 20:16:48DLL側でGlobalAlloc(GMEM_FIXED, ...);として確保してましたが、
確保してない領域にアクセスしていたようです(あいたた)。
これで何とか入力/出力がDLLで実装出来ました。
ありがとうございました。
0739デフォルトの名無しさん
05/03/01 21:30:100740デフォルトの名無しさん
05/03/01 23:14:55ヘルプには
>デバッグサーバーをデバッグ対象環境にインストールするには,
>CD-ROM の RDEBUG ディレクトリにある setup.exe を実行してください
と書いてありますけどどこにもない。Delphi6 Professional使用
0741デフォルトの名無しさん
05/03/02 00:45:15リモートデバッグはEnt版の機能じゃないか?
0742デフォルトの名無しさん
05/03/02 01:19:58(10022)[API'WSACancelASyncRequest']
って出たんですが、これ、何が原因ですか?解決法を教えてくださいぃ!
0743デフォルトの名無しさん
05/03/02 09:23:14DBがSQLServerなんで、QuickReportになりそうです。
あんまり融通利かないんですか・・・
ありがとうございました。
0744デフォルトの名無しさん
05/03/02 10:30:480745デフォルトの名無しさん
05/03/02 12:39:290746デフォルトの名無しさん
05/03/02 14:09:39どのようにすればよいのでしょうか?
例えばIniファイルにhoge=Hello#13#10Delphiなどと書いて
ReadString(Section, 'hoge', '')とやると改行されず
Hello#13#10Delphiがそのまま取得してしまいます。
「改行を含むデータなんてIniファイルで取得する必要ないだろ!」
という意見はごもっともですが、ご存知の方がいましたらお教え下さい。
0747746
05/03/02 14:39:49ReadStringは改行を読み込めないみたいなので
sData := IniFile.ReadString(Section, Ident, '');
sData := StringReplace(sData, '\n', #13#10, [rfReplaceAll]);
とやって置換することで対応しました
0748デフォルトの名無しさん
05/03/02 14:47:58'#13#10' はたんなる文字列だから・・・そのまま取得されないとむしろ大変だろ
0749デフォルトの名無しさん
05/03/02 15:39:46なら、もとのままでもOKだよ(笑
0750デフォルトの名無しさん
05/03/02 16:32:14VBだったらfor each使えばすぐに出来るのですが、delphiでのやりかたが分からないので教えてください。
0751デフォルトの名無しさん
05/03/02 17:35:00%B1%EE%A4%C7%A4%E2%A4%EF%A4%AB%A4%EBDelphi6
%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB%A1%C1
OpenJane%A5%B3%A5%F3%A5%D1%A5%A4%A5%EB
猿でもわかるDelphi6インストール〜OpenJaneコンパイル
の通り、環境を整えたのはいいものの、
「[致命的エラー] Main.pas(13): ユニット IdGlobal は異なるバージョン
System.RTLVersion によりコンパイルされています」
とででコンパイル出来ません。
どなたかご教授ください。
0752デフォルトの名無しさん
05/03/02 18:50:23"Delphi FindFirstFile"でぐぐりなさい。
0753デフォルトの名無しさん
05/03/02 19:03:40for each使うやり方を晒せば移植してあげるよ
0754デフォルトの名無しさん
05/03/02 19:44:30Delphi FindFirst だと思うけど。FindFirstFile はAPI
0755デフォルトの名無しさん
05/03/02 20:08:05似たようなレスを発見。
2chBrowser OpenJane@Win板 Part18
http://pc5.2ch.net/test/read.cgi/win/1099264661/111-
0756デフォルトの名無しさん
05/03/02 21:08:25procedure TForm1.ScanSubDir(Path: string);
var
FName : String;
res,L : Integer;
SearchRec: TSearchRec;
begin
if Path[Length(Path)] <> '\' then Path := Path+'\';
L := Length(Path);
Path := Path+'*.*';
res := FindFirst(Path,faDirectory+faReadOnly,SearchRec);
if res = 0 then
begin
try
repeat
if SearchRec.Name[1] <> '.' then
begin
FName := Copy(Path,1,L) + SearchRec.Name;
Memo1.Lines.Add(FName);
if (SearchRec.Attr And faDirectory > 0) then ScanSubDir(FName,flg);
end;
res := FindNext(SearchRec);
until res <> 0;
finally
FindClose(SearchRec);
end;
end;
end;
-------------------------------------------------------------------------
ScanSubDir(ExtractFilePath(Application.ExeName));
0757デフォルトの名無しさん
05/03/02 22:08:39procedure SearchDirectory(const Path: String);
var
Rec: TSearchRec;
begin
if FindFirst(Path + '*.*', faAnyFile, Rec) = 0 then
try
repeat
if (Rec.Name = '.') or (Rec.Name = '..') then
Continue;
if (Rec.Attr and faDirectory > 0) then
Continue;
Writeln(String(Path + Rec.Name));
until FindNext(Rec) <> 0;
finally
FindClose(Rec);
end;
end;
0758デフォルトの名無しさん
05/03/02 23:22:590759デフォルトの名無しさん
05/03/02 23:26:520760デフォルトの名無しさん
05/03/02 23:29:19他へってんなら、その旨書くぐらいのことはしてもいいんじゃないのかねぇ…
どうして簡単にコピペで他へ質問するかなぁ…)
0761758
05/03/02 23:43:19>>759さん
質問変えます。
音楽CDでmediaplayerでPauseがなんでStopになるのでしょう。
0762デフォルトの名無しさん
05/03/02 23:44:250763758
05/03/02 23:51:46ワシの事か?
0764デフォルトの名無しさん
05/03/03 04:09:300765デフォルトの名無しさん
05/03/03 07:30:20WinAPIなのでしょうか? ぐぐってもわかりません。
FRepeatTimer.Interval := RepeatPause;
FRepeatTimer.Interval := InitRepeatPause;
0766765
05/03/03 07:32:59InitRepeatPause = 400; { pause before repeat timer (ms) }
RepeatPause = 100; { pause before hint window displays (ms)}
0767デフォルトの名無しさん
05/03/03 08:02:390768デフォルトの名無しさん
05/03/03 12:43:57コピーしたりしたいんですが、そのファイルが書き込み途中か、
クローズされているかを、判断したいんですが、
いい方法があったら教えてください。
0769デフォルトの名無しさん
05/03/03 15:31:49URLエンコードはどうすればよいのでしょうか?
おしえてください
0770デフォルトの名無しさん
05/03/03 16:25:27ファイルの日付を見て、更新されてたら処理するようにして、
書込中は相手が排他的オープンしてるだろうから開いてみて開けなければとしたらどう?
0771デフォルトの名無しさん
05/03/03 16:37:40procedure TForm1.ScanDir(Path : string);
var
Rec : TSearchRec;
Ret : Integer;
begin
Path := IncludeTrailingPathDelimiter(Path);
Ret := FindFirst(Path + '*', faAnyFile, Rec);
while Ret = 0 do begin
if ((Rec.Attr and faDirectory) = faDirectory) and
(Rec.Name <> '.') and
(Rec.Name <> '..') then begin
ScanDir(Path + Rec.Name)
end else begin
Memo1.Lines.Add(String(Path + Rec.Name));
end;
Ret := FindNext(Rec);
end;
end;
0772デフォルトの名無しさん
05/03/03 17:20:51FindFirstでJPEGファイルとBMPファイルだけを抽出したいのですが
やっぱPath+'*'で全部拾っていかないとダメなんでしょうか?
0773デフォルトの名無しさん
05/03/03 18:06:11WinFSまで待て
0774デフォルトの名無しさん
05/03/03 18:38:02永久に出ないことになります
0775デフォルトの名無しさん
05/03/03 18:41:21ワイルドカード文字も使える。ヘルプ嫁
0776デフォルトの名無しさん
05/03/03 19:58:560777デフォルトの名無しさん
05/03/03 20:13:370778デフォルトの名無しさん
05/03/03 21:11:570779769
05/03/03 23:11:540780デフォルトの名無しさん
05/03/04 04:34:11http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/jane/jane/HTTPSub.pas?rev=1.2&sortby=date&content-type=text/vnd.viewcvs-markup
0781デフォルトの名無しさん
05/03/04 06:28:550782デフォルトの名無しさん
05/03/04 08:55:130783デフォルトの名無しさん
05/03/04 14:36:010784デフォルトの名無しさん
05/03/04 14:54:360785デフォルトの名無しさん
05/03/04 15:02:10> 明示的にキャストしてやったら
キャストって・・・意味わかっていってる?
0786デフォルトの名無しさん
05/03/04 15:26:37万が一でもコンパイラの勘違いさせないために、Extended( ) で囲うのも
悪いことじゃない。
上のやりとり見ると、785の方がキャストの意味がわかっているのか疑問。
0787デフォルトの名無しさん
05/03/04 15:31:59わはははは、メモリイメージがまったく異なる数値形式をどうやってキャスト
するのかコードしめしてみ
0788デフォルトの名無しさん
05/03/04 15:35:31代入による暗黙の型変換とキャストを混同してるんだろ
0789デフォルトの名無しさん
05/03/04 15:37:20あの783です。これエラーがでるです。Integer Extended のエラがでます。
マイナスを無くすための処理でしょうか? 誰か助けてください。
0790デフォルトの名無しさん
05/03/04 15:54:18マイナスになるようだったらinteger の範囲でオーバーフローしてる。
だから
procedure TForm1.Button1Click(Sender: TObject);
var
i:Integer;
x:Extended;
begin
i := 123456;
x := i*i;
Label1.Caption := FloatToStr(sqrt(x));
end;
はエラーになる。でも、これだとうまくいく
procedure TForm1.Button1Click(Sender: TObject);
var
i:Integer;
x:Extended;
begin
i := 123456;
x := i;
Label1.Caption := FloatToStr(sqrt(x*x));
end;
参考になったかな?
0791デフォルトの名無しさん
05/03/04 16:03:41海外のを試しましたがDelphi2005の設定方法が分からなくてきちんとメモリーリークを
検出できなかったもので。
0792デフォルトの名無しさん
05/03/04 16:25:21ありがとう、非常に参考になったが上手くいきません。ちと粘ってみます。 感謝します。
0793デフォルトの名無しさん
05/03/04 16:48:35ようするに
var
xRp,xGp,xBp:Extended;
と変数を用意しておき、二乗する前に代入するといい
0794デフォルトの名無しさん
05/03/04 17:14:360795デフォルトの名無しさん
05/03/04 17:49:09その前に最低限覚えなきゃいけないことって何でしょうか?
0796デフォルトの名無しさん
05/03/04 17:50:46(ε・ω・)з エラが出ます。
それはともかくとして、R,G,B が integer でオーバーフローを起こすほど
大きな値になるというのは、ちと不思議だ。
それ以前の計算は合ってるのかな?
>>795
スレタイが正しく見えるようになること。
0797デフォルトの名無しさん
05/03/04 18:13:25Delphiってなんですか?
0798デフォルトの名無しさん
05/03/04 18:27:19これは何かやらないといけないのでしょうか?
ファイルを開いた後に
E_Application.WorkBooks.RunAutoMacros xlAutoOpen ;
を追加してみたのですが、コンパイルが通りません。
どなたかよろしくお願いします。
0799デフォルトの名無しさん
05/03/04 18:28:36( ´,_ゝ`) プッ
0800デフォルトの名無しさん
05/03/04 18:41:57更新しようと書き換えたのですが、処理が1行おきになってしまいます。
いかのような処理をしています
while not Query1.eof do
begin
Query1.edit;
編集処理
Query1.Post;
Query1.next;
end;
このときPostとNextのところでそれぞれカーソルが動いてしまうのですが、これで良いのでしょうか。
0801デフォルトの名無しさん
05/03/04 19:03:32うまくいきません。うまくいかない内容は印字結果がとても
小さいんです。ソースが長いので次レスで書き込みます。
環境はWin2000, Delphi 6 Personalです。
また、プリントダイアログで用紙を横デフォルトにはできない
でしょうか?
よろしくお願いします。
0802801
05/03/04 19:04:23procedure TForm1.Button1Click(Sender: TObject);
var
Bitmap: TBitmap; FormRect: TRect; PrintDialog: TPrintDialog;
begin
PrintDialog := TPrintDialog.Create(Form1);
try
if PrintDialog.Execute then
begin
Form1.Repaint;
Bitmap := TBitmap.Create;
try
with printer do
begin
Bitmap := Form1.GetFormImage;
FormRect := Rect(0,
0,
Bitmap.Width,
Bitmap.Height);
begindoc;
Canvas.StretchDraw(FormRect,Bitmap);
enddoc;
end;
finally
Bitmap.Free;
end;
end;
finally
PrintDialog.Free;
end;
end;
0803デフォルトの名無しさん
05/03/04 19:46:47ディスプレイとプリンタでは1ピクセルの大きさが違う・・・でわかる?
0804801
05/03/04 19:57:44なんとなくですが、そうなんだろうなと思っていました。
ふと思いついて試したコードが以下です。
FormRectへの代入を以下にして見ました。
if Bitmap.Width > Bitmap.Height then
begin
FormRect := Rect(0,
0,
Printer.PageWidth,
Trunc(Bitmap.Height *
(Printer.PageWidth / Bitmap.Width)));
end
else
begin
FormRect := Rect(0,
0,
Trunc(Bitmap.Width *
(Printer.PageHeight / Bitmap.Height)),
Printer.PageHeight);
end;
これだとなんとか用紙幅一杯に印刷できるようになりましたが
本来の目的と異なるなぁ。っと。
0805デフォルトの名無しさん
05/03/04 21:48:11追撃ありがとうございます。できました。
しかしながらへっぽこな画像なのです。
>>796の言ってることあたりなのかもなあ。わからん。
0806デフォルトの名無しさん
05/03/04 22:31:38AfterPostとかBeforePostにカーソル動かすコード何か仕込んでない?
TDataSet.Postのヘルプ(D4)に
>などのようにあるレコードから別のレコードへ移動するデータセットメソッドは,自動的に Post を呼び出します。
とあるから、Postは省いてNextだけでいいと思うけど。
編集処理で何をやってるかは分からないけど、TTableをTQueryにせっかく置き換えたなら
グルグルしないでSQLのUpdate文一発とかで更新にチャレンジしてみては?
0807デフォルトの名無しさん
05/03/05 00:34:33「開く」というのはどういう操作?
ドキュメントのパスをシェルから開いたのか、それとも何かオートメーションで操作したか。
とりあえず、Excelのセキュリティ設定も見とけ。
0808デフォルトの名無しさん
05/03/05 01:06:27例えば
http://www.sankei.co.jp/news/column.htm
の、<!--hombun--> って所から </td> の部分まで抜き出したいのです。
これは、正規表現というものを勉強した方がいいのでしょうか?
0809デフォルトの名無しさん
05/03/05 01:14:54エラーになります。
なので、
http://www.msn.co.jp
http://www.google.com
のような形式だとヘッダのダウンロードすらできないのですが、仕様ですか?
0810デフォルトの名無しさん
05/03/05 01:16:491.「<!--hombun-->」の場所をansiposで探す。
2.そこから最後までを別にコピー。
3.コピーしたヤツから「</td>」を探す。
4.コピーしたヤツの、「</td>」から後を削除。
ではダメ?
0811810
05/03/05 01:26:16勘違いなレスだったら無視しておくれ。
0812デフォルトの名無しさん
05/03/05 01:32:030813デフォルトの名無しさん
05/03/05 02:07:31StrPosで <!--hombun--> を探し、 そこからさらに </td> を探す。
0814デフォルトの名無しさん
05/03/05 02:18:400815808
05/03/05 02:45:03レスありがとうございます。
ちょっと調べてみたのですが、〜Pos関数というのはいろいろ使えそうです。
未だ具体的な方法がわかっていませんが、いただいたレスを参考に勉強します。
ありがとうございました。
0816デフォルトの名無しさん
05/03/05 10:42:35どうしたらいいですか?
0817デフォルトの名無しさん
05/03/05 11:01:320818ひま厨(寝不足)
05/03/05 17:03:53begin
HTML:= IdHTTP1.Get(Edit1.Text);
s := StringReplace(HTML,'.dat<>',',',[rfReplaceAll]);
for i := 0 to 50 do
begin
ListBox1.Items.Add(s[i]);
end;
end;
えっと、2chのログ形式は すれ番号<>タイトル(書き込み) です。
リストボックスにずらーっと羅列したいんですが。おせえてエロい人!
0819ひま厨(寝不足)
05/03/05 17:08:21HTML:= IdHTTP1.Get('http://pc5.2ch.net/tech/subject.txt');
s := StringReplace(HTML,'.dat<>',',',[rfReplaceAll]);
for i := 0 to 50 do
begin
ListBox1.Items.Add(s[i]);
end;
end;
すいません修正します;;
0820デフォルトの名無しさん
05/03/05 17:15:21s := TStringList.Create;
s.Text := StringR以下略
でいいのでは
0821なでしこ厨(Super初心者)
05/03/05 17:17:58まったくの初心者なんですみません;
俺の書いたソースに付け加える形でおねがいします;;
0822デフォルトの名無しさん
05/03/05 17:24:27begin
HTML:= IdHTTP1.Get(Edit1.Text);
s:=TStringList.Create;
s.Text := StringReplace(HTML,'.dat<>',',',[rfReplaceAll]);
for i := 0 to 50 do
begin
ListBox1.Items.Add(s[i]);
end;
end;
これで解決しました。ほんとうにありがとうございました!
0823デフォルトの名無しさん
05/03/05 17:26:55文字列を表すクオーテーションに挟まれ書いてあっても、
内部的には制御記号になるような文字列の表記方法はDelphiにはないですか?
"#"記号を使った場合は、文字列ではなく変数のように扱いになってしまい、
クオーテーションの外に出さないといけないので。
'ABCD'+#13#10+'EFGH'ではなく'ABCD#13#10EFGH'のような書き方をしたいのですが。
0824デフォルトの名無しさん
05/03/05 17:54:16'ABCD'#13#10'EFGH'
でよくなかったっけ
0825デフォルトの名無しさん
05/03/05 19:48:20procedure TForm1.Button7Click(Sender: TObject);
var
S: string;
begin
S := 'ABCD'#13#10'EFGH';
MessageBox(Handle, PChar(S), 'テスト', MB_OK);
end;
結果。
ABCD
EFGH
と表示されるから、それで動くみたいだね。
0826デフォルトの名無しさん
05/03/05 21:58:41UTF-16LE 文字列を ANSI 文字列に変換したいのですが対応する標準関数
が解りません・・・ていうかあるのでしょうか?
0827デフォルトの名無しさん
05/03/05 22:31:250828デフォルトの名無しさん
05/03/05 23:30:24マルチ、図々しい。
0829デフォルトの名無しさん
05/03/05 23:52:210830デフォルトの名無しさん
05/03/06 00:05:530831デフォルトの名無しさん
05/03/06 02:22:03システムの最大パス長を知りたいのですが、
他の方のソースにある MAX_PATH が使えません。
何か uses に付け加える必要があるのでしょうか?
0832デフォルトの名無しさん
05/03/06 02:25:38Windows;
0833デフォルトの名無しさん
05/03/06 02:33:00うまくいきました。
迅速な回答、どうもありがとうございます!
0834デフォルトの名無しさん
05/03/06 04:52:20遅レスだが、GoogleはURLエンコードせんでも
直接URLに検索文字入れて検索できるぞ。
http://www.google.co.jp/search?hl=ja&ie=Shift_JIS&q=(`・ω・´)&lr=
みたいな感じで。
自分が作ったブラウザに検索機能を実装するつもりで
色んな検索サイトを解析してたら偶然発見した。
0835永遠の初心者
05/03/06 11:34:39はどう違うのでしょうか? StringReplaceは置換速度がやたらと遅いのですが
AnsiReplaceStrは少しは早くなったのでしょうか?
0836デフォルトの名無しさん
05/03/06 13:43:19Ansi が付く関数・手続きは、マルチバイト対応。
例えば、StringReplace で 'a' を 'b' に置き換えようとした時
'a'($61) を含むマルチバイト文字も置き換えられるので、
例えば 餌 ($89 $61)や 病 ($95 $61)などの $61(a) 部分を $62(b)に置き換えてしまう。
すなわち 餌→叡 ($89 $62) になったり 病→秒 ($95 $62) になる。
AnsiStringReplace は、マルチバイト文字を検出するので、
このような現象を避ける事ができる。
0837デフォルトの名無しさん
05/03/06 17:01:410838デフォルトの名無しさん
05/03/06 17:20:39RFC読め。
できるできないではなくやって良いかどうかだ。
赤信号だったんだけどぉ〜試しに渡ってみたら無事渡れちゃいました☆
今後もやろうと思います☆
おいジョン、見てみろよ。
RFCも読めないイエローモンキーがまた何かやってるぜ。
0839デフォルトの名無しさん
05/03/06 17:23:300840デフォルトの名無しさん
05/03/06 17:25:130841デフォルトの名無しさん
05/03/06 17:33:02馬鹿さ加減が文章に表れてるな
0842デフォルトの名無しさん
05/03/06 18:46:030843デフォルトの名無しさん
05/03/06 19:03:01var
i: Integer;
begin
Result:='';
for i:=1 to Length(src) do begin
Result:=Result+'%'+IntToHex(Ord(src[i]),2);
end;
end;
0844デフォルトの名無しさん
05/03/06 19:40:07それはいくらなんでも乱暴すぎるようなw
せめて英数字くらいはスルーしてやってくれ。
0845デフォルトの名無しさん
05/03/06 19:41:28ぐぐれ。
0846834
05/03/06 20:05:12そりゃやっていいとは思ってねぇよ。
俺のブラウザではシフトJISとEUC-JPとユニコードを自動判別して
URLエンコードしてから検索サイトに渡してるよ。
ていうか、834の最後に「お勧めはできない」の一文を付けるのを忘れてた。
しかしなんかギスギスしてんな。
0847デフォルトの名無しさん
05/03/06 20:08:58超初心者用なのに自慢したいやつが常駐してる・・・・
0848デフォルトの名無しさん
05/03/06 20:14:59function URLEncode(s: String): String;
var
i: Integer;
begin
Result := '';
for i := 1 to Length(s) do case s[i] of
' ': Result := Result + '+';
'A'..'Z','a'..'z': Result := Result + s[i];
else
Result := Result + '%' + IntToHex(Ord(s[i]),2);
end;
end;
0849デフォルトの名無しさん
05/03/06 20:15:170850デフォルトの名無しさん
05/03/06 20:27:520851デフォルトの名無しさん
05/03/06 21:07:51便利ですか?
0852デフォルトの名無しさん
05/03/06 21:11:03procedure TForm1.FormCreate(Sender: TObject);
begin
UMCustom := TCustomControl.Create(Self);
UMCustom.Parent := Self;
UMCustom.Left := 80;
UMCustom.Top := 10;
UMCustom.Width := 50;
UMCustom.Height := 50;
UMCustom.Visible := True;
end;
TCustomControlってこれだけでは何も表示されないんですね。
0853デフォルトの名無しさん
05/03/06 21:33:06オレはメニューのカスタマイズ用に使ってる
>>852
そりゃそうだ
Canvasで描写していく
0854デフォルトの名無しさん
05/03/06 22:22:08かなり便利だよ。機能のEnable・Disable、ツールチップ、
ボタンイメージ、ショートカットなんかを一元管理できる。
Delphiチュートリアルに使い方が書いてあったと思うが。
0855ななしへたぐらま ◆XcB18Bks.Y
05/03/06 22:52:14もしかして'*'だと拡張子のないファイルしかヒットしないのでは?
>>835-836
Delphi 6以降は持っていないのでわかりませんが
Delphi 5のStringReplace関数はヘルプにはマルチバイトに対応していると書かれていますし,
SysUtils.pasを見てもマルチバイトには対応しているようです.
簡単なプログラムでテストをしてみましたが『病』と『餌』は化けませんでした.
>>842
Googleがある時代,「○○ってなんですか?」っていちいち掲示板できくのは無意味ですよ.
>>851
たとえばメニューとツールボタンの両方があるアプリを作るとき.
項目の名前,アイコン,イベントハンドラ,ヒント文字列などを1カ所で管理できます.使用不可にするのも1カ所でできます.
またユーザーインターフェース(要は操作方法)をあとから全く違うものに変更したくなった場合にも
コードをほとんど変更しなくて済みます.ほかにもいろいろ便利.
>>852
TCustomControlクラスの実体を作るのではなくてこのクラスをベースに独自のクラスを定義して使います.
ヘルプの『コンポーネント開発者ガイド』はざっとひと通り読んでみてください.
(ここはわかりやすく丁寧に書かれています)
わからないことがあったらまた質問して下さい.
0856デフォルトの名無しさん
05/03/07 00:31:22>もしかして'*'だと拡張子のないファイルしかヒットしないのでは?
んなこたーない
ワイルドカードは . だって含む
あれ?
じゃあ何で *.* で検索すると . の無いファイルやディレクトリも引っかかるんだ?
教えてエ○イ人!
0857デフォルトの名無しさん
05/03/07 00:51:020858デフォルトの名無しさん
05/03/07 01:09:52DOSの頃から存在する謎な仕様の一つですな。
0859デフォルトの名無しさん
05/03/07 01:15:47ほー、そうなのか
サンクス
0860デフォルトの名無しさん
05/03/07 03:13:280861デフォルトの名無しさん
05/03/07 03:18:010862デフォルトの名無しさん
05/03/07 07:35:37昔のFAT形式は ファイルが32バイトで表現される為に、その情報として'.'を含んでいなかったのです。
つまり 8+3でファイル名+拡張子を記録してドットは記録してなかったわけ。
0863デフォルトの名無しさん
05/03/07 10:33:29拡張子とファイル名を区別して記録していたなら、ドットが記録されているかどうか
を議論するのは意味が無いのでは?
0864デフォルトの名無しさん
05/03/07 10:45:13区切りを示す特別なものなのだよ
0865デフォルトの名無しさん
05/03/07 10:53:27> *.* が特別な扱いになってるだけ。
これのほうが分かりやすいと思うけど。
0866デフォルトの名無しさん
05/03/07 11:00:43*.*
の左の*は名前部分、右の*は拡張子部分示してるだけ
正規表現とは違うよ
0867デフォルトの名無しさん
05/03/07 11:07:18dir *
dir .
dir *.*
dir *.
dir .*
とか入れて見比べてみな
0868デフォルトの名無しさん
05/03/07 11:08:470869デフォルトの名無しさん
05/03/07 11:08:53>>856
0870デフォルトの名無しさん
05/03/07 11:09:490871デフォルトの名無しさん
05/03/07 11:13:20ゲーツに聞いたら?
0872デフォルトの名無しさん
05/03/07 11:14:11> *.* が特別な扱いになってるだけ。
0873デフォルトの名無しさん
05/03/07 11:15:480874デフォルトの名無しさん
05/03/07 11:25:54*
が特別扱いだろうに
0875デフォルトの名無しさん
05/03/07 11:29:100876デフォルトの名無しさん
05/03/07 11:39:410877デフォルトの名無しさん
05/03/07 11:57:37E_Excel := CreateOleObject('Excel.Application');
E_Application := E_Excel.Application;
これを使って開こうとしています。
もちろん、マクロの確認ダイアログは開かないように設定しています。
0878デフォルトの名無しさん
05/03/07 14:34:48EXIFでは日付が2004:02:12 14:21:48という形式になってます。
これをすばやくTDateTime型に変換したいのですがどうしたらよかですか。
0879デフォルトの名無しさん
05/03/07 14:50:40var
sDate: String;
dDate: TDateTime;
SysUtils.DateSeparator := ':';
SysUtils.TimeSeparator := ':';
sDate := '2004:02:12 14:21:48';
dDate := StrToDateTime(sDate);
0880デフォルトの名無しさん
05/03/07 14:52:47begin
ExifDatetTime := StringReplace(ExifDatetTime,':','/',[]);
ExifDatetTime := StringReplace(ExifDatetTime,':','/',[]);
result := VarToDateTime(ExifDatetTime);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Caption := DateTimeToStr(ExifToDateTime('2004:02:12 14:21:48'));
end;
0881デフォルトの名無しさん
05/03/07 16:21:51に通常のshutdownのようなメソッドはありますでしょうか?
client.close;
を実行したらそのソケットに関してはもうdisconnectイベントが
発生して欲しくないのです。
0882デフォルトの名無しさん
05/03/07 16:26:310883デフォルトの名無しさん
05/03/07 16:38:42ありがとうございます。やってみます。
0884デフォルトの名無しさん
05/03/07 16:58:04ConnectイベントでOnDisconnectにDisconnectイベントを設定すればいいのか!
0885デフォルトの名無しさん
05/03/07 18:10:260886デフォルトの名無しさん
05/03/07 18:43:510887デフォルトの名無しさん
05/03/07 19:13:18収録される予定らしい
0888デフォルトの名無しさん
05/03/07 19:57:080889デフォルトの名無しさん
05/03/07 20:18:49ありがとう。
雑誌をチェックしてなきゃあかんのか。
貧乏ってつらいな。
0890デフォルトの名無しさん
05/03/08 00:56:11神光臨
0891デフォルトの名無しさん
05/03/08 01:35:200892デフォルトの名無しさん
05/03/08 01:44:440893791
05/03/08 01:53:400894デフォルトの名無しさん
05/03/08 02:27:07海外のmemcheckは知らない。
0895デフォルトの名無しさん
05/03/08 02:29:480896デフォルトの名無しさん
05/03/08 07:51:500897デフォルトの名無しさん
05/03/08 10:01:160898デフォルトの名無しさん
05/03/08 10:03:470899デフォルトの名無しさん
05/03/08 11:33:45そのファイル名をドラッグしたエディットコントロールに表示させたいのですが、うまくいきません。
USE節にshellapiを追加し、private宣言の中に
procedure WMDropFiles(var Msg:TWMDropFiles);message WM_dropfiles;
を追加、onshowなどに
dragacceptfiles(handle,true);
を追加、
procedure TForm1.DropFiles(var Msg:TWMDROPFILES);
でファイル名取得処理、という感じでフォームにドラッグしたファイル名の受け取りはできました。
そこで、
dragacceptfiles(handle,true); → dragacceptfiles(Edit1.handle,true);
にしてみたら、エディットコントロールにドラッグ可能にはなったのですが、ファイル名取得処理が働きませんでした。
説明がへたくそですいませんが、どなたかご教授お願いします?
0900デフォルトの名無しさん
05/03/08 12:40:37こうやって宣言しておいて
> procedure TForm1.DropFiles(var Msg:TWMDROPFILES);
でうまくいくはずないけど・・・・それはともかく
> エディットコントロールにドラッグ可能にはなったのですが、ファイル名取得処理が働きませんでした。
それは当たり前。WM_DROPFILES メッセージは Edit1 に届けられるので Form1 で受け取れない。
Edit1 で受け取るために WindowProc を使ってサブクラス化しなくちゃ
0901899
05/03/08 16:23:13レスどうもありがとうございます。
>procedure WMDropFiles(var Msg:TWMDropFiles);message WM_dropfiles;
すいません、いろいろいじっててごっちゃになってました。
とういか、「どなたかご教授お願いします?」、とかいって疑問形になっちゃってますね(汗
サブクラス化ですか、頑張ってみます。
0902798=877
05/03/08 16:31:300903デフォルトの名無しさん
05/03/08 19:14:48開いたブックをBookとすると、
Book.RunAutoMacro(xlAutoOpen, CLID);
でいいんちゃう?
CLIDはLOCALE_SYSTEM_DEFAULTのconst
0904デフォルトの名無しさん
05/03/08 19:46:40ぐぐってもあまり出てこないです。
0905944
05/03/08 20:02:39immReconvert はWinAPIではありませんでした<(_ _)>
0906デフォルトの名無しさん
05/03/08 20:22:050907デフォルトの名無しさん
05/03/08 22:36:45ToolButton1 . PopUpMenu1のItem1 , PopUpMenu2のItem2 に同じ「HogeAction」 というアクションを設定したとします。
「HogeActionExecute」では処理を分岐したいのですが、
どこから「HogeAction」が呼ばれたかを知るにはどうすればいいでしょうか?
0908デフォルトの名無しさん
05/03/08 22:49:48俺が >>730 で聞いたのとまったく同じ疑問だw
よくわからないけど、Actionを登録してもOnClickに別関数を割り当てることができるようです。
Caption等々はActionで共通化しておいて処理だけ別みたいな感じで。
ただ、IDEがdfm作成するときにOnClickを消しちゃうので再設定が必要みたい。
0909デフォルトの名無しさん
05/03/08 22:50:480910デフォルトの名無しさん
05/03/08 22:51:24Action.OnExecuteからでは判別不能です。別の方法考えれ。
ちなみにActionを割り当てたからって、
必ずそのActionのOnExecuteを使う必要はない。
自分で新しくイベント定義すればSenderで判別できる。
0911デフォルトの名無しさん
05/03/08 22:54:34ありがとう。
でも不便ですね。
Action使った方が便利と聞いたので、
やっとActionに設定し終わったんですよ
100くらい orz
0912デフォルトの名無しさん
05/03/08 23:02:590913デフォルトの名無しさん
05/03/08 23:05:51ありがとう!!!解決しました。
みんなありがとう。
かなりスマートにいけそうです。
delphiに感動しますた。
0914デフォルトの名無しさん
05/03/08 23:20:08出来たまでは良かったのですが、ファイルを読み込むことすら出来ません。
ぐぐって見たんですが、以前のMediaPlayerを使った解説ばかりで
説明通り出来ないんです。
MediaPlayer Var.10を使っています。
よろしくお願いします。
0915デフォルトの名無しさん
05/03/08 23:23:410916デフォルトの名無しさん
05/03/08 23:34:050917デフォルトの名無しさん
05/03/08 23:35:28お待ちください。
0918デフォルトの名無しさん
05/03/08 23:57:14もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Delphi使いが優しくコメントを返しますが、
お礼はDelphiの布教と初心者の救済をお願いします。
0919デフォルトの名無しさん
05/03/09 00:10:18悪い意味で。
0920デフォルトの名無しさん
05/03/09 07:59:420921デフォルトの名無しさん
05/03/09 14:57:29Imageに画像をセットした後のクリア方法がわかりません。
imgMXXX.Picture.LoadFromFile('');
で実行したのですが、ボタンクリック時に書いたところ消えませんでした。
0922デフォルトの名無しさん
05/03/09 15:08:44TImage.Picture.Canvasで塗りつぶす
0923デフォルトの名無しさん
05/03/09 15:10:59プログラムからファイルを検索するダイアログの表示をするため
上のページを参考にやってみたんですが、
Macro := Format('[FindFolder("%S")]', [Path]);
これだと探す場所にマイコンピュータを指定する事が出来ません
何か良い方法はないでしょうか。お願いします。
>>921
imgMXXX.Picture := nil;
とかで出来た気がする
0925デフォルトの名無しさん
05/03/09 16:25:13使い方はどのように使えばいいのでしょうか?
0926sage
05/03/09 16:35:10使用しているPCの物理メモリは2GByte搭載しており、仮想メモリは3GByte確保しております。
どなたかご存知でしたら教えてください、お願いします。
0927デフォルトの名無しさん
05/03/09 16:59:38プロジェクトオプションのリンカタブで
最大メモリサイズを大きくしたらどうだろう
0928926
05/03/09 17:19:39ありがとうございます。
でも、試してみたのですが駄目でした。
更に調べていて
http://www.borland.co.jp/qanda/delphi/d0000246.html
という記述がありました。
しかし、CreateHeapなど他の方法でも試してみたのですが同様に700MByte程度の確保で失敗してしまいます。
これはハード、Windows、Delphiのいづれの問題でしょうか?
ご存知の方がおられましたら、教えてください。
0929デフォルトの名無しさん
05/03/09 17:26:410930デフォルトの名無しさん
05/03/09 17:28:40.NETの前身
0931デフォルトの名無しさん
05/03/09 17:36:18C言語を知ってるならmallocで試してみるとか
Linuxブチこんでgcc辺りで試すとか
問題の切り分けをやるしかないね
0932Delフサギコ ◆A6VzDeLphI
05/03/09 19:41:38⊂,,,,,,,,,つ,,゚Д゚ミつ
ApplicationOnMessage使うのが
楽で、いいんじゃないかな?
http://web.archive.org/web/*/http://nug.nasu-net.or.jp/~sakai/delphi/tips01.html
0933デフォルトの名無しさん
05/03/09 19:47:23procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
// 線を引く
for i := 0 to 100 do SetPixelV(Canvas.Handle, 10 + i, 10, $0000FF); // R
for i := 0 to 100 do SetPixelV(Canvas.Handle, 10 + i, 20, $00FF00); // G
for i := 0 to 100 do SetPixelV(Canvas.Handle, 10 + i, 30, $FF0000); // B
end;
こんな感じじゃない?
0934デフォルトの名無しさん
05/03/09 20:02:59Virtual ListViewでCheckBoxを表示したいのですがうまくいきません。
ListViewのプロパティは
OwnerData=True
Checkboxes=True
で設定し、OnDataイベントでデータの表示をおこなっています。
Delphi5です。
何が足りなくて表示されないのかわかりません。
また、helpにListView.Items.SetCount()ってprocedureがあるって書かれてるんですが
コンパイルエラーになります。これはHelpのバグでしょうか?
どなたかおわかりの方、お教え下さい。よろしくお願いします。
0935デフォルトの名無しさん
05/03/09 20:20:59> ViewStyle が vsList または vsReport の場合
とヘルプにある。
> helpにListView.Items.SetCount()ってprocedureがあるって書かれてるんですが
SetCount は protected メソッドだからじゃね?
ListView.Items.Count := 100;
みたいに Count プロパティに直接代入するとか。
0936934
05/03/09 20:29:43レスありがとうございます。
説明不足で申し訳ないです。ViewTypeはvsReportで設定しています。
> SetCount は protected メソッドだからじゃね?
了解しました。
> ListView.Items.Count := 100;
本題とはずれてしまいますが、この式をVirtualでない場合(OwnerData=False)は
Countに値が代入されませんでした。これも不可解なんです。
Helpにはデータ領域を確保しますみたいな事書いてあるんですが...
0937デフォルトの名無しさん
05/03/09 20:57:19要するに、OwnerData=Falseの時に
Items.Count に代入すると、キャパシティを設定するということでは。
Items.Count は、実際のアイテム数を指していないと破綻するし。
TListとかでもそうだけど、Capacityを超えてAddしようとすると、
新たにメモリを割り当てなおすから無駄があるけど、
追加するアイテム数がわかってるなら、あらかじめCapacityを設定することで
無駄がなくなって早くなる。
0938ななしへたぐらま ◆XcB18Bks.Y
05/03/10 01:34:54ごめんなさい,十年くらいずっと勘違いしてました.
>>878-880
海外版Windowsで動かす可能性があるのなら自分で切り出した方がよいかもしれません.
0939デフォルトの名無しさん
05/03/10 02:10:190940デフォルトの名無しさん
05/03/10 03:17:43単純にそれだけのサイズの連続した領域を確保できないのでは?
0941Delフサギコ ◆A6VzDeLphI
05/03/10 07:26:01ミ,,゚Д゚彡 早起きしますた
ミ つ旦)~~
〜と,,,~),,~)
Windowsサービスを起動・停止するのは
どのようにするのでしょうか、
sc.exeを使う方法は、sc.exe自体を
配布してもいいやらわるいやら
よくわからない&そういうのに左右されたくないので
ライブラリでとあるサービス(例えばlanmanserverだが)を
起動・停止、してみたいのです。
残りレス数も少ないですが
教えてエロい人。
0942デフォルトの名無しさん
05/03/10 09:02:55コマンドプロンプトでは
net start/stop "サービス名"
でできる
0943デフォルトの名無しさん
05/03/10 11:08:18EnabledをFalseにすると文字が灰色になりますが、
この文字の色を黒のままにしたいんですが、できるんでしょうか?
回答お願いします。
0944デフォルトの名無しさん
05/03/10 11:15:260945デフォルトの名無しさん
05/03/10 11:41:25どう書けばいい?
0946デフォルトの名無しさん
05/03/10 11:42:43b:=1
0947デフォルトの名無しさん
05/03/10 11:51:130948デフォルトの名無しさん
05/03/10 11:56:08b:=a
0949デフォルトの名無しさん
05/03/10 12:10:060950デフォルトの名無しさん
05/03/10 12:19:580951デフォルトの名無しさん
05/03/10 12:24:48の結果はbが1ならTrue、そうでなければFalse。
0952デフォルトの名無しさん
05/03/10 12:27:39C++やっててDelphiに浮気したw
0953デフォルトの名無しさん
05/03/10 12:29:18ReadOnlyプロパティでは駄目?
0954943
05/03/10 12:53:08うおお、できました。
こんなプロパティあったのか、知らんかった。
ありがとございました。
0955デフォルトの名無しさん
05/03/10 13:07:31できてないだろ・・・・
0956943
05/03/10 14:04:29あ、いや、ReadOnlyをTrue、EnableをTrueにしたので
要は中身を変更禁止のまま文字を黒にしたかったわけで
で、変更禁止のプロパティをEnableしか知らなかったわけで
説明不足申し訳ないと思ったわけで
0957デフォルトの名無しさん
05/03/10 14:50:11WinSvc
0958デフォルトの名無しさん
05/03/10 17:26:59何か方法はありますでしょうか(バッチをキックするとかじゃなくて)?
宜しくお願いします。
0959デフォルトの名無しさん
05/03/10 17:45:56function Oppai(const Chikubi: Integer): Boolean;
begin
Result := False;
a := Chikubi;
b := Chikubi;
if a = b then
Result := True;
end;
0960デフォルトの名無しさん
05/03/10 18:24:46NetMessageBufferSend
0961デフォルトの名無しさん
05/03/10 18:55:16ありがとうございました!
0962デフォルトの名無しさん
05/03/10 19:45:030963デフォルトの名無しさん
05/03/10 20:50:22画像の一番外側の枠が無視されてしまうのは何故?
0964デフォルトの名無しさん
05/03/10 20:57:17自動で透過色判別するからじゃね?
0965回答神見習
05/03/10 21:01:110966デフォルトの名無しさん
05/03/10 21:13:03書き出ししてたから透過色選択できなくて気づかなかった・・・
マジ�dクス
0967デフォルトの名無しさん
05/03/10 22:40:450969デフォルトの名無しさん
05/03/11 01:04:330970デフォルトの名無しさん
05/03/11 01:07:180971デフォルトの名無しさん
05/03/11 01:13:28くだすれDelphi(超初心者用)その23
http://pc5.2ch.net/test/read.cgi/tech/1110470895/
0972デフォルトの名無しさん
05/03/12 00:19:53おしえてください。
0973デフォルトの名無しさん
05/03/12 00:40:500974デフォルトの名無しさん
05/03/12 00:42:05それ選んだ瞬間固まっちゃったもので・・・後出しですいません
0975デフォルトの名無しさん
05/03/12 02:03:34実行してみるとメニューバーが表示されていません。
何か解決策はあるのでしょうか?
0976デフォルトの名無しさん
05/03/12 02:21:24BorderStyleがbsDialogになってるとか?
0977デフォルトの名無しさん
05/03/12 09:41:40もちろん項目追加しているよね?
0979デフォルトの名無しさん
05/03/12 21:16:53自動で中央に配置されるんだね、知らんかった。
0980デフォルトの名無しさん
05/03/13 03:12:410981デフォルトの名無しさん
05/03/13 04:11:37どのようにすれば良いでしょうか。おそらく外部のサーバに接続したりしないと
いけない気がするのですが。。
0982デフォルトの名無しさん
05/03/13 05:14:47ルータがUPNPに対応してるならこんな感じで
http://www.aa.alpha-net.ne.jp/bosuke/trash/upnp.htm
外部サーバに接続して……なら
http://www.ugtop.com/spill.shtml
みたいなものを設置して取得
0984デフォルトの名無しさん
05/03/13 11:46:37GetSystemDefaultLCID
0985デフォルトの名無しさん
05/03/13 13:12:56やはりバッチファイル等を使わないと無理ですよね?
0986デフォルトの名無しさん
05/03/13 13:22:130987デフォルトの名無しさん
05/03/13 13:24:12ワロスw
0989デフォルトの名無しさん
05/03/13 19:20:56CreateProcess なり、WinExec なり、ShellExecute なり、なんなりと
0991ミ,,゚Д゚ミノ ◆A6VzDeLphI
05/03/13 22:49:04正しいかどうかはあまり自身無し。
まずSleep.exeを作っておいてアプリと同梱
program Sleep;
uses SysUtils;
begin
SysUtils.Sleep( StrToIntDef(ParamStr(1),0) );
end.
でアプリ側から
procedure RebootApp(MilliSec: Cardinal);
var
BatFileName: String;
RebootBatFile: TStringList;
begin
BatFileName := ChangeFileExt(Application.ExeName, '.bat');
RebootBatFile := TStringList.Create; try
RebootBatFile.Text :=
'SLEEP ' + IntToStr(MilliSec) + sLineBreak +
'START ' + Application.ExeName + sLineBreak +
'DEL ' + BatFileName + sLineBreak;
RebootBatFile.SaveToFile(BatFileName);
finally RebootBatFile.Free; end;
WinExec(PChar(BatFileName), SW_HIDE);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
RebootApp(5000);
Application.MainForm.Close;
end;
5秒後に再起動。
0992デフォルトの名無しさん
05/03/13 23:43:330993ミ,,゚Д゚彡 ◆A6VzDeLphI
05/03/13 23:44:59二重起動防止コードとかと
ぶつからないようにするためだよ。
0994デフォルトの名無しさん
05/03/13 23:48:40だって自分自身なんだから、適当なコマンドラインパラメータを渡せば
二重起動禁止ロジックを迂回できるようにすることができるでしょ? なぜ、バッチ?
0995デフォルトの名無しさん
05/03/13 23:50:54なんか分かりやすいJAN
0996デフォルトの名無しさん
05/03/13 23:58:56とか、任意秒のSleep()をすることも簡単に設定できますけどね。
0997デフォルトの名無しさん
05/03/14 00:04:400998デフォルトの名無しさん
05/03/14 00:08:140999デフォルトの名無しさん
05/03/14 00:15:47そういう事をユーザーがするかどうかより、そういう穴があるよりは無いほうがいんでないか。
1000デフォルトの名無しさん
05/03/14 00:17:23簡単にできる利用者もいるでしょ
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。