カテゴリ:Delphi Programming( 43 )

約1年半前に購入した日本語版「OBJECT PASCAL HANDBOOK」を読み始めた。

出版社のページ → CUTT System:OBJECT PASCAL HANDBOOK ← 目次あり


2016年10月に購入した「OBJECT PASCAL HANDBOOK」(本体価格:6000円の本)を3月5日に読み始めた。
買ってから一度2、3日ぐらいで30ページぐらいを寝る前に読んだんですが、
パソコンで全く試さずに読んでいたら、記述されている事が気になりストレスになってしまって読むのを止めてしまいました。

6000円も出して購入したこの本を死蔵させるのは勿体ないと思いこの3月を強化月間として読むことにしました。
あと今年の誕生日に「独習PHP 第3版」を買ったのもある。「OBJECT PASCAL HANDBOOK」を読み終えたら「独習PHP 第3版」をやるつもり。

この本は大きく三部に分かれている。

  1. 基礎 [第1章~第6章]
  2. OBJECT PASCAL での OPP [第7章~第13章]
  3. 高度な機能 [第14章~第18章]

3月中に第2部の「OBJECT PASCAL での OPP」の途中まで行きたいと思ってる。→4月になっても第2章の終わりまでしか読めていない・・・。

使用環境は、Windows10 / Delphi 10.2 Starter版(新しいバージョンが出たら毎回更新予定)


↓2018年4月25日に電子書籍版が出る事を知ったので追記↓


デモのソースコードのダウンロード先はこちら
>> MarcoDelphiBooks/ObjectPascalHandbook: Object Pascal Handbook demos source code
b0003577_18000403.png
「Clone of download」をクリックすると下の状態になるので
b0003577_18000436.png
「Download ZIP」をクリックして「ObjectPascalHandbook-master.zip」を適当な場所にダウンロードして解凍(展開)します。
フォルダ数[134]とファイル数[647]が多いです。ちなみに解凍(展開)後のサイズは約12MBです。

↑2018年4月25日追記終わり↑


気になった事をメモっていこうと思う。
[PR]

by arigayas | 2018-03-08 10:47 | Delphi Programming | Trackback | Comments(10)
「できるDelphi / C++Builder 10.x Starter Edition」ってあったら買いたい。
多分発売されることはないだろうけど、
「できるDelphi / C++Builder 10.x Starter Edition」っていう本があったら買いたい。
IDE の使い方(*)の説明が図解で解説されているのを期待する。

*:例えば、
  • ブレークポイントの設定の詳細な使い方。
  • 監視式の詳細な使い方。
  • パッケージやコンポーネントのインストールについて。
  • バージョン管理(Subversion、Git、Mercurial)の使い方や具体例。GitならGitHubの使用例を。
  • お勧めのアドオン、プラグイン。

こんなところかな。

Delphi / Object Pascal については、税抜きで6000円と高価ですがこの本で学習するのが良いかもしれません。
OBJECT PASCAL HANDBOOK


2017年5月25日追記
  • 「できるDelphi 10.1 Starter Edition」から「できるDelphi / C++Builder 10.x Starter Edition」に改題
  • OBJECT PASCAL HANDBOOKへのリンク。


[PR]

by arigayas | 2016-11-10 04:47 | Delphi Programming | Trackback | Comments(0)
Delphi XE Pro - IDEなどにインストールすべきものを教えて欲しい。「CnPack」と「IDE Fix Pack」以外で
30回目の エンバカデロ・デベロッパーキャンプ の東京会場での LT をUstream で見ていました。
そこで RAD Studio や Delphi や C++Builder にインストールすると作業が快適になるツールとして、
CnPackCnPack Open Source Projects が紹介されていた。XE8 からの新機能の「Castalia」とバッティングするので起動時のオプションに「/NOCASTALIA」と良いらしい。

これをインストールしたところ、いくつかの便利になったので記録しておきます。
  • ソースコードの表示が変わってBegin~endやif文やfor文などの制御文が対応した色で分り易くなったり、
    b0003577_22093512.png

    Beginの開始位置が変わっても大丈夫!
    b0003577_00401883.png
  • フォームのサイズを固定サイズにするのが簡単になったり
    b0003577_22461505.png
  • ボタンなどのコンポーネントを配置した時に短縮した名前にするか?と聞いてくる。
    b0003577_23284829.png

CnPack の日本語化を誰かやって欲しいなぁと思ったり。 この記事を書いている間に作られましたw 

CnPack 日本語化ファイル 20150530版。 - 全力わはー翻訳は途中までだそうです。


