TFrameStand component and PasCon conference

During the last few months, I’ve been working on a new component for FireMonkey: TFrameStand.

The purpose of this component is to use TFrame(s) in FireMonkey applications (mobile or not) adding the developer an opportunity to reuse some parts of the UI (including effects and transitions) while showing the frame content to the user.

You can think as the frame will be given a stand (thus the TFrameStand name) that can be applied to any frame.

The frame itself can vary a lot, from a simple button (think at the floating buttons of Android’s Material Design) to a full frame with data or UI controls on it (a view of a mobile app), but the behavior involved in showing it might be shared (think about a LightBox effect or some sliding transitions that can be consistent through all the application).

The component (and some demos) are available at this GitHub repository. There will be an article on next issue of Blaise Pascal Magazine about TFrameStand and I will be showcasing it at the PasCon conference (on September, 15th in Leiden) in the afternoon (english) session “Build stunning FMX app with TFrameStand: Effectively use frames in your FMX mobile app with TFrameStand”.

Some developers already tested TFrameStand a bit and feedback is good!
Comments or questions will be appreciated! More news and example will come in the next weeks 😉

Andrea

3 thoughts on “TFrameStand component and PasCon conference

  1. Stephane WIERZBICKI says:

    Hello,

    Thank you for this nice component !. I have a small feature request, is it meaningful to extend function Show this way ? :

    function Show(const ABackgroundTask: TProc<TFrameInfo> = nil;
    const AOnTaskComplete: TProc<TFrameInfo> = nil;
    const AOnTaskCompleteSynchronized: Boolean = True): ITask;

    to

    function Show(const ABackgroundTask: TProc<TFrameInfo> = nil;
    const AOnTaskBegin: TProc<TFrameInfo> = nil;
    const AOnTaskBeginSynchronized: Boolean = True;
    const AOnTaskComplete: TProc<TFrameInfo> = nil;
    const AOnTaskCompleteSynchronized: Boolean = True): ITask;
    begin
    Result := nil;
    FireCustomBeforeShowMethods;
    if Assigned(FrameStand) and Assigned(FrameStand.OnBeforeShow) then
    FrameStand.OnBeforeShow(FrameStand, TFrameInfo(Self));

    if not FireCustomShowMethods then
    DefaultShow;
    FireShowAnimations;

    if Assigned(ABackgroundTask) then
    begin
    Result := TTask.Create(
    procedure
    begin

    if Assigned(AOnTaskBegin) then
    begin
    if AOnTaskBeginSynchronized then
    TThread.Synchronize(nil,
    procedure
    begin
    AOnTaskBegin(Self);
    end
    )
    else
    AOnTaskBegin(Self);
    end;

    ABackgroundTask(Self);

    if Assigned(AOnTaskComplete) then
    begin
    if AOnTaskCompleteSynchronized then
    TThread.Synchronize(nil,
    procedure
    begin
    AOnTaskComplete(Self);
    end
    )
    else
    AOnTaskComplete(Self);
    end;
    end
    ).Start;
    end;
    end;

Leave a Reply to Stephane WIERZBICKI Cancel reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.