【Delphi初心者】今から始めるDelphi Part01

このエントリーをはてなブックマークに追加
952デフォルトの名無しさん:2005/11/10(木) 10:13:03
    if not error then
    begin
        try
            try
                while (not Eof(fp)) do
                begin
                    Readln(fp, str);
                    sum:=sum+StrToFloatDef(str, 0);
                end;
            except
                error:=true;
            end;
        finally
                CloseFile(fp);
        end;
    end;

    if error then
    begin
            Writeln(ErrorString);
    end
    else
    begin
        writeln(FloatToStr(sum));
    end;
end.
//EOF
953デフォルトの名無しさん:2005/11/10(木) 19:05:21
>>951
混乱させてるかな・・・
確かに例外処理が無かった頃はフラグでエラー処理とかしてたのだけれど
それをスマートに書くために例外処理機能ができたといってよい。
どうしてもフラグ使ったほうがわかりやすい場合や
達人が処理速度重視してフラグを使うのはいいと思うのだけれど
ここでは基本に忠実に処理して欲しい。

ヒント
try
 
except
 on E: Exception do Writeln(E.Message);
end;

try と except のなかに全部の実行コードを書けばよいはず。
954デフォルトの名無しさん:2005/11/10(木) 19:52:47
>>953
読み込み中に例外が発生するとファイルをクローズできないのでは
ないかと気にしていますがどうでしょうか

program Project1;
{$APPTYPE CONSOLE}
uses
    SysUtils, Classes;

const
    filename='test.txt';
var
    sum:    double;
    fp:    TextFile;
    str:    string;
begin
    sum:=0;

    try
        AssignFile(fp, filename);
        Reset(fp);
        while (not Eof(fp)) do
        begin
            Readln(fp, str);
            sum:=sum+StrToFloatDef(str, 0);
        end;
        CloseFile(fp);
        writeln(FloatToStr(sum));
    except
        on E: Exception do Writeln(E.Message);
    end;
end.
955デフォルトの名無しさん:2005/11/10(木) 20:16:18
オープンして

try

 ファイルアクセス

finally
CloseFile(fp)
end;
956デフォルトの名無しさん:2005/11/10(木) 21:01:10
>>955
うまくいきました、ありがとうございます
Writelnの位置で悩んでたのですがクローズする前でもいいとやっと気づきました
例外は(戻り値をチェックするのと同じように)関数ごとにtryで囲むものだと思っていたので考えを改めます
uses
    SysUtils, Classes;
const
    filename='test.txt';
var
    sum:    double;
    fp:    TextFile;
    str:    string;
begin
    sum:=0;
    try
        AssignFile(fp, filename);
        Reset(fp);
        try
            while (not Eof(fp)) do
            begin
                Readln(fp, str);
                sum:=sum+StrToFloatDef(str, 0);
            end;
            writeln(FloatToStr(sum));
        finally
            CloseFile(fp);
        end;
    except
        on E: Exception do Writeln(E.Message);
    end;
end.
957デフォルトの名無しさん:2005/11/10(木) 21:55:29
>>956


次は、例外処理の締めとしてRaiseを使おう。
ファイルが開けないときは
writeln(filename)した後、今の例外処理(Writeln(E.Message);)
を実行するように、
また、読み込みエラーのときは、E.Messageの内容を
"読み込めねー"
に変更してみてみてくれ。どちらも Raise を使えば簡単にできる。
958駆け出し名無し:2005/11/11(金) 07:45:06
Editを使って、文字揃えって出来ないのでしょうか?
いつも左に寄っていて、右揃えにしたいと思うのですが。
959デフォルトの名無しさん:2005/11/11(金) 13:28:29
そんなコンポはたくさんあるよ、さがすと
960デフォルトの名無しさん:2005/11/11(金) 20:01:13
右揃えは9x系のWindowsがサポートして無かったからね。
2000とかXPならCreateParamsをoverrideしてウィンドウスタイル設定してやればいけるはず。
961駆け出し名無し:2005/11/12(土) 02:05:47
>>959
なるほど、標準仕様じゃ駄目なんですね。
ポトペタするためには、部品を掻き集めてこないと。
お陰様で少しDelphiプログラミングの概要が掴めた気がします。