[2015年6月7日追記]
  • 変数などにマウスカーソルを合わせると同じソースコード内で強調表示してくれます。
    b0003577_22035012.png
  • [CnPack 日本語化ファイル 20150530版導入済みです]
    エディタ上で文字を選択すると行数番号の横に「ソースツールブロック」というのが表示される。
    b0003577_02263381.png

    このツールで選択した文字列を 編集 / コメント化 / Web検索 などが出来る。

CnPack 以外には IDE Fix Pack をインストールしてあります。→ IDE Fix Pack | Andy's Blog and Tools

IDE Fix Packは、Version 2009 以降の IDE の細かなバグを修正したものをまとめた物です。

ソースコードが長くなった場合にレスポンスに問題が出てくるらしいのですが
IDE Fix Packを入れてあればレスポンスにほぼ問題なく使えるらしいです。
以下の2つのリンクはインストール前後でのレスポンスの差を動画にした記事へのリンクです。

CnPack や IDE Fix Pack は、2016年9月下旬に無期限無償公開された C++Builder 10.1 Berlin Starter EditionDelphi 10.1 Berlin Starter Edition にもインストールが可能です。



↓更新日時↓
[PR]

by arigayas | 2015-05-31 00:51 | Delphi Programming | Trackback | Comments(0)
Delphi XE Pro - 正規表現で一致する文字を抽出して表示する
ひとつだけの場合
uses
RegularExpressions 追加して正規表現を使えるようにする。

procedure TForm1.Button1Click(Sender: TObject);
var
Str: string;
hoge: TMatch;
begin
 Str := 'ふかふかふか(やってみる)(lv196799094)';

 if TRegEx.IsMatch(Str,'lv\d+') then
  begin
   hoge := TRegEx.Match(Str,'lv\d+');
   ShowMessage(hoge.Value);   出力結果: lv196799094
  end;
end;

試しに Str := 'ふかふかふか(やってみる)(lv196799094)(lv200000000)'; とした場合にも出力結果はlv196799094となった。


複数個当てはまる場合
procedure TForm1.Button2Click(Sender: TObject);
var
 i: Integer;
 str, tempStr: string;
 hoges: TMatchCollection;
 SortList : TStringList;
begin
 Str := 'ふかふかふか(やってみる)(lv20000000000)(lv10000)(lv196799094)';

 if TRegEx.IsMatch(Str,'lv\d+') then
  begin
   hoges := TRegEx.Matches(Str,'lv\d+');
    if hoges.Count = 1 then
     
tempStr := hoges.Item[0].Value
    else // 複数候補がある場合は最大値を適用する
    begin    
     if hoges.Count > 1 then
      SortList := TStringList.Create;
      for I := 0 to hoges.Count - 1 do
       SortList.Add( hoges.Item[I].Value );
      SortList.Sort;
      for I := 0 to SortList.Count - 1 do //ソートされて最後が最大値になっているはず
       tempStr := SortList.Strings[i];
    end;
   ShowMessage(tempStr);   出力結果: lv20000000000
  end;
end;



[PR]

by arigayas | 2014-11-29 05:07 | Delphi Programming | Trackback | Comments(0)
[解決?] Delphi XE Pro - DUnit の使い方を知りたい というかファイルを指定して読み込ませる事ができるのか知りたい
Delphi XE Proでニコニコ生放送のコメントを表示するソフトを作っている。
しかし、Indy(ネットワーク関連の処理をまとめたコンポーネント群)の使い方がさっぱりわからないので
今のところ、とあるソフトでニコニコ生放送のコメント(XMLファイル)をダウンロードし、そのダウンロードしたXMLファイルを表示するソフトになっている。
あとNCVで保存したコメントファイルを開く事も出来るように今週改良を加えた。

しかし動作テストする為に毎回、最低でも6ファイルぐらいテスト用のXMLファイルを手動で開いて、ちゃんと動くのか読み込ませるのが面倒臭く感じてきたので
「Delphiで使えるテストツールがないかなぁ?」と思い軽く検索してみたら「DUnit」というのがあるのがわかったけど、関数(procedure/function)単位でテストするようだった。
この「DUnit」というは、ファイルを複数指定すると指定したファイルを順次読み込んでテストしてくれるのかどうか、詳しい方教えてください。

作ったプログラムのメインのpasファイルには、
procedure TForm1.XMLRaedVirtualView(FileName, Encoding);
って言う感じになっていて、テストプロジェクトには、
procedure TestTForm1.TestXMLRaedVirtualView;
var
 Encoding: TEncoding;
 FileName: string;
begin
 // TODO: メソッド呼び出しパラメータのセットアップ
FForm1.XMLRaedVirtualView(FileName, Encoding);
 // TODO: メソッド結果の検証
end;
という状態です。




追記分
[PR]

