Delphi相談室その5

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
Delphi関連の Tips Q&A はこちら。

■前スレ
Delphi相談室その4
http://pc.2ch.net/test/read.cgi/tech/1018211735/

■気楽な雰囲気がよければこちら
モナーの *やさしい* Delphi質問スレ Ver.7
http://pc.2ch.net/test/read.cgi/tech/1021201697/

■C#も含む話題はこちらに
C# 仲良し Delphi Round 2
http://pc.2ch.net/test/read.cgi/tech/1022662451/

つづく >>2-3 あたり
2デフォルトの名無しさん:02/06/01 17:53
■Delphi関連スレ
ミ,,゚Д゚彡フサギコのフサフサDelphi談話室B
http://pc.2ch.net/test/read.cgi/tech/1021554929/
★クライアントサイド最強の Delphi に物申す★
http://pc.2ch.net/test/read.cgi/tech/1001442200/
Delphiで小さな実行ファイルを作ろう
http://pc.2ch.net/test/read.cgi/tech/1009080085/

■過去スレ
Delphi相談室その4
http://pc.2ch.net/test/read.cgi/tech/1018211735/
Delphi相談室その3
http://pc.2ch.net/test/read.cgi/tech/1010153466/
Delphi相談室その2
http://pc.2ch.net/tech/kako/995/995950803.html
Delphi相談室
http://piza.2ch.net/tech/kako/971/971261573.html
不要なusesを探す簡単な方法として
uses 節から 1つづつ取り外してはコンパイルしてみてエラーが出るかどうかという方法を使おうと思います
標準出力を得る為に無名パイプが必要になるので、
検索した所、サンプルコードはみつけました。
そこで、無名パイプ クラスを作ろうかと思います。

 既に誰か作って公開してあるのなら無駄なので、ご存知なら教えて下さい
>>3
だからその方法は駄目だって。
usesから必要なユニット外してもコンパイルエラーでないことがある。
>>4
なんで出ないの?
>>4
自分もこの方法をよく使うもんで、どういった状況でそうなるのか気になる。
よければ教えて欲しいかも。あと、再構築とかだったらどうだろ?
ミ,,゚Д゚彡フサギコのフサフサDelphi談話室B
http://pc.2ch.net/test/read.cgi/tech/1021554929/

