タグ:プログラミング ( 77 ) タグの人気記事

Delphi XE Pro - XML ファイルを ini ファイルのように使うには? (保存編)
「XML ファイルを ini ファイルのように使うには?」と同じタイトルで
とある掲示板に投稿してヒントをもらって解決したので自分のブログにも書いておく。
まだ読み込み方法を調べないといけないんですけどね・・・。

それにしてもXMLファイルに書き込めるようになるまで時間が掛かったなぁ・・・。
日本語サイトだけの解決は厳しかった・・・。
以下の方法はXE1以降で使えます。

2013年3月2日 追加:
この記事を書いた翌日に質問した掲示板に追加の返答があったのを見て追加しました。
 // 実行結果は同じですがちょっとスマートになったかとw

uses XMLIniFile を追加して
フォームに XMLDocument (これがないと実行時にエラーになる)を貼付けて
XMLIntfXMLDoc uses に追加して
以下のようなソースを書いてXMLファイルをiniファイルのように出来ました。
改変前:
procedure TForm1.Button1Click(Sender: TObject);
var
Root : TXMLDocument;
settingsXML: TXMLIniFile;
RootTag : string;
SaveFolder: string;
begin
// XMLiniファイルに書き込む。
Root := XMLDocument1; // XMLDocument1の名前を変更した時の影響を減らすため。
RootTag := ExtractFileName(ChangeFileExt(Application.ExeName, ''));

Root.XML.Text := '<' + RootTag + '></' + RootTag + '>'; // XMLのルート部分をEXEファイル名に
Root.Options := [doNodeAutoIndent]; // オートインデントをON
Root.Active := True; // Active を True にしないと書き込まれない

settingsXML := TXmlIniFile.Create(Root.DocumentElement);
try
settingsXML.WriteInteger('Form', 'Width' , Form1.Width );
settingsXML.WriteInteger('Form', 'Height', Form1.Height );

settingsXML.WriteString('Path', 'TempSaveFolder', SaveFolder);

Root.SaveToFile(ChangeFileExt(Application.ExeName, '.xml')); // 書き込み実行

finally
settingsXML.Free;
end;
end;


質問した掲示板を見て2013年3月2日 改変:
procedure TForm1.Button1Click(Sender: TObject);
var
Root : IXMLDocument;
SettingsXML: TXMLIniFile;
RootTag : string;
SaveFolder: string;
begin
// XMLiniファイルに書き込む。
RootTag := ExtractFileName(ChangeFileExt(Application.ExeName, ''));
Root := NewXMLDocument();

Root.AddChild( RootTag ); // XMLのルート部分をEXEファイル名に
Root.Options := [doNodeAutoIndent]; // オートインデントをON
Root.Active := True; // Active を True にしないと書き込まれない

SettingsXML := TXmlIniFile.Create(Root.DocumentElement);
try
SettingsXML.WriteInteger('Form', 'Width' , Self.Width );
SettingsXML.WriteInteger('Form', 'Height', Self.Height );

SettingsXML.WriteString('Path', 'TempSaveFolder', SaveFolder);

Root.SaveToFile(ChangeFileExt(Application.ExeName, '.xml')); // 書き込み実行

finally
SettingsXML.Free;
end;
end;



で保存されるXMLは
[PR]

by arigayas | 2013-03-01 10:33 | Delphi Programming | Trackback(1) | Comments(0)
[2013年2月16日更新] 7zip と Subversion を使って chaika チェックアウトして xpi を作るバッチファイル
2ch の chaika スレッドで話題になっていたので自分が作ったchaika の開発版取得バッチファイルを公開しておきます。
svn というか Subversion と 7-Zip がインストールされている環境で実行出来るはずです。
svn checkout http://chaika.googlecode.com/svn/trunk/ R:\chaika-read-only
R:
cd chaika-read-only
for /r %%i in ( .svn ) do ( if exist "%%i" ( rmdir /s /q "%%i"))
cd chaika
"C:\Program Files\7-Zip\7z.exe" a R:\chaika-read-only\chaika-nt.zip R:\chaika-read-only\chaika\*.*
"C:\Program Files\7-Zip\7z.exe" a R:\chaika-read-only\chaika-nt.zip R:\chaika-read-only\chaika\chrome
"C:\Program Files\7-Zip\7z.exe" a R:\chaika-read-only\chaika-nt.zip R:\chaika-read-only\chaika\components
"C:\Program Files\7-Zip\7z.exe" a R:\chaika-read-only\chaika-nt.zip R:\chaika-read-only\chaika\defaults
"C:\Program Files\7-Zip\7z.exe" a R:\chaika-read-only\chaika-nt.zip R:\chaika-read-only\chaika\modules
move R:\chaika-read-only\chaika-nt.zip R:\chaika-nt.xpi
cd \
rmdir /s /q R:\chaika-read-only


