Results 1 to 11 of 11

Thread: Hoe breng ik inlogdialog weer naar voren, v????r aanvang programma?

  1. #1
    Silly member NGLN's Avatar
    Join Date
    Aug 2004
    Location
    Werkendam
    Posts
    5,117

    Hoe breng ik inlogdialog weer naar voren, v????r aanvang programma?

    In mijn Projectfile heb ik onderstaande code staan die eerst een globale ADOConnection opent. Het inlogdialog komt keurig op de voorgrond te staan, echter bij een verkeerde aanmelding, en na een messagebox, verdwijnt het inlogdialog van de ADOConnection naar de achtergrond en heeft ook geen focus meer.
    Code:
    function TryOpenDatabaseConnection: Boolean;
      const
        HC_WRONGUSERNAME = 5003029;  //Ongeldige accountnaam of wachtwoord
        HC_WRONGPASSWORD = 5003029;
        HC_CANCELEDBYUSER = 1240661; //Bewerking is geannuleerd door de gebruiker
      var
        TryLoginAgain: Boolean;
      begin
        Result := False;
        ...
        repeat
          TryLoginAgain := False;
          try
            GlobalADOConnection.Open;
            Result := True;
          except
            on E: Exception do begin
              case E.HelpContext of
                HC_WRONGUSERNAME or HC_WRONGPASSWORD: begin
                  TryLoginAgain := True;
                  MsgBox(E.Message + #13#10#10 + 'Probeer het nogmaals, ' +
                         'of sluit af met "Cancel".', Mb_Ok + Mb_IconError);
                end;
                HC_CANCELEDBYUSER: begin
                  MsgBox(E.Message, Mb_Ok + Mb_IconInformation);
                  Application.Terminate;
                end;
                else begin
                  MsgBox('Er is een onbekende fout opgetreden:'#13#10#10 +
                         E.Message + #13#10#10'Breng uw systeembeheerder ' +
                         'hiervan op de hoogte.', Mb_Ok + Mb_IconError);
                  Application.Terminate;
                end;
              end;
            end else begin
              Application.HandleException(GlobalADOConnection);
              Application.Terminate;
            end;
          end;
        until not TryLoginAgain;
      end;
    
    begin
      HWindow := FindWindow('TApplication', 'Planning');
      if HWindow <> 0 then begin
        if IsIconic(HWindow) then ShowWindow(HWindow, SW_Restore)
         else SetForeGroundWindow(HWindow)
      end else begin
        Application.Title := 'Planning';
        Application.Initialize;
        if TryOpenDatabaseConnection then begin
          Application.CreateForm(TMainForm, MainForm);
          Application.CreateForm(TPlanItemDialog, PlanItemDialog);
          Application.CreateForm(TAboutBox, AboutBox);
        end;
        Application.Run;
      end;
    end.
    Iemand enig idee?
    (Sender as TNLDUser).Signature := 'Groeten van Albert';

  2. #2
    Kan je het venster opzoeken en aan de hand van de handle het venster tonen?
    DeX 3 Delphi := The ease of VB with the power of C; Zoekt en gij zult vinden

  3. #3
    Silly member NGLN's Avatar
    Join Date
    Aug 2004
    Location
    Werkendam
    Posts
    5,117
    Ja, maar ken de ClassType van het inlogdialog niet.
    (Sender as TNLDUser).Signature := 'Groeten van Albert';

  4. #4
    WinSight gebruiken om dat op te zoeken kan ook of een andere spy
    DeX 3 Delphi := The ease of VB with the power of C; Zoekt en gij zult vinden

  5. #5
    Silly member NGLN's Avatar
    Join Date
    Aug 2004
    Location
    Werkendam
    Posts
    5,117
    O ja, natuurlijk! Trouwens, denk niet dat het werkt, want de .Open procedure roept het het inlogdialog op. Deze is daarvoor en daarna niet bereikbaar en zou echt niet weten hoe ik tijdens een procedure, andere code kan opstarten...
    (Sender as TNLDUser).Signature := 'Groeten van Albert';

  6. #6
    Silly member NGLN's Avatar
    Join Date
    Aug 2004
    Location
    Werkendam
    Posts
    5,117
    Ha ha, hij heet "TLoginDialog" . What's in an name?

    Maar goed, hoe nu verder?
    (Sender as TNLDUser).Signature := 'Groeten van Albert';

  7. #7
    notice-itter SvG's Avatar
    Join Date
    Apr 2002
    Location
    's-Hertogenbosch
    Posts
    4,865
    Een thread gebruiken die jouw TLoginDialog gaat zoeken, eenmaal gevonden, even naar voren brengen, en klaar is NGLN
    !

  8. #8
    Silly member NGLN's Avatar
    Join Date
    Aug 2004
    Location
    Werkendam
    Posts
    5,117
    Aha, daar gebruik je dus threads voor. Het was me tot nu toe gelukt daar niet in te hoeven duiken , maar als er geen andere oplossing is, dan moet ik de stap toch maar eens wagen... en daarmee zal NGLN niet zomaar klaar zijn .
    (Sender as TNLDUser).Signature := 'Groeten van Albert';

  9. #9
    Silly member NGLN's Avatar
    Join Date
    Aug 2004
    Location
    Werkendam
    Posts
    5,117
    Jippiehajee !! Mijn eerste Thread!!! Sorry SvG, vond je artikel toch nog een beetje ingewikkeld (als beginner ), maar samen met vriend F1 ben ik eruit gekomen. Het werkt buitengewoon.
    Code:
    type
      TLoginDialogSearchThread = class(TThread)
        procedure Execute; override;
      end;
    
    function TryOpenDatabaseConnection: Boolean;
    var
      LoginDialogSearchThread: TLoginDialogSearchThread;
    begin
      ...
      try
        LoginDialogSearchThread := TLoginDialogSearchThread.Create(False);
        GlobalADOConnection.Open;
        LoginDialogSearchThread.Free;
        Result := True;
      except
      ...
    end;
    
    procedure TLoginDialogSearchThread.Execute;
    var
      HW: THandle;
    begin
      HW := FindWindow('ADODB.AsyncEventMessenger', '');
      if HW <> 0 then begin
        SetForeGroundWindow(HW);
        Terminate;
      end;
    end;
    Heb ik natuurlijk nog wel de vraag of er opmerkingen zijn...
    Last edited by NGLN; 27-Jan-05 at 02:13.
    (Sender as TNLDUser).Signature := 'Groeten van Albert';

  10. #10
    Silly member NGLN's Avatar
    Join Date
    Aug 2004
    Location
    Werkendam
    Posts
    5,117
    Zat nog een geheugenlekje in...
    Code:
        ...
        try
          LoginDialogSearchThread := TLoginDialogSearchThread.Create(False);
          LoginDialogSearchThread.FreeOnTerminate := True;
          GlobalADOConnection.Open;
          Result := True;
        except
          ...
    (Sender as TNLDUser).Signature := 'Groeten van Albert';

  11. #11
    Silly member NGLN's Avatar
    Join Date
    Aug 2004
    Location
    Werkendam
    Posts
    5,117
    De Thread was totaal overbodig (en deed waarschijnlijk dan toch ook niet datgene wat ik dacht dat hij deed):
    Code:
    function TryOpenDatabaseConnection: Boolean;
    begin
      ...
      try
        SetForeGroundWindow(FindWindow('ADODB.AsyncEventMessenger', ''));
        GlobalADOConnection.Open;
        Result := True;
      except
      ...
    end;
    schijnt ook te werken .
    (Sender as TNLDUser).Signature := 'Groeten van Albert';

Thread Information

Users Browsing this Thread

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

Similar Threads

  1. Hoe verander ik een ISAPI project naar een CGI project, en weer terug?
    By Marcel in forum Internet- en web applicaties
    Replies: 0
    Last Post: 01-Nov-01, 23:47

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
  •