by arigayas | 2014-11-06 18:21 | Delphi Programming | Trackback | Comments(0)
Delphi XE Pro - ListView での疑問。
ListView [ViewStyle=vsReport]に1行分のデータを追加するのに配列(StringList)でデータを渡して一気に追加したいけど出来るのかな?
ListView1.???? := StringList;
もしくは
ListView1.????.AddStrings(StringList);
みたいな感じで。
[PR]

by arigayas | 2013-07-02 23:24 | Delphi Programming | Trackback | Comments(2)
Delphi XE Pro - UnixTime を計算して経過時間を表示
Delphi XE Pro - Unixtime を 年月日 時分秒に変換

uses に DateUtils が必須です。
procedure TForm1.UnixtimeButton2Click(Sender: TObject);
var
UnixtimeStamp, StartTime, ElapsedTime : UInt64;

day, Hour, Minute, Second: Integer;
AdayOver : Integer; // 24 時間以上用

daystr : string;
TimeString : string;
begin
UnixtimeStamp := 1372995141;
TimeString := FormatDateTime('yyyy/mm/dd hh:mm:ss',UnixToDateTime(UnixtimeStamp));

ShowMessage(TimeString);


// 放送開始からの経過時間
StartTime := 1372485140;

ElapsedTime := UnixtimeStamp - StartTime; // 経過時間(秒数で格納)
ShowMessage(IntToStr(ElapsedTime) + '秒');

Hour := ElapsedTime div 60 div 60 ;

if Hour > 24 then
begin
day := Hour div 24;
AdayOver := Hour mod 24;
daystr := IntToStr(day) + '日目 ' + Format('%.2d',[AdayOver])+ '時間';
end
else
begin
daystr := IntToStr(Hour)+ '時間';
end;

Minute := ElapsedTime div 60 - Hour * 60 ;

Second := ElapsedTime - (Hour * 60 * 60 + Minute * 60) ;

TimeString := daystr + Format('%.2d',[Minute]) + '分' + Format('%.2d',[Second] ) + '秒';

ShowMessage(TimeString);

user_id_Memo.Text := TimeString;
end;


510001秒 が 
5日目 21時間40分01秒
と表示されます。
[PR]

by arigayas | 2013-06-30 00:29 | Delphi Programming | Trackback | Comments(5)
Delphi XE Pro - Unixtime を 年月日 時分秒に変換
uses に DateUtils が必須です。

procedure TForm1.UnixtimeButton2Click(Sender: TObject);
var
UnixtimeStamp : Int64;
// Temptime : TDateTime;
TimeString : string;
begin
UnixtimeStamp := 1372485141;
// Temptime := UnixToDateTime(UnixtimeStamp); Unixtime を TDateTime 型に変換してる。
TimeString := FormatDateTime('yyyy/mm/dd hh:mm:ss',UnixToDateTime(UnixtimeStamp));

ShowMessage(TimeString);
end;


以下のように表示される
2013/06/29 05:52:21

[PR]

by arigayas | 2013-06-29 15:00 | Delphi Programming | Trackback(1) | Comments(0)
Delphi XE Pro - TurboPower Abbrevia を使ってみるテスト
Delphi XE Pro - 今年の1月から作成していたソフト、XPI_Maker が完成した。

XPI_Maker に致命的なバグがあったので ZIP 形式の圧縮ファイルにする時のコンポーネントを
TurboPower Abbrevia 5.0 にしてみようと四苦八苦して心が折れたヽ(´ヮ`)/
コンポーネントのインストール方法をイマイチ理解していないの為かうまくインストールできないので強引にソースコードを追加したし(苦笑)

何も指定せずにフォルダの圧縮をするようにフォルダを投げると
出力される圧縮ファイルは絶対パスで圧縮されたファイルが作られる(´;ω;`)

英語サイトをググたりソースコードを追いかけて、恐らく「AbArcTyp.pas」の191~192行目にある
TAbStoreOption =
  (soStripDrive, soStripPath, soRemoveDots, soRecurse, soFreshen, soReplace);
の組み合わせを上手くすれば相対パスで圧縮されたファイルが作られると思うけど限界になったので休憩する。


休憩を終えて追記1回目:
使い方としては、
ほげほげ.StoreOptions := [soStripPath, soFreshen, soReplace];
などと指定する。
無指定だと、絶対パスを含むフォルダ構成で圧縮ファイルを作成するオプションのようだ。
soStripPath はフォルダ構成を無くして圧縮ファイルを作成するオプションのようだ。

追記2回目:
ドキュメントというかヘルプファイルを見つけた(苦笑)TurboPower Abbrevia 3.04 | SourceForge.net
soStripDrive
Drive letter information is removed from the stored file name.
(Note: This option is ignored in Linux.)

soStripPath
All path information is removed from the stored file name.