[2013年2月16日更新] .svn フォルダが作成されない export というオプション?を知ったついでに大きく更新。
svn export http://chaika.googlecode.com/svn/trunk/chaika R:\chaika-trunk
R:
cd chaika-trunk
"C:\Program Files\7-Zip\7z.exe" a chaika-nt.zip *.*
"C:\Program Files\7-Zip\7z.exe" a chaika-nt.zip chrome
"C:\Program Files\7-Zip\7z.exe" a chaika-nt.zip components
"C:\Program Files\7-Zip\7z.exe" a chaika-nt.zip defaults
"C:\Program Files\7-Zip\7z.exe" a chaika-nt.zip modules
move R:\chaika-trunk\chaika-nt.zip R:\chaika-nt.xpi
cd \
rmdir /s /q R:\chaika-trunk


R:D: とか適宜、自分の環境に合わせて変えてください。


R:C: にした場合最後の3行は消してください。
Windows Vista 以降(確か)では通常 C: ドライブ直下にファイルを置くには管理者権限が必要になるため
move C:\chaika-trunk\chaika-nt.zip C:\chaika-nt.xpi
と書くとC: ドライブ直下に移動させる事が出来ずに削除されるため。


どうでも良い情報ですが何故 R: になっているかと書くと RAM ディスクのドライブを R: にしているからです。
[PR]

by arigayas | 2013-02-03 16:39 | Mozilla/Firefox/TB | Trackback | Comments(0)
さくらインターネット の レンタルサーバーへのMantis 1.2.12のインストール
比較的インストールが簡単らしいMantis のインストールに四苦八苦したので記録。
スタンダードプランを使用してます。

このブログを参考にさせていただきました。→ Mantis 導入(インストール)メモ | ishwt::tracking

パソコンには7-zipを入れてあるので
Mantis Bug Tracker | Download ←ここのStable release から MantisBT 1.2.12 (mantisbt-1.2.12.tar.gz) をダウンロードした。

さくらインターネットのサーバコントロールパネルにログインしてMantis を動かすデータベースを作成する。
  1. 「アプリケーションの設定」の「データベースの設定」をクリック。
  2. 「データベースの新規作成」をクリック。
データベース名: ????_任意の文字 (????にはFTPアカウント名が入る)
パスワード:任意の半角英数と一部記号(-_)を混ぜたもの。
データベース文字コード:UTF-8 (文字化けをしそうという予想から)

mantis をサーバへ転送
  1. ダウンロードして保存した mantisbt-1.2.12.tar.gz を mantisbt-1.2.12.tar に展開する。
  2. 展開した mantisbt-1.2.12.tar を FTP でさくらのレンタルサーバーのwwwフォルダ 直下へ転送。
  3. さくらインターネットのサーバコントロールパネル「運用に便利なツール」の「ファイルマネージャ」をクリック。
  4. wwwフォルダ 直下を開いて mantisbt-1.2.12.tar を右クリックして「リモートで解凍」をクリックして展開する。
  5. mantisbt-1.2.12 というフォルダが出来るので名前をmantisに変更する。


設定ファイルの編集
  1. ローカルにある mantisbt-1.2.12.tar を更に展開して
  2. mantisbt-1.2.12 フォルダ直下にある config_inc.php.sampleconfig_inc.php としてコピー。
  3. 上で作成したデータベースのサーバの設定を config_inc.php に書き込む。
#$g_hostname = "localhost"; ←念のため残した。
#$g_db_username = "root"; ←念のため残した。
#$g_db_password = ""; ←念のため残した。
#$g_database_name = "bugtracker"; ←念のため残した。
#$g_db_type = "mysql"; ←念のため残した。

