Delphi6 Labelの表示切り替え方法とコピー中のラベル点滅について

このQ&Aのポイント
  • Delphi初心者です。ファイルをコピーする処理を作っています。ボタンをクリックしたときファイルのコピーを開始するのですが、コピー中のメッセージを表示しようと思います。
  • 現在、LabelのVisibleを正しく切り替えることができません。コピーが終了してからLabelが表示されるため、何が悪いのか分かりません。
  • さらに、コピー中はラベルを点滅させる方法がわかればベストです。Delphi6でのラベルの表示切り替えと点滅方法について教えてください。
回答を見る
  • ベストアンサー

Delphi6 Labelの表示を切り替える

Delphi初心者です。 ファイルをコピーする処理を作っています。 ボタンをクリックしたときファイルのコピーを開始するのすが、ファイル容量が大きいので ”コピー中”というメッセージを表示しょうと思います。 Labelにメッセージを書いて、このLabelのVisibleをFalseにし、ボタンをクリックしたときにTrueにしているのですが、うまくできません。ソースの一部は以下の通りです。 Label.Visible := True; CopyFile('C:\KBISDATA.MDB','E:\KBISDATA.MDB',False); Application.MessageBox('バックアップが完了しました。','データバックアップ処理',mb_ok); exit; この方法では、コピーが終了してからLabelのVisibleがTrueになります(ラベルが表示される)。 一体何が悪いのでしょうか? また、できればコピー中はラベルを点滅できればベストなのですが・・・。 以上、よろしくお願いします。

  • pon_s
  • お礼率88% (101/114)

質問者が選んだベストアンサー

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

突っ込んだ質問に回答出来る知識はありませんが、、、 Refresh を入れたらどうでしょうか? あと、現状だとコピーの成否に関係なく完了メッセージが出るので戻り値で分岐させてます。  Label1.Visible := True;  Self.Refresh;  if CopyFile('C:\KBISDATA.MDB','E:\KBISDATA.MDB',False) then    Application.MessageBox('バックアップが完了しました。','データバックアップ処理', MB_OK + MB_ICONEXCLAMATION)  else    Application.MessageBox('バックアップ失敗','データバックアップ処理', MB_OK + MB_ICONERROR) ; ------- ラベルの点滅は解りませんが、SHFileOperation を使うとWindows標準のコピーダイアログを出せます。 uses 節に 「ShellAPI」 と追加記入する必要があります。 procedure TForm1.Button2Click(Sender: TObject); var  Fo: TSHFileOpStruct; FromFile, ToFile: string; begin  FromFile:='C:\KBISDATA.MDB' + #0;  ToFile := 'E:\KBISDATA.MDB' + #0;  with  Fo  do begin    wnd  :=  Handle;    wFunc :=  FO_COPY;    pFrom :=  PChar(FromFile);    pTo  :=  PChar(ToFile);    fFlags :=  FOF_FILESONLY or FOF_ALLOWUNDO;  end;  SHFileOperation(Fo); end;

pon_s
質問者

お礼

回答ありがとうごあいます。 Refresh で解決できました。 また、それ以外のアドバイスありがとうございます。 今の自分には難しく思えますがトライしてみます。

関連するQ&A

  • Delphi 6

    いつもお世話になりありがとうございます。 Delphi 6についてご教授お願い致します。 CopyFileにてファイルをコピーしているのですが、 コピーできない時があります。 サイズの大きいファイルとか関係あるのでしょうか? ************************************************ CopyFile('C:\TEST1.TXT', 'Z:\TEST1.TXT', False); CopyFile('C:\TEST2.TXT', 'Z:\TEST2.TXT', False); CopyFile('C:\TEST3.TXT', 'Z:\TEST3.TXT', False); というように連続でコピーしたいのですが・・・

  • 単純な質問で恐縮です。

    単純な質問で恐縮です。 コマンドボタン1を押したら、ラベル1が消えて、ラベル2が表示させるようにしたいのですが動きません。 Private Sub CommandButton1_Click() Label1.Visible = False Label2.Visible = True end sub どうしてでしょうか?

  • 時間のかかる処理中にメッセージを表示したい。

    はじめまして、宜しくお願いします。 現在Access2002でDBはSQLサーバーを使って、 下記のことを実行しようと思っております。 やりたいことは、タイトルにも書いたように、 処理中にメッセージを出したいのですが、思うようにできず行き詰っております。 やっていることは 処理開始というコマンドボタンを作成して、そのクリックイベントに 下記のようなソースを記述します。 Private Sub 処理開始_Click() Dim i As Long Dim X As Long Me!処理中表示ラベル.Visible = True SysCmd acSysCmdInitMeter, "只今、処理中です…", 100 For i = 0 To 1000000 X = X + 1 SysCmd acSysCmdUpdateMeter, i Next i SysCmd acSysCmdRemoveMeter Me!処理中表示ラベル.Visible = False MsgBox X End Sub 処理が始まる前に Me!処理中表示ラベル.Visible = True でラベルを表示して、 Me!処理中表示ラベル.Visible = False でラベルを非表示にしているのですが、処理中にラベルが表示されません。 仕方がないのでクリックイベント以外の先に行われるマウスダウンイベントに Private Sub コマンド0_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Me!ラベル1.Visible = True End Sub を書くと表示されるのですが 他の用途も考えて やはりクリックイベントの中で行いたいと思っております。 基本的な部分で見落としているところがあるかもしれませんが なにか気づかれた方はご教授ください。 宜しくお願いします。

  • Label2.visible=false

    任意の関数式を入れるとグラフを描くプログラムを作りました。表示するのに時間がかかる(といっても1秒程度ですが)ので「計算中!」と赤で表示させ、グラフが描き終わると消したいと思い、グラフ開始時にLabel2.Visible=True、終了時にLabel2.Visible=Falseを付けましたが、思惑通りには行きません。何故でしょう。おわかりになる方、教えてください。

  • ユーザーフォームの描画が遅れるのは?

    ExcelのVBAで簡単な処理をしているのですが、困っています。 ユーザーフォームにラベル1つとコマンドボタンを2つ用意しました。 ラベルには「・・・よろしいですか?」と質問形式の文章を 表示し、コマンドボタンにはそれぞれ「OK」と「キャンセル」を 表示してあります。 「OK」のコマンドボタンをクリックされたら、2つのコマンドボタン のvisibleプロパティをfalseにして隠し、ラベルには 「しばらくお待ちください。」と表示してセルの計算をさせます。 私の考えでは、コマンドボタンが消えラベルに「しばらく・・」が 表示されてから計算が行われセル上に計算結果が 表示されるはずなのですが、何故か計算結果が全て表示されてから コマンドボタンが消え、ラベルに「しばらく・・」と表示され 次の命令を実行してしまいます。 何がいけないのかが分かりません。 宜しくお願いいたします。 Private Sub CommandButton1_Click()  UserForm1.CommandButton1.Visible=False  UserForm1.CommandButton2.Visible=False  UserForm1.Label1.Caption="しばらくお待ちください。" '計算のsubへ飛ぶ  Call Keisan  UserForm1.Label1.Caption="終了しました。" End Sub

  • コントロールの表示・非表示

    C++Builder6を使用しています。 コントロールをあらかじめ配置しておき, ボタンを押すことでコントロールを表示(使用可能) したり,非表示(使用不可)にしたりしたいです。 ボタンは表示用と非表示用の2つを用意しました。 そこで コンポーネント->Visible = True; コンポーネント->Visible = False; のような記述をしました。 が,Trueにはできるのですが,Falseができません。 Show,Hideも試してみたのですが,やはりHideができません。 デフォルトはFalseの状態で見えないようにしています。 一度TrueにするとFalseにはできないのでしょうか。 アドバイスをお願いします。

  • Delphiによるファイルのコピー

    初歩的な質問で恐縮です。 「Delphi6」というツールを友人にすすめられ使いはじめました。 そもそもプログラムの知識などないのですが(VBAを少しやった程度です)、 いきなりは無謀でしょうか? それはともかく、目的はハードディスクにある特定のファイルをMOなどにコピーするだけです。コピーするファイルは常に同じです。イメージとしてはアイコンをクリックするだけでコピーし、コピー終了後に「コピーが終了しました」みたいなメッセージを表示するだけです。 ドライブにディスクが装着されていないなどのエラー処理も必要でしょうが、 とりあえずコピーができればOKです。 Helpをみると「CopyFile」という関数を使えばよさそうなのですが、文法がわかりません。どなたかお分かりの方お教えください(初歩的な質問でごめんなさい)。

  • MDIParent1に、ToolStripButton1とLabel1

    MDIParent1に、ToolStripButton1とLabel1、Label2を 配置しています。 やりたいことは  (1)ToolStripButton1をクリックしてForm1を表示させる。  (2)Label1をクリックしてForm1のTextをLabel1のTextに変更する。  (3)Label2をクリックしてForm1のTextをLabel2のTextに変更する。 最初に表示させたForm1のTextのみを変更させる。 現在下記のプログラムを実行したのですが Label1をクリックすると新たにForm1が表示されてしまいます。 (Form1のTextはLabel1のTextに変更されている) Label2をクリックすると新たにForm1が表示されてしまいます。 (Form1のTextはLabel2のTextに変更されている) クリックする毎にForm1がふえていきます。 対策方法を教えてください。 Public Class MDIParent1 Dim F1 As Form1  Private Sub ToolStripButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton1.Click Dim frm As New Form1 frm.MdiParent = Me frm.Show() End Sub   Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.Click F1 = New Form1 F1.Visible = True F1.Text = Label1.Text Label1.BorderStyle = BorderStyle.Fixed3D Label2.BorderStyle = BorderStyle.None End Sub   Private Sub Label2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label2.Click F1 = New Form1 F1.Visible = True F1.Text = Label2.Text Label2.BorderStyle = BorderStyle.Fixed3D Label1.BorderStyle = BorderStyle.None End Sub End Class

  • XPが私のラベル文字を表示してくれないのです???

    C# ラベルに文字を表示し、そのラベルごと画面イメージ全体を取込みます 取込みが終ったらラベル文字を消去し、先に取込んだ画面イメージをPictureBoxに表示します PictureBoxには『これが画面に表示されます』と表示されたラベルも含めて画面イメージが映っております Windows7、Vistaでは確認したらOKでした //label1のプロパティ label1.Text には空白、Visibleにはfalseが設定されています Bitmap ScreenSaving = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height); //画面サイズの領域を用意します label1.Text = "これが画面に表示されます"; label1.Visible = true; this.TopMost = true; Graphics g = Graphics.FromImage(ScreenSaving); //Graphicsの作成 g.CopyFromScreen(new Point(0, 0), new Point(0, 0), ScreenSaving.Size); //画面全体をコピーする g.Dispose(); label1.Text = ""; //画面コピー後に直ちにに消去 pictureBox1.Image = ScreenSaving; //コピーした画面を表示 ところがXPで同じプログラムを実行するとPictureBoxのラベルは空白のままです 画面をジッと直視していると画面が一瞬チラリと動きます 文字自体は肉眼では読取れませんが、チラリとしたのでラベルは表示されているのでしょう では何故XPはラベルを表示した状態の画面を読取らないのでしょうか? Windows7、VistaとXPでは画面表示のタイミング等々に差あるのでしょうか? XPで瞬間的に表示したラベルを画面から読取るにはどうしたら良いのでしょうか? ご指導宜しくお願い申し上げます 追伸】上述の『同じプログラムを実行する』とはVisual Studioでインスローラを作り、それをセットアップしました Windows7、Vista、XPで別々にビルドした訳ではありません

  • マウスが触れるとテキストを表示し離れる非表示にする

    アクセスです。 フォームにラベルを設置して、 そのラベルにマウスが触れたらテキストボックスを表示させたいのです。 フォームのオープンイベントは Private Sub Form_Open(Cancel As Integer) Me.テキスト2.Visible = False End Sub になっています。 ラベルのマウスボタン解放時イベントで Private Sub ラベル0_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) Me.テキスト2.Visible = True End Sub にして、ラベルをクリックするとテキストボックスが表示されます。 マウスボタン移動時イベントで Private Sub ラベル0_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Me.テキスト2.Visible = True End Sub にすると、理想通りラベルからマウスが触れたらテキストボックスが表示されます。 ここまではいいのですが マウスのカーソルが離れたら またテキストボックスを非表示にしたいのですがどうすればいいですか?

専門家に質問してみよう