Results 1 to 2 of 2

Thread: Panel array op een Panel

  1. #1

    Panel array op een Panel

    Hallo allemaal,

    Ik heb een component gemaakt waarbij op een Panel een array van Panel's wordt geplaatst. Op zich werkt dit uitstekend.
    Er is echter een maar en dat is dat in de ontwikkel fase ik een Panel uit de array kan verwijderen wat ogenblikkelijk een fout melding geeft en Lazarus wordt afgesloten. Is er een oplossing dat in de ontwikkelfase het niet mogelijk is om een Panel te verwijderen?
    In onderstaande lijst heb ik deze component toegevoegd.

    Met een vriendelijke groet, Frans Dubbeld

    Code:
    UNIT LzW10BtnArray;
    
    {$IFDEF FPC} 
     {$MODE Delphi} 
    {$ENDIF} 
    
    INTERFACE
    
    USES
    {$IFNDEF FPC}
      Windows,
    {$ELSE}
      LCLIntf,
      LCLType,
      LMessages,
      LResources,
    {$ENDIF}
      Messages,
      SysUtils,
      Variants,
      Classes,
      Graphics,
      Controls,
      Forms,
      Dialogs,
      ComCtrls,
      StdCtrls,
      ExtCtrls;
    
    TYPE
      TLzW10BtnArr = CLASS(TPanel)
      PRIVATE     { Private declarations }
        FBtnArr : ARRAY[0..9] OF TPanel;
        FRuimte : ARRAY[0..9] OF INTEGER;
      PROTECTED   { Protected declarations }
      PUBLIC      { Public declarations }
        CONSTRUCTOR Create(AOwner : TComponent); OVERRIDE;
        DESTRUCTOR Destroy; OVERRIDE;
        PROCEDURE Paint; OVERRIDE;
      PUBLISHED   { Published declarations }
        PROPERTY Hint;
        PROPERTY ShowHint;
        PROPERTY Tag;
      END;
    
    
    PROCEDURE Register;
    
    IMPLEMENTATION
    
    PROCEDURE Register;
      BEGIN
    {$IFDEF FPC} 
        // Verwijder "//" in onderstaande regel als dit bestand is gemaakt
        //{$I LzW10BtnArr_icon.lrs}
    {$ENDIF} 
        RegisterComponents('LzWindows 10', [TLzW10BtnArr]);
      END;
    
    CONSTRUCTOR TLzW10BtnArr.Create(AOwner : TComponent);
      VAR
        I : INTEGER;
    
      BEGIN
        INHERITED Create(AOwner);
        Height := 100;
        Width := 300;
        FOR I := 0 TO 9 DO
        BEGIN
          FBtnArr[I] := TPanel.Create(AOwner);
          FBTnArr[I].Parent := self;
          FBtnArr[I].BorderWidth := 4;
        END ;
      END;
    
    DESTRUCTOR TLzW10BtnArr.Destroy;
      BEGIN
        INHERITED Destroy;
      END;
    
    PROCEDURE TLzW10BtnArr.Paint;
      VAR
        I : INTEGER;
      BEGIN
        INHERITED Paint;
        FOR I := 0 TO 9 DO
        BEGIN
          FBtnArr[I].Left := I * 70+ 4;
          FBtnArr[I].Width := 66;
          FBtnArr[I].Top := 22;
          FBtnArr[I].Height := 70;
          FBtnArr[I].Color := clYellow;
        END;
      END;
    
    
    {******************************************************************************}
    
    
    INITIALIZATION
      //RegisterClass(T...)
    
    END.

  2. #2
    Twee dingen die ik me afvraag.

    Volgens mij moet je de owner van je subpanelen ook Self maken.
    Dus FBtnArr[I] := TPanel.Create(Self);
    Als de owner je programma is dan heb je daar dus ook alle mogelijkheden om die panels te wijzigen. En dat wil je dus niet.

    Daarna moet je dacht ik ook FBtnArr[I].SetSubComponent (True); doen zodat de properties van die subpanelen ook opgeslagen worden bij het component.

    En je zult dan zien dat je je subpanelen niet meer in je programma ziet die dit component gebruikt maar dat moet je daarna met properties oplossen.

    http://etutorials.org/Programming/ma...nd+Components/

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
  •