Page 2 of 2 FirstFirst 1 2
Results 16 to 26 of 26

Thread: Message while printing

  1. #16
    Senior Member
    Join Date
    Sep 2004
    Location
    BELGIE(Vilvoorde)
    Posts
    685

    Exclamation

    rvk,
    Jouw laatste code is inderdaad ee betere oplossing om een "Wachten/Bezig" boodschap te tonen.
    De code gaat mijn petje te boven, maar is wel heel welkom.

    Misschien nog een 'beautiful' gadget zoals een teller!
    Een aftelling van 6 sec. naar 0 sec. en vervolgens wordt de boodschap gesloten.

    Als je geen tijd hebt ... dan geen probleem ... het is maar een gadget.
    DANK.

  2. #17
    Quote Originally Posted by seghele View Post
    Misschien nog een 'beautiful' gadget zoals een teller!
    Een aftelling van 6 sec. naar 0 sec. en vervolgens wordt de boodschap gesloten.
    Zoiets. Het probleem is dat ik alleen niet weet hoe en waar je precies het tellertje wilt hebben.

    Delphi Code:
    1. type
    2.   TMyEvents = class(TComponent)
    3.   public
    4.     procedure DoeOnTimer(Sender: TObject);
    5.     procedure DoeOnFormClose(Sender: TObject; var Action: TCloseAction);
    6.   end;
    7.  
    8. procedure TMyEvents.DoeOnTimer(Sender: TObject);
    9. var
    10.   Lab: TLabel;
    11.   Tim: TTimer;
    12. begin
    13.   Lab := TLabel(TForm(TTimer(Sender).Owner).FindComponent('lbSeconden'));
    14.   Tim := TTimer(TForm(TTimer(Sender).Owner).FindComponent('tmSeconden'));
    15.   if (Tim <> nil) and (Lab <> nil) then
    16.   begin
    17.     Tim.Tag := Tim.Tag - 1;
    18.     Lab.Caption := Tim.Tag.ToString;
    19.     if Tim.Tag <= 0 then TForm(TTimer(Sender).Owner).Close;
    20.   end;
    21. end;
    22.  
    23. procedure TMyEvents.DoeOnFormClose(Sender: TObject; var Action: TCloseAction);
    24. begin
    25.   Action := caFree;
    26. end;
    27.  
    28. function MaakMelding(CaptionValue: string; Timeout: Integer = 6; Kleur: TColor = clInfoBk): TForm;
    29. var
    30.   Events: TMyEvents;
    31. begin
    32.   Result := TForm.Create(Application);
    33.   try
    34.     Events := TMyEvents.Create(Result);
    35.     Result.Height := Round(80 * (Result.PixelsPerInch / 96));
    36.     Result.Width := Round(200 * (Result.PixelsPerInch / 96));
    37.     Result.BorderStyle := bsDialog;
    38.     Result.OnClose := @Events.DoeOnFormClose;
    39.     Result.Left := Screen.WorkAreaWidth - Result.Width - 4;
    40.     Result.Top := Screen.WorkAreaHeight - GetSystemMetrics(SM_CYCAPTION) - 4 - Result.Height;
    41.     Result.Color := clInfoBk;
    42.  
    43.     with TTimer.Create(Result) do
    44.     begin
    45.       Name := 'tmSeconden';
    46.       Tag := TimeOut;
    47.       Interval := 1000;
    48.       OnTimer := @Events.DoeOnTimer;
    49.       Enabled := True;
    50.     end;
    51.  
    52.     with TLabel.Create(Result) do
    53.     begin
    54.       Parent := Result;
    55.       Align := alClient;
    56.       Alignment := taCenter;
    57.       Layout := tlCenter;
    58.       Font.Size := 14;
    59.       Caption := CaptionValue;
    60.     end;
    61.  
    62.     with TLabel.Create(Result) do
    63.     begin
    64.       Name := 'lbSeconden';
    65.       Parent := Result;
    66.       Left := 10;
    67.       Top := 10;
    68.       Font.Size := 9;
    69.       Caption := TimeOut.ToString;
    70.     end;
    71.  
    72.     Result.Show;
    73.  
    74.   except
    75.     on E: Exception do
    76.       Result.Free;
    77.   end;
    78. end;
    79.  
    80. procedure TFmain.MenuItemPRINTClick(Sender: TObject);
    81. var
    82.   dl: TForm;
    83. begin
    84.   if QuestionDlg('KEUZE !', 'Gegevens afdrukken?' + #13 + '', mtConfirmation,
    85.     [mrYes, 'OK', mrNo, 'Annuleren'], '') = mrYes then
    86.   begin
    87.  
    88.     dl := MaakMelding('Printer is bezig');
    89.     try
    90.       PrintStringGrid(StringGrid1, 'Print Stringgrid Wiezen ' +
    91.         formatdatetime('dd' + '/' + 'mm' + '/' + 'YYYY', Now));
    92.     finally
    93.       // dl.Free; // vrijgeven moet niet omdat dat vanzelf gebeurd
    94.     end;
    95.  
    96.   end;
    97. end;

    Click image for larger version. 

