<   2013年 04月 ( 3 )   > この月の画像一覧

Delphi XE Pro - ステータスバーの表示を数秒後に消すには?[3秒後にしました]
ステータスバーの表示を数秒後に消すには?
と任意の秒数後に表示を消したい的な質問して回答をいただました。

しかし処理した内容(途中経過)の表示に使おうとして実行したら例外が出るようになってしまって
どうしたらいいのかわからないので手に負えないのでソースから削除しました(´;ω;`)

でTwitterでDEKOさんの回答の参照先の筆者さんのLynaさんから以下のような助言をもらった。
「OnTimer内でTimer1.Enabled:=False;とした上で目的の処理を続けて書くと良いと思います。」
ので書き直してみた。

フォームに Timer を貼ってプロパティの Interval には 3秒 という意味の3000と入れてます。
b0003577_21221434.png
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if not (StatusBar1.SimpleText ='') then
begin
Timer1.Enabled := false;
StatusBar1.SimpleText :='';
end;
end;
として試しにFormCreateする時に
StatusBar1.SimpleText :='テスト中'; 
と入れると起動後3秒後にステータスバーから「テスト中」という文字列は消えました。
しかしこれだとTimerが止まっているので他のところのボタンとかに
StatusBar1.SimpleText :='2回目のテスト'; 
と入れても消えてくれません。
消えるようにするにはTimerを動かすようにするために
StatusBar1.SimpleText :='2回目のテスト'; 
と書く前に
Timer1.Enabled := True;
を入れないといけません。

しかしいちいちいろんなところで
Timer1.Enabled := True;
StatusBar1.SimpleText :='hogehoge';
を書き込むのは面倒なので以下のようにまとめてみました。
procedure TForm1.StatusBarInfo(i: Integer);
begin
Timer1.Enabled := True;
case i of
0 : StatusBar1.SimpleText :=''; // Clear
1 : StatusBar1.SimpleText :='ファイルパスを確認しました';
2 : StatusBar1.SimpleText :='ファイルをダウンロードが完了しました';
3 : StatusBar1.SimpleText :='';
4 : StatusBar1.SimpleText :='';
5 : StatusBar1.SimpleText :='';
6 : StatusBar1.SimpleText :='';
7 : StatusBar1.SimpleText :='';
8 : StatusBar1.SimpleText :='';
9 : StatusBar1.SimpleText :='99999';
else
begin
ShowMessage('無設定ですよ');

StatusBarInfo(0);
end;
end;

end;

Timerを動かして文字列を書き込んでTForm1.Timer1TimerでTimerを止めた後にステータスバーから文字列を削除されるはず。
で他のところからは「StatusBarInfo(数字)」で呼びたいメッセージ番号を書くという感じにしてみました。
たぶんこのソース、まだ改良点があるんだろうなぁ・・・。

2013年4月30日追記その1: with do文を使ってみた。
procedure TForm1.StatusBarInfo(i: Integer);
begin
Timer1.Enabled := True;
with StatusBar1 do
begin
case i of
0 : SimpleText :=''; // Clear
1 : SimpleText :='ファイルパスを確認しました';
2 : SimpleText :='ファイルをダウンロードが完了しました';
3 : SimpleText :='';
4 : SimpleText :='';
5 : SimpleText :='';
6 : SimpleText :='';
7 : SimpleText :='';
8 : SimpleText :='';
9 : SimpleText :='99999';
10: SimpleText :='';
else
begin
ShowMessage('無設定');

StatusBarInfo(0);
end;
end;
end
end;
上記のようなwith do文を使っている中に
10:StatusBar1.SimpleText :='';
として潜り込ませてみも動いたのはちょっとビックリしたw

2013年4月30日追記その2:
button1をクリックして「StatusBarInfo(1) の文字列」と「StatusBarInfo(2) の文字列」を続けて表示したい場合に
処理;
StatusBarInfo(1);
処理;
処理;
StatusBarInfo(2);
処理;
と書くとStatusBarInfo(1);のタイマーが有効のままStatusBarInfo(2);が呼ばれるので実行時には一瞬変わったかも?と思うぐらいの時間しか「StatusBarInfo(2) の文字列」が表示されません。
ぼけーっと見ていたら「StatusBarInfo(2) の文字列」が表示されずに消えますw
この様にならない為に
処理;
StatusBarInfo(1);
処理;
処理;
Timer1.Enabled := False; // 一旦タイマーを止める意味で無効にする。
StatusBarInfo(2);
処理;
と書くと「StatusBarInfo(1) の文字列」と「StatusBarInfo(2) の文字列」がちゃんと表示される。
// 2013年4月30日追記終わり

以下は勘違いかもですが、
[PR]

by arigayas | 2013-04-27 21:18 | Delphi Programming | Trackback | Comments(0)
Delphi XE Pro - XMLファイルの値取得がわからない 【"略"を変更】
例えば以下のようなXMLファイルがあったとする。
<?xml version="1.0"?>
<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:em="http://www.mozilla.org/2004/em-rdf#">
<Description>
<em:description>ソフト説明</em:description>
<em:name>テスト</em:name>
<em:version>0.0.1</em:version>
</Description>
</RDF>
追記:2013年4月18日21時13分xmlns:em のURI?を略さずに書くことにしました。


これの<em:name>テスト</em:name>の「テスト」という値(文字列)を取得方法がわからない。
しかも<em:name>の位置は不確定なので決め打ちが出来ないので困りもの。
試しに以下のようなDelphiのコードを書いた。
procedure TForm2.Button1Click(Sender: TObject);
var
DirPath: string;
document1: IXMLDocument;
Description1st: IXMLNode;
node: IXMLNode;
numString: int16;

begin
if OpenDialog1.Execute then
begin
DirPath := OpenDialog1.FileName;

Form2.Caption := DirPath;

document1 := LoadXMLDocument(DirPath);
Memo1.Lines.Add('+++++++++++');

node := document1.DocumentElement;
Memo1.Lines.Add(node.NodeName); // RDF

node := document1.DocumentElement.ChildNodes.First;
Memo1.Lines.Add(node.NodeName); // Description

node := document1.DocumentElement.ChildNodes.First.ChildNodes.First;
Memo1.Lines.Add(node.NodeName); // em:description

numString := document1.DocumentElement.ChildNodes.First.ChildNodes.Count;
Memo1.Lines.Add(IntToStr(numString)); // 4

numString := document1.DocumentElement.ChildNodes.First.ChildNodes.First.ChildNodes.Count;
Memo1.Lines.Add(IntToStr(numString)); // 1

node := document1.DocumentElement.ChildNodes.First.ChildNodes.First.ChildNodes.First;
Memo1.Lines.Add(node.NodeName); // #text
Memo1.Lines.Add(node.Text); // ソフト説明

node := document1.DocumentElement.ChildNodes.First.ChildNodes.First.ChildNodes['name'];
Memo1.Lines.Add(node.NodeName); // em:name
Memo1.Lines.Add(node.Text); // null

node := document1.DocumentElement.ChildNodes[0].ChildNodes.First.ChildNodes['em:name'].ChildNodes.First;
Memo1.Lines.Add(node.NodeName); // #text
Memo1.Lines.Add(node.Text); // null
Memo1.Lines.Add(BoolToStr(node.HasChildNodes)); // 0 って


Memo1.Lines.Add('+++++++++++');
end;

end;

end.

node := document1.DocumentElement.ChildNodes[0].ChildNodes.First.ChildNodes['em:name'].ChildNodes.First.Textがnullになるのは何故?

まぁXMLをわかっていないのがバレバレですけどね(苦笑)

山本隆 さんの回答を元にアレンジしてみました。
[PR]

by arigayas | 2013-04-18 01:19 | Delphi Programming | Trackback(1) | Comments(4)
2013年4月からのアニメ
2013年1月からのアニメ へのリンク。
5分ぐらいは赤文字。

2011年10月以前から放送開始
  • ワンピース
2011年10月から放送開始
  • HUNTER×HUNTER

2012年4月から放送開始
  • 宇宙兄弟

2013年1月から放送開始
  • ちはやふる2
  • 天元突破グレンラガン [TOKYO MXで再放送]
  • ニコニコ動画で配信分
    • ヘタリア The Beautiful World
    • 直球表題ロボトアニメ [2月から放送と配信開始して4月に終了]


2013年4月から放送開始
  • ガッ活! 第2シリーズ
  • 進撃の巨人
  • RDG(レッドデータガール) [ニコ生のみの配信なので]
  • 翠星のガルガンティア [ニコ生のみの配信なので]
  • サイクロプス少女さいぷ~ [3月からYoutube][2013年5月28日追記]
  • 精霊の守り人 [2013年5月24日からGyaOで配信開始 / 6月12日から視聴開始(一気に8話まで見た)][2013年6月22日追記]
  • ニコニコ動画で配信分
    • 絶対防衛レヴィアタン [GREE枠]
    • よんでますよ、アザゼルさん。Z
    • 波打際のむろみさん
    • はたらく魔王さま!
    • 俺の妹がこんなに可愛いわけがない。
    • 惡の華
    • 断裁分離のクライムエッジ
    • 這いよれ! ニャル子さんW
    • 銀河機攻隊 マジェスティックプリンス
    • 革命機ヴァルヴレイヴ
    • とある科学の超電磁砲S
    • 秘密結社 鷹の爪 MAX
    • スパロウズホテル [2013年5月28日追記]
    • やはり俺の青春ラブコメはまちがっている。[2013年5月28日追記]
    • ゆゆ式 [2013年5月28日追記]
    • 血液型くん! [2013年5月28日追記]
    • あいうら [2013年5月28日追記]


More
[PR]

by arigayas | 2013-04-15 05:00 | 雑記 | Trackback(1) | Comments(0)