ぐぐってみてDelphian Worldを見つけ、登録コンポーネントを見てみましたが、
どれがいいのかよくわからないような状態です。Delphi P6 で使えるのは?
D6とあるものだけがきっと使えるのでしょうね。

>>960
> 2000とかXPならCreateParamsをoverrideしてウィンドウスタイル設定してやればいけるはず。
漏れには、まだこの意味がよくわかっていないのですが、頑張って理解したいと思います。
962駆け出し名無し:2005/11/12(土) 15:20:30
改行文字を取り除こうと思って、「改行文字置換 Delphi」等と思いつくままぐぐっていたら、
何回かで偶然ここ(>>149)が出てきました。うわぁーい!\(^_^)/

> AnsiReplaceStrやAnsiReplaceTextでどうでしょ?
文字列置換は、awkやPerlではよく使っていたので、確かsubstrだったっけ?
これがDelphiじゃ標準的な関数なんでしょうね。

> DELPHIで良く使用する制御文字
> DELPHIで良く使用する制御文字を
> 下記に列挙します。
>
> 改行コード CR #13
> 改行コード LF #10 
> 改行コード CRLF #13#10
> タブ #9
>
> 改行コードは
> WindowsではCRLF
> MacではCR
> Unix系ではLF
> となっています。

その過程で、というのもついでに見つけました。
「S :=AnsiReplaceText(S, '投稿日:', 'DateTo(');」とあると、使い方は、以下みたいなのかな?
改行を半角スペースにする積りなんですが・・・。s := AnsiReplaceText(s,'#13#10',' ')

あと、高速のReplaceString 関数も: ttp://leed.issp.u-tokyo.ac.jp/~takeuchi/delphi/article/069/069334.html
963デフォルトの名無しさん:2005/11/12(土) 19:29:48
>>961
TEditは「何かのヴィジュアルコンポーネント」の一種で、
「何かのヴィジュアルコンポーネント」は「何かの(アイコン表示されるものも含む)コンポーネント」の一種…。
これはわかる?
派生といって、既存のグループに属する新種を作り出すことができるんだけど、
新しいコンポーネントもそうやって作成する。
この場合、「新しいコンポーネント」をTEditの一種として作ればいい。
overrideってのはあるメソッドを自作のもので上書きすること。

難しそうだけど、実際必要なコード量はメチャ少ない。
既存コンポーネントのほうも、D6と無くても、恐らく動作確認がなされてないだけで使えるかもしれない。
というか使えない方がおかしい。
インストール時に設計時パッケージまわりの仕様変更でつまずくかもしれないし
この程度の事でもバージョン依存してる変な既存コンポーネントもあるかもしれないけれど
それはそれで設計時の動作を理解するきかっけになるので、
自作でも利用でも、まずやってみて、
つまずいたらまたここに聞きに来ればいいんじゃないかな。
964デフォルトの名無しさん:2005/11/12(土) 20:36:12
そんなに長く書くなら TMyEdit クラスのコードをしめす方がはやそうだな
965デフォルトの名無しさん:2005/11/12(土) 20:37:48
しかも回答有り有りなFAQだし。
966駆け出し名無し:2005/11/12(土) 21:38:54
>>963
>派生といって、既存のグループに属する新種を作り出すことができるんだけど、
上のはイメージではわかりますが、確かこれは「型の継承」と言って、
オブジェクト指向言語の特性というのは読み込んだ資料に書いてありました。
派生は違うのかな?

>overrideってのはあるメソッドを自作のもので上書きすること。
ということは、そのメソッドも継承されるということですか?

>難しそうだけど、実際必要なコード量はメチャ少ない。
みたいですね。漏れの場合、辿りつくのに物凄く時間は掛かるけど、書けたら意外に短いです。