soRemoveDots
All relative path information is removed from the stored file name. For example,
if you call AddFiles with a FileMask of "..\TEST.TXT" ("../TEST.TXT" in Linux),
the parent of the current BaseDirectory is searched for a file named "TEST.TXT".
If the file is found, it is stored as "TEST.TXT".

soRecurse
Subdirectories of the search path are included in the search for files to add or freshen.

soFreshen
When adding an existing item to the archive, the item is freshened.

soReplace
When adding an existing item to the archive, the item is replaced.


2013年5月31日12時10分 追記3回目:
もしかして「TurboPower Abbrevia 」って相対パスでの圧縮ファイルにするのに対応していないのか?と思い始めてる。


2013年5月31日15時07分 追記4回目;
情報の後出しは良くないんですけど、deko さんのサイト[ 続・ZIP で圧縮 / 解凍したい (Delphi 2010 以降) ]を見てこのコンポーネントを使おうと思いました。
これを諦めて 7-zip.dll を使おうかと思い始めてます・・・。

2013年5月31日17時04分 追記5回目:
Twitter で おにさんに助言[ Twitter / onimaro2010 ... ]をいただいて「TurboPower Abbrevia 」を使って相対パスでの圧縮ファイルを作成するのに成功しました。
しかし、このコンポーネントは圧縮ファイルのファイル名の拡張子をチェックして圧縮ファイルにする処理を開始するから Firefox 等のアドオンで使われている xpi ファイルを指定すると「そんなファイルタイプを知らん!」と圧縮ファイルを作成してくれないので困った(´・ω・`)
SaveFileName := ChangeFileExt(SaveFileName, 'xpi');
とするだけじゃアプリケーションのメモリ内だけでファイル名の拡張子が変わるだけだけですし(´・ω・`)


2013年6月1日5時43分 追記6回目:
普通に「delphi ファイル名 変更」でググってファイル名の拡張子変更を解決したw
RenameFile(SaveFileName,ChangeFileExt(SaveFileName, 'xpi'));

upしている過去バージョンは使い物にならないから全部削除だな(´・ω・`)
[PR]

by arigayas | 2013-05-30 15:22 | Delphi Programming | Trackback | Comments(0)
Delphi XE Pro - 今年の1月から作成していたソフト、XPI_Maker が完成した。
2013年1月30日から作り始めたソフトXPI_Maker が昨日完成した。

作り始めたきっかけは、Mozilla Firefox のアドオンソフトで
2ちゃんねるを見る chaika の開発版を手軽に手元で作るためのソフトをGUIで作ってみたくなったからです。
chaika の開発者のF氏が忙しくなったのか新機能追加が全くなかったのだけど、
N氏が開発を引き継ぐことになってから猛烈に新機能追加されるようになったので最新バージョンが欲しくなったんです。
しかし、ただ最新バージョンを取得するだけならバッチファイル[ 7zip と Subversion を使って chaika チェックアウトして xpi を作るバッチファイル : arigayas の 雑記帳 ]を作れば充分なのです。

なぜ、バッチファイルじゃなく GUI で作ったのかというと chaika の不具合報告するのに
自分が今、どのリビジョンを使っているのか忘れてしまっても大丈夫なように
アドオンのインストール情報が書かれている install.rdf のバージョン情報を書き換えてしまおうと考えたからです。
バッチファイルでダウンロードした特定のファイルを編集するのは、たぶんかなり面倒臭いと思ったのもあります。
あとダウンロードして生成されるファイル名にもアドオン名とRevision番号があればわかりやすいと思ったのもあります。


ソフトの用件は
  1. ソフトが作成するファイル名には、アドオン名とRevision番号があること
  2. 圧縮ファイルを作成に自前で圧縮ファイルを作成すること
  3. 保存フォルダを選べること
  4. 特定のRevision を指定し取得して作成できること
  5. Subversion がインストール済みであること
  6. ボタンは なるべく少なくする
  7. 設定は記録されること

こんな感じで作り始めました。作り始めた初日には1ヶ月ぐらいで作り終わるかな?と思ってたけど、
プログラミング初心者の進捗は遅い&行き詰まったら心が折れやすいのもあって、
初日に思った4倍の時間が掛かってしまったw (一応、言い訳:プログラミングしてない日数は半分以上あります。)

b0003577_9232919.png


今後実装したい機能があって複数のアドオンに対応したいです。
現状だと複数のアドオンを設定するには、アドオン毎にフォルダを作成しないと設定ファイルを保存できない設計です。

使用例
b0003577_11523599.png


気が向いたら追記するかもしないし、全くしないかも知れない。

関連記事
[PR]

by arigayas | 2013-05-27 11:30 | Delphi Programming | Trackback(1) | Comments(0)