駄スレ立てんな、屑!!!
これがツンツンしてる乙ってやつか
7 :
デフォルトの名無しさん :2006/11/02(木) 23:02:16
早速ですがお願いします。 値を渡すと、それに対応するコンポーネントを操作する関数を作りたいのですが、 やり方が分かりません。 以下のように記述したところ、当然エラーでした。 procedure Draw( imageNum : integer ); begin if imageNum = 1 then with Image1.Canvas do begin else if imageNum = 2 then with Image2.Canvas do begin // 値が1の時はイメージ1のキャンバスを、2の時はイメージ2のキャンバスを操作したい TextOut(100,100,'abc'); end;//← with 〜 do begin用のend end; どのようにすればよいでしょうか。よろしくお願いします。
多分、Form1.Image1〜 とかそんな感じ
>>7 for i := 0 to Form1.ControlCount -1 do
begin
c := Form1.Controls[i];
c.Name
end;
procedure Draw( imageNum : integer ); var TI:TImage begin TI = nil; if imageNum = 1 then TI = Image1; else if imageNum = 2 then TI = Image2; if TI <> nil then TI.Canvas.TextOut(100,100,'abc'); end;
11 :
7 :2006/11/02(木) 23:25:26
12 :
9 :2006/11/02(木) 23:26:29
これでcastして実行の方が綺麗だな var name:string; c:TControl; name := ' Image'+IntToStr(num); c:=Form1.FindChildControl(name);
13 :
7 :2006/11/02(木) 23:42:13
>>12 (9)さん
ありがとうございます。
たしかに、予めif文でイメージの数だけ定義をする必要がなくなりますね。
そちらで行かせて頂きます!
14 :
7 :2006/11/02(木) 23:54:11
たびたびすみません。。
>>12 の c をどのように使うのでしょうか…
15 :
名無し募集中。。。 :2006/11/02(木) 23:58:16
Turbo DelphiのVCL一覧が載ってるところ知りませんか? 公式サイトで見ても全部書いてなくて…
>>14 name := ' Image'+IntToStr(num);
c := Form1.FindChildControl(name);
TImage(c).Canvas.TextOut(100,100,'abc');
これで出来ん?
コード上でボタンを生成して、そのボタンの全てのプロパティを他のボタン(フォーム上に設置されてます)と同じにしたいです。 NewButtonを生成した後に NewButton.Assign(Button1); としたのですが、 EConvertError クラスの例外を生成しました。 'TButton を TButton に代入することはできません' とエラーになってしまいます。 どうすれば全てのプロパティをコピーできるのでしょうか? NewButton := Button1; だと意味が違ってきますよね?
19 :
7 :2006/11/03(金) 00:11:09
>>14 3行目でエラーになってしまいます…
procedure Test(num : integer);
var
name : string;
c : TControl;
begin
name := 'Image'+IntToStr(num);
c := Form1.FindChildControl(name);
TImage(c).Canvas.TextOut(10,10,'abc');
end;
>>18 コンポーネントの全てのプロパティはコピー出来ないよ
だって同じNameを持つコンポーネントが作られちゃうでしょ?
必要なプロパティを選んで代入する必要がある
>NewButton := Button1;
これをやるとNewButtonもButton1を指すことになる(NewButton == Button1じゃないことに注意)
Delphiのオブジェクトの実態はポインタとなる
21 :
18 :2006/11/03(金) 00:29:13
>>20 そうですか。
使うプロパティを1個ずつ代入するしかないのですか。(確かにNameがかぶっちゃいますね)
面倒だけどしょうがないですね。ありがとうございました。
>>19 FindChildControlの結果はnil?
>>20 すまん、FindControlはTImage引っかからないわ・・・
if文か
>>9 でControlとって来てになるね。
24 :
7 :2006/11/03(金) 00:50:25
FindComponent だろ
>>25 すまぬ。言い訳できぬわ・・・
>>24 var
name : string;
c : TComponent;
name := 'Image'+IntToStr(num);
c := FindComponent(name);
TImage(c).Canvas.TextOut(10,10,'abc');
>>7 動かない原因として、
ifとwithを混ぜてるということもある。
30 :
デフォルトの名無しさん :2006/11/03(金) 06:08:09
自アプリを抜けた場所でもマウスのポインタの表示を固定したいのですが どのようにすればよいのでしょうか?
>>7 質問とは無関係ですが,処理の内容がフォームの中で完結するなら普通の手続きではなくてメソッドにしましょう(ソースコードがいろんな意味でわかりやすくなる).
それともうひとつ,管理番号からイメージコンポ(の実体)を特定する処理とイメージコンポに対し描画処理をする部分は分離した方が良いと思います.
フォームの宣言のprivate節に参照専用の配列を作り,コンストラクタで実際のイメージコンポの場所を覚えさせます.
(※宣言:interface節に書く)
type
TForm1 = class(TForm)
private
FImages: array [1..2] of TImage; // イメージコンポの場所を記憶させる変数
procedure Draw(Image: TImage); // 描画メソッド
procedure YOBIDASHI; // 使い方の例
public
constructor Create(AOwner: TComponent); override;
end;
(※実装:implementation節に書く)
constructor TForm1.Create(AOwner: TComponent);
begin
inherited;
FImages[1] := Image1; // Image1の場所を覚えさせる(コンポを複製しているのではない!)
FImages[2] := Image2; // Image2の場所を覚えさせる(同)
end;
procedure TForm1.Draw(Image: TImage);
begin
Image.Canvas.TextOut(100,100,'abc');
end;
procedure TForm1.YOBIDASHI;
begin
Draw(FImages[1]);
Draw(FImages[2]);
end;
こうしておけばイメージコンポが3枚以上に増えてもほとんどそのまま使えますし,
イメージコンポに違う描画処理を加えたい場合にも違う描画処理だけを書いたメソッドを追加するだけで済みます.
>>18 具体的に何がしたいかを書いた方がよろしいのでは?
もしボタンの見出しやOnClickイベントハンドラを同じにしたいということでしたら
>>28 氏の仰るようにアクションオブジェクトを使います.
33 :
デフォルトの名無しさん :2006/11/03(金) 20:44:02
Winキーを表示できるHotkeyコンポーネントてないすか?
そんなアプリは迷惑だからなぁ・・・
Win キーはホットキーにはできない
37 :
18 :2006/11/03(金) 22:27:04
>>32 どうも、18です。
具体的にやりたいことはボタン(などの一般的なコンポーネント)のコピーをコード上で作りたいのです。
Name以外の全てのプロパティ(+イベントハンドラ)が等しいもう1つのコンポーネントを作りたいです。
新しいコンポーネントをコード上で作成するのはできました。
全てのプロパティをコピーする命令文が1行でビシっと決まるのかと思い、Assignを使ったところエラーが出ました。
いまは必要なプロパティとOnClickなどのイベントハンドラをコピー元のボタンから新規作成したボタンへ代入して目的を達成してます。
(ちょっと面倒だし、コードがきたない。あとから必要なプロパティが増えた場合修正するのが大変そう。)
アクションオブジェクトはヘルプを見ましたが、具体的な使い方がわかりません。
イベントハンドラを共有化できそうですが、例えばCaptionなどのプロパティもActionを使ってコピーできるのですか?
>>33 while True do
Mouse.CursorPos := Point(0, 0);
でいいんでね?
>>36 RegisterHotkeyはWinキー指定できるのよ
>>30 ,33
字面だけだと意味を特定できないのですが
もしマウスカーソルの移動範囲をアプリケーションのウィンドウの範囲に制限させたいということでしたら
ClipCursorというAPIで実現できるみたいですよ.
>>40 ありがとうございます。
移動範囲を制限するのではなく、
マウスのカーソルの表示を固定したいのです。
たとえば自アプリの中のみの表示でしたら以下のソースで制御できます。
TForm内に記述。
Screen.Cursor := crCross;
しかし、このソースだと自アプリのフォームを抜けたときに
通常のマウスカーソルになってしまいます。
これを持続させたいのですが、よい方法が思いつかないのです。
コントロールパネル → マウス → ポインタ
>>42 そんな解決方法は求めていません。
真面目にお願いします。
>>43 とても聞く人間の姿勢ではないよな。
少しは自分で調べてるのか?
>>44 その回答で答えたあなたが、ふざけているからです。
姿勢がどうのこうの言われる筋合いはありません。
後、自分では調べています。
しかし解決しないから質問しているのです。
>コントロールパネル → マウス → ポインタ たまにはこういう冗談もいいんじゃねw 笑いのツボにははまらないけど。
システムグローバルでポインタを指定するなんてそれくらいしか方法ないだろ
>>45 「 ̄ `ヽ、 ______
L -‐ '´  ̄ `ヽ- 、 〉
/ ヽ\ /
// / / ヽヽ ヽ〈
ヽ、レ! { ム-t ハ li 、 i i }ト、
ハN | lヽ八l ヽjハVヽ、i j/ l !
/ハ. l ヽk== , r= 、ノルl lL」
ヽN、ハ l ┌‐┐ ゙l ノl l
ヽトjヽ、 ヽ_ノ ノ//レ′
r777777777tノ` ー r ´フ/′
j´ニゝ l|ヽ _/`\
〈 ‐ 知ってるが lト、 / 〃ゝ、
〈、ネ.. .lF V=="/ イl.
ト |お前の態度が とニヽ二/ l
ヽ.|l 〈ー- ! `ヽ. l
|l気に入らない lトニ、_ノ ヾ、!
|l__________l| \ ソ
>>47 つかそんなの誰も求めないからなw
そんなの欲しがるのはえらそうに質問できるゆとりだけだよw
>>37 >>18 さん
MemStream := TMemoryStream.Create;
try
MemStream.WriteComponent(Original);
Original.Free;
MemStream.Position := 0;
MemStream.ReadComponent(Self);
finally
MemStream.Free;
end;
ストリームにWriteComponentとReadComponent
で、書込読込すると、
たしか、Publishプロパティの属性は
コピーできるよ。
>>37 ActionListを貼り付けて新しいアクションを作成。
CaptionとかHintとかイベントとかを設定。
NewButton1.Action := Action1;
でOk。
52 :
18 :2006/11/03(金) 23:28:14
>>50 MemoryStreamというのは使ったことが無いのでヘルプと格闘しながらがんばってみます。
コードまで示してくれて、ありがとうございました。
>>45 他のアプリがアクティブな状態でカーソルだけ自アプリで制御したいの?
他のアプリもカーソル形状を設定しているのは理解できるよね?
54 :
18 :2006/11/03(金) 23:29:16
>>51 書き込んでる間に返事が。
教えてもらった方法で試行錯誤してみます。
ありがとうございます。
>>53 ええ、理解できます。
それを何とかしたいのですが、何か方法はないものかと模索していました。
出来ないというのであれば、諦めたいと思います。
成長するテキストファイルの内容をリアルタイムで追いかけたいです。 とりあえず、ある時点でのファイルの内容を取り出そうとしたのですが AssignFile→Resetとした時点で書き込み禁止がセットされて、テキストファイルの成長が止まってしまいます。 使える関数名などを教えていただけないでしょうか。
Delphiで、CodeGuardみたいなものはありますか
>>55 ある程度で良いなら、グローバルフックでWM_SETCURSORを奪えば可能かも。
根本的にやるなら、全プロセスの SetCursor API を書き換えるとか。
(可能かどうかは知らない)
_はスペースで読み替え。if文のネストなんですが、、、 if X then begin ____処理A; ____if Y then ____begin ________処理B; ____end end; が、OKで if X then begin ____if Y then ____begin ________処理B; ____end ____処理A; end; だと、処理Aのところでセミコロンが必要ってエラー出るのは何故なんでしょ?
>>61 そりゃ当然だべ
endの次に処理Aが来るので、まだ文が続くから区切りとしてセミコロンが
必要。前の例はもう文が終わっているのでセミコロン不要
63 :
61 :2006/11/04(土) 05:37:31
>>62 レスどうもです。
やっと、ネストでのセミコロンの要否の意味合いが分かりました。汗)
単純に if_if_end_end; のように間のセミコロンは必要ないものだと思ってました。
、、、そっか、確かにそうだよな。
CとPascalじゃセミコロンの意味が微妙に違うんだよな Cは単文の終わり、Pascalは単なる区切り
自作クラスのTMemoで、作成されたときにはすでにメモの背景が黄色で文字が青ってふうにしたいんですが、 TMyMemo=class(Tmemo) constructor Create; override; end; constructor TMymemo.Create; begin inherited; Color := clYerrow; Font.Color := clBlue; end; でいいんでしょうか?inheritedはかならずいります?
66 :
65 :2006/11/04(土) 06:48:58
constructor TMymemo.Create; begin inherited Create; Color := clYerrow; 自分で書いたの見たらinherited Create;でした。 見えないバグがあったら怖いし、教えてください!
68 :
65 :2006/11/04(土) 06:57:41
>inherited Create; {inherited:「上位クラスの処理を行う」という意味} つまり、上位クラスのCreateをさせておいてから、自前クラスの処理(Color := clYerrow;)やらをしてるわけで、俺の書いたのでおkってことですか?
constructor TMyMemo.Create(AOwner: TComponent); begin inherited Create(AOwner); // TCustomMemoのコンストラクタを呼ぶ Color := clYerrow; : end; のほうがいいと思うよ。
>>68 inheritedが上位クラスのメソッドを呼び出しかと。
この場合上位クラスは継承元のTMemoで、TMyMemoはTMemoを継承したクラスということになる
んで、何もコードを書かない状態ならばTMyMemoはTMemoと同じ動作をする(はず)
例えば、犬(上位クラス)を飼っているとして回れ右(というメソッド)を覚えさせたとしよう
だが犬は心不全で死んでしまったのでクローン技術でよみがえらせることにした
クローン犬(子クラス)は犬のクローンなので生まれた時から回れ右を覚えているわけだが、
それだけでは犬と同じになってしまってどこか寂しい
そこで回れ右(というメソッド)と言うだけで回れ右+ジャンプを覚えさることにする
本当なら飼い主は回れ右という命令で(回れ右+ジャンプ)をしてほしいと思っているが、
しかし犬は回れ右という命令で(ジャンプ)をするようになってしまった
つまり回れ右(という継承元と同じ名称のメソッド)という命令がジャンプ(という継承元とは別の動作)に置き換わったわけだ
困った飼い主がブリーダーに相談したところ本来の命令を思い出す魔法の首輪(inherited)をくれた
そしてその首輪を付けて回れ右と言うと(ジャンプ)ではなく(回れ右+ジャンプ)をするようになったとさ
TDog = class(TObject) public procedure MawareMigi; {犬の回れ右} end; TCloneDog = class(TDog) public procedure MawareMigi; {クローン犬の回れ右} end; implementation procedure TDog.MawareMigi; begin MawatteMawatteMawaru; end; procedure TCloneDog.MawareMigi; begin inherited; {これで犬の回れ右を呼び出す} JumpJumpJump; {三段跳び} end; 同じ名称のメソッドだが中身は別物 という解釈でよろしいでしょうかえろい人('A`;)
ちゃんと仮想メソッドにしなくちゃ
ちゃんと override しなくちゃ
ああ忘れてたぁん TCloneDog = class(TDog) public procedure MawareMigi; override; end;
TImageでPictureに読み込んだ画像の指定色のみを透過させて、 下にある画像に重ね合わせるにはどうしたらいいんでしょうか? 自分なりにずっと調べてるんですがどうしても分かりません。 どうか御教授ください><
Bitmap にして property TransparentColor: TColor;
すみません、説明不足でした。 読み込んだ画像の一部のみをCopyRectとかそういうので切り貼りしたいんです。 そういうことってdelphiでは出来ないんでしょうか?
TBitmapに読み込んで TBitmap.Canvas でほげほげする
Scanlineの方が速いけどね
↓VBの方がなんとか
VBならコンポインストールできないといってできたりしないのにね
VCならコンポーネントの問題自体存在しないのにね
>>76 >>78-79 Bitmapを弄ってもどうしても指定色を透過しての切り貼りが出来ません…(´・ω・`)
教えていただいたことをヒントにもう少し頑張ってみたいと思います。
どうもありがとうございました。
'nest(1,nest1(2,3,"nest2(4,,)"),)' 上の文字列からnest(より後の文字列で','の後ろから次の','までを取得したいです。 但しnest1(2,3,"nest2(4,,)")のなかの','はカウントしないようにしたいのですが、 どういう風にしたらいいか分かりません。
>>84 答えたいが、なにを言っているのかわからない
>>84 例えばその例だと結局どんな文字列を切り出したいんだ?
>>85 分かりづらい聞き方ですみません。
上の答えは'nest1(2,3,"nest2(4,,)")'が取得したかったのです。
また同じように'nest1(2,3,"nest2(4,,)")'から2番目の','から3番目つまり"nest2(4,,)"が取得したいです。
ぜひ教えてください。お願いします。
>>75 ,77
TransparentBltというAPIではどうですか?
Win95には存在せずWin98にはメモリリークのバグがあって使えないらしいのですが.
文法)
TransparentBlt(転送先デバイスコンテキスト, 同左上X座標,同Y, 同幅, 同高さ,
転送元デバイスコンテキスト, 同左上X座標,同Y, 同幅, 同高さ, 透明色);
補足)
デバイスコンテキストってところには,キャンバス(Canvas)のHandleプロパティを指定してください.
例)
TransparentBlt(PaintBox1.Canvas.Handle, 10, 10, 120, 120, FBmp_Char.Canvas.Handle, 0, 40, 120, 120, clWhite);
自宅の環境(XPのSP2)で手元の画像で確認はしています.
ビットマップに指定領域を写し取る 透明色を設定する 好きなところへ描画 全部 VCL だけでできるわな
>84 ()を調べて、 'nest(1,nest1(2,3,"nest2(4,,)"),)'; 11111222222223333333333344433221 2に該当した','が引数の区切りだなーて分かるので、 2番目の引数なら 左の(2 and ',')と右の(2 and ',') の間の文字 みたいな事をやる。
>>87 ようはパーサを作りたいんだね
関数引数取得処理内で関数呼び出しに出会ったときは、その引数を
再帰的に処理して後で上のレベルの文字列と合成すればいい
便乗してしつもんしたいんですが… >constructor TMymemo.Create; >begin > inherited; コード補完でImplementation以下のコードを出すと、overrideした手続の中は、 inherited;だけ出ますよね? これはinherited;だけで、 inherited Create;みたいに子クラスで呼ぶ手続名を省略すると、 継承元のオーバーライドしてるのと同名の手続がinheritedされるっていう、暗黙の掟みたいなのがあるんですか? if bool1 thenって省略できるみたいに?
>>92 同じ名前で同じパラメータの手続きが呼ばれる
暗黙の掟などではなく、仕様
自分も便乗ですが クラスを派生させて作るとき、 親クラス、更にはその親〜基底までについて、全て知っておかなければならないのですか? もしかしたら、親クラスにあるメソッドやフィールドと同名のものを作ってしまう、と言うこともあると思います。 Delphiでいうと、TObjectを全て知らない限りは、自分でクラスを作るなどしないほうが良いですか?
うかっり同じものを作ったとして なんか問題あるの?
>親クラス、更にはその親〜基底までについて、全て知っておかなければならないのですか? コンパイラがエラー出してくれるから心配いらないと思うよ。
同じな前のメンバを作っても、オーバーライドしたのでなければ互いに独立。 外から継承元クラスのそのメンバを使いたい時にはちと面倒があるが、特に大きな問題は無い。 継承元のクラスの仕様のうち、多態性の為に仕様が厳密に定められているものはそれに正しく従う必要があるが、 そのあたりは軽くドキュメント(標準のクラスならHELP)を流し読みすれば大体解るようになってる。
98 :
97 :2006/11/05(日) 01:03:56
下のは仮想/抽象メソッドをオーバーライドする場合の話ね。
TBevelにはPopupMenuを設定できないのですか?
101 :
92 :2006/11/05(日) 03:34:21
>>99 TControl の protected にあるから、不可能では無いけど、
表示ルーチンを自分で書く必要がある。
>>101 マニュアル読む。
103 :
99 :2006/11/05(日) 03:41:21
>>102 やはり普通は無理ですか
自前で改造するのはハードルが高いのであきらめます
教えてくれてありがとう
>>70 > この場合上位クラスは継承元のTMemoで、TMyMemoはTMemoを継承したクラスということになる
> んで、何もコードを書かない状態ならばTMyMemoはTMemoと同じ動作をする(はず)
TMymemoのコンストラクタには何も引数を指定してないのに、TMemoのコンストラクタが
正常に呼ばれるのか?
>>99 下にPanelを敷けばいいんじゃない。
Inc(X); のような、カッコに入れた変数に影響を与えるような関数は どうやって作ればいいのでしょうか?
関数の引数にvarを付ける
>>65 良い悪い以前にコンパイラエラーになりませんか?
手元のDelphi 5ではコンパイルできなかったのですがDelphi 6以降は違うのでしょうか.
>>104 パネルのBevelInnerとBevelOuterをbvNoneにすれば枠無しのパネルが出来ますからね.
もっともデフォルトのくぼんだようなイメージで表示させるならパネルだけで可能ですね.
Turboのアップデート葉書がきた… 7から比べてめぼしい機能はありますか?
TurboよりD6が吐くコードのが速い D6みたいにちょっとした事で吐きだすコードが 大きく変わる事は少ないっぽい気はするけど
マジか インライン展開とFastMMがあっても遅いTurbo終わってるな
FastMMは結構メモリを食うね。 速度を上げるならFastMoveとFastCodeだけでよさそう。
速くするはずの仕組みを導入しているのに何で遅くなってるの? ライブラリが糞化しているの?
やっぱDelphiは5〜7で完成してたのか。 それともそれ以降の開発者がクソなのか。
>>110 > TurboよりD6が吐くコードのが速い
また根拠の無いことを。
> FastMMは結構メモリを食うね。
どう食うのか、具体的に言ってみな>実行力の無いアンチ君。
117 :
デフォルトの名無しさん :2006/11/06(月) 03:18:22
GUIの見た目を変更したいのですが、例えば スクロールバーのツマミ部分や、ラジオグループのラジオ部分などを 任意の画像に変えることってできますか?
Windowsのテーマいじれ。
>>115 D6でFastMMを使用するとメモリは大体5%〜10%増しになる。
Initializeでメモリを仮に確保しているだけの場合は通常のメモリマネージャーのほうが効率がいい。
正直FastMoveと比べるとあまりご利益は無いわな。
>>117 自力ですべてを描写するのが定石では?
茨の道だけど、SpTBXLibやTBXが参考になると思う。
>>119 仕組み上、最初に確保してるだけだろ。
5%−10%じゃ微増・誤差の範囲だ。
もうちょっと正確な表現を頼むよ。
>>119 > 正直FastMoveと比べるとあまりご利益は無いわな。
断片化しないというご利益があるよ。
必死だな
>>120 きっちり調べてみた。
XP home SP2 Mem768MB、KEN_ALL.CSVで
TStringList: 15872k→17220k
TEditorEx: 21696k→23004k、
TStringGrid: 240280k→151332k
THogeTextView:: 49548k→50496k
印象だけで書込みしていたな…
クラスごとに調べることに何の意味が?
スレ違いもはなはなしいね
はなはなしいよね
なはなはしいよね
>>123 報告、乙。
オプションの設定をどこか変えれば
消費量を抑えられるとか、無いの?
5、使ってるけどコードの折りたたみ機能があるだけでもいいや。 見にくくてさ… けどそのために2万9千円か。 すげぇコンポとかついてないの?
Turbo Delphiのことを聞いてんだよ
TurboのIDEのスナップショットが見たいと思うけど、うちに来た案内ハガキには載ってないし、のっけてるサイトも見当たんない。 購入の参考にならんじゃん。
BDS2006のそれと全く同じ。
つーか、コンポ搭載以外のPro版の全機能が使えるExplorerがタダなんだから 落としてためせば全部わかるんじゃねえのか
135 :
デフォルトの名無しさん :2006/11/06(月) 18:40:02
フォームのタイトルバーの上にボタン置けますか?
おけない
BorderStyleをNoneにしてタイトルバーらしきものを作ればいいんじゃね
WM_NCPAINT GetWindowDC
Turbo Del Explorer版だとSampleパッケージ読み込めないから、 ポトベタでSpinEdit使ったソース書き換えないといコンパイル出来ない・・・
ポトペタ以外で敢えてdelphiを使うメリットって無いよな。
>ポトペタ以外で敢えてdelphiを使うメリットって無いよな。 俺はPascalの文法が好きだ。
FreePascalやGNUPascalがある。
キャプションにタブを入れるには?
酢か塩を使うといい。
>>144 Caption := 'hoge'#9'hage';
構造体のメンバにポインタを持たせるのって、いまんとこ前の構造体のポインタと後ろの構造体のポインタをもたせてリストに使うくらいしか知りません。 でも、発展性からいって、もっと柔軟なことができそうな気がします。 構造体のメンバのポインタを使ってこんなことできるゼってのを素人のボキュに紹介してくれませんか?
関数ポインタを入れると・・・
関数ポインタは.NETでは使えないというのは俗説でつか?
「関数ポインタ」でググッたらC++のばかり出るね。 悲しいね。
151 :
135 :2006/11/07(火) 08:36:25
サンクスでつ
>>139 ちょうどやりたい事でした。
152 :
デフォルトの名無しさん :2006/11/07(火) 10:19:41
コモンダイアログの今回の印刷設定ではなくて、PCの印刷設定を開く方法を教えて下さい。
siki:='1*(2+3)';のような文字列から答えを出したいんだけどどうしたらいいの?
Metafileのメリットって何ですか? >このファイル書式は、アーキテクチャの異なるシステム間または機能もしくは設計 >の異なる装置間で交換可能な形で図形を記述するための要素の集合からなる。 UNIXとかでも使えるってことですか?
ベクター形式
>UNIXとかでも使えるってことですか? むりぽ WindowsとUnixの描画命令に互換性ないでしょ? メタファイルは画像じゃなくて描き方をデータとして記憶する メリットは ・データサイズが小さい ・拡大縮小が綺麗に行える ・パーツ単位の移動、回転等が容易 デメリットは ・いちいち描画を行うので遅い ・写真みたいな画像は扱えない
便乗質問 Metafile にリッチテキストファイルを描きたいのですがどうすればよいでしょうか。
>・拡大縮小が綺麗に行える これいいなー
製品の使用許諾コードを取得します。 の後に コード取得時にエラーが発生しました。Connection Failed ってでてインストールできないです Delphi6Personalはもう使えないのでしょうか?
161 :
147 :2006/11/08(水) 00:58:43
>>関数ポインタを入れると・ これの解りやすいサイトか、やり方教えてください!
>>160 日本の本家がゲフンゲフンでアレなので
「Delphi 使用許諾」で検索すれ。
代わりの方法が見つかるハズ。
ListBoxにファイル名を格納しておいて右クリックすると Explorerのコンテキストメニューを出す方法ってありますか? 今はcontextmenu.exeという外部ツールを呼び出しているんですが どうも呼び出しがもっさりしているのでアプリ内に組み込んでしまいたいのですが。
166 :
デフォルトの名無しさん :2006/11/08(水) 09:38:45
Turboにはタスクトレイアイコン表示やフォルダ選択 コンポーネントは付いているのでしたっけ?
167 :
816 :2006/11/08(水) 09:56:36
> タスクトレイアイコン表示 ある。 > フォルダ選択 SHBrowseForFolder のこと? API で呼べるし、コンポにしてコードでCreateするという手もある。
168 :
デフォルトの名無しさん :2006/11/08(水) 10:11:43
>>167 タスクトレイの方はあるみたいですね。
>SHBrowseForFolder のこと?
そうです。
>API で呼べるし、コンポにしてコードでCreateするという手もある。
て事は、こちらはないのか・・・
>>168 簡単に作れるから、コンポがいくらでもあるよ。
コンポ初心者の定番。
ソースを拾ってきて、Create すればいいだけ。
非ビジュアルなんだからForm に置いても意味ないし。
>>171 ダウンロードしました。
一番下にありましたね。
感謝!
>>163 のキーワードで検索して出てきたページの説明通りにやったらすぐできたよ
これでやっとすっきりした
俺からもありがとう
フォームがリサイズされ始める時と、リサイズが終了したときに呼ばれるイベントはありますか。 もしくは、リサイズ中かを表すフラグでもいいです。
つ Windows メッセージ > フォームがリサイズされ始める時 WM_SIZING > リサイズが終了したときに WM_ENTERSIZEMOVE WM_EXITSIZEMOVE
嘘うそ。 > フォームがリサイズされ始める時 WM_ENTERSIZEMOVE 途中:WM_SIZING > リサイズが終了したときに WM_EXITSIZEMOVE
WM_EXITSIZEMOVEは来ないこともあるので注意
ありがとうございます。勉強になりました。 ウインドウの移動中にも来るようですが、この方法を使うことにします。
TEST.txtってファイルがなかったら 作成したいのですが、どう書けばいいのでしょうか?
//uses SysUtils,Classes; var fs:TFileStream; begin if fileexists(TEST.txt)=false then begin fs := TFileStream.create( 'TEST.txt' , fmcreate ); fs.free; end; end; とかなんとか。
var fp: TextFile; begin AssignFile(fp, 'TEST.txt'); if FileExists('TEST.txt') then Append(fp) else Rewrite(fp); try //なんたらかんたら〜 except CloseFile(fp); end; end;
訂正 try〜exceptの部分はtry〜finallyが正解
186 :
デフォルトの名無しさん :2006/11/09(木) 08:50:52
var sl: TStringList; begin sl:= TStringList.Create; try if FileExists('test.txt') then sl.LoadFromFile('test.txt'); //なんたらかんたら〜 sl.SaveToFile('test.txt'); finally sl.Free; end; end;
187 :
182 :2006/11/09(木) 08:55:08
おはようございます。 7-zip32.dllの圧縮と解凍をしたいのですが・・ コンポーネント無しでしたいのです、面倒でしょうか? 簡単なコンポーネントなどありましたら教えてください。m(__)m
コンポーネント無しでしたいと言っておきながら 簡単なコンポーネント教えてくださいとは是如何に
190 :
188 :2006/11/09(木) 09:20:20
>>189 すいません
コンポーネント無しのコードが長くなって貼ったりすると
スレに迷惑がかかると思いまして・・
長くて貼るの面倒な場合はコンポーネントで我慢しますの意です
すません
教えを請うておいて我慢しますとはなにごとか
7-zip32.dllをダウンロードしてそん中の関数使えばそれで完結するけど
193 :
188 :2006/11/09(木) 10:40:23
書き方もなにも 1.7-zip32.dllをLoadLibary 2.GetProcAddressで関数SevenZipのアドレスを取得 3.FreeLibraryで解放 これだけ
そういや、俺もろくに使ったことがないが、 Delphiの場合、わざわざSafeLoadeLibrary()が用意されているんだが、 LoadLibraryを使わずこっちを使うべきなんかね?
196 :
デフォルトの名無しさん :2006/11/09(木) 11:53:07
TImageのBitmapをクリアするにはどうすればよいですか?
Image1.picture := nil;
198 :
196 :2006/11/09(木) 11:58:29
さんkす Image1.picture.bitmapのbitmapを引数で渡している関数でクリアするにはどうしたら良いでしょう?
参照渡しなら関数内でクリアすればおk
bitmap.free ってこと? Image1が変になりそうな悪寒でちょっと怖い
Image1.picture.bitmap := nil; >bitmap.free これはやっちゃダメ 詳しくは書かないけどDelphiの神様の天罰が下る
202 :
196 :2006/11/09(木) 12:17:47
じゃぁ、引数をTBitmapじゃなくて、TImageにすることにします。 本当は、汎用性のために引数TBitmapのままにしたいんだけどなぁ。
>>193 サンプル作ったからケツを出せ
var
NaNaZipHandle: THandle;
AppHandle : THandle;
SevenZip: function (const hWnd: HWND; szCmdLine: PChar; szOutput: PChar; dwSize: DWORD): Integer; stdcall;
procedure TForm1.Button1Click(Sender: TObject);
begin
SevenZipCommand('a ' + '"' + Edit1.Text + '"' + ' ' + '"' + Edit2.Text + '"');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
SevenZipCommand('e "'+Edit1.Text+'"');
end;
続きだァ?コノヤロウ! function SevenZipCommand(command: string): string; begin NaNaZipHandle := LoadLibrary('7-zip32.dll'); if NaNaZipHandle = 0 then begin ShowMessage('7-zip32.dllが見つからないっス!'); exit; end; try SevenZip := GetProcAddress(NaNaZipHandle, 'SevenZip'); SetLength(Result, 1024); SevenZip(AppHandle, PChar(command), PChar(Result), 1023); Result := string(PChar(Result)); if StrToInt(Result) =0 then begin ShowMessage('エラーっス![ ' + Result + ']' + 'っス!'); exit; end; finally FreeLibrary(NaNaZipHandle); end; end;
>>202 こんなことしたいのかな?
procedure BitmapChange(var ABitmap: TBitmap; AFileName: String);
begin
ABitmap := nil;
if FileExists(AFileName) then
ABitmap.LoadFromFile(AFileName);
end;
206 :
202 :2006/11/09(木) 12:38:58
>>205 ビットマップを差し替えたいんじゃなくて、
ビットマップ印刷処理中にTBitmapのメモリを開放したいです。
TBitmap→DIB→DIB印刷
なのを、
TBitmap→DIB→TBitmap開放→DIB印刷
みたいな。
207 :
188 :2006/11/09(木) 12:40:28
>>203-204 ちょwww
超ありがとございます。m(_ _)m
家帰ったら超組み込んでみます。
TBitmapのインスタンスにnil代入すればクリアされるよ Delphiのオブジェクトの実体はポインタだから nilを代入すれば何も指さない=保持している内容のクリア
209 :
202 :2006/11/09(木) 12:55:22
やっぱTBitmapのプロパティやメソッドではクリアできないってことですか。
TBitmapのインスタンスを自前で作ってる? それならFreeメソッドでメモリ解放出来る
211 :
202 :2006/11/09(木) 13:19:25
いや、だからTImageが作ってるから困ってる。 じゃあ、TImageに消させろといっても、 TBitmapを印刷する関数の引数をTImageに変えたくない。 だって、必ずしもTImageを経由するわけじゃなく、TBitmapを自前でCreateすることが将来あるかも。
>>178-180 変更前:OnCanResize
変更後:OnResize
ではだめなのでしょうか?
>>208 nilを代入しても保持している内容はクリアされません.
Delphiのオブジェクト変数は常にポインターなので,
つまりオブジェクトのある場所を覚えているだけなので,
オブジェクト変数にnilを代入しても
生成したオブジェクト(オブジェクトの実体=インスタンス)がどこにあるかという情報を
書き換えられてしまう(消されてしまう)だけなのです.
一方でコンポーネントなどのオブジェクト型のプロパティにnilを代入する場合は話が違ってきます.
これはソースコードの上では代入でも変数への代入になる場合と代入用のメソッドが呼ばれる場合とがあります.
後者の場合はメソッドの中にどのようなコードを書くかはプログラマーの自由です.
イメージコンポの Image1.Picture := nil や Image1.Picture.Bitmap := nil といったコードでは
プロパティへの代入はメソッドに関連づけられ,
このメソッドの中でグラフィックオブジェクトを解放しています(解放するコードが書かれています).
>>196 TBitmapのビットマップを空にする方法についてはヘルプにも書かれていないようですが
Delphi 5のGraphicsユニットのソースをちょっと見てみた感じでは
パラメータをnilにしてAssignメソッドを呼び出せば空になりそうです.
(bmp1.Assign(nil) みたいな感じで)
215 :
202 :2006/11/09(木) 16:22:03
でしょ?
>>213 うお、そうなんだ!
>>214 実はあきらめて、206のフローをバラせるように関数をクラス化してる作業中でした。
やっぱ、やめてbmp1.Assign(nil)にしようかなぁ。。。
TStringGridで現在選択されている行を削除するにはどうしたらよいでしょうか。
行を移動してって、最終行をクリアして、行数を減らす。 もっとエレガントな方法もあるかも。
218 :
デフォルトの名無しさん :2006/11/09(木) 23:03:59
現在の処理が終わるまで次の行に行かないようにするにはどうするのでしょうか?
普通に書けばそうなるが?
現在簡単なファイラを作っているのですが、 リストビュー(OWnerData=True)の選択アイテム(ファイル)の合計ファイルサイズを 選択された毎に求めたい場合はどうすればいいですか? 全検索すれば楽なんだけど何か効率が悪い気がする・・・
Delphiでポインタについてある程度まともな記事をかいているのは 部員弐号たんだな。 部員弐号でぐぐってみそ。 でも関数ポインタについては書いてなかったかも。
プログラムの中でIPからリモホを取得するにはどうすればいいんですか?
ポインタの概念は Delphi でも C でも C++ でもなんでも同じ。 本屋行けば、ポインタだけを説明してる本があるよ。
>部員弐号たんだな。 拝見しましたが、関数ポインタにはふれられてなかったですね… (´・ω・`)ショボーン
>>223 gethostbyaddr
WinSockの話。
ポインタって、なんでそんなにこだわるの? 変数やら、関数やら、クラスのインスタンスやらが、実際にメモリ上にあるときの アドレスだよ。それだけ。
228 :
219 :2006/11/10(金) 05:51:44
EditのOnChangeで文字数をリアルタイムにカウントしてラベルに表示するにはどうすればいいんでしょう Lengthを使えばよさそうだけどどうも上手くいきません…
>>225 理解しかかってるときなら徹底的にやったほうがいいよ。
苦労は実になる。
>>230 Label.Caption := IntToStr(Length(Edit.Text));
>>230 label1.caption := length(tedit(sender).text) + ' byte';
Length(WideString('3文字')) = 3
>ポインタだけを説明してる本があるよ。 んー。 Delphiのポインタだけの本ってのは見ないね。 CやC++はいろいろ出てるけど。 DelphiはじめたばかりでC++のポインタ理解汁ってのはちょっと酷かもな。 微妙に違うし。
>>236 「概念」は同じでしょ。文法が違うだけで。
Delphiのポインタは、定義がしちめんどうくさいんだよね
ポインタ・参照ネタはやるだけ無駄。うざいからやめとけ。
おれは好きだ
好き嫌いの問題ではない
俺も好きだ
245 :
デフォルトの名無しさん :2006/11/10(金) 18:39:23
TPrintDialogで設定された内容を持っているDEVMODE構造体を取得できますか? TPrinter.GetPrinterで取得できるのはDEVMODE構造体じゃなくて、ハンドルみたいなので。
246 :
245 :2006/11/10(金) 19:19:46
自己レスですが、ハンドルをGlobalLockすればよいと分かりました。
Edit1でIMEがオンになってるかどうか、 オンオフを検出する方法を教えてください
>>238 お前はK&Rから勉強しなおして来い
それでも同じ概念だと思うなら首をつったほうがいい
>>248 お前もK&Rから勉強しなおして来い
それでも違う概念だと思うなら首をつったほうがいい
PASCAL使いにK&Rを進めるとは意地悪なやつだのう
もう248みたいな馬鹿しか残ってないのだね
がい‐ねん【概念】 1 物事の概括的な意味内容。「―をつかむ」「文学という―から外れる」 2 《concept》形式論理学で、事物の本質をとらえる思考の形式。 個々に共通な特徴が抽象によって抽出され、それ以外の性質は捨象されて構成される。内包と外延をもち、 言語によって表される。
↓248の苦しい言い訳スタート
そういや、おれはポインタがよくわからなくなって、 先にDelphiのオブジェクト指向を勉強してそれがようやくわかったあと、 じゃあ、クラスじゃなくて整数型変数を動的に扱いたいなあと思ったときに ようやくポインタがなんなのかよくわかったってな経験があったなあ やっぱりポインタは、本だけじゃわからんよね
>248はHowtoSEX本を読んで初夜に挑んだおっさんとみた
まじで、C言語のポインタとPascalのポインタが同じ概念でくくれると思ってるやついるの? ネタだよね?
258 :
デフォルトの名無しさん :2006/11/10(金) 22:01:40
うは。IDE上でテストすると重〜い。初めて触ったけどスパスパと進むなw
初心ものでとんちんかんかも知れませんが、ポインタってある論理アドレスを さすモノってだけじゃないのでしょうか。ずっとそう思ってたのですが…
>257 ポインタの概念そのものは言語に依存しない。ただしフードの下に隠されているものはまったく異なるのかもしれないが。
>>216 ご質問の内容が実際にグリッドの行数を減らすという意味なのか,
表計算ソフトのようにセルの内容だけを削除するという意味なのかはわかりませんが,
いずれにしても途中の行を削除するためのメソッドはありません.
削除する行から下の行のCellsの値(文字列)をひとつずつ,1行下からコピーしてください.
Objectsプロパティを利用している場合はCellsと同様にコピーしてください.
>>219 ファイル一覧を表示させる前にファイル一覧を作るために
FindFirst関数などでファイルの検索を行っているはずですが
そのときにファイル名と一緒にファイルの長さを覚えておけば
再び検索する必要が無くなりますね.
ポインタは塚越タンのDelphi応用プログラミングで覚えたな クラスも塚越タンの本がきっかけだった気がする
思えば、塚越たんがDelphiを見限ったあたりから、 国内においてのDelphiの衰退が始まったような希ガス
>>264 衰退するほど盛んだった時期あったっけか?www
>>259 Pascalのポインタはその認識で良いよ
C言語のポインタはPascalのポインタの機能を包括した上で機械語のアドレッシングモードを模した
多様な演算機能を持っている、これはPascalのポインタには無い概念だ
そうけ? 整数型にキャストすりゃなんでもありな気が。
Cは関数へのポインタが解かりにくい。
Quadruple Dの質問もここでいいのかな?
THandleStreamを使って、既にあるファイルのサイズをゼロにするやり方、ご存知の方おいでないですか? fmOpenWriteでCreate→Freeしただけでは何も変わらないし 開いたあと何か書き込んでもファイルサイズ自体は変わらないしで…。
>衰退するほど盛んだった時期あったっけか?www むかし、ラオックスブック館(今はマック館)があったころVC++もVBもDelphiも売場の棚の面積は同じくらいだったよなぁ(遠い目)。 いまはJavaにも追い抜かれてるね。
何で衰退したの? プログラム初心者の俺にとってはDelphiはわかりやすくていいのに
ふきだし型のポップアップヒント(タスクトレイに出るやつ)って出せませんか? もしくはコンポーネントありませんか?
TTrayIcon
>>266 演算機能はDelphiにもありますが・・・
Delphiスレで純粋Pascalの話ですとかいうなよ今更wwwwwww
しかも演算できるかどうかで概念が異なるというのもかなり苦しいいいわけだなw
概念って言葉の意味がよくわかってなかったんじゃね
Cのポインタはよく知ってるがDelphiについてはよく知らない奴だったみたいだな。 こうなってくるとCの方も怪しいが。
>>271 sizeプロパティを0に設定すれば良いはず
fmOpenWriteでなくfmCreateにすればOK
Delphiにポインタ演算機能ってあったっけ?
Inc Decとか pAnsiCharなんかだと+が使えるとかだっけか。 でもまあ、DLLを使うとき以外は、動的配列でだいたいなんとかなるんでさ。 俺もポインタを覚えた時は喜んでDelphiでもポインタ使ってたけど、 最近は、動的配列でどうにかなるときはポインタを使わずに動的配列使うようにしている。 ガベコレはいいよやっぱり。
そうだね、動的配列使えるようになってから TList とか面倒で使わなくなったな
288 :
275 :2006/11/11(土) 12:08:55
290 :
デフォルトの名無しさん :2006/11/11(土) 14:28:21
超初心者ではありませんが、教えてください。 TQuery や TIBQuery でこんな感じでパラメータクエリを使って SQL 文を 投げます。 Query1.SQL.Text := 'SELECT col3 FROM Table1' + ' WHERE col1 = :col1' + ' AND col2 = :col2'; Query1.ParamByName('col1').AsInteger := self.IntegerVar; Query1.ParamByName('col2').AsString := self.StringVar; Query1.Prepare; Query1.Open; : Query1.Close; Query1.UnPrepare; パラメータ設定後に Query1.SQL.Text を見ても「WHERE col1 = :col1」の ようにプレースホルダがそのまま見えます。実際に投げられる SQL 文を 取得する方法はありますか。 何がしたいのかというと、更新系の SQL 文が発行されたらそれを日時や ユーザ ID とともにログテーブルに記録したいのです。
DBのトリガーを使えばいいじゃない
> 実際に投げられる SQL 文を取得する方法はありますか。 Ent 版以上についている、SQL Monitor IBX だと管理用コンポーネントが色々あったような。
293 :
デフォルトの名無しさん :2006/11/11(土) 17:14:39
教えてください。 Turboの無料版をダウンロードしたのですが、インストール後の初回起動時に シリアルNoとキーを入力しなければならないみたいですが、このシリアルNoとキーは どこで入手すればいいかわかりません。 ちなみにTurboの無料はオフィシャルHPからダウンロードしました。 よろしくお願いします。
ダウンロードする前に登録するときに正しいメールアドレスを入れていればくるはずだけど。
297 :
293 :2006/11/11(土) 17:32:20
ダウンロード時にきたメールには、beginblock/endblockで囲まれた 暗号みたいな文章が来たんですが、それ以外にはシリアルナンバーとキーは ありませんでした。 暗号みたいなテキスト文を置く場所間違ってるのかな・・・。 もう一度やってみます。
>>297 > ダウンロード時にきたメールには、beginblock/endblockで囲まれた
> 暗号みたいな文章が来たんですが、
体験版と間違えてない?
シリアルはメールではこなかったよ ホームページのマイアカウントのMy Registered Productsで見られた
300 :
293 :2006/11/11(土) 18:46:38
最初にボーランドから届いた暗号みたいのが書かれてるメールの下にreg736っていう添付ファイルがあって、 それを指定の場所に置いたらシリアル番号聞かれずに起動できたよ! みんなどうもアリヤトー(*´ω`*)
301 :
デフォルトの名無しさん :2006/11/11(土) 21:56:15
誰かいますか!? 質問なんですけどDelphiでボタンを押すとフォームの色が赤と青に 順々にかわるようにプログラムを書くにはどうしたらいいのでしょうか!? if文を使って書くのいうことはわかるんですが・・・。
なんかさ、入門サイトでもちゃんと読んだら
宿題か?今回だけだぞ。 procedure TForm1.Button1Click(Sender: TObject); begin if Form1.Color = clBtnFace then Form1.Color := clRed else if Form1.Color = clRed then Form1.Color := clBlue else Form1.Color := clBtnFace; end;
C言語で int func() { static int i = 1; このstatic intは、Delphiではどう訳せばいいですか? var i: Integer; じゃダメだと思うんですが
できない。外に出して変数にしないと。
>>305 嘘を教えてやるなよw
>>304 型付き定数を使う。
ただし、オプションによっては、型付き定数は完全な定数みたいになっちゃうので注意。
function hoge():integer;
const
i:integer=1;
begin
end;
とかなんとか。
ちなみに、Delphi7くらいまででは、C++のクラス変数を移植したいときはこの肩付き定数を使うのが楽なのであった。
>>304 別なやり方としてコンパイラに「型付き定数への代入」を有効にするように指令する方法があります.
これによってCのstatic変数と同様の処理を実現できます.
{$J+} // ここから先は「型付き定数への代入」を有効にする
procedure TForm1.Exp1ActionExecute(Sender: TObject);
const
StaticNum: integer = 0;
begin
ShowMessageFmt('現在の値:%d', [StaticNum]);
inc(StaticNum);
end;
{$J-} // ここから先は「型付き定数への代入」を無効にする.
※注意!:
この指令が有効になっている間はどの定数にも値を代入できます.
つまり,本当に定数として定数を宣言しているのに
誤って値を代入するコードを書いてしまってもエラーにならないため,
見えないバグを生み出す原因となります.
この指令はプロジェクトオプションのダイアログからも設定できるのですが,
ソースの中に無効にする指令を埋め込んでいない限りプロジェクト全体で有効になってしまうのでおすすめできません.
上の例のようにソースの中に埋め込む方がよいと思います.
constで定義した変数の値を後から操作できるって 素で今の今まで知らなかったや
>>309 私の書き込みも一部間違えてしまいましたので
>>307 を以下のように訂正します.
この指令が有効になっている間はどの型付き定数にも値を代入できます.
つまり,本当に定数として型付き定数を宣言しているのに
誤って値を代入するコードを書いてしまってもエラーにならないため,
見えないバグを生み出す原因となります.
>>310 そういう意味ではこのように適用範囲を最低限にしたほうがいいでしょう。
procedure TForm1.Exp1ActionExecute(Sender: TObject);
const
{$J+} // ここから先は「型付き定数への代入」を有効にする
StaticNum: integer = 0;
{$J-} // ここから先は「型付き定数への代入」を無効にする.
ConstNum: integer = 0;
begin
ShowMessageFmt('現在の値:%d', [StaticNum]);
inc(StaticNum);
//inc(ConstNum); //コンパイルエラー
end;
procedure TForm1.Button1Click(Sender: TObject); const COLOR_TBL:array[Boolean] of TColor = (clRed,clBlue); begin Form1.Color := COLOR_TBL[Form1.Color = clRed]; end;
313 :
デフォルトの名無しさん :2006/11/12(日) 00:34:39
>>312 おお凄い!
でも宿題として、そんなの出したら・・・
array[Boolean] of .... ←こんな書き方があるなんて、おいらちょっとびっくりだよ!
315 :
304 :2006/11/12(日) 01:33:07
>>312 がどうなってんのか誰か詳しく解説してくれ
わからん
マウスがあるコンポーネントの領域内に入った瞬間を捕らえるイベントはありませんか? OnMouseMoveだとコンポーネント上を動いてる間中発生してしまい、うまくいきません。 マウスがコンポーネント上を通った時に一度だけ処理をしたいのです。
>>316 配列の宣言の話なら
array[*ここ*] of hoge
*ここ* は列挙型なら何でも入れられる。
例えば Boolean は False..True、Byte は 0..255 といった具合に順序値は列挙型でもあるのでこのような指定が可能。
テーブル参照の話なら
COLOR_TBL[*ここ*]
*ここ* に Boolean 値を渡せば対応した cl*** が返る。
順序値を別に形に変換する際に良く用いられる手法。
COLOR_TBL[Form1.Color = clRed];
で要素番号に式が使われている話なら
= 演算子は Boolean 値を返す演算子なので、Form1.Color が clRed なら True を、
Form1.Color が clRed 以外なら False を返し、テーブル参照を行う事が出来る。
もし方法があったら教えてください。 文字列と値の組み合わせがあり、文字列を渡すと値を得るような仕組みが欲しいのです。 例えば、 'http',80 'ftp',21 'pop3',110 というテーブルを定義して、 PortNo := PortValue['http']; と言ったように取得したいのです。 これをできればconstで宣言して、値を取得するための関数等を作らずに実現したいのですが、 うまい方法は無いでしょうか。
320 :
304 :2006/11/12(日) 01:52:02
>>316 COROL_TBL という array[Boolean] of TColor の配列を定義して、
COROL_TBL[false] := clRed;
COROL_TBL[true] := clBlue;
として初期化。
Form1.Color が clRed だったら Form1.Color = clRed は true なので、
Form1.Color := COLOR_TBL[true]; つまり
Form1.Color := clBlue;
同様に、Form1.Color が clBlue だったら、
Form1.Color := COLOR_TBL[false]; つまり
Form1.Color := clRed;
という感じだと思います。
>>317 OnMouseEnterイベント
322 :
317 :2006/11/12(日) 01:57:41
>>321 キーワードサンクス。
それでググって見ます。
>>318 ,320
ありがとう。なんとなくわかったけど不思議な書き方だな。勉強になった。
>>319 関数が嫌なら、TStringListを使うか。 const じゃ無理。
リソースファイル(.res)を起動してから動的に取り込むってことはできませんか? TResourceStreamはSaveToFileはあるけどLoadFromFileがないす。
>>325 TResourceStream はコンストラクタで指定したリソースを扱う。
TResourceStream.Read でおk。
>>326 TResourceStream.Readはバッファから読むみたいだから、あらかじめTMemoryStream.LoadFromFileででも読んでおいてから渡すんですか?
頭わるい質問でごめんね。
(´・ω・`)
>>327 Create でインスタンスのハンドルを渡す必要があるけど、
resファイルからインスタンスハンドルが取得できなかったら、
TResourceStream は使えないかも。
リソースだけのDLLって手があるよ。 LoadLibraryでインスタンスハンドルは取得できるよ。
>リソースだけのDLLって手があるよ。 みたいですね。 Delphi リソース DLLなんかでググッってみてるんですけど、わかりやすいサイトがない… 普通のDLLをつくるサイトはみつかるんですが、
>>319 TStringList.Objects[]に参照値をぶら下げられるからそれに数値を突っ込むという手もあるし
var sl: TStringList;
sl := TStringList.Create;
sl.AddObject('http', TObject(80));
Integer(sl[sl.IndexOf('http')]) // ==> 80
パフォーマンス低くてさらに文字列でよければ
sl := TStringList.Create;
sl.Values['http'] := '80';
ShowMessage(sl.Values['http']);
>328 (1)DLLウィザードで出来たDPRファイルから (2)uses節とコメントを取り払う (3){$R *.res}の部分を藻前が作ったresファイルを指定 (4)コンパイル汁
333 :
332 :2006/11/12(日) 10:49:53
アンカーミスです ○330 ×328
Loadedを使って初期化処理を追加しているコンポを動的にCreateして使うには どうすればよいでしょうか?
335 :
デフォルトの名無しさん :2006/11/12(日) 17:49:18
turboのあのアイコンは何の絵ですか? 北斗の拳の荒くれ者の絵かと思ってたけど、どう考えても不自然だと最近気づいた。
>>334 そのコンポを継承して手動で Loaded を呼ぶか
TForm1内 なら TForm1(HOGE).Loaded; で強引に呼べる。
しかし、そもそもコンポの設計がおかしい。
作者に Loaded は必ずしも呼ばれないって教えてやれ。
Quadruple DもたしかLoadedが必ず呼ばれるような設計になってた気がするな
間違えたんで訂正。 誤:呼ばれるような設計になってた気がするな 正:呼ばれるのが前提になってたような設計になってた気がするな
TObjectのMethod ClassNameはインスタンス無しで呼び出しても問題無いですか? (s1 := TObject.ClassNameて感じで呼び出してます。) ソース見るとclass functionとして定義されてるけど、どういう意味か分かんないです。
>>319 関数を作りたくないというのは
if s = "http" then
result := 80
else if s = "ftp" then
result := 21
else if (ry
みたいなことはしたくないという意味だと勝手に解釈してレスしますが
Delphiでは連想配列を言語仕様でもライブラリも実装されていません(最近のバージョンはわかりませんが).
しかしテーブルが定数でかつ物件数が数十とかなら簡単な関数で何とかなると思います.
【宣言】
TStrToNum = record
str: string;
num: integer;
end;
function StrToNum(const Table: array of TStrToNum; const Str: string): integer;
(※続く)
(※続き) 【実装】 function StrToNum(const Table: array of TStrToNum; const Str: string): integer; var i: integer; begin for i := Low(Table) to High(Table) do if Table[i].str = Str then // 大文字と小文字を同一視させたい時は代わりに AnsiCompareStr 関数を使うにょ begin Result := Table[i].num; exit; end; raise Exception.CreateFmt('"%s"ってのは見つからなかったにょ', [Str]); end; 【例】 const cPortNumbers: array[1..3] of TStrToNum = ( (Str: 'http'; Num: 80), (Str: 'ftp'; Num: 21), (Str: 'pop3'; Num: 110) ); procedure TForm1.ConvertActionExecute(Sender: TObject); var Num: integer; begin Num := StrToNum(cPortNumbers, Edit1.Text); Edit2.Text := IntToStr(Num); end;
343 :
319 :2006/11/12(日) 23:52:28
>>331 >>342 今回の場合は、文字列から値を参照する回数があまりに多く、
そのたびにその処理をしていると時間がかかるため、もっと早く実行
できないかと思ったのですが、やはりそう上手くは行かないですよね。
コードの実例をありがとうございます。
挙げていただいた例は、それぞれベンチを取り、最適なものを
使わせて頂ければと思います。
親切に、どうも有り難うございました。
>>343 要は文字列検索を高速にしたいってことだね、はじめにそう言えばいいのに
ハッシュ使うなり二分探索するなり、データの量や性質に合わせて最適なの探しな
パスの処理について教えてください。 パスの入った文字列の終端が、必ず'\'で終わるようにしたいのですが、適した関数はないでしょうか。 例: A:\abc → A:\abc\ A:\abc\ → A:\abc\ A:\ → A:\
>>346 IncludeTrailingPathDelimiter
逆は
ExcludeTrailingPathDelimiter
348 :
346 :2006/11/13(月) 02:14:27
>>347 ありがとうございます、助かりました。
しかしBDS2006のヘルプって探しにくいっすね・・。
数学者のパスカルさんでは。
俺も気になってたなんなんだあのモヒカンは
お前らの教養のなさには呆れるばかりだ
教養のない俺がいうのもなんだが、Delphiってギリシャかどっかの神殿かなんかだろ? ギリシャ兵かなんかのつもりなんじゃね? あと、北斗の拳の悪い方の下っ端とか…
それより産業廃棄物みたいなアプリのアイコンなんとかして欲しい
>>341 ライブラリもというのはどうかな。TStringsあるし。確かVer1.0からあるような。
FAQでした誘導をお願いします 同じコードで再構築しても、exeが異なりますが、なんの情報が埋め込まれているんでしょうか? これを、同じコード=同じバイナリにすることは可能でしょうか? 神さま、教えてください、ついでに地震がいつくるかも。
359 :
デフォルトの名無しさん :2006/11/13(月) 10:43:15
VCLは、今後Unicodeに対応する予定はありますか?
つ TNT
すみません、教えてください。 TObject(a) := TStringList.Create; TObject(a) := TObjectList.Create; といった、オブジェクトの生成なのですが、上記例の、TStringList、TObjectListを変数ChildClassに格納して、 TObject(a) := ChildClass.Create; みたいに生成することってできませんか?
362 :
361 :2006/11/13(月) 14:25:13
すみません、できました。お騒がせしました。 TObjectRef = class of TObject; をtypeに宣言して、例のChildClassをTObjectRef型にする事でできました。
BDS2006にはコードテンプレートが無いんですか?
364 :
363 :2006/11/13(月) 15:38:09
もとい、BDS2005のコードテンプレートは開けないの?
ライブテンプレートのこと?開けますよ。 表示->テンプレート。 テンプレートで右クリックして、ボタンの文字列をOFF 一番右のフィルタボタンをOFF テンプレートの編集。 それでコードスニペットはGExperts を使うと。
>>358 バージョン情報のビルド番号自動インクリメントしてたらそのたびに上がる
>>358 バイナリ内にタイムスタンプが含まれてるから。
多分無効化出来ないんじゃない?
ListViewのreportのOwnerDrawで項目の高さの指定ってどうやるの? Font.Sizeだとカラムの高さまで変わってしまう。
369 :
364 :2006/11/13(月) 23:21:29
>>365 今ライブテンプレートっていうの?
テンプレートの編集しても、xmlデータだよね。
Delphi7や2005の、cdiファイルをインポートしたいんだけど、できないの?って話なんです。
370 :
358 :2006/11/13(月) 23:37:52
ありがとうございます
>>366 そういう機能があるんですか?
>>367 dcuのオブジェクトがすでに異なるようです
無効化できない?
>>369 BDS\4.0\Objrepos にあるbds.dci って奴じゃね。
前はコードテンプレート入力用のダイアログがあったのに、 こんどはxmlで記述しなきゃいけないってのは、機能的に 質が下がった気がするのは俺だけ? しかも、記述方法にろくな説明ないし、ヘルプ見ると、 オプションの中で設定できることになってるし。(BDS2005の残骸?)
小卒の俺でさえ、そのXMLの仕組みを数分で理解したというのに・・・ テンプレートを新規作成で作ってみたら分かると思うが
古代の不思議面白すぎ。 プログラミングやってる場合じゃないよ。
固定長の文字列を簡単に分割する方法ってないですか? たとえば文字列s,sa,sb,scがあってsに s:='aabbbcccc'; と代入すると sa='aa' sb='bbb' sc='cccc' となってくれるような変数の宣言の仕方って無いですかね。
TStringList.CommaTextにブチ込めば似たようなこと出来る s := 's,sa,sb,sc'; sList.CommaText := s; sList.Strings[0]はs sList.Strings[1]はsa sList.Strings[2]はsb sList.Strings[3]はscがそれぞれセットされる
>>380 いえ、コンマ区切りじゃなく固定長データなんです。
s,sa,sb,sc て、文字列型の変数って言いたいんだろ? TDivChar = Packed Record case boolean of true:(str:string[9]); false:(a:string[2]; b:string[3]; c:string[4]); end; こんなの宣言して、 var s:TDivChar; begin s.str:='aabbbccc'; ShowMessage(s.a); //aa ShowMessage(s.b); //bbb ShowMessage(s.c); //cccc end; こんなんでいいんじゃね?
383 :
369 :2006/11/14(火) 11:18:57
>>373 使い勝手が悪いと言ってるのであって、使い方がわからないんじゃない。
XMLの仕組みを理解するのに数分かかったんだろうが、前の仕組みだと数秒で
理解できたのだから、機能的には質が下がったと言いたいのよ。
>>375 ありがとう。なんでヘルプにはまともな例も載ってないのか・・。
caseのテンプレートとか編集してみたら、すぐ理解できたけど。
しかし、何十個も登録した前のテンプレートを、手打ちで移植するって効率悪い・・。
Delphiの書籍を探しています ・技術評論社 Delphi応用プログラミング ・技術評論社 Delphiオブジェクト指向プログラミング ・インプレス Delphielphi 6 プログラミングバイブル 上の3つの購入を考えているのですが他にお勧めってありますか? Delphi自体はそれなり使えます
>>384 Delphiコンポーネント設計&開発完全解説。PDF版もある。
Delphi Graphic Secrets―Know‐how & Libraries。こちらは入手しにくい。
>>384 その3冊はどれも入手困難(名著だけど)
既に手に入らなくなってるようですが。
>>379 んなもんない。
SetLength(sa, 2);
しておいて
Move(s[1], sa[1], 2);
とやるのが最速か。
まあ正規表現クラスでばらして配列に突っ込むという手はなくもないが。
Delphi6Personalで開発してたゲームを売ろうと思うんだが 商用利用不可って書いてあるので仕方なくPro版を買おうと思います 6pro や 7proって今でも買えるんですか? またどのVerに移行したらいいでしょうか? .NETは使ってません
ヒント:アマゾン
BDS2006でもTurboDelphiでも、問題無くコンパイルできると思うよ。
>>393 へんなコンポーネントでも使ってるんだろ多分
7proって今でもBDS2006並の値段するよな、たしか。
>>395 Borlandは、規約によると中古販売品の使用を認めていないから、
それでライセンスを語る自体が無意味になるから新品以外の選択肢はないだろ
って、新品だと9000円って何さ。
>>395 あ、ごめん
レス番号見間違えたorz
本の話だったわけね。
失敬失敬。
しかし、今更Delphi2/3時代の本を買うってのもなあ。
>>401 これは失礼。
書き直しが必要みたいだな。
もう普通には6,7のProは買えないのかな。
いまさらいらんだろう
6,7,8,2005,2006 と持っているが、2006があれば、7以前はいらない感じ。 まあ、ちょっと使い勝手は悪いけど。(同じソースを2画面で開いたりとかできなかったり)
>>405 2006はもっさりして使いもんにならん。
IDEは気になるほどもっさりではない。 って、実行速度の話?
constで、任意に作ったレコード型を定義したいのですが、type節の後に、constって入れられるんですか?
>>408 interface
type
THoge = record
Name: String;
ID: Integer;
end;
implementation
const
ConstHoge: THoge = (Name: 'Hoge'; ID: 1);
こんな感じでおk
ちなみに最後の1行を
ConstHogeArray: array[0..1] of THoge = ((Name: 'HogeA'; ID: 1), (Name: 'HogeB'; ID: 2));
とすることでレコード型の定数配列もできる。
俺は
>>409 じゃないけど、
そうやって作ったレコード型とかは、型付き定数なんで、結局書き換え可能だから注意。
日本語のWin32APIのヘルプの最新版ってどれ?どこ?
413 :
358 :2006/11/14(火) 21:57:28
もうひとつ、FAQでしたら誘導してください 2枚のEtherカードを実装しているとき TCPコンポーネントなどで、どちらをつかうかはどのようにして選ぶことができるのでしょう よろしくお願いします
415 :
413 :2006/11/14(火) 22:09:19
416 :
413 :2006/11/14(火) 23:44:56
で、コネクションするまでは、Local アドレスは定まらないってことでいいんでしょうか?
>416 ? い は DHCPならまーそうでしょうね。固定IPアドレスなら起動したときから定まりますけど。
418 :
413 :2006/11/15(水) 00:04:24
>>417 >固定IPアドレスなら起動したときから定まりますけど。
どっちのカードに定まる?ですか?
420 :
413 :2006/11/15(水) 00:44:35
>>419 >413でTCPコンポーネントの使い方について質問をしていた、つづきなんですが
TCPコンポーネントにおけるLOCALアドレス値はいつ決まります?
421 :
デフォルトの名無しさん :2006/11/15(水) 00:59:06
Ver7です。 TChartで表示したグラフを印刷すると、チャートのタイトルが印刷されません。 ビットマップの保存ではタイトル部分もちゃんと保存されるのですが。 後、印刷時のドキュメント名が「Chart」なので、出来れば任意に変更したい のですが可能でしょうか?
>>420 なんか話しがかみ合ってない気がする
おまえさんのいうLOCALアドレスの定義をおしえてください
田舎にある実家の住所です。
424 :
413 :2006/11/15(水) 10:29:08
>>422 わかりにくくてすみません
カードを複数枚挿しているとき
このクラス
TcpClient1:TTcpClient の
この値
TcpClient1.LocalHost
を使いたいのですが
これがいつ決定されるかということです
うぉ、ええとですね、TObjectListのコンストラクタをオーバーライドしたいんですが、 元がoverloadされててできないんです。 カスタムのコンストラクタを作りたい場合は、どうしたらいいでしょう。
>>426 てきとーな引数作って、オーバーロードすれば?
428 :
427 :2006/11/15(水) 16:12:07
まちがえた、 Create以外の名前でコンストラクタつれば良いだけ。
type TMyObjectList = class(TObjectList) public constructor MyCreate; end; constructor TMyObjectList.MyCreate; begin inherited Create; end; はい論破
430 :
426 :2006/11/15(水) 16:25:18
なるほど!そうすればいいんですね。 しかし、Createがoverrideできないって厳しいですね。 どうも有り難うございます、解決しました。
>しかし、Createがoverrideできないって厳しいですね。 ちょまち、できるぞ。
オーバーロードされたCreateをオーバーライドできないってことだろ できないんだっけ?
いいえ、出来ます。
434 :
431 :2006/11/15(水) 16:46:54
ああ、すまん TObjectListはオーバーロードしたCreateは仮想関数になってなかったわ。
なぜ出来るのか、500字で説明してください
436 :
426 :2006/11/15(水) 16:48:25
この場合、TObjectListの作りがあまり良くない・・って事なんすかね。
437 :
431 :2006/11/15(水) 16:52:00
>>426 VCLのコンポーネント自体、「かゆいところに手が届かない」ってのは多いから...
コンポーネント自体のソースは、同じユニット内に継承コンポーネント作成して、
派生元クラスのプライベートなメンバーをがんがん参照してたりするけど、
俺らはそれが出来ないから、「そのプロパティーにアクセスさせろー!」って
事はスゲー多い。
つか、Delphiでは、コンストラクタはクラスメソッドなんだから、 コンポーネント以外でコンストラクタをオーバーライドする意味無いじゃんという気はする。
__ , -------- 、__ , - ':::::::::::::::::::::::::::::::::::::::::\ / ;;;;;;;::::::::::::::::::::::::::::::::;;;;;;;;;;;;;;\ /,,;,,,,, ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ,,,,,,,;:::丶 / :::::::::;;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;:::::::::::::::ヽ i゙:::;:::::||::::::ii:::::::::::||::::::::::::::::::;:::::::::::::::::::::::::::゙i i゙::::|;;;;| |;;;;| |::::::::::| |:::::::::::::::::||:::::::::::::::::::::::::::::| . i゙::::::i ''''''''''' '───' |;;;;;;;;;;::::::::::::::::::::| .|:::::::|,-====-´ ゙ヽ,,,,,,,,,,,,、 |:::::::::::::::::::| |;::::::::|,-----、 ~ニニ,,_` |:::::::::::::::::::| `ヽ、i (、i´ノ ´い,, ノ ' |;;;::::::::::::::/ なんで、初心者の試行錯誤にとどめ差すん? . i ^~~~ー==-- ー'-+、 / ゙-、;;;;/ { ヽゝ '-'~ノ λ ''゙゙゙'''-''---、 /-'^ ヽ, ^~^ ( / `丶 、 , - /^l | /( ノ `''''''´~ __, - ' ゙i、 { / /| ̄ ̄ ̄ ̄ _,- '¨ } {/ / ゙ー────'~ \| / ヽ \
オーバーライドしないと継承元を呼べないと勘違いしてるとかありそうだな。
今日のDelphianの夕食を教えてください。お願いします。
ペペロンチーノと野菜サラダ。
カレイの煮付け かぶと手作りベーコンの炒め物 わかめとごぼうのサラダ 五穀米 ほっけのつみれ汁 もずく酢
塩味のカップラーメン 1 冷凍のチャーハン 1/2 みかん 1
>>440 別のコンストラクタからinheritedで呼べばいいのでしょうが、
直感的にCreateを使うので、できればCreateメソッド内に
コードを書きたかったのです。
通常のCreateと同じ引数なので、overloadできません。
まあ、ダミーの引数を付けてoverloadってのも手ですが、
Createするときにどれを選んで良いかわかりづらいので・・。
s:string の中に、 _ (アンダーバー)が何個あるか数えたいのですが、 そういう関数ってありますか?
>>441 鯛のマリネ。
白身魚のフライ。
かぼちゃの煮物。
なすの天ぷら。
カレー風味の野菜炒め。
豆の和え物。
にら玉。
りんご1個。
ライス。
>>446 StringReplaceを使うか、WideStringに変換して数える。
高速にやりたいのなら、全角文字に注意しながら1byteづつ調べる。
450 :
446 :2006/11/16(木) 01:05:30
>>449 うわあなんだこの神ライブラリ・・。
凄く助かります、ありがとう。
>>449 フサさん、これのInStrってIndexにマイナス値入れるとお尻から見てくれるのかな?
あと、OracleでいうところのSUBSTR(CopyのIndexが正逆指定可能なヤツ)って
実装されてません?
いや、興味本位で聞いてみただけです。ごめんなさい。
オブジェクトの名前って、やっぱfrmMain、btnOk、chkCheckみたいな感じが標準?なんでしょうか みなさんはどういう風に名前付けてます?
>>452 >chkCheck
チェキチェキラの江戸っ子ですな?
破損クラスタです><
Form_Gyoumu Button_Jikkou CheckBox_Sentaku みたいな長くてクラス名そのまんまの方が好きだな。
フォーム一個のプログラム作る時に、 ・プロジェクト名 ・ユニット名 ・フォーム名 が同じ名前しか思い浮かばなくて悩む事がある。
>>445 どうにも希望が理解できないんだけどreintroduce付ければいいんじゃね?
>>456 どんなオブジェクトに育ってほしいかをよく考えて(^.^メ)
>>456 俺はいつも↓
プロジェクト名→アプリケーション名
ユニット名→Main
フォーム名→frmMain
なるほどー、確かにユニットで悩むんだよなぁ あと、イベントに名前付けます?
イベントに名前って? 名前は勝手に命名されるのでは
>>460 自前でコーディングしてコントロールのハンドラに割り付ける時以外は
デフォルトで行くけどね。
コメント入れとけば分かるから。
自作イベントは、 >Event_ ってプレフィックス付ける。 全体で、 >Event_OnChange とか。 気持ち悪いけど、目に留まるほうが良いと思う。
誰でも、プロジェクト名やコンポーネント名に、好きなエロゲのキャラの名前をつけていると思っていました
コンポーネント名はバイナリに残るから気をつけろよw
>>464 うちの上司にそのコーディング規約頼んでおく。
バグをいれたのが誰か探しやすくなるし、いいね
クラスのこととか勉強中です。 with 〜.create do な変数を宣言せずに使うやり方で、 下のようにCreate使ってインスタンスを参照したら、 思わぬ副作用的なモノがなにかありますでしょうか。 procedure test(TST:Tstringlist); begin TST.Add('fuge'); end; procedure TForm1.Button1Click(Sender: TObject); begin with TStringList.Create do try add('hoge'); test(Create); add('hoge'); Form1.Memo1.Lines.Text:=Text; finally Free; end; end; よろしくお願いします。
with do は絶対使わない、っていう人もいるな。 一つだけならいいが、入れ子になったらハチャメチャ。第一、IDE のアシストも 受けられないし。 一つだけでも、TForm1 のプロパティーやメソッドとかぶってるとややこしいことに なるし。
> test(Create); こんなのははじめて見た・・・
オブジェクトからコンストラクタ呼んだら初期化されないか?
脊髄反射でごめん。 TStringList.Create は TObject.Create だった。初期化はされないや。 識別子の解決は一番深いスコープから優先的されるから、一応期待通りの動作にはなるだろうけど、 test(Create) とか一般的ではないし、可読性の問題もあるので、特に理由がないなら変数に入れた方がいいと思うけどね。
回答ありがとうございます。 参照する方法がないっていう記述を何箇所かで見たので、 これにも致命的問題があるのかと思って質問しました。 >TStringList.Create は TObject.Create だった。初期化はされないや。 Delphiに元々ついてくるクラスでCreateで初期化とか、 何か実行するようなクラスってあるんですか? と、自分が使ってるのはDelphi6 personalなんですけれど。
>>473 >Delphiに元々ついてくるクラスでCreateで初期化とか
大多数のクラスは何かしらやってる。
また、現状でやっていないクラスも、今後もそうであるという保証があるわけではない。
>大多数のクラスは何かしらやってる。 そうですか…いろいろ試してみます。 ありがとうございました。
クラスに自分を参照するプロパティかメソッドを付けておけば 一般的な構文で実現できるのではないだろか。 しかしメリットは感じない。。。
Delphi6 Personalを使ってます。 Delphiのエディタをviっぽいキーバインドにすることはできないでしょうか? フリーカーソル無効化アドインを使って大分使いやすくなったので できればキーバインドも使い慣れたvi風にしたいと思ってます。 ツールに外部エディタとして好きなエディタを登録すればいいみたいですが、 Delphiのエディタと外部エディタを行ったり来たりするのが少し面倒なので できればDelphiのエディタだけに統一したいと思ってます。
>>451 さん
∧,,∧ レスがあるのは
ミ,,゚Д゚彡 大変感謝です
ミ つ旦)~~
〜と,,,~),,~)
Indexにマイナス値には対応してないと思います。
予測されうる仕様はtestInStrに記述しています。
マイナス値に対応しているとすれば、testInStrにテスト関数を
用意しているのです。
おしりからみるという仕様がいまひとつわからないですが
AnsiPosBackward、で実装している事なのかな?
testRangeAnsiPosForwardBackward
で、テスト関数をみて仕様を理解していただくと
早いかと思います。
Delphiでのポインタの扱い方がいまいち分かりません。 Cで int *p; p = (int *)malloc(sizeof(int) * 255); p[0] = 123; p[1] = 456; ... は、Delphiではどう書きますか?下は自分の知識で書いてみたものです。 var p: PInteger; begin GetMem(p, SizeOf(Integer) * 255); p[0] := 123; p[1] := 456; p[0]という書き方がダメそうですが、どう書けばいいのでしょう。(p + 1)^ でもダメでした。
>>479 var
p : array of integer;
begin
SetLength(p, 255)
p[0] := 123;
p[1] := 456;
type TIntegerArray = array[0..99999] of Integer; PIntegerArray = ^TIntegerArray; として、 var P: PIntegerArray; と宣言するか、 PIntegerArray(P)[0] := 123; の様にキャストして使うか。
>>481 TIntegerArray、PIntegerArrayはSystem.pasで定義されてるよ
>>479 配列として扱うなら配列型使うのが素直だけど
p, pp: PInteger;
pp:=p;
pp^ := 123;
Inc(pp);
pp^:= 456;
でもよい
PInteger(PChar(p)+SizeOf(Integer)* 0)^:= 123; PInteger(PChar(p)+SizeOf(Integer)* 1)^:= 456; つうのもあるな。
まあ、上の何人かが書いたソースを見てわかるとおり、 Delphiではポインタを使うのはポインタ型を作らなくちゃいけなくて面倒なようになってるから、 動的配列で代用できるときは動的配列を使った方がいいさね。
>>485 上のレス見ててよく分からなかったけど、なんとなく分かった。
ありがとう。
FB1.5とD7を使用しています。 DBCtrlGidで入力中に直前のレコードの同じフィールドのデータを現在のフィールドにコピーしたいのですが、 どのような方法が考えられるでしょうか。 直前のレコードはcommitされていない場合もあります。 また、直前のレコードが最後に編集/postしたレコードとは限りません。 2行目まで入力してから1行目を編集して3行目を新規に追加するとき2行目のデータを参照したいと言うことです。 DBとの接続はTIBQUERYを使用しています。
>>487 書き忘れましたがキャッシュアップデートを使用しています。
ClientDataSet をクローンして、そっちでカーソル移動。 現在のカーソルをブックマークしておいて、カーソル移動で探しにいく。
OSをVistaRC2に変えてから、dprをダブルクリックで開こうとすると モジュール'coreide60.bpl'のアドレス 008818D0 でアドレス 00000008 に対する読み込み違反がおきました。 とエラーがでるようになってしまいました ファイル→プロジェクトを開く だとエラーはでません なにか対策方法はないでしょうか? また、Vistaが原因か知りたいので、他にこのほうな症状が出てる方、出てない方いればレスください
Vistaには対応しておりません
RC2だからね。
> モジュール'coreide60.bpl' Delphi 6 だし。
>>484 >PInteger(PChar(p)+SizeOf(Integer)* 0)^:= 123;
PInteger(Integer(P) + SizeOf(Integer) * 0)^ := 123;
の方が自然だと思うけど、世間じゃ PChar にキャストするの?
C#に乗り換えろというメッセージか?
>>494 俺は
>>484 じゃないけど、PCharだと、Delphiのポインタ型の中では珍しく+演算子が使えるのよ
C++っぽくさ。
VISTAで動かないなら「故意に動かないように細工した」と告訴される可能性も出てくるのだが
>>497 初心者には何がどこに定義してあるかわからないじゃん
しかも定義してあるって何がどう定義してあるかは、
Delphiのポインタ型の宣言について知っていなくちゃならないじゃん
自分で定義したレコード型その他の型のポインタはもちろん自分で定義しなくちゃならんし
そういう意味で、C/C++に比べてDelphiではポインタを使うのがめんどいってことっしょ
ポインタ自体を意識しなくてもポインタ使用並みの効果が得られる工夫があれこれされてると思うぞ。 おじさんは。
CD/DVD焼ソフトみたいにCD/DVD挿入時の自動再生を 一時的に無効にする方法を教えてください。
>>499 定義されてるし、前期のようにいろいろなやり方があるしぜんぜん面倒じゃないじゃん。
面倒かどうかを言い出したらbegin面倒、「{」にしろって話といっしょ。
DelphiとBCB、どっちの方が速いですか。
begin は面倒だから、「{」にしてください
>>505 コンパイル速度の話ならDelphiの圧勝
DelphiとCCBに見えた・・・
DelphiとBCB、どちらのタイピングの方が早いですか。 どちらの方が保守しやすいですか?
>>509 タイピング速度はスキル依存なんで人それぞれ
保守は可読性の高さでDelphiと言いたいが
言語スキル依存なのでやっぱり人それぞれ
511 :
デフォルトの名無しさん :2006/11/19(日) 17:35:30
質問があります。 Delphiをアンインストールしてから再インストールすると、 すべての状態(ツールバーや、フォントなどの設定など)が 初期状態になってしまいますが、これらの設定を保存してい るファイルは何でしょうか? 再インストール後に復元したい設定は、 ・ツールバーの状態 ・コードテンプレートの内容 ・フォントの種類、フォントサイズ、フォントの色 などです。
レジストリ
513 :
デフォルトの名無しさん :2006/11/19(日) 18:05:08
教えてください。 オブジェクトを引数として渡す時、値渡し/参照渡しのどちらの書き方をしても 渡されるのは「コピー」ではなく「オブジェクトのメモリアドレス」なので、 呼び出し先での変更が必ず反映されると考えていいのでしょうか? 携帯から書き込んでいるため、具体的なソースを書けず分かりにくいと思いますが、 なんとなくでも質問の意味が分かった方がいたらご回答お願いします。
>>513 あってる。
つか、オブジェクトの参照渡し(つまり結果的には参照の参照渡しになるわけだが)にしても、
Delphiのコンパイラが最適化でオブジェクトの値渡しに直しているらしいよ。
↑は、constでクラスを渡したような場合ね varだとまた別の話。
>>511 インストールしたフォルダにあるdelphi32.* ファイルも忘れずに。
bds だと、Application Dataも保存しておいた方が良い。
517 :
513 :2006/11/19(日) 18:33:46
>>514 早速の回答ありがとうございます。
ネットでいろいろ調べて何となく「こういうことなのかな?」と思ったのですが
イマイチハッキリした確証が得られず悶々としてました・・・解決してすっきりです(・∀・)
どうもありがとうございました。
518 :
511 :2006/11/19(日) 18:39:27
519 :
n :2006/11/19(日) 20:20:51
表示されているウィンドウを画像ファイルとして書き出すプログラムを作るにはどうすればいいのですか?どなたか教えてくださいm(__)m
Delphi キャプチャ でググル
でるひきゃぷちゃでぐぐる
Delphiをでるひと読む奴・・・
涼宮デルヒの憂鬱
涼宮デルヒの憂鬱
>>522 Delphi1.0が発売された直後に、アメリカ出張した同僚が居たんで
「でるふぃー買ってきてくれ」と頼んだ
が、買ってきてもらえなかった
曰く、「店員にでるふぃーなんて無いって言われたぞ」
Delphiをでるふぃーと読む奴・・・
史実のデルポイも衰退していったんだよね。
DelphiとBrainfuck、処理はどっちが高速ですか?
529 :
デフォルトの名無しさん :2006/11/20(月) 03:36:29
Delphi7でクラスに静的フィールドを持たせたいのですが、 TurboDelphiで使えるclass varが使えないみたいなのですが、 どうすればいいでしょうか?
使えないのであきらめてください。 別の方法での実装を考えてください。
HSPならできるのにね
unitのプライベートな変数でやる。
533 :
529 :2006/11/20(月) 05:11:28
回答ありがとうございます。 どうやら7は静的フィールドを作れないみたいですね。 という事で、ユニットの変数でやりたいと思います。
class var って、どんなのか知りたい。
>>529 メソッドを作って、その中で型付き定数を使う。
その後は、必要に応じて、そのメソッドをプロパティでラップするとか。
536 :
n :2006/11/20(月) 15:57:11
指定したファイルを監視して、もし変更があれば何か処理をさせたいのですが どのようにすればよいのでしょうか?
手抜きするならタイマーイベントで対象ファイルの更新日時を取得して 違っていれば何らかの処理を ちゃんとやるならスレッドを立ててFindFirstChangeNotification、FindFirestNextNotification FindCloseChangeNotification、WaitForSingleObjectを使る
>>538 ありがとうございます。
さっそく調べてみたいと思います。
>>540 ありがとうございます。
( * )これでいいでしょうか?
汚い穴だなぁ
なんでWin32の場合、クラスで演算子のオーバーロードを使えないの?変態?
544 :
543 :2006/11/20(月) 18:31:48
自己解決しました
545 :
デフォルトの名無しさん :2006/11/20(月) 19:31:12
RichEditについて質問です。 (1)文字列が何行あるかはどうやって調べればよいですか? (2)HTMLエディタのようなものを作りたいと思っています。 RichEdit1がエディタ表示部、Memo1がソース表示部だとしますと、 RichEdit1の太字部分を、Memo1で<b>〜</b>に置換するには、 どのような処理をすればよいでしょうか。 よろしくお願いします。
546 :
545 :2006/11/20(月) 19:55:14
(1)は自己解決しました。 (2)は、地道に1文字ずつ取り出すのが一番でしょうか…。
まず、文字列処理について勉強すべし
まず、そんなコンポーネントがないか探すべし
RichEdit1の太字部分を、Memo1で<b>〜</b>に置換するコンポなんかあるかよ
MemoからRichEditへの一方通行でいいんじゃね?
あ、パス晒しちゃった…orz
16bit resourceはサポートしてないって書いてるだろ マニフェストファイルの中身も晒さないで質問されても分かるわけない こちとらオールドタイプなもんで
>>555 のリンク先のWindows XP manifest resourceってのを使ったらいい感じになりますた
カメラの回転ムズイ…
Delphi 6 Personal で Mediaplayer コンポーネントを使おうとすると use節に Mplayer が追加されます この状態で実行すると MPlayer.pasが見つからないとのエラーが出ます。 googleなどで調べましたら Pro版なのでは C:/Program Files/Borland/Delphi6/Source/Vcl/MPlayer.pas このアドレスにファイルがあるとの記述が見つかりました しかしPersonal版の私の同アドレスには MPlayer.pasがありません Personal版ではMediaplayer コンポーネントは仕様できないのでしょうか? それとも何か解決策があるのでしょうか? お手数ですが教えていただければ幸いです
無いなら使えないのでしょう。 ActiveXのインストールで、MediaPlayerでも入れて使いましょう。
MPlayer.pasかMPlayer.dcuがあるかどうか調べる なかったら諦めて あればそのパスを上のメニューからプロジェクト→オプション→ ディレクトリ/条件タブの検索パスに追加
ターボ使いなよ
>>558 Media PlayerってSystem/Media Playerにあるやつ?
俺も6 Personalだけどコンパイルできたぞ。
ライブラリのパスとかちゃんと通ってるか?
>>562 SystemタブにあるMedia Playerコンポーネントです
ライブラリのパスとは何んのことでしょうか?
すんません初心者でorz
Media Playerコンポーネント、Buttonコンポーネント、Labelコンポーネント、OpenDialog
を使って
ボタンを押し、ダイアログを使ってMP3ファイルを指定
ファイル名をラベルに表示させて
mp3ファイルを実行するという処理をさせようとしました
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, MPlayer, StdCtrls;
-------------------------------------------------------------------
-------------------------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
if OpenDialog1.FileName <> '' then
begin
MediaPlayer1.FileName := OpenDialog1.FileName;
Label1.Caption := ExtractFilename(MediaPlayer1.FileName);
MediaPlayer1.Open;
end;
end;
end;
どこかおかしいですか?
>>563 同じ構成で試しましたがエラーは出ませんでした。
上にも書いてありますが、
C:/Program Files/Borland/Delphi6/Lib/MPlayer.dcu があるか
ツール->環境オプション->ライブラリタブのライブラリパスに”$(DELPHI)\Lib” があるか
確認してみてください。(多分あるはず)
> MPlayer.pasが見つからないとのエラーが出ます。
存在しないユニットをUseした場合「Unit1.pas(n): ファイル'hoge.dcu'が見つかりません」
等と表示されるようですので「MPlayer.pasが見つからない」のは他に原因があるか、
もしくはエラーメッセージを読み違えていると思われます。
試しにDelphiを起動して新規プロジェクトでMPlayerのみを配置して実行(F9)してみてください。
エラーが出ない場合、作成されているプロジェクトに問題があると思われます。
(プロジェクト保存後にファイルを移動した/リネームした、作成したユニット名にMPlayerを使った等)
565 :
537 :2006/11/21(火) 18:55:20
>>538 や
>>540 でFilterFlagsをFILE_NOTIFY_CHANGE_LAST_WRITにして
問題はおおかた解決したのですが、これを特定のファイルが更新されたときだけ
何か処理したいのですがいい方法は無いのでしょうか?
今の処理ですと同一フォルダに有る、監視したくないファイルが更新されていても
イベントが実行されてしまいます。
どのファイルが更新されたというような返り値があればベストなのですが・・・。
ポインタを渡す関数で、ポインタの指す場所を関数内では読み取り専用と規定することはできますか。 Cでいう (const int *i) みたいな。
567 :
デフォルトの名無しさん :2006/11/21(火) 20:50:40
初めまして。 最近Delphiの勉強を始めたヒヨッ子なんですが、 PaintboxのCanvasに描画させたものを印刷したいのですが、 下記のコードでは実際にプリンターから印刷されません。 procedure TForm1.Print2Click(Sender: TObject); begin if dlgPrint.Execute then with Printer do begin BeginDoc; Printer.Canvas.CopyRect(rect(0,0,100,100),PntPaint.Canvas, rect(0,0,100,100)); EndDoc; end; end; 私なりの考えでは、 PaintBoxの内容をPrinterのCanvasにコピーして印刷しようと考えました。 PntPaintがPaintBoxのNameです。 あれこれ調べながらこういう書き方をするのかな?という感じで 手探りでやってみたのですが・・・ ご教授のほど、よろしくお願いいたします。 また、コレ読んでおけ!ってのがあったら、 教えて頂ければ幸いです。
とりあえず、with 文使うメリットが全く無いな。
>また、コレ読んでおけ!ってのがあったら、 >教えて頂ければ幸いです。 良書はことごとく廃刊ってのがDelphiの現実だ。
Delphi3の頃は良書たくさんあったなぁ。うんこ本もたくさんあったけど。 今は本に書いてある事って全部Webでわかっちゃうし、買う意味あんのか。
塚越たんのDelphiオブジェクト指向本のような解説はWEB上でもなかなかないしなー。
俺、Delphi本メチャ持ってるんだけど、(Delphi2.0〜5、6くらいまで) 放出したらいい値になるかな?オフィシャルコースウェア、洋書、DBやCGI、DelphiXやらゲーム制作本までいろいろあるでよ。 30冊以上はあるかな…
>>572 トイレットペーパー二つくらいにはなるんでは?
VistaだとDelphi6.0は使えないって聞いたんですが、ほんとでしょうか?
試してみたら? 今日Vistaのリリース版出たね。今DL中。 Delphiは2006なので試せない。
>VistaだとDelphi6.0は使えないって聞いたんですが、ほんとでしょうか? マジだったらDelphi4をメインで使ってる俺はどうすればいい?
Vistaを使わなければいい。
Vista用のアプリってD7で作れるんですか?
580 :
デフォルトの名無しさん :2006/11/22(水) 02:49:21
すいません、質問です。 QuadrupleDのマスパック使って、ある3次元ベクトルを、別の3次元ベクトルを軸に 回転させる関数をつくっているのですが、うまくいきません。どうも、ベクトルの方向が変わらないのです。 function NowRotV(v1,v2:D3DVector; r:single) :D3DVECTOR; //v1:基準軸、v2:回転させたいベクトル、r:角度 var cosr,sinr,DP:single; ax,p1,p2,p3,CP:D3DVector; begin ax:=NowNormalize(v1); cosr:=Cos(DegToRad(r)); sinr:=Sin(DegToRad(r)); p1:=NowScale(v2,cosr); DP:=NowDotProduct(ax,v2)*(1.0-cosr); CP:=NowCrossProduct(ax,v2); p2:=NowScale(CP,sinr); p3:=NowScale(ax,DP); Result:=NowAdd(NowAdd(p1,p2),p3); end; 汚いコードですが、何が問題なのか、教えてくださいませんか?
>>580 ムチャクチャすぎる。
Quadruple Dのs_mathpackの角度は、ラジアンじゃなくて4096度系。
ドキュメントくらい一度は通して嫁。
あと、その関数設計も変。
それだと値渡しが多すぎるので、俺なら、
procedure NowRotV(const v1:D3DVector;var v2:D3DVector; r:single);
にする。
この方がパフォーマンス的に有利。
でっかいレコード型はできるだけ値渡しすんな。
でっかいレコード型はできるだけ返り値にすんな。
582 :
581 :2006/11/22(水) 03:11:10
いや、角度系の話じゃねーなそもそも。 もう一度、線形代数の勉強し直して味噌。
583 :
581 :2006/11/22(水) 03:12:58
Cos,Sinはs_mathpackの関数じゃない罠。
要するに、 p' = pcosθ+r×psinθ+r<r|p>(1-cosθ) ; ||r||=1
がしたいわけでしょ、
>>583 のサイトのloc.rotate(軸、角度)もそれだし。
コードよく読んでないけど、間違ってないように見える。なんだろうね、わかんね。
>VistaだとDelphi6.0は使えないって聞いたんですが、ほんとでしょうか? 適応状況とかまとめてくれてるサイトってないのかなぁ
587 :
585 :2006/11/22(水) 04:19:55
んー。 p' = pcosθ+r×psinθ+r<r|p>(1-cosθ) =p1 + CPsinθ+rDP =p1 + p2 + p3 だから、やっぱりあってるような…。
>>586 > VistaだとDelphi6.0は使えないって聞いたんですが
どこで聞いたのですか?
>>490 の話?
これは使えないってレベルじゃないけど・・・あんまり話を広げないように。
2chはアンチがデマを流そうと、てぐすね引いているから
ソースの確認や検証が大切。
Vista はMy Document みたいな物のパスや環境変数が変わっているから
そのあたりの調整が必要と思われ。
delphi 6 personal の使用許諾コードの取得ができないのですが もうだめぽなのでしょうか?
メールが来るまで少し待て。
>>587 わ・・訳わかんねぇ・・
高校で授業聞いておけばよかったぜぇ
とりあえずVista製品版をインストールした俺が来ましたよ。
594 :
567 :2006/11/22(水) 11:46:12
>>568 おっしゃるとおりだと思います。
どう書けばいいかわからず、
とりあえずコードが通ったので、そのままにしてました。
堀越氏の本は古本を買い集めて、
「はじめての〜」は読みました。
その本で紹介されているグラフィック描画ツールに印刷機能を
付けてみようとやってみているのですが・・・
>>590 delwikiにそこらへんは書いてあるよ
まあ使用許諾コードなんていらないよね?
めんどくさいなら割っとけ
プログラマーの言葉とは思えんな
>>594 実はTPrinter.Canvas.CopyRectはTCanvas.CopyRectとは異なる
なので別のCanvasをPrinter.Canvasにコピーという用途には使えない
Printer.CanvasにもPaintBoxに描画したのと同じように記述すればよい
601 :
580 :2006/11/22(水) 13:41:58
皆さんありがとうございました。 結局、回転したいベクトルの初期化をするときに、識別子を間違えていました。 なんていうかほんともう、ごめんなさいです。
ちなみにプリンターから印刷されないのは Printer.Canvasに何も描かれてないため 1.BeginDocメソッドで印刷始めるぞ(゚Д゚)ゴルア!! 2.>Printer.Canvas.CopyRect(rect(0,0,100,100),PntPaint.Canvas,rect(0,0,100,100)); この文ではPrint.Canvasに何も描かれない 3.EndDocメソッドで何だよ印刷終わりかよ あれ、Canvasに何も無いじゃん( ´,_ゝ`)プッ じゃあ印刷しねwってことで印刷されない Printer.Canvas.CopyRect(rect(0,0,100,100),PntPaint.Canvas,rect(0,0,100,100)); の代わりにCanvas.TextOut(10, 10, 'Text Test'); とか書くと印刷されるよ
> あれ、Canvasに何も無いじゃん( ´,_ゝ`)プッ デバイスコンテクストのヤツ、ムカつく。
関数RoundやTruncの処理内容を見たいのですが、System.pasを見ても、どこにも function Round(X: Real): Int64; なんて書いてありません。 ヘルプには 「ユニット System」 と書かれてありますが、これは嘘で、別のところに書かれているのでしょうか。
System.pas内の_ROUNDや_TRUNCを参照 一部のコアな関数はアセンブラで書かれているので
606 :
594 :2006/11/22(水) 15:45:39
>>600 >>602 なるほど!そういうことでしたか。
ようやく解ってきました。
で、早速試してみたのですが、
OnMousedown、Move、Upなどの各プロシージャに
PaintBoxに描画するのと同時に、
Paintbox1.Canvas.LineTo(X,Y);
Printer.Canvas.LineTo(X,Y);
と記述するとエラーが出てしまいますね。
ということは、
ツールでユーザーに描かせたLineToなどの座標を
全て配列か何かに保存して、
BeginDocのあとでPrinter.Canvasに描画する形になるんでしょうか。
607 :
594 :2006/11/22(水) 16:30:51
っていうか、そもそもPaintBoxじゃなくて Image使えば済む話なのかな・・・と書籍を読み進めて思いました。
>>607 うん
なんでTPaintBox使ってるのか不思議だった
CodeGear(笑)
>>566 『渡したい変数型へのポインタ』型を定義して定数パラメータにすればできます.以下コンソールプログラムの例.
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
type
PInteger = ^Integer; // 「整数型へのポインタ」型の宣言
procedure Foo(const i: PInteger); // const宣言によって変更が禁止されます.
begin
//i := i + 1; // パラメータの値を変更しようとするとコンパイルエラーになるよ!
writeln(i^);
end;
var
i: integer;
begin
i := 10;
Foo(@i);
i := 20;
Foo(@i);
readln;
end.
Delphiではパラメータのconstは『値の変更を禁止する』という意味しかありません.
具体的には条件によって値渡しや参照渡しになります.
しかしパラメータがポインタ型の場合は必ずポインタが渡されます.
なおInteger型へのポインタはすでにWindowsユニットでPIntegerとして定義済みですので新たに定義する必要はありません.
611 :
581 :2006/11/22(水) 20:01:36
>>610 あんまり無いと思うが、Winodwsユニットを使いたくないケースでは自分で宣言しなくちゃならんな
あんまり無いと思うが、自分で宣言したくないケースではWinodwsユニットを使わなくちゃならんよ
>>574 ヘルプが起動しない
製品版なら後からファイル足せば大丈夫だが
ベータやRCは無理
Vistaにはwinhlp32.exeが付いていないんだっけ。 Delphi6だけの問題じゃないよ。
delphi6 personalから turbo delphiに移行しようかと思ってるんですが? 大分仕様変わってますか? 書籍等買いなおす必要はあるのでしょうか? 教えて下さい
> 大分仕様変わってますか? いいえ。 基本的にはIDE が変わっているだけです。 コンポーネントを追加できないなどの制限はありますが 機能的にはProfessional なのでDB 接続が出来るようになります。 > 書籍等買いなおす必要はあるのでしょうか? いいえ。
>Vistaにはwinhlp32.exeが付いていないんだっけ。 なんでwinhlp32.exeくらいつけないんだろうな。 俺がつくったヘルプってこればっかりなのに。
DBGridのセルにイメージ(警告マーク等)が表示されてるのを見たような気がするんだけど、セルに小さいアイコンとか表示させる方法、しってる方いませんか?
>>617 同名のファイルは入ってて、起動すると
「HLP形式のヘルプはサポート終了するぞ。 どっかからWinhlp.32.exe持ってくれば
動くが、再配布は禁止だからな」って主旨のメッセージを表示した。
>「HLP形式のヘルプはサポート終了するぞ。 どっかからWinhlp.32.exe持ってくれば >動くが、再配布は禁止だからな」って主旨のメッセージを表示した。 なんかいやらしいな…
621 :
581 :2006/11/23(木) 13:39:33
>>615 無料版という前提で言うと、
修正パッチを当てると、テキストエディタをフリーカーソル解除できなくなるのが辛い。
622 :
デフォルトの名無しさん :2006/11/23(木) 13:55:40
リレー動作のプログラムなんですが64個のリレーを チェックボックスに分けて選んでリレーを ON/OFFしたいんですが procedure TForm1.Button1Click(Sender: TObject); begin Relay[Time]:=True; Time:=Time+1; RelayChange; end; これからどう増やせばいいでしょうか?
リレー動作てなんすか
624 :
デフォルトの名無しさん :2006/11/23(木) 14:24:03
有接点リレーのことです
リレーはわかるが、何がしたいのかよくわからない。 よくわからんが、チェックボックス64個フォームに貼り付けて、 チェックボックスのTagプロパティに0〜63の値を入れて、 全てのチェックボックスのonClickにそのButton1Clickを入れて、 procedure TForm1.Button1Click(Sender: TObject); var c:TCheckbox; begin c:=Sender as TCheckBox; Relay[c.Tag]:=Relay[c.Tag].Checked; RelayChange; end; これでいいんじゃね?
626 :
625 :2006/11/23(木) 15:46:05
Relay[c.Tag]:=Relay[c.Tag].Checked; ↓ Relay[c.Tag]:=c.Checked; こうだった。
delphi6でMP3を実行するプログラムを作ろうと思い あちこち調べたら TMP3Playerコンポーネントを使うのが良いとの記述を多く見かけたのですが 肝心のTMP3Playerコンポーネントのダウンロード先が全てリンク切れになってるんですが 現在は手にはいらないのでしょうか? また現在mp3ファイルの実行するには どのようなコンポーネントまたは関数を使えばよいのでしょうか? お手数ですが教えて下さい
Delphi標準のTMediaPlayerコンポーネントで mp3ファイル再生できるよ 但し、環境によっては再生出来ないこともある
630 :
デフォルトの名無しさん :2006/11/24(金) 14:10:30
Font.Charaset が SHIFTJIS_CHARSET になってると、 英語版Windowsなんかでは描画不正になるんでしたっけ? これって実行時に動作するWindowsから情報取ってきて直してくれるんかな?
デルファイワールドw
デルファイワールドへの入り方を教えてください><
^^
デルフィアンワールドでした。 デルファイワールドじゃなかったのか。。。
mp3の再生にTMediaPlayerを使ってるんだけど、環境で再生できない場合も あるの?どんな場合ですか?修正しなきゃならないかなあ…
>>636 CODECにFraunhofer IIS MPEG Layer-3 Codecがないと
mp3ファイルが再生出来ない
ただ、IE4だか5を入れると自動的にインストールされるみたいなので
Win95とかWinNT4とかでない限り問題はないと思う
>>616 コンポーネントをどうしても追加したい場合、製品を買うしかないのでしょうか?
買いなさい。
でも、安いからってアカデミック版は買うなよ。 これで作ったプログラムは商用非商用関係なく配布不可能だから
ACで作って、Turboでコンパイルして配布してます^^
>>642 ビルドをTurboにやらせているだけだとライセンス的には解決していないだろ
>>638 Delphi とは関係なかったんですね。あとは自分で調べてみたいと思います。
ありがとうございました。
小数点を切り捨てるにはどうすればよいのでしょうか たとえば var i,j:real; i:=12.3456789 で、小数点第三位以下を切り捨てて j:=12.34にしたいのですが
100倍して Trunc して 100で割る。
procedure TForm1.Button1Click(Sender: TObject); var RandArray: array[1..1000000] of real; i:integer; j:real; begin j:=0; for i:=1 to 1000000 do begin Randarray[i]:=random; end; Label1.Caption:=FloatToStr(Randarray[StrtoInt(Edit1.Text)]); {* for i:=1 to 1000000 do begin j:=j+Randarray[i]; end; j:=j/1000000; Label2.Caption:=FloatToStr(j); *} end; これやったら、スタックオーバーフローとか出てきたんだけど 配列が1000000もあるのが悪いみたいです arreyはいくつまで宣言可能なのですか?
>>648 俺も数年前まで、そういうエラーに悩まされた。
変数は制限のあるスタックに割り当てられるようで、GetMemとかでヒープを使えばいいと思う。多分
俺にも、一番最適な方法を、詳しい方、教えてください。
動的確保が嫌なら型付定数を使えばいいじゃない
>arreyはいくつまで宣言可能なのですか? ローカル変数はスタックと呼ばれる上限値の決まっているメモリに置かれるので デカい配列を定義するとメモリ内に収まらなくなる 引数に大きな配列を渡す場合も同様 解決方法は以下の2つ 1.[プロジェクト]-[オプション] のリンカページでスタックサイズを増やしてあげる 2.動的にメモリを確保する
動的配列を使った例 procedure TForm1.Button1Click(Sender: TObject); var RandArray: array of real; i:integer; j:real; begin try for i := 1 to 1000000 do begin SetLength(RandArray, i); Randarray[i-1] := random; end; Label1.Caption := FloatToStr(Randarray[StrToInt(Edit1.Text)]); j := 0; for i := 1 to 1000000 do begin j := j + Randarray[i-1]; end; j := j / 1000000; Label2.Caption := FloatToStr(j); finally Finalize(RandArray); end; end;
New...Dispose、GetMem...FreeMemと同じように、 Finalizeを呼ばないと、SetLengthで割り当てた動的配列は、メモリリークするのですか?
Tstringlistのindexofで'ゝ'と'ー'と'ー'が同じ文字として扱われてしまいます。 それぞれ区別して結果を返すようにするにはどうしたらいいですか? tlist := TStringList.Create; try tlist.text := ''; tlist.add('ゝ'); tlist.add('ー'); tlist.add('ー'); tlist.add('a'); showmessage(inttostr(tlist.IndexOf('ゝ'))); // => 0 showmessage(inttostr(tlist.IndexOf('ー'))); // => 0 showmessage(inttostr(tlist.IndexOf('ー'))); // => 0 showmessage(inttostr(tlist.IndexOf('a'))); // => 3 finally tlist.free; end;
#$81#$54 #$81#$5B あとはしらべぃ
どっちも同じ。 辞書順では同じって意味かなぁ… ShowMessage(IntToStr((CompareString(LOCALE_USER_DEFAULT, NORM_IGNORECASE, 'ー', 2, 'ゝ', 2) - 2))); // 0になる ShowMessage(IntToStr((CompareString(LOCALE_USER_DEFAULT, NORM_IGNORECASE, #$81#$54, 2, #$81#$5B, 2) - 2))); // 0になる
>>655-656 ありがとうございました。
posでは判別できるようなので新しく関数を作って対応しました。
ShowMessage(IntToStr((CompareStringW(LOCALE_USER_DEFAULT, NORM_IGNORECASE, 'ー', 2, 'ゝ', 2) - 2)));
は-2になったよ。
>>657 ドンマイ
>>653 動的配列はスコープ抜ければ自動で解放される
自分で解放したい時はnilを代入すればよろし
フォームにmemoを一つだけ置いています memoの大きさはフォーム内いっぱいに広げています フォームのはじっこをドラッグしてサイズ変更すると それに伴ってmemoの大きさも変わるようにするにはどうすればいいですか?
MemoのAlignをalClientに
>>663 うをー!?!?まぢでー!?!?すげーすげすげすげー!?!スゲスゲヴォー!!!ありがとー<丶`∀´>
朝鮮人か?祖国に帰れ。
なんだチョンか
なんでやネン!?!わいは関西人やでぇー<丶`∀´>
大阪民国人=チョン
なるほどっ!?!そうやったんかニダ<丶`∀´>ほなサイナラ
670 :
662 :2006/11/25(土) 04:57:41
なんかニセモノがいる(;^ω^)
>>663 ありがとうございますやってみますです
Delphiで既存のバイナリファイルの一部を書き換えるには 何を使えばいいんでしょうか? TFileCreate('HONYARARA.BIN',FMOpenRead); だと、開くだけだし・・・ 「さすが、くだすれだな」と言われそうですが・・・
>>671 TStream.Read
TStream.Write
TStream.Seek
>>671 TFileStreamクラスのReadBuffer、WriteBufferメソッド
>>646 小数を文字列に置き換えて
AnsiPosで小数点の位置を調べ
その2バイト(桁分)先から
lengthで得た文字列の終端まで
deleteで削除しちゃえば?
必ずしも桁が全部あるとは限らないだろ。 12.3 かもしれんし。 数値を文字列処理するのはまずいよ
ピリオドを含めずにファイルの拡張子を取得するにはどうすればいいんでしょう? ExtractFileExtだとピリオドが入っちゃう
>>676 2文字以上だったら最初を取り除けばいいだけやん
Delphiで、C言語のマクロ定義と同じようなことをするにはどうしたらいいでしょうか #define M 1000 みたいに
if savedialog1.execute then begin fs:=tfilestream.Create(savedialog1.filename,fmcreate); try fs.position:=$00000302; t:=$000000ee; fs.write(t,sizeof(t)); //tはbyte型 finally fs.free; end; end; すいません。質問の仕方が不適切でした。↑こんな感じで 302番地の内容をEE(255)にしたいと思ってるんです。 でも、こうするとファイルのサイズが701バイトに減ってしまいます(元は30KB程度あった)。 しかも、全体(701バイトより前)がめちゃくちゃに書き換えられてしまいます。 (質問の用語に間違いがあるかも)
fmOpenReadWrite
ついでにfmShareDenyWriteもつけとけ
>>677 いやまあそうなんですけど、何を使って削ればいいのかorz
Copy
>>683 なんとかできそうです
ありがとうございました
685 :
679 :2006/11/25(土) 13:47:08
>>680 さん
>>681 さん
ありがとうございました。
fmOpenReadWriteで出来ました。
>>1 にあるようにDelphi布教してみます。
(自分の周りのPCユーザーの90%以上は「Delphiって何」状態です)
687 :
デフォルトの名無しさん :2006/11/25(土) 17:54:21
IsDelphiで、このソフトが、Delphi製とでるのですが、
http://www.highdots.com/css-tab-designer/ オフィスっぽいGUIは、どんなコンポーネントを使っているんでしょうか?
# 寺小屋のスレで間違えて聞いてしまいました。
>>110 Turboは知らんけど、同等だと思われるBDS2006は、
FastMMのおかげで、すんげー速くなった。
メモリ確保しまくりのゲームだからかもしれんけど。
>>678 C言語並に強力なマクロないはずです。
定数宣言なら、constで代用できます。
>>687 リソースハッカーでリソース内のdfmが見れるからコンポーネント名を調べればいいんじゃね?
>>203-204 を使って圧縮したやつを
FTP(Indy)に上げたいのですが
SevenZipCommand('a -t7z "'+ExtractFilePath(paramstr(0))+'test.7z" "'+ExtractFilePath(paramstr(0))+'tmp\*" -ms=off');
FTP.Put(ExtractFilePath(paramstr(0))+'test.7z','test.7z');
としても圧縮だけなってそこで処理が止まってしまいます。
個人的には圧縮完了のダイアログが悪さしているか、
圧縮完了する前にFTPコマンドがに行ってなんかなってるのかなと思います。
どうしたら良いのでしょう orz
691 :
デフォルトの名無しさん :2006/11/25(土) 20:26:59
>>688-689 そうでした。そっち系のツールで見ればわかりますね。
調べてみます。
>>690 とりあえず、問題を切り分けた方がいいですよ。
・7zip側の問題なのか
・Delphiの7zipの圧縮ルーチンの問題なのか
・FTPの問題なのか
FindFirstして、結果が0だったら(1つもファイルが見つからなかったら)、FindCloseしなくてもOKですか。
Delphi 6 Personalでフリーカーソル無効化アドインのような コードエディタをカスタマイズするアドインプログラムを作りたいと思っているのですが Delphi 6 Personalでそのようなことはできるのでしょうか? (ネットで調べるとTools APIでIDEのカスタマイズが可能。 6 PersonalにはTools APIは含まれずのような記述があったので。) またアドインを作る上で参考になるサイトがあれば教えてください。 Delphi 6 Personalにこだわるのに大した理由は無いのですが、 せっかく作るならDelphiで、しかも今使っているバージョンで、 と思っています。
> Delphi 6 Personalでそのようなことはできるのでしょうか? この件はちょっと分からない。 ToolsAPI.pas が無かったら無理かも。
>692 FindFirstの結果が0になるときはTSearchRec内のハンドルが INVALID_HANDLE_VALUEに設定されていますので、 FindCloseしてもしなくてもどちらでも構いません。
>697 40秒違いでしたね。その話(FIndFirstが0を返したときにFindCloseするとWindowsから制御が 帰ってくるまでに非常に時間がかかる)はD3時代のもので、D4以降ではその問題を回避するために コードが変更されています。
つまり気にせずに常にCloseしてしまって構わない訳ですね。
if FindFirst <> 0 then try repeat hoge until FindNext = 0; finally FindClose; end; このパターンでいいじゃn
うちはいつもそのぱたーん
>>652 ループでSetlengthの配列要素数を増やしていくと、アホみたいにメモリがなくなる。
最初にSetlength(*.1000000)みたいにしておかないと、すぐにメモリ不足。
>>694 ,
>>695 ありがとうございます。参考にします。
ちょっと大変そうですね。
>>696 Delphi 6 PersonalにはToolsAPI.pasがついていないし、
以前適当なプロジェクトでUse ToolsAPIした時は”ユニットが見つからない”
というようなエラーが出ていたので使えないものだとあきらめていました。
試しにフリーカーソル無効化アドインのソースをコンパイルしてみたところ
正常にコンパイルできたのでどうやら使えるようです。
先に試してみるべきでした。すみません。
同じようにUse ToolsAPIしているのにちょっと不思議ですが、
フリーカーソル無効化アドインのソースを見つつ調べてみます。
ありがとうございました。
おまいらのDelphiは 検索に成功しなかった場合に0 を返すのか? if FindFirst = 0 then try repeat hoge until FindNext <> 0; finally FindClose; end;
>>703 SetLength ってそうなの?ループの中で増やしていくってやり方でガンガン
やってたんだけど、最初に要素数を求めた方が良いのか…
リサイズ繰り返すとどんどん半端なブロックが増がえていくってことじゃ ようしらんけど
>>704 > 正常にコンパイルできたのでどうやら使えるようです。
ToolsAPI.dcu がついている?
709 :
デフォルトの名無しさん :2006/11/26(日) 21:17:10
CardinalとLongWordの違いはなんですか?
>>706 実際にメモリ使用量を見ていると、笑えるくらい増えていく。
できるだけ、最初に多めに確保して、要素数が増えた時点で、SetLengthでぴったりの要素数にする方がいいな。
Setlengthしまくって消費したメモリは、配列のポインタがなくなるまで保持されてしまうので、かなり厄介。
どうしても途中で要素数を変更したい場合は、別の配列を作って要素をコピーして、前の配列のポインタを解放すると、
メモリ消費量が正常に戻る。
>>709 CardinalはDelphiのバージョンによっては4バイトではない場合がある。
一番速度が速い符号無し整数型。
そのうち64ビット版Delphiでは、CardinalとかIntegerは8バイト型になるんじゃないかと昔は言われていた。
それに対して、LongWordとかLongIntはどのDelphiでも4バイトと決められている。
要素数が増えた時点で→要素数が確定した時点で
>>710 普通のやり方の一つとして、要素数がたりなくなったら最大要素数を何倍かする、ってのが一般的に存在するな。
いちいち一個ずつ最大要素数を増やすよりはよっぽどパフォーマンスがいいので。
>>708 ToolsAPIと名のつくファイルはD6Personalにはありませんでした。
フリーカーソル無効化アドインを見てみたらパッケージエディタのRequiresに
・・\Delphi6\Lib\designide.dcpが使われていて
中身を見てみるとToolsAPIの文字がありました。
パッケージって何?DCPって何?な状態なのですが
これを使えばいいのかなと思ってる所です。
>>711 64ビット版でもIntegerは32ビットなのですか。
>>716 Windows では32ビットのまま。ポインタの幅だけ64ビットになるらしい。
>>703 別に無くならないでしょう。 コピーが発生するから遅くはなるけど。
SetLength の件、いろいろ勉強になりました。 ・できるだけ最初に必要な要素数を確保する。 ・分からなければ多めに確保しておく。(確定時点で削除する) ・どうしても追加する場合は別の配列にコピーするか、倍数などで一括して増やす。 といった感じでしょうか。
そんな感じです。
FAQ かも知れませんが、MS の Word や Excel って、アプリケーションが アクティブじゃないときにボタンなどのある場所をクリックしても クリックされずにアプリケーションがアクティブになるだけですよね。 で、もう一度クリックすると反応します。 あれと同様のことをしたいのですが、どのようにすればできるものでしょうか。
723 :
567 :2006/11/27(月) 18:49:57
何度もすみません。 ImageのCanvasに描画したものを印刷しようとして、 下記のとおり描いてみたのですが、ジョブがプリンタに行きません。 どこが悪いのでしょうか。 procedure TForm1.GPrintClick(Sender: TObject); var Bitmap1 : Tbitmap; Rect1 : TRect; begin Rect1 := Rect(0,0,Panel1.Width,Panel1.Height); Bitmap1 := TBitmap.Create; Bitmap1.Canvas.CopyRect(Rect1,Image1.Canvas,Rect1); if dlgPrint.Execute then Printer.BeginDoc; Printer.Canvas.Draw(0,0,Bitmap1); Printer.EndDoc; end; ちなみに前述のPaintBoxを使わず、TImageを使うことで、 フォーム全体を印刷したときに描画した内容が印刷されるようになりました。 あと、OnMouseDown等の各プロシージャで TImageに描くのと同時にPrinterCanvasに描画するにはどうすれば良いのでしょうか? Image1.Canvas.LineTo(X,Y); Printer.Canvas.LineTo(X,Y); なんて1行書くだけではダメなんですよね・・・
724 :
722 :2006/11/27(月) 21:38:03
コントロールのEnableやTApplicaitonのイベントで実現できましたあ。すみません。
私ならプリンタDCがどんなAPIをサポートしているか調べる。
わたしならTImageに描くのと同時にPrinterCanvasに描画するようなことはしない。 Canvas の分解能がちがいすぎるわな
分解能?
解像度って言いたかったんだろうな。 Image1.Canvas.LineTo(X,Y); Printer.Canvas.LineTo(trunc(X*a),trunc(Y*a)); として、Printerの場合は、a倍の座標に・・とする方がマシかな。 aの値は、PrinterのCanvasのサイズとImageのサイズから、比率を計算してな。
分解能。
事情があってDelphi4ですが、CVSを使いたいのでdfmがテキストにならないかと画策してます。 ToolsAPI.pasの何かを使ってできるんじゃないかとは思ってるところですが、 どこかにそんなアドインとかあります? あるいは、このinterfaceがそれっぽいと言う情報とか・・・ ファイルアクセス監視して自動でコンバートするのはあまりやりたくないところ。
5 / 3 この結果はExtendedですか、Doubleですか、Singleですか。
文脈に依存します
Extended /による除算は割られる数、割る数の型に関わらず常にExtended
CPUの浮動小数点数精度をいじった場合には、Extendedの精度ではない場合もある。
type 識別子 = record で、 この中にいっぱいフィールドがあるのですが、 ローカルで使用する時に全フィールドを初期化をしたい場合、 全フィールドを別々に初期化しないとだめなんですか?
FillcharなりZeromemoryなり使えや ゼロ初期化じゃないならとっとと初期化用手続きを作る
ああ、でも、レコード型のメンバーにstringや動的配列の時はFillcharやZeromemory使っちゃだめだった。
クラスにしちゃえばいいじゃん クラスなら数字は0、文字はヌル、論理はFalseで自動的に初期化される どーしてもレコードがいいんだい!って人は FillChar(MyRecord, SizeOf(MyRecord), #0); これでも数字は0、文字はヌル、論理はFalseに設定されるよ
>>738 文字がフィールドにあるレコード型でFillChar使うと、
参照カウントがおかしくなってメモリリークおこすんじゃね?
おっと、補足
レコードのメンバーにAnsiString 、WideString、Variant、動的配列を
含む場合はFillCharの後にInitialize手続きを呼んで
それらを初期化してあげる必要がある
FillChar(MyRecord, Sizeof(MyRecord), #0);
Initialize(MyRecord);
再初期化する場合は一度Finalize手続きを呼んで
AnsiString 、WideString、Variant、動的配列が使ってるメモリを解放
その後、FillChar、Initializeと続く
Finalize(MyRecord);
FillChar(MyRecord, Sizeof(MyRecord), #0);
Initialize(MyRecord);
>>739 する
説明不足でした
>>735 です。みなさん、本当にありがとうございます。
データの保存用に作り始めたら項目がどんどん増えちゃって混乱状態に><
>>740 さんの> FillChar(MyRecord, SizeOf(MyRecord), #0);
FinalizeやInitializeが何を意味するのか全然わかりませんが、
便利そうなので、ぜひ使わせてもらいたいと思います!
本当にありがとうございました!
時間ないなら丸暗記でもいいけど 余力があればなぜInitializeが必要なのか 再初期化時だけFinalizeが必要なのはどうしてかを是非調べて 自分なりに理解して欲しい
finalizeやFillCharは知らなかった。便利な関数をありがとう。
もとい、finalizeとinitializeだね。
VistaでDelphi6のヘルプを見る方法はなにかないですか?
>>745 winhlp32.exeをどっかからもってきてVistaのと入れ替える。
747 :
デフォルトの名無しさん :2006/11/28(火) 22:11:17
BDS2006のヘルプには、D6のように、ルーチンの「例」は書かれてないのですか?
>>747 あれ、思い出せねぇな。名前。海外のコンポでフリーウェアだと無償で利用できて、
有償ソフトに利用する場合、有料になるやつ。誰がヨロ。
ProgressBar.Min を 1000にして、Maxを1000000にして実行すると、例外が発生してアプリ毎落ちるのはなぜ?? BDS2006です。
>>748 ルーチンの例どころかVCLリファレンスすらまともに付いてない。
こんなんで新たなユーザーなんて増えるわけないわな。
unit名すら書いてないYO!
753 :
567 :2006/11/29(水) 11:35:47
>>728 そう書くと、プログラム実行後、
描画した際にエラーがでて止まってしまいます。
何かが足りないのだろうと思いますが・・・
理解できていません・・・
また、
>>723 の前半部分のコードについて、
指摘して頂けると有り難いのですが・・・
>>750 プロパティの読み込み時に、Minが範囲外扱いされてしまうからだな。
自動のCreateでエラーになると全体が止まってしまう。
で、何でそんな値になってるんだろうか?
1000で割った値にしても問題ないような気がする。
どうしてもと言うなら、プロパティじゃなくてコードで設定するとかかな。
>>753 前にも書いたけど印刷されないのは
Printer.Canvasに何も描かれて無い為
>Rect1 := Rect(0,0,Panel1.Width,Panel1.Height);
>Bitmap1 := TBitmap.Create;
>Bitmap1.Canvas.CopyRect(Rect1,Image1.Canvas,Rect1);
コピー元とコピー先が同じなのはなぜ?
とりあえずCopyRectの部分をBitmap1.Assign(Image1.Picture.Bitmap);
に変更すれば印刷される
検証するならCopyRectの後に
Bitmap1.SaveToFile('C:\test.bmp');とか追加して
ビットマップファイルがC:\Test.bmpに存在して中身がTImageに描画したのと
同じか確認、違うならCanvasにはコピーされていない
あと、TBitmapのオブジェクト解放処理がないから
このソースはメモリリークが起こる
try〜finally節を利用してBitmap1.Freeの一文を必ず入れること
>>750 TProgressBarのソースを見ると
Min > 100の時に例外を生成している
>>754 の言うようにFormCreateイベント辺りで
Min := 1000;
Max:= 1000000;
とか書くぐらいか、あとはVCLのソース変更するとか
たぶんforループカウンタが1000から1000000までなんだろw
>>753 とりあえずエラー表示の内容をここに書いてみると良いことが起こるかも
>Progressで例外 Positionがゼロなんじゃねーの?
>>759 あぁ、それそれ。Toolbar2000俺が言いたかったのは。
というか、DevExpressなどの製品でもいいんだけどさ、Vista発売間近で、
OfficeスタイルのUIとかちょっと時代遅れになっちゃうよなぁー。
これからはRebornUIなのかね。
761 :
567 :2006/11/29(水) 16:23:34
>>755 丁寧なご指摘ありがとうございます。
早速試してみたところ、Bitmapにコピーが出来ている事は
SaveToFileで確認できました!
ですが、やはり印刷ジョブが行きません・・・
変更後のソースは下記のとおりです。
begin
Rect1 := Rect(0,0,Panel1.Width,Panel1.Height);
Bitmap1 := TBitmap.Create;
Bitmap1.Assign(Image1.Picture.Bitmap);
if dlgPrint.Execute then
try
Printer.BeginDoc;
Printer.Canvas.Draw(0,0,Bitmap1);
Printer.EndDoc;
finally
Bitmap1.Free;
end;
end;
>>756 ありがとう。ソースでMaxから設定したら問題無かったよ。
764 :
デフォルトの名無しさん :2006/11/29(水) 19:35:23
>>759-760 ,
>>762 おお、TMSSoftwareいい感じですねー。
めちゃめちゃほしくなりました。
AdvToolBarだけでも買おうかな。
Office2007は使ってましたけど、あのUIは、結構好きです。
RebornUIはあこがれますね。
VistaってBDEインスコできるんですか?
766 :
デフォルトの名無しさん :2006/11/30(木) 11:11:10
Windowsのウィンドウの基本動作として、Form1にリフレッシュがかかったら、Drawしたものは消えると思うが。
>>766 >bm1.LoadFromFile('img\bm1.bmp');
ここ
実行ファイルが存在するパスがカレントじゃないかも
絶対パスで書くかChDir手続きで明示的にカレントを変更すべき
関数や手続きの引数として 多次元配列を設定することはできないのでしょうか? procedure test(var A: array of array of Integer) begin 処理 end; とすると エラーとして型が必要なところにARRAYがありますと出てしまいます
Delphi(というかPascal)は型に関しては異常に厳しい ↓のように自分で型を定義すればOK type TMyArray = array of array of Integer; end; procedure Test(Var A: TMyArray) begin なんたらかんたら〜 end;
771 :
766 :2006/11/30(木) 13:30:43
>>767 ありがとうございます。
画像が表示される昔のソースを調べたのですが
どこがリフレッシュ対策なのやら??
でもなんか昔も同じところでつまづいてたような記憶もあります
進歩してない・・・orz
>>768 既に疑って検証済みなのですが
それが原因の可能性が低いんです
772 :
767 :2006/11/30(木) 13:34:45
>どこがリフレッシュ対策なのやら?? リフレッシュ対策という考え方が違っています。 Windowsのウィンドウは、Windowsから書けというメッセージが来る度毎回書くのがルールです。 それをやりたくない場合は、TImageなんかのコンポーネントに描画させるとか。
>>723 ,761 (
>>567 )
中村拓男氏のこのページをご参照ください.
http://www.asahi-net.or.jp/~HA3T-NKMR/tips004.htm このページの最後に書いてあるように同氏作のライブラリ DHGL にある TBigBitmap を使うのが手っ取り早いでしょう.
(DrawModeプロパティをdmUseBandingにすると同ページの解説にある3.と4.をやってくれます)
>>730 convert.exe というコマンドラインの変換ソフトが付いています.
パラメーター無しで実行すると簡単なヘルプが出てきますので参考にしてください.
例)convert -t nantoka.dfm
バイナリ形式のフォームファイルからテキスト形式の nantoka.txt を生成します.
※Delphi 5の場合は
convert -i -t nantoka.dfm
でフォームファイルを直接テキスト形式に書き換えてくれるようですが
Delphi 4の方にこのオプションがあるかはわかりません.
また私は使ったことはありませんので詳細はわかりません.
>>766 Windowsのマルチウィンドウシステムは1枚の紙か何かにウィンドウの絵を次々と描くような仕組みなんです.
たとえば画面にAというプログラムの甲というウィンドウがあって
そこにBというアプリの乙というウィンドウが部分的に重なり,
次に甲をクリックして甲をアクティブにする(またそれによって甲が最前面に出る)場面を考えてみます.
甲の表示はWindowsが単純に甲の絵を描くだけです.
次に乙を表示するときもWindowsが乙の絵を描くだけです.
このとき,乙の陰になった甲の一部分の絵は消滅してしまいます.
そして甲をアクティブにするとき,Windowsはウィンドウのキャプション(見出し)や消えてしまったボタンなどの絵を描きなおしますが
消えてしまった部分のうちプログラムAが自分で描画した部分に関しては
Windowsが甲に対して描きなおすように『メッセージ』を送るだけで再描画はAが行います.
つまりAは甲にこの『メッセージ』が来るたびに再描画するようなコードを書かなければなりません.
>>766 のコードだとフォームへの描画はボタンをクリックしたときにしか行われないので
次に表に出てきたときにほかのウィンドウの陰になっていた部分がおかしくなってしまうのです.
(つづく)
(つづき)
対策は
>>772 にあるとおりで,メッセージの応答コードを書くかイメージコンポを使うかです.
メッセージへの応答コードをそのまま書くこともできますが,
DelphiのフォームコンポでOnDrawイベントのイベントハンドラに描画処理を書くことで応答をやってくれます.
TForm1.FormDraw(Sender: TObject);
begin
Canvas.Draw(0, 0, bm0);
end;
このコードだと初めからビットマップの内容が描画されてしまいますのでButton1をクリックしたら描画するという場合はこんな感じになるでしょう.
(宣言部)
TForm1 = class(TForm)
(略)
private
(略)
FButton1Clicked: boolean; // Button1がクリックされたことを記憶する変数
protected
(略)
end;
(実現部)
TForm1.Button1Click(Sender: TObject);
begin
FButton1Clicked := True; // 「Button1がクリックされたぜ!」
end;
TForm1.FormDraw(Sender: TObject);
begin
if FButton1Clicked tnen
Canvas.Draw(0, 0, bm0);
end;
(つづく)
(つづき) イメージコンポはキャンバスにアクセスするとPictureプロパティに割り当てられているビットマップに描画します. (ここにWindowsビットマップ以外のJPEG画像などが割り当てられている場合はエラーになります) 画像が空の場合は描画などの前にコンポと同じサイズのビットマップを作ります. このコンポは自分が隠された後に再び表に来たときには自らを描きなおしますので 再描画のコードを書く必要はありません. ただしイメージコンポのサイズが変わってもビットマップの大きさは変わりません. (おわり)
if文でBoolean型の関数を書くとき、「関数 = False」で指定するのと「not 関数」で指定するのでは何か違いはありますか?
778 :
デフォルトの名無しさん :2006/11/30(木) 18:37:14
QuickReportのプリンタ デバイス コンテキスト取得できますか?
780 :
777 :2006/11/30(木) 19:56:05
そうですか、どうもですw
www
782 :
766 :2006/11/30(木) 20:28:54
画像表示の件、解決いたしました。
ブランクが長かったせいか、delphiそのものを忘れていました。
原因はソースの書き方そのものではなく、コピペしてきたことによる弊害で
オブジェクトインスペクタのイベントのOnCreateとOnDestroyが空欄のままだった
という何ともマヌケで恥ずかしいものでした。
>>775 で教えていただいたOnDrawを試そうとして気付きました。
ななしへたぐらま ◆XcB18Bks.Yさんご指摘の件、直接の原因ではありませんでしたが
とても勉強になりました。TBitmapで検索かけてもその情報は見つけられませんでした。
そしてレスくださった皆様、大変助かりました。本当にありがとうございましたm(__)m
783 :
デフォルトの名無しさん :2006/11/30(木) 20:59:36
jpegファイルが壊れていないかどうかを検査できる コンポーネントか、何かのテクニックってありませんか? TJpegImageだと、壊れたjpegファイルをLoadFromFileでロードしても 例外を生成してくれないみたいです。 ネットのあちこちで探してみたんですが、良さげなものがみつかりません。 有識者の皆様、どうかお助けください。
784 :
デフォルトの名無しさん :2006/11/30(木) 21:03:53
教えて下さい。 ラベルに表示させる文字を点滅させたいのですが、どのようにすればいいでしょうか? ご存知の方がいらっしゃったら教えて下さい。よろしくお願いします。
>
>>777 大きなお世話だが
処理上同じでも
not 関数だと
関数のオーバーロードや他人がコード見たときに
ぱっと見でBoolean型のFalse値だとわからないから
関数 = falseがお勧め
>>785 俺は逆。
Get〜でBooleanだと分かるような名前にして、= True とかは使わない。
これはプロパティだとよくわかる話で、
if field.IsNull = False then
より
if not field.IsNull then
のほうが分かりやすいと思う。
788 :
783 :2006/11/30(木) 22:25:42
>>786 さん
ありがとうございます。
今、imgctl.dllを入手して評価しているところです。
imgctl.dll内の、JPGtoDIBという関数が、
jpegファイルを読み込んでDIBデータを作成してハンドルを返すようなので、
これを使用しようとしています。
もう少しだけ、ご支援ください。
delphi上で、imgctl.dllを使用したサンプルコードは
どこかにないでしょうか?
検索キーワード「imgctl delphi」で調べてみたのですが、
なかなか応用できそうなサンプルコードが見つかりません。
よろしくおねがいします。
imgctl.dllはそう難しく無いと思うけど 付属のpasファイルをusesして、あとは、imgctl.txtをよく読むべし。 エラー関連とか。
>>785 if not (function) then
でも判りにくいか?
792 :
デフォルトの名無しさん :2006/12/01(金) 09:36:07
BDS2006でdelphi win32を使って開発してるんですが、 メインスレッド以外のスレッドでブレークポイントを設定してデバッグ やってるとIDEがうんともすんとも言わなくなる時無いですか。 最悪PCのリセット。 BDS2006はSP2,Hotfix9を当ててる状態です。
それは BDS スレへどうぞ
マルチスレッドアプリのデバッグをXP上でやってIDEが死ぬのは MSIMEを使ってるのが原因だったはず。Visual Studioでも起こるらしいし
D7付属のQuickReportでプレビューで印刷ボタンを押すとプリンタ設定ダイアログがでてページ数とか 設定してから印刷できるようにしたいんですがどうすればいいでしょうか。 デフォルトだとすぐに印刷が始まってうっかり大量印刷してしまうことがあるので。
>>773 できました!!!
ありがとうございました!
自分の書いたソースが「基本的」には
間違っていなかったんですね。
他のページを見ても書いてあるのですが、
Bitmapの扱いには注意が必要なようですね。
後学のために質問なのですが、
描画ツールのように、
いくつかのプロシージャ(MouseDown・UP・Move等)
でひとつのImageなりPaintBoxなりのCanvasに描画し、
その描画したものを印刷する場合、
Bitmapに変換してから印刷するのが
常套手段と考えてよろしいのでしょうか?
それぞれの描画の際に同時にPrinter.Canvasに
描画する方法が具体的によく解らないので・・・
>>792 コンパネの「地域と言語のオプション」−「言語」−「テキストサービスと入力言語」−
「詳細」−「詳細設定」
「詳細なテキストサービスをオフにする」にチェックを入れる
799 :
デフォルトの名無しさん :2006/12/01(金) 15:32:41
以前、SetLength で1つずつ要素数を増やしていくと…と言う話題がありました。
サマリは
>>720 ふと思ったのですが StringGrid の RowCount や TStringList なども同様の
配慮をしないといけないものなのでしょうか。
TStringListやTListは割とましな実装がされてたはず。 もちろん、自分でCapacityをいじって最適化するのはありだろうけどさ。
801 :
デフォルトの名無しさん :2006/12/01(金) 16:20:12
>>795 mp3plyr.pas の const のところに、
SListIndexError = 'リストのインデックスが範囲を超えています (%d)';
を付け足すとか。
>>799 TStringListやTListは1ずつ増やすときも内部では4とか8とか16ずつ増えるんだったと思う
だからそれほど気にすることはないよ
803 :
デフォルトの名無しさん :2006/12/01(金) 18:56:02
>>798 ありがとう御座います。
試してみます。
「詳細なテキストサービスをオフにする」でぐぐったら出るわ出るわ。
勉強になりました。
804 :
デフォルトの名無しさん :2006/12/01(金) 19:52:58
>>802 ソースのGrowみたら、そうですな。
ただし、そのGrowが呼ばれるのは、AddとかExpandやら一部だけなので注意だな。
Countとか直代入は、考慮されない?ようだ(そりゃそうか)
>>796 QuickRep1.PrinterSetupメソッドを呼び出してダイアログボックスを表示。
>>805 それ反映されないよ。
常にA4。というか、グローバルなプリンタの設定に依存する。
807 :
783 :2006/12/01(金) 20:14:19
>>786 >>789 まだ、完全に問題解決したわけではありませんが、
いろいろやってみます。
ありがとうございました!
>>799 TStringListは他の人も書いているとおり特に意識しなくていいけど、
TStringGridはあらかじめ行列の設定を絶対にすべき。
行列のサイズが大きければ、処理速度が雲泥の差になる。
別に特に TStringGrid に限らず、自分でなんかの領域を設定する必要があるときは だいたい同じような状況になるわな。
絶対領域
相対領域
聖少女領域
マルチスレッドアプリケーションを作る場合 メインスレッドが持ってる変数に別スレッドから変更を加える時はsynchronizeした方がいいんですか?
>>808 あ、ありがとうっ!
滅茶苦茶助かりました。
逆に、メインスレッドが持ってる情報を、別のスレッドから参照する場合は、何か気をつけることありますか。 それともこういう設計自体間違ってますか。
>817 正直、良くない。 基本的にスレッドで処理したデータはそのスレッドの外に出さない。 他のスレッドから処理したデータにアクセスするには、 スレッドオブジェクトに作ったプロパティやメソッドを使う。 またイベント型プロパティを作れば状態変化をスマートに通知できる。
shared: record foo: Integer; bar: String; ... end; なんて情報受け渡しレコードでも作ってスレッド動作中は他からぜったにに触らない という「暗黙の了解」をきっちり守れるなら同期不要とか釣ってみるテスト
shared: record
821 :
815 :2006/12/02(土) 10:23:02
Delphi 6 Personal なんですが、 OS を 2k→XP に変更すると、使用許諾証も新規に取得しないと駄目でしょうか? また、登録場所は何処でしょうか? DelWiki さんの所のリンクは切れているみたいで、 英語の公式サイトを探してみたんですが、見当たらないです orz
TButtonを押下された状態にするには?
マウスでぐぐーっとこう
分かりませんwww
Down:=true みたいな事をしたそうな雰囲気。
>>822 ボタンがクリックされた時のイベントが
OnClick
マウスでボタンを押しつづけてる時のイベントが
OnMouseDown
TButton じゃできないだろ
多重起動を防止しつつ後から起動されたプロセスの引数を 先に起動されたアプリに転送するのってどうやりますか?
プロセス間通信でやる
831 :
822 :2006/12/02(土) 12:05:32
>>826 まあそういうことです
ずっと凹んだ押された状態にしたいわけです
TCheckBoxのStateみたいにプロパティで指定できないもんなんですかね
あきらめてTCheckBox使うことにしよ
TSpeedButtonなら簡単にできたような
>>829 WM_COPYDATAで送る
WM_SETTEXTで送る
メモリマップドファイルで送る
こんなとこじゃね?
834 :
822 :2006/12/02(土) 12:17:29
>>832 あーなるほど
でもXPManifest適用されないからまあいいや
どうもでした
835 :
デフォルトの名無しさん :2006/12/02(土) 13:07:37
いちおう言っとくと、DDEはVistaでは廃止されるからな。
837 :
デフォルトの名無しさん :2006/12/02(土) 14:24:52
>831 CheckBoxのスタイルににBS_PUSHLIKEを追加する。でも > ずっと凹んだ押された状態にしたいわけです ってのは本来はCheckBoxが正しいのでは? >836 一部は残るらしいが。でもDDEはもはやレガシーだしな。 廃止のソースはどこだったっけな?ここ数日で見かけた話だったんだけど。
Win32APIスレでみかけたきがする
841 :
799 :2006/12/02(土) 19:54:30
回答ありがとうございました。あまり心配する必要は無いようですね。 ただ、StringGrid(に限らず)で大きなデータを扱う場合は注意が必要 というわけですね。性能でトラブったときって結構無茶苦茶あせるので このようなTipsはありがたいです。
842 :
836 :2006/12/02(土) 21:09:03
ゴメ。よくよく思い出してみるとおれもWin32APIスレで見ただけな気がする。 ソース何処だ。
843 :
839 :2006/12/02(土) 21:51:21
844 :
デフォルトの名無しさん :2006/12/03(日) 00:10:56
なるほど・・・ 公式発表とかじゃなくて、実際に試したら使えなかったということか
AnsiPos();について質問です。 名前,住所,電話番号,雑記 名前,住所,電話番号,雑記 名前,住所,電話番号,雑記 名前,住所,電話番号,雑記 というテキストファイルを1行ずつ読み込んで レコード型に格納しようとしています レコード.名前 := copy(string,1,AnsiPos(',',string)-1); Delete(string,1,AnsiPos(',',string)); レコード.住所 := という処理を数千回、数万回繰り返す場合は end := AnsiPos(',',string); レコード.名前 := copy(string,1,end-1); Delete(string,1,end); とした方がメモリや処理速度的には良いのでしょうか? 教えて下さい
速度気にするならAnsiPos使わずに1文字目から自前でスキャンしていこうぜ
INIにすれば?
848 :
845 :2006/12/03(日) 14:35:56
>自前でスキャンしていこうぜ どうやれば良いのでしょうか? もう少し詳しく教えて下さいm(_ _)m >INIにすれば? INIとは何ですか ググッたけどわからんかったorz 使用ヴァージョンは delphi6 personalです
>>845 AnsiPos、Copy、DeleteといったString型を扱う関数は遅い
それらの組み合わせを変えたところで大した違いはない
速度やメモリが気になるならポインタを使う
>INIとは何ですか
>ググッたけどわからんかったorz
iniファイル形式として扱うようにして
TRegIniクラスを使うってことかな?
>名前,住所,電話番号,雑記
これってよーするにCSVファイル形式でしょ?
TStringList.CommaTextにブチこんでそれで解決
850 :
デフォルトの名無しさん :2006/12/03(日) 17:17:52
今まで長い間,Delphiを使ってきて、データベースアプリを作ったことがなかったのですが、 作ることになりそうです。 データーベースエンジンはどれを使うのがよいのでしょうか?
規模は? 個人用?2〜3人?それ以上?
WideUpperCaseてCharUpperBuffW呼び出してるけど、 9x系はMicrosoft Layer for Unicode (MSLU)使わないと 機能しないんじゃないの?
853 :
850 :2006/12/03(日) 17:36:59
ほぼ、個人用です。 データもテキストばかりで、むしろデータベースを使うべきでないのかもしれませんが・・・ お手軽に使えるのがよいです。 と、聞いてばかりもあれなんで、自分でも調べてみます。
854 :
850 :2006/12/03(日) 17:52:39
>>853 DBにしない方がいいんじゃね?
XMLとかで十分な希ガス
データベース未経験→今度使う タイムリーだな。オレもそう。「本部システム」だって。 キーワードだけ言われてもなあ… これって大変なのかな…
アクティブじゃないウィンドウにkeybd_eventでキーを送ることはできますか?
sendmessage使え
いままで、自分のウインドウにキー押下のメッセージを伝えるときもSendMessage使ってましたが、 keybd_eventというものもあるんですね。こっちを使った方がよいですか。
フォーカスのあるウィンドウにしか送れない。SendMessage() でいいならそっちを使え
>853 TClientDataSetというコンポーネントが有るので、それを調べてみてください。 ファイルベースのDBです。SQLは使えませんので注意。
TBitButtonのGlyphを:=で変えたいんですが
そのためには自前でTBitmapオブジェクトを用意する必要があります。 なおGlyphプロパティはTBitmap型なので、各種メソッド使って画像を変えることも可能です。
>>852 9x系ならAnsiUpperCaseが呼び出されるじゃないか。
海外の雑誌DelphiMagazineが休刊になるんだって????? Delphiが消えていくという流れは止められないみたいですね。
日本でCマガが休刊したけど、Cは消えたのか?
もうCなんて使ってる奴いないだろwwww
組み込みとかだとCはまだまだ現役だよ
>>838 亀レスだけど、本当にありがとう。
ちゃんと認証されました。
>>867 日本でも.NETを扱っているWindows Developer Magazineが休刊になるんだって?????
.NETが消えていくという流れは止められないみたいですね。
Delphi専門の人って少ないんじゃないのか? 俺はC#とかけもち。
>>845 オリジナルのAnsiPosは非常に遅いので以下のコードをお試しあれ!
//AnsiStrPos の代替関数(↓の下部関数)
function AnsiStrPosEx(StrStart, StrEnd, SubStrStart, SubStrEnd: PChar): PChar;
var
p, ps: PChar;
SL: Integer;
begin
p := StrStart;
SL := SubStrEnd-SubStrStart;
Result := Nil;
while p < StrEnd do
begin
ps := SubStrStart;
while ps^ = p^ do // 012345678901234567
begin // _____ABC____ABC__#0
Inc(p); Inc(ps); // |--->p
if ps^ = #0 then
begin
Dec(p,SL);
Result := p;
Exit;
end;
end;
if p^ in [#$81..#$9F, #$E0..#$FC] then Inc(p);
Inc(p);
end;
Result := Nil;
end;
//AnsiPos の代替関数 function AnsiPosEx(const Findstr, S: string): Integer; var p, e, ps, pe: PChar; begin Result := 0; p := PChar(S); e := p + Length(S); ps := PChar(Findstr); pe := ps + Length(FindStr); p := AnsiStrPosEx(p, e, ps, pe); if p <> nil then Result := Integer(p) - Integer(PChar(S)) + 1; end;
試したけどたいしたかわらなかったよ
877 :
845 :2006/12/04(月) 11:54:23
Vistaになったら開発言語は何が主流になるのかな。 Delphiしかできない俺はどうしたらいいんだろう。
delphiでも全然問題無く開発は続けられるよ。 新しいライブラリにはなかなか対応してくれないけどな。
>>876 >>874-875 を使ってStringReplace(とても遅い!)のような文字列置換関数を作成して、たとえば
windows.pas の function を何か適当なものに置換して測定してみればかなり差があると思うけど。
882 :
デフォルトの名無しさん :2006/12/04(月) 16:58:28
プログラム知識はほとんどないのですが、
http://nagoya.cool.ne.jp/palmtop/Magic.html このソフトはパソコンの何をいじって音声を変えているのでしょうか。
パソコンの音声出力が数年前からおかしくなっていて諦めていたのですが、
このソフトを起動時に、たまにすごくクリアに聞こえるようになるのです。
10行ほどのプログラムと書かれているのですが・・・。
どなたかご教授いただければ幸いです。m(__)m
>>883 失礼しました。
音量を変えてるだけ・・・ですか。
最適スレを探して詳しく質問してみます。
ありがとうございました。
TmemIniFileで A=abcdefg,123456 とあったときに、カンマの前とあとを別々に入れるにはどうしたらいいですか?
どこに入れるの?
>>886 A[i]:=ini.ReadInteger('設定','A,-1);
と、Aの配列に別々に入れようと思ったのです。
A[0]=abcdefg
A[1]=123456
となるようにです。
ReadStringで読んで自分でバラせ
>>879 そうですか、D7でも大丈夫かな。
>>881 スタンドアロン〜クライアント数台の小規模なDBアプリです。今のところFireBird使ってます。
>>866 あー、TurboDelのソースはそうなってるね
D6だと問答無用でCharUpperBuffWのみになってる。
API呼び出してるとこ全部確認しなくちゃだわ。。。
>>874-875 BM法やSunday'sQC法使うとかループのあんロールするとか
FastCodeのPosExをMB対応に改造するとかすれば、
asm使わなくてもその4〜6倍以上速くなるよ
× Sunday'sQC ○ Sunday'sQS ...orz
>>746 もってきて入れ替えようとしたらVistaの強固なセキュリティの前に何もできませんでした
権限がtrustedinstallerじゃないとシステムフォルダは弄れないらしい
上書きコピーダメだったよ……
どこか他の場所にコピーして、関連付けを変更したらどうよ。
C++のテンプレートみたいなものある?
no
$INCLUDE でそれっぽい事は出来たかも。 お勧めはしない。 >? そもそも , 探すのに高速AnsiPos系関数があっても仕方がないよ。
車輪の再開発しなくても外国のVCL高速化プロジェクトみたいのがあってそこで Posはすでにあったような・・・・・
>>888 遅レスですみません。
みんなそういう風にやってるのでしょうか??
>>899 普通は1つのキーに1つの値を入れる
TStringListでも作ってCommaTextにでも放り込めば楽かもしれない
どうせ負数は扱わないと分かっていても、符号付きの型を使った方がいいのですか? TStringsのCountなどはIntegerなので・・・ for i := 0 to myStringList.Count - 1 do こういう書き方は頻繁に使うと思いますが、 もしCountがCardinalで 0 だったら、ここでオーバーフローになってしまうので、敢えてIntegerなのかなぁと。
>>898 日本語がちゃんと通るやつって今はあるの?
それが見つからなかったから一度自分で作ったことがあるんだけど、4,5年前.
>>894 HLPをダブルクリックで開くことは出来ますが
F1で起動したり、メニューからヘルプ→Delphiヘルプで起動することが出来ません
F1でヘルプがみたいです……orz
早ければ12月中にMSから配布されるだろうから、待て。
>>901 どこぞのDelphi本には、cardinalを使わず、範囲限定のinteger型を作ると便利と書いてあった。
type
IntNatural=0..MaxInt;
で、cardinalより何が有利かというと、integer型の変数と四則演算とかした場合、int64に拡張されないからパフォーマンスで有利と言うこと。
906 :
デフォルトの名無しさん :2006/12/05(火) 21:17:33
Delphi用の3D用のVectorやら、Matrixのライブラリを探しています。 どこかにあったのですが、忘れてしまいました。
そういえばInt64のunsignedってあったっけ
>>906 Quadruple Dのs_mathpackとか
>>907 ない。
ちなむと、Turbo C++にはあるけど、色々不安定なのであんまり使わない方がいい。
D3DXなんてどうだろう?
>>898 ,902
FastCodeの事なら今でも(多分これからも)マルチバイト非対応
ロシアあたり探せば対応のがあるだろうけどw
なんで露助はDelphi好きなんだ?
913 :
906 :2006/12/05(火) 23:24:05
GLSceneの中にVectorGeometry.pasってのがありました。 これです。 これの元になったやつってどこで配布しているんだろ・・・ っていうか、GLScene見てたけど、これスゲーわwww これでなんか作ってみようw
914 :
デフォルトの名無しさん :2006/12/06(水) 01:05:35
>>914 日本語情報が全然無いので茨の道ではあるな
英語できないプログラマなんているわけないだろ
ん?誰か呼んでる気が?
>>918 よくそのレスからそれだけ議論を広げられるなw
>>912 調べ物をすると露仏中のサイトがかなり多いんだよな。
他の開発言語がどうなんだかよく知らないけど。
921 :
デフォルトの名無しさん :2006/12/06(水) 12:43:45
>なんで露助はDelphi好きなんだ? 教育機関でPascal教えてそうじゃない?
M$謹製じゃないとだめ、という日本が異常。
英語圏のプログラマはUNICODEを扱うプログラムが下手だ。
日本圏のプログラマはUNICODEを扱うプログラムが上手い? ぜんぜん。
英語圏じゃないプログラマなんているの?
>>926 おまいさんは英語圏なのかそれともプログラマじゃないのか?
928 :
906 :2006/12/06(水) 22:10:56
>>920 俺も最近そう思ったw
露仏中のサイトで、Delphiが結構多い。見れなくてウザイw
反米反MSなのか?
>>797 遅レスですいません.
画面に表示されているとおりに印刷したいのでしたら(『ハードコピー』と呼ばれているものです)
内部で持つデータはビットマップでよいのではないかと思います.
また一般的なアプリケーションではプリンタの選択はユーザーが印刷を指示する直前にできます.
プリンタやプリンタの設定が変われば解像度も印刷可能範囲も変わってしまいますので
プリンタの設定を決めてからでないと印刷できません.
そのため画面への描画と同時にPrinter.Canvasに描画するということはないと思います.
UNICODEを扱うプログラムが上手いのは中国人。たぶん。
Delphi6 personalでプロジェクトを開くときに カレントフォルダがBinになってしまうけど設定で他フォルダに変えられないの?
↑カレントディレクトリの間違い
>>933 D6ならショートカットアイコンの作業フォルダを変更するとよろし。
>>935 すげぇ できたよ
こんなんよく知ってるね。って俺が知らんだけだな
ありがとう
937 :
デフォルトの名無しさん :2006/12/07(木) 12:42:14
ところでTurboDelphiエクスプローラ版で作ったプログラムはWebとかで公開してもいいの? 過去のアカデミック版はフリーウェアでも公開不可だったと思うんだけど、どうなんだろう。 license.txt読んでみたけどよくわからん。
>>937 TurboDelphi無料版の場合は、商用すら可能。
で、微妙なのは、商用不許可なD6無料版で作ったソースをTurboDelphiでビルドしただけのものをD6のライセンスに従う必要があるかどうかだな。
バレナイ
940 :
937 :2006/12/07(木) 13:12:08
>>938 おぉ、そうなんだ。
ボーランドも偶には気前いいなあ、サンクスコ
無料版では商用利用も可能なのに、 金出して買ったアカデミック版ではフリーウェアですら公開不可という理不尽さ。
まあ、Turboの無料版は出来ないことが結構多いからなあ
つか、アップデートかけたら、フリーカーソル解除すらできなくなるというのが終わってる。
方法がないわけじゃないけど。
買えば皆幸せ。
delphiのソースをhtmlにしてくれるようなアプリってある? 自動で色付けしてくれるようなやつがいいんだけど。 ぐぐって見たけどロシア語のしかみつかんなかった。
TurboのPro版とD7のEnt版ってどっちが高機能?
2006のバグがすっかり取れた2007が出るなら買ってもいい。
>>947 GExperts にそんな機能があったような。
CSS が古いけど。
>>949 アカデミック買っとけ。8千円だぞ。
どうせフリーソフトも商用ソフトも作らないんだろ。
952 :
デフォルトの名無しさん :2006/12/07(木) 15:28:01
>>940 > 過去のアカデミック版はフリーウェアでも公開不可
>>941 > 金出して買ったアカデミック版ではフリーウェアですら公開不可という理不尽さ。
アンチ必死すぎ
>>952 これはマジ話。ウソだと思うならボーランドにメールだしてみろ
954 :
937 :2006/12/07(木) 16:39:37
なぜかアンチ認定された(´;ω;)
俺、2006のアカデミック買って、少し後悔してる。 買ってlicense.txt読むまで、「アカデミック版で作られた一切の物は、教育用途以外では配布不可」って知らなかった。 今更非アカデミック版買うのも微妙なので、新しいバージョンを出るのを待ってる。購入資金も貯めてる。 BDS2006自体は、そこそこ満足しているんだがなぁ・・・
アカデミーパックの値段(割引率)みれば ライセンス制限はしょうがないと思うよ ただpersonal版とか体験版とか 無料版があるのになぜアカデミックがあるのか 無料版で許されてる配布がアカデミックではダメなのかという別の問題もある 単に無料版出す時に アカデミック版のことを忘れていただけという気もするがなw
値段に釣られてアカデミック買う奴なんているんだなw
貧乏学生なので、アカデミック版しか買えないんです・・・ 今日の夕飯は米と味噌汁だけ。ばあちゃん病院で待ってるから、そろそろ看に行かないと・・・
delphiを作る開発ソフトって何ですか? うん delphiはdelphiで作ってるんだ じゃあ そのdelphiは何から作ってるんですか? delphiを作るdelphiもdelphiから作ってるんだよ じゃあ そのdelphを作るdelphiのdelphiは何から作ってるんですか? delphiを作るdelphiのdelphiもdelphiから作ってるんだよ じゃあ そのdelphを作るdelphiのdelphiのdelphiは何から作ってるんですか? delphiを作るdelphiのdelphiのdelphiもdelphiから作ってるんだよ じゃあ!・・・・・・・ (以下エンドレスラヴ)
じゃあオマイがdelphi作れ(・∀・)9m
>>958 学生さんがDelphiをやらなけれいいだけの話だと思うよ。
あと、俺も学生んときはスパゲティばっかり作って食ってたなあ。
>>958 貧乏人はMS謹製ソフトでも使ってオナニーしてろよwwww
Delphiは選ばれたセレブリティのための開発環境なんだよ。
Borlandじゃないとダメなんです・・・小さい頃、曾祖母がそう言ってました・・・
勉強目的なら無料版で充分 楽して金取れるソフト作りたいならちゃんと金払え 本当に金をかけずに金が欲しいなら無料版で作れよ
965 :
デフォルトの名無しさん :2006/12/07(木) 19:49:54
>>953 うそつけ!
俺が買ったときは、そんな制限なかったぞ。
966 :
デフォルトの名無しさん :2006/12/07(木) 19:50:47
・・・って、
>>956 みたら、マジかよ。
いつのまにそんなクソライセンスになったんだ?
ナンセンスじゃないライセンスじゃなかったのかよfaf!!
>>966 Del7あたりからクソライセンス化していった。
Delphi本体もライセンスに合わせてクソ化していってる気がする
最近はボーランドのナンセンスでないライセンスとかいうギャグは ライセンス条項に書いてないよな。ナンセンスになったからか
本当に素人なんですけど、ターボと普通のDelphi6の違いはなんですか?
なまえとバグの量、ヘルプの質。
あと重さ
フリーやシェアのコンポをばかすかインストールしたり自分で カスタマイズしてるんですが、今のPCが壊れたら開発環境構築しなおすのに 無茶苦茶手間かかりそうです。みなさんどんな管理をされていますか?
レジストリを保存すれば環境の9割は復元可能。 コンポはそれを使うアプリ毎にパッケージも作った方が良いよ。
開発環境の話だろ。外部コンポはなるたけ使わない、っていうのが最強。
yahoo なんかでは、無料でストレージスペースを借りられる。コンポのソースを そこに入れておけば、いつでも復元出来る
>>973 レジストリとフォルダをユーティリティでバックアップ。
+PC全体をイメージング。
978 :
970 :2006/12/07(木) 23:17:08
>>971-972 基本的な機能に大きな違いはないと言うことですか?
新しいTarboのほうがむしろ機能が追加されて、
代わりに不安定で重くヘルプの出来が悪いという理解でいいのでしょうか?
>>978 まずはIDE と作成するEXE を分けて考えましょう。
あとはお前さんのPCの性能ね。
ここでウダウダ言っている連中はPentium III + 128MB + WIN98 とか平気で使ってるから。
981 :
970 :2006/12/08(金) 00:23:40
本当に初心者なのでIDEと言われてもピンと来ないのですが、 athlonXP2500、RAM650M WindowsXPSP2です。 昔見よう見まねでVBがインストールされたマシンを使って 4側演算が出来る電卓を作った程度です。
982 :
970 :2006/12/08(金) 00:28:25
申し訳ありません IDEが何か理解してから来いというのであれば、スルーしていただいて結構です。
D6 使える環境なら D6 つかっとけ。
IDEが分からないくらいの超初心者ならヘルプがちゃんと見られるD6使うべし。
985 :
970 :2006/12/08(金) 00:34:37
Delphi7で開発していたプロジェクトをTurboDelphiに移し、やっぱ、Delphi7で 開発しようと思って、戻す場合の注意点をお教えください。 Delphi7以降に追加されたプロパティをうっかりいじって、フォームファイルに記録された場合、 Delphi7でコンパイルできなくなる ぐらいしか思いつきませんが、他にもあるのでしょうか?? プロジェクトファイルの拡張子が変わってXML形式になってると思いますが、これはDelphi7で作られた dprのファイルを使えば、問題ない?? 後、Turboでエディタが色々な形式に対応してる(Unicodeなど)と思いますが、 Delphi7のプロジェクトをTurboで読みこむと勝手に変換されるってことはないですかね?? プロフェッショナルの方お願いします。
d7をアンインストールしてなければそのまま使えるでしょ
dcu は全部削除した方がいいと思う。
>>986 バージョン管理ツールを使え。んで戻せ。
それは後知恵w
986です。
なるべく、TurboDelphi上で更新した部分は消したくないのです。
>>988 了解です。dcuは全部消します。
992 :
デフォルトの名無しさん :2006/12/08(金) 13:45:57
1〜5までの乱数を5回生成して、一度その数字が生成された場合は 次の生成では、ほかの数字を生成させるようにさせたいんですがどうすればいいですか? たとえば、12345と表示されるときもあれば、25314という時もあるみたいなふうにしたいです
993 :
デフォルトの名無しさん :2006/12/08(金) 13:46:56
Delphi2005からVBのDLLをクラスとして使いたいのですが、 どうすればいいのでしょうか?
>>992 > 乱数生成関数を初期化するには,Randomize を呼び出すか,RandSeed 変数に値を割り当ててください。
> これらを行わないと,アプリケーションを起動するたびに同一の順番で数値が出現する乱数列となります。
だそうです。
一般的にseedが同じならば生成される乱数列も同じになります。
995 :
デフォルトの名無しさん :2006/12/08(金) 14:07:22
>>994 randomizeは知ってるんですが、randomizeをしても5が2回現れたり、1が一回も現れなかったりで
初期化するとはまた違うと思うんですが…
55312とかだとダメなんです
>>992 逆に考えるんだ
予め配列に入れておいてバラバラにソートすれば
同じことだ
procedure TForm1.Button1Click(Sender: TObject);
var
aryData: array[0..4] of Integer;
i, iShuffleTimes, iTemp1, iTemp2, iSwap : Integer;
begin
for i := 0 to 4 do aryData[i] := i;
for iShuffleTimes := 1 to 5 do
begin
iTemp1 := Random(High(aryData) + 1);
Temp2 := Random(High(aryData) + 1);
Swap := aryData[iTemp2];
aryData[iTemp1] := aryData[iTemp2];
aryData[iTemp2] := iSwap;
end;
end;
>>993 意味がよく分からない
VBのDLL内に存在するクラスを
Delphiで使用するってことか?
998 :
デフォルトの名無しさん :2006/12/08(金) 14:42:24
>>996 やっぱりそういう方法のほうが一般的なんでしょうね
random関数を使ってのやりかたはあきらめます
ありがとうございました
1000ゲト
_, ._ パァーン
( ‘д‘)
⊂彡☆))Д´) ←
>>1001
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。