>既存コンポーネントのほうも、D6と無くても、恐らく動作確認がなされてないだけで使えるかもしれない。
>というか使えない方がおかしい。
普通は上位互換ですよね。でも、エラーを吐いたんだけどなあ。それ聞いてコンポ探しにやっと安心しました。

>それはそれで設計時の動作を理解するきかっけになるので、
ですね。まだまだ、強引なコーディングの癖が抜けないので、コンパイラから怒られてばかりです。_| ̄|○
後で書いても駄目なのね・・・。ちゃんとした書き方を身に付けないと。きっと新規フォームもそうなのかな?
他のを調べて、ちゃんと宣言部分も書いたんだけどなあ。

>自作でも利用でも、まずやってみて、
>つまずいたらまたここに聞きに来ればいいんじゃないかな。
そうします。またよろしくお願いしますね。m(_ _)m
967駆け出し名無し:2005/11/12(土) 21:40:57
>>964
TMyEdit クラスのコードと聞いてもチンプンカンプンなんですが、
コードを示していただければ、また勉強になると思うのでよろしくお願いいたします。

前にされていた方のような「道場破り」的な難度だと、漏れには全く駄目ですから。
今後ともよろしくお願いいたします。
968デフォルトの名無しさん:2005/11/12(土) 22:30:39
>>957
program Project1;

{$APPTYPE CONSOLE}

uses
    SysUtils, Classes;

const
    filename='test.txt';
var
    sum:    double;
    fp:    TextFile;
    str:    string;
begin
    sum:=0;

    try
        try
            AssignFile(fp, filename);
            Reset(fp);

            try
                while (not Eof(fp)) do
                begin
                    Readln(fp, str);
                    sum:=sum+StrToFloatDef(str, 0);
969デフォルトの名無しさん:2005/11/12(土) 22:31:10
                end;
                writeln(FloatToStr(sum));

            finally
                CloseFile(fp);
            end;

        except
            on E: EInOutError do
            begin
                case (E.ErrorCode) of
                    2:
                    begin
                        writeln(filename);
                        raise
                    end;
                else
                    begin
                        raise Exception.Create('読み込めねー');
970デフォルトの名無しさん:2005/11/12(土) 22:31:38
                    end;
                end;
            end;
        end;

    except
        on E: Exception do Writeln(E.Message);
    end;

end.
971デフォルトの名無しさん:2005/11/12(土) 22:54:13
意味ねー
972デフォルトの名無しさん:2005/11/12(土) 23:18:36
>>966
派生 derive
継承 inherit …「星を継ぐもの(star inheritors)」とか

対応する英語は違うけど、意味は、だいたいおんなじ。
それから、型を継承したらメソッドも全部くっついてきます。
973デフォルトの名無しさん:2005/11/13(日) 00:21:54
>>967

type
TMyEdit = class(TEdit)
protected
  procedure CreateParams(var Params: TCreateParams); override;
end;

procedure TMyEdit.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.Style := Params.Style + ES_RIGHT;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  with TMyEdit.Create(self) do
  begin
    Parent := self;
    Left := 10;
    Top := 10;
    Text := '右よせ';
  end;
end;
974駆け出し名無し:2005/11/13(日) 01:20:07
>>972
>それから、型を継承したらメソッドも全部くっついてきます。
ご丁寧に解説していただき、本当に有難うございました。
同じ意味なんですね。 「星を継ぐもの(star inheritors)」なのか・・・。
そうやってメソッドも付いてくるから便利なんですね。なるほどなあ。

>>973
まだよくはわからないのですが、その大体の雰囲気は掴めました。
機能を付け加えると書かれたイメージが。後でよく検討してみますね。
わざわざ有難うございました。
975駆け出し名無し:2005/11/13(日) 01:28:26
a
b   ----> a b c
c

のように改行で区切られた中身(前後に半角スペース等がつく場合あり)を
半角スペース区切りにしようと思って、以下のようなコードを書いたのですが、
よくわかりません。testという文字列変数に入っています。どうして駄目なのかな?

Memo1.Lines.Add( AnsiReplaceText(Trim(test) ,'#13#10' ,' '));