$g_hostname = "mysql###.db.sakura.ne.jp"; (###には数字)
$g_db_username = "<FTPアカウント名>";
$g_db_password = "<設定したパスワード>";
$g_database_name = "<作成したデータベース名>";
$g_db_type = "mysql"; ←そのまま

以下のメールアドレスを適当に御変更する
$g_administrator_email = '@example.com';
$g_webmaster_email = '@example.com';
$g_from_email = '@example.com';
$g_return_path_email = '@example.com';

#↓日本語表記にするために必要
$g_default_language = 'japanese';

編集し終わったら保存してFTPでレンタルサーバへupする。

FTPで上げたフォルダやファイルの属性を755にする。(これでPHPファイルが実行可能になる。)


http://????.sakura.ne.jp/mantis/admin/install.php にアクセスすると
b0003577_928095.png

こんな感じの画面が出てくる(編集したconfig_inc.phpを未転送時の画面)

編集したconfig_inc.phpを転送済みだと
「Hostname (for Database Server) 、
Username (for Database) 、Password (for Database) 、
Database name (for Database) 」の値が埋まっているはず。
あとは
Admin Username <FTPアカウント名>
Admin Password <設定したパスワード>
Print SQL Queries instead of Writing to the Database <チェックしない>

として「Install/Upgrade Database」をクリック。

インストールに成功すると
[PR]

by arigayas | 2013-01-17 10:10 | Soft | Trackback | Comments(3)
[2012年8月2日] ニコニコ動画 全体メンテナンス中にニコ生のXMLを取得して見ると [API]
というTwitterのツイートが流れてきたので記録しておく。


<nicolive_api status="fail">
 <error>
   <code>maintenance</code><description>maintenance mode</description>
 </error>
</nicolive_api>


こんなXMLが帰ってきた。
b0003577_813615.png



そんな備忘録。
[PR]

by arigayas | 2012-08-02 08:02 | 雑記 | Trackback | Comments(0)
HTML5の絵本 を読んだ。
b0003577_18281253.gif

HTML5の絵本 - 株式会社アンク/翔泳社:SEShop.com

2012年5月末に買ってからチビチビ読んでいたから正確なことは書けないけど、一応感想を書いておく。

続き
[PR]

by arigayas | 2012-07-19 18:52 | | Trackback | Comments(0)
[2ch] サクラエディタふぁんくらぶ part15 [コピペ] - 複数行にコメントアウトを簡単にする方法
サクラエディタふぁんくらぶ part15 の 427さん
427 名無しさん@お腹いっぱい。 [sage] 2012/06/29(金) 21:27:51.36 ID:fEBVm2t30 Be:
左端でAlt+↓で矩形選択。

必要な行だけ↓おしてから//


行頭からAlt+↓で矩形選択して
矩形選択状態の時に // などのコメントアウト記号を入れる。

サクラエディタ wiki → SakuraEditorWiki
[PR]

by arigayas | 2012-06-29 21:47 | Soft | Trackback | Comments(0)
Delphi XE Pro - コンボボックスやリストボックスで項目の文字列を取得する
b0003577_782341.png
procedure TForm1.Button1Click(Sender: TObject);
var
val: Int8; // 何番目のリストか取得用
vals: string; // 項目の文字列
begin
val := ComboBox1.ItemIndex;
ShowMessage(IntToStr(val));

vals := ComboBox1.Items[ComboBox1.ItemIndex];
ShowMessage(vals);
end;

[PR]

by arigayas | 2012-06-06 03:50 | Delphi Programming | Trackback | Comments(0)
[2ch] くだすれDelphi(超初心者用)その54 [コピペ] - ウィンドウ終了時に行われる処理?
くだすれDelphi(超初心者用)その54
http://toro.2ch.net/test/read.cgi/tech/1325028195/515-516

515 デフォルトの名無しさん [sage] 2012/05/07(月) 21:48:20.26 ID: Be:
  なんか荒れてるけどスレタイに沿って超低レベル質問を・・・

  Delphi6 Personalを使ってWindowsXP上で色々と試している最中なんですが
  アプリケーションのFormの右上に出てくる×ボタンを押した時、
  なんのイベントが発生するのでしょうか。

  ×ボタンを押したらonCloseに設定した正常終了の流れに
  載せたいのに、無視されてそのまま終了してしまふ

516 デフォルトの名無しさん [sage] 2012/05/07(月) 22:00:46.91 ID: Be:
  OnCloseQuery→OnClose→OnDestroy

Delphi とかの本には書いていそうだけどメモ。
[PR]

by arigayas | 2012-05-08 01:15 | Delphi Programming | Trackback | Comments(0)
Delphi XE Pro - SelectDirectory を使って(マイ) コンピュータを開く
Twitter に
SelectDirectory 関数?を使う時に(マイ) コンピュータを初期値として開きたいけど、どうすれば良いんだろう?
と書いた。

特になにも引数を与えずに SelectDirectory を使うとWindows 7では
b0003577_1838074.png
このようなダイアログが開かれるんだけどネットワークフォルダーとかを選択されると
エラー処理すべきことが増えそうなので制限したいと思って聞いてみた。

しばらくして
DirがStringの変数として。こんな感じの謎の呪文を
SelectDirectory('', '::{20D04FE0-3AEA-1069-A2D8-08002B30309D}', Dir);
とするといいよ。とReplyをいただいたので実際にやってみたら、
b0003577_18402097.png

やりたいことが出来ました。
Windows XP SP3 なパソコンでも動いたので Vista でも問題ないと思う。

以下コード。

More
[PR]

by arigayas | 2012-04-25 19:13 | Delphi Programming | Trackback | Comments(0)
Delphi XE Pro - バルーンヒントを動的に書き換える
Edit の幅が狭いというか 短くて見えない場合の対処方法としてバルーンヒントを出すことにした。

標準機能でEdit のイベントの onChange をクリックして以下を記述する。
procedure TForm1.EditChange(Sender: TObject);
begin
Edit.Hint := Edit.Text;
end;



BalloonHint を使った場合のコード。

BalloonHint の関連づけのやり方はこの動画を見た。


procedure TForm1.EditChange(Sender: TObject);
begin
Edit.Hint := 'URLは |' + Edit.Text + '|1';
end;

最後の「1」はヒントタイトルの位置を表していて1だと中央になって
0」にすると左寄せになる。


embarcadero のドキュメント:Controls.TCustomHint - XE2 API Documentation

バグがあったらごめんなさい。
[PR]

by arigayas | 2012-04-13 21:21 | Delphi Programming | Trackback | Comments(0)