2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

くだすれDelphi(超初心者用)その37

1 :デフォルトの名無しさん:2006/11/02(木) 18:03:49
このスレッドはBorland(ボーランド)のDelphi(デルファイ)について、
他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を
勇気を持って書き込むスレッドです。
Delphi使いが優しくコメントを返しますが
お礼はDelphiの布教と初心者の救済をお願いします。

<前スレ>
くだすれDelphi(超初心者用)その36
http://pc8.2ch.net/test/read.cgi/tech/1159485364/

<過去スレ>
http://delwiki.info/?Delphi+%B4%D8%CF%A2%A4%CE%B2%E1%B5%EE%A5%B9%A5%EC%A5%C3%A5%C9 (上のDelWiki避難所内)
または>>2-10あたりにある過去スレURL

<関連スレ>
※Delphiに関係してる雑談および関係してない雑談については以下でどうぞ
バカボンのDelphi不買・販促・その他談話室その29
http://pc8.2ch.net/test/read.cgi/tech/1153227982/

<その他>
BorlandHomePage
http://www.borland.com/jp/
DelWiki避難所
http://delwiki.info/
BDN(BorlandDeveloperNetwork)
http://bdn.borland.com/jp/delphi

過去スレは>>2-10あたりのどこかに

2 :デフォルトの名無しさん:2006/11/02(木) 18:06:07
>>1の続き:
<過去スレ>
01:http://pc5.2ch.net/tech/kako/1051/10518/1051882835.html
02:http://pc5.2ch.net/tech/kako/1053/10537/1053757982.html
03:http://pc5.2ch.net/tech/kako/1055/10559/1055986736.html
04:http://pc5.2ch.net/tech/kako/1058/10588/1058834815.html
05:http://pc5.2ch.net/tech/kako/1061/10610/1061090908.html
06:http://pc5.2ch.net/tech/kako/1063/10632/1063202727.html
07:http://pc5.2ch.net/tech/kako/1065/10651/1065195699.html
08:http://pc5.2ch.net/tech/kako/1068/10682/1068201045.html
09:http://pc5.2ch.net/test/read.cgi/tech/1071294733/
10:http://pc5.2ch.net/test/read.cgi/tech/1074523803/
11:http://pc5.2ch.net/test/read.cgi/tech/1076609666/
12:http://pc5.2ch.net/test/read.cgi/tech/1076610073/
13:http://pc5.2ch.net/test/read.cgi/tech/1081003641/
14:http://pc5.2ch.net/test/read.cgi/tech/1085239007/
----(続く)----

3 :デフォルトの名無しさん:2006/11/02(木) 18:06:57
>>2の続き:
15:http://pc5.2ch.net/test/read.cgi/tech/1087823906/
16:http://pc5.2ch.net/test/read.cgi/tech/1089779142/
17:http://pc5.2ch.net/test/read.cgi/tech/1091671391/
18:http://pc5.2ch.net/test/read.cgi/tech/1093996761/
19:http://pc5.2ch.net/test/read.cgi/tech/1097454588/
20:http://pc5.2ch.net/test/read.cgi/tech/1101530485/
21:http://pc5.2ch.net/test/read.cgi/tech/1104511938/
22:http://pc5.2ch.net/test/read.cgi/tech/1107332482/
23:http://pc8.2ch.net/test/read.cgi/tech/1110470895/
24:http://pc8.2ch.net/test/read.cgi/tech/1115581376/
25:http://pc8.2ch.net/test/read.cgi/tech/1119008091/
26:http://pc8.2ch.net/test/read.cgi/tech/1121249711/
27:http://pc8.2ch.net/test/read.cgi/tech/1126590039/
28:http://pc8.2ch.net/test/read.cgi/tech/1131168199/
----(続く)----

4 :デフォルトの名無しさん:2006/11/02(木) 18:07:40
>>3の続き:
29:http://pc8.2ch.net/test/read.cgi/tech/1135866929/
30:http://pc8.2ch.net/test/read.cgi/tech/1138370150/
31:http://pc8.2ch.net/test/read.cgi/tech/1142594051/
32:http://pc8.2ch.net/test/read.cgi/tech/1145267913/
33:http://pc8.2ch.net/test/read.cgi/tech/1148378877/
34:http://pc8.2ch.net/test/read.cgi/tech/1151143010/
35:http://pc8.2ch.net/test/read.cgi/tech/1155263138/
36:http://pc8.2ch.net/test/read.cgi/tech/1159485364/

<関連?スレ>
Delphi初心者のための寺子屋
http://pc8.2ch.net/test/read.cgi/tech/1132756268/
【Delphi】 Indyコンポーネント 【C++Builder】
http://pc8.2ch.net/test/read.cgi/tech/1093654251/
【Delphi】 ゲームつくるぞ(゚Д゚)ゴルァ 2【Delphi】 (※ゲーム制作技術板)
http://pc8.2ch.net/test/read.cgi/gamedev/1097836469/

※ほかにもスレッドあります。

5 :デフォルトの名無しさん:2006/11/02(木) 18:40:31
駄スレ立てんな、屑!!!

6 :デフォルトの名無しさん:2006/11/02(木) 21:17:50
これがツンツンしてる乙ってやつか

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;

どのようにすればよいでしょうか。よろしくお願いします。


8 :デフォルトの名無しさん:2006/11/02(木) 23:03:36
多分、Form1.Image1〜 とかそんな感じ

9 :デフォルトの名無しさん:2006/11/02(木) 23:14:49
>>7

for i := 0 to Form1.ControlCount -1 do
begin
c := Form1.Controls[i];
c.Name
end;


10 :デフォルトの名無しさん:2006/11/02(木) 23:19:36
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 ::2006/11/02(木) 23:25:26
>>8-10 ありがとうございます!

>>10さんの方法を試したら上手くいきました。

12 :9:2006/11/02(木) 23:26:29
これでcastして実行の方が綺麗だな
var
name:string;
c:TControl;

name := ' Image'+IntToStr(num);
c:=Form1.FindChildControl(name);


13 ::2006/11/02(木) 23:42:13
>>12(9)さん
ありがとうございます。
たしかに、予めif文でイメージの数だけ定義をする必要がなくなりますね。
そちらで行かせて頂きます!

14 ::2006/11/02(木) 23:54:11
たびたびすみません。。
>>12の c をどのように使うのでしょうか…

15 :名無し募集中。。。:2006/11/02(木) 23:58:16
Turbo DelphiのVCL一覧が載ってるところ知りませんか?
公式サイトで見ても全部書いてなくて…

16 :デフォルトの名無しさん:2006/11/03(金) 00:04:36
>>14
TImage にキャスト

17 :デフォルトの名無しさん:2006/11/03(金) 00:04:43
>>14
name := ' Image'+IntToStr(num);
c := Form1.FindChildControl(name);
TImage(c).Canvas.TextOut(100,100,'abc');
これで出来ん?

18 :デフォルトの名無しさん:2006/11/03(金) 00:07:34
コード上でボタンを生成して、そのボタンの全てのプロパティを他のボタン(フォーム上に設置されてます)と同じにしたいです。
NewButtonを生成した後に
NewButton.Assign(Button1);
としたのですが、
EConvertError クラスの例外を生成しました。
'TButton を TButton に代入することはできません'
とエラーになってしまいます。
どうすれば全てのプロパティをコピーできるのでしょうか?

NewButton := Button1;
だと意味が違ってきますよね?

19 ::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;


20 :デフォルトの名無しさん:2006/11/03(金) 00:26:48
>>18
コンポーネントの全てのプロパティはコピー出来ないよ
だって同じNameを持つコンポーネントが作られちゃうでしょ?
必要なプロパティを選んで代入する必要がある

>NewButton := Button1;
これをやるとNewButtonもButton1を指すことになる(NewButton == Button1じゃないことに注意)
Delphiのオブジェクトの実態はポインタとなる

21 :18:2006/11/03(金) 00:29:13
>>20
そうですか。
使うプロパティを1個ずつ代入するしかないのですか。(確かにNameがかぶっちゃいますね)
面倒だけどしょうがないですね。ありがとうございました。

22 :デフォルトの名無しさん:2006/11/03(金) 00:39:15
>>19
FindChildControlの結果はnil?

23 :デフォルトの名無しさん:2006/11/03(金) 00:44:08
>>20
すまん、FindControlはTImage引っかからないわ・・・
if文か>>9でControlとって来てになるね。

24 ::2006/11/03(金) 00:50:25
>>22
nilです。

25 :デフォルトの名無しさん:2006/11/03(金) 00:56:24
FindComponent だろ

26 :デフォルトの名無しさん:2006/11/03(金) 00:59:37
>>15
標準でついているコンポーネント
http://www.dragonsoftru.com/delphi_d7d2006.php

あとはよく分からんがIndy9 あたりかな。
Pro ならIntraWeb, RaveReports が付いてくる?

27 :デフォルトの名無しさん:2006/11/03(金) 01:02:13
>>25
すまぬ。言い訳できぬわ・・・

>>24
var
name : string;
c : TComponent;

name := 'Image'+IntToStr(num);
c := FindComponent(name);
TImage(c).Canvas.TextOut(10,10,'abc');


28 :デフォルトの名無しさん:2006/11/03(金) 01:36:21
>>18
Actionでやればいいじゃん。

29 :デフォルトの名無しさん:2006/11/03(金) 05:26:54
>>7
動かない原因として、
ifとwithを混ぜてるということもある。

30 :デフォルトの名無しさん:2006/11/03(金) 06:08:09
自アプリを抜けた場所でもマウスのポインタの表示を固定したいのですが
どのようにすればよいのでしょうか?

31 :ななしへたぐらま ◆XcB18Bks.Y :2006/11/03(金) 19:13:00
>>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枚以上に増えてもほとんどそのまま使えますし,
イメージコンポに違う描画処理を加えたい場合にも違う描画処理だけを書いたメソッドを追加するだけで済みます.

32 :ななしへたぐらま ◆XcB18Bks.Y :2006/11/03(金) 19:56:02
>>18
具体的に何がしたいかを書いた方がよろしいのでは?
もしボタンの見出しやOnClickイベントハンドラを同じにしたいということでしたら
>>28氏の仰るようにアクションオブジェクトを使います.


33 :デフォルトの名無しさん:2006/11/03(金) 20:44:02
よかったら>>30も答えてもらえませんか?


34 :デフォルトの名無しさん:2006/11/03(金) 22:24:32
Winキーを表示できるHotkeyコンポーネントてないすか?

35 :デフォルトの名無しさん:2006/11/03(金) 22:26:10
そんなアプリは迷惑だからなぁ・・・

36 :デフォルトの名無しさん:2006/11/03(金) 22:26:51
Win キーはホットキーにはできない

37 :18:2006/11/03(金) 22:27:04
>>32
どうも、18です。
具体的にやりたいことはボタン(などの一般的なコンポーネント)のコピーをコード上で作りたいのです。
Name以外の全てのプロパティ(+イベントハンドラ)が等しいもう1つのコンポーネントを作りたいです。
新しいコンポーネントをコード上で作成するのはできました。
全てのプロパティをコピーする命令文が1行でビシっと決まるのかと思い、Assignを使ったところエラーが出ました。
いまは必要なプロパティとOnClickなどのイベントハンドラをコピー元のボタンから新規作成したボタンへ代入して目的を達成してます。
(ちょっと面倒だし、コードがきたない。あとから必要なプロパティが増えた場合修正するのが大変そう。)
アクションオブジェクトはヘルプを見ましたが、具体的な使い方がわかりません。
イベントハンドラを共有化できそうですが、例えばCaptionなどのプロパティもActionを使ってコピーできるのですか?

38 :デフォルトの名無しさん:2006/11/03(金) 22:30:05
>>33
while True do
 Mouse.CursorPos := Point(0, 0);
でいいんでね?


39 :デフォルトの名無しさん:2006/11/03(金) 22:31:39
>>36
RegisterHotkeyはWinキー指定できるのよ

40 :ななしへたぐらま ◆XcB18Bks.Y :2006/11/03(金) 22:42:03
>>30,33
字面だけだと意味を特定できないのですが
もしマウスカーソルの移動範囲をアプリケーションのウィンドウの範囲に制限させたいということでしたら
ClipCursorというAPIで実現できるみたいですよ.


41 :デフォルトの名無しさん:2006/11/03(金) 22:45:51
>>40
ありがとうございます。
移動範囲を制限するのではなく、
マウスのカーソルの表示を固定したいのです。

たとえば自アプリの中のみの表示でしたら以下のソースで制御できます。
TForm内に記述。
Screen.Cursor := crCross;

しかし、このソースだと自アプリのフォームを抜けたときに
通常のマウスカーソルになってしまいます。

これを持続させたいのですが、よい方法が思いつかないのです。

42 :デフォルトの名無しさん:2006/11/03(金) 22:48:00
コントロールパネル → マウス → ポインタ

43 :デフォルトの名無しさん:2006/11/03(金) 22:48:39
>>42
そんな解決方法は求めていません。
真面目にお願いします。

44 :デフォルトの名無しさん:2006/11/03(金) 22:52:13
>>43
とても聞く人間の姿勢ではないよな。
少しは自分で調べてるのか?

45 :デフォルトの名無しさん:2006/11/03(金) 22:54:48
>>44
その回答で答えたあなたが、ふざけているからです。
姿勢がどうのこうの言われる筋合いはありません。

後、自分では調べています。
しかし解決しないから質問しているのです。

46 :デフォルトの名無しさん:2006/11/03(金) 22:57:03
>コントロールパネル → マウス → ポインタ

たまにはこういう冗談もいいんじゃねw
笑いのツボにははまらないけど。

47 :デフォルトの名無しさん:2006/11/03(金) 22:58:22
システムグローバルでポインタを指定するなんてそれくらいしか方法ないだろ

48 :デフォルトの名無しさん:2006/11/03(金) 23:02:03
>>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|   \    ソ

49 :デフォルトの名無しさん:2006/11/03(金) 23:02:05
>>47
つかそんなの誰も求めないからなw
そんなの欲しがるのはえらそうに質問できるゆとりだけだよw

50 :ミ,,゚Д゚彡 ◆A6VzDeLphI :2006/11/03(金) 23:11:50
>>37>>18さん

MemStream := TMemoryStream.Create;
try
MemStream.WriteComponent(Original);
Original.Free;
MemStream.Position := 0;
MemStream.ReadComponent(Self);

finally
MemStream.Free;
end;

ストリームにWriteComponentとReadComponent
で、書込読込すると、
たしか、Publishプロパティの属性は
コピーできるよ。



51 :デフォルトの名無しさん:2006/11/03(金) 23:26:07
>>37
ActionListを貼り付けて新しいアクションを作成。
CaptionとかHintとかイベントとかを設定。
NewButton1.Action := Action1;
でOk。

52 :18:2006/11/03(金) 23:28:14
>>50
MemoryStreamというのは使ったことが無いのでヘルプと格闘しながらがんばってみます。
コードまで示してくれて、ありがとうございました。

53 :デフォルトの名無しさん:2006/11/03(金) 23:28:18
>>45
他のアプリがアクティブな状態でカーソルだけ自アプリで制御したいの?
他のアプリもカーソル形状を設定しているのは理解できるよね?


54 :18:2006/11/03(金) 23:29:16
>>51
書き込んでる間に返事が。
教えてもらった方法で試行錯誤してみます。
ありがとうございます。

55 :デフォルトの名無しさん:2006/11/03(金) 23:31:48
>>53
ええ、理解できます。
それを何とかしたいのですが、何か方法はないものかと模索していました。
出来ないというのであれば、諦めたいと思います。

56 :デフォルトの名無しさん:2006/11/04(土) 01:31:30
成長するテキストファイルの内容をリアルタイムで追いかけたいです。
とりあえず、ある時点でのファイルの内容を取り出そうとしたのですが
AssignFile→Resetとした時点で書き込み禁止がセットされて、テキストファイルの成長が止まってしまいます。
使える関数名などを教えていただけないでしょうか。


57 :デフォルトの名無しさん:2006/11/04(土) 01:41:02
>>56
FileMode

58 :デフォルトの名無しさん:2006/11/04(土) 01:50:32
>>57
ありがとうございます。

59 :デフォルトの名無しさん:2006/11/04(土) 03:00:15
Delphiで、CodeGuardみたいなものはありますか

60 :デフォルトの名無しさん:2006/11/04(土) 04:17:28
>>55
ある程度で良いなら、グローバルフックでWM_SETCURSORを奪えば可能かも。
根本的にやるなら、全プロセスの SetCursor API を書き換えるとか。
(可能かどうかは知らない)

61 :デフォルトの名無しさん:2006/11/04(土) 05:28:07
_はスペースで読み替え。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のところでセミコロンが必要ってエラー出るのは何故なんでしょ?

62 :デフォルトの名無しさん:2006/11/04(土) 05:30:26
>>61
そりゃ当然だべ
endの次に処理Aが来るので、まだ文が続くから区切りとしてセミコロンが
必要。前の例はもう文が終わっているのでセミコロン不要

63 :61:2006/11/04(土) 05:37:31
>>62
レスどうもです。
やっと、ネストでのセミコロンの要否の意味合いが分かりました。汗)
単純に if_if_end_end; のように間のセミコロンは必要ないものだと思ってました。
、、、そっか、確かにそうだよな。

64 :デフォルトの名無しさん:2006/11/04(土) 06:00:38
CとPascalじゃセミコロンの意味が微妙に違うんだよな

Cは単文の終わり、Pascalは単なる区切り

65 :デフォルトの名無しさん:2006/11/04(土) 06:46:35
自作クラスの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;でした。
見えないバグがあったら怖いし、教えてください!

67 :デフォルトの名無しさん:2006/11/04(土) 06:51:50
>>66
inherited Create; {inherited:「上位クラスの処理を行う」という意味}
ttp://www.geocities.co.jp/SiliconValley-PaloAlto/8945/delphi/tip1.html

68 :65:2006/11/04(土) 06:57:41
>inherited Create; {inherited:「上位クラスの処理を行う」という意味}

つまり、上位クラスのCreateをさせておいてから、自前クラスの処理(Color := clYerrow;)やらをしてるわけで、俺の書いたのでおkってことですか?

69 :デフォルトの名無しさん:2006/11/04(土) 09:47:25
constructor TMyMemo.Create(AOwner: TComponent);
begin
 inherited Create(AOwner); // TCustomMemoのコンストラクタを呼ぶ

 Color := clYerrow;
  :

end;

のほうがいいと思うよ。

70 :デフォルトの名無しさん:2006/11/04(土) 10:44:15
>>68
inheritedが上位クラスのメソッドを呼び出しかと。
この場合上位クラスは継承元のTMemoで、TMyMemoはTMemoを継承したクラスということになる
んで、何もコードを書かない状態ならばTMyMemoはTMemoと同じ動作をする(はず)

例えば、犬(上位クラス)を飼っているとして回れ右(というメソッド)を覚えさせたとしよう
だが犬は心不全で死んでしまったのでクローン技術でよみがえらせることにした
クローン犬(子クラス)は犬のクローンなので生まれた時から回れ右を覚えているわけだが、
それだけでは犬と同じになってしまってどこか寂しい
そこで回れ右(というメソッド)と言うだけで回れ右+ジャンプを覚えさることにする
本当なら飼い主は回れ右という命令で(回れ右+ジャンプ)をしてほしいと思っているが、
しかし犬は回れ右という命令で(ジャンプ)をするようになってしまった
つまり回れ右(という継承元と同じ名称のメソッド)という命令がジャンプ(という継承元とは別の動作)に置き換わったわけだ
困った飼い主がブリーダーに相談したところ本来の命令を思い出す魔法の首輪(inherited)をくれた
そしてその首輪を付けて回れ右と言うと(ジャンプ)ではなく(回れ右+ジャンプ)をするようになったとさ

71 :デフォルトの名無しさん:2006/11/04(土) 10:45:26
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`;)

72 :デフォルトの名無しさん:2006/11/04(土) 13:33:26
ちゃんと仮想メソッドにしなくちゃ

73 :デフォルトの名無しさん:2006/11/04(土) 13:34:25
ちゃんと override しなくちゃ

74 :デフォルトの名無しさん:2006/11/04(土) 13:50:49
ああ忘れてたぁん

TCloneDog = class(TDog)
public
 procedure MawareMigi; override;
end;

75 :デフォルトの名無しさん:2006/11/04(土) 14:39:15
TImageでPictureに読み込んだ画像の指定色のみを透過させて、
下にある画像に重ね合わせるにはどうしたらいいんでしょうか?

自分なりにずっと調べてるんですがどうしても分かりません。
どうか御教授ください><

76 :デフォルトの名無しさん:2006/11/04(土) 18:53:42
Bitmap にして property TransparentColor: TColor;

77 :デフォルトの名無しさん:2006/11/04(土) 20:38:02
すみません、説明不足でした。
読み込んだ画像の一部のみをCopyRectとかそういうので切り貼りしたいんです。
そういうことってdelphiでは出来ないんでしょうか?

78 :デフォルトの名無しさん:2006/11/04(土) 21:01:46
TBitmapに読み込んで TBitmap.Canvas でほげほげする

79 :デフォルトの名無しさん:2006/11/04(土) 21:33:57
Scanlineの方が速いけどね

80 :デフォルトの名無しさん:2006/11/04(土) 21:42:57
↓VBの方がなんとか

81 :デフォルトの名無しさん:2006/11/04(土) 21:49:45
VBならコンポインストールできないといってできたりしないのにね

82 :デフォルトの名無しさん:2006/11/04(土) 21:57:22
VCならコンポーネントの問題自体存在しないのにね

83 :75=77:2006/11/04(土) 22:04:07
>>76>>78-79
Bitmapを弄ってもどうしても指定色を透過しての切り貼りが出来ません…(´・ω・`)
教えていただいたことをヒントにもう少し頑張ってみたいと思います。
どうもありがとうございました。

84 :デフォルトの名無しさん:2006/11/04(土) 22:09:33
'nest(1,nest1(2,3,"nest2(4,,)"),)'
上の文字列からnest(より後の文字列で','の後ろから次の','までを取得したいです。
但しnest1(2,3,"nest2(4,,)")のなかの','はカウントしないようにしたいのですが、
どういう風にしたらいいか分かりません。

85 :デフォルトの名無しさん:2006/11/04(土) 22:15:31
>>84
答えたいが、なにを言っているのかわからない

86 :デフォルトの名無しさん:2006/11/04(土) 22:20:08
>>84
例えばその例だと結局どんな文字列を切り出したいんだ?

87 :デフォルトの名無しさん:2006/11/04(土) 22:24:49
>>85
分かりづらい聞き方ですみません。
上の答えは'nest1(2,3,"nest2(4,,)")'が取得したかったのです。
また同じように'nest1(2,3,"nest2(4,,)")'から2番目の','から3番目つまり"nest2(4,,)"が取得したいです。
ぜひ教えてください。お願いします。

88 :ななしへたぐらま ◆XcB18Bks.Y :2006/11/04(土) 23:07:14
>>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)で手元の画像で確認はしています.


89 :デフォルトの名無しさん:2006/11/04(土) 23:21:28
ビットマップに指定領域を写し取る
透明色を設定する
好きなところへ描画

全部 VCL だけでできるわな

90 :デフォルトの名無しさん:2006/11/04(土) 23:28:49
>84
()を調べて、
'nest(1,nest1(2,3,"nest2(4,,)"),)';
11111222222223333333333344433221

2に該当した','が引数の区切りだなーて分かるので、
2番目の引数なら
左の(2 and ',')と右の(2 and ',') の間の文字

みたいな事をやる。


91 :デフォルトの名無しさん:2006/11/04(土) 23:36:10
>>87
ようはパーサを作りたいんだね
関数引数取得処理内で関数呼び出しに出会ったときは、その引数を
再帰的に処理して後で上のレベルの文字列と合成すればいい

92 :デフォルトの名無しさん:2006/11/05(日) 00:35:53
便乗してしつもんしたいんですが…

>constructor TMymemo.Create;
>begin
> inherited;

コード補完でImplementation以下のコードを出すと、overrideした手続の中は、
inherited;だけ出ますよね?
これはinherited;だけで、 inherited Create;みたいに子クラスで呼ぶ手続名を省略すると、
継承元のオーバーライドしてるのと同名の手続がinheritedされるっていう、暗黙の掟みたいなのがあるんですか?
if bool1 thenって省略できるみたいに?


93 :デフォルトの名無しさん:2006/11/05(日) 00:41:14
>>92
同じ名前で同じパラメータの手続きが呼ばれる
暗黙の掟などではなく、仕様

94 :デフォルトの名無しさん:2006/11/05(日) 00:45:53
自分も便乗ですが

クラスを派生させて作るとき、
親クラス、更にはその親〜基底までについて、全て知っておかなければならないのですか?

もしかしたら、親クラスにあるメソッドやフィールドと同名のものを作ってしまう、と言うこともあると思います。

Delphiでいうと、TObjectを全て知らない限りは、自分でクラスを作るなどしないほうが良いですか?

95 :デフォルトの名無しさん:2006/11/05(日) 00:49:09
うかっり同じものを作ったとして
なんか問題あるの?

96 :デフォルトの名無しさん:2006/11/05(日) 00:53:48
>親クラス、更にはその親〜基底までについて、全て知っておかなければならないのですか?

コンパイラがエラー出してくれるから心配いらないと思うよ。