Name:	aUZ2O6R.png 
Views:	123 
Size:	4.7 KB 
ID:	7709

  3. #18
    Senior Member
    Join Date
    Sep 2004
    Location
    BELGIE(Vilvoorde)
    Posts
    685

    Exclamation

    Dank.

    Zit nog even vast ....
    Code:
    procedure TMyEvents.DoeOnTimer(Sender: TObject);
    var
      Lab: TLabel;
      Tim: TTimer;
      begin
        Lab := TLabel(TForm(TTimer(Sender).Owner).FindComponent('lbSeconden'));
        Tim := TTimer(TForm(TTimer(Sender).Owner).FindComponent('tmSeconden'));
        if (Tim <> nil) and (Lab <> nil) then
        begin
         Tim.Tag := Tim.Tag - 1;
         Lab.Caption := Tim.Tag.ToString;  
          if Tim.Tag <= 0 then TForm(TTimer(Sender).Owner).Close;
        end;
    end;
    Lab.Caption := Tim.Tag.ToString; -> ERROR illegal qualifier !

  4. #19
    O, bij mij werkt dat wel.
    .ToString is een string helper maar misschien heeft CodeTyphon die niet.
    (heb ik twee keer gebruikt in de code)

    Je kunt i.p.v. Tim.Tag.ToString ook IntToStr(Tim.Tag) gebruiken.
    Verderop in de code moet je dan ook TimeOut.ToString veranderen in IntToStr(TimeOut).

  5. #20
    .ToString zit in fpc (in ieder geval in 3.0.4), geen idee welke fpc TC gebruikt.

    Bart

  6. #21
    Quote Originally Posted by Bart B View Post
    .ToString zit in fpc (in ieder geval in 3.0.4), geen idee welke fpc TC gebruikt.
    CodeTyphon. Alleen geen idee welke versie.
    Ik weet ook niet of/wanneer CodeTyphon de string-helpers zal toevoegen (of dus hun fpc-fork zal updaten). Je kunt ze natuurlijk zelf toevoegen maar dat leek me de moeite niet waard in dit voorbeeld.

    Quote Originally Posted by seghele View Post
    Gebruik CodeTyphon in Windows8.1.

  7. #22
    Senior Member
    Join Date
    Sep 2004
    Location
    BELGIE(Vilvoorde)
    Posts
    685
    Ter info: Ik gebruik CodeTyphon v.5.5 & FPC-3.1.1 in Windows 8.1.


    Heb enkele wijzigingen gedaan, daarom de voorlopige laatste versie v.d. code:
    Code:
    // ***begin: nodig voor function MaakMelding*******************************
    procedure TMyEvents.DoeOnTimer(Sender: TObject);
    var
      Lab: TLabel;
      Tim: TTimer;
      begin
        Lab := TLabel(TForm(TTimer(Sender).Owner).FindComponent('lbSeconden'));
        Tim := TTimer(TForm(TTimer(Sender).Owner).FindComponent('tmSeconden'));
        if (Tim <> nil) and (Lab <> nil) then
        begin
          Tim.Tag := Tim.Tag - 1;
          Lab.Caption := IntToStr(Tim.Tag);//Tim.Tag.ToString; => werkt niet in CodeTyphon
          if Tim.Tag <= 0 then TForm(TTimer(Sender).Owner).Close;
        end;
    end;
    
    procedure TMyEvents.DoeOnFormClose(Sender: TObject; var Action: TCloseAction);
    begin
      Action := caFree;
    end;
    // ****************************************
    //function MaakMelding: nodig om een boodschap te tonen bij Printen.
    function MaakMelding(CaptionValue: string; Timeout: Integer = 6; Kleur: TColor = clInfoBk): TForm;
    var
      Events: TMyEvents;
    begin
        Result := TForm.Create(Application);
        try
         Events := TMyEvents.Create(Result);
         Result.Height := Round(100 * (Result.PixelsPerInch / 96));
         Result.Width := Round(200 * (Result.PixelsPerInch / 96));
         Result.BorderStyle := bsDialog;
         Result.OnClose := @Events.DoeOnFormClose;
         Result.Left := Screen.WorkAreaWidth - Result.Width - 4;
         Result.Top := Screen.WorkAreaHeight - GetSystemMetrics(SM_CYCAPTION) - 4 - Result.Height;
         Result.Color := clInfoBk;
         with TTimer.Create(Result) do
         begin
           Name := 'tmSeconden';
           Tag := TimeOut;
           Interval := 1000;
           OnTimer := @Events.DoeOnTimer;
           Enabled := True;
         end;
         with TLabel.Create(Result) do
         begin
           Parent := Result;
           Align := alClient;
           Alignment := taCenter;
           Layout := tlCenter;
           Font.Size := 18;
           Font.Style:= [fsBold];
           Font.Color := clRed;
           Caption := CaptionValue;
           Color := clYellow;
         end;
         with TLabel.Create(Result) do
         begin
           Name := 'lbSeconden';
           Parent := Result;
           Left := 90;
           Top := 10;
           Font.Size := 13;
           Font.Style := [fsBold];
           Caption := IntToStr(TimeOut);//TimeOut.ToString; => werkt niet in CodeTyphon
         end;
         Result.Show;
        except
         on E: Exception do
         begin
           Result.Free;
           Events.Free;
         end;
        end;
    end;
    Er blijft nog 1 Warning over:
    variable 'dl" is assigned but never used
    *******************************

    Verder werkt alles prima.

  8. #23
    Omdat je het resultaat in dl niet meer gebruikt zou je de hele "dl :=" en dl variabele kunnen verwijderen.

  9. #24
    Senior Member
    Join Date
    Sep 2004
    Location
    BELGIE(Vilvoorde)
    Posts
    685

    Question

    rvk,

    Ik begrijp niet waar de tekst v.d. melding moet
    Code:
    MaakMelding('Printer is bezig!');

    Code:
    procedure TFmain.MenuItemPRINTClick(Sender: TObject);
    var
      dl: TForm;
    begin
      if QuestionDlg('KEUZE !', 'Gegevens afdrukken?' + #13 + '', mtConfirmation,
            [mrYes, 'OK', mrNo, 'Annuleren'], '') = mrYes then
      begin
         dl := MaakMelding('Printer is bezig!');
         try
            PrintStringGrid(StringGrid1, 'Print Stringgrid Wiezen ' +
                formatdatetime('dd' + '/' + 'mm' + '/' + 'YYYY', Now));
         finally
             //dl.Free; // vrijgeven moet niet omdat dat vanzelf gebeurd
         end;
      end;
    end;

  10. #25
    Als je niets met het resultaat van MaakMelding() doet dan hoef je die ook niet toe te kennen aan de variabele dl. Dan krijg je dus dit:
    Code:
    procedure TFmain.MenuItemPRINTClick(Sender: TObject);
    begin
      if QuestionDlg('KEUZE !', 'Gegevens afdrukken?' + #13 + '', mtConfirmation,
            [mrYes, 'OK', mrNo, 'Annuleren'], '') = mrYes then
      begin
         MaakMelding('Printer is bezig!');
         PrintStringGrid(StringGrid1, 'Print Stringgrid Wiezen ' +
                formatdatetime('dd' + '/' + 'mm' + '/' + 'YYYY', Now));
      end;
    end;
    Ondanks dat MaakMelding() een functie is hoef je die niet perse als functie aan te roepen (zoals je in bovenstaand voorbeeld ziet).

  11. #26
    Senior Member
    Join Date
    Sep 2004
    Location
    BELGIE(Vilvoorde)
    Posts
    685

    Thumbs up

    Ik heb de aanpassng gedaan en nu loopt alles op wieltjes.

    Hartelijk dank.

Page 2 of 2 FirstFirst 1 2

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •