{"id":14645,"date":"2022-10-08T15:27:33","date_gmt":"2022-10-08T09:57:33","guid":{"rendered":"https:\/\/jassweb.com\/solved\/solved-showmodal-for-an-associated-form\/"},"modified":"2022-10-08T15:27:33","modified_gmt":"2022-10-08T09:57:33","slug":"solved-showmodal-for-an-associated-form","status":"publish","type":"post","link":"https:\/\/jassweb.com\/solved\/solved-showmodal-for-an-associated-form\/","title":{"rendered":"[Solved] ShowModal for an associated form"},"content":{"rendered":"<p> [ad_1]<br \/>\n<\/p>\n<div id=\"answer-44329982\" class=\"answer js-answer accepted-answer js-accepted-answer\" data-answerid=\"44329982\" data-parentid=\"44328974\" data-score=\"0\" data-position-on-page=\"1\" data-highest-scored=\"1\" data-question-has-accepted-highest-score=\"1\" itemprop=\"acceptedAnswer\" itemscope itemtype=\"https:\/\/schema.org\/Answer\">\n<div class=\"post-layout\">\n<div class=\"votecell post-layout--left\"><\/div>\n<div class=\"answercell post-layout--right\">\n<div class=\"s-prose js-post-body\" itemprop=\"text\">\n<p>You added in the comments that you are setting FForm to be equal to a valid existing form.  If so, you may not need to create anything:<\/p>\n<pre><code>procedure TMyComp.Execute_FormShowModal;\nvar\n  frm: TFormUser;\n\nbegin\n   frm:= TFormUser(FForm);\n\n   frm.BtnOK.Enabled:=False;\n\n   frm.ShowModal;\n   \/\/frm.Free;\nend;\n<\/code><\/pre>\n<p>This assumes that this valid instance you are referring to is declared <\/p>\n<pre><code>type\n   TFormUser = class(TForm)\n      BtnOK : TButton;\n\n      \/\/ etc...\n   end;\n<\/code><\/pre>\n<p>If you trying to make a copy of the form you might use this:<\/p>\n<pre><code>procedure TMyComp.Execute_FormShowModal;\n\nvar\n   frm: TFormUser;\n\nbegin\n   frm:= TFormUser(TFormClass(FForm.ClassType).Create(FParentForm)); \n\n   \/\/ which is no different than:\n\n   frm:= TFormUser.Create(FParentForm)); \n\n   frm.BtnOK.Enabled:=False;\n   frm.ShowModal;\n   frm.Free;\nend;\n<\/code><\/pre>\n<p>If you want to manipulate the controls on the form (i.e. BtnOK), then you need to know the class type of the Form (TFormUser in this case).  So it is contradictory to be required to know the exact class type of the form and yet want to instanciate a form from a design-time established type.<\/p>\n<hr>\n<p>Since you may be trying to instanciate the form without &#8220;knowing&#8221; its absolute type, your FForm property should be the <strong>class<\/strong> for the form.<\/p>\n<p>Assuming you weren&#8217;t publishing the &#8220;Form&#8221; property in your component, I would make these changes to your component:<\/p>\n<pre><code>TMyComp = class(TComponent)\n   FFormClass : TFormClass;\n\n   procedure SetFormClass(Value : TFormClass);\n   property  FormClass: TFormClass read FFormClass write SetFormClass;\n\n   procedure Execute_FormShowModal;\nend;\n<\/code><\/pre>\n<p>The initialization code you referred to might look like this:<\/p>\n<pre><code>begin\n  \/\/ .....\n\n  \/\/MyComp.Form := FormUser1;\n\n  MyComp.FormClass := TFormUser;\n\n  \/\/ .....\n\nend;\n<\/code><\/pre>\n<p>And then &#8220;Execute_FormShowModal&#8221; becomes:<\/p>\n<pre><code>procedure TMyComp.Execute_FormShowModal;\n\nvar\n   frm: TForm;\n\nbegin\n   \/\/ Check that FFormClass is not nil and perform some alternate\n   \/\/  action.\n   \/\/ if FFormClass = nil then ......\n   \/\/\n   frm:= FFormClass.Create(FParentForm); \n   frm.ShowModal;\n   frm.Free;\nend;\n<\/code><\/pre>\n<p>Of course, you may also want to add some code to check if FFormClass is nil and preform some alternate behavior if so, like raise an exception or showing some message or even instanciating a default form.<\/p>\n<hr>\n<p>If you were publishing the Form property then it won&#8217;t be able to handle the case where your FForm field value is nil because you don&#8217;t know or have a specific class type to instanciate the Form.  That is:<\/p>\n<pre><code>frm:= TFormClass(FForm.ClassType).Create(FParentForm); \n<\/code><\/pre>\n<p>will simply display a blank, empty form.<\/p>\n<hr>\n<p>If you want to publish this property, you could try making it a string type that carries the <em>name<\/em> of the form class you want to instanciate and then use RTTI to find the class:<\/p>\n<pre><code>uses RTTI;\n\nTMyComp = class(TComponent)\n   FFormClassName : string;\n\n   procedure SetFormClassName(const Value : string);\n   property FormClassName: string read FFormClassName write SetFormClassName;\n\n   procedure Execute_FormShowModal;\nend;\n\n\nprocedure TMyComp.Execute_FormShowModal;\n\nvar\n   frmCls : TFormClass;\n   frm: TForm;\n\n   RTTI : TRTTIContext;\n   RTTIType : TRTTIType;\n\nbegin\n   frmCls := nil;\n   for RTTIType in RTTI.GetTypes do\n      begin\n         if (RTTIType.Name = FFormClassName) and (RTTIType.TypeKind = tkClass) then\n            begin\n               if RTTIType.Handle.TypeData.ClassType.InheritsFrom(TForm) then\n                  begin\n                     frmClass := TFormClass(RTTIType.Handle.TypeData.ClassType);\n                     break;\n                  end;\n            end;\n      end;\n\n   \/\/ Check that frmCls is not nil and perform some alternate\n   \/\/  action.\n   \/\/ if frmCls = nil then ......\n   \/\/\n   frm:= frmCls.Create(FParentForm); \n   frm.ShowModal;\n   frm.Free;\nend;\n<\/code><\/pre>\n<\/p><\/div>\n<div class=\"mt24\"><\/div>\n<\/div>\n<p>            <span class=\"d-none\" itemprop=\"commentCount\">8<\/span> <\/p><\/div>\n<\/div>\n<p>[ad_2]<\/p>\n<p>solved ShowModal for an associated form <\/p>\n","protected":false},"excerpt":{"rendered":"<p>[ad_1] You added in the comments that you are setting FForm to be equal to a valid existing form. If so, you may not need to create anything: procedure TMyComp.Execute_FormShowModal; var frm: TFormUser; begin frm:= TFormUser(FForm); frm.BtnOK.Enabled:=False; frm.ShowModal; \/\/frm.Free; end; This assumes that this valid instance you are referring to is declared type TFormUser = &#8230; <a title=\"[Solved] ShowModal for an associated form\" class=\"read-more\" href=\"https:\/\/jassweb.com\/solved\/solved-showmodal-for-an-associated-form\/\" aria-label=\"More on [Solved] ShowModal for an associated form\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[320],"tags":[740,797],"class_list":["post-14645","post","type-post","status-publish","format-standard","hentry","category-solved","tag-delphi","tag-forms"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>[Solved] ShowModal for an associated form - JassWeb<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/jassweb.com\/solved\/solved-showmodal-for-an-associated-form\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"[Solved] ShowModal for an associated form - JassWeb\" \/>\n<meta property=\"og:description\" content=\"[ad_1] You added in the comments that you are setting FForm to be equal to a valid existing form. If so, you may not need to create anything: procedure TMyComp.Execute_FormShowModal; var frm: TFormUser; begin frm:= TFormUser(FForm); frm.BtnOK.Enabled:=False; frm.ShowModal; \/\/frm.Free; end; This assumes that this valid instance you are referring to is declared type TFormUser = ... Read more\" \/>\n<meta property=\"og:url\" content=\"https:\/\/jassweb.com\/solved\/solved-showmodal-for-an-associated-form\/\" \/>\n<meta property=\"og:site_name\" content=\"JassWeb\" \/>\n<meta property=\"article:published_time\" content=\"2022-10-08T09:57:33+00:00\" \/>\n<meta name=\"author\" content=\"Kirat\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kirat\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-showmodal-for-an-associated-form\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-showmodal-for-an-associated-form\/\"},\"author\":{\"name\":\"Kirat\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31\"},\"headline\":\"[Solved] ShowModal for an associated form\",\"datePublished\":\"2022-10-08T09:57:33+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-showmodal-for-an-associated-form\/\"},\"wordCount\":301,\"publisher\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\"},\"keywords\":[\"delphi\",\"forms\"],\"articleSection\":[\"Solved\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-showmodal-for-an-associated-form\/\",\"url\":\"https:\/\/jassweb.com\/solved\/solved-showmodal-for-an-associated-form\/\",\"name\":\"[Solved] ShowModal for an associated form - JassWeb\",\"isPartOf\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#website\"},\"datePublished\":\"2022-10-08T09:57:33+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-showmodal-for-an-associated-form\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/jassweb.com\/solved\/solved-showmodal-for-an-associated-form\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-showmodal-for-an-associated-form\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/jassweb.com\/solved\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"[Solved] ShowModal for an associated form\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/jassweb.com\/solved\/#website\",\"url\":\"https:\/\/jassweb.com\/solved\/\",\"name\":\"JassWeb\",\"description\":\"Build High-quality Websites\",\"publisher\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/jassweb.com\/solved\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\",\"name\":\"Jass Web\",\"url\":\"https:\/\/jassweb.com\/solved\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png\",\"contentUrl\":\"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png\",\"width\":693,\"height\":132,\"caption\":\"Jass Web\"},\"image\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31\",\"name\":\"Kirat\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1776403586\",\"contentUrl\":\"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1776403586\",\"caption\":\"Kirat\"},\"sameAs\":[\"http:\/\/jassweb.com\"],\"url\":\"https:\/\/jassweb.com\/solved\/author\/jaspritsinghghumangmail-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"[Solved] ShowModal for an associated form - JassWeb","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/jassweb.com\/solved\/solved-showmodal-for-an-associated-form\/","og_locale":"en_US","og_type":"article","og_title":"[Solved] ShowModal for an associated form - JassWeb","og_description":"[ad_1] You added in the comments that you are setting FForm to be equal to a valid existing form. If so, you may not need to create anything: procedure TMyComp.Execute_FormShowModal; var frm: TFormUser; begin frm:= TFormUser(FForm); frm.BtnOK.Enabled:=False; frm.ShowModal; \/\/frm.Free; end; This assumes that this valid instance you are referring to is declared type TFormUser = ... Read more","og_url":"https:\/\/jassweb.com\/solved\/solved-showmodal-for-an-associated-form\/","og_site_name":"JassWeb","article_published_time":"2022-10-08T09:57:33+00:00","author":"Kirat","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Kirat","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/jassweb.com\/solved\/solved-showmodal-for-an-associated-form\/#article","isPartOf":{"@id":"https:\/\/jassweb.com\/solved\/solved-showmodal-for-an-associated-form\/"},"author":{"name":"Kirat","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31"},"headline":"[Solved] ShowModal for an associated form","datePublished":"2022-10-08T09:57:33+00:00","mainEntityOfPage":{"@id":"https:\/\/jassweb.com\/solved\/solved-showmodal-for-an-associated-form\/"},"wordCount":301,"publisher":{"@id":"https:\/\/jassweb.com\/solved\/#organization"},"keywords":["delphi","forms"],"articleSection":["Solved"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/jassweb.com\/solved\/solved-showmodal-for-an-associated-form\/","url":"https:\/\/jassweb.com\/solved\/solved-showmodal-for-an-associated-form\/","name":"[Solved] ShowModal for an associated form - JassWeb","isPartOf":{"@id":"https:\/\/jassweb.com\/solved\/#website"},"datePublished":"2022-10-08T09:57:33+00:00","breadcrumb":{"@id":"https:\/\/jassweb.com\/solved\/solved-showmodal-for-an-associated-form\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/jassweb.com\/solved\/solved-showmodal-for-an-associated-form\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/jassweb.com\/solved\/solved-showmodal-for-an-associated-form\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/jassweb.com\/solved\/"},{"@type":"ListItem","position":2,"name":"[Solved] ShowModal for an associated form"}]},{"@type":"WebSite","@id":"https:\/\/jassweb.com\/solved\/#website","url":"https:\/\/jassweb.com\/solved\/","name":"JassWeb","description":"Build High-quality Websites","publisher":{"@id":"https:\/\/jassweb.com\/solved\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/jassweb.com\/solved\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/jassweb.com\/solved\/#organization","name":"Jass Web","url":"https:\/\/jassweb.com\/solved\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/","url":"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png","contentUrl":"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png","width":693,"height":132,"caption":"Jass Web"},"image":{"@id":"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31","name":"Kirat","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/image\/","url":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1776403586","contentUrl":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1776403586","caption":"Kirat"},"sameAs":["http:\/\/jassweb.com"],"url":"https:\/\/jassweb.com\/solved\/author\/jaspritsinghghumangmail-com\/"}]}},"_links":{"self":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts\/14645","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/comments?post=14645"}],"version-history":[{"count":0,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts\/14645\/revisions"}],"wp:attachment":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/media?parent=14645"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/categories?post=14645"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/tags?post=14645"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}