97 :デフォルトの名無しさん:2006/11/05(日) 01:02:21
同じな前のメンバを作っても、オーバーライドしたのでなければ互いに独立。
外から継承元クラスのそのメンバを使いたい時にはちと面倒があるが、特に大きな問題は無い。

継承元のクラスの仕様のうち、多態性の為に仕様が厳密に定められているものはそれに正しく従う必要があるが、
そのあたりは軽くドキュメント(標準のクラスならHELP)を流し読みすれば大体解るようになってる。

98 :97:2006/11/05(日) 01:03:56
下のは仮想/抽象メソッドをオーバーライドする場合の話ね。

99 :デフォルトの名無しさん:2006/11/05(日) 01:27:38
TBevelにはPopupMenuを設定できないのですか?

100 :デフォルトの名無しさん:2006/11/05(日) 01:39:11
>>92-93
それは釣りですか?

101 :92:2006/11/05(日) 03:34:21
今きました。
>>100の人が正しいんですか?

102 :デフォルトの名無しさん:2006/11/05(日) 03:38:09
>>99
TControl の protected にあるから、不可能では無いけど、
表示ルーチンを自分で書く必要がある。

>>101 マニュアル読む。

103 :99:2006/11/05(日) 03:41:21
>>102
やはり普通は無理ですか
自前で改造するのはハードルが高いのであきらめます
教えてくれてありがとう

104 :デフォルトの名無しさん:2006/11/05(日) 08:26:12
>>70
> この場合上位クラスは継承元のTMemoで、TMyMemoはTMemoを継承したクラスということになる
> んで、何もコードを書かない状態ならばTMyMemoはTMemoと同じ動作をする(はず)
TMymemoのコンストラクタには何も引数を指定してないのに、TMemoのコンストラクタが
正常に呼ばれるのか?

>>99
下にPanelを敷けばいいんじゃない。

105 :デフォルトの名無しさん:2006/11/05(日) 20:23:06
Inc(X);
のような、カッコに入れた変数に影響を与えるような関数は
どうやって作ればいいのでしょうか?

106 :デフォルトの名無しさん:2006/11/05(日) 20:38:08
関数の引数にvarを付ける

107 :ななしへたぐらま ◆XcB18Bks.Y :2006/11/05(日) 23:28:36
>>65
良い悪い以前にコンパイラエラーになりませんか?
手元のDelphi 5ではコンパイルできなかったのですがDelphi 6以降は違うのでしょうか.

>>104
パネルのBevelInnerとBevelOuterをbvNoneにすれば枠無しのパネルが出来ますからね.
もっともデフォルトのくぼんだようなイメージで表示させるならパネルだけで可能ですね.


108 :デフォルトの名無しさん:2006/11/05(日) 23:34:06
Turboのアップデート葉書がきた…
7から比べてめぼしい機能はありますか?

109 :デフォルトの名無しさん:2006/11/05(日) 23:38:25
>>108
どとねと対応w

110 :デフォルトの名無しさん:2006/11/06(月) 00:19:00
TurboよりD6が吐くコードのが速い
D6みたいにちょっとした事で吐きだすコードが
大きく変わる事は少ないっぽい気はするけど

111 :デフォルトの名無しさん:2006/11/06(月) 00:26:16
マジか
インライン展開とFastMMがあっても遅いTurbo終わってるな

112 :デフォルトの名無しさん:2006/11/06(月) 01:35:52
FastMMは結構メモリを食うね。
速度を上げるならFastMoveとFastCodeだけでよさそう。

113 :デフォルトの名無しさん:2006/11/06(月) 01:39:24
速くするはずの仕組みを導入しているのに何で遅くなってるの?
ライブラリが糞化しているの?

114 :デフォルトの名無しさん:2006/11/06(月) 02:23:13
やっぱDelphiは5〜7で完成してたのか。
それともそれ以降の開発者がクソなのか。

115 :デフォルトの名無しさん:2006/11/06(月) 02:30:34
>>110
> TurboよりD6が吐くコードのが速い
また根拠の無いことを。

> FastMMは結構メモリを食うね。
どう食うのか、具体的に言ってみな>実行力の無いアンチ君。

116 :デフォルトの名無しさん:2006/11/06(月) 02:33:42
inline の効果は、以下のデモで確認できる。
http://bdn.borland.com/article/0,1410,33050,00.html#6Functionandprocedureinlining

117 :デフォルトの名無しさん:2006/11/06(月) 03:18:22
GUIの見た目を変更したいのですが、例えば
スクロールバーのツマミ部分や、ラジオグループのラジオ部分などを
任意の画像に変えることってできますか?

118 :デフォルトの名無しさん:2006/11/06(月) 03:33:26
Windowsのテーマいじれ。

119 :デフォルトの名無しさん:2006/11/06(月) 03:37:55
>>115
D6でFastMMを使用するとメモリは大体5%〜10%増しになる。
Initializeでメモリを仮に確保しているだけの場合は通常のメモリマネージャーのほうが効率がいい。
正直FastMoveと比べるとあまりご利益は無いわな。

>>117
自力ですべてを描写するのが定石では?
茨の道だけど、SpTBXLibやTBXが参考になると思う。

120 :デフォルトの名無しさん:2006/11/06(月) 04:31:01
>>119
仕組み上、最初に確保してるだけだろ。
5%−10%じゃ微増・誤差の範囲だ。

もうちょっと正確な表現を頼むよ。

121 :デフォルトの名無しさん:2006/11/06(月) 04:37:38
>>119
> 正直FastMoveと比べるとあまりご利益は無いわな。

断片化しないというご利益があるよ。

122 :デフォルトの名無しさん:2006/11/06(月) 04:56:44
必死だな

123 :デフォルトの名無しさん:2006/11/06(月) 05:11:48
>>120
きっちり調べてみた。
XP home SP2 Mem768MB、KEN_ALL.CSVで
TStringList: 15872k→17220k
TEditorEx: 21696k→23004k、
TStringGrid: 240280k→151332k
THogeTextView:: 49548k→50496k

印象だけで書込みしていたな…

124 :デフォルトの名無しさん:2006/11/06(月) 05:13:31
クラスごとに調べることに何の意味が?

125 :デフォルトの名無しさん:2006/11/06(月) 08:22:40
スレ違いもはなはなしいね

126 :デフォルトの名無しさん:2006/11/06(月) 09:21:25
はなはなしいよね

127 :デフォルトの名無しさん:2006/11/06(月) 09:47:02
なはなはしいよね

128 :デフォルトの名無しさん:2006/11/06(月) 10:51:36
>>123
報告、乙。

オプションの設定をどこか変えれば
消費量を抑えられるとか、無いの?

129 :デフォルトの名無しさん:2006/11/06(月) 11:09:04
5、使ってるけどコードの折りたたみ機能があるだけでもいいや。
見にくくてさ…

けどそのために2万9千円か。
すげぇコンポとかついてないの?

130 :デフォルトの名無しさん:2006/11/06(月) 11:20:12
BDS の質問はこちらへ。

Borland Developer Studio 2006 No.10
http://pc8.2ch.net/test/read.cgi/tech/1162262669/

131 :デフォルトの名無しさん:2006/11/06(月) 11:46:00
Turbo Delphiのことを聞いてんだよ

132 :デフォルトの名無しさん:2006/11/06(月) 12:07:33
TurboのIDEのスナップショットが見たいと思うけど、うちに来た案内ハガキには載ってないし、のっけてるサイトも見当たんない。
購入の参考にならんじゃん。

133 :デフォルトの名無しさん:2006/11/06(月) 12:32:26
BDS2006のそれと全く同じ。

134 :デフォルトの名無しさん:2006/11/06(月) 13:50:55
つーか、コンポ搭載以外のPro版の全機能が使えるExplorerがタダなんだから
落としてためせば全部わかるんじゃねえのか

135 :デフォルトの名無しさん:2006/11/06(月) 18:40:02
フォームのタイトルバーの上にボタン置けますか?

136 :デフォルトの名無しさん:2006/11/06(月) 21:01:07
おけない

137 :デフォルトの名無しさん:2006/11/06(月) 23:22:12
BorderStyleをNoneにしてタイトルバーらしきものを作ればいいんじゃね

138 :デフォルトの名無しさん:2006/11/06(月) 23:36:56
WM_NCPAINT GetWindowDC

139 :デフォルトの名無しさん:2006/11/07(火) 00:22:01
>>135
http://homepage1.nifty.com/MADIA/delphi/Tokusen/NewBUtton.htm

140 :デフォルトの名無しさん:2006/11/07(火) 00:39:08
Turbo Del Explorer版だとSampleパッケージ読み込めないから、
ポトベタでSpinEdit使ったソース書き換えないといコンパイル出来ない・・・

141 :デフォルトの名無しさん:2006/11/07(火) 03:30:51
ポトペタ以外で敢えてdelphiを使うメリットって無いよな。

142 :デフォルトの名無しさん:2006/11/07(火) 03:39:01
>ポトペタ以外で敢えてdelphiを使うメリットって無いよな。

俺はPascalの文法が好きだ。

143 :デフォルトの名無しさん:2006/11/07(火) 04:51:55
FreePascalやGNUPascalがある。

144 :デフォルトの名無しさん:2006/11/07(火) 06:24:30
キャプションにタブを入れるには?

145 :デフォルトの名無しさん:2006/11/07(火) 06:25:31
酢か塩を使うといい。

146 :デフォルトの名無しさん:2006/11/07(火) 06:33:59
>>144
Caption := 'hoge'#9'hage';

147 :デフォルトの名無しさん:2006/11/07(火) 07:50:56
構造体のメンバにポインタを持たせるのって、いまんとこ前の構造体のポインタと後ろの構造体のポインタをもたせてリストに使うくらいしか知りません。
でも、発展性からいって、もっと柔軟なことができそうな気がします。

構造体のメンバのポインタを使ってこんなことできるゼってのを素人のボキュに紹介してくれませんか?

148 :デフォルトの名無しさん:2006/11/07(火) 07:53:24
関数ポインタを入れると・・・

149 :デフォルトの名無しさん:2006/11/07(火) 07:59:48
関数ポインタは.NETでは使えないというのは俗説でつか?

150 :デフォルトの名無しさん:2006/11/07(火) 08:00:44
「関数ポインタ」でググッたらC++のばかり出るね。
悲しいね。

151 :135:2006/11/07(火) 08:36:25
サンクスでつ>>139
ちょうどやりたい事でした。

152 :デフォルトの名無しさん:2006/11/07(火) 10:19:41
コモンダイアログの今回の印刷設定ではなくて、PCの印刷設定を開く方法を教えて下さい。

153 :デフォルトの名無しさん:2006/11/07(火) 11:41:19
siki:='1*(2+3)';のような文字列から答えを出したいんだけどどうしたらいいの?

154 :デフォルトの名無しさん:2006/11/07(火) 11:45:15
>>153
Dephiインタープリタってのがあるぉ。

ttp://www.kobira.co.jp/sakura/d_Con_Cgi.htm
del_005.zip

155 :デフォルトの名無しさん:2006/11/07(火) 13:06:39
Metafileのメリットって何ですか?

>このファイル書式は、アーキテクチャの異なるシステム間または機能もしくは設計
>の異なる装置間で交換可能な形で図形を記述するための要素の集合からなる。

UNIXとかでも使えるってことですか?

156 :デフォルトの名無しさん:2006/11/07(火) 13:21:28
ベクター形式

157 :デフォルトの名無しさん:2006/11/07(火) 13:40:57
>UNIXとかでも使えるってことですか?
むりぽ
WindowsとUnixの描画命令に互換性ないでしょ?
メタファイルは画像じゃなくて描き方をデータとして記憶する

メリットは
・データサイズが小さい
・拡大縮小が綺麗に行える
・パーツ単位の移動、回転等が容易

デメリットは
・いちいち描画を行うので遅い
・写真みたいな画像は扱えない

158 :デフォルトの名無しさん:2006/11/07(火) 17:56:35
便乗質問
Metafile にリッチテキストファイルを描きたいのですがどうすればよいでしょうか。

159 :デフォルトの名無しさん:2006/11/07(火) 20:54:11
>・拡大縮小が綺麗に行える

これいいなー

160 :デフォルトの名無しさん:2006/11/08(水) 00:54:29
製品の使用許諾コードを取得します。
の後に
コード取得時にエラーが発生しました。Connection Failed
ってでてインストールできないです
Delphi6Personalはもう使えないのでしょうか?

161 :147:2006/11/08(水) 00:58:43
>>関数ポインタを入れると・

これの解りやすいサイトか、やり方教えてください!

162 :デフォルトの名無しさん:2006/11/08(水) 01:03:56
>>160
ttp://bdn.borland.com/article/33580
これでどうよ?

163 :デフォルトの名無しさん:2006/11/08(水) 01:07:26
>>160
日本の本家がゲフンゲフンでアレなので
「Delphi 使用許諾」で検索すれ。
代わりの方法が見つかるハズ。

164 :デフォルトの名無しさん:2006/11/08(水) 06:15:01
ListBoxにファイル名を格納しておいて右クリックすると
Explorerのコンテキストメニューを出す方法ってありますか?
今はcontextmenu.exeという外部ツールを呼び出しているんですが
どうも呼び出しがもっさりしているのでアプリ内に組み込んでしまいたいのですが。

165 :デフォルトの名無しさん:2006/11/08(水) 07:50:58
>>164
ttp://forum.nifty.com/fdelphi/samples/01162.html

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するという手もある。
て事は、こちらはないのか・・・

169 :デフォルトの名無しさん:2006/11/08(水) 11:18:41
>>168
簡単に作れるから、コンポがいくらでもあるよ。
コンポ初心者の定番。
ソースを拾ってきて、Create すればいいだけ。

非ビジュアルなんだからForm に置いても意味ないし。

170 :デフォルトの名無しさん:2006/11/08(水) 12:18:30
>>169
わかりました。
探してみます。

171 :デフォルトの名無しさん:2006/11/08(水) 12:25:43
つ TSHBrowseForFolderEx ttp://zero.s2.xrea.com/study.htm

172 :デフォルトの名無しさん:2006/11/08(水) 12:30:55
>>171
ダウンロードしました。
一番下にありましたね。
感謝!

173 :デフォルトの名無しさん:2006/11/08(水) 13:19:18
このあたりにも色々ある。
http://www.delphianworld.com/

174 :デフォルトの名無しさん:2006/11/08(水) 13:19:58
直接行くなら、こちらか。
http://norg1964.hp.infoseek.co.jp/delphianworld/

175 :デフォルトの名無しさん:2006/11/08(水) 23:49:01
>>162
>>163
http://bdn.borland.com/article/33580でうまくいきました
登録してから約一日でキーが届きました
ありがとうございました

176 :デフォルトの名無しさん:2006/11/08(水) 23:59:34
>>163
のキーワードで検索して出てきたページの説明通りにやったらすぐできたよ
これでやっとすっきりした
俺からもありがとう

177 :デフォルトの名無しさん:2006/11/09(木) 07:23:26
フォームがリサイズされ始める時と、リサイズが終了したときに呼ばれるイベントはありますか。
もしくは、リサイズ中かを表すフラグでもいいです。

178 :デフォルトの名無しさん:2006/11/09(木) 07:32:47
つ Windows メッセージ

> フォームがリサイズされ始める時
WM_SIZING

> リサイズが終了したときに
WM_ENTERSIZEMOVE
WM_EXITSIZEMOVE

179 :デフォルトの名無しさん:2006/11/09(木) 07:35:27
嘘うそ。

> フォームがリサイズされ始める時
WM_ENTERSIZEMOVE

途中:WM_SIZING

> リサイズが終了したときに
WM_EXITSIZEMOVE

180 :デフォルトの名無しさん:2006/11/09(木) 07:42:02
WM_EXITSIZEMOVEは来ないこともあるので注意

181 :デフォルトの名無しさん:2006/11/09(木) 07:53:54
ありがとうございます。勉強になりました。
ウインドウの移動中にも来るようですが、この方法を使うことにします。

182 :デフォルトの名無しさん:2006/11/09(木) 08:32:49
TEST.txtってファイルがなかったら
作成したいのですが、どう書けばいいのでしょうか?

183 :デフォルトの名無しさん:2006/11/09(木) 08:41:51
//uses SysUtils,Classes;

var
fs:TFileStream;
begin
if fileexists(TEST.txt)=false then
begin
fs := TFileStream.create( 'TEST.txt' , fmcreate );
fs.free;
end;
end;

とかなんとか。

184 :デフォルトの名無しさん:2006/11/09(木) 08:45:20
var
 fp: TextFile;
begin
 AssignFile(fp, 'TEST.txt');

 if FileExists('TEST.txt') then
  Append(fp)
 else
  Rewrite(fp);

 try
  //なんたらかんたら〜
 except
  CloseFile(fp);
 end;
end;

185 :デフォルトの名無しさん:2006/11/09(木) 08:46:06
訂正
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
>>183-186
ありがとうございました。


188 :デフォルトの名無しさん:2006/11/09(木) 09:10:29
おはようございます。
7-zip32.dllの圧縮と解凍をしたいのですが・・
コンポーネント無しでしたいのです、面倒でしょうか?
簡単なコンポーネントなどありましたら教えてください。m(__)m

189 :デフォルトの名無しさん:2006/11/09(木) 09:12:48
コンポーネント無しでしたいと言っておきながら
簡単なコンポーネント教えてくださいとは是如何に

190 :188:2006/11/09(木) 09:20:20
>>189
すいません
コンポーネント無しのコードが長くなって貼ったりすると
スレに迷惑がかかると思いまして・・
長くて貼るの面倒な場合はコンポーネントで我慢しますの意です
すません

191 :デフォルトの名無しさん:2006/11/09(木) 09:31:30
教えを請うておいて我慢しますとはなにごとか

192 :デフォルトの名無しさん:2006/11/09(木) 09:38:13
7-zip32.dllをダウンロードしてそん中の関数使えばそれで完結するけど

193 :188:2006/11/09(木) 10:40:23
>>191
すんません

>>192
その関数の書き方がわからないのです
すんません


194 :デフォルトの名無しさん:2006/11/09(木) 11:20:37
書き方もなにも
1.7-zip32.dllをLoadLibary
2.GetProcAddressで関数SevenZipのアドレスを取得
3.FreeLibraryで解放
これだけ

195 :デフォルトの名無しさん:2006/11/09(木) 11:29:12
そういや、俺もろくに使ったことがないが、
Delphiの場合、わざわざSafeLoadeLibrary()が用意されているんだが、
LoadLibraryを使わずこっちを使うべきなんかね?

196 :デフォルトの名無しさん:2006/11/09(木) 11:53:07
TImageのBitmapをクリアするにはどうすればよいですか?

197 :デフォルトの名無しさん:2006/11/09(木) 11:55:38
Image1.picture := nil;

198 :196:2006/11/09(木) 11:58:29
さんkす


Image1.picture.bitmapのbitmapを引数で渡している関数でクリアするにはどうしたら良いでしょう?

199 :デフォルトの名無しさん:2006/11/09(木) 12:03:10
参照渡しなら関数内でクリアすればおk

200 :デフォルトの名無しさん:2006/11/09(木) 12:06:03
bitmap.free

ってこと?

Image1が変になりそうな悪寒でちょっと怖い

201 :デフォルトの名無しさん:2006/11/09(木) 12:08:38
Image1.picture.bitmap := nil;

>bitmap.free
これはやっちゃダメ
詳しくは書かないけどDelphiの神様の天罰が下る

202 :196:2006/11/09(木) 12:17:47
じゃぁ、引数をTBitmapじゃなくて、TImageにすることにします。



本当は、汎用性のために引数TBitmapのままにしたいんだけどなぁ。

203 :デフォルトの名無しさん:2006/11/09(木) 12:24:35
>>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;

204 :デフォルトの名無しさん:2006/11/09(木) 12:25:31
続きだァ?コノヤロウ!

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;

205 :デフォルトの名無しさん:2006/11/09(木) 12:32:55
>>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
家帰ったら超組み込んでみます。

208 :デフォルトの名無しさん:2006/11/09(木) 12:48:57
TBitmapのインスタンスにnil代入すればクリアされるよ
Delphiのオブジェクトの実体はポインタだから
nilを代入すれば何も指さない=保持している内容のクリア

209 :202:2006/11/09(木) 12:55:22
やっぱTBitmapのプロパティやメソッドではクリアできないってことですか。

210 :デフォルトの名無しさん:2006/11/09(木) 13:07:11
TBitmapのインスタンスを自前で作ってる?
それならFreeメソッドでメモリ解放出来る

211 :202:2006/11/09(木) 13:19:25
いや、だからTImageが作ってるから困ってる。

じゃあ、TImageに消させろといっても、
TBitmapを印刷する関数の引数をTImageに変えたくない。
だって、必ずしもTImageを経由するわけじゃなく、TBitmapを自前でCreateすることが将来あるかも。

212 :ななしへたぐらま ◆XcB18Bks.Y :2006/11/09(木) 15:27:32
>>178-180
変更前:OnCanResize
変更後:OnResize

ではだめなのでしょうか?


213 :ななしへたぐらま ◆XcB18Bks.Y :2006/11/09(木) 16:05:54
>>208
nilを代入しても保持している内容はクリアされません.

Delphiのオブジェクト変数は常にポインターなので,
つまりオブジェクトのある場所を覚えているだけなので,
オブジェクト変数にnilを代入しても
生成したオブジェクト(オブジェクトの実体=インスタンス)がどこにあるかという情報を
書き換えられてしまう(消されてしまう)だけなのです.


一方でコンポーネントなどのオブジェクト型のプロパティにnilを代入する場合は話が違ってきます.
これはソースコードの上では代入でも変数への代入になる場合と代入用のメソッドが呼ばれる場合とがあります.
後者の場合はメソッドの中にどのようなコードを書くかはプログラマーの自由です.

イメージコンポの Image1.Picture := nil や Image1.Picture.Bitmap := nil といったコードでは
プロパティへの代入はメソッドに関連づけられ,
このメソッドの中でグラフィックオブジェクトを解放しています(解放するコードが書かれています).


214 :ななしへたぐらま ◆XcB18Bks.Y :2006/11/09(木) 16:19:03
>>196
TBitmapのビットマップを空にする方法についてはヘルプにも書かれていないようですが
Delphi 5のGraphicsユニットのソースをちょっと見てみた感じでは
パラメータをnilにしてAssignメソッドを呼び出せば空になりそうです.

(bmp1.Assign(nil) みたいな感じで)


215 :202:2006/11/09(木) 16:22:03
でしょ?>>213

うお、そうなんだ!>>214



実はあきらめて、206のフローをバラせるように関数をクラス化してる作業中でした。
やっぱ、やめてbmp1.Assign(nil)にしようかなぁ。。。

216 :デフォルトの名無しさん:2006/11/09(木) 19:14:27
TStringGridで現在選択されている行を削除するにはどうしたらよいでしょうか。


217 :デフォルトの名無しさん:2006/11/09(木) 20:22:24
行を移動してって、最終行をクリアして、行数を減らす。
もっとエレガントな方法もあるかも。

218 :デフォルトの名無しさん:2006/11/09(木) 23:03:59
現在の処理が終わるまで次の行に行かないようにするにはどうするのでしょうか?

219 :デフォルトの名無しさん:2006/11/09(木) 23:23:40
普通に書けばそうなるが?

220 :デフォルトの名無しさん:2006/11/10(金) 00:45:26
現在簡単なファイラを作っているのですが、
リストビュー(OWnerData=True)の選択アイテム(ファイル)の合計ファイルサイズを
選択された毎に求めたい場合はどうすればいいですか?
全検索すれば楽なんだけど何か効率が悪い気がする・・・

221 :デフォルトの名無しさん:2006/11/10(金) 01:34:01
メソッドポインタと関数ポインタ周りを勉強したいんですが…

Delphiクイックリファレンス
ttp://www.oreilly.co.jp/books/4873110408/toc.html

書籍とか絶版になってるの多くて、座学ができません。そもそもDelphi本自体本屋にないし(うちの地方)。
どなたか、Delphiのポインタ関連を自分のブログとかに整理してる人とか、されてるurlとかうpってくれませんか?

ようやくポインタが理解できかかってきてるので、、

222 :デフォルトの名無しさん:2006/11/10(金) 01:46:41
Delphiでポインタについてある程度まともな記事をかいているのは
部員弐号たんだな。
部員弐号でぐぐってみそ。

でも関数ポインタについては書いてなかったかも。

223 :デフォルトの名無しさん:2006/11/10(金) 01:48:26
プログラムの中でIPからリモホを取得するにはどうすればいいんですか?

224 :デフォルトの名無しさん:2006/11/10(金) 02:51:07
ポインタの概念は Delphi でも C でも C++ でもなんでも同じ。
本屋行けば、ポインタだけを説明してる本があるよ。

225 :デフォルトの名無しさん:2006/11/10(金) 02:56:27
>部員弐号たんだな。