976デフォルトの名無しさん:2005/11/13(日) 01:36:38
'#13#10'ではなく
#13#10
または
sLineBreak
977デフォルトの名無しさん:2005/11/13(日) 02:08:01
978デフォルトの名無しさん:2005/11/13(日) 09:02:05
>>968
やはり例外処理は初心者にとって第一の壁みたいだな。
でも完全に理解すればほんとプログラムの質が上がるのでがんばれ。

ヒント:
try
 try
 except
 end;
except
end;
979駆け出し名無し:2005/11/13(日) 10:42:51
>>976
> #13#10'ではなく #13#10
> sLineBreak
ああーっ?! そうだったのかー・・・。_| ̄|○
有難うございます。表記の仕方が駄目だったんですね。
囲まなくてもいいのか。全く考えてもいなかった可能性でした。

awkやPerlでは囲っていたような気がするので、その辺の癖でしょうね。
駄目駄目な漏れですが、今後ともまたよろしくお願いいたします。m(_ _)m
980駆け出し名無し:2005/11/13(日) 11:02:49
>>977
そこって、以下ですよね。合流か・・・。
くだすれDelphi(超初心者)その28
ttp://pc8.2ch.net/test/read.cgi/tech/1131168199/l50

漏れみたいな人間でも、ここなら気軽に書けたんだけどなあ。
ここのPart02があればいいなあ。で、テンプレに追加した方がいいような情報。

Windowsの種類を知る処理を調べるためにぐぐっていて見つけたいいサイト?
でも、そのコードをいじってみたけど、所詮付け焼刃だから漏れには無理だった。orz
(Delphiの制御文字情報(>>962)は実はぐぐってで一番目のここから)

・INTERSKILL REPORTS: ttp://interskill.main.jp/
・Delphi Acid Floor: ttp://www.wwlnk.com/boheme/
・TORRY's Delphi: ttp://www.torry.net/index.php

漏れの場合、実際のコードを見た方がわかるからで。当たり前の話ですが。
ぐぐってコードを見つけて、それを流用している感じですね。自分で書いていないじゃん・・・。
981デフォルトの名無しさん:2005/11/13(日) 11:09:44
合流って言うかもともと重複。分ける意味ないだろ。
982駆け出し名無し:2005/11/13(日) 11:33:35
>>980
うわぁーい!やったー!!!\(^_^)/
全くの流用だけど、WindowsOSの種類を吐くプログラムが書けたぞ。
結果で考えれば、関数の定義、戻り値の定義が不整合。整数と文字列で・・・。
たったこれだけで、漏れは、昨晩夜遅くまで悩んでいたのか。_| ̄|○

きっとあっちじゃ、こんな気軽には書けそうもない気がするなあ。
983デフォルトの名無しさん:2005/11/13(日) 11:55:03
Delphiプログラマ同士の馴れ合いや雑談はマ板で。
質問は質問スレで。
ここは重複。

質問スレがどうしても嫌だというなら次スレはマ板に立ててくれ。
最低限の板のルールは守ろう。
984デフォルトの名無しさん:2005/11/13(日) 16:41:30
>>980
くだすれ(超初心者)は時々変な人が来るから、書きづらいって事?
くだすれ(中級者)の次すれでもOKだと思う。
985デフォルトの名無しさん:2005/11/13(日) 17:04:50
質問って言うより勉強スレが欲しいって事でしょ。

重複にならないよう、マ板に立てればいいんじゃない?
986デフォルトの名無しさん:2005/11/13(日) 17:13:47
そういう事か。ブログ作れ。
987駆け出し名無し:2005/11/13(日) 17:45:28
>>983
マ板って、きっとプログラマー板ってことですよね。
前に荒れることが多いって書いてあったような気がしますが。
でも、そう言うなら、やっぱりここはこれで終わりにしましょうか。

道場破りをしていた人は、あっちでもあれが出来るのかな?

>>984
漏れはまだまだ駆け出しだから、超初心者くだすれでいいです。
ここで漏れを教えていただいていた方があっちでも教えてくれれば。
ここみたいに隔離されていた方が気が楽だったんですが。あっちで頑張ってみます。

