Results 1 to 2 of 2

Thread: Probleem met een eigen component met een style maken

  1. #1

    Probleem met een eigen component met een style maken

    Goedendag,

    Momenteel probeer ik een eigen component te maken op basis van TButton, aan de hand van de handleiding van Embarcadero zelf. (Let er op dat de docwiki offline is, hij is ook te vinden in de offline help files)

    Het probleem is echter het stukje code:
    Code:
    function TDialogButtonPanel.GetStyleObject: TControl;
    const
      Style = 'MyPanelButtonsStyle';
    begin
      if (FStyleLookup = '') then
      begin
        Result := TControl(TStyleManager.LoadFromResource(HInstance, Style,
          RT_RCDATA));
        Exit;
      end;
      Result := inherited GetStyleObject;
    end;
    Voor TButton wordt deze function GetStyleObject: TFmxObjtect, maar het probleem is dat FStyleLookup een private field zijn van TStyledControl en ik er dus helemaal niet bij mag.

    Mijn vraag is dus: hoe moet dit dan wel? Hoe zorg je er correct voor dat een style in een BPL gevoegd wordt?

    Mijn code:
    Code:
    unit UMyButton;
    
    interface
    
    uses
      System.SysUtils, System.Classes, FMX.Types, FMX.Controls,
      FMX.Controls.Presentation, FMX.StdCtrls;
    
    type
      TMyButton = class(TButton)
      private
        {}
      protected
        function GetStyleObject: TFmxObject; override;
      public
        { Public declarations }
      published
        {}
      end;
    
    procedure Register;
    
    implementation
    
    {$R *.res}
    
    procedure Register;
    begin
      RegisterComponents('Additional', [TMyButton]);
    end;
    
    { TMyButton }
    
    function TMyButton.GetStyleObject: TFmxObject;
    const
      Style = 'MyButtonStyle';
    begin
      if (FStyleLookup = '') then
      begin
        Result := TControl(TStyleManager.LoadFromResource(HInstance, Style, RT_RCDATA));
        Exit;
      end;
      Result := inherited GetStyleObject;
    end;

  2. #2
    Na veel pijn en moeite is het me eindelijk gelukt om een .style correct toe te voegen aan een zelfgemaakte BPL. Het blijkt dat Embarcadero hun documentatie gewoon niet bij werkt.

    De code zoals hij hoort te zijn:
    Code:
    unit UMyUnit;
    
    interface
    
    uses
      System.SysUtils, System.Classes, System.Types, FMX.Types, FMX.Controls,
      FMX.Controls.Presentation, FMX.StdCtrls, FMX.Styles;
    
    {types ...}
    
    implementation
    
    {$R 'YourRCFile.res'} // Important!
    
    {...}
    
    function TMyButton.GetStyleObject: TFmxObject;
    const
      Style = 'MyButtonStyle';
    begin
      if StyleLookup = '' then
      begin
        Result := TControl(TStyleStreaming.LoadFromResource(HInstance, Style, RT_RCDATA));
        Exit;
      end;
      Result := inherited GetStyleObject;
    end;
    Vervolgens is het ook belangrijk dat je .style die je toe past een root object is met de juiste naam: 'MyButtonStyle'.

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
  •