拝見しましたが、関数ポインタにはふれられてなかったですね…
(´・ω・`)ショボーン

226 :デフォルトの名無しさん:2006/11/10(金) 03:04:40
>>223
gethostbyaddr
WinSockの話。

227 :デフォルトの名無しさん:2006/11/10(金) 03:07:01
ポインタって、なんでそんなにこだわるの?

変数やら、関数やら、クラスのインスタンスやらが、実際にメモリ上にあるときの
アドレスだよ。それだけ。

228 :219:2006/11/10(金) 05:51:44
>>219
>>203-204を使用してFTPに上げる予定なのですが
圧縮後のFTPのコマンドがキャンセルされてしまいます。


229 :デフォルトの名無しさん:2006/11/10(金) 05:52:35
>>228
コテは>>227でした

230 :デフォルトの名無しさん:2006/11/10(金) 05:59:06
EditのOnChangeで文字数をリアルタイムにカウントしてラベルに表示するにはどうすればいいんでしょう
Lengthを使えばよさそうだけどどうも上手くいきません…

231 :デフォルトの名無しさん:2006/11/10(金) 06:18:14
>>225
理解しかかってるときなら徹底的にやったほうがいいよ。
苦労は実になる。

232 :デフォルトの名無しさん:2006/11/10(金) 06:26:26
>>230
Label.Caption := IntToStr(Length(Edit.Text));

233 :デフォルトの名無しさん:2006/11/10(金) 06:27:33
>>230
label1.caption := length(tedit(sender).text) + ' byte';

234 :デフォルトの名無しさん:2006/11/10(金) 07:19:26
Length(WideString('3文字')) = 3

235 :デフォルトの名無しさん:2006/11/10(金) 08:28:14
>>232-234
あーそうか、文字列に変えればいいのか
なんでこんなことに気付かなかったんだろw

>>231
そーなんですよー…orz

236 :デフォルトの名無しさん:2006/11/10(金) 08:28:38
>>224
同じは言いすぎだと思うよ

237 :デフォルトの名無しさん:2006/11/10(金) 08:56:17
>ポインタだけを説明してる本があるよ。

んー。
Delphiのポインタだけの本ってのは見ないね。
CやC++はいろいろ出てるけど。
DelphiはじめたばかりでC++のポインタ理解汁ってのはちょっと酷かもな。
微妙に違うし。

238 :デフォルトの名無しさん:2006/11/10(金) 09:08:19
>>236
「概念」は同じでしょ。文法が違うだけで。

239 :デフォルトの名無しさん:2006/11/10(金) 11:10:14
>>237

ヒント:Pascal

240 :デフォルトの名無しさん:2006/11/10(金) 11:15:07
Delphiのポインタは、定義がしちめんどうくさいんだよね

241 :デフォルトの名無しさん:2006/11/10(金) 11:32:54
ポインタ・参照ネタはやるだけ無駄。うざいからやめとけ。

242 :デフォルトの名無しさん:2006/11/10(金) 16:29:04
おれは好きだ

243 :デフォルトの名無しさん:2006/11/10(金) 16:38:34
好き嫌いの問題ではない

244 :デフォルトの名無しさん:2006/11/10(金) 17:25:48
俺も好きだ

245 :デフォルトの名無しさん:2006/11/10(金) 18:39:23
TPrintDialogで設定された内容を持っているDEVMODE構造体を取得できますか?

TPrinter.GetPrinterで取得できるのはDEVMODE構造体じゃなくて、ハンドルみたいなので。

246 :245:2006/11/10(金) 19:19:46
自己レスですが、ハンドルをGlobalLockすればよいと分かりました。

247 :デフォルトの名無しさん:2006/11/10(金) 19:56:15
Edit1でIMEがオンになってるかどうか、
オンオフを検出する方法を教えてください

248 :デフォルトの名無しさん:2006/11/10(金) 20:15:00
>>238
お前はK&Rから勉強しなおして来い
それでも同じ概念だと思うなら首をつったほうがいい

249 :デフォルトの名無しさん:2006/11/10(金) 21:04:12
>>248
お前もK&Rから勉強しなおして来い
それでも違う概念だと思うなら首をつったほうがいい


250 :デフォルトの名無しさん:2006/11/10(金) 21:04:50
PASCAL使いにK&Rを進めるとは意地悪なやつだのう

251 :デフォルトの名無しさん:2006/11/10(金) 21:13:44
もう248みたいな馬鹿しか残ってないのだね

252 :デフォルトの名無しさん:2006/11/10(金) 21:17:19
がい‐ねん【概念】

1 物事の概括的な意味内容。「―をつかむ」「文学という―から外れる」

2 《concept》形式論理学で、事物の本質をとらえる思考の形式。
個々に共通な特徴が抽象によって抽出され、それ以外の性質は捨象されて構成される。内包と外延をもち、
言語によって表される。




253 :デフォルトの名無しさん:2006/11/10(金) 21:19:56
↓248の苦しい言い訳スタート

254 :デフォルトの名無しさん:2006/11/10(金) 21:24:31
そういや、おれはポインタがよくわからなくなって、
先にDelphiのオブジェクト指向を勉強してそれがようやくわかったあと、
じゃあ、クラスじゃなくて整数型変数を動的に扱いたいなあと思ったときに
ようやくポインタがなんなのかよくわかったってな経験があったなあ

やっぱりポインタは、本だけじゃわからんよね

255 :デフォルトの名無しさん:2006/11/10(金) 21:43:34
>248はHowtoSEX本を読んで初夜に挑んだおっさんとみた

256 :デフォルトの名無しさん:2006/11/10(金) 21:51:49
>>255
その本の販売URLを頼む

257 :デフォルトの名無しさん:2006/11/10(金) 21:57:22
まじで、C言語のポインタとPascalのポインタが同じ概念でくくれると思ってるやついるの?
ネタだよね?

258 :デフォルトの名無しさん:2006/11/10(金) 22:01:40
うは。IDE上でテストすると重〜い。初めて触ったけどスパスパと進むなw

259 :デフォルトの名無しさん:2006/11/10(金) 22:18:29
初心ものでとんちんかんかも知れませんが、ポインタってある論理アドレスを
さすモノってだけじゃないのでしょうか。ずっとそう思ってたのですが…

260 :デフォルトの名無しさん:2006/11/10(金) 22:19:41
>257
ポインタの概念そのものは言語に依存しない。ただしフードの下に隠されているものはまったく異なるのかもしれないが。

261 :ななしへたぐらま ◆XcB18Bks.Y :2006/11/10(金) 22:23:38
>>216
ご質問の内容が実際にグリッドの行数を減らすという意味なのか,
表計算ソフトのようにセルの内容だけを削除するという意味なのかはわかりませんが,
いずれにしても途中の行を削除するためのメソッドはありません.

削除する行から下の行のCellsの値(文字列)をひとつずつ,1行下からコピーしてください.
Objectsプロパティを利用している場合はCellsと同様にコピーしてください.

>>219
ファイル一覧を表示させる前にファイル一覧を作るために
FindFirst関数などでファイルの検索を行っているはずですが
そのときにファイル名と一緒にファイルの長さを覚えておけば
再び検索する必要が無くなりますね.


262 :ななしへたぐらま ◆XcB18Bks.Y :2006/11/10(金) 22:25:45
失礼,>>261の2つめのレスアンカーを間違えました.>>220へのレスです.


263 :デフォルトの名無しさん:2006/11/10(金) 22:53:16
ポインタは塚越タンのDelphi応用プログラミングで覚えたな
クラスも塚越タンの本がきっかけだった気がする

264 :デフォルトの名無しさん:2006/11/10(金) 23:02:36
思えば、塚越たんがDelphiを見限ったあたりから、
国内においてのDelphiの衰退が始まったような希ガス

265 :デフォルトの名無しさん:2006/11/10(金) 23:20:35
>>264
衰退するほど盛んだった時期あったっけか?www

266 :デフォルトの名無しさん:2006/11/10(金) 23:22:25
>>259
Pascalのポインタはその認識で良いよ
C言語のポインタはPascalのポインタの機能を包括した上で機械語のアドレッシングモードを模した
多様な演算機能を持っている、これはPascalのポインタには無い概念だ

267 :デフォルトの名無しさん:2006/11/10(金) 23:24:26
そうけ?
整数型にキャストすりゃなんでもありな気が。

268 :デフォルトの名無しさん:2006/11/10(金) 23:29:18
>>34
これはどうかな
ttp://www.terra.dti.ne.jp/~vivas/delphi/index.html#THotkeyEx


269 :デフォルトの名無しさん:2006/11/11(土) 00:38:11
Cは関数へのポインタが解かりにくい。

270 :デフォルトの名無しさん:2006/11/11(土) 00:43:00
Quadruple Dの質問もここでいいのかな?

271 :デフォルトの名無しさん:2006/11/11(土) 00:45:45
THandleStreamを使って、既にあるファイルのサイズをゼロにするやり方、ご存知の方おいでないですか?
fmOpenWriteでCreate→Freeしただけでは何も変わらないし
開いたあと何か書き込んでもファイルサイズ自体は変わらないしで…。

272 :デフォルトの名無しさん:2006/11/11(土) 00:46:46
>衰退するほど盛んだった時期あったっけか?www

むかし、ラオックスブック館(今はマック館)があったころVC++もVBもDelphiも売場の棚の面積は同じくらいだったよなぁ(遠い目)。
いまはJavaにも追い抜かれてるね。

273 :デフォルトの名無しさん:2006/11/11(土) 01:54:24
何で衰退したの?
プログラム初心者の俺にとってはDelphiはわかりやすくていいのに

274 :デフォルトの名無しさん:2006/11/11(土) 01:56:18
続きはこちらで

バカボンのDelphi不買・販促・その他談話室その29
http://pc8.2ch.net/test/read.cgi/tech/1153227982/

275 :デフォルトの名無しさん:2006/11/11(土) 03:26:03
ふきだし型のポップアップヒント(タスクトレイに出るやつ)って出せませんか?
もしくはコンポーネントありませんか?

276 :デフォルトの名無しさん:2006/11/11(土) 03:30:23
TTrayIcon

277 :デフォルトの名無しさん:2006/11/11(土) 08:58:44
>>266
演算機能はDelphiにもありますが・・・
Delphiスレで純粋Pascalの話ですとかいうなよ今更wwwwwww

278 :デフォルトの名無しさん:2006/11/11(土) 09:00:42
しかも演算できるかどうかで概念が異なるというのもかなり苦しいいいわけだなw

279 :デフォルトの名無しさん:2006/11/11(土) 09:03:14
概念って言葉の意味がよくわかってなかったんじゃね

280 :デフォルトの名無しさん:2006/11/11(土) 09:06:07
Cのポインタはよく知ってるがDelphiについてはよく知らない奴だったみたいだな。
こうなってくるとCの方も怪しいが。

281 :デフォルトの名無しさん:2006/11/11(土) 09:23:29
>>271
sizeプロパティを0に設定すれば良いはず

282 :デフォルトの名無しさん:2006/11/11(土) 09:29:01
fmOpenWriteでなくfmCreateにすればOK

283 :デフォルトの名無しさん:2006/11/11(土) 09:53:28
Delphiにポインタ演算機能ってあったっけ?

284 :デフォルトの名無しさん:2006/11/11(土) 11:24:58
Inc Decとか
pAnsiCharなんかだと+が使えるとかだっけか。

でもまあ、DLLを使うとき以外は、動的配列でだいたいなんとかなるんでさ。
俺もポインタを覚えた時は喜んでDelphiでもポインタ使ってたけど、
最近は、動的配列でどうにかなるときはポインタを使わずに動的配列使うようにしている。
ガベコレはいいよやっぱり。

285 :デフォルトの名無しさん:2006/11/11(土) 11:50:44
そうだね、動的配列使えるようになってから TList とか面倒で使わなくなったな

286 :デフォルトの名無しさん:2006/11/11(土) 12:04:51
>>283
ありがと。

287 :デフォルトの名無しさん:2006/11/11(土) 12:05:22
間違えた。>>282でした。スマソ

288 :275:2006/11/11(土) 12:08:55
ttp://www.swissdelphicenter.ch/torry/showcode.php
↑これで事故解決

289 :デフォルトの名無しさん:2006/11/11(土) 12:45:42
>>266
VBと間違えてない?アンチ君

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 とともにログテーブルに記録したいのです。


291 :デフォルトの名無しさん:2006/11/11(土) 15:03:33
DBのトリガーを使えばいいじゃない

292 :デフォルトの名無しさん:2006/11/11(土) 16:17:14
> 実際に投げられる SQL 文を取得する方法はありますか。

Ent 版以上についている、SQL Monitor
IBX だと管理用コンポーネントが色々あったような。


293 :デフォルトの名無しさん:2006/11/11(土) 17:14:39
教えてください。
Turboの無料版をダウンロードしたのですが、インストール後の初回起動時に
シリアルNoとキーを入力しなければならないみたいですが、このシリアルNoとキーは
どこで入手すればいいかわかりません。

ちなみにTurboの無料はオフィシャルHPからダウンロードしました。
よろしくお願いします。

294 :デフォルトの名無しさん:2006/11/11(土) 17:22:50
ダウンロードする前に登録するときに正しいメールアドレスを入れていればくるはずだけど。

295 :デフォルトの名無しさん:2006/11/11(土) 17:28:46
ナッキーの「Turbo Delphiはじめて奮戦記」- 第1回 Turbo Delphi のインストール
http://bdn.borland.com/article/33742

296 :デフォルトの名無しさん:2006/11/11(土) 17:30:23
使用許諾登録に関するQ&A
http://bdn.borland.com/article/33605

297 :293:2006/11/11(土) 17:32:20
ダウンロード時にきたメールには、beginblock/endblockで囲まれた
暗号みたいな文章が来たんですが、それ以外にはシリアルナンバーとキーは
ありませんでした。

暗号みたいなテキスト文を置く場所間違ってるのかな・・・。
もう一度やってみます。

298 :デフォルトの名無しさん:2006/11/11(土) 17:46:52
>>297
> ダウンロード時にきたメールには、beginblock/endblockで囲まれた
> 暗号みたいな文章が来たんですが、

体験版と間違えてない?

299 :デフォルトの名無しさん:2006/11/11(土) 17:53:28
シリアルはメールではこなかったよ
ホームページのマイアカウントのMy Registered Productsで見られた

300 :293:2006/11/11(土) 18:46:38
最初にボーランドから届いた暗号みたいのが書かれてるメールの下にreg736っていう添付ファイルがあって、
それを指定の場所に置いたらシリアル番号聞かれずに起動できたよ!

みんなどうもアリヤトー(*´ω`*)

301 :デフォルトの名無しさん:2006/11/11(土) 21:56:15
誰かいますか!?
質問なんですけどDelphiでボタンを押すとフォームの色が赤と青に
順々にかわるようにプログラムを書くにはどうしたらいいのでしょうか!?

if文を使って書くのいうことはわかるんですが・・・。

302 :デフォルトの名無しさん:2006/11/11(土) 22:07:26
なんかさ、入門サイトでもちゃんと読んだら

303 :デフォルトの名無しさん:2006/11/11(土) 22:09:26
宿題か?今回だけだぞ。

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;

304 :デフォルトの名無しさん:2006/11/11(土) 22:22:24
C言語で

