Results 1 to 2 of 2

Thread: Probleem met een component, OpenDialog opent zich bij inladen van een toepassing

  1. #1

    Probleem met een component, OpenDialog opent zich bij inladen van een toepassing

    Hallo allemaal,

    Er is een probleem met onderstaande component. In run-time werkt de component uitstekend, maar bij het inladen van een programma waar deze component wordt gebruikt wordt OpenDialog gestart en wordt er om een filenaam gevraagd. Om hier uit te komen gebruik ik dan maar de knop Annuleren. Hoe is dit te voorkomen?

    Met een vriendelijke groet, Frans

    Code:
    {==============================================================================
     Naam component    : proef
     Maker             : 
     Copyright (c)     : Geen
     Versie            : 
     Datum             : 22-02-2018
     Doel              : 
     Componenten palet : Samples
    
     Component         : Delphi en Lazarus
    
    
     Naam .PNG-bestand : TTest.PNG       (Lazarus)
     Naam .LRS-bestand : Test_icon.lrs   (Lazarus)
    
     Historie          : Datum       Omschrijving
                         ----------  ------------------------------------------------
                         22-02-2018  Start ontwikkeling component
    
    
    
    
         TComponent
           |
           +--- TTest
    
    
    ==============================================================================}
    
    
    Unit proef;
    
    {$IFDEF FPC} 
     {$MODE Delphi} 
    {$ENDIF} 
    
    Interface
    
    Uses
    {$IFNDEF FPC}
      Windows,
    {$ELSE}
      LCLIntf,
      LCLType,
      LMessages,
      LResources,
    {$ENDIF}
      Messages,
      SysUtils,
      Variants,
      Classes,
      Graphics,
      Controls,
      Forms,
      Dialogs,
      StdCtrls,
      ExtCtrls;
    
    
    Type
      TTest = Class(TComponent)
      Private     { Private declarations }
        FIn_FileName: STRING;
        FIn_FileKeuze: BOOLEAN;
        PROCEDURE SetIn_FileKeuze(Value: BOOLEAN);
      Protected   { Protected declarations }
      Public      { Public declarations }
        Constructor Create(AOwner : TComponent); Override;
        Destructor Destroy; Override;
        Function Execute : Boolean;
      Published   { Published declarations }
        Property Tag;
        PROPERTY In_FileName: STRING read FIn_FileName write FIn_FileName;
        PROPERTY In_FileKeuze: BOOLEAN read FIn_FileKeuze write SetIn_FileKeuze;
      End;
    
    
    Procedure Register;
    
    Implementation
    
    {==============================================================================
     Procedure : Register
     Maker     : 
     Datum     : 22-02-2018
     Argument  : 
     Resultaat : 
     Doel      : Registreren van de component
    ==============================================================================}
    
    Procedure Register;
    Begin
      // Verwijder "//" in onderstaande regel als dit bestand is gemaakt
      //{$I Test_icon.lrs}
      RegisterComponents('Samples', [TTest]);
    End;
    
    
    {==============================================================================
     Procedure : Create
     Maker     : 
     Datum     : 22-02-2018
     Argument  : Sender: TObject
     Resultaat : Geen
     Doel      : Initiatie van de component
    ==============================================================================}
    
    Constructor TTest.Create(AOwner : TComponent);
    Begin
      Inherited Create(AOwner);
    End;
    
    
    {==============================================================================
     Procedure : Destroy
     Maker     : 
     Datum     : 22-02-2018
     Argument  : Geen
     Resultaat : Geen
     Doel      : 
    ==============================================================================}
    
    Destructor TTest.Destroy;
    Begin
      Inherited Destroy;
    
    End;
    
    
    {==============================================================================
     Function  : Execute
     Maker     : 
     Datum     : 22-02-2018
     Argument  : Geen
     Resultaat : True of False
     Doel      : Uitvoeren
    ==============================================================================}
    
    Function TTest.Execute : Boolean;
    Begin
      Result := False;
    End;
    
    PROCEDURE TTest.SetIn_FileKeuze(Value: BOOLEAN);
      VAR
        OpenDialog: TOpenDialog;
      BEGIN
        IF csDesigning IN ComponentState THEN
        BEGIN
          OpenDialog := TOpenDialog.Create(nil);
          TRY
            OpenDialog.Filter := '*.CSV|*.CSV';
            IF OpenDialog.Execute THEN
            BEGIN
              FIn_FileName := OpenDialog.filename;
            END;
          FINALLY
            OpenDialog.Free;
          END;
        END;
      END;
    {******************************************************************************}
    
    
    Initialization
      //RegisterClass(T...)
    
    End.

  2. #2
    Moet dit:
    Delphi Code:
    1. IF csDesigning IN ComponentState THEN
    niet dit zijn?
    Delphi Code:
    1. IF NOT(csDesigning IN ComponentState) THEN

    csDesigning is in de ComponentState bij het ontwerpen (en dus laden) van je project. De In_FileKeuze moet natuurlijk gezet worden (omdat het component wordt geladen) en je OpenDialog wordt getriggered.

    Ik vindt het trouwens raar dat dit in runtime wel zou werken want dan is csDesigning niet in ComponentState en zou de OpenDialog dus niet mogen komen

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
  •