あっちを読んでみて漏れには難しいと思っていたところ、ここを見つけたのですが・・・。
あと今知ったのですが、置換関数には「StringReplace」というのもあるんですね。
ということで、あちらでもまたよろしくお願いいたします。ぺこり。m(_ _)m
988デフォルトの名無しさん:2005/11/13(日) 18:04:10
マ板でプログラムのことを扱うのは板違い
適当な誘導すんなよ
989駆け出し名無し:2005/11/13(日) 19:02:11
>>988
板に行って見て来ましたが、「人」としての話題がメインのようですね。
勤務条件とかで、プログラム自体の話題はどうも違う気がしました。
990デフォルトの名無しさん:2005/11/13(日) 19:45:47
次スレに挨拶してきた
991駆け出し名無し:2005/11/13(日) 20:39:47
>>990
漏れも真似して、挨拶してきました。有難う助かりました。
992駆け出し名無し:2005/11/13(日) 20:44:20
01.自分に合った設定をしよう。
ttp://ww3.tiki.ne.jp/~torigoe/01.html
を見て、IDEの設定を変えているのですが、
フォントの指定がイマイチのような気がします。

FixedSysって13ポイントしか選べないようなのですが、
どのフォントがお勧めなのでしょうか?よろしくお願いします。
993デフォルトの名無しさん:2005/11/13(日) 20:59:04
サイズ固定だからFixedSysなんだけど。
オレハいつもTerminalの10ポイントあたり。
これが 0とO、 1とl、 ;と:、 .と, あたりの区別が一番しやすい。
あと横幅が比較的狭いので画面が広く使える。
994駆け出し名無し:2005/11/13(日) 21:15:24
>>993
> サイズ固定だからFixedSysなんだけど。
あーっ・・・。フォントの名前だとばかり。
文字通り固定フォントだったのか。_| ̄|○

> オレハいつもTerminalの10ポイントあたり。
> これが 0とO、 1とl、 ;と:、 .と, あたりの区別が一番しやすい。
有難うございます。早速、これに変えてみますね。
参考にしたサイトも、このTerminalでした。定番みたいですね。
良かったなあ、やっと謎が解けて。漏れが呆けているだけじゃん・・・。
こんな乗りになるから、あっちでも大丈夫なのかなあ・・・。心配だ。orz

995ななしへたぐらま ◆XcB18Bks.Y :2005/11/13(日) 22:36:04
おそらく"FixedSys"の"Fixed"は固定幅という意味です.

"System"というプロポーショナル(文字によって幅の異なる)フォントがあるのですが
これもサイズが1種類しかないのです.
フォントのデザインも"FixedSys"は"System"の固定幅版です.
996駆け出し名無し:2005/11/13(日) 22:48:38
>>995
> フォントのデザインも"FixedSys"は"System"の固定幅版です.
なるほど、そういう意味だったのですね。FixedSystemの省略形で。
そうやって意味がわかると、よく理解できますね。有難うございました。
997駆け出し名無し:2005/11/13(日) 22:53:07
はじめまして、先程はご挨拶が抜けてしまいました。ぺこり

Delphiは統合環境でエディターはIDEを使って書くのが普通なんですが、
でないと、しょっちゅう怒られてばかりなんですが、知ってから書くのに役立つ
機能説明サイトは、以下くらいでしょうか?

・Delphi 6 のショートカットキー: ttp://www.ss.iij4u.or.jp/~somali/extra/_delphi_shortcut.html
・IDE Tips: ttp://www.kanazawa-net.ne.jp/~pmansato/IDE_Tips.htm
998デフォルトの名無しさん:2005/11/13(日) 23:18:08
Delphi6です
IEコンポーネントを表示することはできたのですが、
そこにHTMLを追加するにはどうすればいいんでしょう?
999デフォルトの名無しさん:2005/11/13(日) 23:37:06
WebBrowser1.Navigate('URL');
1000デフォルトの名無しさん:2005/11/13(日) 23:38:03
1000
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。