int func() {
  static int i = 1;

このstatic intは、Delphiではどう訳せばいいですか?
var i: Integer; じゃダメだと思うんですが

305 :デフォルトの名無しさん:2006/11/11(土) 22:26:59
できない。外に出して変数にしないと。

306 :デフォルトの名無しさん:2006/11/11(土) 22:39:56
>>305
嘘を教えてやるなよw

>>304
型付き定数を使う。
ただし、オプションによっては、型付き定数は完全な定数みたいになっちゃうので注意。

function hoge():integer;
const
i:integer=1;
begin

end;

とかなんとか。
ちなみに、Delphi7くらいまででは、C++のクラス変数を移植したいときはこの肩付き定数を使うのが楽なのであった。

307 :ななしへたぐらま ◆XcB18Bks.Y :2006/11/11(土) 22:58:27
>>304
別なやり方としてコンパイラに「型付き定数への代入」を有効にするように指令する方法があります.
これによってCのstatic変数と同様の処理を実現できます.

{$J+} // ここから先は「型付き定数への代入」を有効にする
procedure TForm1.Exp1ActionExecute(Sender: TObject);
const
 StaticNum: integer = 0;
begin
 ShowMessageFmt('現在の値:%d', [StaticNum]);
 inc(StaticNum);
end;
{$J-} // ここから先は「型付き定数への代入」を無効にする.

※注意!:

この指令が有効になっている間はどの定数にも値を代入できます.
つまり,本当に定数として定数を宣言しているのに
誤って値を代入するコードを書いてしまってもエラーにならないため,
見えないバグを生み出す原因となります.

この指令はプロジェクトオプションのダイアログからも設定できるのですが,
ソースの中に無効にする指令を埋め込んでいない限りプロジェクト全体で有効になってしまうのでおすすめできません.
上の例のようにソースの中に埋め込む方がよいと思います.


308 :デフォルトの名無しさん:2006/11/11(土) 23:01:39
constで定義した変数の値を後から操作できるって
素で今の今まで知らなかったや

309 :デフォルトの名無しさん:2006/11/11(土) 23:04:11
>>308
型付き定数だけね。

310 :ななしへたぐらま ◆XcB18Bks.Y :2006/11/11(土) 23:09:51
>>309
私の書き込みも一部間違えてしまいましたので
>>307を以下のように訂正します.

この指令が有効になっている間はどの型付き定数にも値を代入できます.
つまり,本当に定数として型付き定数を宣言しているのに
誤って値を代入するコードを書いてしまってもエラーにならないため,
見えないバグを生み出す原因となります.


311 :デフォルトの名無しさん:2006/11/12(日) 00:17:43
>>310
そういう意味ではこのように適用範囲を最低限にしたほうがいいでしょう。

procedure TForm1.Exp1ActionExecute(Sender: TObject);
const
 {$J+} // ここから先は「型付き定数への代入」を有効にする
 StaticNum: integer = 0;
 {$J-} // ここから先は「型付き定数への代入」を無効にする.
 ConstNum: integer = 0;
begin
 ShowMessageFmt('現在の値:%d', [StaticNum]);
 inc(StaticNum);
 //inc(ConstNum); //コンパイルエラー
end;

312 :デフォルトの名無しさん:2006/11/12(日) 00:31:57
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
おお凄い!
でも宿題として、そんなの出したら・・・

314 :デフォルトの名無しさん:2006/11/12(日) 01:16:56
array[Boolean] of .... ←こんな書き方があるなんて、おいらちょっとびっくりだよ!

315 :304:2006/11/12(日) 01:33:07
>>306-311
どうもありがとうございます。そういうやり方があるんですね。

316 :デフォルトの名無しさん:2006/11/12(日) 01:33:30
>>312がどうなってんのか誰か詳しく解説してくれ
わからん

317 :デフォルトの名無しさん:2006/11/12(日) 01:46:50
マウスがあるコンポーネントの領域内に入った瞬間を捕らえるイベントはありませんか?
OnMouseMoveだとコンポーネント上を動いてる間中発生してしまい、うまくいきません。
マウスがコンポーネント上を通った時に一度だけ処理をしたいのです。

318 :デフォルトの名無しさん:2006/11/12(日) 01:47:36
>>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 を返し、テーブル参照を行う事が出来る。

319 :デフォルトの名無しさん:2006/11/12(日) 01:51:45
もし方法があったら教えてください。

文字列と値の組み合わせがあり、文字列を渡すと値を得るような仕組みが欲しいのです。
例えば、

'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イベント

321 :デフォルトの名無しさん:2006/11/12(日) 01:52:37
>>317
CM_MOUSEENTER

322 :317:2006/11/12(日) 01:57:41
>>321
キーワードサンクス。
それでググって見ます。

323 :デフォルトの名無しさん:2006/11/12(日) 02:28:50
>>318,320
ありがとう。なんとなくわかったけど不思議な書き方だな。勉強になった。

324 :デフォルトの名無しさん:2006/11/12(日) 03:28:07
>>319
関数が嫌なら、TStringListを使うか。 const じゃ無理。


325 :デフォルトの名無しさん:2006/11/12(日) 03:30:48
リソースファイル(.res)を起動してから動的に取り込むってことはできませんか?
TResourceStreamはSaveToFileはあるけどLoadFromFileがないす。

326 :デフォルトの名無しさん:2006/11/12(日) 04:25:21
>>325
TResourceStream はコンストラクタで指定したリソースを扱う。
TResourceStream.Read でおk。

327 :デフォルトの名無しさん:2006/11/12(日) 05:54:52
>>326
TResourceStream.Readはバッファから読むみたいだから、あらかじめTMemoryStream.LoadFromFileででも読んでおいてから渡すんですか?
頭わるい質問でごめんね。

(´・ω・`)

328 :デフォルトの名無しさん:2006/11/12(日) 06:32:31
>>327
Create でインスタンスのハンドルを渡す必要があるけど、
resファイルからインスタンスハンドルが取得できなかったら、
TResourceStream は使えないかも。


329 :デフォルトの名無しさん:2006/11/12(日) 06:36:42
リソースだけのDLLって手があるよ。
LoadLibraryでインスタンスハンドルは取得できるよ。

330 :デフォルトの名無しさん:2006/11/12(日) 07:43:12
>リソースだけのDLLって手があるよ。

みたいですね。
Delphi リソース DLLなんかでググッってみてるんですけど、わかりやすいサイトがない…
普通のDLLをつくるサイトはみつかるんですが、

331 :デフォルトの名無しさん:2006/11/12(日) 09:51:12
>>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']);


332 :デフォルトの名無しさん:2006/11/12(日) 10:49:10
>328
(1)DLLウィザードで出来たDPRファイルから
(2)uses節とコメントを取り払う
(3){$R *.res}の部分を藻前が作ったresファイルを指定
(4)コンパイル汁

333 :332:2006/11/12(日) 10:49:53
アンカーミスです
○330
×328


334 :デフォルトの名無しさん:2006/11/12(日) 16:03:59
Loadedを使って初期化処理を追加しているコンポを動的にCreateして使うには
どうすればよいでしょうか?

335 :デフォルトの名無しさん:2006/11/12(日) 17:49:18
turboのあのアイコンは何の絵ですか?
北斗の拳の荒くれ者の絵かと思ってたけど、どう考えても不自然だと最近気づいた。

336 :デフォルトの名無しさん:2006/11/12(日) 17:58:21
>>334
そのコンポを継承して手動で Loaded を呼ぶか
TForm1内 なら TForm1(HOGE).Loaded; で強引に呼べる。
しかし、そもそもコンポの設計がおかしい。
作者に Loaded は必ずしも呼ばれないって教えてやれ。

337 :デフォルトの名無しさん:2006/11/12(日) 18:07:47
Quadruple DもたしかLoadedが必ず呼ばれるような設計になってた気がするな

338 :デフォルトの名無しさん:2006/11/12(日) 18:08:48
間違えたんで訂正。

誤:呼ばれるような設計になってた気がするな
正:呼ばれるのが前提になってたような設計になってた気がするな

339 :デフォルトの名無しさん:2006/11/12(日) 21:17:25
TObjectのMethod ClassNameはインスタンス無しで呼び出しても問題無いですか?
(s1 := TObject.ClassNameて感じで呼び出してます。)
ソース見るとclass functionとして定義されてるけど、どういう意味か分かんないです。


340 :デフォルトの名無しさん:2006/11/12(日) 21:37:50
>>333
レス、サンクスです!

341 :ななしへたぐらま ◆XcB18Bks.Y :2006/11/12(日) 21:44:27
>>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;
(※続く)


342 :ななしへたぐらま ◆XcB18Bks.Y :2006/11/12(日) 21:45:32
(※続き)

【実装】
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
今回の場合は、文字列から値を参照する回数があまりに多く、
そのたびにその処理をしていると時間がかかるため、もっと早く実行
できないかと思ったのですが、やはりそう上手くは行かないですよね。

コードの実例をありがとうございます。
挙げていただいた例は、それぞれベンチを取り、最適なものを
使わせて頂ければと思います。

親切に、どうも有り難うございました。

344 :デフォルトの名無しさん:2006/11/13(月) 00:14:26
>>343
要は文字列検索を高速にしたいってことだね、はじめにそう言えばいいのに
ハッシュ使うなり二分探索するなり、データの量や性質に合わせて最適なの探しな


345 :デフォルトの名無しさん:2006/11/13(月) 01:01:57
>>339
問題無い。

346 :デフォルトの名無しさん:2006/11/13(月) 02:07:55
パスの処理について教えてください。

パスの入った文字列の終端が、必ず'\'で終わるようにしたいのですが、適した関数はないでしょうか。

例:
A:\abc → A:\abc\
A:\abc\ → A:\abc\
A:\ → A:\


347 :デフォルトの名無しさん:2006/11/13(月) 02:10:47
>>346
IncludeTrailingPathDelimiter

逆は
ExcludeTrailingPathDelimiter

348 :346:2006/11/13(月) 02:14:27
>>347
ありがとうございます、助かりました。

しかしBDS2006のヘルプって探しにくいっすね・・。

349 :デフォルトの名無しさん:2006/11/13(月) 02:30:37
>>335
http://pc8.2ch.net/test/read.cgi/tech/1157535150/
こっちの話題じゃない?

確かに北斗の拳の悪い方の下っ端が横向いてるように見えるな。
お茶壷がひっくり返ってるようにも見える。
はて、何だろう?

350 :デフォルトの名無しさん:2006/11/13(月) 03:05:03
数学者のパスカルさんでは。

351 :デフォルトの名無しさん:2006/11/13(月) 04:19:39
俺も気になってたなんなんだあのモヒカンは

352 :デフォルトの名無しさん:2006/11/13(月) 05:16:12
お前らの教養のなさには呆れるばかりだ

353 :デフォルトの名無しさん:2006/11/13(月) 08:01:24
教養のない俺がいうのもなんだが、Delphiってギリシャかどっかの神殿かなんかだろ?
ギリシャ兵かなんかのつもりなんじゃね?

あと、北斗の拳の悪い方の下っ端とか…

354 :デフォルトの名無しさん:2006/11/13(月) 08:19:18
11.アイアンアーマー+古代ギリシャ式甲(ゴールド・赤色)
http://www.treasureshop.org/JPG/mononofu4/11.gif
古代の不思議
http://members3.jcom.home.ne.jp/dandy2/works/works_14_r.html

こういうところから来てるんじゃね?

355 :デフォルトの名無しさん:2006/11/13(月) 08:24:26
つ 名前の由来
http://ja.wikipedia.org/wiki/Delphi

356 :デフォルトの名無しさん:2006/11/13(月) 08:31:56
それより産業廃棄物みたいなアプリのアイコンなんとかして欲しい

357 :デフォルトの名無しさん:2006/11/13(月) 10:03:23
>>341
ライブラリもというのはどうかな。TStringsあるし。確かVer1.0からあるような。

358 :デフォルトの名無しさん:2006/11/13(月) 10:40:23
FAQでした誘導をお願いします

同じコードで再構築しても、exeが異なりますが、なんの情報が埋め込まれているんでしょうか?
これを、同じコード=同じバイナリにすることは可能でしょうか?

神さま、教えてください、ついでに地震がいつくるかも。

359 :デフォルトの名無しさん:2006/11/13(月) 10:43:15
VCLは、今後Unicodeに対応する予定はありますか?


360 :デフォルトの名無しさん:2006/11/13(月) 11:16:49
つ TNT

361 :デフォルトの名無しさん:2006/11/13(月) 14:11:28
すみません、教えてください。

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型にする事でできました。

363 :デフォルトの名無しさん:2006/11/13(月) 15:32:42
BDS2006にはコードテンプレートが無いんですか?

364 :363:2006/11/13(月) 15:38:09
もとい、BDS2005のコードテンプレートは開けないの?

365 :デフォルトの名無しさん:2006/11/13(月) 17:48:23
ライブテンプレートのこと?開けますよ。

表示->テンプレート。
テンプレートで右クリックして、ボタンの文字列をOFF
一番右のフィルタボタンをOFF
テンプレートの編集。

それでコードスニペットはGExperts を使うと。

366 :デフォルトの名無しさん:2006/11/13(月) 20:36:54
>>358
バージョン情報のビルド番号自動インクリメントしてたらそのたびに上がる

367 :デフォルトの名無しさん:2006/11/13(月) 20:57:09
>>358
バイナリ内にタイムスタンプが含まれてるから。
多分無効化出来ないんじゃない?

368 :デフォルトの名無しさん:2006/11/13(月) 21:02:00
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のオブジェクトがすでに異なるようです
無効化できない?


371 :デフォルトの名無しさん:2006/11/13(月) 23:42:35
>>369
BDS\4.0\Objrepos にあるbds.dci って奴じゃね。

372 :デフォルトの名無しさん:2006/11/14(火) 00:02:56
前はコードテンプレート入力用のダイアログがあったのに、
こんどはxmlで記述しなきゃいけないってのは、機能的に
質が下がった気がするのは俺だけ?

しかも、記述方法にろくな説明ないし、ヘルプ見ると、
オプションの中で設定できることになってるし。(BDS2005の残骸?)

373 :デフォルトの名無しさん:2006/11/14(火) 00:11:42
小卒の俺でさえ、そのXMLの仕組みを数分で理解したというのに・・・
テンプレートを新規作成で作ってみたら分かると思うが

374 :デフォルトの名無しさん:2006/11/14(火) 00:17:11
>>373
そういうことではない

375 :デフォルトの名無しさん:2006/11/14(火) 00:20:05
>>372
> しかも、記述方法にろくな説明ないし
http://blog.so-net.ne.jp/bousyo/2005-12-25
http://blog.so-net.ne.jp/bousyo/2005-12-27-1

376 :デフォルトの名無しさん:2006/11/14(火) 01:30:23
>>362
TClass があるよ。

377 :デフォルトの名無しさん:2006/11/14(火) 01:38:36
>>354
エイジオブエンパイアにしか見えない

378 :デフォルトの名無しさん:2006/11/14(火) 04:27:18
古代の不思議面白すぎ。 プログラミングやってる場合じゃないよ。

379 :デフォルトの名無しさん:2006/11/14(火) 10:25:35
固定長の文字列を簡単に分割する方法ってないですか?
たとえば文字列s,sa,sb,scがあってsに
s:='aabbbcccc';
と代入すると
sa='aa'
sb='bbb'
sc='cccc'
となってくれるような変数の宣言の仕方って無いですかね。

380 :デフォルトの名無しさん:2006/11/14(火) 10:38:17
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がそれぞれセットされる

381 :デフォルトの名無しさん:2006/11/14(火) 11:09:39
>>380
いえ、コンマ区切りじゃなく固定長データなんです。


382 :デフォルトの名無しさん:2006/11/14(火) 11:13:32
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のテンプレートとか編集してみたら、すぐ理解できたけど。

しかし、何十個も登録した前のテンプレートを、手打ちで移植するって効率悪い・・。

384 :デフォルトの名無しさん:2006/11/14(火) 11:25:55
Delphiの書籍を探しています
・技術評論社 Delphi応用プログラミング
・技術評論社 Delphiオブジェクト指向プログラミング
・インプレス Delphielphi 6 プログラミングバイブル

上の3つの購入を考えているのですが他にお勧めってありますか?
Delphi自体はそれなり使えます

385 :デフォルトの名無しさん:2006/11/14(火) 11:26:27
>>383
> 手打ちで移植するって効率悪い・・。
>>371

386 :デフォルトの名無しさん:2006/11/14(火) 11:28:38
>>384
Delphiコンポーネント設計&開発完全解説。PDF版もある。
Delphi Graphic Secrets―Know‐how & Libraries。こちらは入手しにくい。

387 :デフォルトの名無しさん:2006/11/14(火) 11:34:32
>>384
その3冊はどれも入手困難(名著だけど)

388 :デフォルトの名無しさん:2006/11/14(火) 12:04:16
InsideDelphi
http://www.amazon.co.jp/gp/product/4756119514
急いで買う必要はないだろうけど必要になった時に手にはいるかどうか

389 :デフォルトの名無しさん:2006/11/14(火) 12:16:47
既に手に入らなくなってるようですが。

390 :デフォルトの名無しさん:2006/11/14(火) 12:18:38
>>379
んなもんない。

SetLength(sa, 2);
しておいて
Move(s[1], sa[1], 2);
とやるのが最速か。

まあ正規表現クラスでばらして配列に突っ込むという手はなくもないが。

391 :デフォルトの名無しさん:2006/11/14(火) 12:41:39
Delphi6Personalで開発してたゲームを売ろうと思うんだが
商用利用不可って書いてあるので仕方なくPro版を買おうと思います

6pro や 7proって今でも買えるんですか?
またどのVerに移行したらいいでしょうか? .NETは使ってません

392 :デフォルトの名無しさん:2006/11/14(火) 12:49:57
ヒント:アマゾン

393 :デフォルトの名無しさん:2006/11/14(火) 12:52:17
BDS2006でもTurboDelphiでも、問題無くコンパイルできると思うよ。

394 :デフォルトの名無しさん:2006/11/14(火) 13:00:04
>>393
へんなコンポーネントでも使ってるんだろ多分

395 :デフォルトの名無しさん:2006/11/14(火) 13:13:26
>>389
中古でいいよ
新品だと9000円だぜ

396 :デフォルトの名無しさん:2006/11/14(火) 13:27:33
7proって今でもBDS2006並の値段するよな、たしか。

397 :デフォルトの名無しさん:2006/11/14(火) 13:43:16
>>395
Borlandは、規約によると中古販売品の使用を認めていないから、
それでライセンスを語る自体が無意味になるから新品以外の選択肢はないだろ


って、新品だと9000円って何さ。

398 :デフォルトの名無しさん:2006/11/14(火) 13:44:00
>>395
あ、ごめん
レス番号見間違えたorz
本の話だったわけね。
失敬失敬。

399 :デフォルトの名無しさん:2006/11/14(火) 14:03:03
ttp://bookweb.kinokuniya.co.jp/guest/cgi-bin/wshosea.cgi?W-NIPS=9971041545
在庫あるぞ

400 :デフォルトの名無しさん:2006/11/14(火) 14:23:27
しかし、今更Delphi2/3時代の本を買うってのもなあ。

401 :デフォルトの名無しさん:2006/11/14(火) 14:25:52
>>385

試してみたが、反映されない。

402 :デフォルトの名無しさん:2006/11/14(火) 15:10:06
>>401
これは失礼。
書き直しが必要みたいだな。

403 :デフォルトの名無しさん:2006/11/14(火) 15:20:54
もう普通には6,7のProは買えないのかな。

404 :デフォルトの名無しさん:2006/11/14(火) 16:05:37
いまさらいらんだろう

405 :デフォルトの名無しさん:2006/11/14(火) 16:11:47
6,7,8,2005,2006 と持っているが、2006があれば、7以前はいらない感じ。
まあ、ちょっと使い勝手は悪いけど。(同じソースを2画面で開いたりとかできなかったり)

406 :デフォルトの名無しさん:2006/11/14(火) 16:15:47
>>405
2006はもっさりして使いもんにならん。

407 :デフォルトの名無しさん:2006/11/14(火) 17:07:40
IDEは気になるほどもっさりではない。
って、実行速度の話?

408 :デフォルトの名無しさん:2006/11/14(火) 17:36:20
constで、任意に作ったレコード型を定義したいのですが、type節の後に、constって入れられるんですか?

409 :デフォルトの名無しさん:2006/11/14(火) 18:17:45
>>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));

とすることでレコード型の定数配列もできる。

410 :デフォルトの名無しさん:2006/11/14(火) 18:36:54
俺は>>409じゃないけど、
そうやって作ったレコード型とかは、型付き定数なんで、結局書き換え可能だから注意。

411 :デフォルトの名無しさん:2006/11/14(火) 20:16:32
日本語のWin32APIのヘルプの最新版ってどれ?どこ?

412 :デフォルトの名無しさん:2006/11/14(火) 20:33:40
>>411
MSDN ライブラリ 2006年6月版
http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=373930CB-A3D7-4EA5-B421-DD6818DC7C41

413 :358:2006/11/14(火) 21:57:28
もうひとつ、FAQでしたら誘導してください

2枚のEtherカードを実装しているとき
TCPコンポーネントなどで、どちらをつかうかはどのようにして選ぶことができるのでしょう

よろしくお願いします

414 :デフォルトの名無しさん:2006/11/14(火) 22:07:56
>413
コマンドラインのrouteコマンド。
くわしくは
ttp://www.microsoft.com/technet/prodtechnol/windowsserver2003/ja/library/ServerHelp/dfc5383f-5ec0-4a0f-96da-acee2da3ac2f.mspx?mfr=true
ttp://itpro.nikkeibp.co.jp/article/COLUMN/20060418/235589/
あたりで。

415 :413:2006/11/14(火) 22:09:19
>>414
ありがとうございます
みてみます


416 :413:2006/11/14(火) 23:44:56
で、コネクションするまでは、Local アドレスは定まらないってことでいいんでしょうか?

417 :デフォルトの名無しさん:2006/11/14(火) 23:49:15
>416
          ?
     い




DHCPならまーそうでしょうね。固定IPアドレスなら起動したときから定まりますけど。

418 :413:2006/11/15(水) 00:04:24
>>417
>固定IPアドレスなら起動したときから定まりますけど。
どっちのカードに定まる?ですか?

419 :デフォルトの名無しさん:2006/11/15(水) 00:08:56
>>418
それぞれのカードに

420 :413:2006/11/15(水) 00:44:35
>>419
>413でTCPコンポーネントの使い方について質問をしていた、つづきなんですが
TCPコンポーネントにおけるLOCALアドレス値はいつ決まります?


421 :デフォルトの名無しさん:2006/11/15(水) 00:59:06
Ver7です。
TChartで表示したグラフを印刷すると、チャートのタイトルが印刷されません。
ビットマップの保存ではタイトル部分もちゃんと保存されるのですが。
後、印刷時のドキュメント名が「Chart」なので、出来れば任意に変更したい
のですが可能でしょうか?

422 :デフォルトの名無しさん:2006/11/15(水) 01:24:45
>>420
なんか話しがかみ合ってない気がする
おまえさんのいうLOCALアドレスの定義をおしえてください

423 :デフォルトの名無しさん:2006/11/15(水) 08:18:39
田舎にある実家の住所です。

424 :413:2006/11/15(水) 10:29:08
>>422
わかりにくくてすみません

カードを複数枚挿しているとき
このクラス
TcpClient1:TTcpClient の
この値
TcpClient1.LocalHost
を使いたいのですが
これがいつ決定されるかということです

425 :デフォルトの名無しさん:2006/11/15(水) 14:33:02
>>423
普通に噴いた

426 :デフォルトの名無しさん:2006/11/15(水) 16:06:45
うぉ、ええとですね、TObjectListのコンストラクタをオーバーライドしたいんですが、
元がoverloadされててできないんです。

カスタムのコンストラクタを作りたい場合は、どうしたらいいでしょう。

427 :デフォルトの名無しさん:2006/11/15(水) 16:11:12
>>426
てきとーな引数作って、オーバーロードすれば?

428 :427:2006/11/15(水) 16:12:07
まちがえた、
Create以外の名前でコンストラクタつれば良いだけ。

429 :デフォルトの名無しさん:2006/11/15(水) 16:19:02
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できないって厳しいですね。

どうも有り難うございます、解決しました。

431 :デフォルトの名無しさん:2006/11/15(水) 16:38:48
>しかし、Createがoverrideできないって厳しいですね。
ちょまち、できるぞ。

432 :デフォルトの名無しさん:2006/11/15(水) 16:42:02
オーバーロードされたCreateをオーバーライドできないってことだろ


できないんだっけ?

433 :デフォルトの名無しさん:2006/11/15(水) 16:45:28
いいえ、出来ます。

434 :431:2006/11/15(水) 16:46:54
ああ、すまん
TObjectListはオーバーロードしたCreateは仮想関数になってなかったわ。

435 :デフォルトの名無しさん:2006/11/15(水) 16:47:09
なぜ出来るのか、500字で説明してください

436 :426:2006/11/15(水) 16:48:25
この場合、TObjectListの作りがあまり良くない・・って事なんすかね。

437 :431:2006/11/15(水) 16:52:00
>>426
VCLのコンポーネント自体、「かゆいところに手が届かない」ってのは多いから...
コンポーネント自体のソースは、同じユニット内に継承コンポーネント作成して、
派生元クラスのプライベートなメンバーをがんがん参照してたりするけど、
俺らはそれが出来ないから、「そのプロパティーにアクセスさせろー!」って
事はスゲー多い。

438 :デフォルトの名無しさん:2006/11/15(水) 18:47:46
つか、Delphiでは、コンストラクタはクラスメソッドなんだから、
コンポーネント以外でコンストラクタをオーバーライドする意味無いじゃんという気はする。

439 :デフォルトの名無しさん:2006/11/15(水) 18:56:28
         __ , -------- 、__
      , - ':::::::::::::::::::::::::::::::::::::::::\
     / ;;;;;;;::::::::::::::::::::::::::::::::;;;;;;;;;;;;;;\
    /,,;,,,,,  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  ,,,,,,,;:::丶
   / :::::::::;;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;:::::::::::::::ヽ
   i゙:::;:::::||::::::ii:::::::::::||::::::::::::::::::;:::::::::::::::::::::::::::゙i
  i゙::::|;;;;| |;;;;| |::::::::::| |:::::::::::::::::||:::::::::::::::::::::::::::::|
 . i゙::::::i     ''''''''''' '───' |;;;;;;;;;;::::::::::::::::::::|
  .|:::::::|,-====-´  ゙ヽ,,,,,,,,,,,,、    |:::::::::::::::::::|
  |;::::::::|,-----、    ~ニニ,,_`    |:::::::::::::::::::|
  `ヽ、i (、i´ノ     ´い,, ノ '    |;;;::::::::::::::/   なんで、初心者の試行錯誤にとどめ差すん?
  .   i ^~~~ー==--  ー'-+、     / ゙-、;;;;/
     {      ヽゝ          '-'~ノ
    λ   ''゙゙゙'''-''---、       /-'^
     ヽ,    ^~^         (
     /  `丶 、     , -   /^l
     |   /( ノ `''''''´~  __, - '  ゙i、
    {  / /| ̄ ̄ ̄ ̄   _,- '¨ }
    {/ /  ゙ー────'~   \|
    /               ヽ  \

440 :デフォルトの名無しさん:2006/11/15(水) 19:05:24
オーバーライドしないと継承元を呼べないと勘違いしてるとかありそうだな。

441 :デフォルトの名無しさん:2006/11/15(水) 19:19:39
今日のDelphianの夕食を教えてください。お願いします。

442 :デフォルトの名無しさん:2006/11/15(水) 19:28:31
ペペロンチーノと野菜サラダ。


443 :デフォルトの名無しさん:2006/11/15(水) 22:41:31
カレイの煮付け
かぶと手作りベーコンの炒め物
わかめとごぼうのサラダ
五穀米
ほっけのつみれ汁

もずく酢


444 :デフォルトの名無しさん:2006/11/15(水) 22:43:50
塩味のカップラーメン 1
冷凍のチャーハン 1/2
みかん 1

445 :デフォルトの名無しさん:2006/11/15(水) 22:44:22
>>440
別のコンストラクタからinheritedで呼べばいいのでしょうが、
直感的にCreateを使うので、できればCreateメソッド内に
コードを書きたかったのです。

通常のCreateと同じ引数なので、overloadできません。
まあ、ダミーの引数を付けてoverloadってのも手ですが、
Createするときにどれを選んで良いかわかりづらいので・・。

446 :デフォルトの名無しさん:2006/11/15(水) 22:46:31
s:string の中に、 _ (アンダーバー)が何個あるか数えたいのですが、
そういう関数ってありますか?

447 :デフォルトの名無しさん:2006/11/15(水) 23:24:37
>>441
鯛のマリネ。
白身魚のフライ。
かぼちゃの煮物。
なすの天ぷら。
カレー風味の野菜炒め。
豆の和え物。
にら玉。
りんご1個。
ライス。

448 :デフォルトの名無しさん:2006/11/15(水) 23:24:52
>>446
StringReplaceを使うか、WideStringに変換して数える。
高速にやりたいのなら、全角文字に注意しながら1byteづつ調べる。

449 :ミ,,゚Д゚彡 ◆A6VzDeLphI :2006/11/16(木) 00:13:26
>>446
http://delfusa.main.jp/delfusalibrary/20060527212010/StringUnit/StringUnitLight.pas

function StrCount

を使ってみてください。



450 :446:2006/11/16(木) 01:05:30
>>449
うわあなんだこの神ライブラリ・・。
凄く助かります、ありがとう。

451 :デフォルトの名無しさん:2006/11/16(木) 08:29:36
>>449
フサさん、これのInStrってIndexにマイナス値入れるとお尻から見てくれるのかな?
あと、OracleでいうところのSUBSTR(CopyのIndexが正逆指定可能なヤツ)って
実装されてません?

いや、興味本位で聞いてみただけです。ごめんなさい。

452 :デフォルトの名無しさん:2006/11/16(木) 13:55:36
オブジェクトの名前って、やっぱfrmMain、btnOk、chkCheckみたいな感じが標準?なんでしょうか
みなさんはどういう風に名前付けてます?

453 :デフォルトの名無しさん:2006/11/16(木) 13:57:13
>>452
>chkCheck
チェキチェキラの江戸っ子ですな?

454 :デフォルトの名無しさん:2006/11/16(木) 14:01:32
破損クラスタです><

455 :デフォルトの名無しさん:2006/11/16(木) 14:02:46
Form_Gyoumu
Button_Jikkou
CheckBox_Sentaku

みたいな長くてクラス名そのまんまの方が好きだな。

456 :デフォルトの名無しさん:2006/11/16(木) 14:05:28
フォーム一個のプログラム作る時に、
・プロジェクト名
・ユニット名
・フォーム名
が同じ名前しか思い浮かばなくて悩む事がある。

457 :デフォルトの名無しさん:2006/11/16(木) 14:09:16
>>445
どうにも希望が理解できないんだけどreintroduce付ければいいんじゃね?

458 :デフォルトの名無しさん:2006/11/16(木) 14:10:15
>>456
どんなオブジェクトに育ってほしいかをよく考えて(^.^メ)

459 :デフォルトの名無しさん:2006/11/16(木) 14:14:52
>>456
俺はいつも↓
プロジェクト名→アプリケーション名
ユニット名→Main
フォーム名→frmMain

460 :デフォルトの名無しさん:2006/11/16(木) 14:30:33
なるほどー、確かにユニットで悩むんだよなぁ
あと、イベントに名前付けます?

461 :デフォルトの名無しさん:2006/11/16(木) 14:32:29
イベントに名前って?
名前は勝手に命名されるのでは

462 :デフォルトの名無しさん:2006/11/16(木) 14:34:08
>>460
自前でコーディングしてコントロールのハンドラに割り付ける時以外は
デフォルトで行くけどね。
コメント入れとけば分かるから。

463 :デフォルトの名無しさん:2006/11/16(木) 14:45:36
自作イベントは、
>Event_
ってプレフィックス付ける。

全体で、
>Event_OnChange
とか。

気持ち悪いけど、目に留まるほうが良いと思う。

464 :デフォルトの名無しさん:2006/11/16(木) 19:09:13
誰でも、プロジェクト名やコンポーネント名に、好きなエロゲのキャラの名前をつけていると思っていました

465 :デフォルトの名無しさん:2006/11/16(木) 19:37:08
コンポーネント名はバイナリに残るから気をつけろよw

466 :デフォルトの名無しさん:2006/11/16(木) 20:29:02
>>464
lsたん乙

467 :デフォルトの名無しさん:2006/11/16(木) 20:56:09
>>464
うちの上司にそのコーディング規約頼んでおく。
バグをいれたのが誰か探しやすくなるし、いいね

468 :デフォルトの名無しさん:2006/11/17(金) 01:28:57
クラスのこととか勉強中です。
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;

よろしくお願いします。

469 :デフォルトの名無しさん:2006/11/17(金) 01:41:39
with do は絶対使わない、っていう人もいるな。
一つだけならいいが、入れ子になったらハチャメチャ。第一、IDE のアシストも
受けられないし。

一つだけでも、TForm1 のプロパティーやメソッドとかぶってるとややこしいことに
なるし。

470 :デフォルトの名無しさん:2006/11/17(金) 01:44:05
> test(Create);

こんなのははじめて見た・・・

471 :デフォルトの名無しさん:2006/11/17(金) 01:51:47 ?2BP(0)
オブジェクトからコンストラクタ呼んだら初期化されないか?

472 :デフォルトの名無しさん:2006/11/17(金) 01:59:05 ?2BP(0)
脊髄反射でごめん。
TStringList.Create は TObject.Create だった。初期化はされないや。

識別子の解決は一番深いスコープから優先的されるから、一応期待通りの動作にはなるだろうけど、
test(Create) とか一般的ではないし、可読性の問題もあるので、特に理由がないなら変数に入れた方がいいと思うけどね。

473 :デフォルトの名無しさん:2006/11/17(金) 02:10:32
回答ありがとうございます。
参照する方法がないっていう記述を何箇所かで見たので、
これにも致命的問題があるのかと思って質問しました。

>TStringList.Create は TObject.Create だった。初期化はされないや。
Delphiに元々ついてくるクラスでCreateで初期化とか、
何か実行するようなクラスってあるんですか?
と、自分が使ってるのはDelphi6 personalなんですけれど。

474 :デフォルトの名無しさん:2006/11/17(金) 02:18:58 ?2BP(0)
>>473
>Delphiに元々ついてくるクラスでCreateで初期化とか
大多数のクラスは何かしらやってる。
また、現状でやっていないクラスも、今後もそうであるという保証があるわけではない。

475 :デフォルトの名無しさん:2006/11/17(金) 02:24:17
>大多数のクラスは何かしらやってる。
そうですか…いろいろ試してみます。
ありがとうございました。

476 :デフォルトの名無しさん:2006/11/17(金) 03:11:00
クラスに自分を参照するプロパティかメソッドを付けておけば
一般的な構文で実現できるのではないだろか。

しかしメリットは感じない。。。

477 :デフォルトの名無しさん:2006/11/17(金) 11:40:54
Delphi6 Personalを使ってます。
Delphiのエディタをviっぽいキーバインドにすることはできないでしょうか?

フリーカーソル無効化アドインを使って大分使いやすくなったので
できればキーバインドも使い慣れたvi風にしたいと思ってます。
ツールに外部エディタとして好きなエディタを登録すればいいみたいですが、
Delphiのエディタと外部エディタを行ったり来たりするのが少し面倒なので
できればDelphiのエディタだけに統一したいと思ってます。

478 :Delフサギコ ◆A6VzDeLphI :2006/11/17(金) 23:00:01
>>451さん

    ∧,,∧  レスがあるのは
   ミ,,゚Д゚彡   大変感謝です
    ミ つ旦)~~
  〜と,,,~),,~)

Indexにマイナス値には対応してないと思います。
予測されうる仕様はtestInStrに記述しています。

マイナス値に対応しているとすれば、testInStrにテスト関数を
用意しているのです。

おしりからみるという仕様がいまひとつわからないですが
AnsiPosBackward、で実装している事なのかな?

testRangeAnsiPosForwardBackward
で、テスト関数をみて仕様を理解していただくと
早いかと思います。


479 :デフォルトの名無しさん:2006/11/18(土) 00:16:06
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)^ でもダメでした。

480 :デフォルトの名無しさん:2006/11/18(土) 00:20:48
>>479
var
p : array of integer;
begin
SetLength(p, 255)
p[0] := 123;
p[1] := 456;

481 :デフォルトの名無しさん:2006/11/18(土) 00:52:06
type
 TIntegerArray = array[0..99999] of Integer;
 PIntegerArray = ^TIntegerArray;
として、
var
 P: PIntegerArray;
と宣言するか、
PIntegerArray(P)[0] := 123;
の様にキャストして使うか。

482 :デフォルトの名無しさん:2006/11/18(土) 09:24:51
>>481
 TIntegerArray、PIntegerArrayはSystem.pasで定義されてるよ

483 :デフォルトの名無しさん:2006/11/18(土) 09:31:58
>>479
配列として扱うなら配列型使うのが素直だけど

p, pp: PInteger;

pp:=p;
pp^ := 123;
Inc(pp);
pp^:= 456;

でもよい


484 :デフォルトの名無しさん:2006/11/18(土) 09:35:49
PInteger(PChar(p)+SizeOf(Integer)* 0)^:= 123;
PInteger(PChar(p)+SizeOf(Integer)* 1)^:= 456;

つうのもあるな。


485 :デフォルトの名無しさん:2006/11/18(土) 11:21:49
まあ、上の何人かが書いたソースを見てわかるとおり、
Delphiではポインタを使うのはポインタ型を作らなくちゃいけなくて面倒なようになってるから、
動的配列で代用できるときは動的配列を使った方がいいさね。

486 :デフォルトの名無しさん:2006/11/18(土) 13:17:23
>>485
上のレス見ててよく分からなかったけど、なんとなく分かった。
ありがとう。

487 :デフォルトの名無しさん:2006/11/18(土) 16:02:04
FB1.5とD7を使用しています。
DBCtrlGidで入力中に直前のレコードの同じフィールドのデータを現在のフィールドにコピーしたいのですが、
どのような方法が考えられるでしょうか。
直前のレコードはcommitされていない場合もあります。
また、直前のレコードが最後に編集/postしたレコードとは限りません。
2行目まで入力してから1行目を編集して3行目を新規に追加するとき2行目のデータを参照したいと言うことです。
DBとの接続はTIBQUERYを使用しています。


488 :デフォルトの名無しさん:2006/11/18(土) 16:16:27
>>487
書き忘れましたがキャッシュアップデートを使用しています。

489 :デフォルトの名無しさん:2006/11/18(土) 17:41:03
ClientDataSet をクローンして、そっちでカーソル移動。
現在のカーソルをブックマークしておいて、カーソル移動で探しにいく。

490 :デフォルトの名無しさん:2006/11/19(日) 01:11:20
OSをVistaRC2に変えてから、dprをダブルクリックで開こうとすると

モジュール'coreide60.bpl'のアドレス 008818D0 でアドレス 00000008 に対する読み込み違反がおきました。

とエラーがでるようになってしまいました
ファイル→プロジェクトを開く
だとエラーはでません

なにか対策方法はないでしょうか?
また、Vistaが原因か知りたいので、他にこのほうな症状が出てる方、出てない方いればレスください

491 :デフォルトの名無しさん:2006/11/19(日) 01:12:25
Vistaには対応しておりません

492 :デフォルトの名無しさん:2006/11/19(日) 01:40:05
RC2だからね。

493 :デフォルトの名無しさん:2006/11/19(日) 01:40:53
> モジュール'coreide60.bpl'

Delphi 6 だし。

494 :デフォルトの名無しさん:2006/11/19(日) 03:06:08
>>484
>PInteger(PChar(p)+SizeOf(Integer)* 0)^:= 123;

PInteger(Integer(P) + SizeOf(Integer) * 0)^ := 123;
の方が自然だと思うけど、世間じゃ PChar にキャストするの?

495 :デフォルトの名無しさん:2006/11/19(日) 03:26:13
C#に乗り換えろというメッセージか?

496 :デフォルトの名無しさん:2006/11/19(日) 04:14:35
>>494
俺は>>484じゃないけど、PCharだと、Delphiのポインタ型の中では珍しく+演算子が使えるのよ
C++っぽくさ。

497 :デフォルトの名無しさん:2006/11/19(日) 09:45:38
>>485
だからどれも定義済みだというのに。

498 :デフォルトの名無しさん:2006/11/19(日) 09:56:08
VISTAで動かないなら「故意に動かないように細工した」と告訴される可能性も出てくるのだが

499 :デフォルトの名無しさん:2006/11/19(日) 10:10:04
>>497
初心者には何がどこに定義してあるかわからないじゃん
しかも定義してあるって何がどう定義してあるかは、
Delphiのポインタ型の宣言について知っていなくちゃならないじゃん
自分で定義したレコード型その他の型のポインタはもちろん自分で定義しなくちゃならんし

そういう意味で、C/C++に比べてDelphiではポインタを使うのがめんどいってことっしょ

500 :デフォルトの名無しさん:2006/11/19(日) 12:37:30
ポインタ自体を意識しなくてもポインタ使用並みの効果が得られる工夫があれこれされてると思うぞ。
おじさんは。

501 :デフォルトの名無しさん:2006/11/19(日) 13:28:37
>>500
おまえに言われんでもわかっとる

502 :デフォルトの名無しさん:2006/11/19(日) 13:46:52
>>499
日本語でお願い

503 :デフォルトの名無しさん:2006/11/19(日) 13:48:28
CD/DVD焼ソフトみたいにCD/DVD挿入時の自動再生を
一時的に無効にする方法を教えてください。

504 :デフォルトの名無しさん:2006/11/19(日) 13:50:36
>>499
定義されてるし、前期のようにいろいろなやり方があるしぜんぜん面倒じゃないじゃん。
面倒かどうかを言い出したらbegin面倒、「{」にしろって話といっしょ。

505 :デフォルトの名無しさん:2006/11/19(日) 15:15:43
DelphiとBCB、どっちの方が速いですか。

506 :デフォルトの名無しさん:2006/11/19(日) 15:21:01
begin は面倒だから、「{」にしてください

507 :デフォルトの名無しさん:2006/11/19(日) 15:29:26
>>505
コンパイル速度の話ならDelphiの圧勝

508 :デフォルトの名無しさん:2006/11/19(日) 15:44:27
DelphiとCCBに見えた・・・

509 :デフォルトの名無しさん:2006/11/19(日) 15:48:33
DelphiとBCB、どちらのタイピングの方が早いですか。
どちらの方が保守しやすいですか?

510 :デフォルトの名無しさん:2006/11/19(日) 16:02:03
>>509
タイピング速度はスキル依存なんで人それぞれ
保守は可読性の高さでDelphiと言いたいが
言語スキル依存なのでやっぱり人それぞれ

511 :デフォルトの名無しさん:2006/11/19(日) 17:35:30
質問があります。

Delphiをアンインストールしてから再インストールすると、
すべての状態(ツールバーや、フォントなどの設定など)が
初期状態になってしまいますが、これらの設定を保存してい
るファイルは何でしょうか?

再インストール後に復元したい設定は、

・ツールバーの状態
・コードテンプレートの内容
・フォントの種類、フォントサイズ、フォントの色

などです。

512 :デフォルトの名無しさん:2006/11/19(日) 17:49:22
レジストリ

513 :デフォルトの名無しさん:2006/11/19(日) 18:05:08
教えてください。

オブジェクトを引数として渡す時、値渡し/参照渡しのどちらの書き方をしても
渡されるのは「コピー」ではなく「オブジェクトのメモリアドレス」なので、
呼び出し先での変更が必ず反映されると考えていいのでしょうか?

携帯から書き込んでいるため、具体的なソースを書けず分かりにくいと思いますが、
なんとなくでも質問の意味が分かった方がいたらご回答お願いします。

514 :デフォルトの名無しさん:2006/11/19(日) 18:13:14
>>513
あってる。
つか、オブジェクトの参照渡し(つまり結果的には参照の参照渡しになるわけだが)にしても、
Delphiのコンパイラが最適化でオブジェクトの値渡しに直しているらしいよ。

515 :デフォルトの名無しさん:2006/11/19(日) 18:14:00
↑は、constでクラスを渡したような場合ね
varだとまた別の話。

516 :デフォルトの名無しさん:2006/11/19(日) 18:27:18
>>511
インストールしたフォルダにあるdelphi32.* ファイルも忘れずに。
bds だと、Application Dataも保存しておいた方が良い。

517 :513:2006/11/19(日) 18:33:46
>>514 早速の回答ありがとうございます。
ネットでいろいろ調べて何となく「こういうことなのかな?」と思ったのですが
イマイチハッキリした確証が得られず悶々としてました・・・解決してすっきりです(・∀・)
どうもありがとうございました。

518 :511:2006/11/19(日) 18:39:27
>>512>>514
ありがとうございます。

519 :n:2006/11/19(日) 20:20:51
表示されているウィンドウを画像ファイルとして書き出すプログラムを作るにはどうすればいいのですか?どなたか教えてくださいm(__)m

520 :デフォルトの名無しさん:2006/11/19(日) 21:24:39
Delphi キャプチャ でググル

521 :デフォルトの名無しさん:2006/11/19(日) 21:26:25
でるひきゃぷちゃでぐぐる

522 :デフォルトの名無しさん:2006/11/19(日) 21:29:10
Delphiをでるひと読む奴・・・

523 :デフォルトの名無しさん:2006/11/19(日) 21:37:53
涼宮デルヒの憂鬱

524 :デフォルトの名無しさん:2006/11/19(日) 21:38:22
涼宮デルヒの憂鬱

525 :デフォルトの名無しさん:2006/11/19(日) 21:59:07
>>522
Delphi1.0が発売された直後に、アメリカ出張した同僚が居たんで
「でるふぃー買ってきてくれ」と頼んだ
が、買ってきてもらえなかった
曰く、「店員にでるふぃーなんて無いって言われたぞ」

526 :デフォルトの名無しさん:2006/11/19(日) 22:02:40
Delphiをでるふぃーと読む奴・・・

527 :デフォルトの名無しさん:2006/11/20(月) 01:57:09
史実のデルポイも衰退していったんだよね。

528 :デフォルトの名無しさん:2006/11/20(月) 02:00:07
DelphiとBrainfuck、処理はどっちが高速ですか?

529 :デフォルトの名無しさん:2006/11/20(月) 03:36:29
Delphi7でクラスに静的フィールドを持たせたいのですが、
TurboDelphiで使えるclass varが使えないみたいなのですが、
どうすればいいでしょうか?

530 :デフォルトの名無しさん:2006/11/20(月) 04:21:47
使えないのであきらめてください。
別の方法での実装を考えてください。

531 :デフォルトの名無しさん:2006/11/20(月) 04:25:00
HSPならできるのにね

532 :デフォルトの名無しさん:2006/11/20(月) 04:26:02
unitのプライベートな変数でやる。

533 :529:2006/11/20(月) 05:11:28
回答ありがとうございます。

どうやら7は静的フィールドを作れないみたいですね。
という事で、ユニットの変数でやりたいと思います。

534 :デフォルトの名無しさん:2006/11/20(月) 07:37:25
class var って、どんなのか知りたい。

535 :デフォルトの名無しさん:2006/11/20(月) 09:47:41
>>529
メソッドを作って、その中で型付き定数を使う。
その後は、必要に応じて、そのメソッドをプロパティでラップするとか。

536 :n:2006/11/20(月) 15:57:11
>>520
ありがとうございます!^-^

537 :デフォルトの名無しさん:2006/11/20(月) 16:12:03
指定したファイルを監視して、もし変更があれば何か処理をさせたいのですが
どのようにすればよいのでしょうか?

538 :デフォルトの名無しさん:2006/11/20(月) 16:41:50
手抜きするならタイマーイベントで対象ファイルの更新日時を取得して
違っていれば何らかの処理を
ちゃんとやるならスレッドを立ててFindFirstChangeNotification、FindFirestNextNotification
FindCloseChangeNotification、WaitForSingleObjectを使る

539 :デフォルトの名無しさん:2006/11/20(月) 16:42:24
>>538
ありがとうございます。
さっそく調べてみたいと思います。

540 :デフォルトの名無しさん:2006/11/20(月) 16:44:04
サンプル教えるからケツ出せよ
http://forum.nifty.com/fdelphi/samples/00969.html

541 :デフォルトの名無しさん:2006/11/20(月) 16:44:53
>>540
ありがとうございます。
( *  )これでいいでしょうか?

542 :デフォルトの名無しさん:2006/11/20(月) 16:49:00
汚い穴だなぁ

543 :デフォルトの名無しさん:2006/11/20(月) 18:29:06
なんで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文字ずつ取り出すのが一番でしょうか…。


547 :デフォルトの名無しさん:2006/11/20(月) 22:11:02
まず、文字列処理について勉強すべし

548 :デフォルトの名無しさん:2006/11/20(月) 22:23:14
まず、そんなコンポーネントがないか探すべし

549 :デフォルトの名無しさん:2006/11/20(月) 23:23:27
RichEdit1の太字部分を、Memo1で<b>〜</b>に置換するコンポなんかあるかよ

550 :デフォルトの名無しさん:2006/11/20(月) 23:57:10
MemoからRichEditへの一方通行でいいんじゃね?

551 :デフォルトの名無しさん:2006/11/21(火) 04:02:35
>>550
うむ。

552 :デフォルトの名無しさん:2006/11/21(火) 08:18:21
ttp://hp.vector.co.jp/authors/VA015850/delphi/tips/etc13.html
ttp://homepage1.nifty.com/ht_deko/tech002.html#tech021
↑これらを参考にマニフェストをプロジェクトに組み込むと
「[エラー] RLINK32: Unsupported 16bit resource in file "C:\Documents and Settings\Zenin\Program Files\ResUpdate\Commander\manifest.res"」
って出ちゃうんですが、上手く組み込むにはどうすれば…?

553 :デフォルトの名無しさん:2006/11/21(火) 08:26:25
あ、パス晒しちゃった…orz

554 :デフォルトの名無しさん:2006/11/21(火) 08:28:09
16bit resourceはサポートしてないって書いてるだろ
マニフェストファイルの中身も晒さないで質問されても分かるわけない
こちとらオールドタイプなもんで

555 :デフォルトの名無しさん:2006/11/21(火) 08:34:38
マニフェストなんて使わずに、コンポーネントを使ったら
http://www.lischke-online.de/ThemeManager.php

そういう話じゃない?

556 :デフォルトの名無しさん:2006/11/21(火) 09:22:40
>>555のリンク先のWindows XP manifest resourceってのを使ったらいい感じになりますた

557 :デフォルトの名無しさん:2006/11/21(火) 09:57:10
カメラの回転ムズイ…

558 :デフォルトの名無しさん:2006/11/21(火) 12:15:17
Delphi 6 Personal で Mediaplayer コンポーネントを使おうとすると
use節に Mplayer が追加されます
この状態で実行すると
MPlayer.pasが見つからないとのエラーが出ます。

googleなどで調べましたら
Pro版なのでは
C:/Program Files/Borland/Delphi6/Source/Vcl/MPlayer.pas
このアドレスにファイルがあるとの記述が見つかりました

しかしPersonal版の私の同アドレスには
MPlayer.pasがありません

Personal版ではMediaplayer コンポーネントは仕様できないのでしょうか?
それとも何か解決策があるのでしょうか?
お手数ですが教えていただければ幸いです

559 :デフォルトの名無しさん:2006/11/21(火) 12:36:35
無いなら使えないのでしょう。
ActiveXのインストールで、MediaPlayerでも入れて使いましょう。

560 :デフォルトの名無しさん:2006/11/21(火) 12:37:00
MPlayer.pasかMPlayer.dcuがあるかどうか調べる
なかったら諦めて

あればそのパスを上のメニューからプロジェクト→オプション→
ディレクトリ/条件タブの検索パスに追加

561 :デフォルトの名無しさん:2006/11/21(火) 12:40:54
ターボ使いなよ

562 :デフォルトの名無しさん:2006/11/21(火) 12:46:10
>>558
Media PlayerってSystem/Media Playerにあるやつ?
俺も6 Personalだけどコンパイルできたぞ。
ライブラリのパスとかちゃんと通ってるか?


563 :デフォルトの名無しさん:2006/11/21(火) 14:18:52
>>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;

どこかおかしいですか?

564 :デフォルトの名無しさん:2006/11/21(火) 16:53:46
>>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にして
問題はおおかた解決したのですが、これを特定のファイルが更新されたときだけ
何か処理したいのですがいい方法は無いのでしょうか?

今の処理ですと同一フォルダに有る、監視したくないファイルが更新されていても
イベントが実行されてしまいます。

どのファイルが更新されたというような返り値があればベストなのですが・・・。

566 :デフォルトの名無しさん:2006/11/21(火) 18:57:28
ポインタを渡す関数で、ポインタの指す場所を関数内では読み取り専用と規定することはできますか。
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です。

あれこれ調べながらこういう書き方をするのかな?という感じで
手探りでやってみたのですが・・・
ご教授のほど、よろしくお願いいたします。

また、コレ読んでおけ!ってのがあったら、
教えて頂ければ幸いです。

568 :デフォルトの名無しさん:2006/11/21(火) 20:57:12 ?2BP(0)
とりあえず、with 文使うメリットが全く無いな。

569 :デフォルトの名無しさん:2006/11/21(火) 21:52:44
>また、コレ読んでおけ!ってのがあったら、
>教えて頂ければ幸いです。

良書はことごとく廃刊ってのがDelphiの現実だ。


570 :デフォルトの名無しさん:2006/11/21(火) 22:42:58
Delphi3の頃は良書たくさんあったなぁ。うんこ本もたくさんあったけど。
今は本に書いてある事って全部Webでわかっちゃうし、買う意味あんのか。

571 :デフォルトの名無しさん:2006/11/21(火) 22:57:20
塚越たんのDelphiオブジェクト指向本のような解説はWEB上でもなかなかないしなー。

572 :デフォルトの名無しさん:2006/11/22(水) 00:02:33
俺、Delphi本メチャ持ってるんだけど、(Delphi2.0〜5、6くらいまで)
放出したらいい値になるかな?オフィシャルコースウェア、洋書、DBやCGI、DelphiXやらゲーム制作本までいろいろあるでよ。
30冊以上はあるかな…

573 :デフォルトの名無しさん:2006/11/22(水) 00:07:18
>>572
トイレットペーパー二つくらいにはなるんでは?

574 :デフォルトの名無しさん:2006/11/22(水) 00:07:23
VistaだとDelphi6.0は使えないって聞いたんですが、ほんとでしょうか?

575 :デフォルトの名無しさん:2006/11/22(水) 00:23:57
試してみたら?
今日Vistaのリリース版出たね。今DL中。

Delphiは2006なので試せない。

576 :デフォルトの名無しさん:2006/11/22(水) 00:25:40
>VistaだとDelphi6.0は使えないって聞いたんですが、ほんとでしょうか?

マジだったらDelphi4をメインで使ってる俺はどうすればいい?

577 :デフォルトの名無しさん:2006/11/22(水) 00:37:37
Vistaを使わなければいい。


578 :デフォルトの名無しさん:2006/11/22(水) 01:29:52
Vista用のアプリってD7で作れるんですか?


579 :デフォルトの名無しさん:2006/11/22(水) 02:45:01
>>578
動かないことはない。

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;

汚いコードですが、何が問題なのか、教えてくださいませんか?

581 :デフォルトの名無しさん:2006/11/22(水) 03:05:56
>>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
ttp://www.geocities.jp/classiclll_newweb/Tutrial/ClassLoc/applet/Loc.txt
とか参考にするといいかもしんない

584 :デフォルトの名無しさん:2006/11/22(水) 03:17:38
Cos,Sinはs_mathpackの関数じゃない罠。

585 :デフォルトの名無しさん:2006/11/22(水) 03:44:14
要するに、 p' = pcosθ+r×psinθ+r<r|p>(1-cosθ) ; ||r||=1
がしたいわけでしょ、>>583のサイトのloc.rotate(軸、角度)もそれだし。

コードよく読んでないけど、間違ってないように見える。なんだろうね、わかんね。



586 :デフォルトの名無しさん:2006/11/22(水) 03:56:54
>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
だから、やっぱりあってるような…。

588 :デフォルトの名無しさん:2006/11/22(水) 07:00:28
>>586
> VistaだとDelphi6.0は使えないって聞いたんですが
どこで聞いたのですか? >>490 の話?

これは使えないってレベルじゃないけど・・・あんまり話を広げないように。
2chはアンチがデマを流そうと、てぐすね引いているから
ソースの確認や検証が大切。

Vista はMy Document みたいな物のパスや環境変数が変わっているから
そのあたりの調整が必要と思われ。

589 :デフォルトの名無しさん:2006/11/22(水) 08:40:34
>>586
http://itpro.nikkeibp.co.jp/article/NEWS/20061121/254439/
http://www.microsoft.com/japan/windowsvista/compatible/

590 :デフォルトの名無しさん:2006/11/22(水) 10:09:06
delphi 6 personal の使用許諾コードの取得ができないのですが
もうだめぽなのでしょうか?

591 :デフォルトの名無しさん:2006/11/22(水) 10:25:19
メールが来るまで少し待て。

592 :デフォルトの名無しさん:2006/11/22(水) 10:48:29
>>587
わ・・訳わかんねぇ・・
高校で授業聞いておけばよかったぜぇ

593 :デフォルトの名無しさん:2006/11/22(水) 11:24:26
とりあえずVista製品版をインストールした俺が来ましたよ。

594 :567:2006/11/22(水) 11:46:12
>>568
おっしゃるとおりだと思います。
どう書けばいいかわからず、
とりあえずコードが通ったので、そのままにしてました。

堀越氏の本は古本を買い集めて、
「はじめての〜」は読みました。
その本で紹介されているグラフィック描画ツールに印刷機能を
付けてみようとやってみているのですが・・・

595 :デフォルトの名無しさん:2006/11/22(水) 12:56:18
>>590
delwikiにそこらへんは書いてあるよ

596 :デフォルトの名無しさん:2006/11/22(水) 13:22:29
まあ使用許諾コードなんていらないよね?

597 :デフォルトの名無しさん:2006/11/22(水) 13:24:04
めんどくさいなら割っとけ

598 :デフォルトの名無しさん:2006/11/22(水) 13:27:19
>>597
そういう事を勧めるなよ基地外

599 :デフォルトの名無しさん:2006/11/22(水) 13:28:03
プログラマーの言葉とは思えんな

600 :デフォルトの名無しさん:2006/11/22(水) 13:33:12
>>594
実はTPrinter.Canvas.CopyRectはTCanvas.CopyRectとは異なる
なので別のCanvasをPrinter.Canvasにコピーという用途には使えない
Printer.CanvasにもPaintBoxに描画したのと同じように記述すればよい

601 :580:2006/11/22(水) 13:41:58
皆さんありがとうございました。
結局、回転したいベクトルの初期化をするときに、識別子を間違えていました。
なんていうかほんともう、ごめんなさいです。

602 :デフォルトの名無しさん:2006/11/22(水) 13:43:39
ちなみにプリンターから印刷されないのは
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');
とか書くと印刷されるよ



603 :デフォルトの名無しさん:2006/11/22(水) 13:58:36
>  あれ、Canvasに何も無いじゃん( ´,_ゝ`)プッ

デバイスコンテクストのヤツ、ムカつく。

604 :デフォルトの名無しさん:2006/11/22(水) 14:04:25
関数RoundやTruncの処理内容を見たいのですが、System.pasを見ても、どこにも
 function Round(X: Real): Int64;
なんて書いてありません。
ヘルプには 「ユニット System」 と書かれてありますが、これは嘘で、別のところに書かれているのでしょうか。

605 :デフォルトの名無しさん:2006/11/22(水) 14:44:12
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使えば済む話なのかな・・・と書籍を読み進めて思いました。

608 :デフォルトの名無しさん:2006/11/22(水) 17:02:59
>>607
うん
なんでTPaintBox使ってるのか不思議だった

609 :CodeGear(笑):2006/11/22(水) 18:28:58
CodeGear(笑)

610 :ななしへたぐらま ◆XcB18Bks.Y :2006/11/22(水) 18:38:32
>>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ユニットを使いたくないケースでは自分で宣言しなくちゃならんな

612 :デフォルトの名無しさん:2006/11/22(水) 21:33:28
あんまり無いと思うが、自分で宣言したくないケースではWinodwsユニットを使わなくちゃならんよ

613 :デフォルトの名無しさん:2006/11/23(木) 01:27:23
>>574
ヘルプが起動しない
製品版なら後からファイル足せば大丈夫だが
ベータやRCは無理

614 :デフォルトの名無しさん:2006/11/23(木) 02:26:11
Vistaにはwinhlp32.exeが付いていないんだっけ。
Delphi6だけの問題じゃないよ。


615 :デフォルトの名無しさん:2006/11/23(木) 04:28:48
delphi6 personalから turbo delphiに移行しようかと思ってるんですが?
大分仕様変わってますか?
書籍等買いなおす必要はあるのでしょうか?

教えて下さい

616 :デフォルトの名無しさん:2006/11/23(木) 04:34:07
> 大分仕様変わってますか?

いいえ。

基本的にはIDE が変わっているだけです。
コンポーネントを追加できないなどの制限はありますが
機能的にはProfessional なのでDB 接続が出来るようになります。

> 書籍等買いなおす必要はあるのでしょうか?

いいえ。

617 :デフォルトの名無しさん:2006/11/23(木) 11:36:30
>Vistaにはwinhlp32.exeが付いていないんだっけ。

なんでwinhlp32.exeくらいつけないんだろうな。
俺がつくったヘルプってこればっかりなのに。

618 :デフォルトの名無しさん:2006/11/23(木) 13:08:07
DBGridのセルにイメージ(警告マーク等)が表示されてるのを見たような気がするんだけど、セルに小さいアイコンとか表示させる方法、しってる方いませんか?

619 :デフォルトの名無しさん:2006/11/23(木) 13:22:49
>>617

同名のファイルは入ってて、起動すると
「HLP形式のヘルプはサポート終了するぞ。 どっかからWinhlp.32.exe持ってくれば
動くが、再配布は禁止だからな」って主旨のメッセージを表示した。


620 :デフォルトの名無しさん:2006/11/23(木) 13:25:03
>「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;

これからどう増やせばいいでしょうか?

623 :デフォルトの名無しさん:2006/11/23(木) 14:09:22
リレー動作てなんすか

624 :デフォルトの名無しさん:2006/11/23(木) 14:24:03
有接点リレーのことです

625 :デフォルトの名無しさん:2006/11/23(木) 15:45:11
リレーはわかるが、何がしたいのかよくわからない。

よくわからんが、チェックボックス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;

こうだった。

627 :デフォルトの名無しさん:2006/11/23(木) 15:56:17
>>622
マルチはいくないぞ!

628 :デフォルトの名無しさん:2006/11/24(金) 13:44:09
delphi6でMP3を実行するプログラムを作ろうと思い
あちこち調べたら
TMP3Playerコンポーネントを使うのが良いとの記述を多く見かけたのですが

肝心のTMP3Playerコンポーネントのダウンロード先が全てリンク切れになってるんですが
現在は手にはいらないのでしょうか?

また現在mp3ファイルの実行するには
どのようなコンポーネントまたは関数を使えばよいのでしょうか?
お手数ですが教えて下さい

629 :デフォルトの名無しさん:2006/11/24(金) 14:00:23
Delphi標準のTMediaPlayerコンポーネントで
mp3ファイル再生できるよ
但し、環境によっては再生出来ないこともある

630 :デフォルトの名無しさん:2006/11/24(金) 14:10:30
Font.Charaset が SHIFTJIS_CHARSET になってると、
英語版Windowsなんかでは描画不正になるんでしたっけ?

これって実行時に動作するWindowsから情報取ってきて直してくれるんかな?

631 :デフォルトの名無しさん:2006/11/24(金) 14:43:53
>>628
デルファイワールドにあるよ

632 :デフォルトの名無しさん:2006/11/24(金) 14:47:26
デルファイワールドw

633 :デフォルトの名無しさん:2006/11/24(金) 14:52:54
デルファイワールドへの入り方を教えてください><

634 :デフォルトの名無しさん:2006/11/24(金) 14:53:42
^^

635 :デフォルトの名無しさん:2006/11/24(金) 14:56:27
デルフィアンワールドでした。
デルファイワールドじゃなかったのか。。。

636 :デフォルトの名無しさん:2006/11/24(金) 15:17:24
mp3の再生にTMediaPlayerを使ってるんだけど、環境で再生できない場合も
あるの?どんな場合ですか?修正しなきゃならないかなあ…

637 :デフォルトの名無しさん:2006/11/24(金) 15:19:53
ttp://www5f.biglobe.ne.jp/~del-phi/

638 :デフォルトの名無しさん:2006/11/24(金) 15:26:36
>>636
CODECにFraunhofer IIS MPEG Layer-3 Codecがないと
mp3ファイルが再生出来ない

ただ、IE4だか5を入れると自動的にインストールされるみたいなので
Win95とかWinNT4とかでない限り問題はないと思う

639 :デフォルトの名無しさん:2006/11/24(金) 16:19:30
>>616
コンポーネントをどうしても追加したい場合、製品を買うしかないのでしょうか?

640 :デフォルトの名無しさん:2006/11/24(金) 16:29:44
買いなさい。

641 :デフォルトの名無しさん:2006/11/24(金) 16:42:59
でも、安いからってアカデミック版は買うなよ。
これで作ったプログラムは商用非商用関係なく配布不可能だから

642 :デフォルトの名無しさん:2006/11/24(金) 17:40:03
ACで作って、Turboでコンパイルして配布してます^^

643 :デフォルトの名無しさん:2006/11/24(金) 17:57:00
>>642
ビルドをTurboにやらせているだけだとライセンス的には解決していないだろ

644 :デフォルトの名無しさん:2006/11/24(金) 19:24:01
>>638
Delphi とは関係なかったんですね。あとは自分で調べてみたいと思います。
ありがとうございました。

645 :デフォルトの名無しさん:2006/11/24(金) 21:44:53
>>639 D6per を継続して使うべし

646 :デフォルトの名無しさん:2006/11/24(金) 21:51:08
小数点を切り捨てるにはどうすればよいのでしょうか

たとえば
var
i,j:real;

i:=12.3456789
で、小数点第三位以下を切り捨てて
j:=12.34にしたいのですが

647 :デフォルトの名無しさん:2006/11/24(金) 21:55:47
100倍して Trunc して 100で割る。

648 :デフォルトの名無しさん:2006/11/24(金) 22:19:44

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はいくつまで宣言可能なのですか?

649 :デフォルトの名無しさん:2006/11/24(金) 22:42:59
>>648
俺も数年前まで、そういうエラーに悩まされた。
変数は制限のあるスタックに割り当てられるようで、GetMemとかでヒープを使えばいいと思う。多分
俺にも、一番最適な方法を、詳しい方、教えてください。

650 :デフォルトの名無しさん:2006/11/24(金) 22:49:43
動的確保が嫌なら型付定数を使えばいいじゃない

651 :デフォルトの名無しさん:2006/11/24(金) 23:04:38
>arreyはいくつまで宣言可能なのですか?

ローカル変数はスタックと呼ばれる上限値の決まっているメモリに置かれるので
デカい配列を定義するとメモリ内に収まらなくなる
引数に大きな配列を渡す場合も同様

解決方法は以下の2つ
1.[プロジェクト]-[オプション] のリンカページでスタックサイズを増やしてあげる
2.動的にメモリを確保する

652 :デフォルトの名無しさん:2006/11/24(金) 23:09:41
動的配列を使った例

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;

653 :デフォルトの名無しさん:2006/11/24(金) 23:29:57
New...Dispose、GetMem...FreeMemと同じように、
Finalizeを呼ばないと、SetLengthで割り当てた動的配列は、メモリリークするのですか?

654 :デフォルトの名無しさん:2006/11/25(土) 00:19:41
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;

655 :デフォルトの名無しさん:2006/11/25(土) 00:41:24
#$81#$54
#$81#$5B
あとはしらべぃ

656 :デフォルトの名無しさん:2006/11/25(土) 01:09:55
どっちも同じ。 辞書順では同じって意味かなぁ…
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になる

657 :デフォルトの名無しさん:2006/11/25(土) 01:37:36
>>656
やってみた。すまんかったね

658 :デフォルトの名無しさん:2006/11/25(土) 01:50:42
>>655-656
ありがとうございました。
posでは判別できるようなので新しく関数を作って対応しました。

659 :デフォルトの名無しさん:2006/11/25(土) 01:52:52
ShowMessage(IntToStr((CompareStringW(LOCALE_USER_DEFAULT, NORM_IGNORECASE, 'ー', 2, 'ゝ', 2) - 2)));
は-2になったよ。

>>657 ドンマイ

660 :デフォルトの名無しさん:2006/11/25(土) 03:04:33
>>653
動的配列はスコープ抜ければ自動で解放される
自分で解放したい時はnilを代入すればよろし

661 :デフォルトの名無しさん:2006/11/25(土) 03:56:49
>>660
性格には、参照カウントが0になった時

662 :デフォルトの名無しさん:2006/11/25(土) 04:12:30
フォームにmemoを一つだけ置いています
memoの大きさはフォーム内いっぱいに広げています

フォームのはじっこをドラッグしてサイズ変更すると
それに伴ってmemoの大きさも変わるようにするにはどうすればいいですか?

663 :デフォルトの名無しさん:2006/11/25(土) 04:14:22
MemoのAlignをalClientに

664 :デフォルトの名無しさん:2006/11/25(土) 04:22:23
>>663
うをー!?!?まぢでー!?!?すげーすげすげすげー!?!スゲスゲヴォー!!!ありがとー<丶`∀´>

665 :デフォルトの名無しさん:2006/11/25(土) 04:25:16
朝鮮人か?祖国に帰れ。

666 :デフォルトの名無しさん:2006/11/25(土) 04:25:50
なんだチョンか

667 :デフォルトの名無しさん:2006/11/25(土) 04:43:51
なんでやネン!?!わいは関西人やでぇー<丶`∀´>

668 :デフォルトの名無しさん:2006/11/25(土) 04:48:44
大阪民国人=チョン

669 :デフォルトの名無しさん:2006/11/25(土) 04:53:23
なるほどっ!?!そうやったんかニダ<丶`∀´>ほなサイナラ

670 :662:2006/11/25(土) 04:57:41
なんかニセモノがいる(;^ω^)

>>663
ありがとうございますやってみますです

671 :デフォルトの名無しさん:2006/11/25(土) 06:56:10
Delphiで既存のバイナリファイルの一部を書き換えるには
何を使えばいいんでしょうか?

TFileCreate('HONYARARA.BIN',FMOpenRead);
だと、開くだけだし・・・

「さすが、くだすれだな」と言われそうですが・・・

672 :デフォルトの名無しさん:2006/11/25(土) 07:46:27
>>671
TStream.Read
TStream.Write
TStream.Seek

673 :デフォルトの名無しさん:2006/11/25(土) 08:24:04
>>671
TFileStreamクラスのReadBuffer、WriteBufferメソッド

674 :デフォルトの名無しさん:2006/11/25(土) 09:16:11
>>646
小数を文字列に置き換えて
AnsiPosで小数点の位置を調べ
その2バイト(桁分)先から
lengthで得た文字列の終端まで
deleteで削除しちゃえば?

675 :デフォルトの名無しさん:2006/11/25(土) 11:55:56
必ずしも桁が全部あるとは限らないだろ。 12.3 かもしれんし。
数値を文字列処理するのはまずいよ

676 :デフォルトの名無しさん:2006/11/25(土) 12:09:44
ピリオドを含めずにファイルの拡張子を取得するにはどうすればいいんでしょう?
ExtractFileExtだとピリオドが入っちゃう

677 :デフォルトの名無しさん:2006/11/25(土) 12:16:37
>>676
2文字以上だったら最初を取り除けばいいだけやん

678 :デフォルトの名無しさん:2006/11/25(土) 13:02:12
Delphiで、C言語のマクロ定義と同じようなことをするにはどうしたらいいでしょうか
#define M 1000
みたいに

679 :デフォルトの名無しさん:2006/11/25(土) 13:03:21
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バイトより前)がめちゃくちゃに書き換えられてしまいます。
(質問の用語に間違いがあるかも)

680 :デフォルトの名無しさん:2006/11/25(土) 13:13:18
fmOpenReadWrite


681 :デフォルトの名無しさん:2006/11/25(土) 13:14:48
ついでにfmShareDenyWriteもつけとけ

682 :デフォルトの名無しさん:2006/11/25(土) 13:19:02
>>677
いやまあそうなんですけど、何を使って削ればいいのかorz

683 :デフォルトの名無しさん:2006/11/25(土) 13:24:57
Copy

684 :デフォルトの名無しさん:2006/11/25(土) 13:36:15
>>683
なんとかできそうです
ありがとうございました

685 :679:2006/11/25(土) 13:47:08
>>680さん
>>681さん
ありがとうございました。
fmOpenReadWriteで出来ました。

>>1 にあるようにDelphi布教してみます。
(自分の周りのPCユーザーの90%以上は「Delphiって何」状態です)

686 :デフォルトの名無しさん:2006/11/25(土) 13:47:45
>>678
constを使う以外なさげ

687 :デフォルトの名無しさん:2006/11/25(土) 17:54:21
IsDelphiで、このソフトが、Delphi製とでるのですが、
http://www.highdots.com/css-tab-designer/
オフィスっぽいGUIは、どんなコンポーネントを使っているんでしょうか?
# 寺小屋のスレで間違えて聞いてしまいました。

>>110
Turboは知らんけど、同等だと思われるBDS2006は、
FastMMのおかげで、すんげー速くなった。
メモリ確保しまくりのゲームだからかもしれんけど。

>>678
C言語並に強力なマクロないはずです。
定数宣言なら、constで代用できます。

688 :デフォルトの名無しさん:2006/11/25(土) 18:03:34
>>687
リソースハッカーでリソース内のdfmが見れるからコンポーネント名を調べればいいんじゃね?

689 :デフォルトの名無しさん:2006/11/25(土) 18:20:24
>>687
spy++によるとTdxBarControlと出たからたぶんここのやつ
http://www.devexpress.com/Products/VCL/ExBars/

690 :デフォルトの名無しさん:2006/11/25(土) 19:22:38
>>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の問題なのか

692 :デフォルトの名無しさん:2006/11/26(日) 01:21:04
FindFirstして、結果が0だったら(1つもファイルが見つからなかったら)、FindCloseしなくてもOKですか。

693 :デフォルトの名無しさん:2006/11/26(日) 01:21:33
Delphi 6 Personalでフリーカーソル無効化アドインのような
コードエディタをカスタマイズするアドインプログラムを作りたいと思っているのですが
Delphi 6 Personalでそのようなことはできるのでしょうか?
(ネットで調べるとTools APIでIDEのカスタマイズが可能。
 6 PersonalにはTools APIは含まれずのような記述があったので。)

またアドインを作る上で参考になるサイトがあれば教えてください。

Delphi 6 Personalにこだわるのに大した理由は無いのですが、
せっかく作るならDelphiで、しかも今使っているバージョンで、
と思っています。

694 :デフォルトの名無しさん:2006/11/26(日) 01:53:04
>>693
http://bousyo.blog45.fc2.com/blog-entry-101.html

695 :デフォルトの名無しさん:2006/11/26(日) 01:54:46
重複送信してたら、スマソ。

>>693
http://bousyo.blog45.fc2.com/blog-entry-101.html

696 :デフォルトの名無しさん:2006/11/26(日) 02:07:57
> Delphi 6 Personalでそのようなことはできるのでしょうか?

この件はちょっと分からない。
ToolsAPI.pas が無かったら無理かも。

697 :デフォルトの名無しさん:2006/11/26(日) 04:08:16
>>692
なんか難しい。
サンプル: "FindFirst/FindNext/FindCloseの正しい用法"
ttp://forum.nifty.com/fdelphi/samples/00626.html

698 :デフォルトの名無しさん:2006/11/26(日) 04:08:54
>692
FindFirstの結果が0になるときはTSearchRec内のハンドルが
INVALID_HANDLE_VALUEに設定されていますので、
FindCloseしてもしなくてもどちらでも構いません。

699 :デフォルトの名無しさん:2006/11/26(日) 04:12:24
>697
40秒違いでしたね。その話(FIndFirstが0を返したときにFindCloseするとWindowsから制御が
帰ってくるまでに非常に時間がかかる)はD3時代のもので、D4以降ではその問題を回避するために
コードが変更されています。

700 :デフォルトの名無しさん:2006/11/26(日) 04:54:36
つまり気にせずに常にCloseしてしまって構わない訳ですね。

701 :デフォルトの名無しさん:2006/11/26(日) 05:02:22
if FindFirst <> 0 then
try
repeat
hoge
until FindNext = 0;
finally
FindClose;
end;

このパターンでいいじゃn

702 :デフォルトの名無しさん:2006/11/26(日) 11:16:42
うちはいつもそのぱたーん

703 :デフォルトの名無しさん:2006/11/26(日) 12:15:55
>>652
ループでSetlengthの配列要素数を増やしていくと、アホみたいにメモリがなくなる。
最初にSetlength(*.1000000)みたいにしておかないと、すぐにメモリ不足。

704 :デフォルトの名無しさん:2006/11/26(日) 12:55:56
>>694,>>695
ありがとうございます。参考にします。
ちょっと大変そうですね。
>>696
Delphi 6 PersonalにはToolsAPI.pasがついていないし、
以前適当なプロジェクトでUse ToolsAPIした時は”ユニットが見つからない”
というようなエラーが出ていたので使えないものだとあきらめていました。

試しにフリーカーソル無効化アドインのソースをコンパイルしてみたところ
正常にコンパイルできたのでどうやら使えるようです。
先に試してみるべきでした。すみません。
同じようにUse ToolsAPIしているのにちょっと不思議ですが、
フリーカーソル無効化アドインのソースを見つつ調べてみます。
ありがとうございました。

705 :デフォルトの名無しさん:2006/11/26(日) 14:51:22
おまいらのDelphiは 検索に成功しなかった場合に0 を返すのか?

if FindFirst = 0 then
try
repeat
hoge
until FindNext <> 0;
finally
FindClose;
end;

706 :デフォルトの名無しさん:2006/11/26(日) 15:02:49
>>703
SetLength ってそうなの?ループの中で増やしていくってやり方でガンガン
やってたんだけど、最初に要素数を求めた方が良いのか…

707 :デフォルトの名無しさん:2006/11/26(日) 17:08:43
リサイズ繰り返すとどんどん半端なブロックが増がえていくってことじゃ
ようしらんけど



708 :デフォルトの名無しさん:2006/11/26(日) 20:47:01
>>704
> 正常にコンパイルできたのでどうやら使えるようです。

ToolsAPI.dcu がついている?

709 :デフォルトの名無しさん:2006/11/26(日) 21:17:10
CardinalとLongWordの違いはなんですか?

710 :デフォルトの名無しさん:2006/11/26(日) 21:21:21
>>706
実際にメモリ使用量を見ていると、笑えるくらい増えていく。
できるだけ、最初に多めに確保して、要素数が増えた時点で、SetLengthでぴったりの要素数にする方がいいな。

Setlengthしまくって消費したメモリは、配列のポインタがなくなるまで保持されてしまうので、かなり厄介。
どうしても途中で要素数を変更したい場合は、別の配列を作って要素をコピーして、前の配列のポインタを解放すると、
メモリ消費量が正常に戻る。

711 :デフォルトの名無しさん:2006/11/26(日) 21:21:44
>>709
CardinalはDelphiのバージョンによっては4バイトではない場合がある。
一番速度が速い符号無し整数型。
そのうち64ビット版Delphiでは、CardinalとかIntegerは8バイト型になるんじゃないかと昔は言われていた。
それに対して、LongWordとかLongIntはどのDelphiでも4バイトと決められている。

712 :デフォルトの名無しさん:2006/11/26(日) 21:22:17
要素数が増えた時点で→要素数が確定した時点で

713 :デフォルトの名無しさん:2006/11/26(日) 21:34:49
>>710
普通のやり方の一つとして、要素数がたりなくなったら最大要素数を何倍かする、ってのが一般的に存在するな。
いちいち一個ずつ最大要素数を増やすよりはよっぽどパフォーマンスがいいので。

714 :デフォルトの名無しさん:2006/11/26(日) 22:42:17
>>708
ToolsAPIと名のつくファイルはD6Personalにはありませんでした。
フリーカーソル無効化アドインを見てみたらパッケージエディタのRequiresに
・・\Delphi6\Lib\designide.dcpが使われていて
中身を見てみるとToolsAPIの文字がありました。
パッケージって何?DCPって何?な状態なのですが
これを使えばいいのかなと思ってる所です。

715 :デフォルトの名無しさん:2006/11/26(日) 23:11:57
>>714
なるほど。勉強になりますた。

716 :デフォルトの名無しさん:2006/11/27(月) 03:21:20
>>711
64ビット版でもIntegerは32ビットなのですか。

717 :デフォルトの名無しさん:2006/11/27(月) 04:05:35
>>705
嘘を嘘と(略

718 :デフォルトの名無しさん:2006/11/27(月) 04:52:02
>>716
Windows では32ビットのまま。ポインタの幅だけ64ビットになるらしい。

719 :デフォルトの名無しさん:2006/11/27(月) 06:13:28
>>703
別に無くならないでしょう。 コピーが発生するから遅くはなるけど。

720 :デフォルトの名無しさん:2006/11/27(月) 10:42:17
SetLength の件、いろいろ勉強になりました。
・できるだけ最初に必要な要素数を確保する。
・分からなければ多めに確保しておく。(確定時点で削除する)
・どうしても追加する場合は別の配列にコピーするか、倍数などで一括して増やす。
といった感じでしょうか。

721 :デフォルトの名無しさん:2006/11/27(月) 10:45:26
そんな感じです。

722 :デフォルトの名無しさん:2006/11/27(月) 15:33:05
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のイベントで実現できましたあ。すみません。

725 :デフォルトの名無しさん:2006/11/28(火) 00:44:05
私ならプリンタDCがどんなAPIをサポートしているか調べる。

726 :デフォルトの名無しさん:2006/11/28(火) 01:40:46
わたしならTImageに描くのと同時にPrinterCanvasに描画するようなことはしない。
Canvas の分解能がちがいすぎるわな

727 :デフォルトの名無しさん:2006/11/28(火) 06:00:07
分解能?

728 :デフォルトの名無しさん:2006/11/28(火) 06:24:02
解像度って言いたかったんだろうな。

Image1.Canvas.LineTo(X,Y);
Printer.Canvas.LineTo(trunc(X*a),trunc(Y*a));

として、Printerの場合は、a倍の座標に・・とする方がマシかな。
aの値は、PrinterのCanvasのサイズとImageのサイズから、比率を計算してな。


729 :デフォルトの名無しさん:2006/11/28(火) 10:10:28
分解能。

730 :デフォルトの名無しさん:2006/11/28(火) 10:39:30
事情があってDelphi4ですが、CVSを使いたいのでdfmがテキストにならないかと画策してます。
ToolsAPI.pasの何かを使ってできるんじゃないかとは思ってるところですが、
どこかにそんなアドインとかあります?
あるいは、このinterfaceがそれっぽいと言う情報とか・・・
ファイルアクセス監視して自動でコンバートするのはあまりやりたくないところ。


731 :デフォルトの名無しさん:2006/11/28(火) 11:51:52
5 / 3

この結果はExtendedですか、Doubleですか、Singleですか。

732 :デフォルトの名無しさん:2006/11/28(火) 11:54:41
文脈に依存します

733 :デフォルトの名無しさん:2006/11/28(火) 11:56:03
Extended
/による除算は割られる数、割る数の型に関わらず常にExtended

734 :デフォルトの名無しさん:2006/11/28(火) 13:07:16
CPUの浮動小数点数精度をいじった場合には、Extendedの精度ではない場合もある。

735 :デフォルトの名無しさん:2006/11/28(火) 13:20:53
type 識別子 = record
で、 
この中にいっぱいフィールドがあるのですが、
ローカルで使用する時に全フィールドを初期化をしたい場合、
全フィールドを別々に初期化しないとだめなんですか?

736 :デフォルトの名無しさん:2006/11/28(火) 13:25:39
FillcharなりZeromemoryなり使えや
ゼロ初期化じゃないならとっとと初期化用手続きを作る

737 :デフォルトの名無しさん:2006/11/28(火) 13:26:18
ああ、でも、レコード型のメンバーにstringや動的配列の時はFillcharやZeromemory使っちゃだめだった。

738 :デフォルトの名無しさん:2006/11/28(火) 13:27:32
クラスにしちゃえばいいじゃん
クラスなら数字は0、文字はヌル、論理はFalseで自動的に初期化される

どーしてもレコードがいいんだい!って人は
FillChar(MyRecord, SizeOf(MyRecord), #0);
これでも数字は0、文字はヌル、論理はFalseに設定されるよ


739 :デフォルトの名無しさん:2006/11/28(火) 13:36:50
>>738
文字がフィールドにあるレコード型でFillChar使うと、
参照カウントがおかしくなってメモリリークおこすんじゃね?

740 :デフォルトの名無しさん:2006/11/28(火) 13:45:40
おっと、補足
レコードのメンバーに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
する
説明不足でした

741 :デフォルトの名無しさん:2006/11/28(火) 13:52:58
>>735です。みなさん、本当にありがとうございます。
データの保存用に作り始めたら項目がどんどん増えちゃって混乱状態に><
>>740さんの> FillChar(MyRecord, SizeOf(MyRecord), #0);
FinalizeやInitializeが何を意味するのか全然わかりませんが、
便利そうなので、ぜひ使わせてもらいたいと思います!
本当にありがとうございました!

742 :デフォルトの名無しさん:2006/11/28(火) 13:59:46
時間ないなら丸暗記でもいいけど
余力があればなぜInitializeが必要なのか
再初期化時だけFinalizeが必要なのはどうしてかを是非調べて
自分なりに理解して欲しい

743 :デフォルトの名無しさん:2006/11/28(火) 14:04:07
finalizeやFillCharは知らなかった。便利な関数をありがとう。

744 :デフォルトの名無しさん:2006/11/28(火) 14:04:38
もとい、finalizeとinitializeだね。

745 :デフォルトの名無しさん:2006/11/28(火) 21:27:41
VistaでDelphi6のヘルプを見る方法はなにかないですか?

746 :デフォルトの名無しさん:2006/11/28(火) 21:46:32
>>745
winhlp32.exeをどっかからもってきてVistaのと入れ替える。


747 :デフォルトの名無しさん:2006/11/28(火) 22:11:17
>>687
WinSpectorで調べてみましたが、
TdxNavbar
TdxDockControl
TdxBarControl
などが使われており、>>687さんの言うとおり、
http://www.devexpress.com/Products/VCL/Index.xml
にあるコンポーネントのようです。

類似のコンポーネントで、安いもの、もしくは、フリーのものってないでしょうか?

748 :デフォルトの名無しさん:2006/11/28(火) 23:56:54
BDS2006のヘルプには、D6のように、ルーチンの「例」は書かれてないのですか?

749 :デフォルトの名無しさん:2006/11/29(水) 01:10:02
>>747
あれ、思い出せねぇな。名前。海外のコンポでフリーウェアだと無償で利用できて、
有償ソフトに利用する場合、有料になるやつ。誰がヨロ。



750 :デフォルトの名無しさん:2006/11/29(水) 07:49:28
ProgressBar.Min を 1000にして、Maxを1000000にして実行すると、例外が発生してアプリ毎落ちるのはなぜ??
BDS2006です。

751 :デフォルトの名無しさん:2006/11/29(水) 07:59:23
>>748

ルーチンの例どころかVCLリファレンスすらまともに付いてない。
こんなんで新たなユーザーなんて増えるわけないわな。

752 :デフォルトの名無しさん:2006/11/29(水) 08:09:10
unit名すら書いてないYO!

753 :567:2006/11/29(水) 11:35:47
>>728
そう書くと、プログラム実行後、
描画した際にエラーがでて止まってしまいます。
何かが足りないのだろうと思いますが・・・
理解できていません・・・

また、
>>723
の前半部分のコードについて、
指摘して頂けると有り難いのですが・・・

754 :デフォルトの名無しさん:2006/11/29(水) 11:40:51
>>750
プロパティの読み込み時に、Minが範囲外扱いされてしまうからだな。
自動のCreateでエラーになると全体が止まってしまう。

で、何でそんな値になってるんだろうか?
1000で割った値にしても問題ないような気がする。

どうしてもと言うなら、プロパティじゃなくてコードで設定するとかかな。


755 :デフォルトの名無しさん:2006/11/29(水) 11:56:24
>>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の一文を必ず入れること


756 :デフォルトの名無しさん:2006/11/29(水) 12:13:30
>>750
TProgressBarのソースを見ると
Min > 100の時に例外を生成している

>>754の言うようにFormCreateイベント辺りで
Min := 1000;
Max:= 1000000;
とか書くぐらいか、あとはVCLのソース変更するとか
たぶんforループカウンタが1000から1000000までなんだろw

757 :デフォルトの名無しさん:2006/11/29(水) 12:27:39
>>753
とりあえずエラー表示の内容をここに書いてみると良いことが起こるかも

758 :デフォルトの名無しさん:2006/11/29(水) 12:46:48
>Progressで例外
Positionがゼロなんじゃねーの?

759 :デフォルトの名無しさん:2006/11/29(水) 14:36:12
>>747
ケチるなってw

ttp://www.tmssoftware.com/
Component Packは有償(175EUR)だが、商用利用でなければソース無しを我慢すれば使える。

ttp://www.jrsoftware.org/
Toolbar97はフリーウェア。ただし、UIが古い。
Toolbar2000はシェアウェアだが、商用利用でなければライセンス規約に引っかからない。UIはアドインをつければ
割といい感じになる。


760 :デフォルトの名無しさん:2006/11/29(水) 16:07:52
>>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;

762 :デフォルトの名無しさん:2006/11/29(水) 16:35:47
>>760
DevExpressのExpressBarの次のバージョンはOffice2007のUIを作成可能だぞ。
Vista上での使用も違和感がない。
ttp://www.devexpress.com/Home/Announces/ExpressBars6Beta.xml

もっともTMSのBarではすでにこれができているんだが。
ttp://www.tmssoftware.com/advtoolbar.htm


763 :デフォルトの名無しさん:2006/11/29(水) 16:39:31
>>756
ありがとう。ソースでMaxから設定したら問題無かったよ。

764 :デフォルトの名無しさん:2006/11/29(水) 19:35:23
>>759-760, >>762
おお、TMSSoftwareいい感じですねー。
めちゃめちゃほしくなりました。
AdvToolBarだけでも買おうかな。

Office2007は使ってましたけど、あのUIは、結構好きです。
RebornUIはあこがれますね。


765 :デフォルトの名無しさん:2006/11/30(木) 10:18:04
VistaってBDEインスコできるんですか?

766 :デフォルトの名無しさん:2006/11/30(木) 11:11:10
Delphi3です。
画像ファイルを表示させたいだけです。
OSはWindowsXPです。

昔作ったプログラムから必要な部分だけコピペしてきたら
画像が表示されなくなってしまいました。
どんなミスが考えられるでしょうか?

ご指摘よろしくお願いいたします。

http://up.spawn.jp/file/up54894.txt


767 :デフォルトの名無しさん:2006/11/30(木) 11:15:50
Windowsのウィンドウの基本動作として、Form1にリフレッシュがかかったら、Drawしたものは消えると思うが。

768 :デフォルトの名無しさん:2006/11/30(木) 11:25:22
>>766
>bm1.LoadFromFile('img\bm1.bmp');

ここ
実行ファイルが存在するパスがカレントじゃないかも
絶対パスで書くかChDir手続きで明示的にカレントを変更すべき

769 :デフォルトの名無しさん:2006/11/30(木) 11:30:50
関数や手続きの引数として
多次元配列を設定することはできないのでしょうか?

procedure test(var A: array of array of Integer)
begin
  処理
end;
とすると

エラーとして型が必要なところにARRAYがありますと出てしまいます

770 :デフォルトの名無しさん:2006/11/30(木) 11:38:29
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なんかのコンポーネントに描画させるとか。

773 :ななしへたぐらま ◆XcB18Bks.Y :2006/11/30(木) 15:38:36
>>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の方にこのオプションがあるかはわかりません.
また私は使ったことはありませんので詳細はわかりません.


774 :ななしへたぐらま ◆XcB18Bks.Y :2006/11/30(木) 16:40:37
>>766
Windowsのマルチウィンドウシステムは1枚の紙か何かにウィンドウの絵を次々と描くような仕組みなんです.
たとえば画面にAというプログラムの甲というウィンドウがあって
そこにBというアプリの乙というウィンドウが部分的に重なり,
次に甲をクリックして甲をアクティブにする(またそれによって甲が最前面に出る)場面を考えてみます.

甲の表示はWindowsが単純に甲の絵を描くだけです.
次に乙を表示するときもWindowsが乙の絵を描くだけです.
このとき,乙の陰になった甲の一部分の絵は消滅してしまいます.
そして甲をアクティブにするとき,Windowsはウィンドウのキャプション(見出し)や消えてしまったボタンなどの絵を描きなおしますが
消えてしまった部分のうちプログラムAが自分で描画した部分に関しては
Windowsが甲に対して描きなおすように『メッセージ』を送るだけで再描画はAが行います.
つまりAは甲にこの『メッセージ』が来るたびに再描画するようなコードを書かなければなりません.

>>766のコードだとフォームへの描画はボタンをクリックしたときにしか行われないので
次に表に出てきたときにほかのウィンドウの陰になっていた部分がおかしくなってしまうのです.

(つづく)


775 :ななしへたぐらま ◆XcB18Bks.Y :2006/11/30(木) 16:51:03
(つづき)
対策は>>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;
(つづく)

776 :ななしへたぐらま ◆XcB18Bks.Y :2006/11/30(木) 16:55:18
(つづき)
イメージコンポはキャンバスにアクセスするとPictureプロパティに割り当てられているビットマップに描画します.
(ここにWindowsビットマップ以外のJPEG画像などが割り当てられている場合はエラーになります)
画像が空の場合は描画などの前にコンポと同じサイズのビットマップを作ります.
このコンポは自分が隠された後に再び表に来たときには自らを描きなおしますので
再描画のコードを書く必要はありません.
ただしイメージコンポのサイズが変わってもビットマップの大きさは変わりません.

(おわり)


777 :デフォルトの名無しさん:2006/11/30(木) 18:31:06
if文でBoolean型の関数を書くとき、「関数 = False」で指定するのと「not 関数」で指定するのでは何か違いはありますか?

778 :デフォルトの名無しさん:2006/11/30(木) 18:37:14
QuickReportのプリンタ デバイス コンテキスト取得できますか?

779 :デフォルトの名無しさん:2006/11/30(木) 18:42:59
>>777
ない

780 :777:2006/11/30(木) 19:56:05
そうですか、どうもですw

781 :デフォルトの名無しさん:2006/11/30(木) 19:56:30
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
教えて下さい。
ラベルに表示させる文字を点滅させたいのですが、どのようにすればいいでしょうか?
ご存知の方がいらっしゃったら教えて下さい。よろしくお願いします。

785 :デフォルトの名無しさん:2006/11/30(木) 21:06:10
>>>777
大きなお世話だが

処理上同じでも
not 関数だと
関数のオーバーロードや他人がコード見たときに
ぱっと見でBoolean型のFalse値だとわからないから
関数 = falseがお勧め

786 :デフォルトの名無しさん:2006/11/30(木) 21:08:10
>>783
imgctl.dll

787 :デフォルトの名無しさん:2006/11/30(木) 22:17:29
>>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」で調べてみたのですが、
なかなか応用できそうなサンプルコードが見つかりません。
よろしくおねがいします。

789 :デフォルトの名無しさん:2006/12/01(金) 00:32:21
imgctl.dllはそう難しく無いと思うけど
付属のpasファイルをusesして、あとは、imgctl.txtをよく読むべし。
エラー関連とか。

790 :デフォルトの名無しさん:2006/12/01(金) 01:14:09
>>785
if not (function) then
でも判りにくいか?

791 :デフォルトの名無しさん:2006/12/01(金) 04:41:12
HDD 交換して環境を移行してDelphiを再インストールしたら
Delphi 6 RTL アップデート #3 のアーカイブが破損してた orz
http://www.borland.co.jp/delphi/del6up.html
から、また DL しようと思ったら、なんか落とせないんですが、
もう入手できないのでしょうか?

792 :デフォルトの名無しさん:2006/12/01(金) 09:36:07
BDS2006でdelphi win32を使って開発してるんですが、
メインスレッド以外のスレッドでブレークポイントを設定してデバッグ
やってるとIDEがうんともすんとも言わなくなる時無いですか。
最悪PCのリセット。
BDS2006はSP2,Hotfix9を当ててる状態です。

793 :デフォルトの名無しさん:2006/12/01(金) 09:48:15
それは BDS スレへどうぞ

794 :デフォルトの名無しさん:2006/12/01(金) 10:04:08
マルチスレッドアプリのデバッグをXP上でやってIDEが死ぬのは
MSIMEを使ってるのが原因だったはず。Visual Studioでも起こるらしいし

795 :デフォルトの名無しさん:2006/12/01(金) 10:51:55
delphi personal6を今日DLしてインストールしたのですが、
http://www.geocities.jp/norg1964/delphianworld/data/gm/mp3pl126.zip
のMP3Playerコンポーネントをインストールしようとしたら、いろいろ警告とエラーが出ました。
エラーは↓のだけですがどうしたらインストールできるのでしょうか??
[エラー] mp3plyr.pas(3410): 未定義の識別子 : 'SListIndexError'

796 :デフォルトの名無しさん:2006/12/01(金) 10:56:12
D7付属のQuickReportでプレビューで印刷ボタンを押すとプリンタ設定ダイアログがでてページ数とか
設定してから印刷できるようにしたいんですがどうすればいいでしょうか。
デフォルトだとすぐに印刷が始まってうっかり大量印刷してしまうことがあるので。




797 :デフォルトの名無しさん:2006/12/01(金) 11:00:06
>>773
できました!!!
ありがとうございました!

自分の書いたソースが「基本的」には
間違っていなかったんですね。

他のページを見ても書いてあるのですが、
Bitmapの扱いには注意が必要なようですね。

後学のために質問なのですが、

描画ツールのように、
いくつかのプロシージャ(MouseDown・UP・Move等)
でひとつのImageなりPaintBoxなりのCanvasに描画し、
その描画したものを印刷する場合、

Bitmapに変換してから印刷するのが
常套手段と考えてよろしいのでしょうか?

それぞれの描画の際に同時にPrinter.Canvasに
描画する方法が具体的によく解らないので・・・


798 :デフォルトの名無しさん:2006/12/01(金) 14:22:16
>>792

コンパネの「地域と言語のオプション」−「言語」−「テキストサービスと入力言語」−
「詳細」−「詳細設定」

「詳細なテキストサービスをオフにする」にチェックを入れる


799 :デフォルトの名無しさん:2006/12/01(金) 15:32:41
以前、SetLength で1つずつ要素数を増やしていくと…と言う話題がありました。
サマリは
>>720
ふと思ったのですが StringGrid の RowCount や TStringList なども同様の
配慮をしないといけないものなのでしょうか。

800 :デフォルトの名無しさん:2006/12/01(金) 15:53:40
TStringListやTListは割とましな実装がされてたはず。
もちろん、自分でCapacityをいじって最適化するのはありだろうけどさ。

801 :デフォルトの名無しさん:2006/12/01(金) 16:20:12
>>795
mp3plyr.pas の const のところに、

 SListIndexError = 'リストのインデックスが範囲を超えています (%d)';

を付け足すとか。

802 :デフォルトの名無しさん:2006/12/01(金) 16:23:30
>>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とか直代入は、考慮されない?ようだ(そりゃそうか)

805 :デフォルトの名無しさん:2006/12/01(金) 19:57:29
>>796
QuickRep1.PrinterSetupメソッドを呼び出してダイアログボックスを表示。



806 :デフォルトの名無しさん:2006/12/01(金) 19:59:37
>>805
それ反映されないよ。
常にA4。というか、グローバルなプリンタの設定に依存する。

807 :783:2006/12/01(金) 20:14:19
>>786 >>789
まだ、完全に問題解決したわけではありませんが、
いろいろやってみます。
ありがとうございました!

808 :デフォルトの名無しさん:2006/12/01(金) 20:32:20
>>791
http://support.borland.com/entry.jspa?externalID=4328&categoryID=94

809 :デフォルトの名無しさん:2006/12/01(金) 23:43:50
>>799
TStringListは他の人も書いているとおり特に意識しなくていいけど、
TStringGridはあらかじめ行列の設定を絶対にすべき。
行列のサイズが大きければ、処理速度が雲泥の差になる。


810 :デフォルトの名無しさん:2006/12/01(金) 23:50:06
別に特に TStringGrid に限らず、自分でなんかの領域を設定する必要があるときは
だいたい同じような状況になるわな。

811 :デフォルトの名無しさん:2006/12/02(土) 00:11:07
絶対領域

812 :デフォルトの名無しさん:2006/12/02(土) 00:21:14
相対領域

813 :デフォルトの名無しさん:2006/12/02(土) 00:30:54
聖少女領域

814 :デフォルトの名無しさん:2006/12/02(土) 03:04:13
マルチスレッドアプリケーションを作る場合
メインスレッドが持ってる変数に別スレッドから変更を加える時はsynchronizeした方がいいんですか?

815 :デフォルトの名無しさん:2006/12/02(土) 03:19:39
>>808
あ、ありがとうっ!
滅茶苦茶助かりました。

816 :デフォルトの名無しさん:2006/12/02(土) 03:28:53
>>814
Yes

817 :デフォルトの名無しさん:2006/12/02(土) 04:17:48
逆に、メインスレッドが持ってる情報を、別のスレッドから参照する場合は、何か気をつけることありますか。
それともこういう設計自体間違ってますか。

818 :デフォルトの名無しさん:2006/12/02(土) 08:40:52
>817
正直、良くない。
基本的にスレッドで処理したデータはそのスレッドの外に出さない。

他のスレッドから処理したデータにアクセスするには、
スレッドオブジェクトに作ったプロパティやメソッドを使う。
またイベント型プロパティを作れば状態変化をスマートに通知できる。


819 :デフォルトの名無しさん:2006/12/02(土) 09:10:03
shared: record
 foo: Integer;
 bar: String;
 ...
end;
なんて情報受け渡しレコードでも作ってスレッド動作中は他からぜったにに触らない
という「暗黙の了解」をきっちり守れるなら同期不要とか釣ってみるテスト

820 :デフォルトの名無しさん:2006/12/02(土) 09:25:43
shared: record


821 :815:2006/12/02(土) 10:23:02
Delphi 6 Personal なんですが、
OS を 2k→XP に変更すると、使用許諾証も新規に取得しないと駄目でしょうか?
また、登録場所は何処でしょうか?
DelWiki さんの所のリンクは切れているみたいで、
英語の公式サイトを探してみたんですが、見当たらないです orz

822 :デフォルトの名無しさん:2006/12/02(土) 10:26:41
TButtonを押下された状態にするには?

823 :デフォルトの名無しさん:2006/12/02(土) 10:28:58
マウスでぐぐーっとこう

824 :デフォルトの名無しさん:2006/12/02(土) 10:33:08
分かりませんwww

825 :デフォルトの名無しさん:2006/12/02(土) 10:44:32
>>822
Button1Click(nil);

826 :デフォルトの名無しさん:2006/12/02(土) 11:05:38
Down:=true みたいな事をしたそうな雰囲気。

827 :デフォルトの名無しさん:2006/12/02(土) 11:08:55
>>822
ボタンがクリックされた時のイベントが
OnClick
マウスでボタンを押しつづけてる時のイベントが
OnMouseDown

828 :デフォルトの名無しさん:2006/12/02(土) 11:09:03
TButton じゃできないだろ

829 :デフォルトの名無しさん:2006/12/02(土) 11:09:26
多重起動を防止しつつ後から起動されたプロセスの引数を
先に起動されたアプリに転送するのってどうやりますか?

830 :デフォルトの名無しさん:2006/12/02(土) 11:12:19
プロセス間通信でやる

831 :822:2006/12/02(土) 12:05:32
>>826
まあそういうことです
ずっと凹んだ押された状態にしたいわけです
TCheckBoxのStateみたいにプロパティで指定できないもんなんですかね
あきらめてTCheckBox使うことにしよ

832 :デフォルトの名無しさん:2006/12/02(土) 12:07:17
TSpeedButtonなら簡単にできたような

833 :デフォルトの名無しさん:2006/12/02(土) 12:07:38
>>829
WM_COPYDATAで送る
WM_SETTEXTで送る
メモリマップドファイルで送る

こんなとこじゃね?

834 :822:2006/12/02(土) 12:17:29
>>832
あーなるほど
でもXPManifest適用されないからまあいいや
どうもでした

835 :デフォルトの名無しさん:2006/12/02(土) 13:07:37
>>829
DDEってやつは?

836 :デフォルトの名無しさん:2006/12/02(土) 13:48:27
いちおう言っとくと、DDEはVistaでは廃止されるからな。

837 :デフォルトの名無しさん:2006/12/02(土) 14:24:52
>>836
ま じ か YO
ソースくれ

838 :デフォルトの名無しさん:2006/12/02(土) 14:26:26
>>821
>>175がそうじゃないかと。
あるいは直接
http://register.borland.com/delphi6

に行くとか。

839 :デフォルトの名無しさん:2006/12/02(土) 15:46:52
>831
CheckBoxのスタイルににBS_PUSHLIKEを追加する。でも
> ずっと凹んだ押された状態にしたいわけです
ってのは本来はCheckBoxが正しいのでは?

>836
一部は残るらしいが。でもDDEはもはやレガシーだしな。
廃止のソースはどこだったっけな?ここ数日で見かけた話だったんだけど。

840 :デフォルトの名無しさん:2006/12/02(土) 16:31:46
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
DDEの件、ソースはとりあえずここか?
http://pc8.2ch.net/test/read.cgi/tech/1163375772/405-414

844 :デフォルトの名無しさん:2006/12/03(日) 00:10:56
なるほど・・・
公式発表とかじゃなくて、実際に試したら使えなかったということか

845 :デフォルトの名無しさん:2006/12/03(日) 09:56:47
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);
とした方がメモリや処理速度的には良いのでしょうか?

教えて下さい



846 :デフォルトの名無しさん:2006/12/03(日) 12:13:25
速度気にするならAnsiPos使わずに1文字目から自前でスキャンしていこうぜ

847 :デフォルトの名無しさん:2006/12/03(日) 14:00:34
INIにすれば?

848 :845:2006/12/03(日) 14:35:56
>自前でスキャンしていこうぜ
どうやれば良いのでしょうか?
もう少し詳しく教えて下さいm(_ _)m

>INIにすれば?
INIとは何ですか
ググッたけどわからんかったorz

使用ヴァージョンは
delphi6 personalです


849 :デフォルトの名無しさん:2006/12/03(日) 14:47:45
>>845
AnsiPos、Copy、DeleteといったString型を扱う関数は遅い
それらの組み合わせを変えたところで大した違いはない
速度やメモリが気になるならポインタを使う

>INIとは何ですか
>ググッたけどわからんかったorz
iniファイル形式として扱うようにして
TRegIniクラスを使うってことかな?

>名前,住所,電話番号,雑記
これってよーするにCSVファイル形式でしょ?
TStringList.CommaTextにブチこんでそれで解決

850 :デフォルトの名無しさん:2006/12/03(日) 17:17:52
今まで長い間,Delphiを使ってきて、データベースアプリを作ったことがなかったのですが、
作ることになりそうです。

データーベースエンジンはどれを使うのがよいのでしょうか?

851 :デフォルトの名無しさん:2006/12/03(日) 17:21:22
規模は?
個人用?2〜3人?それ以上?

852 :デフォルトの名無しさん:2006/12/03(日) 17:29:18
WideUpperCaseてCharUpperBuffW呼び出してるけど、
9x系はMicrosoft Layer for Unicode (MSLU)使わないと
機能しないんじゃないの?

853 :850:2006/12/03(日) 17:36:59
ほぼ、個人用です。
データもテキストばかりで、むしろデータベースを使うべきでないのかもしれませんが・・・
お手軽に使えるのがよいです。

と、聞いてばかりもあれなんで、自分でも調べてみます。

854 :850:2006/12/03(日) 17:52:39
Delphi データベース・アプリ概説 ? Teppi Technology
http://www.teppi.com/Components/dbgaisetu/

ここいいですね。参考にして、いろいろ探ってみたいと思います。

855 :デフォルトの名無しさん:2006/12/03(日) 18:31:08
>>853
DBにしない方がいいんじゃね?
XMLとかで十分な希ガス

856 :デフォルトの名無しさん:2006/12/03(日) 18:43:32
データベース未経験→今度使う
タイムリーだな。オレもそう。「本部システム」だって。
キーワードだけ言われてもなあ… これって大変なのかな…

857 :デフォルトの名無しさん:2006/12/03(日) 19:55:32
>>856
予感がします

858 :デフォルトの名無しさん:2006/12/03(日) 20:36:11
アクティブじゃないウィンドウにkeybd_eventでキーを送ることはできますか?

859 :デフォルトの名無しさん:2006/12/03(日) 20:37:57
sendmessage使え

860 :デフォルトの名無しさん:2006/12/03(日) 20:45:00
いままで、自分のウインドウにキー押下のメッセージを伝えるときもSendMessage使ってましたが、
keybd_eventというものもあるんですね。こっちを使った方がよいですか。

861 :デフォルトの名無しさん:2006/12/03(日) 21:06:38
フォーカスのあるウィンドウにしか送れない。SendMessage() でいいならそっちを使え

862 :デフォルトの名無しさん:2006/12/03(日) 23:03:42
>>859
thxxxxxx

863 :デフォルトの名無しさん:2006/12/03(日) 23:25:45
>853
TClientDataSetというコンポーネントが有るので、それを調べてみてください。
ファイルベースのDBです。SQLは使えませんので注意。

864 :デフォルトの名無しさん:2006/12/04(月) 00:04:21
TBitButtonのGlyphを:=で変えたいんですが

865 :デフォルトの名無しさん:2006/12/04(月) 00:29:21
そのためには自前でTBitmapオブジェクトを用意する必要があります。
なおGlyphプロパティはTBitmap型なので、各種メソッド使って画像を変えることも可能です。

866 :デフォルトの名無しさん:2006/12/04(月) 01:26:06
>>852
9x系ならAnsiUpperCaseが呼び出されるじゃないか。

867 :デフォルトの名無しさん:2006/12/04(月) 04:33:02
海外の雑誌DelphiMagazineが休刊になるんだって?????

Delphiが消えていくという流れは止められないみたいですね。

868 :デフォルトの名無しさん:2006/12/04(月) 07:05:00
日本でCマガが休刊したけど、Cは消えたのか?


869 :デフォルトの名無しさん:2006/12/04(月) 07:33:43
もうCなんて使ってる奴いないだろwwww

870 :デフォルトの名無しさん:2006/12/04(月) 08:12:56
組み込みとかだとCはまだまだ現役だよ

871 :デフォルトの名無しさん:2006/12/04(月) 08:47:23
>>838
亀レスだけど、本当にありがとう。
ちゃんと認証されました。

872 :デフォルトの名無しさん:2006/12/04(月) 10:16:08
>>867
日本でも.NETを扱っているWindows Developer Magazineが休刊になるんだって?????

.NETが消えていくという流れは止められないみたいですね。


873 :デフォルトの名無しさん:2006/12/04(月) 10:32:48
Delphi専門の人って少ないんじゃないのか?
俺はC#とかけもち。

874 :AnsiPos の代替関数:2006/12/04(月) 10:59:35
>>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;


875 :AnsiPos の代替関数続き:2006/12/04(月) 11:00:55
//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;


876 :デフォルトの名無しさん:2006/12/04(月) 11:36:00
試したけどたいしたかわらなかったよ

877 :845:2006/12/04(月) 11:54:23
>>874-875
アリです^^
先ずは関数を読み解くところから頑張ります

878 :デフォルトの名無しさん:2006/12/04(月) 12:09:29
Vistaになったら開発言語は何が主流になるのかな。
Delphiしかできない俺はどうしたらいいんだろう。


879 :デフォルトの名無しさん:2006/12/04(月) 12:52:59
delphiでも全然問題無く開発は続けられるよ。
新しいライブラリにはなかなか対応してくれないけどな。

880 :デフォルトの名無しさん:2006/12/04(月) 14:34:39
>>876
>>874-875 を使ってStringReplace(とても遅い!)のような文字列置換関数を作成して、たとえば
windows.pas の function を何か適当なものに置換して測定してみればかなり差があると思うけど。
 


881 :デフォルトの名無しさん:2006/12/04(月) 16:45:59
>>878
何を作るかによるんじゃね。

882 :デフォルトの名無しさん:2006/12/04(月) 16:58:28
プログラム知識はほとんどないのですが、
http://nagoya.cool.ne.jp/palmtop/Magic.html
このソフトはパソコンの何をいじって音声を変えているのでしょうか。

パソコンの音声出力が数年前からおかしくなっていて諦めていたのですが、
このソフトを起動時に、たまにすごくクリアに聞こえるようになるのです。

10行ほどのプログラムと書かれているのですが・・・。

どなたかご教授いただければ幸いです。m(__)m

883 :デフォルトの名無しさん:2006/12/04(月) 17:06:08
>>882
音量変えてるだけ
あと、スレ違い

884 :デフォルトの名無しさん:2006/12/04(月) 18:00:53
>>883
失礼しました。
音量を変えてるだけ・・・ですか。

最適スレを探して詳しく質問してみます。

ありがとうございました。

885 :デフォルトの名無しさん:2006/12/04(月) 20:22:55
TmemIniFileで

A=abcdefg,123456
とあったときに、カンマの前とあとを別々に入れるにはどうしたらいいですか?

886 :デフォルトの名無しさん:2006/12/04(月) 20:32:51
どこに入れるの?

887 :デフォルトの名無しさん:2006/12/04(月) 20:45:06
>>886
A[i]:=ini.ReadInteger('設定','A,-1);

と、Aの配列に別々に入れようと思ったのです。
A[0]=abcdefg
A[1]=123456
となるようにです。

888 :デフォルトの名無しさん:2006/12/04(月) 20:56:02
ReadStringで読んで自分でバラせ

889 :デフォルトの名無しさん:2006/12/04(月) 22:41:08
>>879
そうですか、D7でも大丈夫かな。

>>881
スタンドアロン〜クライアント数台の小規模なDBアプリです。今のところFireBird使ってます。



890 :デフォルトの名無しさん:2006/12/04(月) 22:49:43
>>866
あー、TurboDelのソースはそうなってるね
D6だと問答無用でCharUpperBuffWのみになってる。
API呼び出してるとこ全部確認しなくちゃだわ。。。

>>874-875
BM法やSunday'sQC法使うとかループのあんロールするとか
FastCodeのPosExをMB対応に改造するとかすれば、
asm使わなくてもその4〜6倍以上速くなるよ


891 :デフォルトの名無しさん:2006/12/04(月) 22:56:30
× Sunday'sQC
○ Sunday'sQS           ...orz

892 :ミ,,゚Д゚彡 ◆A6VzDeLphI :2006/12/04(月) 23:04:21
>>880
やってるつもりだが。

StringsReplace
http://delfusa.main.jp/delfusalibrary/20060527212010/StringUnit/StringUnitLight.pas

もっと高速化してくれたら助かる。

procedure testStringsReplace;
で関数仕様はわかると思うので、このテストを通過するようにつくれば
同一仕様。

AnsiPosForwardというのも作っているので
汎用的に作っているので、高速化に主眼はないかもしれないな。
まあ、テスト書いているので
仕様を満たせば高速化に対するリファクタリングはいくらでも可能。


893 :デフォルトの名無しさん:2006/12/05(火) 00:07:11
>>746
もってきて入れ替えようとしたらVistaの強固なセキュリティの前に何もできませんでした
権限がtrustedinstallerじゃないとシステムフォルダは弄れないらしい
上書きコピーダメだったよ……

894 :デフォルトの名無しさん:2006/12/05(火) 00:35:17
どこか他の場所にコピーして、関連付けを変更したらどうよ。

895 :デフォルトの名無しさん:2006/12/05(火) 03:12:22
C++のテンプレートみたいなものある?

896 :デフォルトの名無しさん:2006/12/05(火) 03:42:46
no

897 :デフォルトの名無しさん:2006/12/05(火) 03:50:15
$INCLUDE でそれっぽい事は出来たかも。 お勧めはしない。

>? そもそも , 探すのに高速AnsiPos系関数があっても仕方がないよ。

898 :デフォルトの名無しさん:2006/12/05(火) 08:35:20
車輪の再開発しなくても外国のVCL高速化プロジェクトみたいのがあってそこで
Posはすでにあったような・・・・・

899 :デフォルトの名無しさん:2006/12/05(火) 18:55:20
>>888
遅レスですみません。
みんなそういう風にやってるのでしょうか??

900 :デフォルトの名無しさん:2006/12/05(火) 19:58:41
>>899
普通は1つのキーに1つの値を入れる

TStringListでも作ってCommaTextにでも放り込めば楽かもしれない


901 :デフォルトの名無しさん:2006/12/05(火) 20:01:12
どうせ負数は扱わないと分かっていても、符号付きの型を使った方がいいのですか?
TStringsのCountなどはIntegerなので・・・

 for i := 0 to myStringList.Count - 1 do

こういう書き方は頻繁に使うと思いますが、
もしCountがCardinalで 0 だったら、ここでオーバーフローになってしまうので、敢えてIntegerなのかなぁと。

902 :デフォルトの名無しさん:2006/12/05(火) 20:08:03
>>898
日本語がちゃんと通るやつって今はあるの?
それが見つからなかったから一度自分で作ったことがあるんだけど、4,5年前.

903 :デフォルトの名無しさん:2006/12/05(火) 21:05:11
>>894
HLPをダブルクリックで開くことは出来ますが
F1で起動したり、メニューからヘルプ→Delphiヘルプで起動することが出来ません

F1でヘルプがみたいです……orz

904 :デフォルトの名無しさん:2006/12/05(火) 21:06:55
早ければ12月中にMSから配布されるだろうから、待て。

905 :デフォルトの名無しさん:2006/12/05(火) 21:08:41
>>901
どこぞのDelphi本には、cardinalを使わず、範囲限定のinteger型を作ると便利と書いてあった。

type
IntNatural=0..MaxInt;

で、cardinalより何が有利かというと、integer型の変数と四則演算とかした場合、int64に拡張されないからパフォーマンスで有利と言うこと。


906 :デフォルトの名無しさん:2006/12/05(火) 21:17:33
Delphi用の3D用のVectorやら、Matrixのライブラリを探しています。
どこかにあったのですが、忘れてしまいました。

907 :デフォルトの名無しさん:2006/12/05(火) 21:25:03
そういえばInt64のunsignedってあったっけ

908 :デフォルトの名無しさん:2006/12/05(火) 21:38:18
>>906
このあたり?

http://www.efg2.com/Lab/Library/Delphi/Graphics/
http://graphics32.org/wiki/

909 :デフォルトの名無しさん:2006/12/05(火) 21:39:12
>>906
Quadruple Dのs_mathpackとか

>>907
ない。
ちなむと、Turbo C++にはあるけど、色々不安定なのであんまり使わない方がいい。

910 :デフォルトの名無しさん:2006/12/05(火) 21:45:39
D3DXなんてどうだろう?

911 :デフォルトの名無しさん:2006/12/05(火) 22:52:01
>>898,902
FastCodeの事なら今でも(多分これからも)マルチバイト非対応
ロシアあたり探せば対応のがあるだろうけどw

912 :デフォルトの名無しさん:2006/12/05(火) 23:03:54
なんで露助はDelphi好きなんだ?

913 :906:2006/12/05(火) 23:24:05
GLSceneの中にVectorGeometry.pasってのがありました。
これです。
これの元になったやつってどこで配布しているんだろ・・・


っていうか、GLScene見てたけど、これスゲーわwww
これでなんか作ってみようw

914 :デフォルトの名無しさん:2006/12/06(水) 01:05:35
専用スレあるじゃん!
Delphi持ってるならGLSceneを使え
http://pc8.2ch.net/test/read.cgi/tech/1163269079/l50



915 :デフォルトの名無しさん:2006/12/06(水) 01:34:03
>>914
日本語情報が全然無いので茨の道ではあるな

916 :デフォルトの名無しさん:2006/12/06(水) 08:13:38
英語できないプログラマなんているわけないだろ

917 :デフォルトの名無しさん:2006/12/06(水) 08:37:38
ん?誰か呼んでる気が?

918 :デフォルトの名無しさん:2006/12/06(水) 10:34:14
>>916
そんなあなたに、こんな実情をw
http://pc7.2ch.net/test/read.cgi/software/1103786965/267-

919 :デフォルトの名無しさん:2006/12/06(水) 10:58:12
>>918
よくそのレスからそれだけ議論を広げられるなw

920 :デフォルトの名無しさん:2006/12/06(水) 11:35:03
>>912
調べ物をすると露仏中のサイトがかなり多いんだよな。
他の開発言語がどうなんだかよく知らないけど。

921 :デフォルトの名無しさん:2006/12/06(水) 12:43:45
>なんで露助はDelphi好きなんだ?
教育機関でPascal教えてそうじゃない?

922 :デフォルトの名無しさん:2006/12/06(水) 12:47:51
M$謹製じゃないとだめ、という日本が異常。

923 :デフォルトの名無しさん:2006/12/06(水) 21:08:04
英語圏のプログラマはUNICODEを扱うプログラムが下手だ。

924 :デフォルトの名無しさん:2006/12/06(水) 21:30:32
日本圏のプログラマはUNICODEを扱うプログラムが上手い?

ぜんぜん。

925 :デフォルトの名無しさん:2006/12/06(水) 21:50:22
>>924
素晴らしく的を射得てる

926 :デフォルトの名無しさん:2006/12/06(水) 21:53:58
英語圏じゃないプログラマなんているの?

927 :デフォルトの名無しさん:2006/12/06(水) 22:07:43
>>926
おまいさんは英語圏なのかそれともプログラマじゃないのか?

928 :906:2006/12/06(水) 22:10:56
>>920
俺も最近そう思ったw
露仏中のサイトで、Delphiが結構多い。見れなくてウザイw

929 :デフォルトの名無しさん:2006/12/06(水) 22:42:52


■★■プログラミング言語 Borland Delphi3.1&Delphi3.0〓正規品〓CD二枚(送料込) 【1999円〜】
http://www.bidders.co.jp/item/79055158





930 :デフォルトの名無しさん:2006/12/06(水) 22:54:44
反米反MSなのか?

931 :ななしへたぐらま ◆XcB18Bks.Y :2006/12/06(水) 23:37:19
>>797
遅レスですいません.

画面に表示されているとおりに印刷したいのでしたら(『ハードコピー』と呼ばれているものです)
内部で持つデータはビットマップでよいのではないかと思います.

また一般的なアプリケーションではプリンタの選択はユーザーが印刷を指示する直前にできます.
プリンタやプリンタの設定が変われば解像度も印刷可能範囲も変わってしまいますので
プリンタの設定を決めてからでないと印刷できません.
そのため画面への描画と同時にPrinter.Canvasに描画するということはないと思います.


932 :デフォルトの名無しさん:2006/12/07(木) 00:27:08
UNICODEを扱うプログラムが上手いのは中国人。たぶん。

933 :デフォルトの名無しさん:2006/12/07(木) 01:23:41
Delphi6 personalでプロジェクトを開くときに
カレントフォルダがBinになってしまうけど設定で他フォルダに変えられないの?

934 :デフォルトの名無しさん:2006/12/07(木) 01:24:19
↑カレントディレクトリの間違い

935 :デフォルトの名無しさん:2006/12/07(木) 01:35:22
>>933
D6ならショートカットアイコンの作業フォルダを変更するとよろし。

936 :デフォルトの名無しさん:2006/12/07(木) 02:11:14
>>935
すげぇ できたよ
こんなんよく知ってるね。って俺が知らんだけだな
ありがとう

937 :デフォルトの名無しさん:2006/12/07(木) 12:42:14
ところでTurboDelphiエクスプローラ版で作ったプログラムはWebとかで公開してもいいの?
過去のアカデミック版はフリーウェアでも公開不可だったと思うんだけど、どうなんだろう。
license.txt読んでみたけどよくわからん。

938 :デフォルトの名無しさん:2006/12/07(木) 13:04:46
>>937
TurboDelphi無料版の場合は、商用すら可能。


で、微妙なのは、商用不許可なD6無料版で作ったソースをTurboDelphiでビルドしただけのものをD6のライセンスに従う必要があるかどうかだな。

939 :デフォルトの名無しさん:2006/12/07(木) 13:08:50
バレナイ

940 :937:2006/12/07(木) 13:12:08
>>938
おぉ、そうなんだ。
ボーランドも偶には気前いいなあ、サンクスコ

941 :デフォルトの名無しさん:2006/12/07(木) 13:16:47
無料版では商用利用も可能なのに、
金出して買ったアカデミック版ではフリーウェアですら公開不可という理不尽さ。

942 :デフォルトの名無しさん:2006/12/07(木) 13:29:39
まあ、Turboの無料版は出来ないことが結構多いからなあ

943 :デフォルトの名無しさん:2006/12/07(木) 13:30:45
つか、アップデートかけたら、フリーカーソル解除すらできなくなるというのが終わってる。

944 :デフォルトの名無しさん:2006/12/07(木) 13:34:45
方法がないわけじゃないけど。

945 :デフォルトの名無しさん:2006/12/07(木) 13:54:23
>>944
kwsk

946 :デフォルトの名無しさん:2006/12/07(木) 14:09:45
買えば皆幸せ。

947 :デフォルトの名無しさん:2006/12/07(木) 14:22:33
delphiのソースをhtmlにしてくれるようなアプリってある?
自動で色付けしてくれるようなやつがいいんだけど。
ぐぐって見たけどロシア語のしかみつかんなかった。

948 :デフォルトの名無しさん:2006/12/07(木) 14:26:56
TurboのPro版とD7のEnt版ってどっちが高機能?


949 :デフォルトの名無しさん:2006/12/07(木) 14:30:50
2006のバグがすっかり取れた2007が出るなら買ってもいい。

950 :デフォルトの名無しさん:2006/12/07(木) 14:39:19
>>947
GExperts にそんな機能があったような。
CSS が古いけど。

951 :デフォルトの名無しさん:2006/12/07(木) 14:41:50
>>949
アカデミック買っとけ。8千円だぞ。
どうせフリーソフトも商用ソフトも作らないんだろ。

952 :デフォルトの名無しさん:2006/12/07(木) 15:28:01
>>940
> 過去のアカデミック版はフリーウェアでも公開不可
>>941
> 金出して買ったアカデミック版ではフリーウェアですら公開不可という理不尽さ。

アンチ必死すぎ

953 :デフォルトの名無しさん:2006/12/07(木) 16:32:42
>>952
これはマジ話。ウソだと思うならボーランドにメールだしてみろ

954 :937:2006/12/07(木) 16:39:37
なぜかアンチ認定された(´;ω;)

955 :デフォルトの名無しさん:2006/12/07(木) 16:40:56
俺、2006のアカデミック買って、少し後悔してる。
買ってlicense.txt読むまで、「アカデミック版で作られた一切の物は、教育用途以外では配布不可」って知らなかった。
今更非アカデミック版買うのも微妙なので、新しいバージョンを出るのを待ってる。購入資金も貯めてる。
BDS2006自体は、そこそこ満足しているんだがなぁ・・・

956 :デフォルトの名無しさん:2006/12/07(木) 17:28:21
アカデミーパックの値段(割引率)みれば
ライセンス制限はしょうがないと思うよ

ただpersonal版とか体験版とか
無料版があるのになぜアカデミックがあるのか
無料版で許されてる配布がアカデミックではダメなのかという別の問題もある

単に無料版出す時に
アカデミック版のことを忘れていただけという気もするがなw

957 :デフォルトの名無しさん:2006/12/07(木) 17:30:29
値段に釣られてアカデミック買う奴なんているんだなw

958 :デフォルトの名無しさん:2006/12/07(木) 17:55:00
貧乏学生なので、アカデミック版しか買えないんです・・・
今日の夕飯は米と味噌汁だけ。ばあちゃん病院で待ってるから、そろそろ看に行かないと・・・

959 :デフォルトの名無しさん:2006/12/07(木) 17:59:25
delphiを作る開発ソフトって何ですか?

うん delphiはdelphiで作ってるんだ

じゃあ そのdelphiは何から作ってるんですか?

delphiを作るdelphiもdelphiから作ってるんだよ

じゃあ そのdelphを作るdelphiのdelphiは何から作ってるんですか?

delphiを作るdelphiのdelphiもdelphiから作ってるんだよ

じゃあ そのdelphを作るdelphiのdelphiのdelphiは何から作ってるんですか?

delphiを作るdelphiのdelphiのdelphiもdelphiから作ってるんだよ

じゃあ!・・・・・・・

(以下エンドレスラヴ)


960 :デフォルトの名無しさん:2006/12/07(木) 18:06:19
じゃあオマイがdelphi作れ(・∀・)9m

961 :デフォルトの名無しさん:2006/12/07(木) 18:15:42
>>958
学生さんがDelphiをやらなけれいいだけの話だと思うよ。

あと、俺も学生んときはスパゲティばっかり作って食ってたなあ。

962 :デフォルトの名無しさん:2006/12/07(木) 18:45:49
>>958
貧乏人はMS謹製ソフトでも使ってオナニーしてろよwwww
Delphiは選ばれたセレブリティのための開発環境なんだよ。

963 :デフォルトの名無しさん:2006/12/07(木) 18:51:09
Borlandじゃないとダメなんです・・・小さい頃、曾祖母がそう言ってました・・・

964 :デフォルトの名無しさん:2006/12/07(木) 19:35:10
勉強目的なら無料版で充分
楽して金取れるソフト作りたいならちゃんと金払え
本当に金をかけずに金が欲しいなら無料版で作れよ

965 :デフォルトの名無しさん:2006/12/07(木) 19:49:54
>>953
うそつけ!
俺が買ったときは、そんな制限なかったぞ。

966 :デフォルトの名無しさん:2006/12/07(木) 19:50:47
・・・って、>>956みたら、マジかよ。
いつのまにそんなクソライセンスになったんだ?
ナンセンスじゃないライセンスじゃなかったのかよfaf!!

967 :デフォルトの名無しさん:2006/12/07(木) 20:35:47
>>966
Del7あたりからクソライセンス化していった。
Delphi本体もライセンスに合わせてクソ化していってる気がする

968 :デフォルトの名無しさん:2006/12/07(木) 21:14:35
最近はボーランドのナンセンスでないライセンスとかいうギャグは
ライセンス条項に書いてないよな。ナンセンスになったからか

969 :デフォルトの名無しさん:2006/12/07(木) 22:03:30
>>965
Delphi6のUpdate2から。

970 :デフォルトの名無しさん:2006/12/07(木) 22:23:42
本当に素人なんですけど、ターボと普通のDelphi6の違いはなんですか?

971 :デフォルトの名無しさん:2006/12/07(木) 22:28:26
なまえとバグの量、ヘルプの質。

972 :デフォルトの名無しさん:2006/12/07(木) 22:29:40
あと重さ

973 :デフォルトの名無しさん:2006/12/07(木) 22:32:00
フリーやシェアのコンポをばかすかインストールしたり自分で
カスタマイズしてるんですが、今のPCが壊れたら開発環境構築しなおすのに
無茶苦茶手間かかりそうです。みなさんどんな管理をされていますか?

974 :デフォルトの名無しさん:2006/12/07(木) 22:37:40
レジストリを保存すれば環境の9割は復元可能。
コンポはそれを使うアプリ毎にパッケージも作った方が良いよ。



975 :デフォルトの名無しさん:2006/12/07(木) 22:43:53
開発環境の話だろ。外部コンポはなるたけ使わない、っていうのが最強。

976 :デフォルトの名無しさん:2006/12/07(木) 22:53:36
yahoo なんかでは、無料でストレージスペースを借りられる。コンポのソースを
そこに入れておけば、いつでも復元出来る

977 :デフォルトの名無しさん:2006/12/07(木) 23:02:56
>>973
レジストリとフォルダをユーティリティでバックアップ。
+PC全体をイメージング。

978 :970:2006/12/07(木) 23:17:08
>>971-972
基本的な機能に大きな違いはないと言うことですか?
新しいTarboのほうがむしろ機能が追加されて、
代わりに不安定で重くヘルプの出来が悪いという理解でいいのでしょうか?

979 :デフォルトの名無しさん:2006/12/07(木) 23:37:24
>>978
まずはIDE と作成するEXE を分けて考えましょう。
あとはお前さんのPCの性能ね。

980 :デフォルトの名無しさん:2006/12/07(木) 23:38:55
ここでウダウダ言っている連中は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が何か理解してから来いというのであれば、スルーしていただいて結構です。

983 :デフォルトの名無しさん:2006/12/08(金) 00:29:49
D6 使える環境なら D6 つかっとけ。

984 :デフォルトの名無しさん:2006/12/08(金) 00:31:01
IDEが分からないくらいの超初心者ならヘルプがちゃんと見られるD6使うべし。

985 :970:2006/12/08(金) 00:34:37
>>983-984
ありがとうございます
そうします

986 :デフォルトの名無しさん:2006/12/08(金) 06:01:11
Delphi7で開発していたプロジェクトをTurboDelphiに移し、やっぱ、Delphi7で
開発しようと思って、戻す場合の注意点をお教えください。

Delphi7以降に追加されたプロパティをうっかりいじって、フォームファイルに記録された場合、
Delphi7でコンパイルできなくなる
ぐらいしか思いつきませんが、他にもあるのでしょうか??

プロジェクトファイルの拡張子が変わってXML形式になってると思いますが、これはDelphi7で作られた
dprのファイルを使えば、問題ない??

後、Turboでエディタが色々な形式に対応してる(Unicodeなど)と思いますが、
Delphi7のプロジェクトをTurboで読みこむと勝手に変換されるってことはないですかね??

プロフェッショナルの方お願いします。



987 :デフォルトの名無しさん:2006/12/08(金) 11:17:01
d7をアンインストールしてなければそのまま使えるでしょ

988 :デフォルトの名無しさん:2006/12/08(金) 11:18:52
dcu は全部削除した方がいいと思う。

989 :デフォルトの名無しさん:2006/12/08(金) 11:23:33
>>986
バージョン管理ツールを使え。んで戻せ。

990 :デフォルトの名無しさん:2006/12/08(金) 11:33:37
それは後知恵w

991 :デフォルトの名無しさん:2006/12/08(金) 13:38:11
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をクラスとして使いたいのですが、
どうすればいいのでしょうか?

994 :デフォルトの名無しさん:2006/12/08(金) 14:02:00
>>992
> 乱数生成関数を初期化するには,Randomize を呼び出すか,RandSeed 変数に値を割り当ててください。
> これらを行わないと,アプリケーションを起動するたびに同一の順番で数値が出現する乱数列となります。

だそうです。
一般的にseedが同じならば生成される乱数列も同じになります。

995 :デフォルトの名無しさん:2006/12/08(金) 14:07:22
>>994
randomizeは知ってるんですが、randomizeをしても5が2回現れたり、1が一回も現れなかったりで
初期化するとはまた違うと思うんですが…
55312とかだとダメなんです

996 :デフォルトの名無しさん:2006/12/08(金) 14:35:00
>>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;

997 :デフォルトの名無しさん:2006/12/08(金) 14:38:16
>>993
意味がよく分からない
VBのDLL内に存在するクラスを
Delphiで使用するってことか?

998 :デフォルトの名無しさん:2006/12/08(金) 14:42:24
>>996
やっぱりそういう方法のほうが一般的なんでしょうね
random関数を使ってのやりかたはあきらめます
ありがとうございました

999 :デフォルトの名無しさん:2006/12/08(金) 14:51:42
1000ゲト

1000 :デフォルトの名無しさん:2006/12/08(金) 14:55:38
   _, ._  パァーン
 ( ‘д‘)
    ⊂彡☆))Д´) ←>>1001

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

246 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)