> スレ番変えるの忘れてたごめん どんまい。
どどんまい
どるふぁい
D7付属のクイックレポートで連続用紙への印刷って出来ないんでしょうか。 レポートの設定の用紙サイズに出てこないのですが。
前スレでシャッフルネタやってたけど、順列の数字を入れた配列から ランダムに値を一個選んで、そのたびにその値を配列から 削除していく方法があるけど駄目か?
前スレ
>>970 IDEっていうのは、統合開発環境のこと。ソフトを作るソフトのことです。
Delphiで言えば、Delphi自身ですね。
で、ターボの開発環境は、前スレにも出ていましたが、Delphi6に比べ、*重い*、*バグバグ*なわけです。
ただ、ターボの方が、新機能が追加されていたりします。
IDEから出力したソフト、つまり、あなたが、開発したソフト自身は、IDEとは、別です。
普通に動きます。キビキビ動きます。ターボでもDelphi6でもどちらも問題はありません。
> Delphi6に比べ、*重い*、*バグバグ*なわけです。 Win2000 とVista みたいなものだな。
>>1 お疲れさまでした.
>>11 統合開発環境といわれてもピンと来ない方も多そうですね.
その昔,Windowsが普及する前,MS-DOSというOSが使われていた時代は
・ソースコードを編集するソフト(テキストエディタ)と
・ソースコードを実行ファイルに変換するソフト(コンパイラ,リンカ)と
・実行ファイルをデバッグするソフト(デバッガ)は
それぞれ別のソフトであり,別々に実行する必要がありました.
これらをひとつのソフトで全部行えるようにしたのが統合開発環境です.
BASIC言語ではかなり昔から統合開発環境になっていましたが機能は今に比べると貧弱でした.
現在のような統合開発環境を実現したのがボーランドのターボパスカル,Delphiの先祖です.
どどんまい使われてるの久しぶりに見た
今、一部の界隈で大ブレイクしてるからな
>>12 Vistaは、重いだけでなくバグバグなんすかw
きっついな
17 :
デフォルトの名無しさん :2006/12/09(土) 00:45:14
>>10 それじゃ遅い。配列から削除するのは後方の項目をコピーしなきゃならんので、
シャッフルで内容交換するより、遅い。10万項目あったら100倍以上
時間がかかるだろうよ。
>>17 > ダウンロードできますか?
できませんね。
メールで聞いてみたらどうでしょう。
>>1 スレ立て乙です。
>>11 > 普通に動きます。キビキビ動きます
D6はメモリマネージャが〜とか、要らないツッコミ入れる香具師が出る悪寒…。
22 :
デフォルトの名無しさん :2006/12/09(土) 01:50:11
C#で以下のように記述するのを、Delphiでやりたいんですが・・・ Form1 f1 = new Form1(); f1.Show(); 誰か教えてください><
Form1 := TForm1.Create(Self); Form1.Show; てことじゃなくて?
24 :
デフォルトの名無しさん :2006/12/09(土) 01:55:02
>>23 早速ありがとうございました。
そういうことでした。
タスクバーに表示されないのか・・・
>>21 TurboはFastMMやFastCodeなんかの在野の成果物をライブラリに取り込んでいる。
D6でもライブラリを落とせば普通に使用できるけど。
>>24 SetWindowLong で WS_EX_APPWINDOW 追加する
27 :
デフォルトの名無しさん :2006/12/09(土) 02:14:36
>>19 問い合わせてみました。
BDS2006で、TBXインストール成功した方いませんか?
いまいちわかんない・・・。
28 :
22 :2006/12/09(土) 02:47:32
>>26 ありがとう
SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX_APPWINDOW);
Form1 := TForm1.Create(Self);
Form1.Show();
表示されないよ(つд`
ぐぐったら表示されないようにする方法はでてくるんだけど・・・
アプリケーションのメインフォームとは別のフォームも タスクバーに表示したいってこと? MS-Excelで複数のファイルを開いたときみたいに だったらCreateParamsメソッドをオーバーライドしてそこでWS_EX_APPWINDOW; procedure TForm1.CreateParams(var Params: TCreateParams); begin inherited CreateParams(Params); Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW; end; ちなみにShowメソッドでフォーム表示する場合は フォームのonCloseイベントで解放処理を入れないとメモリリークする 下の2行を忘れずに Action := caFree; Form1 := nil;
BDS2006のC#Builderのように、Delphiでも、コード補完の一覧で、説明文を表示させることは出来ますか
>>28 先にGetWindowLongを使って既に設定されているスタイルを取得するんだ
そうしないと他のスタイルが消えてしまうぜ
ちなみに渡すのはForm1.Handleだぜ
Applicationてのは見えないウインドウでありForm1のオーナーなんだ
32 :
22 :2006/12/09(土) 04:26:47
>>29 >>31 ありがとう
Delphiの人は親切だな・・・
でもどうもうまくいきません。
おとなしく本買ってきます
俺がD6PersonalからTrubo Exprolerに乗り換えた理由がひとつだけある。 [Ctrl]+[Shift]+↑↓で宣言とコードを移動できること。
>>33 D6Proは出来るけど、Personalは出来ないのか
ほんとだ、出来た。こんなやり方もあったのか… D7 pro ですが
>>34 追ってなかったんだが、それ、結局は白ということに落ちついてたんだ。へぇ。
>>34 下っかわ、涙目で粘着してるやつ笑えるねw
> 結局は白ということに アップデートで抜け道消滅だけどね。
ifのときだけインデントを2文字じゃなくて3文字にするのは俺だけじゃないはず つまり: if hoge then hoge; じゃなくて: if hoge then hoge;
インデント修正 ifのときだけインデントを2文字じゃなくて3文字にするのは俺だけじゃないはず つまり: if hoge then hoge; じゃなくて: if hoge then hoge;
そういうの後で手入れる時うぜーんだよ
今はじめてプログラム組んでるんですけど変数をテキストに保存して次回起動時に呼び出すというものができません。 ヒントをください。 type xxx = record a: array[1..3] of Integer; b: array[1..3] of Integer; c: array[1..3] of Integer; end; var yyy:xxx; zzz:TextFile; m: array[1..3] of Integer; n: array[1..3] of Integer; o: array[1..3] of Integer; a[1...3]はm[1..3]と同値をとらせる 同様に、bはn、cはoと対応させる 保存時に対応する変数をレコード変数にいれて保存し 次回起動時にテキストから呼び出した値を適切な変数に代入 というのを、プログラムが閉じるときかなにかに自動で保存して呼び出したいのです。 レコードをつかわずに簡単な方法とかこうすれば軽くなるとかいうのもあれば教えてほしいです。 釣りかと思う人もいるかもしれませんけど、本当に困ってます。
TStringListじゃダメなの? savetofileとloadtofileを使えば簡単に ファイルに読み書きできるぞ
>>44 ぐぐってみましたが例文が見つかりません。
良ければ使い方を例文でおしえてくれませんか?
あるいは、TRegIniFileとか。
Wikiの「米 Borland の Delphi 6 Personal の使用者登録ページ」ってところがリンク切れになってるようですが、 今はどこを見ればいいのでしょうか?
>>45 どの部分がわからないのか。
・起動時と終了時に処理させる方法。
・変数の中身をファイルに保存する方法。
・Integer を文字列にする方法。
>>48 まず、保存したい変数がintgerなのでInttoStrにするまではわかるんですけど
それを狙った行に保存する方法がわからないのと
起動時に処理はメインフォームのonCreateで手続きすればいいのはわかりますが
終了時に関してはわかりません。
たびたびすみません
>>48 起動時にiniファイルがないまま起動したらエラーがでました。
エラーを出さずにiniファイルを作成し、仮にiniファイルがあるばあいは上書きしない方法がありましたらおしえてください。
Turbo Delphi Explorer使ってるんですが、コードのところで右クリックすると、 『オブジェクト参照がオブジェクトインスタンスに設定されていません。』と出て 右クリックメニューが使えないのですが、これはバグですか?
はい。
D7Ent版ですがIDEを終了させると読み込みエラーが延々と出るんですが同じような症状の人居ます?
55 :
デフォルトの名無しさん :2006/12/10(日) 00:55:40
あんたが追加したコンポーネントがバグってるんだろ。
設計時ではなく実行時にイベントハンドラを動的に割り当てたいのですが、 どうすればいいのでしょう。
button2.onclick:=button1click;
実行中にコンポーネントのプロパティを設計時に設定した値に戻すにはどうしたらよいのでしょうか?
既にあるコンポーネントのプロパティを変えるんじゃなくて 既にあるコンポーネントは消して同じコンポーネントを作り直せ
で、どうやって設計時の値を取得するの?
設計時なら決めうちだろうが
決めうちならプロパティーをセットするのも簡単だわな。
TControlを継承しているTWinControlにはなぜOnDblClickが無いのですか。 TControl、TWinControl、OnDblClickに限ったことではないのですが TTabSheetでダブルクリックイベントを使いたいと思って ヘルプで上位コンポーネントをたどって行ったところ TControlではOnDblClickがあるのに、それより下位のコンポーネントでは OnDblClickが無かったので不思議に思いました。
別にTControlにしかないわけではなく、きちんと下位クラスにも継承されてる。 プロテクトメンバだからオーバーライドして可視性を変更しない限り外から見えないだけ。 ヘルプに書いてないのは、上位クラスから変化がなければ何も書かないのが習わしだから。 FreeがTObjectのところにしか載ってないのと同じ。 ただし自分で既存のクラスを継承してOnDblClickをpublicやpublishにするなら、 プロパティの可視性以外に、ControlStyleを適切に設定するなど、 その処理をサポートするためのコードを自分で追加しないといけない。
>>39 リンク先をよく読めば分かるけどアップデートしてもコンポ追加できるよ
>>65 ありがとうございます。
上位にあるものは無条件で下位でも使える、オブジェクトインスペクタでも可視になる、と思ってました。
>>68 やっつけた間違いあったらだれか補完よろ
var
TempList: TStrings; Filename : string;
a: array of integer; i: integer; Max: Integer;
Filename := GetCurrentDir + '\test.txt';
//GetCurrentDir=実行中のプログラムのフォルダを表わす
//ファイルからの読み込み
TempList := TStringList.Create;
try
TempList.LoadFromFile(Filename);
if TempList.Count <> 0 then
begin
SetLength(a,TempList.Count);
for i:= 0 to TempList.Count - 1 do
begin
a[i] := StrToInt(TempList.Strings[i]);
end;
end;
finally
TempList.Free;
end;
//ファイルへの保存 TempList := TStringList.Create; try for i:= 0 to Max -1 do //Maxは全変数の数を代入 begin TempList.Add(IntToStr(a[i])); //挿入の場合はInsert(行番号(先頭は0),値) end; TempList.SaveToFile(FileName); //任意のファイル名にしたいならSaveDialogを使う finally TempList.Free; end; わからない関数などが出てきたら 反転させてF1押すとその関数のメソッドやプロパティ 場合によっては使いかたの凡例もみることができますよ onCreatに対応するのは onDestroy ただこのイベントは通常メモリの開放などの後処理を記述するところ ここにデータ保存処理を記述するのはお勧めしない フォームの破棄時に呼び出されるので ここでデータ保存処理に何らかのエラーが出ても データは破棄されるのでやり直しが効かないよ
DBGRIDで自動的に次の行が挿入されるのを禁止して挿入ボタンが押されたときだけ行追加したいんですが どうすればいいですか。
DataSet のBeforeInsertイベントで条件判定
アプリケーションを起動して、その最中にロードされた内容をwriteprocessmemoryで書き換えながら起動しようとしてるのですが、 なんどやっても(sleepなどをしても)EacsessViolationのエラーが出てしまいます。 こういう事はもともとできないのでしょうか??
<vector>みたいのないの? TListってやつ使ってるのか?
もろに動的配列があるじゃん
クラスのリストを作りたいとき 動的配列とTObjectListどちらがいいですか。
要件次第だが、おれはTObjectList使うことが多い。
クラスのリストならTClassListだろ。
>82 >80の文意を考えればやりたいのはクラス"インスタンス"のリストの実現手法を 知りたいのではないか?ということでTObjectListで。
タイマーと音量をいじるプログラムを組みたいんだけど 今の時間を取得する方法とパソコン自体の今の音量の変数をかえる方法を教えてください。 何時になったら音量を0にするとかそういうプログラムにする予定です。
>>85 > 今の時間を取得する方法
now
> パソコン自体の今の音量
mixerSetControlDetails
>>86 下の変数の使い方がよくわかりません。
見ればいいサイトとかありますか?
なければ例文で教えてください。
>>58 保存されている値なら、リソースに格納されている。
詳しく知りたいなら、Classes.pasを解読する。
保存されていない値は通常constructorで初期化されている。
>60と近いけど、値取得用のコンポーネントを動的に作れば良いと思う。
>>76 モジュール読み込み中に別スレッドから書き換えたいの?
空のテキストファイルをカレントディレクトリに作成する方法を教えてください。
>>90 空のテキストファイルってのは、単なる0バイトのファイルと一緒。
>>92 すみません、今回作りたかったのがテキストファイルなだけで、サイズが0のファイルの作り方がわからないんです。
じゃあ、まあわかりやすいのやっとくと uses classes; とかしておいて var sl : TStringList; begin sl := TStringList.create; sl.savetofile(保存したいパス); sl.free; end;
95 :
デフォルトの名無しさん :2006/12/11(月) 01:00:53
くだすれってどういう意味ですか?
じゃあどうでもいい質問 var i: Integer; begin i := 5; ここの、 i := 5 という場面で、 1. 新しくSizeOf(Integer)分のメモリの領域を得て、そこに 5 を配置する 2. i のアドレスに、先程の領域をコピーする 3. 1.で、 5 が置かれていたメモリを解放する もしくは 1. どこか使ってない、4バイトのレジスタに 5 を置く 2. i のアドレスに、先程のレジスタをコピーする こんな感じですか? DoSomething(i); こう手続きが呼ばれたら、どのような処理をして、関数を実行するのでしょうか。 呼び出し規約とかで違いがありそうですが。
>>97 君が書いている処理をする関数なら書いてあるとおりの処理をするだろう
>>97 日本語でおk
まじで意味が分からん
そこまでの知識があるなら、ブレークポイントを置いてCPU窓開いてアセンブラコード見てみろよ
100 :
58 :2006/12/11(月) 02:15:58
>>60 >>89 ありがとうございます。
Classes.pasとにらめっこしながら考えたいと思います。
>>97 > var
> i: Integer;
> begin
> i := 5
最適化とその後ろのコードによる.
レジスタに乗りっぱなしかも知れないし、そもそも削除されるかもしれないし、
どっかの即値になって消えるかもしれないし、どっかでレジスタから退避されるかもしれないし
そんなの分からんがな.
> DoSomething(i);
デフォルトは fastcall だから fastcall の呼び出し規約調べれよ.
>>97 は i := 5 と DoSomething(i); がそれぞれどんな機械コードに展開されるか聞きたいってこと?
Delphi 6 ProでTheme Managerを試してみたのですが、 メインメニューの項目を動的に変更すると、Theme Manager 適用前と同じ状態になります(選択項目が凹むクラシックスタイル?)。 いかにTheme Managerでもこれはどうしようもないのでしょうか。
104 :
76 :2006/12/11(月) 10:55:52
>>89 そうです。
読み込み中はできない物なのでしょうか?
106 :
デフォルトの名無しさん :2006/12/11(月) 13:33:18
Formの中とかで、 >Frame1 := TFrame1.Create(this); >Frame2 := TFrame1.Create(this); って2回やると、コンポーネント名称が衝突してエラーになるおね? この場合、Frame1.Name = ''; とクリアしてやれば良いんですか?
>>105 あたりまえだろwww
delphiなんか使うような奴だぞ?www
>>106 そもそもその状況ではエラーにはならない。
Frame1はTFrame1型のインスタンス、
Frame2もTFrame1型のインスタンスとして扱われ、Frame1とは別のインスタンスとなっている。
いつも使っているフォームだって、implementationの上あたりでグローバル変数として宣言されてるのがわかると思う。
var
Form1: TForm1;
こんな風に。
ちなみにこの変数Form1に値を代入しているのはプロジェクトソース中の
Application.CreateForm(TForm1, Form1); の部分。
(Delphi5ではプロジェクト(P)>ソース表示(V)で確認できるけど他のバージョンはわからん。.dprを直接見てちょ)
※あとthisじゃなくてSelfな。
>>93 こんなのもあるよ。
var
F: File;
begin
AssignFile(F,'asdf.txt');
Rewrite(F);
CloseFile(F);
>>108 実行してみれば分かるけどエラーになるよ
>>110 俺はエラーにならんかったが…。まあDelphi5だしな。
>>108 Self
├Frame1
└Frame1
所有構造がこうなるからSelfの中でFrame1がドッペルゲンガーと遭遇してあぼんする。
改名して別人に成りすませばおk。
Delphianの好きなアニメを教えてください
だが断る
>>112 それってNameプロパティを直接書き換えるしか、回避方法無かったでしたっけ?
何か強引な気がして。
それと、Nameをプロパティを空文字なんかにしたら問題起きますか?
親の管理対象外になってメモリリークとか。
116 :
デフォルトの名無しさん :2006/12/11(月) 20:20:40
ある文字列をCanvas.TextOutで描画する時に、 その文字列の横幅が合計何ピクセルあるのかを知りたいのですが、 調べる方法はありますか? (例えば文字列が'abc'なら、aの左端からcの右端までで何ピクセルあるのかが知りたいです) よろしくお願いします。
>>116 Canvas.TextWidth('abc')
118 :
116 :2006/12/11(月) 20:37:13
119 :
デフォルトの名無しさん :2006/12/11(月) 22:27:15
質問です。 初期設定(定数)で、大量の配列データを記述する必要があります。 DATA[0]:= 'abc'; DATA[1]:= 'def'; DATA[2]:= 'ghi'; … といった感じです。 この行数が多いとソースの可読性が悪くなるので、 この配列DATAを別のユニット(Unit2)に独立させ、 メイン(Unit1)から参照できるようにしたいのですが、やり方が分かりません。 Unit1(メイン)のuse節にUnit2を加えるとして、 Unit2にはどのように記述すればよいでしょうか。 よろしくお願いします。
unit Unit2; interface var gData:array of string; implementation initialization setlength(gData,3) gDATA[0]:= 'abc'; gDATA[1]:= 'def'; gDATA[2]:= 'ghi'; end.
121 :
119 :2006/12/11(月) 22:36:33
>>119 >>120 の方法でも良いけど
データが大量にあるならいちいち書くのもめんどいし
データの総量が増えても対応できるように
データ本体をファイルに保管して
それを読み込んで配列に代入する関数or手続きを考えた方がよいかも…
>>71 > Filename := GetCurrentDir + '\test.txt';
実行ファイルのあるディレクトリとカレントディレクトリは同じとは限りません.
またカレントディレクトリがルートディレクトリの場合にGetCurrentDirは C:\ などと \ 付きで返してくるのでうまくいきません.
Filename := ExtractFilePath(Application.ExeName) + 'test.txt';
実行ファイルのフルパスを返すApplication.ExeNameと
フルパスからディレクトリを末尾の\付きで返すExtractFilePath関数を組み合わせることで
実行ファイルのディレクトリを取得しています.
なおコンソールアプリではApplication.ExeNameの代わりにParamStr(0)を使います.
(ウィンドウアプリでも使えます)
>>104 知らない。
モジュールを読み込んで初期化が始まる前に、コードを書き換えたいとか、
そんなの?
なんだか大変そうですねぇ〜。
125 :
76 :2006/12/11(月) 23:28:55
プロジェクトで使用しているコンポーネントや関数、手続きの一覧を出力してくれるツールはないですか?
tdump.exe
突然の質問ですみません。 TurboDelphiのインストールに必須な 「Microsoft XML Core Services (MSXML) v4.0 SP2」をインストールしようとすると、 エラーコード2755が返って来てインストールに失敗してしまいます。 解決法がないか誰か教えてもらえないでしょうか? 当方の環境はWindowsXP(SP2)です。 宜しくお願いします。
129 :
デフォルトの名無しさん :2006/12/12(火) 03:30:43
キーボードで数字の1が押下された時ってVK_1ですよね? 動作確認済みソースのVK_UPをVK_1に書き換えただけでコンパイルできないのは何故でしょうか??
>>129 Windows.pas で、VK_0〜VK_9、VK_A〜VK_Z が
定義されていないからではないかと思われ。
(D6の場合。他バージョンについては不明)
VK_1 のところを Ord('1') にすれば動くかも。
131 :
129 :2006/12/12(火) 05:26:28
>>130 ありがとうございます。
見事に動きました。
標準で定義されないって
需要少ないんですかね。
本当に助かりました。
感謝いたします
132 :
デフォルトの名無しさん :2006/12/12(火) 06:29:03
このスレでDelphiはじめて3時間・・・ プログラム経験は、なし。すこし、以前、Delphiいじって1,2回ほど適当なプログラム作ったくらい。 まだまだ、みんなの語ってる話題が未知の宇宙のように思えます。 はぁ・・・道は、遠いな。 このHPが勉強になるとかあれば紹介お願いします。
Seventh Delphi
>>132 Delphiのソコソコの知識がついたら、次はWin32を勉強しよう。
そしてVCLのソースを解析。
Windows.pasって編集して上書き保存しただけじゃ反映されないの?
ヒント: .pas → .dcu
>>135 あぁ、3時間か。てっきり3年かと思った。3時間でいきなり、
VCLのソース解析はむちゃだ。なんか、やっぱ、自分の作りたいソフト見っけて、
ソレ作りながら覚える方が俺的にはお勧め。そうしないと俺はモチベーションがもたん。
>>137 dクス
そっかソースフォルダのはあくまでもソースで
システムには参加してなかったのね。勉強になりました
俺が最初に作ったソフトは フォルダにあるファイルを自動的に指定した場所に振り分けるってやつ 自分で作った奴だから好きなようにカスタマイズ出来るし今でも使ってる
142 :
デフォルトの名無しさん :2006/12/12(火) 11:26:20
TTabSheetでポップアップメニューを使いたいと思っているのですが Bの場所ではできたのですが、タブの耳?(Aの部分)で ポップアップメニューを出すにはどうすればよいでしょうか。 ┏━┓ ┃ ┃← A ┏┛ ┗━━━━━┓ ┃ ┃ ┃ ┃ ┃ ┃← B ┃ ┃ ┃ ┃ ┗━━━━━━━━┛
TPageControl.Popupメニューにポップアップメニューを割り当てる
クラスとか継承とかオブジェクトとかの概念がいまいち理解できてないのですが、 たぶんコンポーネントとかは関係のないと思われるパスカルな単純な処理を関数にするには、 privateかpublicにprocedureじゃなくてfunctionで宣言すればいいのでしょうか?
procedureは戻り値がない functionは戻り値がある private procedure hoge; function hage : boolean;
なるほどそういう違いだったんですね。 助かりましたありがとうございます。
TListBoxのアイテム毎ではなく、アイテム内の文字ごとに Fontを変えたいの… できます?
150 :
デフォルトの名無しさん :2006/12/12(火) 21:29:02
コンポーネントの登録とコンポーネントのインストールの違いがよくわからない… あとBPL,DPK,DCU,DCPファイルもググったけどよく分からない… 誰かおおざっぱでいいので教えてもらえます?
>>150 pas (ソース)-> コンパイル -> dcu(中間ファイル)
dpk (プロジェクト) -> コンパイル -> dcp(中間ファイル) -> bpl(実行形式。DLL相当)
> コンポーネントのインストール
設計時用のパッケージ -> コンパイルしてbpl 作成 -> IDE にインストールして使えるようにする。
>>149 OwnerDrawにして自力で描写すればできる。
>>150 > コンポーネントの登録
タイプライブラリの作成のこと?
ソースからActiveXなどを使えるように、宣言ユニットを作成。
>>151 サンクスです。続けて質問で申し訳ないですが
ということはdcu,dcpは中間物であって、いらないっちゃいらないってことすね?
bplは実行形式(ダイナミックリンク)なのにIDEにインストールするの?
>>154 いえ、ヘルプのコンポーネント作成の項に
「コンポーネントの登録」ってのが出てきてたので。
>>151 > いらないっちゃいらないってことすね?
まあ基本的には。
ただしパッケージに他のパッケージを含める場合はdcp を使う必要があったような。
> bplは実行形式(ダイナミックリンク)なのにIDEにインストールするの?
起動時に全部読み込まれる。
IDEにプロパティを操作するエディタなどが作成される。
設計時パッケージは、コンポーネントをコードでCreate してプロパティを設定なら不要。
dcu,dcpは条件次第だ。パッケージをDLLのLoadLibraryみたく、明示的リンクするなら 必要ないけど、暗黙的リンクなら必要になるとか。ちょびっとややこしい。
なるほど。めちゃ参考になりました。
>>126 tdump.exeは外部の関数・クラスだけだから、マップファイルがいいかも。
161 :
デフォルトの名無しさん :2006/12/13(水) 06:29:47
>>142 Seventh Delphiのほうは、いまやってるとこと内容が同じようでした。
Flow Of Water Delphiは、GUIアプリとかのやつもあるので、BMしました。
ありがとー。
162 :
132 :2006/12/13(水) 06:42:59
http://oto.chu.jp/kujira/text/delphi/zero/index.htm ↑
ここの15番目まで完了したよ。
これ終わったら、Flow Of Water Delphiのやつやってみようと思う。
functionとかProcedureで使う、引数と変数の違いが分かりづらかったけど、
まあ、変数は、字のまんま、みんなが考えてる変数の通りで、
引数は、プログラムの本文で、プログラマーが指定して決める数って理解してていい?
たとえば、
function Sansuu(a:integer;b:integer):Integer;
begin
Result:=a+b;
Writeln(Result);
end;
begin
Sansuu(1,6);
Readln;
end.
見たいに、あとで関数を利用するときに、本文で、決められる数が引数ってことで。
最初、引数と変数ってドウ違うのか戸惑ってしまった・・・
ひきすう
Explorerから自作アプリへD&Dする方法は見つかったんですがその逆に ListViewの項目を他のアプリへD&Dするのってどうやるんですか?
そんなの相手先に依存するだろ
これどっちがおかしいの? procedure TForm1.Button1Click(Sender: TObject); var t: TDateTime; v: Variant; s: String; begin t := Now; v := t; s := DateTimeToStr(t); ShowMessage(String(v)+sLineBreak+s); end; --------------------------- Project1 --------------------------- 2006/12/13 10:21:12 2006/12/13 10:21:11 --------------------------- OK ---------------------------
エスパー求む
>>162 スコープを知るともう少し簡単に理解できるかも
それと引数には4種類あるから知っておくと良いよ(最初のうちは理解しなくてもOK)
値引数
変数引数
定数引数
デフォルト引数
TListBoxで文字ごとにフォントを変える、ですが、DrawItem イベントで TextWidth と TextOut をぐちゃっとコーディングして出来ました。サンキュス
170 :
デフォルトの名無しさん :2006/12/13(水) 12:14:00
>>166 試してないけどバリアントで精度が変わるからかね?
TDateTimeは確か小数点だし。
Rave ReportsってQuickReportと比べてどう? 機能とかバグとか作りやすさとか。 慣れればQuickReportより良いんなら使ってみようと思うんだけど。
172 :
デフォルトの名無しさん :2006/12/14(木) 07:46:01
初心者以前のインストールの段階で引っ掛かってます。
http://bdn.borland.com/article/33580 ここに
1. Windowsのスタートメニューより[スタート|プログラム|Borland Delphi 6|使用許諾コードの取得]で、使用許諾コードの取得画面が表示されます。
とありますが、 |Borland Delphi 6| が見つかりません。
他にインストールする方法が有りますでしょうか?
173 :
デフォルトの名無しさん :2006/12/14(木) 09:46:25
>>172 もれも初めて2,3日くらいの初心者だが、いちいち使用承諾とらないでも
普通に使えるから気にするな。キャンセルしたら、後で承諾をとるみたいなダイアログがでてOK
押したら、未承諾でも使える。
とりあえず、おなじくらいの時期にはじめたみたいだから、がんばろうぜ。
TImageListのWidth、Heightに収まるようにイメージ(bmp)を伸縮したいのですが TImageListに設計時ではなく実行時にイメージを追加する場合、 イメージリストエディタの「そのまま」、「引き伸ばし」、「中央に置く」に相当する操作は どこをいじればいいのでしょう。
セットアップランチャ→ Delphi 6 →キャンセル にすると 「キャンセルしますか」 と出て終了してしまいます。 セットアップランチャ→ Delphi 6 →次へ にするとキーがないので インストールできません。 ProgramFiles内にdelphiフォルダは出来ていますが、これはセットアップランチャな気がします。 ネットで落とす前に書籍付属のCDでインストールしようとしたので、 残骸が邪魔をしてるのかも知れません。 アンインストールもできないのですが、手動で引っぺがして良い物でしょうか?
OK。 レジストリも消すと良い。 HKEY_CURRENT_USER->Software->Borlandあたり。
C++BuilderでのSubStringに当たるモノってDelphiにないの?
> キーがないのでインストールできません。 これは何?インストール用のキーを持ってないの?
> キーがないのでインストールできません。 インスト用のキーと 登録用でもらえるキーは別物だぞ?
182 :
175 :2006/12/14(木) 13:42:09
bmp.Canvas.StretchDraw( Types.Rect(0,0,ImageList1.Width, ImageList1.Height), bmp ); ImageList1.Add(bmp, nil); でできました。
>>171 日本語対応に不安が。
メーカーはDelphiがUnicode化するまで
完全対応は無理と宣言しているし。
>>184 そうですか。
何か良いレポートツール無いかなぁ。
みんな何使ってるの?
186 :
デフォルトの名無しさん :2006/12/14(木) 18:37:34
インストールが成功してないの? インスト用のキーはまとめサイトのやつで普通に使えるぞ。 ただ、使用承諾のキー(インストール後)をいれようとすると、サーバーにつながらないから 出来ない。 インストール用のキーは、普通に使えるから、どっかやり方間違ってるよ。
>>185 LightReport。完全日本製
またはFastReport
コンパネにあるキーボードのプロパティで設定できる キーボードの長押しに対する一時的な制御って どうすればいいのでしょ? 単純に if key VK_* then 未処理ならスルー としても OS側がVK_*を未処理なのに全部引き受けちゃって OSがフラグ見た時には処理済になってる感じで 結局コケちってるみたいで、それを何とかしたいのですが。
良く解からんが、WM_KEYDOWN にリピートか否かの情報があるよ。
Delphiのお勧めの書籍は何かありませんか?
>>189 説明下手ですみません。
リピートという単語をど忘れしてしまってうまく表現できませんでした。
一時的にリピートを停止、あるいはインターバルを長くとるなどして
ちゃんとひとつの処理が終わってから次のキー入力を受け付ける、
みたいなことがやりたかったのでした。
WM_KEYDOWNを調べてみます。ありがとうございます。
Turbo Delphiを使用しています。 ADODataSetのConnectionStringsプロパティのデータベースに接続するためのパスが絶対参照から相対参照にする方法はありますか? ConnectionStringsプロパティのダイアログで相対参照にしようとしても、C:\Documents and Settings\ユーザー名\データベースのファイル と言うように認識するらしくうまくいきません。
Turbo Delphiをこれから 使おうとしてます 超初心者です ExplorerかProどちらを使ったほうが良いでしょうか? またこれから学習する人向けの書物とかございましたら 教えてください! お願いします!
quickreportのTQRDBTextってフィールドがnullの時はonPrintイベント発生しないんですか? nullなら別の値を表示させようとしたら華麗にスルーされました。
これから Delphi 入門はちょとつらいような・・・
>>194 超初心者ならExplorerなんじゃね?フツー
直接指定。
Win32APIヘルプのWM_KEYDOWN、keybd_eventや message.pas、windows.pas、delphiヘルプのTWMKeyを見ても 理解が及ばずどう書けばいいのか見当がつきませんでしたorz そこで、検索して見つけたコード procedure TForm1.WMKeyDown(var message: TWMKeyDown); begin if message.KeyData and $40000000 = 0 then inherited; end; をコンパイルすると Illegal character in input file: '' というErrorでコンパイルできず、行き詰ってしまいました。 たびたびすみませんが、お助けください
不正な文字が入力ファイルにある。か、なんか、他の部分に変な文字追加してない? うちではコンパイルとおるし。
>>200 全角空白
ところでD5は全角空白を赤表示してくれるがD7はしてくれないので判らないんだよな。
どこで設定するんだろ。
204 :
200 :2006/12/15(金) 20:06:11
全角空白でしたorz まったく疑いもしなかった原因で勉強になりました。 ありがとうございます
Delphi6を使っているのですが、よく専ブラにあるような 記事のタイトル|レス数|最終読み込み|最終書き込み みたいなリストボックス?でそのレス数などをクリックすればそれが昇順にならんだりするコントロールみたいのはどうやってつくればいいんですか?
TListItem
>>202 D7ってエディタオプションの不正な文字で認識してくれないの?
つか常に半角スペースを入力にIME設定すればいいと思うのは俺だけか?
>>207 デフォルトだとしてくれない。
さっき色々調べてようやくエディタのオプションで不正な文字の色が
文字色黒、背景白なんつー設定になってるのを発見した。
背景赤にして全角空白もめでたく赤表示になった。
あれ、ClientDataSetのBOFとEOFってカレントレコードが最初のレコードか最後のレコードかを 判別するプロパティじゃないんですか??? ローカルデータセットで1000件ぐらいデータ作って、グリッド上にカレントレコード変更して、 BOFかEOFかチェックしてもなんかめちゃくちゃです。 誰かお願いします。Turboです。
おさわがせしました。BOFの前、EOFの後ろにもう1個なんかあるっぽいですね。
QuadrupleDの質問もここでいいですか? WindowModeで使っていて、ユーザがフォームをリサイズしたときなどに、サイズを変更したい場合、 もう一度 WindowMode(ClientWidth, ClientHeight, []); と呼ぶだけではダメですか? 自分の環境だと、テクスチャの量に比例した時間、固まってしまったり、 一部のテクスチャが壊れてしまったり、画面にゴミがでます。
214 :
デフォルトの名無しさん :2006/12/16(土) 05:48:16
超初心者ですけど、 TListViewとか使って、ソートは一種類のみでエクセル、Accsess出力なし 表計算機能なしの DBソフトっぽいもの作りたいんですが、DB専用のコンポーネント使わないと無理ですか? なんか、pro版じゃないとDBのコンポーネントは扱えないとかWEBで見たので、どうだか 気になってます。DBデータファイルはバイナリーじゃなく普通にテキスト形式のファイルで 扱おうと思ってます。まあ、まだ、あんま頭の中でアイディア固めてないのであやふやでもうしわけない です。
>>211 TClientDataSetがグリッドの位置なんてしるかよ。
RecNoみるなり、グリッドの相対位置を教えてくれるプロパティを見ろ。
>>214 TListView使ってできるなら必要ないんじゃないの。
>>215 あほか。おまぇ。グリッドの位置なんて一言も書いてねぇよ。
219 :
デフォルトの名無しさん :2006/12/16(土) 13:40:48
ListViewとTListViewの違いってなんですか?
>>209 IDE のエディタの全角空白の件、こんな設定あるんですね。ちと便利になりました。
>>219 ListViewはコンポーネント
コンポーネントを使わずにコード上で同じような処理をしたい時に
TListViewクラスを使う
T名前は基本的にクラスの名前
>>221 レスどうもありがとうございました!
けれども、コンポーネントを使うのとコード上でやるのとはどう違うのですか?
設計時と実行時。あとプロパティやイベントなどを追加する場合。
>>218 Bof, Eof。
これが不満なら
>>215 の言うようにRecNoやキャストしてグリッドの位置をみるしかない。
自分の無能を棚にあげて、あんた失礼な人だね。
>>223 ありがとうございました。
ListViewは分かったのですが、選択したときに1列いっぺんに選択させるにはどうすればいいのですかね?
あと列のどこでも選択すればその列が選択される状態にするにはどうすればいいんですか?
自己解決しました
manifest.rcってどのようにコンパイルすればいいのですか?
C:\>brcc32 manifest.rc
>>229 最近のdelphiでは元から入ってるVCLでもxpmanifest使えばxpスタイルで表示されるよ
たぶんDelphi6なんだろう
232 :
デフォルトの名無しさん :2006/12/17(日) 08:49:26
234 :
デフォルトの名無しさん :2006/12/17(日) 13:50:43
>>233 エクスプローラー版はコンポーネントが追加できないとか不安定ときいたので…
ク ク || プ / ク ク || プ / ス ク ス _ | | │ //. ス ク ス _ | | │ // / ス ─ | | ッ // / ス ─ | | ッ // / _____ // / // . / l⌒l l⌒l \ )) ____ . / / ̄| ,=| |=、| ̄ヾ / ____ヽ / ̄/ ̄. ー'●ー'  ̄l ̄ | | /, −、, -、l )) | ̄l ̄ ̄ __ |.  ̄l ̄.| _| -| ,=|=、 || |. ̄| ̄ ̄ `Y⌒l__ ̄ノ ̄ (6. ー っ-´、} ヽ ヽ 人_( ヾ ヽ `Y⌒l_ノ >〓〓〓〓〓〓-イ /ヽ 人_( ヽ / / Θ ヽ| /  ̄ ̄ ̄ ヽ-イ
237 :
デフォルトの名無しさん :2006/12/17(日) 14:25:33
>>229 無理だと思う。
ビジュアルスタイル対応コンポーネントはいろいろあるから試してみたら?
>>234 賢明な選択w
239 :
デフォルトの名無しさん :2006/12/17(日) 15:07:14
メインフォームからフォームA を ShowModal 後、すぐにフォームA を 非表示にしてフォームB を ShowModal する必要があります。 これを実現するために、フォームA の OnShow イベントでフォームA の Visible を False にしてフォームB へ ShowModal したいのですが、 フォームA.Visible := False; のところでエラーとなります。 どのように非表示にすれば良いか分かりますでしょうか。(できれば フォームA は見えない方が見栄えが良いのですが)Delphi7proです。
>(できればフォームA は見えない方が見栄えが良いのですが フォームAもShowModalする理由がわからん 見えないほうがいいならいきなりフォームBを表示すればいいのい
241 :
デフォルトの名無しさん :2006/12/17(日) 15:20:17
>>240 おっしゃる通りです。ちとはしょって書いてしまいましたが、
メインフォームから フォームA に行く場合と B に行く場合がありまして、
B に行った場合、フォームを閉じたら A を表示させたいのです。
フォームXに「行く」ってどういう意味だ? あとエラーの内容くらい書け。
procedure MainForm.FormBにいく; begin FormB.ShowModal; FormA.ShowModal; end;
245 :
デフォルトの名無しさん :2006/12/17(日) 15:58:01
>>242 エラーは「OnShow/OnHide イベントの処理中は表示状態の変更はできません.」
です。書きもれていましてすみません。また、「行く」とはShowModalで
制御を渡すという意味で使いました。一般的ではない言葉でしょうか。
>>244 ありがとうございます。この方法で正常に制御が渡せました。ただ少し
フォームが見えてしまいますので、
>>243 さんのやり方も検討したいと思います。
そもそも画面遷移のロジックをフォーム側に持たせるのがおかしいと思うけど。
Proを買うなら、TurboDelphiとDelphiどっちがいいんですか?
>>245 FormAからFormBを呼び出して自身を消す手もあるね
質問するならもうちょっと具体的に状況説明したほうがいいと思うよ
>>236 見に行ったのですが、英語で使い方がいまいちよくわからんでした・・・^^;
クラスのメソッドに class とつけるのは、Javaでいう static みたいなものでしょうか。 これを利用して、クラス名を名前空間のように使うこともありますか?
あるよ
Vista RC1にTurboExplorerをインストールしてみたいのですが無理なのでしょうか? ホームディレクトリと思われる所にreg736.txtを置くのですが、 シリアルナンバーを求められます。 認証ファイルを置くべき位置をご存じの方がいらっしゃいましたら教えていただけませんでしょうか。宜しくお願いします。
254 :
デフォルトの名無しさん :2006/12/17(日) 23:59:49
あるけど、ほとんど使わない。 Delphi ではユニット名そのものが名前空間になるし、クラスと関係ない 関数も定義できるから。
>>253 使用許諾マネージャでreg736.txt読み込んでみれば?
256 :
sage :2006/12/18(月) 01:31:33
>>255 ありがとうございました。動きました。
参考にならないかもしれませんが、Vistaのスタート>すべてのプログラム>Borland Developer Studio2006>ツール>使用許諾マネージャで読み込めました。
最初reg736.txtはTurboExplorer発表時に発行したものを使っていたのですが、
再度取り直したものをドキュメントと同じ階層に置きました。
摺りガラスのようなエアロ効果新鮮っす。
Form2の表示について教えてください。 unit2 をusesに追加した後ボタンのクリックイベントに Form2.showという風にしても表示されません。 後何をすればいいんでしょうか?
コンパイル、実行してクリックする。
259 :
デフォルトの名無しさん :2006/12/18(月) 19:43:01
>>247 ヴァージョンかけ
>>251 unit HogeUnit;
interface
const
Hoge = 1234;
とした場合、
HogeUnit.Hoge
と参照できるからなー、ほとんどいらん。
260 :
257 :2006/12/18(月) 20:02:50
TurboDelphiです。
create してないとかw
263 :
257 :2006/12/18(月) 20:40:01
すいません、今やったらすんなりと出来ました。 失礼しました。なにが悪かったんだろう?
264 :
デフォルトの名無しさん :2006/12/18(月) 21:22:43
StringGridでColCountプロパティに10を指定しています。 で、プログラムで間違えて for i := 0 to 99 do StringGrid1.Cells[i,0] := IntToStr(i); としてしまいました。99をColCount-1にすべきだったのですが 上記のロジックでもうまく?動作しているようです。これはこれで 大丈夫なものなのでしょうか。
>>259 Delphi7くらいまでだと、ユニットって入力補完効いたっけ?
というわけで、俺は確実に入力補完が効くクラス.クラスメソッドが好き。
266 :
200 :2006/12/18(月) 22:40:48
>>200 のコードなのですが、これは
WM_KEYDOWN
http://yokohama.cool.ne.jp/chokuto/urawaza/message/WM_KEYDOWN.html の30ビット目を参照してオートリピートを判断してるんですよね?
$40000000を2進数にすると31桁(1000000000000000000000000000000)です。
また、別のサンプルで、24ビット目の拡張キーを参照し判断する場合、
$1000000(2進数だと25桁の1000000000000000000000000)とありました。
何故、30ビットで31桁、24ビットで25桁なのか腑に落ちません。
そういうもんだ、と暗記してしまえば済むことなのですが、
どなたかご存知の方いらっしゃいましたら教えていただけないでしょうか?
よろしくお願いいたします。
たんに最小ビットをゼロビットと言うからでしょ。
>>266 あのな。先頭ビットを0としてんじゃん。よって、
>>の30ビット目を参照してオートリピートを判断してるんですよね?
は31ビットめもしくは、先頭をビット0としたときのビット30ってこと。
269 :
268 :2006/12/18(月) 23:01:59
ダイアログを表示させようとして、Delphiの新規作成の標準ダイアログというテンプレを使ってやっているのですが、 Dialog.show; で表示させたダイアログはどのように終了させるのですか? Dialog.Close; Dialog.Hide; Dialog.Release; の3つくらい調べてて出てきたのですが、CloseとHideとReleaseの違いがわかりません。
>>264 ソースちょっと見たけど良く解からないから、トレースしてみて。
でも、ColCount-1とやるべきだろうね。
272 :
200 :2006/12/18(月) 23:42:44
あ、そういう考え方だったのですね。 配列の10個目を見る時にarray[9]ってするみたいな感覚なのか。 スッキリしました!ありがとうございます。
それはケースバイケースだろう。
ttp://pc8.2ch.net/test/read.cgi/tech/1162262669/l50 では、最下位ビット0ってなってるから、ビット30は「31番目のビット」ってことで。
後、Delphiでは何も配列の最初の要素の添え字は0になるとは限らんし、
a: array [ 1..10 ] of DataTypeで宣言されていたら、
10個目はまさしく、a[10]だが、
a: array [ 0..9 ] of DataTypeと宣言されてたら、
a[9]になるわけで、ただの言葉というか表現の違いだけだろーーーーーーーーーー。
よくURLが書いてあるラベルをクリックするとデフォルト用のブラウザとして設定されてるブラウザを起動させて(すでに起動してある場合はブラウザをアクティブにして)指定されたURLのページを開くっていう機能があるじゃないですか あれってどうやって実現してるんでしょうか?
api
ごめん、DelphianWorldの適当なコンポを拾って解析したらわかった
>>270 Close→閉じる
Hide→隠す
Release→解放
procedure TForm1.Button1Click(Sender: TObject); var i:integer; begin for i:=1 to 10 do begin Memo1.Lines[i]:=IntToStr(i); end; これを実行したら、Memo1の一行目にしか表示されないんだけど、 Memo1の行全体に 1 2 3 4 5 とか表示させるにはどうしたらいいでしょうか?
Linesがいつ10行に設定されてんだよとか思わない? TStringsのプロパティとメソッドをヘルプで調べてご覧
procedure TForm1.Button1Click(Sender: TObject); var i: Integer; begin for i := 1 to 5 do Memo1.Liens.Add(IntToStr(i)); end;
つまりMemo1.Lines.Add(IntToStr(i)); 逆にするならMemo1.Lines.Insert(0,IntToStr(i));
やっちゃった・・・
TLabelとTStaticTextってどう使い分けるといいんでしょうかね? 継承元が違うってのは分かるんだけど、具体的なシュチュエーションが思い浮かばん…
TStaticTextはウィンドウハンドルを持ってるから フォームの最前面に表示したい場合などに使える (ラベルが特定条件で隠れるUIが良いかどうかは置いといて) あとは・・・枠を表示出来たり、D&Dで移動する事が出来たり、 実用的じゃないなw
>>278 HideとCloseの違いについてはわかりました。
CloseとReleaseの違いについてなんですが、特に関数やらを定義していなければReleaseではなくCloseでいいのですか?
それとも、Releaseで閉じたほうがいいんですか?
>>285 ウィンドウハンドルを持っているコントロールの下にラベルを置いて文字列を表示しようとすると
ラベルの文字列が隠れてどうしようもない場合に使ってみる。
$quot;を ' に置き換えたいんですけど、クォートってどう書いたらいいの?
' '' '
>>287 Closeメソッドはフォームを破棄するときにいろいろ配慮してくれるので、
普通はCloseでいい。
>>270 ,287
Hide…常に隠す
Close…
・メインフォーム…プログラムを終了する
・サブフォーム…隠す(ただしOnCloseイベントで変更可能)
・MDIの子フォーム…最小化する(同上)
Release…解放(破壊)
Releaseメソッドは実行時に生成したフォームを解放するときにFreeの代わりに使います.
dlg := TMyDialog.Create(nil);
try
dlg.ShowModal;
finally
dlg.Free;
end;
>>274 ・usesにShellApiユニットを追加
・URLを書いたラベルなどをフォームに貼る
・そのラベルのイベントハンドラに以下のようなコードを貼る.
ShellExecute(Handle, 'OPEN', '
http://pc8.2ch.net/tech/ ', '', '', SW_SHOW);
>>292 > Releaseメソッドは実行時に生成したフォームを解放するときにFreeの代わりに使います.
微妙に使い分けが要る。
Mastering Delphiなんかを見るとFreeでいいとかなってる。
実際に問題になるのは、メインウインドウのOnDestroyの中で他のウインドウを消すとき、
Releaseだと例外を発生することがあった。
その場合、Releaseの後にApplication.Processmessages()をかませると例外がでなかったので、
どうやらタイミングの問題があるらしい。
まあとにかくFreeが無難だと思う。
基本的にフォームのハンドラで自フォームを廃棄したいときのみReleaseを使えばいいと思われ。
Free 他殺 Release 自殺
分かりやすい
Free 即死 Release 悶絶死
↑いやな例えだなw
デスクトップ(色んなウインドウのトップ)に指定した長方形を書きたいのですが どのようにすればよいのでしょうか?
要するに、サブフォーム上のボタンを押してそのサブフォーム自身を閉じる場合は 自殺のReleaseで、メインフォームからサブフォームを消すときはFreeを使うってことですかね? んで、サブフォームをCloseすることはHideすることと同じってことですか?
デフォルトではそう。OnClose イベントで自動で Free に設定することもできる。
文字列の質問です。 マニュアルによると、長い文字列(AnsiString),ワイド文字列(WideString)型の変数は動的に割り当て られたメモリブロックへのポインタで、文字列が空(長さ0)の時は、メモリブロックは割り当てられず、nil になるとあるので、以下のコードを試したました。 var S: string; begin S := ''; if PAnsiChar(S) = nil then ShowMessage('nil'); Sの型がAnsiStringの時は確かにnilになるのですが、WideStringの時は、nilになりません。 これはマニュアルがバグってるのでしょうか?コンパイラがばくってるのでしょうか?? 環境はTurboです。
302です。 訂正です。AnsiString、WideString共にnilになりませんでした。 というより、Assignedや<>nilでチェックすればいいようですね。 頭がこんがらがってきた。以前、ここであがったassignedの記事を読みましたが、 理解不能です。 ためしに、 var P: Pointer; begin P := nil; if P = nil then ShowMessage('nil') だとチェックできますね。
ローカルに置いてあるHTMLのフォームから HTTPリクエストを同じフォルダのアプリケーションに飛ばして、 ファイル書き込みをやらせようとしています。 TCGIApplicationあたりを使ってそれらしいものを作ってみたのですが、 実際ブラウザでHTMLを開いてsubmitしてみたら、 なぜかアプリケーションのダウンロードになってしまいました。 作り方が悪いのでしょうか?それともDelphiでは不可能なんでしょうか? 環境はTurbo Delphi Explorerです。
>>303 PAnsiCharじゃなくてPointerでキャストすればOK
最近Delphiを始めた初心者です。 FolderList: TStrings; は定義、Create済み var Count: Integer; DriveName: PChar; SearchRec: TSearchRec; begin Count:= 0; GetMem(DriveName, 4); StrCopy(DriveName, PChar(Drive + ':\')); if (FindFirst(DriveName+'*', faDirectory, SearchRec) = 0) then begin repeat Inc(Count); FolderList.Add(DriveName + SearchRec.Name + '\'); until (FindNext(SearchRec) <> 0); end; FreeMem(DriveName); end; こんなプログラムでフォルダ検索をしようとしているのですが、フォルダは検索できたものの、 フォルダでないもの '*.txt' や '*.csv' などがいくつか引っかかってしまいます。 どうしたらこのような問題を回避できるのでしょうか? フォルダにも '.' が使われた名前があるケースも考えられるので、単純に '.' 入りのものを弾くなどはしたくありません。 どなたかご指導のほど、よろしくお願い致します。
スペースつぶれてコード見づらいですね。 var Count: Integer; DriveName: PChar; SearchRec: TSearchRec; begin Count:= 0; GetMem(DriveName, 4); StrCopy(DriveName, PChar(Drive + ':\')); if (FindFirst(DriveName+'*', faDirectory, SearchRec) = 0) then begin repeat Inc(Count); FolderList.Add(DriveName + SearchRec.Name + '\'); until (FindNext(SearchRec) <> 0); end; FreeMem(DriveName); end;
((SearchRec.Attr and faDirectory) <> 0)が真ならディレクトリだから ループ中にこれで判別できると思う。カレントディレクトリの「.」とか「..」は自前ではじくしかないかな
repeatループ内で if (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then これで.と..を弾いて if SearchRec.Attr = faDirectory then これでディレクトリだけ引っ張ってこれるよ
>>308-309 様
素早いレス、ありがとうございました。
仰る通りの方法で回避することができました。
それにしても FindFirst の faフラグの実装は謎ですね。
検索後に更に判定が必要とは・・・
とても勉強になりました。ありがとうございます。
>>310 faDirectory有:無属性とフォルダが列挙
faDirectory無:無属性を列挙
無属性のファイルはフラグとは関係なしに列挙される。
それに加えてフラグで指定した物も列挙される。
>>311 様
なるほどそういう仕組みだったのですね。
ありがとうございました。
313 :
デフォルトの名無しさん :2006/12/20(水) 18:53:01
ホントにホントに初心者的な質問ですみませんが、 IntraWebで作ったアプリはインターネットに公開して 動作させることができるのでしょうか? Delphi7のEnterprise版を使用しています。
つい最近Delphiをインスコしたばかりの漏れは、とりあえず他の人の作ったソフトのソースを見てみてるんだけど、 TEditorなるものが必要らしいソフトがあって、TEditorをインスコしようとしたんだけど、 コンポーネントのインストールの段階で、 [致命的エラー] HEDITREG.PAS(19): ファイル 'DsgnIntf.dcu' が見つかりません って弾かれちゃう(´・ω・`) 多分漏れがDelphiの基本を理解していないからなんだろうけど、何か解決策あったら教えて。 ちなみにXPでDelphi6 Personalを使ってるお。
HelpでDsgnIntfで検索→DsgnIntf の名前変更および関連する変更
他のアプリのメッセージ(WM_ERASEBKGND)を横取りしたいのですが どのようにすればよいのでしょうか?
フック
インラインアセンブラでxmmレジスタを保存する必要はありますか?
D5でPARADOX+BDEで作ったアプリがキー違反で悩まされています。 6年ほど前に作りずっと安定して動いていたのですが最近キー違反が多発するようになりました。 主キーはautoinc型で2次インデックスに無重複の物が1つあります。 post前にデバッガで2次インデックスで使われているフィールドの値をチェックして 重複していないのにpostするとキー違反になるので何が何だか判りません。 テーブルを作り直してみたのですが直りませんでした。 エラーメッセージがキー違反ですとしか出ないのでエラーの詳細を調べる方法とか キー違反で考えられる原因とか有りましたら教えてください。
>>323 1万レコードくらいです。
以前は10万レコードくらい有ったときもありました。
try except on E: Exception do ShowMessage(E.Message); end で例外メッセージを詳しく捕まえるとか あと、インデックスが壊れてる場合にキー違反が出ることあるって聞いた
>>324 Paradoxでテーブルの修復はためした?
ためすと重複してるレコードを抽出してくれるよ。
>>325 ありがとうございます。試してみます。
>>326 TUTIL32を使った修復ツールを作っていて普段はそれで直るのですが今回はそれがメッセージもなく落ちてしまって
使えなかったのでテーブルを作り直しました。
でもその後に修復をかけて成功しても再発するのです。
DVD等を再生している動画の白を採取したいのですが GetDCではうまくいきません。 何かよい方法は無いものでしょうか?
>>328 ×白
○色
どうぞよろしくお願いします。
330 :
デフォルトの名無しさん :2006/12/21(木) 16:38:40
>>328 デジャブ?
DVDとかメディアプレイヤーは、オーバーレイを使ってるから、GetDCでは無理。
どうしてもやりたかったら、先にメディアプレイヤーで動画再生しておいて、
DVDを再生すると、後に再生する方は、オーバーレイを使えないのでできるはず。
スマートじゃないけどな。
Masks.dcuを使っているソースをコンパイルしたいのですが、 Delphi6 Personalには、Masks.dcuが付いていないようなのです。 何か代用できるものってありませんか?
>>331 体験版からdcuを抜くとか出来ないの?
334 :
333 :2006/12/21(木) 20:39:44
Pdxrbld でした orz
335 :
331 :2006/12/21(木) 22:12:14
>>332 ありがとうございます。抜くことはできました。
ただ、今度は「Masks.pas」が無いと怒られましたorz
>>331 TurboDelphiのMasks.pasを適当な別の場所にコピーして、
D6のライブラリパスにコピーした場所を追加してみたら?
ライセンス的に疑問が残るが。
お、お前ら鬼だ。 俺は今、鬼を見てるぅー。
>>335 素直にTurbe Delphiに以降しる
339 :
デフォルトの名無しさん :2006/12/21(木) 23:37:17
超初心者なんですが・・・質問させてください。 あるファイル(名前をData.dat、中身はテキスト形式で一行目に番号、2行目に名前、3行目に性別) が数十人繰り返し書いてあるファイルを、一行づつLoadしていき、各行でレコード型の変数に 代入していく手続き?(または関数)って、どうすればできますか? だれか、教えて>< procedure TForm1.TextOperation; var Doc: TStringList; Ws: WideString; begin if not FileExists('C:\Program Files\Borland\Delphi6\Projects\製作ソフト\recoad.dat') then ShowMessage('データファイルが見つかりません'); Doc := TStringList.Create; Doc.LoadFromFile('C:\Program Files\Borland\Delphi6\Projects\製作ソフト\recoad.dat'); Ws := Doc.Text; ShowMessage(Ws); doc.Free; end; と書いて、ロードした中身確認したところ、recoad.datの全ての行を読み込んで一個の変数に格納してしまい ました・・・・orz。ファイルの一行づつロードして、一行目をレコード型変数の[1,A]で二行目を[1,B]で 3行目を[1,C]で4行目を[2,A]で5行目を[2,B]・・・・・・・とやっていきたいんです。
Doc[行番号] で、その行の文字列を得られる。
俺はプログラムを書く前にどういうことをしたいのか日本語でコメント行に書くよ //StringListを生成する //ファイルを読み込む //1行目をHoge[1,1]に代入する //2行目をHoge[1,2]に代入する //x行目をHoge[ここは自分で考えよう]に代入する
>>341 それは超初心者だけにしておけ。
コードを変えるたびにコメントを変える羽目になる。
失敗すると無関係なコメントが残って被害甚大。
>>341 コメントにせずにやるべきことを書けばいいんだよ
そこを実装するときに消していくんだ
そうすればすべきことをしない限りコンパイルを通らん
delphiごときにコメントなんぞいらん
345 :
341 :2006/12/22(金) 00:08:38
すまん、
>>339 が超初心者っていうからそれにあわせて答えたつもりだった
いまは頭の中で思いながらコード化してる
>>345 了解。
そういえばToDo なんてのもあるけど、使ってる?
まぁ、342は適当にコメントの中身考えたと思うけど、コメントの中身の悪い例だな。 //StringListを生成する List := TStringList.Create; なんて、コード見れば、TStringListのインスタンスを生成してるのは、誰にでも わかることで、コメント書くなら何のためにインスタンスを生成したかとか書くべきだ。 とどっかで読んだような気がする。
俺はただ単純に自分が何するか分かるようにってことだと思ったんだけどそう言うことじゃないのか・・・
自分で実装するなら書かないな、実装後コメント残す事はあっても。
コメントは誰が読むかを意識するべきであって 誰もが読む文学とは違う
俺のプルグラムはコメントは少ないが、関数ヘッダー(関数名や概要・引数)?みたいのを付けてしまった。 とりあえず、今のアプリはヘッダー消すのも面倒だから、とりあえず、付けてる。 おかげで、俺のプログラムの3分の1くらいの行数は関数ヘッダーで占められてる。 消してぇ。
Perlがあれば整形楽ちん ついでにdoxygenか類似ツールを導入すればドキュメント管理にもなる
QDでDirectShowも可能?
355 :
303 :2006/12/22(金) 06:27:36
>>305 さんの言う通りにPointerでキャストすればいけました。
で、色々調べたら、PointerへのキャストとPCharへのキャストで、文字列が空の時
次のような違いがあるっぽいですね。
C言語で書くと
char^ p1 = null;
char[] p2 = { '\0' };
って、C言語の正確な構文忘れましたが、上記のようなイメージで、
Delphiの文字列は空の時に、Pointerだと上、PCharだと下の状態になるっぽいですね。
今ごろ知った。orz
「何をやってるか」はソースから読めないとおかしくて、 コメントとソースが食い違ってるとどっちが正しいのかわからなくなる。 「何のためにやってるか」をコメントするならOKだけど、 それを意味付けして命名するとそのコメントも消せるようになる。 関数ヘッダは、cvsとかで管理されてたら全く要らない。 JavaDocみたいに抽出する場合もあるかも知れんが、 内容と合ってないと気づいた分は消すだけでもしないとな。 特に多人数開発で、コピペで体裁だけ整えて間違ったまま放置とかされるとうざい。 関数コピペしてヘッダごとコピペされるとか、 コピー先にあわせて修正したのにヘッダがそのままとか良くあったよ。
コピペでじゃんじゃん重複コードを製造してるような所もあるからな。 ま、確かに速いし、仕事してるっぽいんだけど そういうコードを長年保守して使おうとか考えちゃうのが考え物。
>>355 そらそうよ
PChar(PAnsiChar)やPWideCharはCの文字列と同じで
ヌル文字列を末尾に必ず付加するからな
ありがとうございます。その続きなんですが、Win32APIで文字列返す関数のバッファとして、 stringやWideStringを使いたいのですが、その時は、どうすればいいのでしょうか?? もちろん、呼ぶWin32APIは末尾のNULL文字の分のバッファも要求してきます。 で、Win32APIがNULL文字分のバッファだけが必要なとき、 SetLength(S, 0); Win32API(PChar(S)) で、オッケーでしょうか?Sの長さは0だけど、PCharとして、キャストしたので、 1バイト分だけ確保されたと考えても差し支えないでしょうか??
文字列のバッファにString型を使いたい場合は ↓こんな感じで(あんまりお勧めしないけど) procedure TForm1.Button3Click(Sender: TObject); var buff: String; Len: Cardinal; begin Len := 256; buff := StringOfChar(#0, 256); GetUserName(PChar(buff), Len); ShowMessage(buff); end;
361 :
デフォルトの名無しさん :2006/12/22(金) 12:15:37
ButtonをClickすると新しいウィンドが開いて、 そこに保存してあるtxtファイルを表示させたいんですがどうすればよいでしょうか?
TForm2.Create(Self).Memo1.LoadFromFile(FileName);
363 :
339 :2006/12/22(金) 15:10:25
>>340 >>341 その他の人アドバイスありがとうです。
参考にします。
コメントをコードよりさきに書いといたらやりやすいってのはちょっと納得してしまいました。
>>361 おれの書いてるコードが少し参考になるよ。あれは、新しいウィンドウが出てきてそこにテキストファイル
の内容がフォーム上に出てくるけど。
TStringListは末尾に自動で改行コード付加するのにはまいったなぁ。 GetTextStrをオーバーライドするTOhMyGreateStringListでも作るかなぁ。
いや、やっぱ、Saveするときだけ、独自の関数かますか。。
TStringStreamってなんだ誰も使わないんだろうな
聞いたこともないな。
369 :
デフォルトの名無しさん :2006/12/23(土) 15:19:40
torbo delphi と torbo delpji for net インストールするならどっち? すみません。こんな中途半端な質問で・・・。
>>369 vista→torbo delpji for net
vista以外→torbo delphi
とturbo使ってない俺が逝ってみる
371 :
デフォルトの名無しさん :2006/12/23(土) 15:30:56
ありがとうございます。 では,今後を考えると,for net なのでしょうか。
>>371 7割方期待が占めてる
ホントの所は作る物次第
373 :
デフォルトの名無しさん :2006/12/23(土) 15:42:10
ありがとうございました。 turbo delphi for net をインストールします。
BDS持ってるが、Delphi .NETって使ったこと無いんだけど、 これってGCなの?
.NETである自体で、GC .NETアプリは言語によらず、CLR上で動作し、GC
win32のほうがいいよ。Delphi使うなら。
>>376 うん、TStringStreamの方。
便利げなんだが、何故かあんまり使われているという話をきかない。
つか、TTextStreamってなんじゃらほい
380 :
デフォルトの名無しさん :2006/12/23(土) 21:01:35
delphiするので,win32の方にしますが,delphi6よりturbo delphiが 良いんですよね(いずれも無償Ver)
>380 標準以外のコンポーネントを使いたいならD6、標準だけでいいならTurbo Explorerで。
382 :
デフォルトの名無しさん :2006/12/23(土) 21:47:33
ありがとうございました。
>>380 ヘルプがしっかりしていて動作が軽快でバグが少ない D6 の方を勧めるよ。
VistaだとDelphi6のヘルプは起動しない。
>>379 エンコードやデコード、暗号とかの変換系で
stringから変換するときに使った。
いったんTMemoryStreamに渡すよりも読みやすい。
>>385 TTextStreamのこと?
なんかDelphi7のヘルプを見ても、TTextStreamって載ってないんだよね
delphi5のプロフェッショナルを使っているのですが、 ADOコンポーネントを追加したいのです。 delphi5用のADOコンポーネントは入手可能でしょうか?。
Delphiでプロセスメモリの読み書きはできますか?ざっと探してみたんですが 俺が馬鹿なので有力なのが見つかりませんでした・・・。 ありましたら、教えていただければと思います。。
>vista→torbo delpji for net >vista以外→torbo delphi えー? そうなの? Vistaってネイティブ動かんの??
>>388 違うプロセスを弄ったことが無いのでよくわからんけど、
ReadProcessMemory, WriteProcessMemory, CreateToolhelp32Snapshot
などのAPI関数名とDelphiをくっ付けてググればいろいろ出てくるんではないかと。
>>389 VCで作られている某ファイラもVista上ではまともに動かないそうで、
Vista上でWin32用アプリを動かすのはなかなか難しいようだ。
392 :
デフォルトの名無しさん :2006/12/24(日) 08:10:30
う・・・またまた、質問です。ちなみに超初心者です。
TlistViewでViewスタイルvsReportにしてて
________________________________________________________________________________________________
番号__|名前_____________________________|年齢|性別|備考_____________________|
________|____________________________________|______|______|____________________________|
________|____________________________________|______|______|____________________________|
________|____________________________________|______|______|____________________________|
________|____________________________________|______|______|____________________________|
________|____________________________________|______|______|____________________________|
________|____________________________________|______|______|____________________________|
________|____________________________________|______|______|____________________________|
________|____________________________________|______|______|____________________________|
________|____________________________________|______|______|____________________________|
________|____________________________________|______|______|____________________________|
________|____________________________________|______|______|____________________________|
________|____________________________________|______|______|____________________________|
って空のTListViewがあるわけですが。。。
前もってレコード変数に代入してるperson[0].bangou とかperson[0].nameとかperson[0].ageとかPerson[0].genderとか
person[0].other......以降 person[1].bangou.....とつづく
のデーターをこのListViewのセルに入れたいのです。
TListView + Delphiでググって調べて
http://totonica.s41.xrea.com/blog/log/eid229.html#sequel のようなサイトとか読んだのですが、よく分からなかったでした。
だれか、教えてください。
var NewItem: TListItem; I: Integer; begin ListView.Items.BeginUpdate; try ListView.Items.Clear; for I := 0 to RecordCount - 1 do begin NewItem := ListView.Items.Add; NewItem.Caption := person[I].bangou; NewItem.SubItems.Add(person[I].name); NewItem.SubItems.Add(person[I].age); NewItem.SubItems.Add(person[I].gender); end; finally ListView.Items.EndUpdate; end; end;
>Vista上でWin32用アプリを動かすのはなかなか難しいようだ。 マジでつか!? Vistaで正常に動かすにはVista対応Delphiのリリースまで待たなくてはならないんでつか?
お初にお目にかかります。 TChartを使ってグラフを表示しているのですが、 起動直後にポップアップメニューのメニューアイテムクリックイベントで Chart2.BottomAxis.Maximum:=strtointdef(inputbox('最大値入力','最大値を入力してください。','100'),100); としても最大値に変化が無く一旦Chart2を右ドラッグするとこのメソッドが適応されるようです。 検索ワードでもいいのでどなたか教えていただけませんか? 環境はD5 Ent+UP2 + XP
397 :
396 :2006/12/24(日) 16:21:02
訂正 XP→XP SP2
TChartのことなんて知らんがな。 最大値を変えた後、とりあえず、TChartのUpdateか、Invlidateか、repaintメソッド呼んでだら、どうなる?
>>392 > Person[0].gender
政治的に正しいレコード型かww
>>393 RecordCountが「未定義の識別子」になる悪寒。
401 :
392 :2006/12/25(月) 07:00:46
>>400 Person[0].sexとしてほしかったのか・・・w たしかにResordCountでエラーになるよ。 そこの部分は省いて、 NewItem.SubItems.Add(person[I].name); NewItem.SubItems.Add(person[I].age); NewItem.SubItems.Add(person[I].gender); だけ、付け加えても、えらーにはならなかったけど、ListViewになにも表示されてなかった 空のまんま。どうやったらいいでしょう・・・
おいおい、RecordCountって名前見りゃ何だか判断できるだろ。 君の問題はリストビューに項目を追加することだろ??for文の使い方まで、教えなきゃいけないのか。 適切に置き換えろよ。
405 :
デフォルトの名無しさん :2006/12/25(月) 16:52:22
>>399 それやると、たとえばフォームの状態を復元する
既存コンポーネントとかと互換性がなくなるよね。
407 :
デフォルトの名無しさん :2006/12/26(火) 01:51:19
いわゆるスキンを実装しようと考えています。 BMP、WAV、TXTの3種類のファイル群を EXEとは別にスキンファイルとしてひとつにまとめ 実行時はメモリ内部にスキンファイルを展開し TBitmap、TImagelist、SndPlaySound、SND_ASYNCなどで処理する、 という流れを考えているのですが、実際これをやるには どのあたりの知識が必要でしょうか、ヒントください。 雛形になる、というか参考になるソースってありますでしょうか? よろしくお願いいたします。
408 :
デフォルトの名無しさん :2006/12/26(火) 02:07:14
409 :
デフォルトの名無しさん :2006/12/26(火) 02:09:05
410 :
デフォルトの名無しさん :2006/12/26(火) 02:10:58
SXSkinComponents v.1.1.0 がデモみるかぎりよさそうだな・・・
そうかコンポーネントか! その発想、選択肢はありませんでした。 ありがとうございます。勉強してきます。
412 :
デフォルトの名無しさん :2006/12/26(火) 02:52:59
コンポーネントのソースを見て実装という手もあるので、いかようにでも
ですね。都合により標準設定でコンパイルできるようにしたいので ソースで勉強して実装したいと思います。
>AppWinFixをIDEにパッケージインストールしたとたん Delphi自体が、Vista対応挙動にして藁太ですが。 kwsk
Delphi6mEnterpriseを使用してソフトを作っています。 指定した入力が入るまでBEEP音を鳴動させようと windowsAPIのBeepを使用しました。 リファレンスでは、第二引数の値を「-1」にすると 非同期で動作し再度コールされるまでBEEP音が鳴動するとかいてありました、 引数を「-1」にするとコンパイルエラーが発生します。 そこで、最新のリファレンスをみるとその部分の記述が消えていました。 上記のようなことを実現したいのですが、方法がありましたお教え頂けませんか。
DWord(-1)とか
417 :
デフォルトの名無しさん :2006/12/26(火) 11:22:57
var M := TMemoryStream ; begin M := TMemoryStream.Create ; M.LoadFromFile('test.wav') ; SndPlaySound(PChar(M), SND_ASYNC) ; end; コンパイルは通ったのですがtest.wavが鳴りません。単純に SndPlaySound(PChar(test.wav), SND_ASYNC) ; とすれば鳴りますが、一旦メモリにプールしたいんですよね。 TMemoryStreamの使い方が間違ってるのでしょうか?
>>417 思いっきり間違っとる
オブジェクト指向の勉強をまずしたほうがいいな
クラスと配列は全然違う
TMemoryStreamの内容は、Memoryプロパティだ。
M.Memory SND_MEMORY
ありがとうございました!! SndPlaySound(PChar(M.Memory), SND_MEMORY or SND_ASYNC) ; に書き直すことでtest.wavの再生に成功しました。 本当に助かりました。ありがとうございます。
横から失礼。 M.Free; しなくてもいいの?
Delphiのコンパイラオプションのデバックオプションのデバッグ情報やローカルシンボル情報の オプションはリリースするときもチェックついたままでよろしいのでしょうか?? ヘルプによると、dcuファイルはこれらの影響を受けるような事が書いてありますが、 生成されるEXEも影響を受けるんでしょうか?
>>421 すみません。M.Free;は質問した時点で書き忘れていました。ご指摘ありがとうございます。
>>420 ちなみに最初のパラメータはキャストしなくてもOKです.
TMemoryStream.Memoryはpointer型(汎用のポインター型)で,これは
あらゆるポインター型の変数(とパラメータ)に代入できるからです.
>>422 それらのオプションでは影響を受けないと思われます.
(少なくとも手持ちのDelphi 5は)
ヘルプの説明にに『実行ファイル』という言葉があったと思います.
これは簡単に言うと .exe ファイルのことです.
(厳密には .exe でない実行ファイルも存在します)
ゲームパッドで自由に音が鳴らせるアプリを組みました。
音は出るようになったんですが、
微妙なタイムラグが気になって仕方がないです。
ソースは
ttp://codezine.jp/a/article.aspx?aid=172 を参考にしました。
midiOutShortMsgを使っています。Sleepは使っていません。
Timerでintervalを1で使っています。
タイムラグ0は物理的に不可能と思うんですが、もっとレスポンスのいい方法はないでしょうか?
あなたの使ってるMIDI音源はソフトウェアですか、ハードウェアですか? ソフトウェアなら、どうしても発音が遅れます。
ソフトウェアMIDIです。Windows付属の
Delphiのエディタのマウス右メニューに コピペ機能を使えるようにするツールが昔あった記憶があるのですが (メモと同じ機能化)ツール名やある場所しりませんでしょうか?
そもそもデフォルトでコピペ位できますが。
>>429 古いノートで使ってるんで、
最新バージョンは入れてない
>>424 ありがとうございます。これで、いちいち、リリース用とかデバッグ用とか設定変える手間が省けます。
434 :
デフォルトの名無しさん :2006/12/27(水) 01:57:40
>>425 Timerは、TTimerかな?これは、最高でも精度が、20、30msecくらいしかでないっつーのと、
ソフトウェアMIDI音源なら、さらに遅れる。
435 :
デフォルトの名無しさん :2006/12/27(水) 02:13:45
恐れ入ります。Delphi6Personalを使っている者なのですが、 コンポーネントを使うときに「DesignIntf.dcuが無い」 というエラーがでまして、 インストールフォルダに入っていた"DesignIntf.int"の 内容がPascalソースっぽかったので *.pasにリネームしてライブラリパスに追加したのですが、 今度はDesignMenus.dcuが無いと言われてしまい、 はまってしまいました。 お助け願えないでしょうか、、
Delphiで宣言されているWindowsの型で、 type TFoo = packed record A: Integer; B: array [0..0] of Byte; end; と宣言されているレコードのメンバBに必要なメモリ領域を割り当てるにはどうすれば、 いいでしょうか? var S: array [0..127] of Byte; とし、Foo.B = SやらFoo.B = Pointer(B)やらやっても型の互換性がないとエラーになります。
長さ固定でいいのなら新たにレコードを宣言してキャストして使う。 TFoo32 = packed record A: Integer; B: array[0..31] of Byte; end; そうでなければ TFoo 全体を自分で適量確保する。 GetMem(SizeOf(Integer) + SizeOf(Byte) * x)
vat Foo:TFoo; begin FillChar(Foo,SizeOf(Foo),0); かな
ああ、[0..0]か・・・ Windows.pasでそんなの使ってるのか
>>447 です。
ぐぉ。めんどっちいですね。長さ固定は困るので、動的な方でトライしてみます。
すみません。ぜんぜん面倒でありませんでした。ありがとうございました。
いいえどういたしまして。
445 :
デフォルトの名無しさん :2006/12/28(木) 17:34:51
画像ファイルをテキストに変換したいです。 いきなり漢字は無理でしょうから 最初は0〜9までのひと桁の数字を判別できれば と考えています。 実現には技術的にどういった知識が必要でしょう?
パターンマッチング法 ゾンデ法 ストロークアナリシス法 ニューラルネットワーク ファジィ カオス
Delphiとは何の関係もないけど、 単純なニューラルネットワークを使ったパターン認識が一番取っ付きやすいと思う。
これからDelphiをDLして勉強しようと思っています。 で、手元にナツメ社のDelphi3.1ハンドブックがあるのですが これは役立たずになっているのでしょうか?
>>448 おれもDelphi勉強中。まだ、Delphi歴1ヶ月。
3.1は古いんじゃない?
Delphi2〜7は基本的な部分は変わってないから 3.1時代の参考書も使えるかと コンポーネントとかは違うけど
>>451 わかりました。勇気がわいてきました。
コンポーネントの違いはなんとなく空気読んでいきますわ
3.1っつーと、動的配列がないのが辛いな
SHGetDesktopFolderで取得したIShellFolderは 使用後は必ず_Releaseメソッドを使うべきなんでしょうか?
_AddRefを自分で呼んだのなら対になる_Releaseも必ず呼ばないとダメ。 そうでないならコンパイラに任せておけばいい。
>>455 ありがとうございます。
_AddRefメソッドは呼んでいないのでコンパイラに任せます。
ところで、Vista対応の現行TurboDelphi後継は出る予定あるんでしょうか??
Vista対応って、どういうレベル?ただ、IDE自体が動けばいいだけ?
Delphiで作ったアプリが
>>395 のような追加コードなしに問題なく表示できなきゃだめ?
どの機能に対応するかによって答えは変わってくるよ。
なんったて、Windows2000で使えるようになったUnicode文字でさえ、現状のDelphiは標準の
コントロールで表示できないし。そういう意味で言うと、2000すら対応していない。
460 :
デフォルトの名無しさん :2006/12/29(金) 15:05:26
またまた、質問なんですが・・・ 毎回親切に答えてくれてありがとうございます。 今回の質問なんですが・・・ ユーザーの入力データーから名簿のデーターを読み込み、IndexOfでユーザーが入力した名簿のデーター がすでにあればOKなんですが、ユーザーが入力したデータが既存の名簿データにない場合、 ダイアログ(入力用の新規フレーム)を出して、ユーザーに名簿にないので、その他のデーターの入力 を促して、その間はプログラムの流れは止まってるみたいな処理にしたいのですが・・・ i := 0; Dir:=GetCurrentDir; Doc := TStringList.Create; Doc.LoadFromFile(Dir+'\record.dat'); //既存のデーターを読み込み Ws := Doc.Text; //データーの内容保存 repeat Position := Doc.IndexOf(Person[h].Name); if Position = -1 then //既存のデーターにユーザーの名前が存在しない場合 begin //ここらへんにユーザーにダイアログを提示して //入力を促す処理を書いて //その入力が終わるまでプログラムの流れは一時停止 //しておいて欲しいです。Readlnみたいな・・・で、ユーザ //で入力が終わったらそれを変数に代入して、プログラム end; //再生・・ i := i+1; Until i > Ninzuu - 1; end; お願いします。
,:::-、 __ ,,r::::::::::::〈:::::::::) ィ::::::ヽ 〃::::::::::::;r‐''´:::::::::::::::::::::ヽ::ノ ,'::;'::::::::::::::/:::::::::::::::::::::::::::::::::::: l::::::::::::::::::l::::::::::●::::::::::::::●:::::ji |::::::::::::::::::、::::::::::::::( _●_)::::::,j:l クマー! }::::::::::::::::::::ゝ、::::::::::|∪|_ノ::;! . {::::::::::::::::::::::::::::`='=::ヽノ:::::/ ';::::::::::::ト、::::::::::::::i^i::::::::::::/ `ー--' ヽ:::::::::::l l;;;;::::ノ 【ラッキーレス】 このレスを見た人はコピペでもいいので 10分以内に3つのスレへ貼り付けてください。 そうすれば14日後好きな人から告白されるわ株は上がるわ 出世しまくるわ体の悪い所全部治るわでえらい事です
>>460 入力が1行で良いのならInputBox使えばいいし、もっと入力項目
が多いんだったら、フォームを作ってShowModalで表示すれば
入力が終わるまでメインの方は止まる。
ただ、キャンセルされた場合の処理をどうするかを考える必要が
ある。
463 :
デフォルトの名無しさん :2006/12/29(金) 17:00:43
>>462 ありがとうです。できました。
value := InputQuery(Person[h].Name+'の所在地',Person[h].name+'の所在地情報を入力してください。',NewPlace);
if not value then
begin
ShowMessage('入力がキャンセルされました。処理を中断します。');
exit;
end
else
Person[h].Place := NewPlace;
InputBox調べてたら、似たようなやつでInputQueryってのがあって、Boolean型でキャンセル押したらFalse返して
それ以外は、Trueを返して変数に入力内容をテキスト型にして返すって関数があってそれ使ったら
うまくいきました。
464 :
デフォルトの名無しさん :2006/12/30(土) 17:39:26
Delphi初心者です。 ListBoxにアイテムを追加していき、常に最後(一番下)のアイテムを選択しておく にはどうすればいいのでしょうか? つまりスクロールバーを下げなくても最後のアイテムを見えるようにしておきたい のです。 よろしくお願いします。
465 :
デフォルトの名無しさん :2006/12/30(土) 17:57:07
教えてくださいませ。 指定したWebサイトを開くにはどうすればよいでしょうか? (その後にブラウザの制御などは行わない場合)
>>464 ListBox1.Items.Add('HOGE');
ListBox1.ItemIndex := ListBox1.Count-1;
>>465 ShellExecute(0, nil, '
http://www.2ch.net/ ', nil, nil, SW_NORMAL);
467 :
464 :2006/12/31(日) 01:36:20
>>466 できました!ありがとうございました。
ItemIndexプロパティはアイテムの位置を取得するだけでなく、コードから
アイテムを選択するのにも使えるのですね。
これからもよろしくお願いします。
468 :
デフォルトの名無しさん :2006/12/31(日) 15:52:10
Delphiっつかobject pascalではビット演算と論理演算が同じ演算子 (andやor)のようですけど そうなるとビット演算のばやいCみたく if (Value and A_FLAG) then ... だとだめなの?
ダメだよ
470 :
468 :2006/12/31(日) 15:54:35
サンクス if ((Value and A_FLAG) <> 0) then こうならいいの?
いいよ><
俺も久しぶりにシフト演算使おうとして、おとといあたり、Delphiの算術シフトと論理シフトの違いどうなってったっけ? って調べたな。シフト演算を随分使ってないと忘れる。ヘルプにのってんじゃん?
473 :
468 :2006/12/31(日) 15:55:54
ベリーサンクス><
474 :
468 :2006/12/31(日) 15:59:14
しかしこれはメンドイな(俺だけ?) Cみたいに演算子分けなかった理由とかあるのかな?
他アプリのウィンドウを自アプリの子供(または孫以下)として扱いたいと思っているのですが実現は可能なのでしょうか? 可能なのであれば実現方法を教えて下さい。宜しくお願いします。
Windows.SetParent
ん?C言語に二つも演算子用意されてる??ビット演算と論理演算
あぁ、&と&&のことか。ごめん。
>>474 Cと比べて型に厳しいから、 対象が論理型の場合論理演算、整数型ならビット演算
というように判別可能だからじゃないかな。
481 :
468 :2006/12/31(日) 18:09:10
>>480 なななるほど
俺みたいな初心者にはややこしいですわ
バグを生み出しにくい、初心者に優しい仕様なんだけどね
>>472 これがバージョンによって挙動が違うから困る
Delphiで使えるパーサってTPLexとかぐらいしかないですか?
>468 回答者も初心者ばっかみたいだから信用しない方が・・・・
>487 うるせぇよ、500円ハゲ。
DelphiでiTunesをコントロールしたいんですけど、入口でつまずいています。 ググってiTunesCOMWindowsSDKをダウンロードしたけど、さっぱり使い方が判りません。 英語はソースのコメント程度ならなんとなく分かるんですけど、文章になるとてんでダメです。 よろしくお願いします。
490 :
489 :2007/01/02(火) 02:07:00
>>489 補足
使い方がわからないというのは、Delphiへのインストール(?)の仕方とか宣言のしかたからです。
Delphi6を使っています。
>インストール .idlが入ってないみたいだから他のタイプライブラリとか参考に 手書きでPascalに直すしかしょうがないんじゃね?
タスクトレイのチップヘルプっていうのかな? マウス合わせると出てくるやつ。 それを取得する方法ってありますか?
493 :
489 :2007/01/02(火) 14:00:58
自己レスです。 iTunesをコントロールするのは、プロジェクト>タイプライブラリの取り込みでタイプライブラリーを取り込んで簡単にできました。 ググってもなかなか出てこなかった…。SDKとか関係なかった。
くだらない質問!
utftosjis.pas
ttp://homepage3.nifty.com/m-and-i/tips/utftosjis.htm ↑これ使おうと思って↑に書いてある通りに↓をした!
C:\Program Files\Borland\Delphi6\Lib に utftosjis.pas という名前で保存した。
(utftosjis.pas保存時のエンコードはshift_jis、改行コードはCRLF)
だけど unit Utf8tosjis; の行で↓のエラーが出る!
[エラー] utftosjis.pas(16): Unit で指定された 'Utf8tosjis' がファイル名と一致しません
[致命的エラー] Unit1.pas(7): 'utftosjis.pas' ユニットはコンパイルできませんでした
なんで??? 先生! 教えてプリ〜〜〜ズ!
495 :
494 :2007/01/02(火) 14:07:50
情報不足な気がするから一応実際に書いたコードを晒しちゃうぞ! uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, utftosjis; : : procedure TForm1.Button1Click(Sender: TObject); begin Memo1.Lines.Text := UTF82Sjis(Memo1.Lines.Text); Memo1.Lines.SaveToFile('utf-8text.txt'); end;
>>494 utftosjis.pas → Utf8tosjis.pas
unitの識別子とファイル名は同じでなければならない。
497 :
494 :2007/01/02(火) 14:20:12
>>496 ありがとうございます! やっぱしサイトのほうが間違ってたのか〜、
うp前に確認くらいしてくれって感じっすorz これからいじってみますわ。
498 :
494 :2007/01/02(火) 14:42:32
Utf8tosjis.pas という名前で保存したら↑のエラーは出なくなった! でも↓のエラーが出てしまいます。 [エラー] Unit1.pas(29): 未定義の識別子 : 'SJIS2UTF' [致命的エラー] Project1.dpr(6): 'Unit1.pas' ユニットはコンパイルできませんでした ちゃんとuses節に Utf8tosjis を追加してるのに何故 未定義 になるの? 先生教えて!m(><)m ______________________________ uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Utf8tosjis; : : procedure TForm1.Button1Click(Sender: TObject); begin Memo1.Lines.Text := SJIS2UTF(Memo1.Lines.Text); Memo1.Lines.SaveToFile('utf-8text.txt'); end;
499 :
494 :2007/01/02(火) 14:50:19
Utf8tosjis.SJIStoUTF( 〜 ) とすれば良いみたいです、お騒がせしました! ダメ元で色々な書き方しててこれ見付けました! ユニット名.関数名( ) なんて書き方は今まで見た事なかったから動いてビビッた(汗
>>494 は正月早々色々と大変だな・・・
まぁアレだ・・・
あ き ら め ろ
Delphi6です。 非アクティブ時に[Alt]+H とかのキー入力を受け取りたいんですけど、どうすればいいんでしょう?
>501 SetWindowsHookExでいけるんじゃね? 詳しくはぐぐるか、Windows Programer's Reference参照。 ここを読めばわかる www.kab-studio.biz/Programing/Codian/DLL_Hook_SClass/06.html
>494 >498 一度Delphiのマニュアル読んだほうがええぞ。 そんなくだらんことでいちいち質問してたら、しまいには誰も回答して くれんぞ。
>492 取得って? 今表示されているヘルプの内容が知りたいとか? バルーンヘルプの表示方法ではないよね?
506 :
デフォルトの名無しさん :2007/01/02(火) 20:00:30
ステータスバーをオーナードローしてるんだが、 ごくまれに意図していない変な描画になる(メニュー文字が表示)のはなんでだろ?VCLのバグ?
変じゃ分からん。 SS見せてくれ。
508 :
デフォルトの名無しさん :2007/01/02(火) 20:52:42
ステータスパネルを追加してそのパネルのStyleをオーナードローにし、 DrawPanelイベントでCanvasに描画してる。ヘルプどおり。 その現象が発生するのがごくまれってのがよくわからない。
誠にお恥ずかしい限りですが、質問させていただきます。 (質問) 2005と2006(TurboDelphi)では文法に変更があったのでしょうか? (理由) カットシステム社のDelphi2005Vol1入門編を購入し、掲載されていた 簡易エディタをそっくりそのまま入力してみたのですが、エラーだらけでにっちも さっちも行かなくなりました。 (試したこと) ソースリストの誤入力、プロバティの誤設定がないか → 昨日から都合8回見直しましたが発見できませんでした。 カットシステム社のHPで記事訂正の告知がないか → なし (環境) アスロンXP2800+ Mem 1GB*1 HDD 250GB*3 GeForce6800 WindowsXP Pro SP2 TurboDelphi2006
× プロバティ → ○プロパティ
511 :
デフォルトの名無しさん :2007/01/02(火) 21:34:08
>508 もよかったらソース晒してくれい。 その話だけではさぱーりわからん。
VCLのバグを疑う前に自分が書いたプログラムを疑ってみるといい。
514 :
デフォルトの名無しさん :2007/01/02(火) 22:05:56
>>509 でたエラーとエラーが出ている行くらい出してくれないと誰も答えられないと思うぞ。
変更はあるにはあるがそれほどの修正は必要ない。
質問の仕方は
>>494 のほうが100倍分かってるな。 意味ぷーだよおまえら。
516 :
509 :2007/01/02(火) 22:16:49
遅くなりました。 まずはこれです。 (ソース) uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Borland.Vcl.Menus, System.ComponentModel, Borland.Vcl.StdCtrls, Borland.Vcl.Clipbrd, Menus, StdCtrls; (エラー) [Pascal 致命的エラー] main.pas(7): F1026 ファイル 'Borland.Vcl.Menus.dcu' が見つかりません
517 :
509 :2007/01/02(火) 22:31:32
全体は以下のとおりです。
ttp://zetubou.mine.nu/timer/file/bomber33624_h24.txt 及び
ttp://zetubou.mine.nu/timer/file/bomber33621_h24.txt それと、慌てていて恐縮ですが、516でupしました部分の訂正です
○ unit main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Borland.Vcl.Menus, System.ComponentModel, Borland.Vcl.StdCtrls,
Borland.Vcl.Clipbrd;
>518 え、これって.ニートなん? なんかusesの書き方が全然違うとおもたけど... 実は.ニートじゃなくてDelphi for Win32なので Borland.Vcl.Menusという指定の仕方ができない...とか?
520 :
デフォルトの名無しさん :2007/01/02(火) 22:58:17
> uses > Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, > Dialogs, Borland.Vcl.Menus, System.ComponentModel, Borland.Vcl.StdCtrls, > Borland.Vcl.Clipbrd; Delphi WIN32 なら uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, StdCtrls, Clipbrd; で、どうでしょ。
>>519 > Borland.Vcl.Menusという指定の仕方ができない...とか?
この形式はWIN32でも使えると思いますけど
Borland.Vcl はVCL.NET のソースなので、WIN32 パーソナリティでは
パスが通っておらず、エラーが出るのだと思います。
あ、なるほど、.NET(テキストはコレに準拠しているとの記述がありました。) に対して私がインストールしたのはWin32でした。 根本的に間違っていたということですね。 ご指摘ありがとうございました。 Delphi6のオフィシャルコースウェアを参考に勉強してみます。 (補足)uses節ですが、当初は別の場所でエラーが出たため、テキストのソースリストと突合してみて、 手動で書き直した結果新たなエラーを呼んでしまった次第です。 お手間を取らせてしまって申し訳ありませんでした。 なんだか、FM-7用のプログラムをそのままX1に打ち込んで 「動かない?」と言っているような感じですね orz
よくわからん例えだが、とりあえず が ん が れ !
524 :
デフォルトの名無しさん :2007/01/03(水) 00:12:01
>なんだか、FM-7用のプログラムをそのままX1に打ち込んで >「動かない?」と言っているような感じですね orz ワロタ がんがれ
>>501 さんへ
VirtualKeyにはOrd('A')
と、値を渡してやればいいっす。
procedure SetHotKeyToOS(Handle: THandle; HotKeyNumber: Integer; VirtualKey: Word;
Shift, Ctrl, Alt, Win: Boolean);
var
Modifiers: Word;
begin
Modifiers := 0;
if Shift then Modifiers := Modifiers or MOD_SHIFT;
if Ctrl then Modifiers := Modifiers or MOD_CONTROL;
if Alt then Modifiers := Modifiers or MOD_ALT;
if Win then Modifiers := Modifiers or MOD_WIN;
RegisterHotKey(Handle, HotKeyNumber, Modifiers, VirtualKey);
end;
procedure TForm1.WMHotKey(var Msg: TWMHotKey);
begin
case Msg.HotKey of
HotKeyID:
PopupCtrlWindow;
end;
end;
('A')
>508 PanelのTextを変えたりするとそれが出る事がある。(D6パー)
Turbo Delphi Expressのソースを引っこ抜いて宣言とか切り貼りしてDelphi6 Perに移植すると便利だな。
ライセンス違反
LANで繋がった別のマシンに簡単な文字列を送りたいんですが、 どうやるのが簡単ですか?
メール
TCP/IPコンポ
>530 Socketコンポ貼り付けてそれで通信じゃね? 1方はサーバーで受信待ち、もう片方から文字列を送信 製品のサンプルでそんなやつなかったっけ?
C:\Program Files\Internet Explorer\iexplore.exe
http://送り先/文字列 なCreateProccessまたはWinExec
536 :
530 :2007/01/04(木) 23:23:51
うは。できた。サンクスです。
サンプルソースがわかりやすかった。
ぐぐる前にマイパソの中身を確認しないとな…。
>>533 かわいいあの子のパソコンに卑猥なメッセージをポップアップとか、キーロガーとかは全然発想もつかないです><;。
家庭内LANにぶら下がったiTunes専用マシンを遠隔操作するアプリを作るだけです。
これで技術的問題はすべてクリア。あとは組むだけ。
スレ違いだけど、 net send 〜 っていうコマンドなかったっけ。
net snedはMessengerサービスがないとだめぽ。
UNIXにも文字列を送るコマンドがあったような記憶。
マイコンピュータのグループ表示みたいなのって DelのListViewじゃ出来ないの?
541 :
デフォルトの名無しさん :2007/01/05(金) 11:17:36
Delphi2005からVB6で作成したDLLを呼び出し、 結果を取得したいのですが、どうすればいいでしょうか
ValueOf(笑)
実行時にform内でラベルとかのオブジェクトを移動させるってどうやればいいんですか?
TopとLeftプロパティを変更すればいい
すみません質問させてください スロットマシンつくってるんですが image1とimage2とimage3が同じ画像になったときに labelに文字を表示したいのですができるでしょうか?
できます。
どうしたらいいか教えてください・・・ごめんなさい
if (同じ画像になった) then label.caption:= 'aaaaaaaaaa';
>>546 すいません、状況説明が足りませんでした。
マウスのドラッグで位置を変えるのはどうすればいいのでしょうか。
>>550 ほんとすいません、
if の中がわからないんです
timerでloadfromfile、nam、couとかつかってやってるんですが、
どうしたらいいでしょうか??
画像にキー情報を持たせてるならキー情報が一致したら同じと見なす 後は3つ画像のファイルサイズを調べて同じなら一致したと見なす などなど、何を持って同じとするかは仕様による
>>551 onMouseMoveを使えば出来るんじゃない?
画像をImageList かなんかに入れて、乱数で表示させて 画像番号が3つとも一致したら・・・みたいな感じじゃないの?
>>552 > loadfromfile
を使うのだったら、ファイル名が一致とか。
>>553 >>555 ありがとうございます!
でもちょっと自分にはむずかしいのでそこは調べてやってみます
>>556 ファイル名一致でいくには、どううちこんだらいいでしょうか?
ifでイコールとかいろいろうちこんでるんですがよくわからなくて・・・
質問ばっかりですみません
> timerでloadfromfile、nam、couとかつかってやってるんですが、 nam とcou って何? コードで示して。
>>554 レスありがとうございます。
if Shift=[ssLeft] then
begin
imgBack.Top:=Y;
imgBack.Left:=X;
end;
とコーディングしたんですが、予想外の動きをしてしまいます。
この、X,Yはなんの座標なんでしょう?
var nam:array[0..7]of string =('1.jpg','2.jpg','3.jpg','4.jpg','5.jpg','6.jpg','7.jpg','8.jpg'); var cou:integer; procedure TForm1.Timer1Timer(Sender: TObject); begin image1.Picture.LoadFromFile(nam[cou]); cou:=cou+1; if cou=8 then cou:=0; end; これで短いインターバルでまわして、 timerを止めたときに絵が出るようにしています もしかしたらすごく効率悪いやり方なのかもしれないです;
>>551 それならそうと言ってくれ
TLabelはハンドル持ってないから却下(不可能じゃないけど非常に面倒くさい)
変わりにTStaticTextを使った方法で
Borland公式からのパクリだけど
procedure TForm1.StaticText1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
const
SC_DRAGMOVE=$F012;
begin
ReleaseCapture;
TWinControl(Sender).Perform(WM_SYSCOMMAND,SC_DRAGMOVE,0);
end;
>>561 var
cou:integer;
s1, s2, s3: String;
//Timer2、Timer3も同様にLoadFromFileの直後にs2, s3にファイル名を代入
procedure TForm1.Timer1Timer(Sender: TObject);
begin
image1.Picture.LoadFromFile(nam[cou]);
s1 := nam[cou];
cou:=cou+1;
if cou=8 then
cou:=0;
end;
ストップボタンのクリックイベントで
if (s1 = s2) and (s2 = s3) then
Label1.caption := 'ヘーイ!!キタコレ!!!';
あんまいいやり方じゃないな
>>561 cou1, cou2, cou3 にして
if (cou1 = cou2 = cou3) then
あれ、 if (cou1 = cou2 = cou3) then なんてコンパイル通るんだっけ?
Hint: 冬休み
タスクトレイ常駐アプリを作ってるんですが、 CloseQueryでFalseにするとWindowsのシャットダウンが出来ません。 どう対応すればいいんでしょうか。
if (cou1+cou2)=(cou3*2) thenでおk
>567 CloseQueryでFalseを返すとフォームのクローズを拒否するのでだめ。 Trueを返せ。 つうかな、ヘルプぐらい嫁や!
>>570 シャットダウンによるアプリケーション終了をどう検出するかって話なんですが
WM_QUERYENDSESSIONメッセージを捕まえればおk
>CloseQueryでFalseにするとWindowsのシャットダウンが出来ません。 だろ? だから、Trueを返すようにすればシャットダウンとまらんようになるんじゃない? と言いたかったのだが。 >567の書き方じゃ、>571のことだとわからんぞ!
まじでこのスレのお世話になっています。
>>559 >>562 などなどレスありがとうございます。
今、iTunesをコントロールするアプリを作っているわけですが、
表示等のカスタマイズ性をなるべく持たせようとセコセコ設定画面を作っているんですが、
項目が多くなる(50項目ぐらい)のと、Dialogを4つぐらい貼り付ける予定なんですけど、
メモリの占有的にはどうなんでしょう?
設定は別アプリにした方がいいんでしょうか? 気にするほどじゃないんでしょうか?
575 :
554 :2007/01/06(土) 00:00:45
>>560 どう予想外の動きなの?XYの座標の意味はヘルプに書いてある。
∧,,∧
ミ,,゚Д゚彡
ミ つ且~~
ミ,,__ ヾ,
⊂二二二∪∪二二⊃
そういうときは、とりあえず楽な
やり方で作ってから
それでも
メモリ占有率が気になるなら
そこから改造。
と、いう手段に出るのがよろしきかな。
>>574
577 :
561 :2007/01/06(土) 00:23:03
遅くなってすみません できましたー!! みなさんほんとありがとうございます!! まじ助かりました。ありがとうございます!!
>574 ここにある www.delphianworld.com/ WZ風パラメータ設定ダイアログなんかどおよ?
>574 あと、ダイアログにページコントロール貼り付けてタブ分ければ ダイアログ4つもいらんのじゃない?
580 :
574 :2007/01/06(土) 01:53:12
>>575 X,YはTop,Leftとは違うというのは判りました。けど、まだよく分かってないです。作業的にはサンプルをそのままコピーしてって感じで動いています。
>>576 どっちが楽かが判断つかない状態に…。仕様書を作らずに組んでいるので、自分の中の人が仕様変更や仕様追加をばんばん行ってきてて…
>>578 設定が多すぎて、脳が追いつきません…。一件一件iniに読み書きしていきます。
>>579 言葉足らずでした。Daialog4つというのは、Open、OpenPicture、Font、Colorの4種類です。
581 :
デフォルトの名無しさん :2007/01/06(土) 02:18:51
超初心者の質問ですみません。 for文でカウンタ変数の値を2ずつ増やすにはどうすればいいのですか?
>580 ダイアログはWindowsのやつだからたいしてメモリくわねんじゃね? WZ風だめなんか... まあ、気長にがんがれ。
>581 だめ。 VBみたいにfor i = 1 to 10 step 2とかはできん。 変わりに i := 1; while i <= 10 do begin 処理 i := i + 2; end; とするしかない。
584 :
581 :2007/01/06(土) 02:41:52
>>583 ありがとうございます。
CやVBでは簡単にできたのでDelphiでもできるかと思いました。
while文でやってみます。
for i := 0 to hoge do begin if Odd(i) then continue; 〜; end; 俺はこういう書き方してた・・・ 最近のDelphiなら for i in [0, 2, 4, 6, 8, 10] do ってのもアリか。でもこれだと自由じゃないので 初心者の俺が考えてみたんだが、 function MakeArray(AFrom, ATo, AStep: Integer): TBoundArray; var i: Integer; begin i := AFrom; while i <= ATo do begin SetLength(result, Length(result) + 1); result[Length(result) - 1] := i; Inc(i, AStep); end; end; こんな感じの関数作って for i in MakeArray(0, 10, 2) do // 0, 2, 4, 6, 8, 10 のループ ってのはアリですか?それともバカでしょうか。
その関数の存在意義がわからん。
それとfor文で何回もSetLengthしなおすとまずいって話題無かったっけ?
つうか、エレガントではないがwhileで書いた方がよっぽど すっきりしていると思うのだが... まあ、書き方は個人の自由やからね。 >for i in [0, 2, 4, 6, 8, 10] do 新しいバージョンはこんな書き方できるのか。 foreachとかサポートして欲しいな。 Rubyとか見てると、( ・∀・)イイ!と思うし、羨ましい
i*2でいいじゃんかよ。ループ回数固定なら。
>>589 それは気がつきませんでした、目から鱗です
589だけど、ワロタ。まぁ、俺も使いはじめの頃は、同じ事で悩んだものだ。
VBなら云々 っていうレスがないな
もうVB厨にさえ無視されるようになったか・・・
だって、Delphiに未来ねーもんw バグは多いわ、バージョンアップしても大して変わらないわ とうとう売却されるわ、名前変わるわで散々。 個人的には言語はRubyで、DelphiのIDEが最強じゃないかと 思うけど、どお?
DelphiのIDEってより、VCLがWin32ネイティブアプリの開発において最強なのは、俺も思う。 まぁ、VCLとIDEのデザイナなどはお互い関係あるけど。後、厳密に言うと、最強だった(過去形が適切かもね。) Unicodeコントロールが標準で存在しないことに、コントロール以外にも、ファイル名とかAnsiで渡さなきゃいけんし、 俺的には、それでもうアウト。DelphiVistaでUnicode完全対応したらまた最強の座をあげていいとは思うが、 時代は.NET3.0なんてことになってたら、もう手遅れ。
俺Del7で時間が止まってるんだけど今だとTurbo Delphiだっけ? あれってDel7よりええの?
597 :
574 :2007/01/06(土) 11:29:02
Delphiに将来はないのかぁ。 でも、他の言語を覚えるゆとりが脳にない…。 Delphiに高性能のTMemoと正規表現の対応と単純なCSVコンポーネントが標準だったらニッチに大活躍したなぁと思います。 フリーのコンポーネントで実現できますけど(それがDelphiのいいところではあるけど) 以前、印刷系の会社にいた時に、テキストをタグつけて整形→DTPソフトで取り込み自動組版 とかのアプリを組みました。 印刷業界はそういった自動組版の需要がそれなりにあると思います。 ただ、どこもプログラマーを専属で雇う余裕はなくて、ちょっと詳しい人が単純なのを組んでいる感じです。 通販カタログとかのデータをDB化して、レイアウトをリアルタイム更新とか本格的なことをやってる人もいますが。 知り合いはRubyとDelphi使ってるって言ってました。
ゲイツに喧嘩売っても勝てないから。
599 :
デフォルトの名無しさん :2007/01/06(土) 12:28:30
ゲイツはVista で引責辞任。
まあ、自分はDel7まんせーなので別にいいんだけどね >将来なくても。 ただ、あと何年で陳腐化するかなぁという不安はある。
_____________ ∧,,∧ /いまでも _ ミ,,゚Д゚彡 _< ニッチでは .=| |==U=U==| |= \ 大活躍だと思いますが | | .ミ ミ | |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ | |ノ∪''∪. | | | | | | Unicode化は、確かに急いで欲しいですね。 Vista対応のAppWinFixは標準の実装をさっさとやってもらいたい。 とりあえず、 ネイティブアプリ開発において最強環境を こってり、使いこなしてみましょうぜ。
602 :
デフォルトの名無しさん :2007/01/06(土) 22:04:32
Delphi5はVistaじゃ使えないの?
603 :
デフォルトの名無しさん :2007/01/06(土) 22:09:58
よくゲームなんかで波紋が広がるような画面効果やモヤがかかったような画面の切り替えがあったりして、 TBitmapに何かの演算をしたりしてるんだと思うんだけど、これをDelphiで実現するライブラリや計算方法を紹介してるサイトって、知りません?
DirectXつかえば?
>>602 細かい挙動を気にしなければ、使えるらしい。
606 :
デフォルトの名無しさん :2007/01/07(日) 00:01:29
>>605 細かい挙動っての、気になりますね(^^;
Unicodeに対応じゃないみたいだけど、文字化けとかは、とりあえずないんですか?
608 :
デフォルトの名無しさん :2007/01/07(日) 01:06:31
>Delフサギコさんへ ウンコが漏れそうなほどステキな情報ありがとうございます! エンボス、反転、グレースケール化、ホワイトアウトとかは一応やってたんですが、二つの画像をホイール状にかき混ぜたりウェーブをかけたり、ブラー系が弱かったのでいろいろ試してみます。 しかし、scanlineで取らないと、Pixelに1個1個アクセスしたのではちょっと遅くて実用性が?ですね…
別のdelphiアプリのアイコン化された状態を元に戻すにはどうすればいいですか? ShowWindowやってもフォームが表示されるだけで、アイコンが残ったままなんですけど
やっぱ粘着してきたねw 想定内だけど
>609 いらっしゃい。こっちに来いと振った以上は多少お付き合いします。あっちで罵倒の 応酬してもしょうがないっしょ? 一般的なタスクトレイアイコンものをDelphiで作る場合で考えると、ご所望の動作は 内部的にはApplication.Restoreメソッドの呼び出しになるものと思います。これを 外部から引き起こすにはWM_SYSCOMMANDメッセージのwParamにSC_RESTOREを 格納したものをApplicationウィンドウに送ればいいのではないかと思われます。 Applicationウィンドウとは例のDelphi特有の隠しメインウィンドウです。 ただしこれは一般論で、そのアプリケーションの作り方によっては違うアプローチが 必要かもしれません。
>>612 ありがとうございます
あそこで質問するまでにあらゆる手段を使って試したので
>>612 > >609
> いらっしゃい。こっちに来いと振った以上は多少お付き合いします。あっちで罵倒の
> 応酬してもしょうがないっしょ?
> 一般的なタスクトレイアイコンものをDelphiで作る場合で考えると、ご所望の動作は
> 内部的にはApplication.Restoreメソッドの呼び出しになるものと思います。これを
> 外部から引き起こすにはWM_SYSCOMMANDメッセージのwParamにSC_RESTOREを
> 格納したものをApplicationウィンドウに送ればいいのではないかと思われます。
それもすでに実行済みです。
> Applicationウィンドウとは例のDelphi特有の隠しメインウィンドウです。
TApplicaitionというのがそうですか?
delphiで調べると、アイコン化ができないとかそういう類のtipsが多くあって
TAppからMINIMIZEすればいいとかなんとか多く見られるけど
アップダウンボタンをしばらく押しっぱなしにしてると増え方が加速するのってありますよね? あれってどうやってるんでしょう?隠しプロパティでさくっと設定・・・な筈ないですよね。
>615 一応それっぽいことできた TForm1 = class(TForm) UpDown1: TUpDown; Edit1: TEdit; procedure UpDown1Click(Sender: TObject; Button: TUDBtnType); procedure UpDown1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private FDown : Boolean; FInc : Integer; public end; (中略) procedure TForm1.UpDown1Click(Sender: TObject; Button: TUDBtnType); begin if (FDown = False) then begin FDown := True; FInc := TUpDown(sender).Position; end; if abs(TUpDown(sender).Position - FInc) > 2000 then begin TUpDown(sender).Increment := 1000; end else begin if abs(TUpDown(sender).Position - FInc) > 200 then begin TUpDown(sender).Increment := 100; end 続く
続き else begin if abs(TUpDown(sender).Position - FInc) > 20 then begin TUpDown(sender).Increment := 10; end end end; end; procedure TForm1.UpDown1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if (FDown = True) then begin FDown := False; TUpDown(sender).Increment := 1; end; end; まあ、Clickイベントで初クリック時の値を覚えておき、値がある閾値を超えたら、 増減値を増やす で、マウスボタンUpイベントで、初クリックのフラグを消して、増減値を元に戻す 加速が3段階なのであまりなめらかではないが、段階増やすかなんらかの式で 計算するようにすれば、なめらかに加速していくと思う
>>616 ,617氏ありがとうございます。完全なコードまで書いて頂き感謝です。
+側も-側もちゃんと動きました、勉強になります。
押しっぱなしでずっとクリックイベントが発生しているのは知りませんでした。
ので実はタイマー使ってやろうとしていたのは内緒です。
String型の16進数の数値の文字列をByte配列に格納するにはどうすればいいのでしょうか? たとえば data:='50006C0065006100' この文字列を先頭からdata[0]:=5 data[1]:=0のように格納したいのですが。。。 知恵を貸してください。
C は12として数値で格納したいの?
>619 何をやりたいのか不明。 もっと詳しく書いてください。 String型の16進数の数値 -> '7C56102A'という値でString型の変数に入ってる? それとも String型の変数に入ってる'ABCDEF'という値を16進数にしたもの? 数値の文字列をByte配列に -> 7C56102Aという数字を文字列'7C56102A'にして 更にByte[0] := '7', Byte[1] := 'C'...という風にしたい?
626 :
デフォルトの名無しさん :2007/01/07(日) 17:23:06
ToolBarの一部のボタンだけキャプションを表示させるにはどうすれば良いのですか? ToolBar本体のShopCaptionではボタン全部が切り替わってしまいます。 バージョンはDel6です
>626 無理。 自分でコンポーネント作ってカスタマイズしないとだめ。 ShowCaption変更時はウインドゥ作り直しているみたいだから いろいろいじらんとだめかもね。 後はTorry'sのページにある海外の方のコンポを片っ端から 試してみるとか。 力になれなくてすまぽ。
USBメモリーにDelphiをインストールしてどのPCでも作業できるなんて出来ないですかね。
無理。
USBメモリにOS一式とDelphi入れて、USBメモリからブート ってできる?
できる。
LAN内でプログラムのアップデートを簡単にしたいのですが プログラムを起動プログラムと本体に分けて、起動プログラムで更新をチェックして 更新されてたら本体をコピーして上書きってやるのが簡単ですかね。 本体だけで自分自身を書き換えるってのは無理ですか?
∧,, ∧
ミ。_。彡 ペコッ
〜ミ,,,U U,,ミ 且~~
>>623 さん、
>>624 さん。
ありがとう。
634 :
デフォルトの名無しさん :2007/01/07(日) 22:55:48
お作法についての質問なのですが、コントロールバーにツールバーをたくさん 乗せるとき、イメージリストはそれぞれのツールバーに別に作るものなのでしょうか? それとも全部一緒でいいのでしょうか?お願いします。
好きなようにしたらいい。
保守性を考えたら、別々の方が再利用しやすいと思われ。 使い捨てなら635 の言うとおり。
>632 プログラム実行してる時はファイルを占有しているから上書きとか移動とかは 無理だったと思う。 なので、更新プログラムと本体を分けて、更新プログラムでチェック+更新する のがいい。 MMOも全部そんな作りだし。 >634 マジでどちらでも。 イメージ自体を入れ替えのであれば、自分が管理しやすい方法にすればいい。 イメージを使用者がカスタマイズできるようにするのであれば、イメージリストが 散らばっているのはよくないかもね。
638 :
634 :2007/01/08(月) 01:19:38
>>622 >>625 ありがとうございます。moveをつかって試行錯誤してみることにします。
>数値の文字列をByte配列に -> 7C56102Aという数字を文字列'7C56102A'にして
>更にByte[0] := '7', Byte[1] := 'C'...という風にしたい?
仰るとおりです。
640 :
デフォルトの名無しさん :2007/01/08(月) 01:46:56
┌─┬────┐ │ │ │ │ │ │ │ ├────┤ │ │ ココ│ └─┴────┘ こういう3ペインのソフトを作っていて、上の図の「ココ」のところに ControlBarをおいて、その上にPageControlを載せたいのですが・・・ PageControlのAlignをalClientにしてもいっぱいになってくれません。 ControlBarもalClientになってます。 どうすれば良いでしょう? 図の「ココ」と上の部分はsplitterで区切ってあります。 バージョンはDelphi6です。お願いします。
>>640 どういう目的でControlBarにPageControlを載せるのかわからないけど
自前でControlBarのリサイズの度にサイズ変更するしかないと思う
procedure TForm1.ControlBar1Resize(Sender: TObject);
begin
PageControl1.SetBounds(0,0,ControlBar1.Width,ControlBar1.Height);
end;
みたいな感じで
642 :
640 :2007/01/08(月) 03:59:08
>>641 .NETのIDEみたいに取り外せるようにしたかったんです。
参考になりました。ありがとう。
643 :
デフォルトの名無しさん :2007/01/08(月) 04:56:05
なんでDelphi厨は自分のサイトで音楽を流したがるんですか
デルポイといえば音楽(竪琴)を司るアポロン神の神託所ではないか。
>639 こんな感じか? procedure TForm1.Button2Click(Sender: TObject); var Idx : Integer; // カウンタ Str2: AnsiString; // 16進数変換後文字列 Str3: AnsiString; // 画面表示用 BAry: Array[1..128] of Byte; // バイト配列 begin Str3 := ''; for Idx := 1 to Length(edit2.Text) do begin // 画面入力 -> "ABCD" // 16進数変換 -> 41424344 // バイト配列 -> 34 31 34 32 34 33 34 34(4 1 4 2 4 3 4 4) Str2 := IntToHex(Ord(edit2.Text[Idx]), 2); // 入力した文字列を16進数に Str3 := Str3 + Str2; // 画面表示用 Bary[(Idx - 1) * 2 + 1] := Ord(Str2[1]); // バイト配列に16進数の1桁目を転記 Bary[(Idx - 1) * 2 + 2] := Ord(Str2[2]); // バイト配列に16進数の2桁目を転記 end; edit3.Text := Str3; end;
>>645 すげー勉強になった
今まで俺のサイトで音楽流してなかったのが恥ずかしいです
ポインタの演算は不可能? var p: PInteger; begin ...; p := @hoge + 1; hoge := (p + 5)^; (p + 6)^ := (@hoge + 2)^; って感じで
Delphiのポインタで+演算子を使えるのはpcharとあとなんかだけ というわけで、普通は配列のポインタを使えばOK var p: PIntegerArray; begin ...; p := @hoge [1]; hoge := p [5]; p [6] := hoge [2];
Inc/DecはいちおうOKらしい。
Turbo Delphiを使っています。 DBGridのColomのWidthプロパティを変更して、実行しても幅がデフォルトの長さのまま変わりません、これはバグでしょうか?
652 :
デフォルトの名無しさん :2007/01/08(月) 23:46:48
TDataSetのDisplayWidthに依存
「if not value then 中断 else 文字列追加」じゃなくて「if value <> '' then 文字列追加 else 中断」にしたほうがスマートなような
なぜか
>>463 までしか見えてなかった
浦島太郎気分
656 :
デフォルトの名無しさん :2007/01/09(火) 16:44:40
CreateOleObjectで宣言したオブジェクトは、 どうやって開放してやればいいでしょうか? 何もしなくもても、自動的に開放されるものなのでしょうか? 常駐系のプログラムで、定期的にCreateOleObjectを実行するので、 きちんとオブジェクトが消えるようにしたいのですが
Unassignedを代入じゃなかったか?
おれも音楽ながそう
おれもおれも
>656 Delphi7のヘルプから ヒント:例で示されているように,CreateOleObject の返すインターフェースが Variant に割り当てられている場合は,Unassigned 定数をその Variant に 割り当てることでインターフェースを解放できます。
661 :
656 :2007/01/09(火) 20:46:25
>>657 ,660
有難うございます、わかりました。
このスレを見ている人はこんなスレも見ています。(ver 0.20) 過去ログ [おいらロビー] 【VB】ウイルスバスター2007 Part26【TrendMicro】 [セキュリティ] 綜合警備保障(ALSOK)ってどうよ? その3 [転職] 45歳以上の転職Part7 -25 OR 6 TO 4- [転職] ●●オブジェクト設計は何故流行らないの?●● [プログラマー] 45歳以上でプログラマーから警備員に転職か。 ちょっとキツイね。
自分43でプログラマからヘリ操縦士に転進した。
俺も自宅警備員に転職した
俺もDel厨に転落s
>>666 > oMSG.CreateMHTMLBody(AUrl); の部分で ”構文が無効です”と警告されます。
再現しません。
delphi2006 Update2 + XP SP2 + IE6 です。
uses ComObj; を忘れているなんて事はありませんよね。
ComObjはuses節に追加してあります
コンパイルは通りますが
いざ実行する時にエラーが出ます
//関数呼び出し
procedure TForm1.Button1Click(Sender: TObject);
begin
SaveToMHT('
http://www.google.co.jp/ ', 'tmp');
end;
>oMSG.CreateMHTMLBody(AUrl);
プロジェクト Project1.exe が EOleExceptiopnクラスの例外を生成しました。
'構文が無効です'
無限ループを、ユーザーからの操作でBreakさせるいい方法ないでしょうか? ループ中はウィンドウが固まっているので、ホットキーで抜けられるようにしたいです。
プログラマは無限ループができるようなコードを書いてはいけない
やるにしてもメインスレッドでなんて・・・
ホットキーで抜けれるってことは… そもそも何かの操作をするまでループという処理は 無限ループではないんじゃね?
ていうかメインのメッセージループがまさにそれだろ。 ユーザーまたはシステムが WM_QUIT 投げるまでループし続けるんだから。 それと同じ処理を書いてやればいいだけ。
プログラマは無限ループができるようなコードを書いてはいけない
for i := MinInt To MaxInt do にしとけ。
677 :
デフォルトの名無しさん :2007/01/10(水) 06:34:12
ループ中で、Application.なんとか(忘れた 呼び出して、KeyDownかなんかで、フラグ立てて、停止 ほかは、ループ内で、GetAsyncKeyStateで停止
ただ単にループ作業中でウインドウが一時固まって操作不能の状態を無限ループと表現しているのかな。
無限ループの処理を別スレッド内にブチ込む
ProcessMessage
無限ループの質問をした者です。たくさんの助言ありがとうございます。 GetAsyncKeyState関数を使うことによって解決できました。 どうもありがとうございました!
683 :
681 :2007/01/10(水) 13:54:20
684 :
デフォルトの名無しさん :2007/01/10(水) 15:07:18
Delphi2005で作成したDLLを、同じくDelphi2005で使った時に、 「読み込み違反」がでて正常に動作しません 何が原因で、どこを直せばいいのでしょうか? DLL側のソース function call1(intNo : integer; varParam:PChar): PChar; stdcall; Result := PChar('a'); end 呼び出す方のソース function call1(intNo : integer; varParam:PChar): PChar; stdcall; external 'test.dll' name 'stadcall'; procedure TForm1.Button1Click(Sender: TObject); var param : PChar; var ret : PChar; var buff : String; var intNo : integer; begin intNo := 1; param := PChar('1234'); ret := call1(intNo,param); buff := ret; //← ここでエラー(コメントにすると動きます) end;
> external 'test.dll' name 'stadcall';
686 :
684 :2007/01/10(水) 15:39:05
687 :
684 :2007/01/10(水) 15:43:50
何度も質問ばかりで、すいません DLL側でCoInitialize(最初に)、CoUninitialize(最後に) を使ってCOMの初期化を行っているのですが 処理の中で、CreateOleObjectを使った後にCoUninitializeをすると、 DLLの終了時に「読み込み違反」が発生します。 どうすればいいのでしょうか?
CreateOleObject で作ったオブジェクトが開放される前に CoUninitialize してるんじゃない?
>>687 > DLL側でCoInitialize(最初に)、CoUninitialize(最後に)
これはinitialization とfinalization で呼んでいるという事?
690 :
684 :2007/01/10(水) 17:09:02
DLLの呼ばれる関数の先頭と最後にやってます。 initialization とfinalization は何も書いてません。
>>688 みたいな事があるから
場所を移してみたら、どう?
procedure hoge; var Obj: IDispatch; begin CoInitialize(nil); Obj := CreateOleObject(...); ... CoUninitialize; end; Delphi ではインターフェースオブジェクトの AddRef/Release が参照数の変化に応じて自動的に呼ばれる。 上記の場合、ローカル変数 Obj の寿命、即ち関数の終了時に最終的な _Release が呼ばれ、インスタンスが破棄されることになり、 その前に CoUninitialize する事になるので問題が発生する。 CoInitialize/CoUninitialize を関数外に出すか、下記のように手動で変数の寿命を示す事で解決できる。 var Obj: ^IInterface; begin CoInitialize(nil); New(Obj); Obj^ := CreateOleObject(...); ... Dispose(Obj); CoUninitialize; end;
デスクトップの左上隅に常に文字を表示させるにはどうしたら良いのでしょうか? 描画が必要になったら関数を呼び出して描画すれば済むのでしょうが、 どう書けば良いのかわかりません><
>>681 =683
ありがとうございます。
とりあえずHTTP/1.1を使用しない事でエラーは回避出来ました。
ウェブブラウザで読み込んだ後だと1.1でも問題ないのは
キャッシュを参照していたからでしょうかね。
>>693 スマートなやり方じゃないけど
新しいフォーム作ってLeft0Top0にLabel置いて
フォームもLeft0Top0
フォームのAlphaBlendValueは0にして
FormStyleはStayOnTopで
Showすればいいんじゃない
>>695 AlphaBlendValue 0 にしたら見えないじゃん
697 :
693 :2007/01/10(水) 19:09:31
>>695 できればTextOutで文字を描画したいです・・・><
>>696 ああすまんTransParentColor=FormColorと間違えてたわ
GetDC(0)とかだったっけ
>>697 んじゃLabel使わずにOnPaintでTextOutして書き込めばええ
GetDC(0)でデスクトップウィンドウのデバイスコンテキストのハンドルを取得し、描画できるけど、 「常に」描画するとなると、うーーーん(こ)。
>>701 まさにその状態です・・・
描画が必要だよー\(^o^)/ → 文字描画/(^o^)\
ってやりたいんですが、どうやってメッセージを
取得すりゃいいんだろう・・・
オワタ フンカ?
704 :
694 :2007/01/10(水) 21:36:28
度々失礼します。掲示していただいた
https://blogs.msdn.com/jasonjoh/archive/2005/12/08/501760.aspx のVBのコードをDelphiに書き直しているのですが
uses wininet;
procedure TForm1.Button1Click(Sender: TObject);
var
verInfo: INTERNET_VERSION_INFO;
begin
verInfo.dwMajorVersion := 1;
verInfo.dwMinorVersion := 0;
InternetSetOption(nil, INTERNET_OPTION_HTTP_VERSION
, verInfo, SizeOf(verInfo));
end;
のSizeOf(verInfo)の部分で
INTERNET_OPTION_HTTP_VERSION と Pointer には互換性がありませんと警告されるのですが
この部分はどの様に書けばいいのでしょうか。
705 :
649 :2007/01/10(水) 21:46:45
連投失礼します。
自己解決できました。
× InternetSetOption(nil, INTERNET_OPTION_HTTP_VERSION , verInfo, SizeOf(verInfo));
○ InternetSetOption(nil, INTERNET_OPTION_HTTP_VERSION, @verInfo, SizeOf(verInfo));
第三引数の変数の前に@が無かったのが原因でした。(@の意味が良く分かりませんが)
参考:
ttp://forum.nifty.com/fdelphi/samples/01105.html
> , verInfo, SizeOf(verInfo)); , @verInfo, SizeOf(verInfo)); かな。
あらら、かぶった。 > 。(@の意味が良く分かりませんが アドレスを返す演算子。
>>707 ありがとうございます。覚えておきます。
色の定数clNoneとclDefaultについて教えて下さい。これは何のためにあるのでしょうか?? Windowsのシステムカラーでもなさそうですし。この色を設定したとき、どんな色が使われると 考えていいのでしょうか?
>>709 Graphics.int には
clNone = TColor($1FFFFFFF);
clDefault = TColor($20000000);
となってる。
多分、VCLオリジナルで、VCL内部で解釈されるのだと思う。
APIにこの数値は渡していないみたいだよ。
VCLソースを検索すればどう使われているか解かるよ。
>>710 そうですか、ちょっと検索かけてみます。今コンポーネントを製作中でそれらの色を
どうコンポーネントで解釈していいのか悩んでいました。これらの値をAPIに渡していないなら
自作コンポの方でも指定された時に、別の色に置き換えて内部で使用します。
ありがとうございます。
>711 つ ColorToRGB
713 :
684 :2007/01/11(木) 11:09:08
>>691 DLLなので、initializationを書く位置がわからず手間取ってました、
別unitを作り、
そこにinitialization、finalizationを書いて実行させたところ、
エラーも無く動作しました。
ありがとうございます m(__)m
691 :デフォルトの名無しさん :2007/01/10(水) 17:10:43
>>688 みたいな事があるから
場所を移してみたら、どう?
Turbo Delphiをインストールしたのですが、ヘルプが使用できなくて困っています。 具体的には、Turbo Delphiを起動したあと、メニューバーの[ヘルプ]→ [Borland ヘルプ]を選択すると、「名前空間が定義されていません」という エラーダイアログが出ます。画面内の[ファーストステップ]をクリックすると Microsoft Document Explorerが起動しますが、一瞬タイトルバーやタブに 「Internet Explorer ではこのページを表示できません」と出た後、 「ナビゲーションは取り消されました」と表示されます。 ちなみにユーザーズガイドなどのPDFファイルや、Borlandのサイトなどは 画面内に正常に表示されます。 どうしたらヘルプが表示できるでしょうか。
Turbo のヘルプは調子が悪いので IDE のメニューからではなく、ヘルプのショートカットを作って そこから起動した方が確実です。
>>715 レスありがとうございます。
書き忘れていましたが、スタートメニューから[ドキュメンテーション]を
起動した場合も駄目なのです。Microsoft Document Explorerは起動するのですが、
about:blank(IE7のホームページ)が開き、目次には何も表示されません。
検索すると、「名前空間が指定されていません。: ms-help://borland.bds4」という
エラーダイアログが出ます。
> エラーダイアログが出ます。 ヘルプが壊れているようですね。 コマンドラインで BDS\4.0\Help\Common\regHelp.exe -7 と BDS\4.0\Help\Common\regHelp.exe 7 を実行してみたら どうでしょう。
>>717 ありがとうございます。表示されました。
・[ドキュメンテーション]からではなくDelphi IDEから開いた場合には目次が表示されない
・ページが表示される前にいったん「Internet Explorer ではこのページを表示できません」と出る
という不都合は残っていますが、使用には耐えそうなのでこれで行ってみます。
ListBoxを表示、OKボタン、キャンセルボタンがあり、 OKボタンが押されたら選択されているアイテムのパラメータを返すという子窓を作成したいです。 ゲームのアイテム選択画面みたいなものを作成したいのですが、 まず小窓をどうやって作成するのかがわかりません。 どなたか教えていただけないでしょうか
セレクトされてるItemIndexを取得 取得したItemIndexのリストの文字列を取得 グローバル変数なんかに入れて 新しいフォームをShowして表示 とかじゃだめ?
フォントダイアログで取得したフォントを使うとき procedure TForm1.Button1Click(Sender: TObject); var MyFont:TFont; begin if not FontDialog1.Execute then exit; MyFont:=TFont.Create; //MyFont:=FontDialog1.Font; // @ //MyFont.Assign(FontDialog1.Font); // A MyFont.Free; end; @にすると終了時にエラーが出ます。どぼじで?
MyFont.FreeでTFontオブジェクトが破棄されてるから、FontDialog1.Fontが無効な参照になる。
MyFontはCreateしてインスタンス化する必要ないんでは?
>>722 Delphiのオブジェクト変数はC++と違ってオブジェクトのある場所を指しているに過ぎません.
そのため@のコードは
変数MyFontの中身(ひとつ上の行で生成したオブジェクトの場所が書いてある)を
FontDialog1.Fontが指している場所で書き換えた
に過ぎません.ゆえに
最後のMyFont.FreeはFontDialog1.Fontが指しているオブジェクトを勝手に解放することになってしまいますし,
@の直前に生成したTFont型オブジェクトは解放されることもなくそのまま残ってしまいます.
その後はFontDialog1が次にFontプロパティを参照しようとしてもすでにそこにはオブジェクトが存在しません.
Delphiのランタイムルーチンがその場所を別な用途に使っていれば混乱して誤動作するでしょう.
もしすでにその場所をWindowsに返している場合はWindowsによってプログラムからの読み書き(アクセス)が禁止されていますので
読み書きしようとした時点でアクセス違反というWindowsのエラーになります.
一方AのコードはFontDialog1.Fontというプロパティが返してくる場所にあるオブジェクトのフォント情報を
変数MyFontが指している場所にあるオブジェクトに書き写しています.
>>724 え、TFontはレコード型ではないけど、Createはしなくてもいいの?
コンストラクタ・デストラクタにFontManager.AllocResourceとかFontManager.FreeResourceとか書かれてるので、
ちゃんとCreate…Freeしないといけないと思ってた・・・
あれ、でもDelphiにおける「クラス」って、
C++でいうと TFont *font = new TFont(); みたいなもんで、
Createしてフィールドにメモリの領域を与えないと、使えないような・・・
うーん。知識が中途半端だから分からん・・・
とりあえず、クラスはヒープ、レコード型は(New、GetMemを使うとかでなければ)スタックでOK?
>>725 C++もクラス型の変数ってオブジェクトのある場所を指しているんじゃないか??
>>726 TFontはクラス型だから、自分でインスタンス作る場合はCreateしなくちゃいけん。
>>720 普通のフォームをもう1個作ってそれを子窓にすることができます.
[ファイル]→[フォームの新規作成]を実行すると新しいフォームができるので
ここにリストボックスやボタンを貼り付けてください.
フォームのNameプロパティにわかりやすい名前(KomadoFormとか)をつけて
ファイル名にもわかりやすい名前(Komadoとか)を付けて保存してください.
ほかのフォームから呼び出すためには
ほかのフォームがアクティブになっている状態で
[ファイル]→[ユニットを使う]を実行し,上で保存したファイル名を選んでください.
MyFont:=FontDialog1.Font; をしたらMyFontもFontDialog1.Fontも同一のTFontインスタンスを指すようになるんだよ。
>>726 フォントダイアログを使って何かのフォントを変更する場合は
if FontDialog1.Execute then
Memo1.Font.Assign(FontDialog1.Font);
みたいな感じのコードになると思うのですよ.
>>724 でわざわざCreateする必要はないというのはもしかしたらこういう事なの…かも?
>>727 C++はもう5年以上やっていないので忘れまくっているかも(汗)
間違ってたらごめんなさいね.
727だけど、おれもかれこれ5年以上さわってなくて。今調べたら、2種類インスタンスの実体化の方法があったのね。
TFont afont;
TFont *bfont;
みたいな感じで。
メンゴ。
>>724 つまり、
//MyFont:=FontDialog1.Font; // @
の場合、C++で書くと、 bfont = &afont
//MyFont:=FontDialog1.Font; // A
の場合、
bfont = new TFont;
bfont = afont
かな?
>>727 C++だとstruct(レコード型)とclassは大差ないから、
TMyClass myclass(123); // myclass := TMyClass.Create(123);
みたいな静的?利用ができるじゃん。
ここでmyclassは TMyClass * じゃなくて TMyClass。
デストラクタが呼び出されるのは、スコープの範囲外になったらなので、解放を明示しなくてもいい感じで。
ちなみに、C++BuilderでVCLのクラス(TObjectを継承したもの全て)
を使う場合は、Delphiと同様に
TFont *font = new TFont();
...;
delete font; // font->Free();
ってやらないとダメ。(だったと思う
//MyFont.Assign(FontDialog1.Font); // A bfont = new TFont; bfont = afont だった。
//MyFont.Assign(FontDialog1.Font); // A いや、bfont = afont じゃなく、 うーん。参照演算子忘れたので、やめとく。
おいおい、どいつもこいつもあやふやなこと書くなよー クラス型変数が参照あるいはポインタそのものである開発言語の例: Delphi(class型)・C#・JAVA・PHP5 クラス型変数が値である開発言語の例: Delphi(object型)・C++・PHP4まで むろん、C++では、クラス型変数のポインタを使ってnewで動的に扱うことも出来る。 今時のDelphiでobject型なんぞ使わんように。
ゆえに、クラス型変数同士で代入した場合、Delphiのclassでは参照渡しになるし、 C++では値渡しになる。
そして
>>735 はクラスとオブジェクトの違いが分かってない・・・と
>>737 そう偉そうにいうなら説明してみそ
クラスとインスタンスの違いのことを言いたいのかねちみは
739 :
デフォルトの名無しさん :2007/01/13(土) 05:36:55
>>737 あそこまで、えらそうにでてきて、それはないww」
質問です とあるツールのフォーム内にPanelがあり、その中にMemoやButtonがあります このような場合、Memoのハンドルを取得するにはどうすれば良いでしょうか?
Memo.Handle
他のアプリのMemoのハンドルだろ?
743 :
740 :2007/01/13(土) 09:40:32
ファイルの作成日時の変更ってどうやるんでしょうか?
745 :
デフォルトの名無しさん :2007/01/13(土) 12:52:32
超初心者の質問です。Turbo Delphiを使ってます。 既に作ってあるプロジェクト(P1)のソースを一部変更して 新しいプロジェクト(P2)として名前を付けて保存すると、P1の ソースまで変更されてしまうのですが、これは何がいけないの でしょうか? つまり、EXCELなんかでは既存のシートを変更しても名前を 変えて保存すれば既存のシートの内容は元のままですが、 これと同じことをDelphiでもしたいのです。
>>745 > これと同じことをDelphiでもしたいのです。
Excel と違って1つのファイルに全部収まっている訳ではないから無理。
> 一部変更して
変更しているのだから
2つのプロジェクトから同じファイルを参照する意味はない。
プロジェクトごとにソースをコピーして、別々に管理するのが良い。
プロジェクトを「名前を付けて保存」で別名保存しても、 プロジェクトに登録されているソースは元のままで、 元のプロジェクトとソースを共有する状態でしょ。 プロジェクトのディレクトリごとコピーしてから、localとdskファイルを削除し コピーした方のプロジェクトを開いて同じことをすればいいのでは。
>>745 どーせバックアップとかって話しじゃないの?
svnなりcvsなり使いなよ
750 :
745 :2007/01/13(土) 14:36:24
751 :
デフォルトの名無しさん :2007/01/13(土) 16:00:04
そうそうw localとdsk削除し忘れて、コピー前のを書き換えて死んだ覚えがある。 今は、svn使ってるが、 svnでも、localとdskはもちろん対象外にしてる
753 :
デフォルトの名無しさん :2007/01/13(土) 18:50:09
delphisvnってのがあんの? うちは、TortoiseSVNで、ふつーに。
755 :
デフォルトの名無しさん :2007/01/14(日) 00:29:03
秒数を分数に直すにはどうすればいいですか? 具体的には 90秒→1:30 や 90秒→1分30秒 に変換したいと思っています。 よろしくお願いします。
60でdivしたりmodすればいいとおもうお 場合によっては、divmod使えば高速にできる
Min := T div 60; Sec := T mod 60;
プログラムの前に別の勉強したほうがいいな・・・
これがゆとり教育の成果です
762 :
720 :2007/01/14(日) 02:24:59
みなさんありがとうございました。
>>728 が決め手で、おかげで解決することができました。
763 :
デフォルトの名無しさん :2007/01/14(日) 02:25:10
あ?死ねよ昭和生まれのオッサンwwwwww
まともな奴は塾通ったり家庭教師雇って勉強するのが普通だしな ゆとり教育は学校の負担減らすものだし
766 :
デフォルトの名無しさん :2007/01/14(日) 13:53:35
//サンプルここから procedure ProcedureTest; begin Edit.Text := 'プロシージャ内でコントロールを制御するの...成功ですね!!'; end; //ここまで Delphi6 Personalを使用している初心者です。 早速本題なのですが、上のサンプルのように、プロシージャの中でコントロールを制御するような文を書くと「未定義の識別子:'Edit'」というようなエラーが出ます。 初歩的なものなのだろうと思い、検索してもヒットせず、自分でいろいろと研究してみたのですが、どうしても分からないため、質問させていただきます。 恐らく、コントロールの作成よりプロシージャの箇所などを先に読み込んでるのが原因だと思うのですが、解決法をご存知の方、ご返答いただけないでしょうか?よろしくお願いいたします。
> 「未定義の識別子:'Edit'」 Edit1 とかじゃないの?
自作の関数や手続き内で勝手にeditなどのクラス使えばそれは未定義になるのは当たり前w var以下でeditの属するクラスを宣言してあげればおk
770 :
デフォルトの名無しさん :2007/01/14(日) 16:32:20
>>767-769 ご回答ありがとうございます。
とりあえず、「MainForm.Edit」にしてみたら(何故「MainForm.Edit」かと言うと、自動的につく名前が気に入らないから変更していたためです)解決しました。ありがとうございました。
歯医者だってよ。また、中途半端な職業だな。普通の外科医・内科医になれなかったおちこぼれ。ってイメージだよな。
お前ら新しい暗号化アルゴリズムでも考えて落ち着けよ
>>774 世の中は外科医・内科医だけでは回らんぞ
俺、失業中の歯医者だけど、あきらめて大学院に入り直すことにしたよ
今度は何を専攻するの?
779 :
デフォルトの名無しさん :2007/01/14(日) 21:27:42
またVB厨が自作自演でスレ荒らしているのか?
VBなら虫歯にならないのにね
781 :
デフォルトの名無しさん :2007/01/15(月) 04:54:53
ありがとう・・・ (´;ω;`)ブワッ
782 :
デフォルトの名無しさん :2007/01/15(月) 05:10:44
( ´`ω´)フフフ
VBならばらばらにしなくてもよかったのにね
いま、例外が前提なのを書いているんですが、 try文を使っているのにデバッカが例外メッセージを出していちいち止まってめんどくさいです。 コンパイル後にできるバイナリはちゃんと動きます。 デバッカが例外メッセージを拾わないようにする方法はあるでしょうか? (すべて例外を無視したらデバックの意味がないのはわかりますが…)
785 :
デフォルトの名無しさん :2007/01/15(月) 09:47:42
>>784 EAbort から派生させた例外クラスを使うか、
IDE の環境設定で「無視する例外の種類」のリストに無視したい例外クラスを追加する
786 :
デフォルトの名無しさん :2007/01/15(月) 11:33:13
虫歯は歯医者が設けるためにまいたウィルスのせいだから、歯医者は氏ね
>>785 ありがとうございました。
EAbortをググって解決しました。
IDEのデバックの設定の方は、設定してやると実行時無反応になったので断念。
今、メインformのcreateイベントでiniファイルからの読み出し部分をコーディングしています。 で、そこで、form2にあるオブジェクトに値を渡すと例外が起きます。 例外が起きる理由は分かるんですが、できればiniからの読み出し部分はひとつのfunctionですませたいと思っています。 この場合、エラーをtryで弾くか、別のイベントをつかうがどちらがいいのでしょう? それとも、読み出し部分をフォーム数だけ分けた方がいいのでしょうか?
789 :
デフォルトの名無しさん :2007/01/15(月) 11:53:52
>>788 そのタイミングだと、form2が生成されていないからだよね。
俺の場合は、よきタイミングで、
iniクラスのインスタンスを引数にして、各フォームにたらいまわしにしている。
まあ、つまり、フォーム数分だけ、分けてる。
他の人はどうしてるのかな?
>>788 ケースバイケースかな。
各フォームのOnCreateに書く場合もあるし、
メインフォームで変数に読み出しておいてForm2の表示時に設定する場合もあるし
メインフォームのOnShowに書く場合もある。
>>786 俺、失業中の歯医者だけど、その発想は無かった
起動時に一度しか読まないもので、なおかつ複数のフォームにからむ処理なら .dpr の Application.Run; の直前に入れるのが普通じゃないのかな 何でもかんでも フォームに押し込めるは悪いクセを付けちゃうよ DOC/VIEWモデル程じゃなくても、ある程度分離しようよ
>>792 できました。
.dprをいじるって発想がありませんでした。
(昔、二重起動防止とかでいじったのを忘れてた)
趣味でプログラムしているのと、過去の蓄積もほとんど無いので、
こういった設計手法(?)とかが全然つかめなくて。
勉強になります。
いま、スクロールするラベルを探しています。 msgscrはためしてみたんですけど、イベントが全くなくて使いづらく、 TMarqueeもためしてみたんですけど、 文字の色がfont.colorで変更できず、textの頭に色コードを整数で入れる仕様で、 ちょっと生理的に受け付けなかったです…。 なんかいいコンポーネントはないでしょうか? ラベルのイベントを継承してて、文字を流すのと止めるのができればいいんですけど。
パクって作ればいいじゃん
テレビ見て気づいたんだけど、なにげに
>>771 の「夢がないよね」って、
バラバラ殺人の事件とかけていたのか。きづかねぇよ。んなこと。
797 :
デフォルトの名無しさん :2007/01/15(月) 18:39:00
>>792 俺は、そのタイミングで、各フォームの読み込み関数にまわしてる
俺はデータモジュールに色々共通なものまとめてるな。
私もデータモジュールにアプリケーション全体で扱う情報まとめています. というかひとつのユニットにまとめないと悲惨です. (昔やった他人が作ったプロジェクトの修正のお仕事で フォームが60以上あってその中のいくつかのフォームに アプリケーション全体で使う情報が分散しているという恐ろしいものがありました. ちなみに仕様書無しです) 比較的小さいプログラムを作るときもデータモジュールは作っています.
>>770 自動的に付く名前はあくまで仮のものですし
わかりやすい名前を付けることはわかりやすいソースコードにつながります.
これはプログラミングでは重要ですので
名前を変えてしまうのはむしろ良いことです.
ちなみにその手続きが作ったフォームに関する処理を行うものなら
(普通の)手続きよりもフォームの「メソッド」にしたほうがよいでしょう.
理由はいろいろあるのですが
フォームの名前を書かなくても良いので今回みたいなトラブルが初めから起きないというメリットもあります.
(普通の)手続きや関数は主にフォームとの関連性がない処理(たとえば何らかの計算処理,文字列と数値の変換など)
にだけ使うのがよいと思います.
∧,,∧ ミ,,゚Д゚彡 ミ つ旦)~~ 〜と,,,~),,~) 旦~~ ]]]]]]]]]]]]]]]]]]]]]]]]]]]] なるほどなあ。俺も参考にするぞ。
えーと、データモジュールでiniの読み込み等初期設定をするのは
プロジェクトが
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.CreateForm(TDataModule3, DataModule3);
Application.Run;
end.
っていう風になって
Form1とForm2が生成されたあとにデータモジュールができるから、
データモジュールのonCreateに各オブジェクトに数値を渡すのを書けばいい
ってことですよね? 先にFrom1,2が生成されるから参照しても例外にならないと
すごく便利。データモジュールってデータベース系の非ビジュアルコンポーネント置き場としか思ってなかった。
次からはそういう設定にします。
>>799 …。似たようなことやった記憶が(汗
現役時代(8年ぐらい前)、業務用アプリのメニューの制作を担当したんですけど、
メニュー1ページごとにIDEでパネルをおいて、ボタンを置きまくって
ってのを十数ページやった記憶が。デザイン時、どこをクリックしたらいいのかわからん状態w
さすがにイベントは共通化してtagで振り分けてましたが…。
今思えば、なんでオブジェクトの動的生成をしなかったのかと…。知識がなかったからですが。
∧,,∧ コロコロ
ミ゚Д゚,,彡
σ⊂ ∪ミ
┳┳ (~,,(~,,,ミ@
>>621 、
>>633 でお世話になったフサギコです。
こんばんは。
こんどは、メモリ使用量=PF使用量を
求めたいのですが、どーしたらよいでしょうか?
∧,,∧ 知っとったら
ミ*゚Д゚彡 おせて。
σ⊂ ∪ミ
┳┳ (~,,(~,,,ミ@
ヨロシコ
俺はアプリケーションの設定情報を表すクラスを一つ作成して、そのクラスのpublishedなプロパティすべてを
をRTTIを使ってINIまたはレジストリに自動で読み書きするメソッド用意し、データモジュールのOnCreateでそのメソッド呼んでるな。
で、そのクラスのインタンスをグローバルにするか、もしくは、データモジュールのメンバとするかは気分次第。
>>802 どういこと??
>>Application.CreateForm(TForm1, Form1);
を呼んだ段階でフォームのOnCreateイベントが発生するから、ここで、データモジュールを
参照したら、あきらかに、まだ、作られていないので、アクセス違反になる。
データモジュールのOnCreateでINI読むなら、データモジュールをフォームより先に作成すればいいだけ。
begin
Application.Initialize;
Application.CreateForm(TDataModule3, DataModule3);
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.Run;
end.
>>803 > こんどは、メモリ使用量=PF使用量を
GetPerformanceInfo でコミットチャージ(合計)を取得して
1024で割る。
>>804 DMのOnCreateで読み込む。
因みにDMはFormよりも後にCreateFormされる。
808 :
デフォルトの名無しさん :2007/01/16(火) 15:23:07
(゚Д゚)ハァ?
Delphi6でデバッグ中に、OutputDebugStringを見るには?
Delphi6です。 簡単にフォームのみを透明にする方法はないでしょうか? AlphaBlendを使ったら全部透明になってしまいました。 ファームを透明にしつつ、ラベルとかボタンを表示する方法はないでしょうか。 ググったらリージョンってのに行き着いたんですが、手間がかかりすぎるので…。
ホントに超初心者的な質問です。 昔で言うところのサブルーチンを作る際、引数も戻り値もない場合はなにで宣言すればいいんでしょう? 自分はfunctionで宣言して、戻り値は適当にIntegerとかに。 で、コンパイルで警告がばんばん出ます。
procedure Hoge;
>>814 !
procedureって引数が必須と思いこんでいました。ありがとうございました。
WindowsMe&Delphi6で with MediaPlayer1 do begin //ExePathはString型の変数で実行ファイルのフォルダのパスが入ってます FileName := ExePath + 'Music\a.mp3'; Open; Rewind; Play; end; こう書いて実行するとなぜかフリーズ&パソ落ちします… しかもXpが入ったPCで実行した時は正常に動く… 何故でしょうか…
>>817 ありがとです…
ためしてみましたが、AlphaBlendを使ったのと同じく、すべて透明になってしまいましたorz
AlphaBlendはWindows2000の新APIを使った半透明だよ。。。
822 :
デフォルトの名無しさん :2007/01/17(水) 00:41:36
>>804 意味不明。
DMとFormは、逆だろ?
>>822 FormがDMのコンフィグ情報を取得するのか、
DMからFormへ情報を設定しに行くのかによるでしょ。
>>819 UpdateLayeredWindowを使えばおk
825 :
デフォルトの名無しさん :2007/01/17(水) 02:26:40
>>823 FormがDMへのコンフィグ情報を取得する場合、
FormとDMで、二つのメンバー(もしくは、片方がプロパティで片方メンバ)を記憶させる必要があり、
冗長ではないのか?
>>816 アプリがどうこうして、OSが落ちることは考えられない。
デバイスドライバのせいではないか?
>>804 RTTIで、うまく読み書きする方法をご教授願いたい。
一括で、すべてのプロパティを保存するのか?
>>819 Delphi6はしらんが、Delphi7でなら
TransparentColorとTransparentColorValueでフォームのみの透明化は可能。
TPictureの質問です。 TPicture.で実行時に画像を指定する方法は分かったんですが、 表示している画像のファイルパスを取得する方法はありますか? もうひとつ TPictureで表示している画像を初期状態の(なし)に戻す方法はありますか? よろしくおねがいします
>>828 >TPicture.で実行時に画像を指定する方法は分かったんですが、
>表示している画像のファイルパスを取得する方法はありますか?
無いはず
ファイル名をプロパティとして持つ派生クラスを作ると楽かな
>TPictureで表示している画像を初期状態の(なし)に戻す方法はありますか?
TPicture.Grahpic := nil;
Socketを利用してLAN内のPC同士でやり取りをしようと思っていますが、 IPアドレスが動的割り振りの場合、どうやって相手のIPアドレスを取得するのがいいですかね? ネットワークコンピュータ名からIPアドレスを取得できますか? こういう機能って固定IPアドレス前提なのが当たり前なのでしょうか? 自分が思いついたのは、共有フォルダの範囲内にiniを置いて読み出す方法 ですが、他人に使ってもらえる仕様じゃないと思います(汗 (フリーウェア公開を目指しています)
>>831 レスありがとうございます。
ソースが理解の範囲を超えていました(汗
全員に問い合わせるっていうと、
サブネットマスクの範囲内で0〜255全部にメッセージを送って成功したアドレスを取得って事ですかね
バグだすとエラいことになりそうな。
Delphiで、 #define { begin #define } end; とかやれば、Cっぽく書けますか?
そもそも#defineから定義しないとダメ
ワロタ
836 :
デフォルトの名無しさん :2007/01/17(水) 20:06:01
DBについての質問です。 Int64の値をDBに入れたいのでBigIntで定義したのですが、エラーが出てしまいます。 どちらも8バイトなので問題ないと思うのですが、何故なんでしょうか? DB: MySQL 接続: ODBC IDE: Delphi7 OS: XP
837 :
836 :2007/01/17(水) 20:11:34
追記 あとクラスはBDEのTDatabaseとTTableを使ってます。 Table1.InsertRecord([Int64(10)]); こんな感じでレコードを挿入するとエラーが出ます。 宜しくお願いします。
>>832 ブロードキャストアドレス で問い合わせるんだよ。
でも普段は出来るだけブロードキャストしなくていいように
自分の情報が変更される時は、その情報を全員に伝えるようにしておけばいいでしょ?
>>837 BDEを使っている場合は
ドライバのオプションで
Don't optimize column widths
Return matching rows
を設定する必要がある。
Gridを改造して、選択範囲をドラッグ&ドロップで移動できるようにしたいのですが、 選択範囲をクリックした瞬間に範囲が解除されてしまうので実現できません。 クリックしても範囲が解除されないにはどうすればいいですか?
842 :
837 :2007/01/17(水) 22:39:51
レスありがとうございます。
>>839 フィールドタイプとはテーブルの型って事ですか?
create table test (test bigint);
こんな感じでやってます。
>>840 二つのオプションをつけてみましたが、改善されないようです。
一応このオプションつけなくてもIntegerだと普通にインサートできるんですが、
これはInt64或いはBigIntを使う場合に必要って事なんでしょうか?
>>842 > フィールドタイプとはテーブルの型って事ですか?
TTable のフィールド(項目コンポーネント)の型
844 :
837 :2007/01/17(水) 23:10:10
>>843 失礼しました。項目の型でしたね。
TTableの項目は特に何も設定していなかったりします。
フォームにTDatabaseとTTableを貼り付けて
以下のソースを書いただけです。
procedure TForm1.FormCreate(Sender: TObject);
begin
Database1.AliasName := 'TestDB';
Database1.DatabaseName := 'Test_DB';
Database1.LoginPrompt := False;
Database1.Params.Add('USER NAME=root');
Database1.Params.Add('PASSWORD=password');
Database1.Connected := True;
Table1.DatabaseName := Database1.DatabaseName;
Table1.TableName := 'test';
Table1.Active := True;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Table1.InsertRecord([21474836691]);
end;
ちなみにTDataSourceでTDBGridと関連付けてやると
コマンドプロンプトからMySQLに直接入力した値は問題なく読み出せます。
>>825 さん
> FormがDMへのコンフィグ情報を取得する場合、
> FormとDMで、二つのメンバー(もしくは、片方がプロパティで片方メンバ)を記憶させる必要があり、
> 冗長ではないのか?
>
> RTTIで、うまく読み書きする方法をご教授願いたい。
> 一括で、すべてのプロパティを保存するのか?
___________
∧,,∧ /TMemoryStreamの
_ ミ,,゚Д゚彡_< WriteComponent/ReadComponent
.=| |=U=U=| |= \ を調べてみてみ〜♪
| | .ミ ミ | |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| |ノ∪''∪. | |
| | | |
> FormがDMへのコンフィグ情報を取得する場合、 > FormとDMで、二つのメンバー(もしくは、片方がプロパティで片方メンバ)を記憶させる必要があり、 > 冗長ではないのか? _____________ ∧,,∧ / _ ミ,,゚Д゚彡 _< レスし忘れた..... .=| |=U===U=| |= \ | | .ミ ミ | |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ | |ノ∪''∪. | | | | | | 冗長というかFormのプロパティはViewなので Modelとして、DataModuleのメンバーを持たせるんだと思うよ。 というか、DataModuleでプロパティをつくるのが よりベターなんだろうね。
847 :
837 :2007/01/17(水) 23:25:30
なんか解決したようです。 フィールドを追加して型を確認したところ Table1test: TFloatField; となっていたので、Float?と思いつつ末尾に.0をつけてやったらうまくいきました。 ん〜なんか良くわかってないんですが取りあえず解決です。 お付き合いありがとうございました。
>>846 ほんとにくだらない質問だけど、
数年前(4、5年?)にもDelphiの質問スレに来たことあって
そのときもフサギコさんいたんだけど、ひょっとして中の人同じ?
Delフサの中身がいつの間にか変わっていたら、その方が驚きだな
delphi6を使っています テキストファイルやバイナリファイルの一部 例えば10バイト目から12バイト目だけを書き換えるにはどうすれば良いですか?
まったくだw
854 :
850 :2007/01/18(木) 09:08:22
MDI親フォームが2つで、子フォームが1つある時、親フォームを行き来させたいのですが、Parentを変更しても移動してくれません。 何か方法は無いものでしょうか?
> Parentを変更しても Parent はストリーム書き込みの関係だから、意味がない。 > 移動してくれません。 何がしたいのか良く分からんが 子フォームの状態を保存して、作り直せばいいじゃん。
Parent はストリーム書き込みの関係だから、意味がない。
858 :
856 :2007/01/18(木) 15:08:59
>>857 と聞いているのだが、違うの?
俺初心者なんで、違うなら教えて。
859 :
856 :2007/01/18(木) 16:12:42
ストリームの件はコンポーネントの話で 今回の質問はウィンドウの話だから、ちょっと違うって事でOK?
860 :
デフォルトの名無しさん :2007/01/18(木) 16:14:10
Delphi2005を使っています。 掲示板にテキストデータをpostする際、Tmemoの1番最初の行しかpostされません。 どうすればいいでしょうか?
急募 エスパー
どこの新興2ちゃんブラウザ作者だよ。
864 :
860 :2007/01/18(木) 21:08:45
掲示板に広告を自動で投稿するプログラムです
>>860
>864 1行広告でがまんする。
867 :
デフォルトの名無しさん :2007/01/18(木) 23:49:33
Delphiで、コマンドプロンプトの出力を得たいです。 コマンドプロンプトは非表示で、perlのファイルを実行、 その出力をEUCでエンコードしてMemoあたりに表示したいです。 一応、C#のソースならあります。誰か、Delphiに翻訳して下さい・・・ Process p = new Process() ; p.StartInfo.FileName = Environment.GetEnvironmentVariable("ComSpec"); p.StartInfo.CreateNoWindow = true ; // 起動に ウィンドウ を使用しない p.StartInfo.UseShellExecute = false ; // 起動に OS のシェルを使用しない p.StartInfo.RedirectStandardInput = false ; // 標準リダイレクト入力を不許可 p.StartInfo.RedirectStandardOutput = true ; // 標準リダイレクト出力を許可 p.StartInfo.Arguments = @"/C cd C:\hogehoge && perl hoge" ; // コマンド設定(/C = 実行後 終了) p.Start() ; // 起動 StreamReader output = new StreamReader(p.StandardOutput.BaseStream,Encoding.GetEncoding("EUC-JP")) ; // 出力を取得(参照の宣言のみ) p.WaitForExit() ; // プロセスが終了するまで待つ // 表示(出力を実際に取得) output.Close();
868 :
867 :2007/01/18(木) 23:57:33
リダイレクトでググル。いっぱいあるわな
870 :
デフォルトの名無しさん :2007/01/19(金) 00:27:18
>>640 の
>掲示板にテキストデータをpost
これはどうすればできますか?
ゲームの得点等を送信してランキングを作りたいのですが・・・
質問です Delphi6を使用しています マウスカーソルがどこにあっても、 マウスの状態(左右・ホイールボタンが押されているかどうか等)を取得するにはどうすればいいですか?
875 :
デフォルトの名無しさん :2007/01/19(金) 12:04:29
SHGetFileInfoを呼ぶとメモリ使用量が1MBぐらい増えて、 そのあとも終了するまで増えたままになるんだけどこれは仕様ですか メモリリークにはなってないみたいだけど win2k+del7
ああ場所じゃなくてボタンか マウス フック で調べてみ
>>877 あ リロードしてませんでした
探してみます
SetCapture
>>880 してるしてる
それにアイコンハンドルつっても4byteでしょ
1MB増えるのってみんなも同じなのか?
これほっといてもいいのか?
>それにアイコンハンドルつっても4byteでしょ 4byteはハンドルの長さだろw DestroyIcon はハンドルの参照してるアイコンのデータのインスタンスを破棄するもんだ。
確かに1M増えるね。 しかもフラグに0渡しても同じ。 最初に呼出した時にシステムイメージリストが作られるからじゃない?
>>884 ImageList_Destroy使ってみたけど削除できねーみたいだ
もういいや諦めよう・・・
みんなありがとう
さようなら・・・
>>886 そのコードでちゃんといける。
もっかい見直せ。
>>887 やっぱりできません(汗 最小構成で試しに組んでみたんですがダメでした↓
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,ShellAPI, Menus;
type
TForm1 = class(TForm)
PopupMenu1: TPopupMenu;
test1: TMenuItem;
private
procedure WMNCRButtonDown(var Msg: TWMNCHitMessage); message WM_NCRButtonDown;
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.WMNCRButtonDown(var Msg: TWMNCHitMessage);
begin
PopupMenu1.Popup(Msg.XCursor, Msg.YCursor)
end;
end.
よくリモートホストなんかの切り出しをする場合、IP部分や接続によって変わる部分を「*」で表記するようになっていますが 内部的にはどういう処理の仕方がベターなのでしょうか 私はposとcopyとstringreplaceを使いまくる方法しか思いつかないのですがこれじゃあまりにも遅すぎますよね
>>888 PopupMenu1が空っぽのメニューとかいうボケじゃないよね?
>>890 ありがとうございます。
コンポーネントが見つかったので勉強してみます。
>>891 フォーム上で右クリックすると自分で設定したポップのが表示されます。
タイトルバーで右クリックすると、最小化、閉じるしかでてきません。
それはタスクバーじゃないの?
>>894 あ…
タイトルバーとタスクバーとタスクトレイを混同してた(恥
ヽ(・ω・)/ ズコー \(.\ ノ
生成したMDI子フォームを、そのまま他のMDIフォームへ移動させる事はできないという事ですか? プロパティ保存して再生成すれば同じようなことはできるのでしょうけど、 処理を実行したまま移動したり、フォームのポインタの更新を避けたいので、 できればそのまま移動させたいのですが、難しいのでしょうか。
>897 というかメインフォーム以外のフォームをMDIの親フォームとして動作させられないような希ガス。 MDI親フォームにはなってもMDI子フォームを入れる手段がない。
>>897 Windows.SetParent(MDIChild.Handle, MDIForm.ClientHandle);
副作用は知らない。
助かります! 副作用は調べてみます。
質問です D6使ってます Delphi使ってる人をDelphianと呼ぶのですか? C使ってる人はCゲンガーですか?
今、ポップアップのようなモノを作っているのですが、 自分のアプリケーション以外がクリックされた時も消してやりたいです。 どうすればいいでしょうか?
>>904 すいません。
具体的に書きます。
いま、ミュージックプレイヤーを作っています。
それをボリュームのコントロールを、別フォームで表示させています。
この別フォームを、たとえば、デスクトップをクリックした時に消してやりたいのです。
イメージとしてはTPopupMenuみたいな感じです。
それだけなら WM_ACTIVATEAPP 捕まえればいいような
907 :
デフォルトの名無しさん :2007/01/20(土) 14:04:08
TPopupMenuの挙動のようなTFormか
デスクトップをクリックとなると マウスボタンのフックとかになるんかね
フォームにApplicationEvents貼り付けて、 そこのOnActiveとDeActiveで消したり表示したりじゃダメか
レスありがとうございます
>>909 の方法でそれらしいのができました。
WM_ACTIVATEAPP捕まえるってのはさっぱり分からなくて、ググってもよく分からなかったんですが
WinAPIですよね? ちゃんと把握しておいた方がいいですか?
知っていて損は無いという程度
912 :
デフォルトの名無しさん :2007/01/20(土) 19:14:25
低レベルな質問すまそ。 Integer型の変数aのランダムをLabelに表示したいのですが、 a:=Random(10);とやっても最初が0しか表示されないのですがこれは偶然0なのですが? 何か違って最初が必ず0になってしまうのですか? あと、Label2.Captionにaとbの変数の足し算 (計算はせず、String型の計算式)を表示させたいのですが Label2.Caption:=(IntToStr(a))'+'(IntToStr(b))'=' ; これは全く違いますか??
913 :
Delphi初心者 :2007/01/20(土) 19:17:46
>>912 Randomize;
TForm1.FormCreateに↑の入力すればできると思うよ^^
ランダムしてる部分のソース貼ってみ あとLabel2.Caption:=(IntToStr(a))'+'(IntToStr(b))'=' ; これはLabel2.Caption:=IntToStr(a)+'+'+IntToStr(b)+'=' ; こうだな
915 :
デフォルトの名無しさん :2007/01/20(土) 19:20:22
>>913 そのRandomize;とは何でしょうか;?
TForm1.FormCreateには入力しています。
ヘルプ読め
聞く前にヘルプで調べろ 全部書いてある
918 :
Delphi初心者 :2007/01/20(土) 19:22:49
>>915 Delphi6のヘルプより引用
Randomize 手続きは,現在の時刻を元に組み込みの乱数生成関数を初期化します。通常は,アプリケーションの起動時に一度呼ぶだけで十分です。
乱数生成関数を初期化するには,Randomize を呼び出すか,RandSeed に値を割り当ててください。
ループ内の Randomize 呼び出しと Random 関数の呼び出しを組み合わせないでください。通常,Randomize は,すべての Random の呼び出しの前に一度だけ呼び出されます。
919 :
デフォルトの名無しさん :2007/01/20(土) 19:22:58
調子乗った…すいませんorz
920 :
Delphi初心者 :2007/01/20(土) 19:24:24
921 :
Delphi初心者 :2007/01/20(土) 19:32:18
922 :
デフォルトの名無しさん :2007/01/20(土) 19:33:43
乱数も、+や=の表示もなんとかできました(´;ω;`) 本当にありがとうございます!! procedure TForm1.FormCreate(Sender: TObject); var a,b,I:Integer; begin Randomize; for I := 1 to 10 do begin Label2.Caption:=IntToStr(a)+'+'+IntToStr(b)+'=' end; end; こんな感じでエラーは出なかったのですが、 やはり再生すると、0+0=の計算しかならないのが気になります。 いきなり4+5=などの数字にはならないのでしょうか? さっきと同じことを聞いていたらすいません。 ちなみに、ランダムで出てくる数字の足し算のプログラムです。
923 :
デフォルトの名無しさん :2007/01/20(土) 19:35:08
リロってなかったorz
>>921 さん本当まりがです。
>Delphi初心者 調子に乗って構いすぎるなよ 912に為にならんだろが
for文の意味が分からん 同じLabelに繰り返し表示してどんな意味があるの
926 :
デフォルトの名無しさん :2007/01/20(土) 19:55:43
ひっさしぶりの初心者だからって、うれしがってあんまりかまうなよ・・・
procedure TForm1.FormCreate(Sender: TObject); const i = 10; var a,b:integer; begin Randomize; a := Random(i); b := Random(i); Label2.Caption := IntToStr(a)+'+'+IntToStr(b)+'='; end;
929 :
デフォルトの名無しさん :2007/01/20(土) 20:04:39
naze?
どうでも良いことで上げるなDelphi初心者
Tmemoの中から一文字だけ取得したい場合はどうすればよいのでしょうか? 例えば、 「あいう えお」 とメモに書いた場合に、 「ういあ おえ」 と文字を入れ替えたいのです(「かぎ括弧はわかりやすくするためにつけたものです。)
取得したいのか置き換えたいのかはっきり
>>932 置き換えをしたいのですが、おそらく置き換えに必要な取得がそもそもできません。
「置き換え」そのものを教えていただけるとありがたいのですが、まずは「取得」のほうから勉強したいと思います。
//文字列strからchr1とchr2を探して置き換える function Rep(str,chr1,chr2:String):String; begin p1 := Pos('chr1', str); p2 := Pos('chr2', str); str[p1] := chr2; str[p2] := chr1; Result := str; end;
935 :
デフォルトの名無しさん :2007/01/20(土) 20:38:12
どうでもよいから age
どうでも良いことで上げるなDelphi初心者
937 :
デフォルトの名無しさん :2007/01/20(土) 20:40:45
>>834 ちゃんと AnsiPos() つかえよ
あと、一文字っても2バイトかもよ
938 :
デフォルトの名無しさん :2007/01/20(土) 20:42:04
いちいちうるさいんだよDelphi初心者
んじゃWideStringでいいか
Delphi初心者必死
>>934 p1、p2とは何のことでしょうか?
すいません。
>>934 宣言抜けてるな
var
p1,p2:Integer;
>>942 ありがとうございます。
何か特殊なものだと勘違いしておりました。
ご丁寧にすいません。
度々申し訳ないのですが、str[p1] := chr2;のところで 型が合わないといわれてしまいます。
型合せれば良いじゃん
934のコードを読んでまともに動作すると考える方がどうかしてる
何故誰もStringReplaceを出さないんだ・・・
ReplaceRegExpr
p1とかp2ってのは、ポインタにつけるような変数名だな
950 :
867 :2007/01/20(土) 23:44:28
>>869 ありがとう。リダイレクトでぐぐって以下のソースを見つけました。
http://www.smart-bbl.info/CQN/FAQ/delphi/d0009376.html で、コマンドを渡して出力を得ることはできるのですが、
あるコマンドを入れると出力を取得できなくなってしまいます。
例えば上記URLのソースの
Command = 'C:\tools\lha.exe'; // 実行するDOSプログラム
の部分を
Command = 'COMMAND.COM /c dir'; // 実行するDOSプログラム
とすると、上手く出力を得られるのですが、
Command = 'COMMAND.COM /c cd C:\hogehoge && perl hoge'; // 実行するDOSプログラム
とすると何も返ってきません。
普通にコマンドプロンプトで打ち込んだ時には取得できるのですが・・・
どのように入力すれば出力を得られるでしょうか?教えてください。
D7のアクションメニューバーのようなXPスタイルをポップアップメニューでも使いたいです。 いろいろ調べているうちにTStandardPopupMenuというものを使えばいいようなことまでは分かりましたが、 そこから先が分かりません。というのもIDE上からは作成できないようですし。。。 TStandardPopupMenuを動的に作る方法などありましたら教えてくださいm(_ _)m
>>952 おーまじありがとう^^
これでできそうだよ
> ソースプリーズ。
ソースっていうかアクションバンドのVCLソース読んでたらそう思っただけなんだが・・・。
VistaにBDS2006をインストールすると、インストールは終わるものの、起動すると回復不能なエラーで終了してしまいます。 で、アップデートをしようと思って bds2006_jp_pro_upd2.msp を実行したんですが、 --------------------------- エラー --------------------------- インストールできません。このファイルは Borland Developer Studio 2006 Professional 版 版用のアップデート 2 です。 セットアップを中止し, 版のアップデート 2 をインストールし直してください。 --------------------------- ・・と出て、アップデートできません。 勿論、Proを入れて、Pro用のパッチを当てたのですが、うまくいきません。 どなたか、うまく回避できてるかたいませんか?
>>954 回避方法: Vistaを使うのをやめる
だったらどっちかっつーと、Delphi使うのをやめるな。
CodeGearに聞けよww
--------------------------- エラー --------------------------- EPackageRegistrationException がモジュール coreide100.bpl の 000DB245 で発生しました。 登録プロシージャ Pasdotnetreg.IDERegister (パッケージ C:\Program Files\Borland\BDS\4.0\Bin\delphidotnetide100.bpl) が例外クラス EOSError を生成しました: システムエラー。コード:5. アクセスが拒否されました。. 次に Borland Developer Studio 2006 を起動するときにも、この IDE パッケージを読み込みますか? --------------------------- はい(Y) いいえ(N) ---------------------------
N
constで配列を指定することはできますか? const ExeModeName array [0..2] of string = ['aaa','bbb','ccc']; みたいなことがやりたいのです。
const ExeModeName: array [0..2] of string = ('aaa','bbb','ccc');
>>961 ありがとうございます。基本的な文法ミスでしたorz
boolean型での[]と混同してました。
>>954 > アップデートをしようと思って
コマンドラインで、 msiexec /update bds2006_jp_pro_upd2.msp
>>958 > EPackageRegistrationException
IDE を管理者権限で実行するか
ユーザーにBDS/4.0/bin フォルダのアクセス権を設定するか
いずれかが必要みたい。
965 :
954 :2007/01/21(日) 11:45:30
>>961 こういう1行で、実行文(procedure内とか)に配列の変数に代入するにはどうやって書けばいいのでしょう?
配列を初期化するためには残念ながら書けない。 配列リテラルが許されるのはオープン配列引数を持つ関数やプロシージャの引数くらい。
>>963 Delphiでは、
>>961 みたいな型付き定数は、デフォルトでは真の定数ではないので念のため。
書き換え可能。
エラーがでる可能性があるところを try hogehoge; except end; と書いているんですが、実行時エラーがでた時にエラーメッセージがでます。 このエラーメッセージをでないようにする方法はありますか?
>>969 通常の例外であればそのコードで握りつぶせるはずだけど。
hogehogeの中で例外ハンドリングしてメッセージを表示しているのでは?
971 :
950 :2007/01/21(日) 15:30:41
>>970 レスありがとうございます。socketを利用したプログラムを組んで居るんですけど、
クライアントタイプをctBlockingにしたらメッセージはでなくなりました。
ctNonBlockingだとメッセージがでます。
ヘルプ読んでも違いがよく分からない…
とりあえずクライアントタイプをctBlockingで組んでいきます。
ctNonBlocking のソケットは非同期で読み書きが行われるので、
実際は
>>969 の例外ブロックの外で例外が発生しているというオチの予感。
エラーメッセージが出るっていうのはIDEから実行したときだけの話だろうね。
976 :
デフォルトの名無しさん :2007/01/21(日) 16:21:06
>>950 Command = 'COMMAND.COM /c "cd C:\hogehoge && perl hoge"'
では駄目?
>>950 のは単純にPerlのコマンド実行だからスレ違いじゃね?
コマンドラインオプションでディレクトリ指定すればいい
978 :
950 :2007/01/21(日) 17:31:51
>>976 、
>>977 ありがとう。
>>976 のは何も返ってこなくて、
Command = 'COMMAND.COM /k "cd C:\hogehoge && perl hoge"'
~~~
にしてみたら
・・・略・・・
KKCFUNCが組み込まれました.
マイクロソフトかな漢字変換 バージョン2.51
・・・略・・・
コマンドまたはファイル名が違います.
とDOS画面に表示されていました。
>>977 えっ
>>978 COMMAND.COMのオプションじゃなくてw
Perl -xとかのこと。 Perl -h叩いて確認しれ
980 :
950 :2007/01/21(日) 17:45:32
>>979 ありがとう。みたけど英語でわかんなかった
&&の使い方がおかしいのかな?
コマンドプロンプトで
(カレントディレクトリ)>cd C:\hogehoge
C:\hogehoge>perl hoge
というようなことをやりたいんですが・・
981 :
デフォルトの名無しさん :2007/01/21(日) 17:46:35
>>978 perlにパスが通ってないとかそういうのは大丈夫だよね。
982 :
950 :2007/01/21(日) 17:50:09
>>981 えっ・・
コマンドプロンプトとかC#で作ったやつからはできるから大丈夫・・・だと思う・・
>>982 ディレクトリ移動がなぜ必要なのか
'perl C:\hogehoge\hoge' ではなぜだめなのか?
つかこれ以上はPerlスレ池
984 :
デフォルトの名無しさん :2007/01/21(日) 18:12:33
"Textout"を使って、 文字列をウィンドウの中央に 表示したいのですが、 どうすれば良いでしょうか?
var S: string; W, H: Integer; begin S := 'hoge'; W := Canvas.TextWidth(S); H := Canvas.TextHeight(S); Canvas.TextOut((Width - W) div 2, (Height - H) div 2, S); end;
986 :
950 :2007/01/21(日) 18:24:49
>>983 できたーーーーーーーーーーーーーーー!!!!!!
できました!!!!!!
ありがとうございます!!!!!!!!!!!!!!!!!!
でもまだエンコードが・・・orz
また分からなかったら聞きにきます。ありがとうございました!
987 :
q :2007/01/21(日) 20:10:09
[質問] 「上から○(円)が落ちてきて、 ウィンドウの1番下に達したら その円は止まり、新しい円が また落ちてくるプログラムを作れ (ただしfor文を使うこと)。」 という宿題が出たのですが、 よく分かりません。 どなたか分かる方、教えて下さいm(__)m
ローカルドライブから特定のファイルを検索し、 そのファイルがあるディレクトリのフルパスを取得する方法を教えてください。
993 :
990 :2007/01/21(日) 23:44:13
TADOTableについて質問です。 mdbファイルをTADOConnectionで開き、TADOTableでテーブルを開こうとしているのですが、 テーブル名に + - / ( ) & 等、演算子を含むものがうまく開けません。 命名ルールとしておかしいのはわかっているのですが、実際Access上に存在してしまっており、 テーブル名の変更などができません。 うまく開く方法がありましたら教えていただけないでしょうか。
[]で囲んでもだめですか?
[ ] でかこったらいけました。どうもありがとう。
ume
うめ
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。