このスレに同じ話題がある
>>7
そのスレの148だな。なるほど。
96:02/06/02 00:11
そういえば、前に自分もVCL標準クラスと同名のクラスでラップさせてたっけ。
褒められたもんじゃないけど、バグ対策だったか何かで・・・。
この場合、usesからユニットはずしてもコンパイルが通るね。サンクス >>7-8
>>4
再構築ぐらいせえよ
>10
( ´,_ゝ`)プッ
今エディタを作っているのですが、Undo・Redoを実装するために
先入れ後出し配列を使おうと思います。
で、Stringを格納するクラスを作ろうと思うのですが、Contnrユニットにあるクラスを継承させるか、
TStringsList周辺のクラスから継承させるべきか迷っています。
どちらから継承させるのがベストでしょうか?
>>12

TObject から。マジレスだよ
>>12 作る必要なし。*後入れ先出しなら* TObjectQueue でいいじゃん
Redoの実装には Queue を2本用意するか、
循環リストを用意する必要があると思われ。
循環リスト作るならTObjectListでリングバッファとかな。
15デフォルトの名無しさん:02/06/03 01:10
>>12>>14
>*後入れ先出しなら* TObjectQueue でいいじゃん
後入れ先出し(LIFO)はQueueじゃなくてStackですが・・・
1614:02/06/03 01:17
イヤン
吊ってくる。
17デフォルトの名無しさん:02/06/03 01:34
じゃ、TObjectStack使っとけ。
やっぱりTObjectStackですか
ありがとうございます

循環リストと後出しリスト2本、どっちが実行効率が良いでしょうか?
後出し2本だとUndo・Redoするたびにリストに追加/消すを行うことになるから、
やっぱりリング作ったほうがいいですかねぇ…
リストの伸長に伴う再割当てのコストを考えると循環リストかね。
TObjectStack って事前に割当量を設定できないっぽいから。
どうせなら循環リストクラスを作って公開しておくれ >>12
用途を考えるとどこかに公開されてそうだが、見た記憶がない、、
作るなら13の言う通り内部に動的配列を抱えた TObject 継承かね。
基底クラスはPointerで扱ってTObject用に継承したのを用意する、と。
利用中にリングサイズを変更できる仕様でタノム
あとTOrderedListクラスと使用感が近いと好感度が高いかも。
>>19
>リストの伸長に伴う再割当てのコストを考えると循環リストかね。
>TObjectStack って事前に割当量を設定できないっぽいから。

TObjectStackやTObjectQueueは配列とは根本的に異なるデータ構造を
しています。だから割当量を設定できないのも当然、再割当てのコストは
どのような状況でもほぼ一定です。

あと循環リストならTObjectQueueで代用可能じゃないかな?
213:02/06/03 13:40
無名パイプで標準出力を取る事は出来るようになりました。
(結構難しかったです。 最初取り出した後、スレッドが終了できなくて困った)

ただ、パイプで出力を拾わなくても、終了コードが 0か1かで判定出来る
という事が判ってガックリです。
22名無し~3.EXE:02/06/03 15:24
前スレでタスクバーから表示が消せないと書いたものです。
前スレ936さんに教えていただいた
SetWindowLong(Application.Handle, GWL_EXSTYLE,
GetWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW);
この方法では、最小化時にスタートボタンの上にタイトルバーだけ残るといった症状が表れてしまいました。

ShowWindow(Application.Handle,SW_HIDE);
これでは全く変化が無く、

RichEdit1.Lines.Assign( Memo1.Lines);
これだと実行時にWindowまで現れません。

Delphi Personalだからなのか、
OSがWin2kということで起こるのでしょうか?
どうかタスクバーから表示を消す良い方法を教えてください・・
>>22
TIconHideってコンポーネントがそのものズバリなものだからソース見てみたら?
2422:02/06/03 16:29
>>23
ソース内にTiconありませんでした・・
25Delフサギコ ◆zE1iiRdQ :02/06/03 16:54
program Project1;

uses
 Windows,
 Forms,
 Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
 ShowWindow(Application.Handle,SW_SHOW);

 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 Application.Run;
end.
              _____________
  ,,,,,,,,,,,,,,,,∧,,∧   /
〜′,,,,,,,,,,ミ,,゚Д゚彡 < ゴルァ?
  UU"""" U U    \_______________
>>25
ぶらくら?
2722:02/06/03 17:22
すみません、書きミスってました。

RichEdit1.Lines.Assign( Memo1.Lines);

→ Application.ShowMainForm := False;
>>25 ShowWindow(Application.Handle,SW_SHOW);

なんの意味があるの?
>>22

Becky! みたいに最小化するとタスクバーから見えなくするには

type
TForm1 = class(TForm)
ComboBox1: TComboBox;
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private 宣言 }
public
procedure AppMinimize(Sender: TObject);
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.AppMinimize(Sender: TObject);
begin
ShowWindow(Application.Handle,SW_HIDE);
Timer1.Enabled := true;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnMinimize := AppMinimize;
Timer1.Enabled := false;
Timer1.Interval := 5000;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled := false;
ShowWindow(Application.Handle,SW_SHOW);
Application.Restore;
end;
3022:02/06/03 21:49
>>29
ありがとうございます。
でもShowWindow(Application.Handle,SW_HIDE);
が利かないんですよね。
一体何故なんだろう・・
31ビル・デイツ:02/06/03 22:42
デルファイ5。
フォーム1のボタンをくりくするとフォーム2を呼び出す。
このとき、フォーム2が表示されている間、フォーム1は最小化若しくは操作不能状態にする。
フォーム2を終了させると、フォーム1を元のサイズに戻し、若しくは操作可能状態にする。

というのは、どうすればいいのですか?

ちなみに、フォーム1のボタンに

form2.show;
form1.enabled := false;

フォーム2のボタンに

form1.enabled := true;
form2.close;

とかやってみたけど、だめだった。
>>31
フォーム2.ShowModal;
>>31
↓が常套手段だと思う

// Form2を開くメソッド
TForm1.OpenForm2;
begin
 Form2:=TForm2.Create(Self);
 Minimize;
 Form2.Execute;
Normalize;
 Form2.Release;
end;

procedure TForm2.Execute; // publicメソッド
begin
 ShowModal;
end;

Form2は自動作成しないでおくこと
×Normalize;
× Form2.Release;
○ Form2.Release;
○ Normalize;
だったかな
>>30
いったい、どうしたいのかわからない。
タスクバーに表示しないようにして、さらに最小化時にアイコン化
しないようにしたら、完全に消えてしまうような気がするが・・・。
どうやって復帰させるの?

どういうアプリなのか、複数のフォームがあるのか、それとも
タスクトレイにアイコンがあるのかもわからんし。
そうやって情報を小出しにされると答える側も萎えると思うんだが。
3622:02/06/04 00:55
>>35
すみません。
ランチャーを作っていて、タスクトレイに常駐させたいのです。
タスクトレイにアイコンを表示してあって、
現在そこから最小化、元に戻すはできます。
そこでタスクバーにも表示されると邪魔なので消したいのですが、
上記の通り何故か表示されたり、
表示されなくても最小化時にタイトルバーだけ残ってしまったりと、
おかしな現象が起きているのです。
>>35
22は「教えてクン養成マニュアル」の実践者なのでしょう
こういう場合、放置が正しい扱い方かと思われ
3837:02/06/04 00:58
>>36
分かったよ・・・ごめんね
3922:02/06/04 01:08
>>37
嫌がらせはやめてもらえませんか?
私は自分なりにかなり調べたつもりです。
前スレと本スレにも書いてある通り
一般にタスクバーから消去する方法は試しています。
あなたが分からなくて暇だからと余計なことを書き込まないで下さい。
私は真剣にプログラミングについて勉強したいのです。

これ以上は荒しと同等と思われては嫌なので、
私の質問に対して答えてくださる方へのレスしか書き込みません。

原因や解決策がわかる方、どうかよろしくお願いします。
つーか、トリップ付けろ。もしくは諦めろ。
>>22
これじゃだめなのか?

type
   TForm1 = class(TForm)
      ApplicationEvents1: TApplicationEvents;
      procedure ApplicationEvents1Minimize(Sender: TObject);
   private
      { Private 宣言 }
   public
      { Public 宣言 }
   end;

var
   Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ApplicationEvents1Minimize(Sender: TObject);
begin
   Hide;
end;

end.
4241:02/06/04 01:32
タスクバーから消すのは

program Project1;

uses
   Forms, Windows,
   Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
   SetWindowLong(Application.Handle, GWL_EXSTYLE,
      GetWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW);
   Application.Initialize;
   Application.CreateForm(TForm1, Form1);
   Application.Run;
end.
4322:02/06/04 01:37
>>41
だめっぽいです。
タスクバーにもでてきます。
でも2日も経って似たような症状の人の書き込みも無いので、
私の環境だけの特殊な症状なのでしょうか?
一度OSごと再インストールした方がいいのかな・・
4422:02/06/04 01:44
>>42
これではタスクバーからは消えるんですが、
最小化時Windowのタイトルバーだけ残ってしまいます。

>>41さんありがとうございます。
どうしてうちだけムリなんでしょう・・・
>>41>>42の両方やってる?
4641:02/06/04 01:54
>>43
>>44
TForm1.Hide; で消えてたタスクバーに現れるって事?
それともTForm1.Hide; でフォームが消えないって事?

どっちにしても謎だな。これ以上はわからん。スマンな。
4722:02/06/04 01:55
さっき気付いてやってみました。
どうもありがとうございます。
できました。
>>41さん、ほんとありがとうございます
ご迷惑をおかけしましたm(__)m
なんでトリップ付けないの?荒し?>>22
4941:02/06/04 02:42
>>47
両方やってなかっただけなのか。
そう書いとくべきだったか。スマンな。
まあ、うまくいってなにより。

ちなみに>>36
> 表示されなくても最小化時にタイトルバーだけ残ってしまったりと、
> おかしな現象が起きているのです。
は、おかしな現象でもなんでもない正常な動作だよ。

Delphiはサイズ0のアプリケーションウィンドウ(タスクバーに表示されるのはコレ)
があって、すべてのフォームはそのアプリケーションウィンドウに所有された
ウィンドウであることを覚えとくといいかもね。
5022:02/06/04 03:13
>>41
ご教授どうもありがとうございます。
> Delphiはサイズ0のアプリケーションウィンドウがあって
これは知りませんでした。
まだまだ奥が深いですね。
もっと勉強してきます!
ホントにありがとうございました。
>>50 まだまだ奥が深いですね。

アプリケーションウィンドウの存在は、奥が深い、というより
VCL 実装上の理由によるので、欠点だと思っている人の方が
多いのだよ。
>>22 の問題は FAQ なので、だれかが書いていたように、たんにソースつきの
コンポーネントをDLして解析するだけでは? 22 の Application ウィンドウ
の動作はどこか変なので、それを解明した方が根本的な解決につながると思ふ

53ビル・デイツ:02/06/04 23:16
>32

あ、そうか〜。

さんきゅです。
54ビル・デイツ:02/06/04 23:18
>33

いまいちよく分からないんですけど、このコードは、正しいんですか?

minimizeとかnormalizeだけの行が、エラーになるんですけど。
normalize -> restore
じゃないかなー
56デフォルトの名無しさん:02/06/04 23:42
今日、エーアイ出版の本を買った。
30ページに「ディスクトップ」の文字を発見して、愕然とする。
今の版では直ってるだろうか?
30ページに「150円引き」の文字を発見して、ぶちきれる。
えーと、MainFormを非表示にするとタスクバーの表示が
消えてしまうのって回避する方法ってありますか?

MainFormと別のフォームを、一度に片方しか表示しないで
切り替えたいんだけど、途中でタスクバーの表示が点滅してしまい、
他にタスクバーに表示があると一番右端に動いてしまいます。

procedure TForm1.Button1Click(Sender TObject);
begin
 Hide;
 Form2 := TForm2.Create(Application);
 try
  Form2.ShowModal;
 finally
  Form2.Release;
  Show;
 end;
end;

こんな感じです.

これテストしてて気が付いたけど、もともとFormのVisibleをプロパティエディタで
Trueにしとくと、ShowModalって使えなくなるんですね・・・
59もういないんじゃねーの? ◆gnutn99c :02/06/05 00:10
まぁ、トリップ付けないから、こーなるわな(藁
>>58
   (゚д゚)  Form2のOnActivate(OnShowだとタスクバーがちらつく)でForm1を消して、
  ~(  )− Form2のOnCloseでForm1を表示しる!
  / >
>>60
ネタは放置しる!
ネタなの?
63Delフサギコ ◆zE1iiRdQ :02/06/05 00:54
           _____________
  ∧,,∧    /
  ミ,,゚Д゚彡 < VCLのForm挙動にこだわるのは
  ,;゙  ミ     \_茨の道だよ。
 ミ.  ミ
/゛゛゛゛

http://homepage1.nifty.com/wizman/component/neosdi/index.html
これを使うと、なかなか改善されて鬱が解消されるかも。
64デフォルトの名無しさん:02/06/05 01:04
>60
できたー!ものすごくありがとう!誰だネタって言ってるのは.
しかし、あっさりできてちょっと鬱・・・俺の2時間・・・

>63
頂いたので、研究してみます
C,C++でいうdoxygenのような
ObjectPascalで使えるドキュメント自動生成ツールはないでしょうか?
6665:02/06/05 15:50
age忘れました。
ML入れ
>>65
無いです。Delphiなんて業務じゃ使えないので。
>>68
上司が無能だとお互い苦労するね、VBで組んだ方がいいシステム組めるとかって
錯覚してる奴多いよね、自分の能力がVBにマッチしてるだけなのにさ。
しかも、効率効率と五月蝿い上司ほど、VBが好きなのは笑える、効率重視ならDelphi使う
のが普通だろうに。まぁC#って選択もこれからはあるかもしれないけど、まだ安定性とか
未知な部分が多いからDelphiを使いたいよね。
7069:02/06/05 18:21
読み直してみたら、なんか俺誤解してる?

68は煽りなのかな(?_?;
別に業務で使うわけじゃなくても、
doxygenやjavadocみたいにクラス階層や依存関係をビジュアルに出力してくれるツールは
便利だと思うが。
特にしばらくほったらかしにしといたコードを読む場合や他人が書いたコードを読む場合とか。
>>65 無料のものを探してるの? 
有料なら
"ドキュメント自動生成 Delphi"で検索すれば出るでしょ
日本でDelphiのみのものが2つ、幾つか対応してるのも
>>72
無料の物を探しています。
>>73
じゃあ国内はこの程度かな

http://www2.big.or.jp/~osamu/
Unit Reporter非営利目的の使用はフリー

http://www.cyberware.co.jp
フリーウェアのVer 1.2では、Word未対応、グローバル変数、関数対象外

>>74
両方使ってみたのですが全く使い物になりませんでした。
Unit ReporterはBDEが初期化できないというエラーが出て動かない。
D/Scribeは印刷プレビューしようとするとメモリを食い尽くしてしまってプレビューできない。
国内じゃなくてもいいので有名どころのツールは何か無いでしょうか?
それとD/Scribeは印刷専用のようだったので、
できればHTMLやRTF等で結果が出力できればいいのですが…
DocBuilderというのを海外で見つけたので使ってみましたが、
HTML出力は出来ましたが依存関係やクラス階層等を出力してくれないのと、
出力するHTMLがdoxygenに比べて気が利いていない感じです。
doxygenのdelphi対応版とか誰か作っていればいいんですが…
>>77
自分でやってみたら?
>>78
私にはそういう高度な事はできそうにないので…
>>75
 BDEが初期化出来ないって、もしかしてD6パーソナル?
D/Scribeも自分の所では問題無かったし

海外版は自分で試してみて・・評価は教えてね
http://www.torry.net/tools_documentation.htm
>>80
Del6パーソナルです。
D/Scribeはこちらの環境ではプレビュー時にいくら待っても
プレビューしてくれなくてメモリだけどんどん食っていって
400MB位持っていかれたところで強制終了しました。

それとページ紹介ありがとうございます。
フリーのものを2つとも試してみましたが、
DelphiDoc v.2.0 …見た目はそれなりに良いが
依存関係や呼び出し関係等が出力できない
dpd3…印刷専用
という感じでした。

>>81
もう調べました。
DocBuilderもgoogleでみつけたものですし。
>>54
 minimize→WindowState:=wsMinimized;
 normalize→WindowState:=wsNormal;
と読み替えておくんなせい
85デフォルトの名無しさん:02/06/06 06:32
おい、Delphi相談室その4より下がってるぞ!!
86デフォルトの名無しさん:02/06/06 11:30
あげてみた
87Delフサギコ ◆zE1iiRdQ :02/06/06 13:51
質問してみた。
________
|          .|
|  教えて!   .|
|_______|
∧,,∧||
ミ*゚Д゚||
〃 ⊃||

教えてくださいませ。
今更なんですが、コンストラクタとか
オブジェクトの生成についての質問っす。

引数付きコンストラクタを実装して
その引数の条件によってはそのオブジェクトを生成したくない

というものを作りたいとします。

例えば、
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1021888173&res=10
ここのTShortcutFile

constructor TShortcutFile.Create(FileName: TFileName);
begin
if not FileExists(ChangeFileExt(FileName,'.lnk')) then
raise Exception.Create('ファイルが存在しません');

inherited Create;

ShellLink := CreateComObject(CLSID_ShellLink) As IShellLink;
try
OleCheck(ShellLink.QueryInterface(IPersistFile,PersistFile));
くコ:彡 イカ略

こんな実装をしてます。
88Delフサギコ ◆zE1iiRdQ :02/06/06 13:55
で、使うときには
ShortcutFile1 := TShortcutFile.Create('C:\無題.lnk');
 try
  処理
 finally
  ShortcutFile1.Free;
 end;

こんな風にしているのですが...
これって、ちゃんと正しく動作しているんでしょうか?

今ひとつ不安なんでございます。

コンストラクタをキャンセルする
正しい書き方があるのなら、教えてくださいな。

            ___________
    ∧,,∧    /
  _ ミ,,゚Д゚彡_< これで大丈夫なん?
.=| |=U=U=| |= \
 | | .ミ   ミ | |    ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 | |ノ∪''∪. | |
 | |      | |
>>83
コンパイルでエラー出まくって試す事さえできませんでした。
>>88
大丈夫。例外がでたらtryにすら到達せず、外側に飛んでいきますな。
コンストラクタ内でのエラーは例外投げるのが常套句。
なぜかDelではあまり見ないが。
Delphi 6 の Personal/Professional に Excel みたいな表を表示できる
コンポーネントはありますか? フリーなコンポーネントでもかまいません。

で、もし、あるとした場合ですが…

セルにチェックボックスみたいなのをつけることはできますか?


よろしくお願いします。
93無責任だが:02/06/06 15:08
Delphiのヘルプでコンストラクタについて
>コンストラクタの実行中に例外が生成された場合,Destroy デストラクタが
>自動的に呼び出されて未完成のオブジェクトが廃棄されます。

とあります。では、例外を使わずに、自前で解放する方法は無いかという事ですが
残念ながら良い方法はありません。

コンストラクタ内で free してしまっても
帰り値はfreeする前に一時的に生成されたアドレスが帰ってしまいます。
ではそれを無理やりnilにする方法は無いかという事になります。
例えば self:=0; としてしまうとどうでしょう?
そうすると、AfterConstructionという仮想関数の呼び出しが失敗します

無理やりの方法として調べた範囲内では
procedure AfterConstruction;override;
 とコンストラクタ呼び出し後の処理を継承して、この中でfreeした上で
asm
 mov esi,0
end;
とやれば、なんとか誤魔化せそうですが・・・・・ とりあえず例外使いましょう

例外でIDEが止まるの嫌なら Abortを使うとよいでしょう
94無責任だが:02/06/06 15:19
ただ>>87のような例の場合は コンストラクタをpublicにしないで

function ShortcutFileCreater(FileName: TFileName):TShortcutFile;

と関数で作成させるという方法も考えられます。
帰り値が nil なら作成出来ないと判断する訳です

もし、このオブジェクト生成作業に多様性を持ち込みたい場合はクラスメソッドにする方法もあります
95Delフサギコ ◆zE1iiRdQ :02/06/06 15:31
            _____________
   ∧,,∧    /
  _ ミ,,゚Д゚彡 _< これでステップアップ!
.=| |=U===U=| |= \
 | | .ミ   ミ | |     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 | |ノ∪''∪. | |
 | |      | |

確認なんですが
begin
 処理A

 ShortcutFile1 := TShortcutFile.Create('C:\無題.lnk');
 try
  処理B
 finally
  ShortcutFile1.Free;
 end;

 処理C
end;

この状態でTShortcutFile.Createで例外が発生すると
処理Cは動作しないですよね。
96Delフサギコ ◆zE1iiRdQ :02/06/06 15:31
                _____
      ∧,,∧___   /
    /ミ,,゚Д゚ミ/\<  あってる?
  /| ̄∪∪ ̄|\/ \_____
    |____|/

コンストラクタで例外が発生しても
処理Cを動作せせるためには

begin
 処理A

 try
  ShortcutFile1 := TShortcutFile.Create('C:\無題.lnk');
  try
   処理B
  finally
   ShortcutFile1.Free;
  end;
 except
  on Exception do
 end;

 処理C
end;

こんなのや

begin
 処理A

 try
  ShortcutFile1 := TShortcutFile.Create('C:\無題.lnk');
  try
   処理B
  finally
   ShortcutFile1.Free;
  end;
 finally
  処理C
 end;

end;

こんな風にするのでいいのでしょうか。
97無責任だが:02/06/06 15:32
クラスメソッドにする場合、

TShortcutFile = class
private
constructor Create(FileName: TFileName); //ホントのコンストラクタ は隠してしまいます

public
class function CheckCreate(FileName: TFileName):TShortcutFile ;
begin
if not FileExists(ChangeFileExt(FileName,'.lnk')) then result:=nil
else Result:=Self.Create(FileName);

と作成出来ない場合は nil を返してしまいます。
使う時には

ShortcutFile1 := TShortcutFile.CheckCreate('C:\無題.lnk');
if ShortcutFile1<>nil then with ShortcutFile1 try
 処理
finally Free end;

と使うので、使う時の外見上は>>93で無理やりnilを返すコンストラクタと区別はつきません
98無責任だが:02/06/06 15:41
>>95-96
 もちろんそれも正解です。
 しかし、コンストラクタで例外を出さないですむ関数やクラスメソッドの実装も
 追加しておくとより親切かもしれません。
if foo <> nil then ...
が嫌だから例外投げるんだし
一つの機能を複数の方法で提供するのは混乱の元だ。
>一つの機能を複数の方法で提供するのは混乱の元だ。

 なぜ? 色々な切り口を提供出来る方が混乱が少ないと思う
 実際 VCLでも同じ機能を実現する方法を複数用意してるでしょ?
 たとえば ShowとVisibl とか フォーカスの設定とか

>>96の場合は例外をネストして判り難くするより、 条件判断で処理
 した方がスマートでしょう?
>>99
はげどう
使う方も保守するほうも。
102Delフサギコ ◆zE1iiRdQ :02/06/06 17:27
             __________
   ∧,,∧      /
  ミ,,゚Д゚彡  < かしこくなりました。サンクスコ
  ミ つ且~~   \___________
〜ミ,,,,,, ,,ミ

>>98
そっすか、正解でよかったです。
親切というよりかは>>95-96のコードは
美しくなさすぎなんで、
なんとかきれいになる、関数&クラスメソッドの方を
フサは使おうと思いますです。

>>100に俺は同意っす。
>>96がもっとスマートに書けるならともかく
書くの面倒だから、代替手段があってもいいのではないかしら?
103無責任だが:02/06/06 17:28
>>99
それはまあ、混乱すると思うならそれでいいと思うよ。
ただ、メモリが足りなくてもコンストラクタで例外が投げられてしまう。
だから例外は出来るだけリソース不足に統一した方がいいとも思うよ

こういう方法を使うと、使う方では例外を場合別けしなければいけなくなるわけで
それは複雑さを増してしまうという見方もあるんじゃないの?

と書こいてたら >>102 のレス・・・

元のソースを見るとTShortcutFileのコンストラクタとしてファイル名を引数
に取るからこういう問題が出るわけで、
 コンストラクタでは CreateComObject までにしておいて
function LoadShortCut(ファイル名):boolean;
function SaveShortCut(ファイル名):boolean;
 とメソッドを別に用意したほうがいいんじゃないの?
104Delフサギコ ◆zE1iiRdQ :02/06/06 17:39

    ∧,,∧  
   ミ,,゚Д゚彡
    ミ つ旦)~~
  〜と,,,~),,~) 

>元のソースを見るとTShortcutFileのコンストラクタとしてファイル名を引数
>に取るからこういう問題が出るわけで、

TShortcutFileは一例としてなんですが、
そもそもCreateで例外発生させるコードは
よろしこないですかねー。

> とメソッドを別に用意したほうがいいんじゃないの?
そういえば、TIconとかTPictureとかTFileStreameもそんな感じかな。
でも、TIniFileはそんな感じじゃないかも?...
105無責任だが:02/06/06 18:00
TIniFile は Createでは ファイル名を保存してるだけですよ。

その真似をするなら、
constructor TShortcutFile.Create ではファイルがあれば読み込みまでして
そのファイルが無くても例外にしない戦略の方がいいんじゃないの?

106無責任だが:02/06/06 18:05
あ! Createで例外発生させるのがダメというんじゃなくて、
(それは言語の機能だから好きにしたらいいんだけど)

コンストラクタでの例外はリソース不足とかに絞った方が使い易い事が多いというだけです。
>>92
コーディングが苦でなければ、StringGridで実現できます。

簡単な方法として、StringGridの該当セルの上にチェックボックスを乗せて、
セルの中にチェックボックスがあるかのように見せかけるのが一般的ではないでしょうか。


コーディングが苦でしたら、フリーなコンポを使うことになります。

http://home1.infonia.ne.jp/~delphian/delphi/
この中から希望する機能が実現できそうなのを探して下さい。

D6パソにはありませんが、DBと連携させるならDBGridを使うことである程度は貴方の望んだ結果が
得られるかもしれません。
>>97
スマートなクラスメソッド版のエラー処理ってこんな感じ?
>>96のはユーザーへのある程度のエラー原因の通知処理も含まれてるんだけど
どこがスマートじゃないんだろ。

ShortcutFile1 := TShortcutFile.CheckCreate('C:\無題.lnk');
if not Assigned(ShortcutFile1) then
begin
 ShowMessage('ショートカットファイル(名前は失念)を開けませんでした、
  原因は不明です。なにしろお馬鹿なTShortcutFile.CheckCreateメソッド
  がエラーの原因やファイル名を全て捨ててしまったからです。一番考え
  られるのは指定したファイル(ファイル名はわかりますか?)が存在しない
  ことですが、他にもアクセス拒否やメモリ不足、内部エラーなどあらゆる
  原因が考えられますのでがんばって原因を究明して下さい(藁');
 Abone;
end;
>>108 そのエラーメッセージは間違っているみたいだよ
CheckCreateはファイルが無い時にだけnilを返し、そうでない場合はCreateを呼ぶんでしょ?
という事はメモリ不足やCOM生成失敗は例外が出るんでしょ?

だから、ショートカットファイルがありません とだけメッセージを出すべし
>>108 バーヤバーヤ
>>108
そういう細かいエラーメッセージはShowMessageに直接書かずに、
例外使って Exception.Message で処理した方が綺麗だと思う。

try
 ShortcutFile1 := TShortcutFile.Create('C:\無題.lnk');
 try
  処理
 finally
  ShortcutFile1.Free;
 end;
except
 on E:Exception do ShowMessage(E.Message);
end;

try .. finally .. end と try .. except .. end は根本的に用途が異なるので
入れ子になっても特に汚い記述だとは感じないが。。
>>108は皮肉ってあのメッセージにしたんだろ。
見当違いだったけどナー
113デフォルトの名無しさん:02/06/06 19:47
raise
114無責任だが:02/06/06 19:54
うーん・・・掲示板で真意を伝えるのは難しいね。

だから、別に例外で伝えても悪い訳じゃないって言ってるのに・・・

ただ今回は、Createの引数のファイルが無くても TShortCutFileの
機能に支障はないわけで、逆にSaveShortCutFileが無いのが不思議なくらい。

で、最初の書き込み付近では、それを細かく見ていなかったけど、
他のVCLの実装と比較しても、ファイルが無いから即例外にするのはマズイな
と思った。 
なぜかというと、そのファイルが無かったらXXしたいという事は多い筈。
そして、この場合、ファイルが無いという例外のほかに、COMが作成出来なかった
場合の例外とかメモリが足りないような例外も飛んで来るから、ここで例外を
捕捉したら、場合別けして例外を投げ直す必要がある。

というような趣旨ね
>>114
TFileStreamはCreateでopenできないと例外が飛ぶし
ほかもいろいろVCLで例外が飛ぶコンストラクタを持つクラスあるような。
アンケートにご協力を
1.コンストラクタ内で例外を生成して失敗を伝える。
2.リソース不足以外で例外を生成する。
3.コンストラクタ(相当のメソッド)がnilを返す。
4.エラーの種別によってnilを返すまたは例外を生成する。
5.スマート>>>>>>>>>>>>シンプル

私は
◎、○、×、×、△?
1. ○ つーかそれ以外の方法で例外を伝えられてもなぁ。
    コンストラクタに変数引数でも付けるのか?
    それでも使えないインスタンスをいちいちFreeするより、例外の方がいいのでわ。
2. ○ こんな例ならいくらでもある。
    リソース不足以外で例外を使うべきではない、という考えの方が不自然。
3,4. × コンストラクタがnilを返すなんて、ObjectPascalの仕様から外れすぎ。
    最初からそういう仕様ならともかく、今になってそういう異端なことをしないでほしい。
5.  質問の意図がわからない。
118無責任だが:02/06/06 20:43
私は
1.○コンストラクタ内で例外を生成して失敗を伝えるしかありません。
2.○リソース不足以外で例外を生成しても問題ありません。
3.×コンストラクタがnilを返してはダメです
4.?エラーの種別によってnilを返すまたは例外を生成するのは普通では?
5?.コードは出来るだけ簡単であるべきです

119無責任だが:02/06/06 20:50
そもそも >>93でミスリードしてしまったのかな

言いたかった事は、
1)コンストラクタで例外を投げたら必ずFreeされる事
2)コンストラクタでnilを返す方法は無い事
3)だからコンストラクタでエラーなら例外を投げるべき

その上で、
 例外を投げてしまうと都合の悪い場合もあるなら 使い易いように
 関数でラップしておく方法もあるよという意見を追加したつもり
自分流は、コンストラクタで例外を投げる。
メモリ不足だろうがファイルが無い(とか作れない)からだろうが、
いずれにしろ実行を継続できないから処理を中断しなきゃならないわけで。
結局のところユーザにエラーメッセージを示すということに違いはない。
エラーの内容によって処理を分けることってあんまし無さそうだけどなぁ。
あるかもしれんけど、そんときは例外クラスによって補足し分けるしか。

>>108
ファイル名は例外オブジェクトに保存しとけばいいだろ・・・と思いつつも、
VCLの例外クラスはそんな付加情報は持ってない模様。わろし。

>>109
ファイルは存在するけど読み取りアクセス権がないとか、ファイル形式が違うとかかも知れない。
戻り値 nil だけじゃ原因がわからん。

>>114
場合分けして投げ直すというのは解らん。
例えば EFOpenError だけ補足すればいいんじゃ?
121120:02/06/06 20:52
そうそう、コンストラクタでファイル名を指定しようが
LoadFromFile メソッドを別に作ってロードしようがどっちでも構わんけど、
nil を返すより例外を投げる方が良いってのが自分の主張なんで。そこんとこよろしく。
補足です。つーか説明端折り過ぎました。スマヌ。
3.これはclass function TMyClass.GetObject: TMyClassなどで
間接的に生成する場合も含みます。
4.これは3に○をつけた人のへの質問で、一つのコンストラクタTMyClass.Createの内部で発生したエラーの種別によってnilを返したり例外を返したりするということです。
constructor TMyClassCreate;
begin
 if foo then Result := nil // このコードは嘘です
 else bar then raise EMyClass.Create;
 // 成功
end;
5.これはおまけの質問でVisible, Showのように
一つの機能を複数の手段でアクセスできるようにすることを
ここではスマートと呼んでいます。要するに字面の見栄えの話です。
perl vs pythonの価値観といえば通じるでしょうか。
123無責任だが:02/06/06 21:48
やっぱり判ってもらえないようだから、こう書くべきだったというのを書くね
元ソース
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1021888173&res=10

自分の考えた方のクラス定義

type
 TShowCommand = (scNormalWindow, scMinimize, scMaxmize, scUnknown);
 TShortcutFile = class(TObject)
 private
  ShellLink:IShellLinkA;
  function GetHotKey: Word;
  function GetLinkFileName: TFileName;
  function GetShowCommand: TShowCommand;
  function GetWorkFolder: TFileName;
  procedure PutLinkFileName(const Value: TFileName);
  procedure PutWorkFolder(const Value: TFileName);
  procedure SetHotKey(const Value: Word);
  procedure SetShowCommand(const Value: TShowCommand);
  function GetArguments: string;
  function GetDescription: string;
  function GetIconLocation: string;
  procedure SetArguments(const Value: string);
  procedure SetDescription(const Value: string);
  procedure SetIconLocation(const Value: string);
 protected
 public
  function LoadShortcutFile(FileName: WideString):boolean;
  function SaveShortcutFile(FileName: WideString):boolean;
  constructor Create;
  destructor Destroy; override;
 published
  property LinkFileName:TFileName read GetLinkFileName write PutLinkFileName;
  property WorkFolder: TFileName read GetWorkFolder write PutWorkFolder;
  property HotKey: Word read GetHotKey write SetHotKey;
  property ShowCommand: TShowCommand read GetShowCommand write SetShowCommand;
  property Arguments  :string read GetArguments  Write SetArguments;
  property Description :string read GetDescription Write SetDescription;
  property IconLocation:string read GetIconLocation Write SetIconLocation;
 end;
124無責任だが:02/06/06 21:55
constructor TShortcutFile.Create;
begin ShellLink := CreateComObject(CLSID_ShellLink) As IShellLinkA;
end;
function TShortcutFile.LoadShortcutFile(FileName: WideString): boolean;
begin
Result := FileExists(ChangeFileExt(FileName,'.lnk'));
if not Result then exit;
  with ShellLink as IPersistFile do
  OleCheck( Load(PWideChar(FileName),0));
end;
function TShortcutFile.SaveShortcutFile(FileName: WideString): boolean;
begin
with ShellLink as IPersistFile do
 Result:= 0=
 Save(PWChar(FileName),False);
end;
function  TShortcutFile.GetHotKey: Word;
begin OleCheck(ShellLink.GetHotKey(Result));
end;
procedure TShortcutFile.SetHotKey(const Value: Word);
begin OleCheck(ShellLink.SetHotKey(Value));
end;
function TShortcutFile.GetLinkFileName: TFileName;
var pfd:WIN32_FIND_DATA ;
begin
SetLength(Result,MAX_PATH);
 OleCheck(ShellLink.GetPath(PChar(Result),Length(Result),pfd,SLGP_SHORTPATH));
Result:=PChar(Result);
end;
procedure   TShortcutFile.PutLinkFileName(const Value: TFileName);
begin OleCheck( ShellLink.SetPath(PChar( Value )) );
end;
function TShortcutFile.GetShowCommand: TShowCommand;
var ShowCmd:Integer;
begin
  OleCheck(ShellLink.GetShowCmd(ShowCmd));
  case ShowCmd of
   1: Result := scNormalWindow;
   7: Result := scMinimize;
   3: Result := scMaxmize;
  else   Result := scUnknown;
  end;
end;
procedure TShortcutFile.SetShowCommand(const Value: TShowCommand);
var ShowCmd:Integer;
begin ShowCmd:=0;
case Value of
  scNormalWindow :ShowCmd:=1;
  scMinimize   :ShowCmd:=7;
  scMaxmize   :ShowCmd:=3;
 end;  OleCheck( ShellLink.SetShowCmd(ShowCmd) );
end;
125無責任だが:02/06/06 21:55
function TShortcutFile.GetWorkFolder: TFileName;
begin
SetLength(Result,MAX_PATH);
OleCheck(ShellLink.GetWorkingDirectory(PChar(Result),Length(Result)));
Result:=PChar(Result);
end;
procedure TShortcutFile.PutWorkFolder(const Value: TFileName);
begin OleCheck(ShellLink.SetWorkingDirectory(PChar(Value)) );
end;
function TShortcutFile.GetArguments: string;
begin
SetLength(Result,MAX_PATH);
OleCheck(ShellLink.GetArguments(PChar(Result),Length(Result)));
Result:=PChar(Result);
end;
procedure TShortcutFile.SetArguments(const Value: string);
begin OleCheck(ShellLink.SetArguments(PChar(Value)) );
end;
function TShortcutFile.GetDescription: string;
begin
SetLength(Result,MAX_PATH);
OleCheck(  ShellLink.GetDescription(PChar(Result),Length(Result)));
Result:=PChar(Result);
end;
procedure TShortcutFile.SetDescription(const Value: string);
begin OleCheck(ShellLink.SetDescription(PChar(Value)) );
end;
function TShortcutFile.GetIconLocation: string;
var idx:Integer;
begin
SetLength(Result,MAX_PATH);
OleCheck(ShellLink.GetIconLocation(PChar(Result),Length(Result),idx));
Result:=PChar(Result);
end;
procedure  TShortcutFile.SetIconLocation(const Value: string);
begin OleCheck(ShellLink.SetIconLocation(PChar(Value),0) );
end;
126無責任だが:02/06/06 22:33
>>120
つまり、そもそも >>87のコードは既に CreateComObject が失敗すれば例外を出す
それなのに、わざわざ FileExists でチェックして例外を出して良いのかと聞くと
いう事は、 FileExists を特別視しているということ、つまりファイルが無ければ特殊な
事をしたい様子。 それならこういう方法もあるという説明をしてきたつもりであって
例外を投げるなという事ではないのだと
 だから、
>ファイルは存在するけど読み取りアクセス権がないとか、ファイル形式が違うとかかも知れない。
>戻り値 nil だけじゃ原因がわからん
 FileExistsがfalseを返す時だけ nil を返すというコートを示したのであって
 それは失敗だという意味ではない。ファイル形式が違うとかアクセス権の問題とは別という事
つまり>>87
 成功、失敗のほかに、引数のファイルが無いという3つの状態を返したかったのだと考えたから
 nilを渡す方法で3つの状態を返せるよと解説してきたつもり。

で、どうしてコンストラクタで3つの状態を返したいような事になったのかというと、プロパティを
コンストラクタで全部読み出して、プロパティはその静的な値を読むだけになっているから、
つまりCreateShortcutFile という関数を作っているけど、ReadShortCutFileで全部読み出せば
いいわけで、クラスにする必要が無いというか、クラス設計を見直した方がいいと
Σ(゚Д゚ )y-~~ ナンダコリャ
128Delフサギコ ◆zE1iiRdQ :02/06/06 22:58
  ∧,,∧
Σミ ゚Д゚ミy-~~ ヨクワカンネー

誰かショートカットファイルをもっと
楽に使えるようにラプしてクレ
129無責任だが:02/06/06 23:10
え? >>123-125 でダメ?

ショートカットを 作る時の例

with TShortcutFile.Create do begin
  LinkFileName:=Application.ExeName;
  SaveShortcutFile(path+'MyApp.lnk');
end;


ショートカットを読むのは
with TShortcutFile.Create do begin
 LoadShortcutFile(path+'MyApp.lnk');
  Caption:=LinkFileName
end;

これ以上どう簡単にしろと?
長ソース×3ベタ貼り+長文のコンボくらって、読む以前に

Σ(゚Д゚ )y-~~
  ∧,,∧
Σミ ゚Д゚ミy-~~

ってなったんじゃねーの?
131無責任だが:02/06/06 23:57
>>130
 なるほどね。 でもコッチも
 http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1021888173&res=10
 このコード読ませられたんだからお互い様だと思うんだが?

やっと ShortCutFileExists がやってるらしい事が判ってきた
 たぶんTFileListがファイル一覧を取るのだろうと思うから

function ShortCutFileExists(FolderName, ExeFileName: String): String;
var F: TSearchRec;
begin
 ExeFileName:=ExpandFileName(ExeFileName);
 //フォルダ名の最後が\で無ければ追加
 if copy(FolderName,Length(FolderName),1)<>'\' then FolderName:=FolderName+'\';
 with TShortcutFile.Create do try
  if FindFirst(FolderName+'*.lnk',faAnyFile,F)=0 then repeat
   result:= FolderName+F.Name;
   try
    LoadShortcutFile(result);
    Writeln(LinkFileName);
   if AnsiSameText( ExpandFileName(LinkFileName),ExeFileName) then Exit;
   except end;
  until FindNext(F)<>0;
 finally Free; end;
 Result := '';
end;

こんな感じの事をやってるんだと思う。 
どうでもいいけど、デバッグしてるときに例外が出ると毎回止まるから
例外を使うのを妙に避けたがる人が多いような気がするんだが。

確かにちゃんと例外処理も書いてるのに、 StrToInt とかで例外を出され
ると禿げしく面倒なんだよな。

できればコンパイラ指令とかで、
「もうここはデバッグは終了したから、この部分を実行中に発生した
例外をデバッガは捕捉しなくてもいいよ〜」
みたいな機能があればいいんだが、そういうのって難しいのかな。
おしえて、エラい人。
133エライ人:02/06/07 00:09
>>132
貴様は「VB以外使っちゃダメ〜の刑」に処す!
はい次!
134無責任だが:02/06/07 00:11
>>132
 確かにデバッガオプションを動的に変更出来たら便利だね
  けど今日は疲れたからもう調べるのはいいや・・・

あと確かに StrToIntとかだと自分も 例外を使わずにValで検出する
それは例外を使わない方が少しだけ高速かもしれないとか期待してるからかも
>>134  自分も ユーザ入力のチェックみたいな場面では Valだな それはやっぱり
例外でデバッカが止まるのが嫌ってのが大きい

でValで検出して abort投げたりして
136無責任だが:02/06/07 00:38
>>131 で Writeln はデバックの為に入れたのが残ってるだけだから

それから、もし、TFileListがサブディレクトリも掘ってゆく仕様なら

ShortCutFileExists を再帰的に呼び出す必要がある
 最初のループが終った後、Result:=''の直前に

if FindFirst(FolderName+'*.*',faDirectory,F)=0 then repeat
    Result:=ShortCutFileExists(FolderName+F.name , ExeFileName);
   if Result<>'' then exit;
  until FindNext(F)<>0;
  result:='';
end;

と3行追加すればいい。
>>134-135
例えば、正の整数をEditから受け取りたいときに、

try
 n := StrToIntDef(Edit1.Text,0);
 if n <= 0 then raise Exception.Create('正の整数を記入してください。');
 その後の処理
except
 on E:Exception do ShowMessage(E.Message);
end;

みたいに、かなり気軽に例外を使ってる人って、もしかして少数派?
「処理を中断するような場合は例外を使う」というポリシーでソース
書いてるんで・・・
138Delフサギコ ◆zE1iiRdQ :02/06/07 01:40
  ∧,,∧  ソース貼ってるの見えなかった...
Σミ ゚Д゚ミy-~~            疲れすぎだYO
  さんくすこ、明日でも検証してみる。

 死後吐agaりが12:00だと
 フサはストレス氏しそうだゴルァ

例外を消すコンパイラ指令はないはず。
ブレークポイントで前後を挟むとヨシ。

>>137
少数派だと重います。
デバッガでとまるとヤだもん。
139デフォルトの名無しさん:02/06/07 01:44
複数のファイルを1つにまとめたいのですがどうしたら良いのでしょうか?
フォーマットは以下の通りです。
(図解)
http://www68.dns.ne.jp/~bbs2/upload3/helen/OB00012183.zip

----------------------------------------------------
・ファイルヘッダ                  (8)
・含まれるファイル数               (4) ファイルの数分つづく
▼ファイル情報
・ファイル名                    (32) ファイルの数分つづく
・ファイルのサイズ                (4) ファイルの数分つづく
・結合ファイルの先頭から
 目的のファイルのデータまでのオフセット  (4) ファイルの数分つづく
・ファイルデータ そのものズバリのファイルの中身ナカミ (不定)
----------------------------------------------------
※含まれるファイルの数は固定じゃ無いです
>>139
どうしろ、といわれてもな。
とりあえずTFileStream使うとよさげ、とだけ言っとく。
Seekとか駆使してガムバレ。
141デフォルトの名無しさん:02/06/07 02:08
>>139
全然わからないけどこんな感じじゃ無いのかな?


Var
  FS : TFileStream;
  Buf1 : Longint;
  Buf2 : Boolean;
  Buf3 : Array [ 0..255 ] Of Char;
Begin
  FS := TFileStream.Create( 'C:\Temp\Test.Bin' , FmOpenRead );  Test.Binを読み出しモードで開きます
  ShowMessage ( InttoStr ( Fs.Size ) );  ファイルサイズを表示します
  FS.Read (Buf1, SizeOf ( Longint ) );  Buf1にLongint型のサイズ分だけデータを読み出します
  FS.Read (Buf2, SizeOf ( Boolean) );  Buf2にBoolean型のサイズ分だけデータを読み出します
  FS.Read (Buf3[0], 256 );    Char型配列Buf3に256バイトのデータを読み出します
  FS.Free;    オブジェクトのインスタンスを解放します ( 同時にファイルは閉じられます )
End;

転載元
http://member.nifty.ne.jp/deepforest/delfromv.htm
>>138
> 例外を消すコンパイラ指令はないはず。
> ブレークポイントで前後を挟むとヨシ。

ブレークポイントでこういう事もできるのですね。(既に「ブレーク」ポイントじゃ無い気が)
しかしブレークポイントが保存されず、プロジェクトを開き直すと水の泡。
デスクトップの保存設定をONにしたら保存されましたけど窓のサイズとかまで保存されるのが嫌。
デバッグ関連の設定だけ保存する方法は無いかな…。

コメントを読む限りDebugHook変数が近い気がしたのですが、
試しに0とか2とか代入しても何も変わりませんし、何でしょうこれ。
>>142
 {$D-}
 i := StrToInt(s);
 {$D+}
とかやると、{$D-}から{$D+}の間をサブルーチンも含めて実行中に発生
した例外はデバッガは無視する、とかいう機能が欲しいです。
ちなみに{$D}はすでに別の用途で定義済みだけど・・・

>>143
例えばこうネストすると、*で発生した例外の扱いはどうなります?

procedure A;
begin
 {$D-}
 i := StrToInt(s);
 {$D+}
 j := StrToInt(t) {*}
end;

begin
 {$D-}
 A
 {$D+}
end.

…指令が実行文として変数を増減させなければならなくなる気が。
StrIntDefだと例外飛ばさない。
また、デバッガオプションでEConvertErrorとかで止まらないよう設定しとけばいい。
StrToIntDefだ
>>145
例外を出したくないんじゃなくて、例外が出ても許容範囲内なら
デバッガに感知されたくないんですけど。
で、いつもEConvertErrorを無視してもらっても困る。
明らかにデバッグ済みの部分だけ無視してもらいたい。

やっぱ無理そうですね・・・
>>147
ここで議論してる時間で自分が気に入るような変換関数を
つくったほうがいいのではないかと。
ガーン━━━━(゚Д゚)━━━━!!!!!!

StrToIntDef等という関数があったのか。

Del2→Del6だったので全然しらなんだ…。
150デフォルトの名無しさん:02/06/07 13:22
>>139
質問
ファイルのサイズ、4バイト ってそれで足りるのかな?
どんなファイル使うのか分からないけど。
ファイル名ももう少し多い方が。
151148:02/06/07 13:23
>>148は勘違いなので無視して。
デスクトップの保存をONにして、なおかつ必要な情報(ブレークポイント等のデバッグ設定)だけ
保存させるという事はできないのでしょうか?OpenToolsAPIに詳しい人とかいませんか?
保存のタイミングとファイル名さえ分かれば、後は*.dskから不要な行を消すだけでいけそうなのですが…。

>>148
例外を出さない変換関数、ではなく、例外は駆使したいのですが
それでデバッガがいちいち停止するのは面倒なので、
デバッグ済みの部分に関してはデバッガが例外を検知するかどうかを動的にON/OFFしたい、
という事なのですけど。
153152:02/06/07 13:31
うわ、微妙なタイミング。>>148さんごめんなさい。(最近こういうすれ違いが多い気がする自分)
>>151が無視されたな
別のアプローチとして、デバッグ中は別の例外を飛ばすとか。
本番用例外はデバッガで止まらないようにして。
156148:02/06/07 13:38
>>153
こちらこそ、ごめんなさい。
他の話題と混同したものでいいかげんなことを言ってしまいました。
157無責任だが:02/06/07 14:14
ちょっと見た感じ、

1)実際の例外は systemユニットの procedure _RaiseExcept; が本体で
  構造化例外APIのRaiseExceptionが呼ばれる

2)構造化例外は全てデバッカで一度捕捉されてしまう
  デバッガオプションで EAbort等については無視

3)try は以下の5行のアセンブラ出力に変換される(思ったより例外のコストは低い)
 xor   eax,eax
 push  ebp
 push  exceptのアドレス
 push  dword ptr fs:[eax]
 mov   fs:[eax],esp

4) exceptのアドレスには
system._HandleOnException;
 がある。

だから、やろうと思えば、system.RaiseExcept で
グローバル変数、デバックマスクフラグを用意し
そのフラグ値によってAPIの構造化例外の代わりに自前で例外を処理する
( ebpとfs:[0] を戻してアドレスにジャンプする)

ようにすれば、デバック中に場所によってマスクするような事が可能かも
>>157
あ…同じようなこと考えている(w

RaiseExceptionProcというポインタを通じて例外が発行されている
(System.pasの初期化部でRaiseException APIのアドレスに設定される)ため、
これを独自ルーチンに上書きして例外オブジェクト(ESP + 24)をEAbortインスタンスにすり替え、
無視させることが(手元の実験では)できました。

でもこれをやってしまうと on EXXX do で種類分けして補足できなくなるので157さんの方法に期待。
159無責任だが:02/06/07 15:43
>>158 そうですか こっちはまだ巧くゆきません
 書換え可能なのは DLL のポインタ部だけなんで

function DllProcChange(new,old:pointer):Pointer;
var p:^Integer;
begin
p:=Pointer(integer(old)+2); //FF25 [xxxxxxxx]
p:=pointer(p^);
Result:=pointer(p^);
p^:=Integer(new);
end;
として
DllProcChange(@NewExcept,@RaiseException);
とやると、 Windows.RaiseException が書き換わってしまうし

@RaiseExceptionから手繰ろうとしても、@が先頭についてるからダメだし
system.pas を書き換えるのは嫌だしで難しいですね
なんか珍妙なことやってるな。
ユニット単位でデバッグする・しないが
簡単に指定できるんだからそれでいいじゃん。
dcc32.exeのコマンドラインオプションで、
-DDEBUG;CUSTOMなどとやって条件定義を追加できますが、
逆に条件定義をコマンドラインオプションで外すにはどういう風にすれば良いのでしょうか?
教えて下さい。
162139:02/06/08 03:07
突然このような仕様を投げられたので、とまどってました。
>>139の横の数字の単位はバイトです。わかりにくくてすいません。

こんなの
http://www68.dns.ne.jp/~bbs2/upload3/helen/OB00012462.zip

一応読み込んで見たところファイルの容量とかまでは取得できました。
>>139 >>162
いや、別に仕様がわかりにくくて・・・ということじゃなくて、
課題を丸投げしている点に問題があるんですが・・・
>>159
Systemユニットの@付き手続きのアドレスはインラインアセンブラで取れませんか?

mov EAX, offset System.@RaiseExcept

無責任ですが期待してます
165デフォルトの名無しさん:02/06/08 15:53
SJIS文字列をCR+LF←→\nに変換するロジックを
作ろうとしてるんだけど、どっかに転がってない?
とりあえず↓は見つけたけどCR+LF→\nの際に\nが
入っていた場合の考慮が足りないのでダメだった。
ttp://www.nifty.ne.jp/forum/fdelphi/samples/00355.html

で、作るとしてテストケースは以下で足りてるかレビューキボン
変換前にAdjustLineBreaksを使う事で#10のみ,#13のみの
テストはナシの方向で考えてる。

#13#10 ←→ \n
abc#13#10def ←→ abc\ndef
abc\ndef ←→ abc\\ndef
abc#13#10\n#13#10def ←→ abc\n\\n\ndef
abc\#13#10\def ←→ abc\\\n\\def
#13#10abc ←→ \nabc
abc#13#10 ←→ abc\n
\nabc ←→ \\nabc
abc\n ←→ abc\\n
#13#10#13#10#13#10 ← #13#10\n#13#10
>>165 前スレだったかでやってたよ

 もし見つからなかったら、ここにコード書いてた筈だから探してごらん
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/index.html
>>165
表n ←→ 表n
(表はSJISで2byte目が \ )

>abc\ndef ←→ abc\\ndef
abc\\ndef ←→ abc\\ndef
じゃないの?
168無責任だが:02/06/08 16:22
なんか 昔書いたコードで今見たら恥ずかしいんだけど
////////////////////
// \エンコードをする
// \n=$0d$0a
function EncodeStr(const s:string):string;
function IntToHex2(d:integer):string;
 const c:array [0..15] of char ='0123456789ABCDEF';
 begin
  Result:= c[d div 16]+c[ d and 15];
 end;
 var i:integer;
begin
Result:='';
i:=1;
 while i<=length(s) do
  begin
  case s[i]of
  #0..#8,#10..#12,#14..#31,'"','''',',','=':
      Result:=Result+'\x'+IntToHex2(ord(s[i]));
  #9: Result:=Result+'\t';
  #13: begin
    if (i+1 <= length(s)) and (s[i+1]=#10) then
     begin
      inc(i);
      Result:=Result+'\n';
     end else
     begin
      Result:=Result+'\x'+IntToHex2(ord(s[i]));
     end
    end;
  '\': Result:=Result+'\\';
  else begin
    Result:=Result+s[i];
    end;
  end;
   inc(i);
  end;
end;
169無責任だが:02/06/08 16:24
////////////////////
// \デコードをする
// \n=$0d$0a
function DecodeStr(const s:string):string;
var i:integer;
begin
Result:='';
i:=1;
 while i<=length(s) do
  begin
  if s[i]='\' then
   begin
   inc(i);
   case s[i] of
   'x':
     try
     Result:=Result+ char(StrToInt('$'+s[i+1]+s[i+2])) ;
     inc(i,2);
     except end;
   'b': Result:=Result+#$08;
   'a': Result:=Result+#$07;
   'f': Result:=Result+#$0C;
   'r': Result:=Result+#$0D;
   't': Result:=Result+#$09;
   'v': Result:=Result+#$0B;
   'n': Result:=Result+#13+#10;
   else Result:=Result+s[i];
   end;
   inc(i);
   end else begin
   Result:=Result+s[i];
   inc(i);
   end;
  end;
end;
170165:02/06/08 16:58
>>166-169
早い&的確な反応ありがとう。
ttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1015685238&rm=50
のコードと168-169の両方を検討して気に入った方を使ってみる事にするよ。

>>167
"表" は忘れてたよ、感謝。で、変換仕様の方なんだけど
>>165:abc\ndef ←→ abc\\ndef
>167:abc\\ndef ←→ abc\\ndef
165の変換仕様で良いと思う。で、167のはこうなるかな
abc\\ndef ←→ abc\\\\ndef
何か考慮漏れが漏れてるだろーか
171165:02/06/08 17:44
>ttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1015685238&rm=50
↑は早とちり。相談室3の674で出たAdjustLineBreaks+αの
動きをするコードっぽいので目的とは違ってたよ。
前スレ探したかったけどdat落ちでした。
172Delフサギコ ◆zE1iiRdQ :02/06/08 22:51
>何か考慮漏れが漏れてるだろーか

まずはテストコードを書くことが漏れている

             __________
   ∧,,∧      /
  ミ,,゚Д゚彡  <  コードで仕様をあらわすといいです
  ミ つ且~~   \___________
〜ミ,,,,,, ,,ミ
173下手人:02/06/08 23:37
ミ,゚Д゚;;彡.。oO(何でkage.exe最新版だとタブで開こうとするのでしょーか?)
>173
かちゅスレ逝け
175165:02/06/09 00:22
>>168-169 を2バイト文字対応して、テストコードひっつけてみました。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1023549124
ところで >>168は何故 "=" も\xnn変換する対象なのでせう?
引用符とかカンマはまだ分かるんですが。
176デフォルトの名無しさん:02/06/09 05:20
【質問】
MP3ファイルを自作ソフトに関連付けして再生させたいのですが、
MP3をダブルクリックしてソフトが起動するとこまでは出来ました
でも再生されません。
ファイル関連付けコンポーネントのプロパティの、

コマンドラインで、あるソフトに対して、このファイルが
”ドラッグ&ドロップされたよ”と通知することは不可能でしょうか?
177デフォルトの名無しさん:02/06/09 05:23
【補足】
すいません、書き込みミスりました。

ファイル関連付けコンポーネントのプロパティの
”起動時に渡すパラメータ”の部分だと思うのですが…

178デフォルトの名無しさん:02/06/09 07:21
そのコンポーネントの名前ぐらい挙げなよ

とりあえず、渡された値はParamStr, ParamCountで取れるんじゃないの?
DDEとかその辺のことはしらんが。
179176:02/06/09 09:14
すいません、こちらのコンポーネントです。

http://home1.infonia.ne.jp/~delphian/delphi/compo/system.html#SY0084
>>176
>MP3ファイルを自作ソフトに関連付けして再生させたいのですが

自作ソフトに関連付けることができたとする。
そのファイルをエクスプローラでダブルクリックする、または
ShellExecute() から関連付けられた実行プログラムを起動する

ということはできてるわけですよね。

でも、その関連づけられた自作ソフトがコマンドラインパラメータを
解釈しないと意味がありません。178 さんのコメントを考慮する必要が
あります。
181デフォルトの名無しさん:02/06/09 15:03
特定の数字に0付けで4桁固定表示にするにはどうしたら良いですか?

4の場合 0004
12の場合 0012
です。
(1)
IntToStrした結果に
10より小さかったら"000"
100より小さかったら"00"
1000より小さかったら"0"を付ける

(2)
Formatを使う
>>161なんですが分かる方いませんか?
IDEからコンパイルした時は定義有り。
MakeFileからMakeした時は定義無し。
にしたいのですが。
もしかしてDelphiでmake使うような方はおられないのでしょうか?
Format('%.4d' 〜〜〜)
で良いんですかね。
185デフォルトの名無しさん:02/06/09 15:23
∋oノハヽo∈
 (# `D´)ノ<つかってたしかめろ! なのれす!
         いちいちきくな!なのれす!
娘ヲタが暴れてるな。
187モーヲタうざい:02/06/09 15:48
モーヲタうざい
188デフォルトの名無しさん:02/06/09 15:52
∋oノハヽo∈
 (# `D´)ノ<うるせーはげ!
>>183
$UNDEF
>>184
Format('%4.4d' 〜〜〜)

>>185
同感だけど、形式文字列のHelpは難解なことで有名だし…
>>189
-$UNDEF ABC
-$UNDEF=ABCと試してみましたが両方とも効果がありませんでした。
>>191
何じゃそりゃ(笑)

IDEのほうのプロジェクトオプションで識別子追加するのは駄目なの?
>>191
いやそうじゃなくて、ソースに
{$IFDEF NOIDE}
{$UNDEF ABC}
{$ENDIF}
て書いておいたら、-DNOIDE で、ABCが定義されなくなるだろ。
194デフォルトの名無しさん:02/06/09 20:32
質問なんですが、横書きしたテキストを横にスクロールさせるのは何とかできますが、
(新幹線の中で出る、読売新聞ニュース◆ みたいな奴)

横書きにした文字を縦方向にスクロールさせる良い方法ってありませんか?
一行の表示領域で、できるだけウザくない方法で複数行のStringsを出したいのです。
(数秒おきに一行ずつペロっとスクロールするようなのが(・∀・)イイ)
例外を無視させる方法ですけど、
ExceptionClass 変数に代入されているクラス参照の派生クラスにしかIDEは反応しないようです。
従って、適当な例外クラスをでっち上げ代入してやることで無視させることができました。

インラインアセンブラを駆使した努力は何だったんだ…

参考文献: DELPHI IN A NUTSHELL
>>193
そういう事だったのですか。
dcc32 -?で
-$<dir> = Compiler directive
って出てくるのでそういう方法が出来るのかと思いました。
全てのソースファイルに書かなければならないみたいなのが
多少気が進まないのですが、ありがとうございました。
197A:02/06/09 23:02
>>194
したいことのイメージがあまりよくわかってないんだけど、
一端、裏でイメージ作って、合成してから、描いて見るとかどう?
>>197
スミマセヌ、上手く説明できてないですね・・・。
電車の行先幕みたいな、一行が上下にスライドするモノを実現させたいんです。

試しにいろいろ描画してみます。
199デフォルトの名無しさん:02/06/10 00:07
(´-`)。o ○ (関連づけて、exe起動させてるけど、読み込んで無かったりして…<MP3)
200デフォルトの名無しさん:02/06/10 01:01
MSXML4を使いたいんですけど、
ActiveXの取り込みで一覧に"Microsoft XML"らしきものが
出てきません。ひょっとして別の名前がついているとか
そういうことはないのでしょうか?
201A:02/06/10 01:04
>>198
こんなかんじかな?
フォントと同じ高さの Image1 置いて、ブラシやフォントの色を適当に設定。
Interval を 100 にしたタイマーのイベントに、

with Image1.Canvas do begin
 FillRect(ClientRect);
 TextOut(0,0-T,'1行目');
 TextOut(0,Abs(Font.Height)-T,'2行目');

 Inc(T);
 if T>Abs(Font.Height) then begin
  T := 0;
  Timer1.Enabled := False;
 end;
end;

とか書いてみた。T:Integer はどっか消えないところに置いといて(笑
>>201
あ、TImageのTextoutか!ありがとう、使ってみます!
203デフォルトの名無しさん:02/06/10 10:15
かちゅ〜しゃエクステンダーって
どういう仕組みなのですか?
ソースが手元に無くてもあんなことできるの?
エクステンダーはビルダー製だよ。
Delphiでも一緒の事出来るけど。
>>203 想像だけど、>>159のようにDLLへのリンクポインタを検索してそこでフックしてるんじゃないかな

VC製だろ
207デフォルトの名無しさん:02/06/10 23:27
ひまわり製だろ
Delphi6のForm1のイベントで、
OnMouseWheelUP Down の処理内容を例えばButton1Clickとすると、
ボタン1を2回クリックしたことになってしまいます。
これを1回クリックというようにできないでしょうか?
>>208
え?
1回だけど
>>208はホイールを回すときに手が震えて
2回分になってしまうに50ペリカ
211208:02/06/11 03:41
え、うちだけ?
>>210
そんなわきゃない・・。

なんでなんだろう・・
マウスが悪いのか??
212208:02/06/11 03:47
自己解決しました。
いや、解決はしてないけど簡単なプログラム作って試してみたところ、
確かに1回でした。
一体何が悪いのかはまだ分かんないけど自分でなんとかしてみます。
スレ汚しすみません・・
213208:02/06/11 03:59
やっぱおかしいや。
ボタンとメモを用意して、
procedure TForm1.FormCreate(Sender: TObject);
begin
x:=1;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
x:=x+1;
memo1.text:=inttostr(x);
end;

procedure TForm1.FormMouseWheelDown(Sender: TObject; Shift: TShiftState;
MousePos: TPoint; var Handled: Boolean);
begin
Button1Click(Sender);
end;

ってしてホイールまわすと2ずつ増える・・
>>213
バグってるぞ。
ホイールを処理したときは Handled := True; しる!
215208:02/06/11 04:52
>>214
そんな処理が必要だったのか・・。
Button1Click(Sender);
の下に
Handled:=True;
で治りました!
ありがとうございます!!
>そんな処理が必要だったのか・・。
ヘルプちゃんと読んでないだけ
217デフォルトの名無しさん:02/06/14 21:37
VBのプロジェクトをDelphiに移植中…
すんげぇめんどくせぇ。
せめて、フォーム情報だけでも自動コンバート
してくれるようなツールがあったりしない?
むしろDelphiのフォームをBCBに‥‥
219デフォルトの名無しさん:02/06/14 23:09
>>217
VBやっとけ。
>>217

VBで作ってみては?
222デフォルトの名無しさん:02/06/16 00:48
かれこれ15年くらい悩んでいるので、教えてくれ。

フォームからクイックレポートを呼び出す。クイックレポートのデータソースはSQL。
SQLにはパラメタがあり、フォームに配置したリストボックスなどの値をパラメタに渡し、印刷する。

つまり、フォームで「日本」を選択して印刷ボタンを押すと「日本のデータ」が、「韓国」を選択して印刷ボタンを押すと「韓国のデータ」が印刷される、というようなのをやりたいのじゃよ。

>>222はハツカネズミか何かなのだろうか。
224デフォルトの名無しさん:02/06/16 01:51
222は肝心の質問を書き込む前に天寿が尽きたのか……?

ところで、Delphi6でフォームやフレームを編集すると
ソースのあるディレクトリに.ddpってファイルができちゃうよね。
ダイアグラムなんて使う気ないし、ソースのアーカイブ
作るときに激しく邪魔。
このファイルを作らせないようにするか、dcuみたいに
別のディレクトリに隔離することってできないかな?
225デフォルトの名無しさん:02/06/16 05:48
ミキサー付aviプレーヤー(のようなもの)を作っています。
 
・多チャンネル(最大4チャンネル程度)のサウンドを別ファイル(wav)から再生
・各チャンネルで独立してボリュームを制御できるようにする
 
必要な機能は以上2点です。いまのところ映像と音声の同期は無視してます。
(十分処理速度が速ければ、ずれが無視できる程度に収まっている?)
 
QuadrupleDの中にあるDDSDを使って実現しようとしているのですが、
「メモリに入りきらない長大なwavファイルの再生」がうまくいきません。
(チュートリアルが中途半端なのもあって・・・)
 
他のコンポーネントを利用する方法でも構いませんので、どなたかご教示お願いいたします。
Delphiのバージョンは5です。
226222:02/06/16 11:19
スマソ。質問が抜けた。

で、フォームから、クイックレポートのSQLにパラメータを渡す方法がわからないんです。
>>225
 自分はそういうのやるときは低レベルオーディオAPIで
 0.1秒程度のバッファを3つくらい順に回して再生させてる

それでwav ファイルでもサンプリングレートの違いを吸収する為に
acmAPIを使ってる
228デフォルトの名無しさん:02/06/16 13:47
モナースレで教えてもらえなかったので流れてきました。
Delphiで株のチャート分析&予想をするソフトを作ろうとしています。

色々とネットを検索したらTeeChart?,Tchart等を使う方法やPaintBoxを
使っている人等がいて、何でトライしたら良いのかいまいち良く分かりません。

お薦めの方法、あるいは参考になるサイトやスレがありましたら教えてください。
各方法の利点欠点だけでも結構です。
今まで画像系の処理はした事ないので四苦八苦してます。
出来るだけ、簡単に出来る方法を選びたいです。
最初から高機能は求めてません。

開発環境はD6パソ(自宅)&エンプラ(会社)です。
どうかよろしくおながいします。
アプリをXPのビジュアルスタイルに対応させたくて、Webで調べて
Manifestファイルを使うとわかり、とりあえず見た目は対応させれたんだけど.

ListViewが表示されるフォームではどこでもとにかくエラーが出るんです.
なんだか、Del6だとアップデートすればいいみたいだけど、Del5では
どうしようもないんでしょうか?
>>230
取りあえず出てるパッチ適応すれば?
>>225
ActiveXからWindowsMediaPlayer取り込むのは?
233デフォルトの名無しさん:02/06/16 22:23
>231

UpdatePack1はあててます・・・
234230:02/06/16 22:54
補足です.

エラーになるのはListViewのViewStyleをvsReportにしてるときです.
どうも、ヘッダ部分の描写をしようとしたときに落ちるっぽいんですけど・・・.

HeaderControlのほうは大丈夫みたいですねー.
235230:02/06/17 00:29
うーん、一応自己解決したようです.海外サイトで解決策を発見しますた.

ComCtrls内、UpdateColumnの中で

 if FImageIndex <> -1 then
  fmt := fmt or LVCFMT_IMAGE or LVCFMT_COL_HAS_IMAGES;

というところを

 if FImageIndex <> -1 then
  fmt := fmt or LVCFMT_IMAGE or LVCFMT_COL_HAS_IMAGES
 else
  mask := mask and not (LVCF_IMAGE);

とするといいようです.意味はまったくわかってません(;´Д`)

商用アプリでComCtrlsをローカルにコピーして使うのはまずいのかなあ?

236230:02/06/17 00:53
・・・と思ったら、そういえば実行時パッケージ使うときは
この方法じゃできないんだった.鬱・・・.
>>228
マルチポストかよ、たまんねぇーなぁ、
モナースレで十分にレスが付いてるようだが、
他に何が聞きたいんだ?
238デフォルトの名無しさん:02/06/17 09:25
>>237
いや、こっちに書き込んだ時はあちらでは何も教えてもらえませんでした。
>>239
参考にします。ありがとう。
241デフォルトの名無しさん:02/06/18 14:51
TLabelとTTimerを使って、分と秒のみのストップウォッチらしき物を作りたいのですが、
TDateTimeを使うと時間の所も表示されてしまいます。
時間部分を隠す方法って無いんですか?
無理だとすると、どういう方法で作るのが一番良いのでしょうか?
教えてください。
>241
DateToStr関数を使ってみたりするとか。
243241:02/06/18 15:42
すまぬ誤爆だった。

ストップウォッチだったら、
自分で時間計算するのがベストかと。

Timeのインターバルを100にしておくとして、
それまでのカウントを数える数値をCounter:integerとする。
OnTimerが呼ばれるとCounterに1を加算して

Label1.Caption:=Format('%d分:%d秒:%d',[Counter div 600, Counter div 10,Counter]);
みたいな感じで。
244243:02/06/18 15:43
>243のところ名前ミス242つーことで。
あぅひとりで動揺してしまった...
245241:02/06/18 16:10
ありがとうございます。
でも、その方法だと、位が上がる時(パラメータの配列の2つ目が60になった時・3つ目が10になった時)
にその位が一0にならないような・・・
>245
はっ...そういえばそうでした。
その場合は、
Label1.Caption:=Format('%d分:%d秒:%d',[Counter div 600, Counter div 10 mod 60,Counter mod 10]);
こうしてみるといけるかも。
FormatDateTime('nn:ss', hoge);

それにしてもDelphiはオブジェクト指向じゃないな。
hoge.FormatString('nn:ss');
249248:02/06/18 17:47
     ∧_∧∩ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    ( ´∀`)/< 先生!>>248は無視してください!
 _ / /   /   \___________
\⊂ノ ̄ ̄ ̄ ̄\
 ||\        \
 ||\|| ̄ ̄ ̄ ̄ ̄||
 ||  || ̄ ̄ ̄ ̄ ̄||
    .||          ||
250241:02/06/18 18:10
>>246
いい感じっす!
でも分の所を常に2桁表示したかったので、以下の様に書いてみましたが、おかしいですよね?w

Inc(Counter);
if Length(IntToStr(Counter div 10 mod 60)) = 1 then
Label1.Caption := Format('%d分0%d秒%d', [Counter div 600, Counter div 10 mod 60, Counter mod 10])
else
Label1.Caption := Format('%d分%d秒%d', [Counter div 600, Counter div 10 mod 60, Counter mod 10]);
%0dってしっとるけ?
Timerって正確じゃないよ。
252A:02/06/18 19:52
>>241,243
OnTimerって、たぶん、確実に呼び出される保証が無さそうな気がするから、
スタートした段階の時間を覚えておいて、それと現時刻との差で計った方が
いいかも。
253241:02/06/18 20:12
>>251
形式文字列っていうのは、時間以外はよくわかってないです。
今ヘルプ見たけど、精度指定子っていう物で2桁表示にするんですかね?

>>252
StartTime, StopTime, PassageTime: TDateTime;だとすると、
スタートの時に
StartTime := Time;
ストップの時に
StopTime := Time;
PassageTime := StopTime - StartTime;
Label1.Caption := TimeToStr(PassageTime);
みたいな感じでしょうか?
それだと途中経過が出ないような?
どこかのスレでTTimerは精度が低いからTimeGetTimeを使った方がいいという書き込みは見た記憶がありますが、よくわかりません。
>253
GetTickTimeでもよさそうなきがする。
ところでストップウォッチって精度はいかほどを考えてるの?
255241:02/06/18 20:58
>>254
特に精度は気にしてないです。
>>241の様な質問や、>>250みたいなコードを書いてる時点で俺はドキュソケテーイなので、
簡単なことからゆっくりやってみたいと思っています。
結局、>>241の答えとしては、
Inc(Counter);//Counter: Integer;
Label1.Caption := Format('%d分%0d秒%d', [Counter div 600, Counter div 10 mod 60, Counter mod 10]);
が最強なんですかね?
秒以下を一桁しか表示しないなら、TDateTimeを使って、IncMilliSecond(Counter)とやってもできる気がしてきましたが・・・(^^;
256241:02/06/18 21:13
げっ、>>255じゃあ2桁にならないですね。^^;
いいかげんTDateTimeとFormatDateTimeでやればいいじゃん。
>>255

フォームにラベルとボタンを2つ貼って、以下ようにすればどーなのさ。
このまんまじゃ、不都合もあるけど、こんな感じでどーよ。


Button1でスタート Button2でストップ でも、一旦スタートすると終了させる前に button2を押さないと終われない罠


var
 StartDate:int64;

procedure TForm1.Button1Click(Sender: TObject);
  procedure timeLoop;
  var
    wStr:String;
    wTT:TTimeStamp;
  begin

    while StartDate<>0 do
    begin
      wTT.Time:=GetTickCount()-StartDate;
      wStr:=FormatDateTime('nn:ss.zzz',TimeStampToDateTime(wTT));
      Self.Label1.Caption:=wStr;
      Application.ProcessMessages;
    end;

  end;

begin
  
  StartDate:=GetTickCount();
  timeLoop;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  StartDate:=0;
end;
259241:02/06/19 08:13
>>257
できないっす!・゜・(ノД`)・゜・
var
PassTime: TDateTime;

procedure TForm.Timer1Timer(Sender: TObject); //Interval は 1
begin
IncMilliSecond(PassTime);
Label1.Caption := FormatDateTime('n:ss:zzz', PassTime);
end;

これじゃダメなんすか?

>>258
かなり凄くて感動しましたけど、理解不能です、すいません。
Timerを使わないでできる仕組みとか、ヘルプに載ってないGetTickCount、Button1Clickのヘッダーとbeginの間にまた手続きらしき物があるとか・・・
GetTickCountっていうのはAPI関数っていう物でしょうか?
わからんことだらけです。
>259
GetTickTimeはWin32APIです。
Windowsの起動からの経過時間をmsecで取得するので
Timerのインターバルあたりで、差分を表示すれば
ストップウォッチらしいものができると思います。

私は、楽なので計算や表示の時間を計るときの目安としてこのAPIつかってます。
>>259
>Button1Clickのヘッダーとbeginの間にまた手続きらしき物がある

procedure や function の中に、その手続きや関数内でだけ使える関数を書く事が出来る。

procedure aaaa(xxx);

 procedure aaaa1;
 begin
  処理
 end;

 procedure aaaa2;
 begin
  処理
 end;

var
 i:integer;
begin

 for i:=1 to 10 do aaaa1;
 for i:=1 to 20 do aaaa2;

end;

こんな書き方が出来るようになる。

慣れると便利、特に再帰処理書きやすくなるから絶対に慣れておくべき。

GetTickCountは、D6のヘルプには載ってますが?
経過時間を扱う場合には、引き算1つで差が算出できるので普通使うでしょ、
覚えておいて下さい。
262241:02/06/19 13:46
>>260
GetTickCountですよね。ありがとうございます。
これ、TDateTimeに代入しても、Integerに代入しても大丈夫なんですね。
具体的に使ってみたかったんですが、

procedure TForm1.Button1Click(Sender: TObject);
var
 T: TDateTime;
begin
 T := GetTickCount();
 ShowMessage(FormatDateTime('hh:nn:ss', T));
end;

これはどこがダメですか?00:00:00と出ます。

>>261
なるほど、ローカルな関数みたいな感じでしょうか、ありがとうございます。
ヘルプに載ってますか?
俺のには載ってないみたいですが・・・。
キーワードで調べても出てきません。
>>262 ダメな理由は TDateTime型は浮動小数点で1日単位のデータだから

だから、割算が必要
例:
 Caption:= FormatDateTime('hh:nn:ss', GetTickCount/(1000*60*60*24) );

---------------------------------------------
 ついでに、それを使わないで整数演算でする場合は

var OldCnt:Cardinal;
procedure TForm1.Button1Click(Sender: TObject);
var NewCnt,dt:Cardinal;
begin
NewCnt:=GetTickCount;
dt:=NewCnt-OldCnt;
Caption:= format('%02d:%02d:%02d.%02d',
  [ dt div(60*60*1000)
  ,(dt div (60*1000)) mod 60
  ,(dt div (1000)) mod 60
  ,(dt div (10)) mod 100]);
OldCnt:=NewCnt;
end;
>>262
あなた他人の話聞いてる(読んでる)?それとも、ちょっと読んで理解できなかったら
読まないようにしてるのかな?

判らない部分があったら Help -> MLログ -> google の順で調べて下さい、でないと、
永久に自分ではプログラム作れませんよ。

因みに、
ローカル宣言についてはヘルプにもマニュアルにも記載してあります。
ヘルプの目次->Object Pascal言語ガイド->手続きと関数->ローカル宣言 でどーぞ。

ヘルプはキーワード検索だけじゃなくて、暇なとき 目次の内容も読んでください、Pascalに
慣れていない人や我流な人(私もだが)にはとても有益な情報が密かに詰まってたりします。
(Delphiのヘルプは印刷物のマニュアルの内容と同じです。)
265241:02/06/19 16:42
>>263
おおお、できました!
ありがたや、ありがたや。
後半はストップウォッチみたいな物ですか?
やってみたら、2回目以降は、前に押してからの時間が出ます。
1回目は謎な時間が出てしまいますが・・・。^^;

>>259はどこがダメなんでしょうか?
>>265
(n-1回目の時間)−(n回目の時間)

ってやってるだろ?n=0ならどうなる?
プログラム以前に・・・。
プログラミングにも当然ながら、向き不向きがあるのよね
268225:02/06/19 20:13
亀レスすみません。
その後色々と試したのですが、>>232さんの方法で何とか実現できました。
ありがとうございます。

あまりにも取り込み→利用が簡単で驚きました・・・(;´Д`)
269デフォルトの名無しさん:02/06/19 22:09
今大学でDelphiを習ってるんですけど
全然分からないんですけど、
どうすれば 皆さんのように分かるようになりますか?
>>269
ヘルプ片手に試行錯誤の連続。
プログラムってさぁ、習うものじゃないよね
>>271
言語(道具)やアルゴリズムやデータ構造(基礎となる部品)を習うことは否定しない。
でも、何を作るか、どう工夫するかは自分の頭で考え体で実行しないとダメでしょう。
>>269
何かを作りたい!という目的を持つ、これ最強。
274素人:02/06/20 01:25
オレは「分かるように」なってるかどーかは知らんが、
1.○○するツールが作れないかなぁ?
2.そのツール作るにはどーすればいいのかなぁ?
3.ネットで検索してヒントから学ぶ
こーゆー形で理解してきたが…。
よーするに「必要」から、と。後は>>273に同意。
>>何かを作りたい!という目的を持つ、これ最強。

おおむね同意。
ヒトによっては、熱意だけあって、激しいクレクレ君に変身する場合もあるので。
276241:02/06/20 05:34
>>264
他の人が教えてくれた物は、Helpで調べるとかして、できる限り理解する様に努めています。
手続き・関数のローカル宣言はよくわかりました、ありがとうございます。

>>266
>>263
Button1を一回押した時点では、OldCntには何も代入されていないから、
NewCntの値、つまりGetTickCountの戻り値がそのままCaptionになるということですよね。
277デフォルトの名無しさん:02/06/20 07:08
TraceRouteコンポーネントってどこかにありませんかね?
Delphi5 で動くフリーの奴
>>259
IncMilliSecondは手続きではなく、関数ですよ。(Incは手続きだけど)

だから PassTime := IncMilliSecond(PassTime); にしなきゃダメだと思う。

どれくらいの誤差が出るのか、さきほどこの方法で自分でやってみましたけど、
MSecの百の位が秒を刻んでる様に見えるほどの誤差でした。(藁
こんなにTimerって誤差があるのか・・・
>>277
Indy のデモプログラムじゃだめか?
>>278 インターバルタイマは分解能せいぜい1/30秒しかないから
>280
マルチメディアタイマー使えばいいんだと思うけど
やはりGetTickTimeを使うのがいいのかな...
>>281
 GetTickTime って何?

GetTickCountの事なら ストップウオッチの応用なら Now を使えばいいと思うけど?
たしか精度同じ程度でしょ

マルチメディアタイマも単位は msだし、使い難いから
実行時間を計算するような場合はパフォーマンス カウンタを使う方がいいと思う
RDTSC命令を呼ぶか QueryPerformanceCounter を使うか
ストップウォッチの計時にタイマを使うのは、精度を考慮するとダメです。
GetTickCount や Now など時刻を基準として差をとるべきです。

241の問題で残っているのは、単に表示の仕方だけ。
>>283

計時関係の精度について

http://support.microsoft.com/default.aspx?scid=kb;EN-US;q172338

によると

Several timers of differing accuracy are offered by the operating system:

Function Units Resolution
---------------------------------------------------------------------------
Now, Time, Timer seconds 1 second
GetTickCount milliseconds approx. 10 ms
TimeGetTime milliseconds approx. 10 ms
QueryPerformanceCounter QueryPerformanceFrequency same

したがって GetTickCount がもっとも手軽で精度も通常用途では十分だと
思われる。タイマなど時間間隔をつかった計時は、誤差が累積するので
時刻差を利用したほうがよいのは当然。
>GetTickCount
NT系ではデフォルトの精度が10msecなので、
timeBeginPeriod(1);
を忘れるな。
286デフォルトの名無しさん:02/06/21 10:15
レビュー求ム!

カンタン!Delphiプログラミング―あなたにも作れるWindowsプログラム 日経BPパソコンベストムック
http://www.amazon.co.jp/exec/obidos/ASIN/4822216888/
Delphiパーソナルプログラミング
http://www.amazon.co.jp/exec/obidos/ASIN/4839907161/
Delphi Graphic Secrets―Know‐how & Libraries
http://www.amazon.co.jp/exec/obidos/ASIN/4797319224/
Delphi 6 プログラミングバイブル
http://www.amazon.co.jp/exec/obidos/ASIN/4844316346/
287デフォルトの名無しさん:02/06/22 08:57
質問です。
時刻と時間の違いに関してですけど、時刻を扱う時はTDateTimeを使えばいいとして、
時間を扱う時はTDateTimeを使っていいのでしょうか?
それとも、カウンターとして整数型の変数を利用した方がいいのでしょうか?
>>287
TDateTime を使ってもよいと思うが、時間間隔を TDateTime に変換する
コストや変換にともなう誤差を考慮すると、わざわざ TDateTime に変換する
意味はないと思うよ。
例えば、GetTickCount で時間差を計時すると、ミリ秒単位での数値が得られ
るわけですから、これを時間、分、秒に換算するのは簡単です。どこにも
TDateTime への変換を考慮する必要はありません。
delphi5を使っているのですが、検索ダイアログや、エディタのタブなんかのフォントサイズが突然変わり、
一旦delphiを再起動すると治る。 ってな症状が出てるの俺だけですか?
>>289
オレもD5sp1ユーザだが、そんな経験はしたことない
291デフォルトの名無しさん:02/06/22 12:43
テーブルの値を、ボタンを押したら一括して変更するようなのは、どうすればいいんですか?

例えば、ある項目値が全て0のとき、ボタンを押したら全て1にしたいとき、

SQLで
dataset.sql.add('update table1 set yn=1');
とやってみたり、
while not(table1.eof) do
table1.start;
292デフォルトの名無しさん:02/06/22 12:45
間違って送信しちまったぜ。

テーブルの値を、ボタンを押したら一括して変更するようなのは、どうすればいいんですか?

例えば、ある項目値が全て0のとき、ボタンを押したら全て1にしたいとき、

SQLで
dataset.sql.add('update table1 set yn=1');
とやってみたり、
while not(table1.eof) do
begin
table1.start;
table1.fieldbyname('yn').asinteger := 1;
table1.next;
end;

みたいなことをやってみても、エラーになってしまいます。
table1.start;
table1.fieldbyname('yn').asinteger := 1;
table1.next;
table1.start;
table1.fieldbyname('yn').asinteger := 1;
table1.next;
table1.start;
table1.fieldbyname('yn').asinteger := 1;
table1.next;
>>288
上の方を読んで、精度が必要な時はGetTickCountの差で求めるのかなと思ったのですが、
基本的に時間を使う時はGetTickCountの差で良いってことですかね。
教えてくれてアリガトです。
>>294
GetTickCountが一周して0にもどってもいいように処理してね。
>>289
リソース不足なんでは?
以前Win98で使ってて、リソース不足でフォントが異様に大きくなり、
その製でスクロールバーが馬鹿でかく膨らんだ経験あり。

解決策は、NT系に乗り換えること。
とはいえNT系でも無尽蔵なわけでもないが。
>>294
googleで調べてみるとtimeGetTimeの方が精度いいみたいですね。
298デフォルトの名無しさん:02/06/22 13:40
>>292
Startなんてメソッドはないよ。Firstです。

Table1.First;
Table1.Edit;
while not Table1.EOF do
begin
Table1.FieldByName('field1').AsInteger := 1;
Table1.Next;
end;
299デフォルトの名無しさん:02/06/22 14:16
>298

あ、そうですね。うろ覚えでカキコしたもんで、間違えました。コードはちゃんとfirstとやってます。
>>299
とりあえず、どういうエラーか書け。
VCLの勉強をはじめようと思うのですが、
どこか参考になるようなサイト教えてください。
げ、リンクがほとんど切れてる。
304299:02/06/22 20:36
>300

大体こんな感じなんだけどな。

「プロジェクト○○がEDataBaseクラスの例外を生成しました。データセットが編集又は挿入モードではありません。」

>>304
そのままやん。Table1 の宣言の方法などをさらせば識者のご加護が得ら
れるだろう。(俺は、Delphi 使いじゃねーから期待するなよ。)
>299
一回ずつPostしなきゃだめだろ?

with Table1 do
begin
 First;

 while not Eof do
 begin
  Edit;

  FieldByName('Field1').AsInteger := 1;
  
  try
   Post;
  except
   Cancel;
  end;

  Next;
 end;  
 
 FlushBuffers;
end;
307299:02/06/22 22:28
306産休。すぐに試してみます。

参考のため、今作成中のヤツをあぷします。

まず、データモジュール「dm」にテーブル「tbl1」、データソース「ds1」がある。
ds1のデータセットはtbl1である。
別のフォームで、tbl1を利用する。usesなどはちゃんと処理している。

フォームに、DBControlGridを貼り付け、データソースは「dm.ds1」。AllowDeleteとAllowInsertはFalseにしている。
と、ココまでは問題ないはず。実際、このフォームを実行して、DBControlGridに貼り付けたDBEditなどは編集できる。
次に、フォームにコマンドボタン「btnUpdate」を貼る。で、そのクリック時のプロシージャ。

with dm.tbl1 do
begin
Open;
First;
Edit;
end;
while not(dm.tbl1i.EOF) do
begin
with dm.tbl1 do
begin
FieldByName('ID').AsInteger := 1;
Next;
end;
end;

なんだけど、これが、299のようなエラーになる。
308299:02/06/22 23:45
うまくいきました。

edit; は、書き込みの度にやらなければならないようですね。場所を変えたら、うまくいきました。

ども、皆さん、ありがとうございました。
309301:02/06/23 01:08
>>302
ありがとうございます。
参考にさせていただきます。
310デフォルトの名無しさん:02/06/23 07:10
ちょっとDB周りの処理で苦しんでいます。

UpdateSQLを使用した更新を行っているのですが
更新ボタンを押すと、Query1.ApplyUpdatesを実行するようになっています。
しかし、この時点でアプリを起動したままWindowsをシャットダウンすると
書き込んだはずのデータが消えてしまうんです。

ディレクトリ内に MBファイルが残っているところを見ると
正常に更新ができていないという事なのでしょうか?

ちなみにアプリケーションをきちんと終了した場合は
データはちゃんと書き込まれています。
311181:02/06/23 07:44
>>310
そもそも何で...
> この時点でアプリを起動したままWindowsをシャットダウンすると
と言う運用するんだ ?
312デフォルトの名無しさん:02/06/23 09:00
>>311
クライアントがむちゃな操作をするもので…
>>311
まさか Commit してないとか?

 ヘルプより
>データセットを更新する方法としては,個々のデータセットの ApplyUpdates
> メソッドを呼び出すよりは,データベースコンポーネントの ApplyUpdates
>メソッドを呼び出すことをお勧めします。
>データベースコンポーネントの ApplyUpdates メソッドは,
>トランザクションのコミットおよびロールバックを処理するとともに,操作が成功したときにキャッシュをクリアします。
314...:02/06/23 11:09
Filter文字列に「あ行で始まる名前」をセットするにはどうすればいいのでしょうか?

Dataset.Filter := '''YOMI = '' + ''あ*' or 'YOMI = ''い*' .....以下同じ...''';

みたいなことをやろうとしているのですが、’の数とか訳分からなくなってしまう厨です。

もっといい方法ありますか?
315デフォルトの名無しさん:02/06/23 17:26
>>314
横一行に書くんじゃなくて段落分けしなされ。
orの部分で改行すべし。
>>312
クライアントを教育しろ
そんな奴らならシャットダウンせずに電源切ってるやつもいるだろ?
317デフォルトの名無しさん:02/06/24 14:31
>314
 >315 の意見もいいが、漏れ的には配列と、for と、Formatを組み合わせるな。

 配列は 10(50音の行の数)×15(もっとも長くなる「は」行がは、ば、ぱの三種類
×5個)にして、それに50音表を用意しておく。

 あいうえお
 かきくけこがぎぐげご
 さしすせそざじずぜぞ
 たちつてとだぢづでど
 なにぬねの
 はひふへほばびぶべぼぱぴぷぺぽ
 まみむめも
 やゆよ
 らりるれろ
 わをん

 行を指定されたら、配列から一行分の列を順に読みつつ、Format 使って一文字分の
フィルターを作っては追加してく、と。配列の一行分の長さは別にもってりゃいいし。
318デフォルトの名無しさん:02/06/24 21:20
>315さん、三球!

Table1.Filter :=
'YOMI =' + #39 + 'あ*' + #39 + ' or ' +
'YOMI =' + #39 + 'い*' + #39 + ' or ' +
'YOMI =' + #39 + 'う*' + #39 + ' or ' +
'YOMI =' + #39 + 'え*' + #39 + ' or ' +
'YOMI =' + #39 + 'お*' + #39;

みたいにしたら、うまくいきました。
quotedstr()関数を使ったらもっと簡単みたいですね。
319デフォルトの名無しさん:02/06/24 21:22
>317さん、

filterは、濁音・半濁音は区別しないようですが、区別させるスイッチか何かあるんですか?

ワシの所では、'は*'だと「は〜」も「ば〜」も「ぱ〜」もヒットしますけど。できれば区別させたいです。
320TeamB/2ch ◆SE69s0c2 :02/06/25 10:40
ASCII ソートの Index を作成して有効にすればよかったかと。
321デフォルトの名無しさん:02/06/27 23:38
BMPを白黒ビットマップかどうか見分けるにはどうしたらよいですか?
>321

Pixelformatでみたらどうすか?
それとも1bit以外のBmpで白と黒だけが使われているってことですか?
323デフォルトの名無しさん:02/06/27 23:48
>>322
あ、そうですね。PixelFormatで見ます。
>>321
Image1.LoadFromFile('ファイル名');
if Application.MessageBox('白黒ですか?', '突然ですが質問です', MB_YESNO or MB_ICONQUESTION) = ID_YES then
//白黒
else
//カラー
>324
文法エラー。
326デフォルトの名無しさん:02/06/28 18:05
関数とか宣言したあと、なにかショートカットキーを押すと
実際に処理する部分をすぐ書けるように出来たと記憶してるんですが、
なんでしたっけ? 3個ほど一緒に押してたような…。
イヤン!そこは違うってば!
クラス補完 か コード補完 でヘルプを検索して >>326
329デフォルトの名無しさん:02/06/28 18:44
>>328
さんきう。〔Ctrl〕+〔Shift〕+〔C〕 がそうらしいのだけど、
押しても何もならない。今日、delphi6 personal 入れたばかりで
設定とかはディフォルトのままのはずなのに…。
personalにはないよ
>>330
マジ? なんでこんなものを省略するわけ?
ぼうらんどさんよ、もうね、アフォかバ…(以下略
332 ◆tare/k3c :02/06/28 20:11
もし初心者ならコード補完なぞ使っちゃいかんよ。
補完しなくてもソラで打てるようにならないと上達しないよ。
personalにコード補完まで入れてしまうと、professionalが売れないからでしょう…
データーベースよりもActiveXよりもVCLソースよりも何よりも、
コード補完と[Ctrl]+上下の移動がprofessional最大の価値と僕は思ってます。
>>332
まぁ、初心者かな。N88-BASIC のころからサンデープログラマー(死語)もどきでは
あったんだけどね。つーか、あれでしょ、Delphi に限らないと思うんだけど、
覚える単語っていうかスペルっていうか多すぎ。
これで飯を食っていかなくちゃいけないのならともかく、休みの暇つぶしにやる程度なら、
絶対覚えれないって、、、たぶん (;´Д`)

>>333
なるほど…(w
>休みの暇つぶしにやる程度

こんなもんは上達しようというのが無理。
趣味だって、一所懸命やらなくては物にならんよ。
単語覚えるのは、言語の文法を覚える以前の問題だと思う
>>334
アルファベットの列と見るから覚えられない。
アレは意味のある英単語だ。
>>335 >>336
言いたいことは分かるが、はっきり言って、補完が効くものを全て覚えようという気はない。
限られた時間のなかでの優先順位は 文法>単語 だな。単語をいちいち覚えるくらいなら、
自分の作りたい処理(アルゴリズム? ちょっと大げさか)を考るほうが楽しいし、やりたい。
338デフォルトの名無しさん:02/06/28 23:36
char 型の文字からAScIIコード得るにはどうすればいいんですか?
Cのような自由さがないからいいんだけど、
なさ過ぎてこまったり・
339デフォルトの名無しさん:02/06/28 23:43
>>331
買えよ。
340デフォルトの名無しさん:02/06/28 23:51
>>339
やだね。
>>331
文句たれんなら買えっての。アホ。
>>341
やだね。
>>338
Ord でやんすね。 反対は Chr かな。
文字型は順序型に含まれると。
344 ◆tare/k3c :02/06/29 01:24
>>338
もし16進数にするならFormatを加味するといいよ。
Format('%2.x', [Ord('a')]);

おまけ
Delphiで16進数は頭に$を付ける。「$1A」とか。
16進数をOrdに戻すには、StrToInt('$' + '1A'); みたいにする。
OrdをCharにするにはChr()を使う。
憶えるも何も、俺は脊髄反射で書けるようになったよ。
考える前に手が動くので、コード補間などいらん。
むしろ勝手にprivate部に置いてくれたり、インデント幅が自分のスタイルと違う(かなり深刻)ので使えん。
346デフォルトの名無しさん:02/06/29 09:58
データベースについて。

項目がMEMO型の場合、dbgridを使うと、(MEMO)としか表示されませんが、DBMEMOコントロールを使わずに内容を表示する方法はありませんか?

グリッドにアクセスとかエクセルとかみたいに一覧表示をさせたいのです。
347TeamB/2ch ◆SE69s0c2 :02/06/29 10:37
メモ型のデータは長い文字列になることが多いですから、グリッドのセルに
うまく収まるかなど溢れた場合の対策をきちんと行う必要がありますが

Memo 形フィールドに対応する TMemoField を作成し、
OnGetText で

procedure TForm1.Table1NotesGetText(Sender: TField; var Text: String;
DisplayText: Boolean);
begin
Text := Sender.AsString;
end;

とすればメモの文字列が全部手に入ります。
348デフォルトの名無しさん:02/06/29 12:36
ファイルを検索中にWindowsについてるaviファイルをAnimationで動かして
'ファイル検索中です...'みたいにして待っててもらおうと思い
実行ファイルと同じフォルダにaviファイルを置いて、Animationにそのパスを
毎回知らせて使ってるのですが、このaviファイルは、実行ファイル内に
取り込むことはできないのでしょうか?宜しくお願いします
>>348
Animate1のcommonAVIをaviFindじゃだめなの?
350デフォルトの名無しさん:02/06/29 13:01
>>338です。
>>343
 ナルホド。順序型と考えるなら、すごく納得できます。ありがとうございました。
>>334
 16進数の場合も教えてもらってありがとうございます。
 Pascalやってた時使わなかったから、その内またココで聞いてしまったかも!?
351348:02/06/29 13:01
>>349
!まったくそれで解決しました。有難うございました!
352デフォルトの名無しさん:02/06/29 16:22
Del6のTDownLoadURLでファイルをダウソしようとするときの
イベントOnDownloadProgressのStatusTextを取り込むには
どうしたらいいんだ?
353デフォルトの名無しさん:02/06/29 17:09
tEDITのキーボード入力モードについて質問
windows制御でctrl+英数 を押下することで半角カナモードにしている場合
それをdelphiで制御するのどうやるの?
IimeModeは単にIMEだけの制御みたいでできません。
ほとんどの領域はカナ入力である部分だけ英数にしたいのです。
ctrl+英数 なんて使うな!という回答がないよう祈っています。
>>353
大文字小文字、全角半角の織り交ぜ方が素敵です。
何がしたいのか意味がわからん.
ImeModeでなにが足りないの?
最近、方々のBBSや掲示板を見てみると、プログラミングの前に、
日本語勉強しろや、と思ふことしばし。
どこでもそうだけどな。
(´-`)。o ○ (>>352みたいな礼儀知らずに答えてあげる心優しい人はいるんかな…?)
(´-`)。o ○ (>>答えてあげたいけど、DLEPHI歴5時間の俺には意味さえわかんない)
>>352
取り込む?マジで意味わかんねーよ!?
オマエStatusTextが何なのかは知ってるか?
フォームにTMemoでも貼り付けて Memo1.Text:=StatusText; とでもしたらどーだ ゴルァ!
361352:02/06/30 06:21
>>360
ありがとう。TMemoに表示させたらURL(TDownLoadURL.URL)がでてきたよ。
でも、Helpにある「StatusText は,ダウンロードの状態をユーザーに表示」ってこんなものなのかなぁ(´-`)。o ○
362黒き風:02/06/30 06:22
ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!
ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!
ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!
ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!
ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!
ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!
ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!
ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!
ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!
ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!
ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!
ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!
ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!
ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!
ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!
ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!
ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!
ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!
ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!
ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!
ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!
ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!
ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!
ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!
ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!
ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!
ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!
ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!
ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!
ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!
ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!
ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!ストッピング、ゴー!!


で?
あるか
365352:02/06/30 14:00
>>360
´▽`)解決したよ。Thanx
366346:02/06/30 23:07
>347

コメントありがとうございました。実験してみて、また結果等をうぷします。
367デフォルトの名無しさん:02/06/30 23:16
>>363-364
信長発見!            
で、あるぱ
369デフォルトの名無しさん:02/07/03 06:22
7月あげ
370 :02/07/03 16:16
昨日保存したファイル(*.pas, *.dfm)があるですが、
Delphi でまた続きからやろうとしても、
実行(F9)が無効になっていて実行できないんですが、
これは Borland の嫌がらせですか?それとも、
Personal では、保存したらもう二度と使えないという
罠ですか?マジレスお願いします。
>>370
*.dpr開け
372 :02/07/03 16:21
>>371
レスありがとうございます。
*.dpr はなくて、*.pas と *.dfm しかありません。
もしかして、昨日作ったぶんはあぼーんですか?
373 :02/07/03 16:46
がんばってあぼーんは回避しました。
>>372
保存してない可能性もあるけど、別の場所に保存した可能性もあるから
HDを *.dpr で検索してみたら?

それでもダメなら 新しいプロジェクト作って その *.pas を開いて
プロジェクトに追加するだけでいいと思うよ(普通は)
375 :02/07/03 17:26
>>374
レスの入れ違いになりましたが、解決しました。
その後の方法でできました!
アドバイスありがとうございました!
自動保存のチェック入れといた方がいいよ
377デフォルトの名無しさん:02/07/09 23:17
緊急age
378625:02/07/10 01:44
3日間以上もカキコがなかったのは、376 読んで脱力したからだと。
>>378

625 は Delフサスレからのです。
380age man:02/07/10 22:10
別に脱力してないので age
なんか変なスレになってきたねぇ…
あついからねぇ...
383Delフサギコ ◆zE1iiRdQ :02/07/12 13:07
            __________
          /
    ∧,,∧ <  暑苦しいと?おっしゃる?
    ミロ゜ ,彡  \  
    U  ミ    \
    ミ  @       ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     U''U
    ̄ ̄ ̄ ̄
            __________
          /
    ∧,,∧ <  暑いので、毛、刈られますた
   ミロ゜ ,|   \
    U  |     \
    |  p       ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     U-U
    ̄ ̄ ̄ ̄
385天下統一:02/07/13 19:47
このスレで日本を統一!!
で、あるな。
386デフォルトの名無しさん:02/07/13 21:05
質問させてください。
ディレクトリ内のファイルを列挙するために
procedure Tekitou(DirPath:string);
var
SearchRec: TSearchRec;
begin
if 0=FindFirst(DirPath+'*.*', faAnyFile, SearchRec) then try
  ・
  ・
  ・
 finally
FindClose(SearchRec);
end;

でいままで列挙してたのですが、今日急に
"cardinalとTSearchRecには互換性がありません" >FindClose(SearchRec)

とでるようになりました 原因は何が考えれるでしょうか?
387デフォルトの名無しさん:02/07/13 23:04
>if 0=FindFirst(DirPath+'*.*', faAnyFile, SearchRec) then try
「0=FindFirst」?
「0=FindFirst」???
>>386
新しいプロジェクトで最小限のコードでも再現する?
>>386

同名の API と混同されている。
uses 節の Windows と SysUtils の順番に注意
>>387
左辺定数の評価式は基本だろ?知らないのか?
391387:02/07/13 23:49
>>390
で、あるか。
>>397=387
よかったな。賢くなったぞ。
友達に自慢しれ。
393デフォルトの名無しさん:02/07/13 23:54
基本なわけねーだろこのアフォ!異端児!
>>390
左辺定数キライ……
Delphiでははじめて見た。
↓=387らしい
397デフォルトの名無しさん:02/07/13 23:58
>>392
タイムスリッパー発見!397誰?
398397:02/07/13 23:59
オレだ(藁
399386:02/07/14 00:58
>>389
同名の API と混同されている。
uses 節の Windows と SysUtils の順番に注意

SysUtil,・・・,Windows になってました
Windowsを先頭に持ってきたら見事直りました。有難うございます

usesにも順番ってあるんですね、まったく知らなかったです
ところで同名の API と混同されている。というのはどういう
意味なのでしょうか?

>>387 左辺定数には特に意味無くつかってます。というかコピペさせてもらったのを
使ってるだけですので..
389ではないが
>>399
SysUtilsで宣言されているDelphiの関数FindFirst, FindCloseと同じ名前のWindowsAPI
がある。これの関数宣言はWindowsユニットにある。

同じ名前の場合は、usesでは後から宣言したほうが有効になったはず(確か)
だから入れ替えたらSysUtilsのほうが使われるようになる。

明示的にユニットを指定して関数を呼ぶこともできる。SysUtils.FindCloseとかWindows.FindCloseというふうに。

間違ってたらスマソ。
へー。初めて知ったよ。ふーん。ちょっと感動。有意義!
402389:02/07/14 02:27
>>399=386

400 さんの説明どおりです。解決してよかったですね。

ちょっとつけ加えると、

VCLの SysUtils ユニットの FindFirst()、FindNext()、FindClose() は
Windows に宣言されている FindFirstFile()、FindNextFile()、FindClose() API の
ラッパーなんですね。そして、FindClose() だけが名前が同じなんです。コンパイラ
は関数名や変数名、定数名などの識別子を見つけるために、最初に、そのコードが書
かれているユニットの前方を探します。そこで見つからないと、直前の uses 節の
うしろの方のユニットから順番に探します。ですから、uses 節の並びの順番は重要
なんです。Delphi の Object Pascal に名前空間の概念がありませんが、このように
して、各ユニット間での参照の優先順位を設けることによって識別子を解決します。
ほかにも TControl.GetClientRect と GetClientRect API のようにメソッドで同名
のものもあります。400さんが指摘されているように、優先順位が低いユニットの
識別子を使うときは、ユニット名を参照します。
403386:02/07/14 03:10
なるほど、uses節は全く考えずにどんどん追加してたのですが、いろいろ法則が
あるのですね、問題解決以外にも知らなかったことを教えていただき
非常にためになりました(説明文にも分からない単語がいくつか...w
調べてきます)。有難うございます。
404デフォルトの名無しさん:02/07/14 09:47
フレーム内のEditのExitイベントに処理を記述して、
そのフレームを貼り付けたフォームの中の同じEditのExitイベントに別の記述を行った場合、
フレーム側で記述してあったイベントの処理が流れないのですが、
これは仕様なのでしょうか?
(あれ?と思いinheritedも書いて見ましたが駄目でした。)
405404:02/07/14 09:49
ごめんなさい、勘違いしてました。
Frame21.Edit1Exit(Sender);
ってな感じでかくんですね(汗)
406デフォルトの名無しさん:02/07/14 10:04
Delphi初心者なのですが、>>404-405さんの文面を拝見して思ったのですが、Delphiのフレームを利用する場合に
フレーム自体は、貼り付けたフォームに対してクラスとして扱われないのでしょうか?
クラス内クラス的に定義出来れば、フレーム元を継承してinherited等ですっきり爽やかに書けそうなのですが
Delphiのクラスはクラス内に多段階的にクラス定義(継承?)できないのですか?

# クラス・クラスと書いてますが、まだ勉強始めたばかりでよくクラスについても分っていないのですが・・・。
フレームもクラスですよ。
でも、フレームとフレームを貼ったフォームは所有関係になるので継承は関係ないですね。
それと、イベントを上書きした時元が呼ばれないのは、
イベントは(仮想関数では無くて)メソッドポインタ型のプロパティにすぎないからです。
フレーム使わないので知らなかったけど
確かに>>405で書いてるような使い方じゃちょっと使いづらいね。
あ、フレーム内にコード書かないような作りにしちゃえばいいだけか。
409406:02/07/14 10:15
>>407
なるほど・・・。マジで初心者なんで私にはまだよくわかりませんが(^^; でもなんとなく、イメージできました。
>>407
でもコンパイル時にイベントが上書き定義されてる!って
警告でも出して欲しいとか思ったりするけど。
411takuo:02/07/14 11:41
かとちんうざい
>>411
2chと勘違いしてる香具師もアレだが、それに反応するのもウザイさね
413デフォルトの名無しさん:02/07/14 18:43
>>411-412 ん?マ版の方でよろしく
414デフォルトの名無しさん:02/07/15 14:59
ものすごく基本的なことを聞くようですが、教えてください。
Chr(i) で文字コード i の文字が得られますが、2 バイト文字の文字コードから文字を取得
するにはどのようにすればよいのでしょうか? いろいろ試したり調べたりしたのですが
お手上げです。
function Chr2(lo, hi: Byte): String;
begin
SetLength(Result, 2);
Result[1] := Chr(hi);
Result[2] := Chr(lo);
end;
416414:02/07/15 15:29
>>415
できました。ありがとうございました。
今までできなかったのはエンディアンを逆にしていたからだったなんて
恥ずかしくて言えません……。
えーと、質問です。
普通オブジェクトのインスタンスをつくるときは、

myobj := TMyObject.Create;
try
//いろいろ
finally
myobj.Free;
end;

って try .. finally を使いますよね。
もし、

for i := 0 to MAX do
myobj[i] := TMyObject.Create;
// いろいろ
for i := 0 to MAX do
myobj[i] := TMyObject.Free;

みたいにオブジェクト配列を作りたい場合、どのタイミングで
try .. finally を使えば良いんでしょうか?
オブジェクトの数が1か多で
生成・廃棄のタイミングは変わらないのでは。
try も finaly もいらないよーん
420Delphi好き ◆0YAPhEjk :02/07/16 01:21
>>417
こんな手はメンドクサイかもしれませんけど、単純に安心したいやりかたとしては、
for i:=0 to MAX do
 myobj[i]:=nil;
try
 for i:=0 to MAX do
  myobj[i]:=TMyObject.Create;

 // いろいろ
finally
 for i:=0 to MAX do
  if Assigned(myobj[i]) then myobj[i].Free;
end;
とかやっちゃうかもしれません。私の場合。
でも、もっと楽な方法とかありそう?
421Delフサギコ ◆zE1iiRdQ :02/07/16 02:04
 ミ,,゚Д゚ミつ

 TDateTimeを二つ用意して
 その差分の分を求めるには
 どしたらいいでしょうか?

"+30"分とか"-180"分とかで
表示してみたいのです。
 
 
T1 := Now;
T2 := Now;
TDiff := (T2 - T1);
Label1.Caption := Format( '%d分', [TDiff * MinsPerDay]);

でどお?
nilが入っている変数へのFreeは何も起こらないので、if文をひとつ省略できます。
>>423
FreeAndNilを使っても良いのでは?
nilをつっこむ手間もはぶけるはずです。(うろ覚えですが…
425Delphi好きッ◇0YAPhEjk:02/07/16 08:26
>>424
便利なものを教わりました。有難う御座います。
426デフォルトの名無しさん:02/07/16 09:11
StringGridのスクロールバーの幅などを、普通のもののようにデータ量に
応じた幅にしたいのですが、良い方法はないでしょうか?
427デフォルトの名無しさん:02/07/16 10:15
TBitmap.SaveToFileを使ってbmp形式で画像を保存…と、何気なく利用していた
のですがどうやらこの方法で生成されたbmpファイルはPhotoShop等に嫌われる
(ヘッダが解析できない、とエラーが出る)ようです。
で、疑問なのが皆さんはどうやってこれを回避しているのでしょうか。
…やっぱり手作業でbmpファイルを生成ですか?
428デフォルトの名無しさん:02/07/16 10:42
起動時に [Ctrl]キーが押されているか判定して起動後の動作を変更したいのですが、
どのように実現すれば宜しいでしょうか?
フォームのKeyDownイベントだと常に効いてしまいますし・・・。
429Delphi好きッ ◆0YAPhEjk :02/07/16 11:04
まぁ、私個人の意見で適当かもしれませんが…。
>>426
ColWidthsプロパティとOnDrawCellイベントを利用して出来そうですがどうでしょう。
面倒かなという気もしますけど…。
>>427
私も先日同様の問題に直面いたしまして。各所ホームページを参照しながら作成しま
した。折角ですし、TBitmapを継承したクラスで実装しては如何でしょう?
>>428
プロジェクトソースでGetKeyStateを利用すれば簡単に実装できますよ。
430427:02/07/16 11:53
>>429
あぁ…そう言えばそうですね。早速作っておきます。
それがその、回りくどいことにTJEPGImageのbmp版?を作ってました(笑
いやいや、あまり笑えません。ありがとうございます。
431428 :02/07/16 11:59
>>429
ありがとう!試してみます。
プロジェクトソース側で書けば良かったのかぁ・・・勉強になりました!
432427:02/07/16 13:18
自己フォローです。
何故に変な形式なのかなぁと久々にTBitmapが吐いたbmpファイルを眺めていた
のですが、よくよく見ると32bit/pixな形式になってました(気付けよ)。
どうやら画面モードが32bitになっているのにつられてそうなったようです。
で、試しに
bitmap.PixelFormat := pf24bit;
とやってみたところ24bit/pixなbitmapが生成されました。
これだとPhotoShop他でも問題なく読めました。
32bit/pixなスタイルがいけないのかどうなのか不明ですが、これでひとまず
大丈夫なようです(いいのかなぁ)。
今後はもう少し熟考してから質問します。失礼しました。
 正直、未だにinterface型が分かりません。
GUID?何じゃそりゃ?って感じです。
 どなたか教えてください・・・。
434デフォルトの名無しさん:02/07/16 19:28
複数のフォームを静的に生成するアプリなのですが
表示させるフォームが常に一つだけという形にしなくてはなりません
メインフォームを非表示にし、他のフォームだけを表示させたいのですが
SubForm1.Visible := True;
MainForm.Visible := False;
ではだめですし。。。
SubForm1.ShouModal;
だと メインフォームが可視状態ですし。。。
>>434
 .dprファイルで、CreateFormする前に
Application.ShowMainForm := False;
 とすれば?
>>435
ご回答ありがとうございます

起動時はそれで解決できたのですが、
その後、メインフォームを一度表示させてから、
メインフォームが受け取るイベントによって>>434で記述したように
他のフォームと表示・非表示を切り替えたいのです
>>434
 Hide, Showとか使っても・・・同じか
>>436
 ていうか普通に出来るぞ。
どういうイベントで、どういう状況?
>>437
あ!
これ やってみたらできますぃた!!!
Hideじゃだめかと思っていたんですが
Visible := False;
と同じだとばかり思っていましたが、違うみたい。。。
ありがとうございます

参考までに他の手段をご存知でしたら、お教えください
>>438
起動時に
Apprication.ShowMainForm := False;
として メインフォームではないフォームを表示させて、
タイマーきって そのフォームを閉じて、メインフォームを表示させます
その後 メインフォームにあるボタン等のOnClickメソッドで、
他のフォームを表示させて、メインフォームは非表示にする。。。
という部分ができなくて
メインフォームが残ってしまったりして。
441デフォルトの名無しさん:02/07/16 20:33
ほっしゅほっしゅ
>>439
 いや、同じだぞ・・・。
参考;Forms.pasのソース
procedure TCustomForm.Hide;
begin
Visible := False;
end;
443Delphi好きッ ◆0YAPhEjk :02/07/16 20:58
>>442
多分、あれじゃないですかね。
MainForm.Visible:=False;
と処理したのではなく、オブジェクトインスペクタで代入した…と。
その場合、Application.ShowMainFormプロパティに触れていなければ強制的に表示
されますんで。違うかな?
444ななしへた ◆B18Bks.Y :02/07/16 22:51
>>417
リストクラスを作ってしまった方が簡単確実だと思います.

// 手抜きリストクラスの宣言

TMyObjectList = class(TObjectList)
private
function GetItems(index: integer): TMyObject;
public
property Items[index: integer]: TMyObject read GetItems; default;
end;

// 手抜きリストクラスの実装

function TMyObjectList.GetItems(index: integer): TMyObject;
begin
result := inherited Items[index] as TMyObject;
end;

// 使う

myobjs := TMyObjectList.Create;
try
myobjs.OwnObjects := True;
for i := 0 to MAX do
myobjs.Add(TMyObject.Create);
// いろいろ
// 各オブジェクトは myobjs[i] と配列のように表せます(文字列リストと同じ).
finally
myobjs.Free;
end;
445デフォルトの名無しさん:02/07/16 23:45
「モナーの *やさしい* Delphi質問スレ」は無しってことでしか?
>>445
下のほうにまだ生きてるから保存しる
447445:02/07/16 23:50
>>446
1000超えてるから、新スレは?ってこと。
保存はしますた。
あのスレの最後のほうに書いてあるように、
ここに統合された。
449445:02/07/16 23:59
>>448
ですか。では移転age。
450デフォルトの名無しさん:02/07/17 03:55
WinAPIの検索してる方。こんなページを見つけました。
messageも載ってる様です。

yokohama.cool.ne.jp/chokuto/hsp/index.html
ww2.tiki.ne.jp/~yuarin/toy/api.htm
>>450
下の方の掲示板面白いね。
プログラミング初心者がDelphiを覚えるのに(・∀・)イイ!!書籍って何でしょうか?
というか、本屋に行ってもDelphiの本が少ないんですが。
>>452
最近の Delphi-ML では 日経BPの「カンタンDelphiプログラミング」というのが
初心者向けではいい! ということになっているようです。
454デフォルトの名無しさん:02/07/17 23:14
>>451
何が面白いの?
Delphiの仕事がありません。どうしたらいいでしょうか?
>>455
仕事ある言語を覚える。言語スレで言うのもなんだが、言語に寄りかかるなよ。
>>453
本屋でちらっと見たんですが、ムックですよね。
無くなる前に購入してみます。
回答ありがとうございました。
458素人:02/07/18 00:55
>>457
本は少ないやねぇ。でもネット徘徊してれば必要無いよ。
特に最初のうちは。
んで、突っ込んだヤツを考え始めるといろいろ困る。

しかし、delphiマガジンっていまだに見たことないんだけど、伝説上の本か?(^^;。
近所の図書館にLinuxマガジンが入ってるのを見た時は「delphiマガジンも購読してくれよ!」
と思いますた。
459デフォルトの名無しさん:02/07/18 00:58
Delphiで以前に作ったProjectを開こうと思ったらエラーが出たんですけど、原因と復旧法を教えてください。
Del6(Personal)で、以前に作った時も同じバージョンです。

エラー文

---------------------------
エラー
---------------------------
モジュール 'rtl60.bpl' のアドレス 40009054 でアドレス 00000054 に対する読み込み違反がおきました。.
---------------------------
OK
---------------------------
>>455
自分で企画・提案・計画・仕様書書け!!
461デフォルトの名無しさん:02/07/18 01:03
>>459
Delphi6の修正RTLダウンロードしてインストールした?
462459:02/07/18 01:09
>>461
してません。(名前を聞くのも初めてです。・゜・(ノД`)・゜・)
Borlandのページかな?
逝ってきます。
463TeamB/2ch ◆SE69s0c2 :02/07/18 03:08
>>461
AV アドレスから見て RTL アップデートとは関係ないと思います。
ちょっと追ってみましょう。
464TeamB/2ch ◆SE69s0c2 :02/07/18 03:32
アドレス間違えていないかな?>>459
また明日...
465デフォルトの名無しさん:02/07/18 04:53
Memo1.Lines.SaveToFileでMemo1の内容を保存できません。
kakoっていうフォルダを実行ファイルと同じフォルダに置いてます。
どこが悪いですか?

以下、関係する部分です。
var
kakoPath: String;

procedure TfrmMain.FormCreate(Sender: TObject);
begin
kakoPath := IncludeTrailingPathDelimiter(ExtractFileDir(Application.ExeName)) + 'kako\'; //kakoフォルダの場所
end;

procedure TfrmMain.S1Click(Sender: TObject);
var
res: Integer;
begin
res := frmSave.ShowModal;
if res = mrOK then
with frmSave do
Memo1.Lines.SaveToFile(kakoPath + YEdit.Text + '/' + MEdit.Text + '/' + DEdit.Text + '.txt'); //YEdit・MEdit・DEditはfrmSaveに属します
end;
____________________________________________________________________________________________________________________________________________

これより、pasファイルが変わります。
var
frmSave: TfrmSave;

implementation

{$R *.dfm}

procedure TfrmSave.SaveBtnClick(Sender: TObject);
begin
frmSave.ModalResult := mrOK;
end;

procedure TfrmSave.CancelBtnClick(Sender: TObject);
begin
frmSave.ModalResult := mrCancel;
end;
はぁ。歴史的事情でファイル名に / は使えません。

Unix 風ディレクトリセパレーターである / を DOS の
セパレーターである \ と同一視していた時代があったため。

ためしに 期待するファイル名を手で作成してごらん。はねられるから。
467465:02/07/18 06:55
>>466
おっしゃる通り、 / は使えませんでした。どうもありがとうございました。
というか、Win2kなんかだと/は\の変わりに使える罠。
>>468
W2K でもデフォルトではだめでしょ?
470Delphi好きッ ◆0YAPhEjk :02/07/18 09:34
>>469
実験で、FindFirstを用いてWin2kで/を使ってみたらうまくいきました。なんか、
設定がしてあるんでしょうか。
471Delphi好きッ ◆0YAPhEjk :02/07/18 10:00
質問があります。
DLLプロジェクトなんですが、起動時に表示されるフォームを画面上部に画面横幅い
っぱいに表示したいと思っています。(その後は、サイズ調整自由)
この時、フォーム内のコンポーネントには、横幅にあわせて位置が変わるコンポーネ
ントもあります。(AnchorsプロパティでakRightを指定してあります)
実現方法として、OnFormCreateイベント中で、フォームのWidthにScreen.Widthを
代入するという方法をとりました。
ところが、この手で大きさを変えると、AnchorsにakRightを指定したコンポーネン
トが、とてもフォームの右端を基準に調整したとは思えない場所に表示されます。
どなたか、原因、解決策等ご存知でないでしょうか?
実際にテストしたわけではないので確実ではないけれど。
FormCreate はオブジェクトが作成された時点のイベントだから、
OnShow の方がよいと思う。
473Delphi好きッ ◆0YAPhEjk :02/07/18 11:30
>>472
OnShowを利用したのですが、同様にうまくいきませんでした。
追記)一応場所が動いてはいるのですが、十分に動いていない(予定位置の半分くら
いの位置で止まっている)のです。何が原因なんでしょうか…。
474Delphi好きッ ◆0YAPhEjk :02/07/18 11:40
すいません。原因が分かりました。
OnCanResizeイベント内で、
if NewWidth<480 then NewWidth:=480;
と、最低幅縛りを入れるとAnchorsプロパティにakRightを指定してもまともな位置に
表示されないようです。原因はわかりませんが…。
とりあえず、どのような解決法がありえるんでしょうか。
>>474
Windowの大きさ制限はフォームのプロパティでやるようにしたらどうですか?
476Delphi好きッ ◆0YAPhEjk :02/07/18 14:27
>>475
色々やったらうまくいきました。有難う御座います。
(Constraintsプロパティなんて使ったこともありませんでした。多謝)
477でもどり初心者 ◆KcG2I.hg :02/07/18 15:25
最近、OSを再インストールしたんで、
Delphi6.0Personalも再インストールしようと思ったんですが、
使用許諾コードの取得でまでは完了するんですが、
キャプションが「Delphiの登録」のウィンドウの下の方に
「登録に失敗しました。もう一度試して見てください。」
とでるんですが、何度やっても先に進みません(涙)

捨てメアド取得して1から再インストしないとだめなのかなぁ

ネットで配るんなら、認証もっとゆるくしてくれよぉ
478素人:02/07/19 01:58
>>477
で、結局どーなったんでしょう?おちおち再インストールも出来ないですなぁ…。

ところで、関係無いですが、英和訳エンジンって便利だけど

○全体的にユニークな確認者(GUID)
○タイプ図書館
○ActiveX図書館
○COMオブジェクト魔法使い

やっぱりまだまだかなぁ(^^;。ところどころで「タイプライブラリ」って
訳せるくせにどうして図書館になるかなぁ?あと「COMオブジェクト魔法使い」が
気に入った。
>>477, >>478
あれは十分ゆるい/ぬるい認証システムだとおもうがなぁ。
使用許諾コードを新しいマシンの上で生成したのだよね?
最悪、Borland に電話してみたら?
480Delphi好きッ ◆0YAPhEjk :02/07/19 10:02
>>477
私、会社のマシンでDelphi6インストールして、そのままのコードを使って自宅のパソ
コンにもDelphi6インストールしたらうまくいきました。
まぁ、同じWin2ksp2ではありますけど。
別のパソコンで使いたいならレジストリの内容を保存しとけば?
482でもどり初心者 ◆KcG2I.hg :02/07/19 12:23
結局、一度アンインストールし、別のメアドで登録してキーを取得して
インストールしてうまくいきました。って、うまくいくの当たり前か。

>>479
金払ってないから、サポートに電話するの気が引けるんだよね(汗

認証はMSのアクチに比べると緩々だと思うけど、
せめて、もうちょいわかりやすくメアド登録して、帰ってきたパスを
打ち込むぐらいにして欲しかった。

いや、タダで使わせてもらってるから、大きい声ではいえないんだけど(w

>>481
どのレジストリのキーかわかりますか?
483TeamB/2ch ◆SE69s0c2 :02/07/19 12:28
Borland の言語製品は複数のマシンへのインストールを許していますし、
Personal 版は無料で公開しているものなのですから、サポートに電話してみても
問題ないと思いますよ。

もちろん、Pro/Ent の不正コピーとかという話だとまた別ですが。
>>482 どのレジストリって・・いかにもなのがあるから自分で見たら?

 それにレジストリ保存しないと色とかの設定で困らないの?
485デフォルトの名無しさん:02/07/20 11:48
あげ
486デフォルトの名無しさん:02/07/21 01:20
あげてもあげてもさがっていくなぁ。
せっかく統合したのに談話室の方が人気ある
ただ煽り合いが加熱してるだけでしょ
相談室は隔離施設だから、質問はここで。
489デフォルトの名無しさん:02/07/21 18:17
bmpファイルをexeに埋め込むことはできないのですか?
exeだけ移動して実行すると「***.bmpは開けません」という
エラーメッセージがでます。
>>489
簡単なのはイメージリストとかvisible:=falseなイメージとか。
リソースに組み込んでもいいけど。
491デフォルトの名無しさん:02/07/21 18:23
>>490
ありがとうございます。リソースに組み込むのをやってみようと思います。
492Delフサギコ ◆VzDeLphI :02/07/21 19:50
                     _____________
 彡ミ  | |  ∧,,∧ |__    /
  |ヽ  | | ミ,,゚Д゚ミ/  /  <  世間はぶっそうだなあ
  |ヽ  | | (ミ   ,/__()旦~~ \
  ⊥  |  ̄| ̄|| ̄ ̄ ̄ ̄ ̄|    ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  |__|   ◎ ̄| ̄| ̄ ̄ ̄ ̄ ̄|

ところで、DateTime型を受け付ける
プロパティエディタってないでしょうか?

MilliSecまで設定できる奴がいいです。
自作るのも面倒だし、、、

できればTTimeStampでも同じ動作する
と、うれしいです。
>>492

勘違いかもしれんが

type TDateTime = type Double;

だから、そもそも published にできないのでは?
Del付属のリソースエディタでは
ビットマップやアイコンしか入りませんが、
リソースにバイナリデータを埋め込むにはどうスレば良いのですか?
(アプリケーションで、このデータをまるごとファイルに書き出してのに使います)
496Delフサギコ ◆VzDeLphI :02/07/22 00:27
          ?           _____________
 彡ミ  | |  ∧,,∧ |__    / はて?
  |ヽ  | | ミ,゚Д゚,ミ/  /  <  フサんちではDateTimeも
  |ヽ  | | (ミ   ,/__()旦~~ \ Doubleもインスペクタに出ますよ
  ⊥  |  ̄| ̄|| ̄ ̄ ̄ ̄ ̄|    ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  |__|   ◎ ̄| ̄| ̄ ̄ ̄ ̄ ̄|
497493:02/07/22 02:41
すまぬ。ヘルプによれば

実数型は,Real48 を除いて published が指定できます。

でした。
>>494-495
リソースに任意のファイルを埋め込む事のみを目的にしたコンポって
作れないのかな?
それとも原理的に無理なの?
あれば便利だと思うんだが。

初級者丸出しな質問ですまそ。
>>498
リソースは、コードがコンパイルされる前にコンパイル済みでなくては
ならないので、コンポーネントにするのは非常にむつかしい。
*.dfm に取り込むなら簡単だけど。以前、ML で議論されていた。
500498:02/07/22 03:31
>>499
dfmに取り込まれるってことは、実行するとメモリ上に展開されるってことでいいのかな?

つーことは巨大なファイルだとメモリを大量消費するのかな?
そのとおり。それがリソースとの比較では欠点だよね
ところで >>495 のURLの方法では何が不満なの。テキストファイルひとつ
書くだけじゃん。
リソースに入れない方法として

Delphiで小さな実行ファイルを作ろう
http://pc3.2ch.net/test/read.cgi/tech/1009080085/167
のように、初期化のついたバイト配列として埋め込んでおくのはダメ?

リソースに埋め込む方法もこのスレの21にあるよ

>>498
 TImageのようなのを作れば可能と思うよ
 ByteImageプロパティと SaveToFileメソッドだけのコンポーネントね
 ただByteImageプロパティエディタも作らないといけないけど

>>500
 dfmはたしかリソースに入ってるから、ストリームとして読まれるんじゃなかったっけ?
504デフォルトの名無しさん:02/07/22 12:21
256色以上のビットマップをリソースにするにはどうすればいいのでしょうか?
505デフォルトの名無しさん:02/07/22 12:32
>>504

確実なのは、BMPのファイルイメージをバイナリリソースにして
おいて、実行時にリソースから読み出したバイナリ列でピクセル
列を作成する方法かな。
最近デバッグ実行を終了する際に、
delphiの反応が無くなるようになって作業にならないんですが(;´Д`)

OSの再インスト時期なのだろうか……
>>506 さあ・・・ 自作コンポが悪さしてるかもしれないし何とも他人には判りません
今、D6でエディタを作ってるんですが、
TMemoやRichEditに改行マーク↓や[EOF]マークを
付けるようにするには、どうしたらよいのでしょう?
>>508
TEditor使え
>>497
Delphiが出たばかりの頃に出た昔の某Y氏の本に
実数型はpublishedにできないと書いてあったので
しばらくだまされた(^^;ものです.

#まだDelphiをよく理解しないうちに書いたように思える本でしたが
この本のおかげでDel始めてすぐにコンポを作れました.
>>509
TEditorのようなものを自作したいので、
どのようにやるのか方法が知りたいんです。


>>511 TEditor作りたいなら TLabelを参考にした方がよかったり
TLabelとTEditorを参考にしたら出来ました!
ありがとうございました。
>>513
えっ!!!!!!!
>>513

はすごいね。26分で解決だと。
>>515

文末と行末に TLabel を貼ったのか?
517508:02/07/23 02:38
>>513は別人です。
どなたかヒントか何かいただけませんか?

どうにかして改行やEOFを判定して
PenやCanvasで文字のあとに描くのでは、
519デフォルトの名無しさん:02/07/23 03:57
フォームAの上にEditを配置して、入力中に[F2]を押すと別のフォームBをポップアップ表示させて
丁度、コンボボックスのリストの高機能版のようなことをさせようとしているのですが、以下の問題が
解決できません。

1.フォームBを表示させるとフォームAからフォーカスが奪われる
2.フォームAにフォーカスが移動するとフォームBが後ろに回って見えない。

何か良い解決策はないでしょうか。
>>519
TForm では無く、TListBox とかの普通のコントロールを動的に生成して
位置あわせしたらどう?
521デフォルトの名無しさん:02/07/23 05:43
FormのOnpaintイベントじゃなくて、OnCreateでCanvasを扱おうとすると無理ですよね?
それはOnCreateが呼び出されるのがフォームのインスタンスが作成された直後で、フォームが表示される前だから、Canvasは反映されないっていう考え方で合ってますか?
>>520
ちょっと項目が多いのでフレームでなんとかやってみます、有難うございました
>>521
procedure TForm1.FormCreate(Sender: TObject);
begin
  show;
  Self.Canvas.Pen.Color:=clRed;
  Self.Canvas.LineTo(100,100);
end;

やろうと思えば、こんなかんじで show 入れるとできますけど。
524デフォルトの名無しさん:02/07/23 06:24
>>523
なるほど、勉強になりますた。ありがたや、ありがたや。
525無責任だが:02/07/23 08:24
>>519 フレームでいいと思うけど フォームでやる方法もあるよ
type
TForm2 = class(TForm)
・・・
procedure CreateParams(var Params: TCreateParams); override; //これを追加
end;

その実装部
procedure TForm2.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.Style:=WS_CHILD;
Params.WndParent:=Form1.Handle; //親をForm1に変更する
end;

フレームと違って、位置合わせはコードでやらないといけない。

でも、フォームにPaintBoxを貼っておいて
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.BoundsRect:=PaintBox1.BoundsRect;
Form2.show;
end;
と、PaintBoxの範囲にあわせるようにすると楽
ツルーバーについて教えてチョンマゲ
TToolBarのWrapableプロパティをTrueにした状態で、ToolBarのWidthを縮めると
ToolBarが折り返されるんだけど、折り返されたときのイベントって分かりますか?
>>526
ヘルプ♪
528526:02/07/24 00:48
ゴメンヨゴメンヨ。ツルバーのOnResizeで取れたよ。
全然違うツルバのResizeにブレクポインコ張ってた。テヘ。
529519:02/07/24 02:22
>>525
なるほど、勉強になりました。
530デフォルトの名無しさん:02/07/24 12:25
ADVゲームを作ろうと思うのですが、文字を一つずつ表示するようなコンポーネントって
ありませんか?
>>530
あってたまるかと。
Delphian WorldのGraphics&Mulitmediaで探せば?
533デフォルトの名無しさん:02/07/24 16:03
TListView の vsReport 表示のときに、項目幅を変えさせたく無いんですが、
何かいい方法ありませんか? columns のwidth 設定はちょっと・・・
幅変更のマウス表示すら無くしたいのですが。
534デフォルトの名無しさん:02/07/24 18:17
>>533
ListView1.ShowColumnHeaders := False;
だったら変更できなくなるけどヘッダが見えなくなるからなあ・・・
そういうスタイル定数やメッセージも見当たらないし。

TStringGridで見せかけるのは?
535デフォルトの名無しさん:02/07/24 18:21
Kylix3あげ
536533:02/07/24 18:52
>>534
サンクス。やっぱり無理っぽいので、美しくないけど Width で逝きます。
TStringGrid は跳び選択? が出来ないので使うの辞めました。
あと、書き換え時のデータ初期化がめんどいから。
ListView1.ShowColumnHeaders := False にしておいて、
別途THeaderを置いておくとか、駄目ですか?
TListcolumnのMinWidthプロパティは?
ポインタは変わっちゃうけど。
>>533
>TListView の vsReport 表示のときに、項目幅を変えさせたく無いんですが、

LsitView をサブクラス化して、子ウィンドウであるヘッダーコントロール
からのメッセージを処理すると column 幅変更を阻止できます。

  { Private 宣言 }
 public
  OrignalProc:TWndMethod;
  procedure SubClassProc(var Msg:TMessage);
 end;

var
 Form1: TForm1;

implementation

{$R *.DFM}

uses
 Commctrl;

procedure TForm1.FormCreate(Sender: TObject);
begin
 OrignalProc := ListView1.WindowProc;
 ListView1.WindowProc := SubClassProc;
end;

procedure TForm1.SubClassProc(var Msg:TMessage);
begin
 OrignalProc(Msg);
 if Msg.Msg = WM_NOTIFY then
  if pNMHDR(Msg.LParam)^.code = HDN_TRACK then begin
   Msg.Result := 1;
   ListView1.Refresh;
  end;
end;
540便乗で質問:02/07/24 23:22
TListView の vsReport 表示のときに、横スクロールバーを常に非表示にしたいのですが、
何かいい方法ありませんか?
>>540

サブクラスプロシージャを以下のようにします。そのはかは 539 と同じ

procedure TForm1.SubClassProc(var Msg: TMessage);
begin
 OrignalProc(Msg);
 if Msg.Msg = WM_PAINT then
  ShowScrollBar(ListView1.Handle,SB_HORZ,false);
end;
>>541 の 訂正。垂直スクロールバーがあるときも考慮して

procedure TForm1.SubClassProc(var Msg: TMessage);
begin
 OrignalProc(Msg);
 case Msg.Msg of
  WM_PAINT:ShowScrollBar(ListView1.Handle,SB_HORZ,false);
  WM_VSCROLL:begin
   OrignalProc(Msg);
   ShowScrollBar(ListView1.Handle,SB_HORZ,false);
   ListView1.refresh;
  end
 end;
end;
>>541 の再訂正。 すまぬ

procedure TForm1.SubClassProc(var Msg: TMessage);
begin
 OrignalProc(Msg);
 case Msg.Msg of
  WM_PAINT:ShowScrollBar(ListView1.Handle,SB_HORZ,false);
  WM_VSCROLL:begin
   ShowScrollBar(ListView1.Handle,SB_HORZ,false);
   ListView1.refresh;
  end
 end;
end;
>>541 の再々訂正。すまぬすまぬ。

procedure TForm1.SubClassProc(var Msg: TMessage);
begin
 OrignalProc(Msg);
 case Msg.Msg of
  WM_PAINT:ShowScrollBar(ListView1.Handle,SB_HORZ,false);
  WM_VSCROLL:ListView1.refresh;
 end;
end;
>>531
ある。
546デフォルトの名無しさん:02/07/25 12:05
GetMemとAllocMemで確保するのって何か違いがあるんでしょうか?
好みで使い分けていいと思いますよ。
AllocMemはゼロ初期化がされますけど、どうせ何かのデータを入れるならGetMemで取って個別に代入しても結局同じですし。
548デフォルトの名無しさん:02/07/25 13:16
メニューの"ファイル(&F)"のFを指定する
プロパティの名前って何がいいですか?
Accelerater? HotKey?
SDKのドキュメントだと"Menu access key"になってるから、accessKeyは?
550デフォルトの名無しさん:02/07/25 13:40
一太郎のファイル(拡張子jtd)からデータを読み込むことになったのですが、
どのようにしてデータを引っ張ってきて、どのような単位(行単位とか?)で、
引っ張ってこれるのかが、わからなくて。。。
ADOを使用したりしまする?
551デフォルトの名無しさん:02/07/25 14:04
教えてください。
A,B,Cのユニットがあります。
Aのinterfaceで、列挙型を宣言しています。
 type
  TMyColor = (mcBlue, mcRed);
Bのuses節にAを加えれば、TMyColorを参照できます。
しかし、Cのuses節にBを加えてもAのTMyColorは参照できません。
ここまでは、理解しています。
お聞きしたいのは、これを可能にする方法です。
試しに、Bのinterfaceで
 type
  TMyColor = A.TMyColor;
と宣言してみたのですが、Cで参照すると未定義のエラーになりました。
数珠つなぎにすることは可能なのでしょうか?
552Delphi好きッ ◆0YAPhEjk :02/07/25 14:30
>>551

unit unit3;
interface
type TMyType = (ltest, ltest2);
---------------------------------------------------------
unit unit2;
interface
uses unit3;
type TMyType = unit3.TMyType;
---------------------------------------------------------
unit unit1;
interface
uses Unit2;
var t : TMyType;


こんな感じ?一応コンパイルできましたが…。??
553550:02/07/25 15:50
すんません。。。
質問の仕方がいけないでしょうか?
こまっちょります。。。。・゚・(ノД`)・゚・。
>>553
一太郎でマクロ使えば?
それとも
obj = CreateObject("JXW.Application")
obj.Visible = true
obj.Documents.Add()
obj.TaroLibrary.Insert("Hello, Ichitaro.")
こんな漢字でやるとか
どっかにコンポがあったような
>>553
それが可能ならJustSystemのサイトで技術情報公開してるはず。
してなかったらアンテナハウスに聞け。
コソーリ

> Subject: [Delphi:69385] 一太郎ファイルのデータ取得
> Date: Thu, 25 Jul 2002 15:46:21 +0900
> From: デフォルトの名無しさん <[email protected]>
>Reply-To: [email protected]
> To: DelphiML <[email protected]>
>X-Mailer: Becky! ver. 2.00.11
557550:02/07/25 16:41
>>554
一太郎でマクロ。。。調べてみます
記述していただいたコードが既に理解できていない罠。。。
調べます。。。

ありがとうございます

>>555
技術情報。。。そんなに難しいことでしか。。。
どぼぢまじょお。。。

>>556
おおお
それは どっかのTipsでしか?
内容が。。。知りたい。。。
Invokerユニットに含まれてるTInterfaceInvokerってクラスに詳しい人って居ま
せんか?
Webサービスでサービスとして使うクラスはすべてこのメソッドで起動されるみた
いなんですが、implements宣言でInterfaceを他のオブジェクトに委任してると
不正なメモリアクセスが発生してしまいます。
おそらくInterfaceの取り出しなんかせずにメモリマップを決め打ちして実行して
るんだろうと思いますが、それを回避する方法が解りません。
何か良い知恵は無いでしょうか?
テストコードか何かありませんか? >>558
560558:02/07/26 13:15
>>559

たとえば、

Thogehoge = class(TInvokableClass, Ihogehoge)
 FhogeImpl: Ihogehoge;
public
 constructor Create; override;
 destructor Destroy; override;
 property hogehoge : Ihogehoge read FhogeImpl implements Ihogehoge;
end;

と言うふうにIhogehogeインターフェイスを持つThogehogeというクラスが有った
とします。
インターフェイスの実装はFhogeImplに委任されていて、コンストラクタの実行時
にFhogeImplへインスタンスがセットされ、デストラクタで解放されます。

このクラスをWebサービスとして登録すると、TInterfaceInvokerによって実行さ
れる際にEAccessViolationが発生してしまうのです。
(発生個所:SOAPPasInvユニット114行目)
で、このクラスの実装方法を変えて、

Thogehoge = class(TInvokableClass, Ihogehoge)
 FhogeImpl: Ihogehoge;
public
 constructor Create; override;
 destructor Destroy; override;
 function Hogefunc(const Value: Integer): Integer;
end;

function Hogefunc(const Value: Integer): Integer;
begin
 Result := FhogeImpl.Hogefunc(Value);
end;

という風にメソッド内で委任を行った場合は問題なく実行できます。
で、TInterfaceInvokerがどんな風にHogefuncの呼び出しを行っているのかを調
べようと思ったのですが、TInterfaceInvokerのソースはインターフェイス部しか
無くて私の手におえない状態です。
561558:02/07/26 14:45
手におえないと思ってたらあっさり解決してしまいました。
そもそもなんでインターフェイス委任がやりたかったかと言うと、Webサービスを
普通に実装してしまうとリクエストのたびにCreateが実行されてしまって永続的
なサービスにならなかったので、Singletonなオブジェクトへ委任してしまおうと
思ったんです。
そこで迂回路を探してたら、ズバリそのものがヘルプにありました。
Delphiヘルプ-「インターネットアプリケーションの開発」-「実装の作成と登録」
を見てみたらオブジェクト提供プロシージャを登録できる事がわかったので、

procedure Createhogehoge(out obj: TObject);
begin
 if Singleton = nil then
 begin
  Singleton := THogehoge.Create;
  { インターフェースへの参照を保存し,解放を防止する }
  SingletonIntf := Singleton as Ihogehoge;
 end;
 obj := Singleton; { グローバルインスタンスを返す }
end;

initialization
 { 起動可能インターフェースの登録 }

 InvRegistry.RegisterInvokableClass(Thogehoge, Createhogehoge);

という風にしてやってWebサービスを単一インスタンスで実行する事が可能になり
ました。
これでDCOMとかCORBAとかの高コストフレームワークに頼らずに、しかも厳密な型
チェックが可能なC/Sシステムが作れそうです。
>>557
> それは どっかのTipsでしか?
> 内容が。。。知りたい。。。

あれ見てMLだとわかんないオマエは・・・ひょっとして、ひょっとすると、
そーか、わかった、やはりな、ふふふ、ははは、はぁーーっはっはっ!!
563デフォルトの名無しさん:02/07/26 18:47
誰か実装してください。

TProcess = class
public
 procedure Execute;
 procedure Terminate;
 property Executing: Boolean;
published
 property ExeName: String read FExeName write FExeName;
 property Directory: String read FDirectory write FDirectory;
 property Args: TStrings read FArgs write FArgs;
 property Priority: TProcessPriority;

 property UsePipe: Boolean;
 
 property OnExecute;
 property OnExit;
 
 property OnStdOutput;
 property OnErrOutput;
 property OnInput;
end;
>>563
お前、writeln()が溢れかえる結果が見えないか?
>>564
いみふめ
566デフォルトの名無しさん:02/07/26 21:50
2バイトの文字列、例えば"2F" を 16進数の 2F に対応する1文字、つまり
この場合なら "/" に変換したい。(結局、chr($2F) の結果の文字列)
何か、いい方法はありませんか?
よろしくお願いします。
>>566
if(a = 47) then
b := b + '/';
習得する手間と、言語としての機能の2つのポイントで考えると、
C++とDelphiどっちを勉強したら良いでしょうか。
普通にオヤジ登場
>>569は誤爆。スマソ
>>567
どこから、そんなロジックが出てくるんだ?
冗談で書いてるのか?
>>568
簡単さならIDEが洗練されている(RAD的にね)Delphiの方が簡単。
Delphiは機能的にはC++のサブセットと言えると思う。
だからC++への移行は割と簡単かと。
逆も然りだけどC++書けたらもうDelphiいらんでしょう。
簡単に何かを作りたいときは使うけど。
>566
HexToBin
574568:02/07/26 22:37
>>572
なるほど。Delphi→C++への移行は楽なんですね。
実の所、現在C++を勉強中なんですが、イマイチ掴めないので、停滞していた所でした。
とりあえず、しばらくDelphiを使ってみて、
機能に不満を感じるようになったらもう一度C++に戻ってみます。
で、教えて君みたいで非常にカンジが悪いと思うのですが、
Delphiの解説サイトでオススメのところとかありますでしょうか?
できれば、現在も更新されている(管理人のやる気が持続している)サイトがいいです。
もし宜しかったら、お願いします。
>>574
知らん。俺はDel3のヘルプとマニュアルだけで覚えた。w
乗換えが楽って書いてあるけど、
デルファイとC++ってそんなに似てるか?
俺はデルファイ専門だからよくわからんのだが……。
>>576
クラスもあればオーバーロードもある。

C++に言って取りあえず覚えなきゃいけない新しい概念。

多重継承
テンプレート
参照

位じゃないの?
まぁ、でも乗りかえるって事は色々と覚えなおさなくちゃならないコトがあるわけで、
ラクな乗りかえってのはありえないわな。
>>577
参照ってDelphiのvarじゃないの?
>>578
まぁね、でも共通の概念が多いから理解は早い。
VBユーザとか大変そうだよ?見てると。
参照はObjectPascalにもvarとかoutとかあるし、
多重継承もinterface+implementsで事実上実現できますし。

テンプレートの他には、C++ではコンストラクタとデストラクタが自動で呼ばれること、とかかな?
でも、それもstringやVariantの解放処理が自動で行われることの延長のようなものですし。

何よりC++Builderの存在が、ふたつの言語が直接リンクできる程度に近いことを証明してくれてるし。
DelphiからC++に乗り換えて(別にDelを使わなくなったわけではないが)、
一番苦労したこと。

それは、C++のソースが読みにくい!

私の体験なんだが、同じ思いをした人はいません?
同じC++でも
C++BuilderとVisualC++ではかなり開発手法が違う罠(本当に罠。
C++はクラスのインスタンスを静的に生成できる。
>>584
あれ、考えようによっちゃ難儀よ?

難儀ならしなければいいのでは。
まぁ、なんだかんだいってもC++の方が性能は上だわな。
俺はDelphiiつかってるけど。
っつーか、別に生産性の悪いC++なんぞつかわんでも、
Delphi使えればもう9割がたやりたいことは出来ると思うんだが。
どうかな?
588デフォルトの名無しさん:02/07/26 23:50
>>582
コンポーネントはObject Pascalで書けばいいじゃん。
どうせBCBは両方コンパイルできるんだから。
>>587
機能はC++が上
性能はObject Pascalが上
でないかい
>>587
C++Builderに限って言えばDelphiと生産性は同じ様なもんじゃないのか?
STLや既存の大量のライブラリが使える分Builderの方が上かも。
Pascalの魅力は制限が多いことなんだよ。

煽りじゃないよ、念のため。
>>591
おたく、通ですな
593デフォルトの名無しさん:02/07/26 23:57
C++にできてDELPHIで出来ないこと、
またその反対の例を具体的にあげて貰えないでしょうか。
あんまりないなら暫くはDELPHI parsonalでいこうかと思ってます。
気合いさえあればC++だろうがObject Pascalだろうが出来ない事は無い。
doxygenのような使えるクラス関係解析ツールがObjectPascalには無い。
>>593
俺はあんまり感じないけど。
ま、俺c++使ったこと無いんだけどね(笑
>>589
そりゃ、どーだろ。
単に実装方法の違いだけだろ、ライブラリを使う場合にC++だと簡単に扱えるけど
Delだとちょい手がかかる、もっともDirectX関連のようにC/C++で書いた方が楽な
ものもあるしね。
性能や機能とはちょっと違うと思うけど。
それと、Delphiの欠点はDelphiであるって事かな、C++の場合gccやvcやBCBと色々
とあるけど、DelphiはDelphiでしかないからね、FreePascalもまだ成長しきれてない
しなんとなくもう駄目だろ。
まぁ、折れの場合は、Pascalが好きだからDelphi使ってるってだけで他に理由はないんだが。
598593:02/07/27 00:01
>>594
早レス、サンキュッ!
じゃあやっぱり、DELPHI+BCCでいってみます。
生産速度的にはどうだろう?Delphiの方がはやくないか?
>>597
そんな深い意味じゃないC
C++ はテンプレートが使える分、高機能
Object Pascal はコンパイルが桁違いに速い分、高性能
という程度の意味だC
>>593
初心者の方ですか?
「手っ取り早くゲームを作るぜっ」という軟派な方ならDelphiをお勧めします。
無料で手に入る高機能RADツールですから。
「プログラムの基礎やアルゴリズムをじっくり勉強していきたい」という硬派な
方なら、やはりDelphiですな。教育用言語、というくらいだから。文法も美しいし。

それ以外の普通の人は、C++をやってください。以上。
>>599
コンパイルはDelphiの方が速いね。
全体的な生産速度で言えば、
C++Builder > Delphi >> VC++じゃない?
(ライブラリの充実度から言って)
書き忘れたけどVC++が低いのはRADじゃないからね。
話が面白い方向に進んできたな。
ほかのDelphiユーザの意見が聞けて面白い。
もっとやってくれ。
Delphiは柔軟な言語だな。
Delphi自体はc++にも決して劣らない能力を持ち、
かつc++に移行したくなったらわりと容易に移行できる。

っつーか、c++とdelphiが似てるってコトなんだろうな(笑
柔軟すぎて逆に困る事が多いのがC++。
ObjectPascalは固い言語。
>>605
経緯は一緒よ?

ALGOL(だっけ?)から派生して無理やりOOPに仕立て上げたって言う。
正直CやC++の言語仕様って、いきあたりばったり、って感じで嫌い。
PascalやObjectPascalって凄く練られてるって感じがして好き。

お前ら、そう思いませんか?
>>608
たしかに。
>>604
ハゲドー
>>608
マゾですね。
MacOS と BeOS の違いみたいな感じでは?
BeOS は消えたけど・・・
C++は無理矢理CをOOPLにしたって感じだからね。
テンプレート乗せたOPが最強です。
ObjectPascalは言語的には悪くないと思うけどBorlandが潰れたらおしまいだからなあ。
>>615
死ぬ前にオープンソースとかに・・・無いか?
>>615
BorlandはM$に潰されそうだしね。
言語的に考えたらC#が最強だと思う。
M$は嫌いだが。
c#ってc++に機能追加しただけじゃないの?
根っこの部分から違ってるの?
javaにしてもC#にしても、なんで新世代言語は、あの汚いC++の言語仕様を
ベースにしようとするのかわからん。
だれかPascalベースの新世代言語を作ってくれ。Pascalと互換性なくても
いいから。
>>619
多くの人はbeginとendで区切られたスコープ見るだけで気持ち悪がるからね。
まぁ、俺はDelphiマンセーだよ。
信者が少ないのがネックだが。
>>617
MSはBorland、Apple、Corelを潰せません。
>>616
>死ぬ前にオープンソースとかに・・・無いか?
InterBaseの先例があるよね
(後で商用に戻ってしまったけど FireBird が残った)
俺、ゲームつくりたいんだけど、Delphiで十分かな?
>>626
Delphiで限界感じたら他の言語使えばいいだろ。
>>622
Oracleのストアドも begin〜end なんだけどね〜
DBやる人、少ないのかな?
オープンソースになり、信者のうちのもの好きが色々と他のユーザーの意見とか要望を織り交ぜて新世代言語を作りだし、
C++を打ち破る。
と、妄想してみる
>>628
これから増えるというか今増えてる途中じゃないの?
>>622
確かにねー。別に慣れれば何てこと無いんだが。
あと function や procedure を敬遠する人も多いね。 Integer, Booleanも。
if の後の then や、for の後の do や、でもcaseはPascalの方が上か(つーかCのcaseはまんまgotoだろ)。

ても経験上Pascalの方があまりホームポジション崩さずにコーディングできるから、
あまりC++と比べて打つのに時間がかかる、ということは無いと思う。

>>626
多分十分だろう。
>>631
むしろPASCALのほうが速くコーティングできる。俺は。慣れかもしれんが。
>>630
Oracleは減少傾向かも(哀
Pascalはタッチタイプできることが前提みたいなところはあるかもね
&& って打つより、明らかに and の方が早いしね。
hoge->hage って打つのも、 hoge^.hage のほうが早い。
% より mod が早いし、でも += や *= はあると便利だなぁ…。
追加
<< より shl が早い!
637デフォルトの名無しさん:02/07/27 00:49
>>574
全くの初めてだったらここなんかどうかな
http://www.h5.dion.ne.jp/~tuyano/DlphTutor/index.html

DELPHIを簡単に使えそうな気にしてくれます
仮にBorlandが潰れてもFreePascalもOOPLじゃないの?
クラスの継承は確実にC++よりObjectPascalの方がバグ出しにくいと思う。
>>639
そのC++の間違えやすい継承を分かりやすくしたのが、
JavaやC#じゃないの?
>>640
JavaやOPやC#じゃ

になるんじゃないの?言語の出現時期から見て。
TurboPascalのOOPL化の方が早かった?
>>639
つーかあらゆる事に関して、ObjectPascalはC++よりバグを出しにくいと思う。
スレ違いな議論がお好きなようで。
盛り上がってる所に水を差すのがお好きなようで。
>>643
仕切り厨の出現は荒れる兆候なんで、漏れは寝ます。
おやすみなさい。
ま、正直よほどヒネクレたつかいかたをしなければ、
大体のことはDelphiで事足りると思うんだがどうよ?
>>646
同意。
VBよりは遙かに自由度が広いと思われ。
Delphiで事足りるのは確か。
Delphiが一番効率がいいかどうかは人次第。
Pascalはツール・ライブラリが少ないのが痛い。
UNIXがPASCALで作られてたらC(++)と(Object)Pascalの立場は逆転してたと思うけど。
>>649
VCLにそれらしきもの無いですか?
>>649
たしかに、それはあるなぁ。
やっぱユーザが少ないのが原因なんだろうけど。
こればっかりはどうしようもないもんなぁ。
>>637
そこ、結構オモシロイ。
みんな寝たのか……。今日は色々と面白かったな。
そろそろ寝ます。おやすみ
>>654
アンタ、3時間もレスを待ってたのか。
やるな。(笑
プログラミングを勉強し始める動機って、人によって色々あるでしょ?
会社で使うアプリを作りたいとか、ゲームを作りたいとか。
そこで質問なんだけど,Delphiを勉強し始めて、
その「動機」になったプログラムを完成させられるようになるまで、
どれくらいかかった?
大体で良いから教えてけれ。
>>656
2日。
658デフォルトの名無しさん:02/07/27 17:14
>>656
3時間
23'88
>>658
本当だとしたらお前は神
>>660
Hello Worldかもよ
エディットボックスの数字をデータベースの実数項目に代入するには、どうすればいいの?
StrToFloat関数でもTextToFloat関数でもエラーになるんですけど
663 :02/07/27 18:27
             /http://pc.2ch.net/test/read.cgi/software/1025843952/
             |暇な奴作ってくらさい。
             |
             |操作性等がかちゅ〜に酷似or同じ。
             |スレ立て機能。
             |ソース公開しても、亜種禁止。
             |カチュクロンのログは新形式。今までのかちゅ〜ろぐはコンバーターで変換。
    /  ./\    \_______________________________
  /  ./( ・ ).\       o〇       ヾ!;;;::iii|//"
/_____/ .(´ー`) ,\   ∧∧         |;;;;::iii|/゙
 ̄|| || || ||. |っ¢..|| ̄   (,,  ) ナムナム   |;;;;::iii|
  || || || ||./,,, |ゝ iii~   ⊂  ヾwwwjjrjww!;;;;::iii|jwjjrjww〃
  | ̄ ̄ ̄|~~凸( ̄)凸 .(  ,,)〜 wjwjjrj从jwwjwjjrj从jr

664 .:02/07/27 19:34
>>663
kaere
>>662
try
 フールド.asString:= Edit1.Text;
except
 例外処理
end;
>>655
1時〜15時=3時間
やるな。(笑
667658:02/07/27 19:57
>>660
作りたかったツールというのが、
「IE のプロクシ設定を簡単に切り替えられるツール」だった罠。
プログラミングそのものの知識はほとんど必要なかったよ。
     \ 蚊厨はとっとと巣に帰れ!
       ̄V ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     ,__
    /  ./\
  /  ./( ・ ).\
/_____/ .(#゚Д゚)  .\   ∧∧
 ̄|| || || ||. |っ¢..||   Σ(  ;)>>663
  || || || ||./,,, |ゝ||ii~   ⊂  ヾ
  | ̄ ̄ ̄|~~凸( ̄)凸 .(   )〜
>>667
(´-`).。oO(それ、漏れも作った)
670ななし:02/07/27 21:12
Delphiって、(つい最近、お遊びで始めたばかりだが)魅力はかなりあるのに、ドキュメント
(オンラインヘルプ)がVBにくらべると、貧弱な気がする。
関数やサブルーチンのうち、コード例の記載があるのが1〜2割。
ヘルプをあてにしないで、書籍やWEBで調べた方がよいのではないかと感じてしまう。
また、API関数の解説は皆無。(仕方ないので、APIビューアーで調べるハメに・・・W)

MSには悪い点が多々あるが、技術情報(MSDN)の量の豊富さだけは某乱土より評価して
よいのではないか?
>>670
誰もMSDNけなしてる奴はいないよ。カコスレ全部読んでもらってもかまわない。
わざわざDelphiスレでMSDNの評価する必要もないし。


コード例が無いと何もできなういと言うのも問題だと思うが。

>(つい最近、お遊びで始めたばかりだが)
語るならもうちょっと勉強した方がいいと思われ。

APIヘルプはちゃんと英語版がついてきてる。CD-ROMには日本語版も。
672ななし:02/07/27 21:25
>>671

> APIヘルプはちゃんと英語版がついてきてる。CD-ROMには日本語版も。

てゆーことは、製品版を購入せずに、雑誌の付録のPersonal版を使ってるのが、
論外ということか・・・。
>>672
>APIヘルプはちゃんと英語版がついてきてる

後、プラットホームSDKに思いっきりついてくる。
ダウンロードしたPersonalにも入ってますが?
675ななし:02/07/27 21:32
>>673-674

げげ、確認不足かよ! 煤i ̄□ ̄;

仕事(Access, VBのみ)で使わんから、ちゃんと調べなかった、ってのは
言い訳にならねえよなあ・・・。(逝
>>675
>(つい最近、お遊びで始めたばかりだが)
語るならもうちょっと勉強した方がいいと思われ。

これだからVB厨は・・・とまた評判を下げることになりかねないよ。
>>674
付いてるよ。

PlatformSDKのドキュメントのほうが読みやすいけど。
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
678ななし:02/07/27 22:01

質問です。

(1) Application.Title プロパティは、IDEのメニューから設定する、固定リテラルで記述する、
  のどちらか。(メニューで設定した時点で、コードが自動生成されるので、実質的におなじ)

(2) 上記のプロパティを変数で(動的に)記述することはできない。

自分なりにいろいろ試した末の結論なんですが、間違ってますか?

[ 環境 ]
Windows 2000 Pro SP2
Delphi 6 Personal
MS Office、Visual Studio 6.0 Enterprise SP5 その他
雑多なソフトいっぱい・・・。(^^;
>>678
2できない?
最悪でもSetWindowText()で。
680ななし:02/07/27 22:10

API使うのは試してません。(思いつかなかった)

追加質問、失礼。m(_ _)m

(1) FindWindowって、クラス名(第1 Arg)、Window Title(第2 Arg)のどちらか片方を
  指定すればよい(もちろん、両方指定してもよい?)と思うんですが、Delphiアプリ
  の場合、クラス名には何を指定すればよいのでしょう?

(2) 文字列ポインタを渡すAPI引数を省略(VBの場合のvbNullString)する場合、nilで
  よいのでしょうか。
  FindWindowはそれで問題なく動いたのですが、ほんとにそれで正しいのか(コード
  は正しくないのに、たまたま運よく動いただけ、とか?)確信が持てなくて・・・。

>>680
まぁ、Delphiはvarがあるからnil渡せるならそれでいい。
682ななし:02/07/27 22:19

更に追加質問。(しつこい)

use節に不要なユニットが記述されている場合、

(1) 実行ファイルのサイズやパフォーマンスに影響する。
  確認して、削除(またはコメントアウト)すべし。

(2) コンパイラが最適化してくれるので、問題なし。

どっちが正解ですか?

あ、書いてる途中で気が付いたけど、実行ファイルをCompareすれば、
確認できるのかな?(でも、今、手元に環境がないや・・・)
漏れ的にはC++だろうがPascalだろうが、あんまり気にならないのよ。
精々ドイツ語と英語の違い程度。

だけど、だけど、COBOLだけは・・・中国語くらい違う(泣
>>683
的を射た表現
Lispはまた別だろうね(案外、日本語だったりして)
685デフォルトの名無しさん:02/07/27 22:29
Delphiはスレッド作れますか?
会社の基本的な方針は VB なんですが…
マルチスレッドが必要なときなどは Java を使っています。
けれど、Javaは開発環境が貧弱なこともありGUIフロントエンドを作るのに
向いているとは思えません。VBと同じような RAD である Delphi で
マルチスレッドができれば、採用したいと思っています。
>>685
自分で必要になったことはないけど
確か「拍子抜けするくらい簡単」だったはず
687ななし:02/07/27 22:32
>>683

他の言語には、それぞれに熱烈なファンがいますが、COBOLが好きな人間だけは
聞いたためしがありません。(いるのだろうか?)
688685:02/07/27 22:34
>>686
ありがとうございます。
Personal版をダウンロードして評価してみます。
>>686
最悪でもAPI呼べるでしょう。

VCLがスレッドセーフかどうかは別として。
ボーランドのサイトにスレッドの解説がありました
ちょっと古いですけど
http://www.borland.co.jp/tips/delphi/dh004/index.html
691デフォルトの名無しさん:02/07/27 22:53
>>685

http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=24672&lngWId=1

VBだけでもマルチスレッドは出来たりする。
つか、マルチスレッドごときで開発方針丸ごと変えるのは愚かでは?
692ななし:02/07/27 22:59
>>685
googleで検索したら、

ttp://www.wwlnk.com/boheme/delphi/techdoc/dad0010.html

が見つかりました。(参考になるかどうか・・・)
>>683-684
だったらprologは異世界の言葉ですか?
>>693
多分ダンバインはPrologで動いてます。
>678
>(2) 上記のプロパティを変数で(動的に)記述することはできない。

できます。
Application.Title := 'タイトル';

>682
>(1) 実行ファイルのサイズやパフォーマンスに影響する。
>  確認して、削除(またはコメントアウト)すべし。

ユニットによっては、usesしただけで処理が走るものもあり(initializationで)。
不要なユニットは削除するのか吉。


>685
できます。
ただし、VCLはスレッドセーフじゃないので、スレッドからフォームやコンポーネントにアクセスする場合はロックする必要がある。
ヘルプを参照のこと。
ちょっと聞きたいのですが、Delphiでダウンローダ作ってます。
それでIndyコンポーネントのIdHTTPを使ってるのですが、ダウンロード状況やリジューム機能がなくて不便です。
こういう時に使う、いいコンポーネントありますか??
もしくは実装についていいTIPSオナガイしますm(_ _)m
>>697
君がダウンローダ作るのは無理。
>>697
うーん。対象をある特定のエンティティとするか。あるいは任意のエンティティにするか、
によっても 相当変わってくるですよね。

あとは プロトコルを意識せずに既存媒体からダウンロード方向にするか、
トップダウンに あるデータファイルを適用する形にするか。

もしくは 何でも屋を目指さず、システムに解釈しやすい
通信規約を想定して作る、ってのも ありですよね。
#リジュームはここかな。

要は、ダウンロードという動作ひとつとっても、プロトコル体系としてスカスカで、
つまりその概念が出てくる頻度が とっても少ないけど、
基本的な概念、っていうのがあるわけです。
つまりそのプロトコルの意味が分からんとプログラムの意味がさっぱり、
っていう。
そういうのを ぜーんぶ網羅しなければいけない時点で
ダウンローダをDelphiで作るという気力はかなり萎えてしまうものです。
>>699
???????
>>700
ようするにWolfy氏はすごいってことだよ・・・、たぶん。
>>699
リジュームの概念は昔どこかのHPで見たことあります
HTTP/1.1 とか鯖で対応してないと無理とかRange やヘッダうんぬん。。。

いちおうHPを巡回してDLまでできたのですが、Indyコンポ事体バグだらけで使えません(><;
多くは望みませんが404や503が検出でき、DLする容量が随時分かるようにしたいです(全部望んでるかも、、
>>699
    / ̄ ̄ ̄ ̄\     
   (  人_ヽ__ノ)     
    |ミ/  ー◎-◎-)    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   (6     (_ _) )  <  おい、出鱈目を言うんじゃない!
  _| ∴ ノ  3 ノ    \_____________
 (__/\_____ノ_____∩___
 / (__))     ))_|__|_E) ̄´
[]_ |  |  どれみ命ヽ
|[] |  |______)
 \_(___)三三三[□]三) 
  /(_)\:::::::::::::::::::::::/  
 |Sofmap|::::::::/:::::::/ 
 (_____);;;;;/;;;;;;;/   
     (___|)_|)
>>697
RFC読んで自分で実装
荒らすつもりはないんですけど、、

なんとかこの壁を乗り越えたい〜〜
ttp://server2047.virtualave.net/mettya/updetannV1_9b5.zip
デタラメといわれたのでソース&EXEうpしますた。
使ってるコンポは、
・Indy、TRegExp、TTaskIcon、TCRCList(Wofly氏)
どれもDelphianやネトからげとしますた。
いや、出鱈目は>>699に言ったんだけど・・・
書いてある内容が文章として意味を成していません。
>706
よく見たら 誤爆ですた、、
>>704
HTTP 1.1日本語版RFC今見たけど(鬱
脳内エラーが発生しました
try
 脳.loadFromFile('HTTP 1.1日本語版RFC');
except
 脳.Text := 'もーだめぽ';
end;
710708:02/07/28 03:33
脳 := DQN.Create;
try
 脳.loadFromFile('HTTP 1.1日本語版RFC');
showMessage(脳.text); // 出力:(not) Accept-Agent: ja ...逝ってよし
except
 脳.Text := 'もーだめぽ';
end;
711ななし:02/07/28 08:54
>>695

> できます。
> Application.Title := 'タイトル';

それ、固定リテラルですよね。
その方法は当然試してますが、それだと、(一例ですが)INIファイルやDBから読み込んだ
リテラルを設定することはできないと思いますが・・・。

それと、IDEのメニューでタイトルを設定した場合でもそのコードが自動生成されるよう
なので、「事実上、おなじ」(?)と書いたのですが・・・。

> ユニットによっては、usesしただけで処理が走るものもあり(initializationで)。
> 不要なユニットは削除するのか吉。

感謝。m(_ _)m
(時間があるときに、よく調べてみます)
>>711 何を言ってるか判らないが、
 試してみたらいいじゃない。
 それから、pro以上ならソース読め

procedure TForm1.Button1Click(Sender: TObject);
begin
Application.Title := (Sender as TComponent).Name+FormatDateTime('hh:mm:ss',now);
end;
ああ、 VBから移ってきたんだね。じゃ優しくしなくちゃ・・

ようるするに Application.Title = xx は SetWindowText( Application.窓ハンドル, PChar(xx)); と同等って事

>(1) FindWindowって、クラス名(第1 Arg)、Window Title(第2 Arg)のどちらか片方を
   指定すればよい(もちろん、両方指定してもよい?)と思うんですが、Delphiアプリ
   の場合、クラス名には何を指定すればよいのでしょう?

これは疑問の内容がよく判らない。 Delphiで作ったアプリのクラス名が知りたいの?

>>713
明らかにWindow Classのことだと思われ。
raiseのポップアップって抑制できる方法ってありますか?

>raise ******.Create(++++); 現在こんな感じ
>713-714
Application.Titleに設定するのと同じことをやるなら、クラスはTApplicationでいいんじゃない?
>>715
IDE の中でのデバッガのポップアップの抑制?
デバッガ - 言語例外 - 追加 - 抑制したい例外のクラス名
>>716
DelphiってWindow ClassもTApplicationになってるの?
勉強になった。
719713:02/07/28 12:28
うん 基本的にWinControlとかも含めてクラス名がそのまま WindowsClassの名前になる仕掛けみたい
 BUTTONとかもGetClassInfoしてサブクラス化してる様子
 だからフォームなんかは TForm1 とか作成した時の名前がそのままWindowClassの名前になるみたい

 ただ、自分のアプリの場合 FindWindowする必要はないので
 他人の作ったアプリだと思うんだけど・・・
>>719
なるほど。
フォームのScaled プロパティはどうしてますか。
Trueだと勝手にデザインが崩される気がするし、
Falseだと解像度やフォントサイズが違うパソコンだと
異常に大きさが変わってしまう。
皆さんの意見を聞かせてください。
香ばしい人がいますな。
723デフォルトの名無しさん:02/07/28 17:27
>raiseのポップアップ

 raiseしたいけど、誰もキャッチしてくれないと
エラーがポップアップするから嫌って事なら
EAbort 継承を利用するといい
メッセージも不要ならAbortを使えばいい

例:
raise EAbort.Create('メッセージ');

自作の構文処理とかでエラーとかの為に深いスタックから一挙に帰りたい
とかにはこれが重宝するよ。
>>723
?????????
>>724 なにが???なの?
>>702
>Indyコンポ事体バグだらけで使えません(><;
バグってなんですか?
http://sourceforge.net/tracker/?func=browse&group_id=41862&atid=431491

しかし>>702はIndyを使いこなせてないだけに100カノッサ
728教えてください:02/07/28 21:39
iniファイルにデータを保存してます。
任意のセクションを削除したいのですが、
どのように記述したら良いのでしょうか?
>>728
iniファイルに削除って概念はないよ。値を空にすることしかできない。
どうしてもファイルから消したかったら、自前でファイル操作して削除しる。
>>728
TIniFileを使ったことがありますか?
あるならヘルプ隅から隅まで読んだ?
EraseSection メソッドは,INI ファイルのセクション全体を削除します。

procedure EraseSection(const Section: String); override;

説明

EraseSection メソッドを呼び出すと,セクションとそのすべてのキー,
およびデータ値を INI ファイルから削除できます。Section は削除す
る INI ファイルのセクションを指定します。セクションが削除できない
場合には例外が発生します。
>>721
俺の場合、スプラッシュとか以外はScaled=Trueにしてる。
おおきいフォントにした場合とか、Anchorsを使っている場合は変になる場合が
あるけど、Alignで画面を調整すればいい感じだよ。
733728:02/07/29 01:16
>729,730,731 レスありがとうございます。

TIniFileを使用してread,writeなどは普通に動作するのですが、
>>731のEraseSectionを使ってみてもセクションが削除されません。
例外も発生しません。自前でファイル操作めんどい。と思って質問しました。
ちなみに、DeleteKeyを使用してもエントリが削除されません。
環境はWinXP,Del6(Pro)です。こんな風になってるの俺だけなのかな??
>>733
処理の最後にUpdateFileメソッドやってる?
それより、TMemIniFileのほうが、なにかといいよ。
735ななし:02/07/29 12:45
>>719

> ただ、自分のアプリの場合 FindWindowする必要はないので
> 他人の作ったアプリだと思うんだけど・・・

ふつうはそうなんですが、VBのTipsでよく出てくる、「二重起動の防止」を
やってる関係で、自アプリをFindWindowしてます。
(返値 <> 0 なら、そのWindowを最前面に表示し、後から起動した方を終了)

取りあえず、動くようになってはいるが・・・。

//昔漏れが作った多重起動防止用ユニット
unit SngPrcs;
interface
uses Windows;

  function IsSecondProcess(const UniqueString:String):Boolean;//二重起動チェック
  procedure ActivatePrevInst(MainFormClass:TClass);//先行プロセスのメインフォームをアクティブにする

implementation

function IsSecondProcess(const UniqueString:String):Boolean;
begin
  
  CreateMutex(NIL,False,pChar(UniqueString) );//みゅーテックスオブジェクトを作成してみる
  Result :=(GetLastError=ERROR_ALREADY_EXISTS);//ミューテックス作成エラーが起きた場合は二重起動とみなす
end;

procedure ActivatePrevInst(MainFormClass:TClass);
var
  Hwnd,HAppWnd:THandle;
begin
  Hwnd := FindWindow(pChar(String(MainFormClass.ClassName)), nil);
  if Bool(Hwnd) then
  begin
    SetForegroundWindow(Hwnd);//メインフォームをアクティブ化
    HAppWnd := GetWindowLong(Hwnd, GWL_HWNDPARENT);//アプリケーションハンドルを取得
    if HAppWnd <> 0 then Hwnd := HAppWnd;
    if IsIconic(Hwnd) then ShowWindow(Hwnd,SW_RESTORE);//アイコン状態なら元に戻す
  end;
end;
{==SAMPLE=======================================================
program Project1;
uses
 Forms,
 SngPrcs in 'SngPrcs.pas',
 wMain in 'wMain.pas' {Main};

const
  UNIQUEID='TEST APPLICATIONS ID';
begin
  if IsSecondProcess(UNIQUEID) then
  begin
    ActivatePrevInst(TMain);//←ここに指定するのはクラス型そのもを指定すること。
    Exit;
  end;
  Application.Initialize;
  Application.CreateForm(TMain, Main);
  Application.Run;
end.

==SAMPLE=======================================================}
>>FindWindowでは完全には防止出来ないそうだ
http://www.nifty.ne.jp/forum/fdelphi/faq/00022.htm
738ななし:02/07/29 14:09
>>736
私が試行錯誤して書いたのも、ほぼおなじような内容です。
(VBからのパクリですが・・・(^_^;)
二重起動を見つけるのはMutexで
二重起動を見つけたら DDE でメッセージを送るようにしてる

DDEでメッセージの送り方
http://pc3.2ch.net/test/read.cgi/tech/1009080085/38

DDEでメッセージの受信は
http://www.text2music.com/mine/delphi/tips/dde.htm
つまり TDdeServerConvをポトペタするだけ
740736:02/07/29 15:30
肝心なことを言うのを忘れていたYO!

この例で作ったアプリと同時にDelを使用すると、FindWindowはDelのメインウインドウを拾ってくるのです(w

まあ、漏れの場合、これを一つの会社に納めただけなので、特に気にせずこれで行った。
741ななし:02/07/29 16:17
>>740

> この例で作ったアプリと同時にDelを使用すると、FindWindowはDelのメインウインドウを拾ってくるのです

FindWindow の第1引数をnilで、第2引数をApplication.Titleにすればよいと思いますが?(^_^;

(「語るならもっと勉強しなさい」とお叱りを受けそうですが・・・)
742デフォルトの名無しさん:02/07/29 17:34
Canvas.TextOutだと、FontのSizeで文字の大きさが変わりますが、
横長の大きさの文字を描画するにはどうしたらよいでしょうか?
Win32API等でないでしょうか・・・
StretchBltで大きさを変えるのではなく、
文字を描画した時点で横長の文字を描画したいのですが・・・
できないでしょうか・・・
743デフォルトの名無しさん:02/07/29 17:59
既にあるユニットをActiveX化するにはどうすればいいのでしょう。
ブラウザで数値を入力し、それをDelphiに渡して、
Delphi内で計算した結果を、再びブラウザに返す、
というようなことをやりたいのです。
参考になりそうなURL、文献等、
どなたかご存知でしたらお力を貸してください。
よろしくお願いします。
744デフォルトの名無しさん:02/07/29 18:08
始めまして。なんか最近面白いサイトが出来たみたいですよ。
キャラクター(笑)とかがタダで持てたり、着替えさしたり・・・・
でも今だけらしいですよ入会無料なのって
詳しくは下記UELをクリックして、確かめて!!
http://www.e-mansion.co.jp/co/ac.html
745デルファイの名無しさん:02/07/29 18:19
デフォルト以外のプロジェクトソースを持つプロジェクトを作れるようにしようと
OpenToolsAPIに挑戦しているのですが、
IOTAProjectCreator.NewProjectSourceでnil以外(吐きたいソースを保持したIOTAFile実装)を返すと
ルールが指定されていない旨のエラーが出ます。
これは何ですか?それと、回避方法があれば、教えていただけないでしょうか。
>>742
APIだけでフォントハンドルを作る時のLOGFONT構造体には、
VCLが対応して無いメンバーが幾つかあって、lfWidthというのもあります。
フォントハンドルを作成し、SelectObjectなりしてやれば、可能な筈。
>>742
文字を回転して表示する例ですが
http://www.borland.co.jp/qanda/delphi/d0009380.html
幅を変えたいならこの例で >>746 さんの言う通り lfWidth


>>743
 それはActiveXというより、CGI化したいのではないでしょうか?
748742:02/07/29 22:22
>>746>>747
ありがとうございます。無事できました。
わがままですが、文字の横幅を大きくしたり、回転したりすると、アンチエイリアスがかからなくなりますね。
かかるようにできないでしょうか?不可能ですか?
var
i: Int64;

i := 1*1024*1024*1024;

みたいに書くとオーバーフローって怒られるんですが、何故なんでしょう?
>>743
JavaScript でいいじゃん。
751743:02/07/30 09:10
>>747 >>750
出来ることならそうしてしまいたいんですが、
仕事の都合上どうしてもActiveXにしたいんです。
とはいっても、Delphi自体、触るのは今日で2日目。
前途多難です。
どなたかお力を貸してください。お願いします。
>>743
いたるところで同じ質問をしてますね。Delphi-gig の掲示板にまで
書き込みがあるのは笑えました。
Delphi-ML で回答がついています。そちらをお読みください。
>>749 それでオーバフローで叱られないと思うが・・・

たぶんもう一つ掛算を書き忘れたのだとして、 1000000*1000000 で説明します。

どうしてオーバフローになるかというと、即値は32bitの整数の範囲なら32bitとして解釈されます。
それで、1000000*1000000 は32bit同士の掛算としてコンパイル時に掛算してしまおうとして
32bitの範囲に入らないよ=オーバーフローになるよとエラーが出るわけです。
Delphiのコンパイラは、結果をint64に入れるのだから型はint64だろうなんて推測はしません

回避するには64bitの定数である事をどこかで教えてやればいいのです
 たとえば、 
Int64(1000000)*1000000 とか 片方だけでもint64だと教えてやります

なお、 Int64(1)*1000000*1000000  はOKだけど
1000000*1000000*Int64(1) は駄目です
>>749
begin
i := 1 * 1024 * 1024 * 1024;
Memo1.Lines.Add(IntToStr(i));
end;

で起きませんでしたが。別のところが悪さしてるんでない?
755デフォルトの名無しさん:02/07/30 09:54
>>749
>>753
VBではFAQですね・・・。
756743:02/07/30 09:56
>>752
ありがとうございます。
現在そのMLで教えていただいた個所をプリントアウト中です。
(ヘルプの[COM アプリケーションの開発]-[ActiveX コントロールの作成])
VC++で用意していたのに、客先からいきなりDelphiでやってと言われ、
そんなん知らねー、今更言うなー、やったことねーと、
ほとほと困り、だめもとで色んなところに書き込んでいました。
とりあえずこのヘルプを読んで、また出直してきます。
>>756
客をだませるのなら、ActiveX コントロールではなく ActiveX フォームで
アプリ丸ごと ActiveX にしてしまう。という手もあるぞ。
>客先からいきなりDelphiでやってと言われ
へー、客先からDelphiを指定されたという話はあまり聞かないね
その客が奇特なのかこれからそういうケースが増えるのか
759デフォルトの名無しさん:02/07/30 11:43
つかぬ事をお伺いしますが、Delphi6のエディタを
上下分割又は左右分割させたいの
ですが、ひょっとして出来ないのでしょうか?

別の編集ウインドウを開くでなんとなく似たような事を
していますが便利悪いです。なんとかなりませんか?

キーマクロもあるし、行マークもあるしそこそこ使える
エディタなのに残念。
>>759
できません。
しかし同一のファイルに対して複数のエディタウィンドウを開くことができます。
もちろん片方を編集すると別のウィンドウの内容も更新されます。

エディタ自体タブ付ですから、プロジェクト全体を見るエディタウィンドウと
ここのファイルを眺めるウィンドウを広げておけば十分でしょう。
>>759
分割なんてできなくていいだろ。
そんなことより、
(sss(ssss) と入力して次の ")"を入力した時に
対応する 最初の"("を協調表示してくれた方が
随分便利
>>760-761

外部エディタ使え
>>760-761
emacs使い?
>>761
JBuilderあたり(C++Builderかな)で導入されてるみたい
将来的にDelphiにもつくんじゃないの。

俺はいらんが。
レコード/クラスビルダがホスイ・・・一方通行でええから。
>>765 それってどんなの?
767ななし:02/07/30 14:41
コードエディタの80文字目に表示されるタテ線を移動できませんか?
>>767
エディタオプションの[右マージンの位置]
769745:02/07/30 15:14
.....イジイジ
>>769
弊社のサポート窓口までご連絡下さい。
 ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ∧_∧ ニヤニヤ
 ( ・∀・)
 (    )  1インシデント\30,000ダカラナ
 | 某|  
 (__)_)
ウリウリ ( ´∀`)σ)Д`) >>745
772ななし:02/07/30 16:48
>>768
感謝。m(_ _)m
773760:02/07/30 22:54
>>763 当たりです
OpenToolsAPIはいいかげんソースのコメントだけじゃなくて
ちゃんとしたドキュメントつけて欲しい。いやマジで。
エディトボックスから値を取得する場合、例えば、数字以外はエラーにするとか、半角カナはエラーにするとかの方法はないの?

更新後か入力後に、いちいち検査するしかないのかな。
>>775
> 更新後か入力後に、いちいち検査するしかないのかな。

最もスマートな方法だと思いますが。
>>775
そもそもその入力文字をキープレスイベントで受け付けなく
すればいいんだよ。
ただ問題は実数や符号付の場合。-123はいいけど123-,12-3,-123-
とか12.3, .23.とかは入力後に検査するしかねーわな。
桁とか決まってればマスクエディットが簡単でいい。
778デフォルトの名無しさん:02/07/31 00:37
OpenToolsAPIのドキュメントって何処にあるのでしょうか?
779774 ◆MOg20d0E :02/07/31 00:41
($DELPHI)\source\Toolspai
これが全て。

(registerComponentなど僅かながらヘルプに解説されている
ものもあるが・・・)
>>775
>エディトボックスから値を取得する場合、例えば、数字以外はエラーにするとか、半角カナはエラーにするとかの方法はないの?

数が多いようなら、そういうコンポーネントを作ってしまうと楽。
DelphianWorldから探してきてもいいな。ソースつきの奴
781デフォルトの名無しさん:02/07/31 00:56
PCのIPを取得するにはどうしたらよいですか?
C++Builder6には付いてきているという噂も…→OpenToolsAPIのヘルプ

…結局誰も使ったことが無いようですね。
新規プロジェクトで毎回やっている作業を手抜きしたいってだけで\30,000は絶対嫌だ(w
( リポジトリだと、単なるフォルダコピーで、ファイル名を変えることすらできませんし )
783774 ◆MOg20d0E :02/07/31 00:58
後はCode Centralに行ってソース付のエキスパートを
ダウンロードして見てみるのが一番手っ取り早いかなあ。
>>782
けど、ToolsAPI 使えるようになると生産性がはるかにあがるよ。
他人が使えない IDE にしてしまって、とっても困ったけど。
みなさんOpenToolsAPIでどんなことやってるんですか?
Experts使ってるんで間接的に恩恵受けていることはわかりますが・・・
>Experts
>GExperts
エディタカスタマイズとか
定型コメント、ソースの入力とか
788C++使い:02/07/31 09:52
Delphiはclassと名前空間に相当するものはありますか?
あるならやってみようかな。
class は 多重継承は出来ませんがあります
 コンポーネントもクラスなので、C+;が使えるなら
 自分でコンポーネントを作れるようにすぐになるでしょう
 コンポーネントが作れると、結構楽しいです。

 多重継承出来ない代わりに、interface型があります。
 interface型はCOMと非常に相性が良いので、COMサーバ・クライアントは
 C++より簡単に書けます(理屈が判っていればより高度に、判ってなくても
 それなりに)


名前空間は C++と違って unitが名前空間を提供します
 C++と同じように unit名.関数名 というように識別出来ます

 ただし、unit名はプロジェクトで唯一でなければいけません
 またコンポーネント名もIDEに登録する場合名前空間の仕掛けを利用出来ません
 コンパイル速度の維持の為には仕方ないのでしょう
 まあ中途半端という言い方も出来ますが、バランスが良いという言い方も
 出来ます。 
>>788
classも名前空間(ユニット)も両方あるよ。
ただし名前空間は今となってはかなり変。
・ファイル名=名前空間になってしまう(1階層のみ)
・usesは#includeとusingを兼ねたような機能をもつ(名前空間の修飾の省略の禁止が不可能)
>>788
こんなソース読んで判る?
http://www.geocities.co.jp/SiliconValley-Oakland/8522/data/ugikoscr.txt

判らないならあきらめな、俺もあきらめた
C++からならこれが役に立つと思う

CとDelphiの対比データ
http://hp.vector.co.jp/authors/VA014436/prg_memo/delphi/c_d.html
793デフォルトの名無しさん:02/07/31 13:07
複数のフォームを開いているときに、メインフォームを最小化するとすべてのフォームが
最小化されてしまいます。
また、子フォームをアクティブにすると、メインフォームも前面に出てきてしまいます。
僕の理想は、IEみたいな、ひとつのプロセスだけど、各ウィンドウが独立しているものです。
こういったことは、どのようにすればできるのでしょうか。
794無責任だが:02/07/31 13:49
>>793 pro以上を持ってるなら Forms.pas の

procedure TCustomForm.WMSysCommand(var Message: TWMSysCommand);

を参照
 つまり最小化=SC_MINIMIZEが送られた来た時に
   Application.MainForm が自分なら、 Application の最小化を行っています

この動作を迂回すればよいでしょう。迂回方法はお好きな方法で
795でもどり初心者 ◆KcG2I.hg :02/07/31 15:29
抽象的な質問で申し訳ないですが、
DelphiになれててVBAになれて無い人が
Delphi6Pesonalでデータベースアプリ作るのと
AccessVBAでデータベースアプリ作るのどっちが近道と思いますか?

簡単な会社の給与計算や顧客管理をしたいなぁと思ってるんですが…。
ちなみにリレーショナルはあんまり使わなくてもいい程度のDB設計です。
(顧客マスター←売上データ程度です)

AccessのVBAを勉強しようと思うんですが、メインに使ってるのがDelphiで、
言語を二つ使いこなすには頭に余裕無くて…。
クエリーとか簡単なSQLなら、むしりとった衣笠で書けるのですが。

以前はN88、DOS-N88、Quick、VB5とベーシックばかり使ってたんですが、
Delphi4を使ってからはDelphiマンセーになってしまって脳に拒否反応が…。

Delphi6Pro買うのが一番速そうだけど、零細だから予算おりなさそう(涙)

#ちなみに印刷系の会社なので、開発はあくまでおまけ
>>795
誤字ハケーン
×Delphi6Pesonal
○Delphi6Personal
>>795
一番早いのは市販パッケージを買うこと
給与計算は年末調整とかいろいろややこしいから買った方が安上がり
顧客管理は件数が少ないのならCsvとかテキストでも十分間に合う
零細なら取引先も多くないカナ?
AccessならVBA使うこともない
おもしろいのはDelphiで自分で作る方
残念だけど、それは AccessVBAでしょう。
もちろん D6Personalでも可な方法はあるし、そっちが速い人もいるだろうけど
そういう人はそういう質問はしないでしょう
D6Proを素直に買った方がいいと思うけどね

それと、personalを会社の仕事に使うのはどうかなあ

799ななし:02/07/31 16:00
>>798

Personalでは、DBの機能(ADO等)は使用できないはず。
>>795
逝ってよし
Personalで作成したアプリは業務で使用出来ません。
弊社のサイトにある改訂されたライセンス文書を
読みましょう。
 ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ∧_∧
 ( ・∀・)
 (    )  ホウムカンケイノ ケイヒウワノセシタ
 | 某|  トクベツカカクノProfessionalカワセルゾ
 (__)_)
すばやいレスども。

ヤパーリAccessで作るのが順当ですか…。
もうちょい修行してみます。

D6per+CSVで強引に作ってしまうってのも
魅力的なんですが(w

あと、Personalのライセンス問題ですが、
去年の8月にサポートに直接メールして聞きました。

転載しちゃいます。

--------自分がボーランドに送ったメール
貴社のサイトに「Delphi 6 Personalは商用・業務目的のアプリケーショ
ン開発にはご利用いただけません」とかかれていますが、Delphi 6
Personalで作成したプログラムをインターネット上で無償で公開するの
はOKなんでしょうか?
また、インターネットでの公開がOKの場合そのプログラムを業務に利
用するのはOKなんでしょうか?

--------ボーランドからの返事
Delphi 6 Personal で開発したアプリケーションによって報酬を得るよう
な場合には使用できません。フリーソフトの開発は可能ですが、シェア
ウェアの開発はできません。開発したアプリケーションで、その開発自体
で報酬を得ることが無い場合には、開発したアプリケーションを社内業務
でご使用いただけます。
>>801
実はライセンスが改訂されているんだな。
 ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ∧_∧ ニヤニヤ
 ( ・∀・)
 (    )  
 | 某|  イチバンシタノ文ナ
 (__)_)

本使用許諾契約の条項に従うことを条件として、お客様は本使用許諾契約に基づき本製品を使用し、個人
使用のみを目的とした著作物を作成する権利を行使することができます。お客様は、本製品または著作物
を、商用、業務用、政府や企業での使用を目的として(以下「商用目的」)、使用することはできません。
本契約の他の条項に従うことを条件として、お客様はご自身の作成した著作物を他人に配布することがで
きますが、直接、間接を問わず、配布や著作物の使用に対する報酬を受け取ることはできません。また、
お客様が他人に配布した著作物は、商用目的で使用してはなりません。
>D6per+CSVで強引に作ってしまうってのも

もし、それをフリーソフトとして出すような事を考えてるならPQCompoを使うといい
 ttp://www.est.hi-ho.ne.jp/takeshi_kanno/

 ただし、DBGridとか便利機能は一切なしだから
>>803
そのページまだぱっと見ただけですが、
すごく役立ちそうです。サンクス。

>>802
社内で完結するテキストの処理とか
さっき自分が話題に出した顧客管理とかは
ボーランドが言う所の商用目的になるのか
ならないのかが論点と思います。

で、6のPersonalが出たての時、自分も
「お客様は、本製品または著作物 を、商用、
業務用、政府や企業での使用を目的として
(以下「商用目的」)、使用することはできま
せん。 」
の文章の解釈が気になって、ボーランドに
確認を取りました。(>>801のメール)
おそらく、その部分の規約は大幅改定は
無いと思いますが。

つーわけで、自分はボーランドからのメー
ル(>>801)を根拠に、売り物にしないプロ
グラムならOKと解釈しています。

#えーと、Personalのライセンスの範囲の問
#題ってよく話題にあがる?
#もいっかいボーランドにメールしてみよかな
805743:02/07/31 17:42
743=756です。
ヘルプ見てもよくわからずに泣きながら戻ってきました。

>>757
> ActiveX フォームでアプリ丸ごと ActiveX にしてしまう。
ヒントありがとうございます。それってどうやるんですか?
まだDelphi3日目で、何が何やらさっぱりです。

>>758
> その客が奇特なのかこれからそういうケースが増えるのか
多分、前者です。
ただ、今後こういうケースが増えても大丈夫なように
これをいい機会にDelphi習得したいです。自信ないけど。

ていうか、そもそも既存のユニットから
ActiveXコントロールって作れるものなんですか。
何も知らず、何もわからないまま手探りでやっていて、
急に不安になってきました…。
>>805 既存のユニットって何?
807743:02/07/31 18:10
>>806
ええと、その「既存のユニット」の内容ですが、
通信系の処理をやるためにTFormでクラスを作ってます。
これをActiveX化って出来るんですか?
>>807
 TForm継承なら、
IDEにコンポーネントとして登録(つまり Register 手続きを追加)
してから ActiveXコントロールにすれば
TForm継承だと出来ないんじゃない?よく知らないけど
810Delphi3日目(743):02/07/31 18:25
>>808
タメになりそうなレス、ありがとうございます!!
でも、実はどうやったらいいのかわかりません。
もしよろしければ、もうすこし手順を詳しく教えていただけないでしょうか。
よろしくお願いします。
811Delphi3日目(743):02/07/31 18:47
>>809
うわ、ほんとですか。どうしよー。
そこんとこ詳しく知ってる人、どなたかいませんか。
812808:02/07/31 18:56
やってみた。
1、既存のフォームの名前を適当につける Form1とかのままだと名前が喧嘩するみたい
  例としてフォーム名をTestForm  クラス名をTTestFormになったとする
2、var TestForm:TTestFormのような部分を消去する
3、 procedure Register ; を設計部に追加
4、実装部に
procedure Register;
begin
RegisterComponents('Samples', [TTestForm]);
end;
5、コンポーネントのインストールで上記フォームをインストールする
6、ActiveXウイザードでVCLクラス名を TTestFormにする
    後は適当に
7、試験する。
    実行->ActiveXサーバの登録して試験するとか サーバー用意済なら
    プロジェクト->Web配布で試験するとか

結果: マズイ

 動くけど、やっぱりフォームとして動く。 意味は試してみれば判る。

>>525 のように 無理やり WS_CHILDすればいけるかも。 自分で試してみて
813Delphi3日目(743):02/07/31 19:08
>>812
808さん、ありがとう。めっちゃいい人やー。助かります。
まだ試していないので、また試してから戻ってきます。
本当にありがとう。
どうでも良さそうなことかもしれぬが、
Pro以上使っているヤシで、全部のコンポーネント登録したまま使っているヤシいる?
815Delphi3日目(743):02/07/31 19:48
>>812
試してきました。ばっちりです。ありがとうございました。
おっしゃるようにWS_CHILDすると、フォームとして動かなくなりました。
本当にありがとう。さあ、今からこれを仕事に活かさなくっちゃ。
816808:02/07/31 20:13
>>815
 3日目で あのヒントでそこまで出来るんだから結構やるね。
それなら楽勝だよ
817Delphi3日目(743):02/07/31 20:17
すいません、また質問させてください。
今やってる仕事で、Delphiで作ったActiveXと、
Delphiで作った別のプログラムとでやりとりをさせたいんですが、
ActiveXから、別のプログラム中の
TFormで出来た関数を呼び出したい時はどうすればいいんでしょう。
どなたかご存知でしたらお力を貸してください。お願いします。
818808:02/07/31 20:21
・・・なんじゃそりゃ?

別のプログラムっていうのは、別のプロセスでって事?
TFormで出来た関数ってメソッドの事?
>>817 初めて3日目で、妙に抽象的に書くと他人には何のことやらワケワカです

もっと具体的にやりたい事を書いてみたら?

既に 単体のアプリとして通信(ってTCP/IP)出来てるアプリがあって、それを
ActiveXにしたいんだよね?
>>814
よく使うやつと、自作のコンポ集以外は「その他」ってページを作って集めてる。
使いそうにないコンポを消してしまうとひょっと使う事があった時に便利悪いから。
>>794
ありがとうございます。
がmmmばってみます。
>>817
メソッドポインタを渡してコールバックさせるか、
アプリケーションにオートメーションオブジェクトを仕込む。
DLL化した方が楽だろ。
DLLで解決するならDelphiのソースあるなら usesした方が楽だろうに
825Delphi4日目(743):02/08/01 11:33
>>816
808さんがわかりやすく説明してくださったおかげです。
ありがとうございました。

>>818, >>819
すいません、正直私自身よくわからないままやっているので
あいまいな言い方になってしまいました。

今やっている仕事は、とある機械を操作するためのプログラムです。
操作はブラウザ上で行うため、作ったものはActiveX化します。
機械はDelphiで制御されているので
(その機械を作った人の得意な言語がDelphiだったから)
操作側のプログラム(ActiveX)とその機械とのやりとりは
全部Delphiでやってくれ、みたいな感じの仕事です。
そして、新人の私は調べ物+サンプル作りが主な仕事です。
プロジェクトの全体像を知ることのないまま。

ActiveXとその機械とで情報や命令のやりとりをしたいみたい。
動けーとか、止まれーとか。
これをやってくれーとかいう命令や、その結果を受け取ったりとか。
そして、そうするにはActiveXで、
機械の方の関数(メソッド?)を呼び出す必要があるらしく、
でもそれってどうやるのか誰もわからないので困ってます。

こんな説明じゃわかんないですよね。うーん。
これ調べてって言った先輩が午前中は休みなので、
午後に詳しく聞いてから、また戻ってきます…。
>>825
 操作をブラウザからする為に ActiveX化したってのが一番よく判らん
 ブラウザ上のActiveXなら、自動的に他のパソコンと通信作出来るとでも勘違いしてるんじゃないか?
えとさ、
会社で使うなら、Personal は使ってはいけません。
Enterprise Trial は使用期限があります。

ttp://www.delphigig.com/board/aspBoardDetail.asp?Id=229

いたるところで聞きまくっているけど、いいかげんにしろ。
DCOMならActiveXを遠隔操作出来るからあたりで勘違いしてるんだろな

機械の遠隔操作ならソケット直接で処理した方が簡単だろう
取りあえず、COMとかOLEとかについて勉強しなされ。
ついでに CORBA も・・・ だけど ソケット直が結局楽だと思うけどね
832ななし:02/08/01 14:15
>>831
Simple Object Access Protocol
でしたっけ?

「特殊なお風呂屋さん」を連想してしまいました・・・。(鬱
Delphiにダイアグラムってのがありますけど、あれ使ってる人いる?
これって、単にドキュメント作成って言うか、コメントを図形式で書けるってなだけなんでしょ?

こんなの付けるより、雛型を設定可能な仕様書の方が使えそうだと思うけど、
ついでに、簡単にhtml吐けるようにするとかしてくれたらいいのになぁ、
それとも、OpenToolsAPIを詳しく知ってるとアドオン的なプログラムができるのだろうか・・・。
>雛型を設定可能な仕様書
いみふめーん
>>834
ドキュメントの形式を統一するって意味です。
>ドキュメントの形式を統一
なぜ統一する必要があるのかふめーん
統一はいいことだよ
南北統一マンセーってなもんだ
おまえら、ちゃかすんじゃねーよ!
統一教会もお忘れなくってなもんだ
UMLに統一しなさい。
仕様書がないとプログラム書けないようじゃ素人だね。
要求仕様というか目的を固めないと、ゴールが見えないよ・・・
って我ながら意味ふめ〜ん。

で、仕様書だけど!Doc, D/Scribe, DocManなんかがありまふ。
どれもリバースエンジニアリングだけどね。
ttp://www.vector.co.jp/vpack/filearea/win/prog/delphi/index.html
842デフォルトの名無しさん:02/08/01 18:15
こんにちは
質問でし!

非表示のフォームBを表示中のフォームAからメソッドshowで表示させます
フォームBではイベントshow発生時に

FormB.Position := poScreenCenter;

と記述してフォームBを画面の中央に表示させようとしています
フォームB設計時のPositionプロパティの値もpoScreenCenterです

一度目の表示は問題ないのですが、フォームBを中央から別の場所に
マウスで移動させて、Hideにして、再度フォームAからshowさせると、
上記記述の部分でエラーが発生してしまいます

単純に表示するときは絶対画面の真中なの!
ということがしたいのですが。。。
ああ、JavaDocみたいなもの?
かなり意味ふめーんだよ >833
>>842
FormA の FormB.Show の次の行に
中央寄せするコードかけば?
845842:02/08/01 18:26
>>844
うわぁぁぁい
ありがとおございます
できました
多謝でし!感謝しるでし!

でも どうしてOnShow内ぢゃできないんだろ。。。
846Delphi4日目(743):02/08/01 18:49
>>822
ありがとうございます。多分、それです。
会社の先輩にここ見てもらったら、そのコールバックが
一番やりたいことに近いみたいだって言ってました。

ただ、Delphiで作成したもの同士でのコールバック関数を使った例が、
探してもなかなか見つからない上に、
見つかってもAPPとDLL間のやりとりの例だったりしました。
(ttp://www2.biglobe.ne.jp/~sakai/callback.htm)
DLLは作成したくないので、
コールバックを頼むのはDLLではなく、EXEにしたいんですが、
どうすればいいのかわかりません。

参考になりそうな情報(文献、URL等)を
もしご存知の方がいらっしゃるなら、
どうか助けていただけないでしょうか。
>>841
C++やJavaのDoxygenみたいに参照関係やクラス関係を出力できるフリーのソフト無いのかね。
>>846
Win32の下では そのExportされた関数を外部から呼び出しても
別のスレッド・メモリ空間で実行されるだけです。

ブラウザ上で実行されるActiveXはブラウザ上のプロセスとなっています。
ですからプロセス間通信を使わなければいけません。

プロセス間通信には、
1、ファイル マッピング(共有メモリ方式)
2、名前なし (匿名) パイプ
3、名前付きパイプ (Win9xでは使えない)
4、メールスロット
5、DDE
6、OLE
7、RPC
などがあります

この中で そのコールバックのように別のプロセスの関数を呼び出すのに一番近いのはRPCです
RPCであれば別のパソコン上で動くプロセスとも通信出来ます(というかそれが目的ですが)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/rpc/pr-func1_6v03.asp
849デフォルトの名無しさん:02/08/01 23:58
ここのサンプルを実行させてソースコードを
調べてみれば?
$(Delphi)\Demos\Activex\Oleauto\Autoserv
>814
Ent版つかってるけどコンポーネントはそのままだよ.
もちろん良く使う奴を左に寄せてはいるけど.


851デフォルトの名無しさん:02/08/02 00:46
WAVEファイルを、EXEファイル内に埋め込めますか?
もしできるなら、そのときのWAVE参照方法を教えてください(sndPlaySoundとか)
852デフォルトの名無しさん:02/08/02 00:50
>>851
リソース。
後は検索。
853デフォルトの名無しさん:02/08/02 11:35
DelphiってCみたいにデフォルト引数指定できないの??
こんな感じにしたいのだが・・・

void hoge(String str = Null); ← C
procedure hoge(str:String); ← Delphi
procedure hoge(str:String = '');
855デフォルトの名無しさん:02/08/02 12:35
>>854
できたー ありがと。
856しん:02/08/02 12:46
チャットで他の全員落とすにはどうすればいいんでしょうか?
しん先生 が素で書けば皆ひいていつも落ちてますよ・・・てなレスをよこせとおっしゃるのですか? しん先生
858IDEの小枝:02/08/02 13:47
MLの「IDEの小技」に因んで、
こっちでは「IDEの小枝」をやろうぜ!
MLに負けない奴をどーぞ
>850
はいはい。次の質問どうぞ。
860IDEの小技:02/08/02 13:49
>>858 んじゃま1つ

[Ctl]+[SPACE] で自動補完が任意にだせる
(´-`).。oO(常識だろ、それ‥‥)
862桂小枝:02/08/02 13:56
>>860
小枝だろ。

interface部とimplementation部間の移動は、
[Ctrl]+[SHIFT]+[↓]
[Ctrl]+[SHIFT]+[↑]で移動で可能
863860:02/08/02 13:57
>>861 やぱし常識か
>854
ちょっと賢くなった。
コード補完。
普通のソースコードの部分じゃなくて、クラス定義の内側( = class() から end までの部分)
で Ctrl-Space を押すと親クラスから継承したメソッドが表示される。

で、Delphi6 からはマウスで複数選択できる。ちゃんと Public/Protect を認識して
分けてくれるし。
866デフォルトの名無しさん:02/08/02 14:25
>>865
をぉすばらしい!
IDEの小枝は某 ML には転載しないでください
よろしく。
連中(の一部)は 2ch をよく思っていないので、こんなネタが存在すると
気づくと、また荒らしにきます。
え?MLの大半はここもかねてると思うんだけど?
http://www.borland.co.jp/delphi/devsupport/d6issues.html
>Delphi 6 の動作が Windows XP 上で不安定になる場合、
Delphi 6 を「互換モード」で実行してください。
互換モードを設定するためには、まず、エクスプローラーで
Delphi 6 をインストールしたディレクトリの bin\delphi32.exe
(例: C:\Program Files\Borland\Delphi6\Bin\delphi32.exe)をマウスで右クリックし、
ポップアップメニューから[プロパティ(R)]を選んで、プロパティ設定ダイアログを呼び出します。
次に、[互換性]のタブをクリックして[互換モードでこのプログラムを実行する]をチェックして、適当なOSを選択してください。
※Delphi 6 は、Windows XP 上での包括的な動作検証は行なわれておりません。ご了承ください。
870Delphi好きッ ◆0YAPhEjk :02/08/02 16:20
他システム上で動作するDLLを作成し、そのDLL内でParadoxデータベースを利用して
います。
で、バックアップ機能を付加しようと思い、単にParadoxのファイル(dbファイルそ
の他)と、ホストプログラムが利用するデータをコピーしました。(copyfileを使用)
そのコピーデータはきちんと取れたのです。ところが、復元機能を付加して、バック
アップフォルダからファイルをコピーしたのですけど、ファイルのコピーはされてい
るのに、データベースのレコードが更新されていません。(旧データが残っている)
何故でしょうか。
一応、復元部分は以下のような処理を行っております。

// データベースを一旦閉じます。
DBModule.MainDataBase.Close;

try
 // ホストプログラムデータをコピーします。
 i:=findfirst(BackupFolder+'Dat\*.dat',faAnyFile,sr);
 while i=0 do begin
  copyfile(pchar(BackupFolder+'Dat\'+sr.Name),pchar(DataSystem.DatFolder+sr.Name),false);
  i:=findnext(sr);
 end;
 findclose(sr);

 // データベースファイルをコピーします。
 i:=findfirst(BackupFolder+'DataBase\*.*',faAnyFile,sr);
 while i=0 do begin
  copyfile(pchar(BackupFolder+'DataBase\'+sr.Name),
       pchar(DataSystem.DBFolder+sr.Name), false);
  i:=findnext(sr);
 end;
 findclose(sr);

この後、ホストプログラムはシャットダウンされます。(そうでないと、ホストデー
タの更新が効かないので)
もしかして、キャッシュが残ったりしているのかなぁとか思っているのですが。何か
原因等考えられましたらお願いします。
871デフォルトの名無しさん:02/08/02 16:50
var a, b: array of Byte;
SetLength(a, size);
b := a;
SetLength(a, newSize);

var c, d: PByteArray;
GetMem(c, size);
d := c;
ReallocMem(c, newSize);

ここで、「a = b」と「c = d」はそれぞれ必ず true を返しますか?
872Delphi好きッ ◆0YAPhEjk :02/08/02 17:13
>>871
そうですなぁ。監視式を利用して、
pointer(a)とpointer(b)
を見られては如何でしょうか。
873デフォルトの名無しさん:02/08/02 17:26
WindowsXPからLinux上のMySQLに接続したいのですが、いまいちやり方がわかりません。
myODBCをインストールしてコンソールからmySQLに接続することはできました。
SQLConnectionを使用して接続するのだろう、とは思うのですがうまくいかないのです。
dllの起動に失敗しましたと警告されます。
何かヒントをいただけると幸いです。よろしくお願いします。
874デフォルトの名無しさん:02/08/02 18:02
ハッシュ(連想配列)ってDelphiで使えるの?
もし、使えるならどうやって使うの?
875873:02/08/02 18:03
単純にそのdllがsystem32に無いだけでした…トホホ
>>874
Stringsのサブクラス
ヘルプを読むの
877874:02/08/02 18:13
ちなみにDelphi5です・・・
TStringHashやTBuckutList,TObjectBucketListは無いです・・・
TStringListでも使えますよ。
いやなら自分で実装するとか。
アクションゲームを作ろうと思うのですが、ちょっと困ったことが。。。
例えば、→が押されたら■(label)のleftプロパティをプラスしていくということがしたいのですが、
ウィンドウがかなりちらついてしまいます。どうすればいいんですか?
Label1.DoubleBuffered := True
しかしWinDiff知らない厨房がいたのには驚いたね。
奴らいったい今までどうやって開発やってたのか
小一時間問い詰めたい気分で一杯です。
882デフォルトの名無しさん:02/08/02 18:56
PS2のかまいたちの夜2(DVD)のFAD形式のバイナルファイルを解析して
文章を見ることは出来るのですが画像が見ることが出来ません。
どなたかわかる人いますか?今、大変困っています。
http://game.2ch.net/test/read.cgi/gameover/1028142800/
↑の人たちもよくわからないみたいで。・。。
>>873
BDEつかってODBC経由せつぞくですな。
885884:02/08/02 20:37
途中で送信してしまったよ。
MySQLより PostgreSQL+PQCompoの方がいいと書きたかった。
Microsoft Office XP Web Service Toolkit 2.0をインストールするとDelphiで
作ったWebサービスが動かなくなってしまったよ。
ブラウザ上でWSDLを見ようとしたら、

「エラー : この名前に文字 ':' を含むことはできません: -->:<--n1/EOleException」

と表示されますた。

どうもMSXMLかMSSOAPのバージョンが上がってしまうのが原因らしいが、ネームス
ペース修飾の":"が使えないってのはXMLのパーサとして完全に失格。
MS逝ってよし。
image1に"a.bmp"を読み込んでそれから1秒後に"b.bmp"にしたいんですけど、
どうすればできるんでしょうか?
888887:02/08/02 21:03
あげときます
889889:02/08/02 21:13
procedure TForm1.Button1Click(Sender: TObject);
begin
 Image1.Picture.LoadFromFile('c:\a.bmp');
 Sleep(1000);
 Image1.Picture.SaveToFile('c:\a.bmp');
end;

890889:02/08/02 21:14
>>889訂正
 Image1.Picture.SaveToFile('c:\b.bmp');
>>890
それだと 'c:\a.bmp' が残るんじゃないの。
892889:02/08/02 21:51
>>891
残っちゃいけないなんて書いてないだろ!
アニメーションさせたいってことじゃないの?
894889:02/08/02 22:20
>>893
うっぜええええええええええええええええええええええええ
アニメーションのアの字も書いてないだろ!!!!!!!
分かった!分かったよ!!!!
887=891=893なんだろ?
>>894
はいはい、ageるな。
>>894
プッ
>892
procedure TForm1.Button1Click(Sender: TObject);
begin
 Image1.Picture.LoadFromFile('c:\a.bmp');
 Sleep(1000);
 Image1.Picture.LoadFromFile('c:\b.bmp');
end;

ってことじゃないの?
まあ、おまえら気持ちはわかるが
低脳厨房はぐっと我慢して放置してくれ。逆恨みして荒らされたらたまらん。
899Del初心者厨:02/08/02 23:16
質問です。
文字を表示して、一定時間(5秒とか)ウェイトを持たせて
一定時間たったら次の文字を表示とかはできるのでしょうか?
ちなみに、ウェイト中は操作が一切できないようにしたいです。
>>899
(´-`)。o ○ (「出来る」「出来ない」ってレスもらってウレシイか?)
出来ます。
>899
できる。
で、どこに表示したいんだ?
903Del初心者厨:02/08/02 23:20
>900
いや...言葉不足でした。どうすればできるのか教えてください。
904Del初心者厨:02/08/02 23:21
>902
ラベルに表示したいです。
>903

Label1.Caption := 'A';
Sleep(5000);
Label1.Caption := Label1.Caption + 'B';
906デフォルトの名無しさん:02/08/02 23:23
>>905
そーゆーことかよッ!?(by三村)
907905:02/08/02 23:24
>906
え。違うの?
オレハナニヲマチガエタンダラウ...
908Del初心者厨:02/08/02 23:29
>905
ホント厨で申し訳ないんですけど、その命令はどこに入れればいいんですか?
FormCreateに入れてデバックすると5秒後に起動されるんです・・
909sage:02/08/02 23:33
(´-`)。o ○ (厨というか…)
910905:02/08/02 23:33
>908
それはいつ実行したいのかな?
911Del初心者厨:02/08/02 23:34
自己解決しました!今日始めたばっかだったんで。
ご迷惑をおかけしました。
久々に笑えるやつを見た(w
913デフォルトの名無しさん:02/08/02 23:38
>905
でも、これって確か実行している間は終了もできないんだろ?
いいのか、それ教えて(ワラ
914歌丸:02/08/02 23:51
一度でいいから見てみたい 自己解決したソースUPするところ。
歌丸です。
915905:02/08/02 23:55
>913
だって、Application.ProcessMessages出して、自前でフォームをDisableにして、フラグ立てて、キャンセルボタン押したらフラグセットして...とか説明するの面倒くさい。
ほっといても5秒たてば終わるんだし...
Wait時間を可変でっていう話なら考えるけど。
916助けてDel兄さん:02/08/02 23:55
TreeviewにImageListのImageを割り当てて
選択してないときはImageが表示されるんですが、
選択するとImageが消えてしまいます。
消えないようにするにはどうすればいいですか?

>>916
SelectedIndex
918デフォルトの名無しさん:02/08/03 00:04
画面を初期化(クリア)したいのですが、どうすればいいでしょうか?

たとえば、最初に白いフォームにボタンが10個。
3秒したら初期化(クリア)して青いフォームにラベル5個。
また3秒したら白いフォームにボタンが10個。
という感じにしたいんです
919助けてDel兄さん:02/08/03 00:08
>>917
一発で出来ました
ありがとうDel兄さん
920デフォルトの名無しさん:02/08/03 00:09
が… が… 画面…
>>918

918.Terminate;
>918
別のフォームにして、表示/非表示を切り替えるのが吉。
923918:02/08/03 00:11
フォームですた(w
924889:02/08/03 00:11
>>918
Form1.Color := clWhite;
Label1.Visible := True;・・・Label10.Visible := True;
Sleep(3000);
Form1.Color := clBlue;
Label1.Visible := False;・・・Label5.Visible := False;
>920
いちいち突っ込むなよ・・
926922:02/08/03 00:13
まあ、フォームを「画面」と呼ぶこともあるわな。仕様書とか。
汎用機から流れた人(漏れもそうだが)は特に。
>>925
お前がなー。
COBOLerは MDIとSDI、モーダルとモードレスの違いが分からない。
929918:02/08/03 00:16
わかりました。どうもありがとうございますた。
930889:02/08/03 00:18
俺は天才
931デフォルトの名無しさん:02/08/03 00:19
オレはモーダルとモータルコンバットの違いが分からない。
>928
CICSはSDIでモーダルしかありませんが何か?
>930
>924のコードって、デザインが非常に鬱陶しいような気がするんだが...
>933
俺も思った...
935デフォルトの名無しさん:02/08/03 00:45
お前ら!最小化したときにタスクバーで表示されるタイトルをファイル名じゃ
なくするやり方を教えてください!
(´-`)。o ○ (どんなレスが付くのか楽しみだ…)
>935
(´-`)。o ○ (根性..)
(´-`)。o ○ (レスが付かない…もう寝よう)
939922:02/08/03 01:07
しゃーないなー
Delphiのメニューで、[プロジェクト]→[オプション]で[プロジェクト オプション]を表示し、[アプリケーション]タブの[アプリケーションの設定][タイトル]に表示したい文字列を入れれ。

何か今日はこの手の質問多くないか?
「モナーの *やさしい* Delphi質問スレ Ver.8 」
http://pc3.2ch.net/test/read.cgi/tech/1027873869/l50
へご案内してもいい?
つまりさあ、暇な2ちゃんねらーは中国人より単価が
安上がりって事さ。
941922:02/08/03 01:20
>940
暇とは何だよ(暇だけど)
もう寝る!!
       v
      (゚ω゚) <そろそろ期待してる?
     /(  )\
      /'\
943デフォルトの名無しさん:02/08/03 02:49
質問です。

ファイルの属性を一気に変更したいんですがどうしたら良いのか教えて下さい。

具体的には

hoge\ディレクトリ以下のファイル全てを「読みとり専用」を外したいんです。(サブディレクトリ含む)

FileGetAttrと言うのがあるらしいですがこれはファイル一個一個指定しなくてはいけないらしいです。
一括で変更できる方法がありましたら教えて下さい。
(´-`).。oO(ファイル操作は普通、ひとつづつやるだろ。)
>>874
Hashぐらい自力で実装汁!!

>>943
ループでも回して一括で処理汁!!
>>943
(´-`).。oO(ノイマン型CPUで複数一括処理は無理だろ)
>>874
TStrings.Valuesってことじゃなくて?
>946
隠照のMPUは複数命令を同時実行します。と言ってみるテスト。
>>948
HDコントロール用CPUは未対応とか言い返してみたりする。
というか、パイプラインなんてすっかり忘れてたよ(恥)
950デフォルトの名無しさん:02/08/03 12:26
さんくす
951948:02/08/03 13:08
>949
たとえHDDコントローラが対応しても、アームは1本という罠。
Del6のTStringsはDel3のTStringsより明らかに重い。
953デフォルトの名無しさん:02/08/03 18:01
>>952
抽象クラスの実行速度なんぞ良くはかれたな。感動。
ソースが思いんだよ!タコ
956デフォルトの名無しさん:02/08/03 18:15
抽象クラスにはソースファイル無いの?
>>956
な〜に言ってんだか♪
褒められた!
http://www.google.co.jp/search?sourceid=navclient&hl=ja&q=cache:http%3A%2F%2Ffukunm12%2Enucl%2Ekyushu%2Du%2Eac%2Ejp%2F%7Eakasaka%2Fmemo%2Fdelphi%2Frightbutton%2Ehtml
で、NewProcをFormのメンバーに置くと、
「変数が必要です」
と言われてコンパイルできません。どうすればイイでしょうか?
>>959 こんなふうにして下さい
unit Unit1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type TForm1 = class(TForm)
  Button1: TButton;
  procedure Button1Click(Sender: TObject);
  procedure FormCreate(Sender: TObject);
 private
  procedure NewButtonProc(var Msg: TMessage);
 public
  OldButtonProc:TWndMethod;
 end;

var Form1: TForm1;

implementation

{$R *.DFM}
procedure TForm1.NewButtonProc( var Msg: TMessage);
begin
 with Msg do
  case Msg of
  WM_RBUTTONDOWN: Msg := WM_LBUTTONDOWN;
  WM_RBUTTONUP:  Msg := WM_LBUTTONUP;
  end;
  OldButtonProc(Msg);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin   ShowMessage( 'こんにちは' );
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 OldButtonProc:= Button1.WindowProc;
  Button1.WindowProc:= NewButtonProc;
end;

end.
>>960
 なるほど。
しかし、FormのメンバーにNewProcを置くと、SetWindowLongは使えないと言う事ですか・・・。
これは何故ですか?
>>961

なんのこと?
>>961 SetWindowLongはメソッドではなく手続きしか登録出来ないからです
 ポインタが1つしか渡せないから、メソッドポインタを渡しても
 どのオブジェクトかを識別出来ません。

 MakeObjectInstance を使うとメソッドを手続きに仲介するコードを作らせる事が出来ますが・・・

詳しい仕掛けはここ参考にするといいでしょう
ttp://www.asahi-net.or.jp/~HA3T-NKMR/vcl3-1.htm


が、VCLを使うなら WindowProcプロパティを操作する方が簡単ですからそうした方がいいです
964デフォルトの名無しさん:02/08/04 01:08
>>963
 オブジェクトが別の場合は別のアドレス空間になるのですか?
てっきり一つのプロセス内なら、アドレスは全て一つで表せるのかと・・・。
 うーん言いたい事がうまく伝わって無いかもしれない罠。
>オブジェクトが別の場合は別のアドレス空間になるのですか?
とりあえずこの文章はおかしい
>>964
メソッドポインタは普通のポインタと違うんだよ。
>>966
指してるものは違えどポインタはポインタだろう。
969デフォルトの名無しさん:02/08/04 08:54
どなたか、ModelMaker という UML を使われている方、いらっしゃいますか?
感触を知りたいのですが。
>>964
 オブジェクトは同じアドレス空間にあります。
 しかし、メソッドポインタは、命令コードと データ領域の2つを示さなければいけません。

FormのメンバーにNewProcをおくと、NewProgは手続きではなくメソッドになります。
メソッドには隠れた引数があり、それはどのオブジェクトインスタンスであるかを示すものです
具体的にForm1である事を教える必要があります。

それから >>959の例だと、 実際に buttonをホントのサブクラス=継承して動作を書き換える方が
簡単だと思います。
>>970
へぇ、C++みたいに隠されたthisポインタみたいなのがあるんだ。
972デフォルトの名無しさん:02/08/04 12:03
Quick Report
973デフォルトの名無しさん:02/08/04 12:05
Quick Reportのソースでは、パラメータクエリは使えないんですか?
直接SQLで記述するとうまくプレビュできるのですが、パラメータクエリにすると、真っ黒(っていうか灰色)のままなんですけど。
>>973
パラメータ値をセットしてないから。
975デフォルトの名無しさん:02/08/04 12:59
>974

どもです。

いえいえ、セットしてます。構文も間違っていません。(他のクエリでも使っているがそちらは正常。)
976へい:02/08/04 13:05
みつけた!
http://ja2kai.hoops.livedoor.com
にあった。
>>976
うさんくさすぎ。練習し直し。
978へい:02/08/04 13:17
うんこくさいって。。。
979Delphi1から使ってます:02/08/04 13:54
記念パピコ(^〜^)
981デフォルトの名無しさん:02/08/04 17:28
       v
      (゚ω゚) <正直言って、出てくるとおもってないか?
     /(  )\
      /'\
982涙でディスプレイが見えない…:02/08/05 00:11
981の放置っぷりが見事で…見事で…。
ああ、待っているよ!>>981
ひょっとして、出てくるタイミングを失った?

さあ、どう出る!>>981
あれ?
出てきたのは別のスレ?
逆放置プレーされていると思われる・・・
そろそろ埋める?
その5よりその6の方が先に埋まったら、
それはそれでいいけどな(w
>>985
そういう見方もアリですな!w
>>986
もう少し見守ってみたい気もするが・・・
>>981の動向も気になるし(w
邪魔だからそろそろ埋めてください。

新スレはココ
http://pc3.2ch.net/test/read.cgi/tech/1028436692/l50
992デフォルトの名無しさん:02/08/08 00:44
996
ふーつかれた
あとすこし
999
きたー
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。