<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=448700&amp;view=findpost&amp;p=3907795</guid>
        <pubDate>Sat, 27 Jul 2024 09:03:29 +0000</pubDate>
        <title>Событие OnAfterFormShow</title>
        <link>https://forum.sources.ru/index.php?showtopic=448700&amp;view=findpost&amp;p=3907795</link>
        <description><![CDATA[Jiro: Появилась необходимость в событии OnAfterFormShow, и я это реализовал вот так:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">unit MainFormUnt;</div><div class="code_line">&nbsp;</div><div class="code_line">interface</div><div class="code_line">&nbsp;</div><div class="code_line">uses</div><div class="code_line">&nbsp;&nbsp;Winapi.Windows,</div><div class="code_line">&nbsp;&nbsp;Winapi.Messages,</div><div class="code_line">&nbsp;&nbsp;System.SysUtils,</div><div class="code_line">&nbsp;&nbsp;System.Classes,</div><div class="code_line">&nbsp;&nbsp;Vcl.Controls,</div><div class="code_line">&nbsp;&nbsp;Vcl.Forms,</div><div class="code_line">&nbsp;&nbsp;Vcl.StdCtrls;</div><div class="code_line">&nbsp;</div><div class="code_line">const</div><div class="code_line">&nbsp;&nbsp; WM_AFTER_SHOW = WM_USER + 331 ;</div><div class="code_line">&nbsp;</div><div class="code_line">type</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;TFormX = class(TForm)</div><div class="code_line">&nbsp;&nbsp;private</div><div class="code_line">&nbsp;&nbsp; &nbsp;FOnAfterShow: TNotifyEvent;</div><div class="code_line">&nbsp;&nbsp; &nbsp;FOnShowBackUp: TNotifyEvent;</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure DoFormShow(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure DoAfterShow( var aMessage : TMessage ); message WM_AFTER_SHOW;</div><div class="code_line">&nbsp;&nbsp;public</div><div class="code_line">&nbsp;&nbsp; &nbsp;constructor Create(AOwner: TComponent); override;</div><div class="code_line">&nbsp;&nbsp; &nbsp;property OnAfterShow: TNotifyEvent read FOnAfterShow write FOnAfterShow;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;TForm = class(TFormX);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;TMainForm = class(TForm)</div><div class="code_line">&nbsp;&nbsp; &nbsp;Memo1: TMemo;</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormCreate(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormShow(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormAfterShow(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp;private</div><div class="code_line">&nbsp;&nbsp; &nbsp;{ Private declarations }</div><div class="code_line">&nbsp;&nbsp;public</div><div class="code_line">&nbsp;&nbsp; &nbsp;{ Public declarations }</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;MainForm: TMainForm;</div><div class="code_line">&nbsp;</div><div class="code_line">implementation</div><div class="code_line">&nbsp;</div><div class="code_line">{$R *.dfm}</div><div class="code_line">&nbsp;</div><div class="code_line">{$REGION &#39; TFormX &#39;}</div><div class="code_line">procedure TFormX.DoAfterShow( var aMessage : TMessage );</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;if Assigned(FOnAfterShow) then FOnAfterShow(Self);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TFormX.DoFormShow(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;Inherited;</div><div class="code_line">&nbsp;&nbsp;if Assigned(FOnShowBackUp) then FOnShowBackUp(self);</div><div class="code_line">&nbsp;&nbsp;OnShow := FOnShowBackUp;</div><div class="code_line">&nbsp;&nbsp;PostMessage( Handle, WM_AFTER_SHOW, 0 , 0 ); // This will post a message to itself</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">constructor TFormX.Create(AOwner: TComponent);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;inherited Create(AOwner);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;FOnShowBackUp := OnShow;</div><div class="code_line">&nbsp;&nbsp;OnShow := DoFormShow;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">{$ENDREGION}</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TMainForm.FormShow(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; Memo1.Lines.Add(&#39;on show&#39; );</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TMainForm.FormAfterShow(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;Memo1.Lines.Add(&#39;on after show&#39; );</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TMainForm.FormCreate(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; OnAfterShow := FormAfterShow;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">end.</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
Всё вроде работает, но на всякий случай хочу спросить, нет ли в такой реализации каких-то подводных граблей ?]]></description>
        <author>Jiro</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	