Results 1 to 9 of 9

Thread: schowmodal vs show

  1. #1
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747

    schowmodal vs show

    In VCL zijn we gruwelijk 'verwend' met TForm.showmodal en zijn TModalresults.
    Dit kan je vergeten in FM. Showmodal bestaat dan wel, maar wordt ten strengste afgeraden (zeker met dialogs).
    Maar hoe ga je dan om met TForm.Show?

    Normaliter. Start je een showmodal op, doe je ding, kijk wat .e.v.t. modalresult doet en handel de rest af. TForm.show start een nieuw form op en gaat verder waar deze is gebleven. Maar hoe vang je dan alles op van de form, die opgestart is met TForm.Show. eigenlijk gaat deze een 'eigen leven' leiden. Bij een andoid kan ik het enigszins begrijpen, omdat alle schermen fullscreen zijn en je geen mogelijkheid krijg om naar het vorige scherm te gaan. Maar In windows / Mac is je desktop een stuk groter en kan je gewoon switchen naar een ander scherm. Eigenlijk wordt elk scherm een 'losse' aaplicatie.
    Delphi is great. Lazarus is more powerfull

  2. #2
    Quote Originally Posted by jkuiper View Post
    Maar hoe vang je dan alles op van de form, die opgestart is met TForm.Show.
    Af en toe controleren of dat form nog bestaat en de eigenschappen uitlezen. Je zou met een globale recordstructuur kunnen werken die je vult in dat form (als je zeker weet dat er maar één van dat soort form kan bestaan). Anders moet je de form niet vrijgeven (geen Action := caFree equivalent doen in FM) en kun je na het sluiten van dat form nog gewoon bij zijn eigenschappen.

    Is er overigens een reden waarom Showmodal afgeraden wordt? Ik kan me voorstellen dat je in sommige gevallen niet wilt dat je hele UI hangt op het weergeven van een modal-form maar in andere gevallen is het wel weer wenselijk (b.v. bij een login-form).

  3. #3
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    Gokje: In veel GUIs (zelfs *nix klassiek) heeft een programma geen of weinig controle over het focussen van windows. Dat is puur iets van de windows manager en de gebruiker. En voor mobiele targets geldt dat ook.

    Portable omgevingen trekken je nu eenmaal richting de laagste gemene deler.

  4. #4
    Fornicatorus Formicidae VideoRipper's Avatar
    Join Date
    Mar 2005
    Location
    Vicus Saltus Orientalem
    Posts
    5,708
    Ik weet dat je de vergelijking niet mag maken (en ik ken FireMonkey verder niet), maar in uniGUI geven "Modal"-forms
    (zoals een opendialog) een event af wanneer ze gesloten worden, omdat echt modal daar ook niet bestaat.

    Kent FM niet zoiets?
    TMemoryLeak.Create(Nil);

  5. #5
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Geen idee. Ik ben een VCL applicatie over aan het zetten naar Firemonkey. Maar dat geeft hetzelfde gevoel van een XE+ applicatie overzetten naar Lazarus.
    Delphi is great. Lazarus is more powerfull

  6. #6
    Waarschijnlijk de FMX.Forms.TCloseEvent. (of FMX.Forms.TCloseQueryEvent als je het sluiten nog even wilt controleren en weigeren)

  7. #7
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Is alleen voor c++
    Delphi is great. Lazarus is more powerfull

  8. #8
    Quote Originally Posted by jkuiper View Post
    Is alleen voor c++
    Ok, dan mag ik toch aannemen dat je wel de "normale" OnClose kunt gebruiken.
    FMX.Forms.TCommonCustomForm.OnClose
    FMX.Forms.TCommonCustomForm.OnCloseQuery

    Desnoods zou je een eigen OnMyClose-event handler kunnen maken die je standaard in de OnClose(Query) aanroept (indien die assigned is).

  9. #9
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    De normale onClose is er ook. Maar dat is niet het probleem.
    Ik vind het gewoon lastig om elk form te maken als een compleet apart unit. Met TForm.show kan je terug gaan naar het vorige form en dan weer hetzelfde form openen als nieuw form. Dan heb je eigenlijk 2 dezelfde forms, die wel onafhankelijk werken mar niet dezelfde info mag bevatten als het eerste opgeroepen scherm. Ook wordt het nogal rommelig.

    Ik weet heus wel dat het een manier van programmeren is. Ik zei al, je raakt er aan gewend om een scherm op showmodal() te zetten en dan alles af te werken voordat het vorige scherm verder gaat waar deze was gebleven (op timer functies na dan).

    Een van de reden dat ik voor Delphi heb gekozen is dus deze functie.
    Delphi is great. Lazarus is more powerfull

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
  •