<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[My Visual Database — Главное меню на другой форме]]></title>
		<link>https://myvisualdatabase.com/forum/viewtopic.php?id=5364</link>
		<atom:link href="https://myvisualdatabase.com/forum/extern.php?action=feed&amp;tid=5364&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[The most recent posts in Главное меню на другой форме.]]></description>
		<lastBuildDate>Mon, 10 Jun 2019 07:30:06 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Главное меню на другой форме]]></title>
			<link>https://myvisualdatabase.com/forum/viewtopic.php?pid=31371#p31371</link>
			<description><![CDATA[<p>У меня есть пример создания меню из данных, хранимых в БД. Пример довольно сложный, описание здесь: <a href="https://vk.com/@createmyvisualdatabaseapp-menu">https://vk.com/@createmyvisualdatabaseapp-menu</a>&nbsp; в конце описания - ссылка для скачивания проекта. </p><p>Собственно, построение меню идёт в процедуре LoadMenu(). Меню создаётся на форме frmMain.</p><div class="codebox"><pre><code>procedure LoadMenu;
var
  tmpMainMenu: TMainMenu;
  tmpDataSet:TDataSet;
  tmpSQL:string;
  tmpMenuItem: TMenuItem;
  tmpParentStack: array[1..MAX_MENU_LEVEL+1] of TMenuItem; // стек для хранения родительских элементов при создании главного меню
  tmpLevel: integer;
begin
  tmpMainMenu := TMainMenu.Create(frmMain);
  frmMain.Menu := tmpMainMenu;
  // запрос формируется с учётом прав пользователя
  tmpSQL :=
  &#039; select menu_.* , object_.name as object_name &#039;+
  &#039; from menu_&#039;+
  &#039; left join object_ on object_.id = menu_.id_object_&#039;;
  // если роль указана, то добавляем фильтр по роли:
  if RoleID &lt;&gt; 0 then
    tmpSQL := tmpSQL +
    &#039; left join role_object_ on role_object_.id_object_ = object_.id&#039;+
    &#039; where (menu_.id_object_ is null) or (role_object_.id_role_ = &#039;+inttostr(RoleID)+&#039; )&#039;;
    // сортировка обеспечивает правильность сборки дерева
  tmpSQL := tmpSQL + &#039; order by order_num&#039;;
  //
  SQLQuery(tmpSQL,tmpDataSet);
  while not tmpDataSet.EOF do
  begin
    tmpMenuItem := TMenuItem.Create (tmpMainMenu);
    tmpMenuItem.Caption := tmpDataSet.FieldByName(&#039;name&#039;).asString;
    tmpMenuItem.Tag := tmpDataSet.FieldByName(&#039;id&#039;).asInteger;
    // если указан объект, то подключаем обработчик
    if not tmpDataSet.FieldByName(&#039;id_object_&#039;).isNull then
      tmpMenuItem.OnClick := @MainMenuClick;
    tmpLevel := tmpDataSet.FieldByName(&#039;level&#039;).asInteger;
    //
    if tmpLevel = 0 then
    begin
      tmpMainMenu.Items.Add(tmpMenuItem);
    end
    else
    begin
      tmpParentStack[tmpLevel].Add(tmpMenuItem);
    end;
    // записываем в стек текущий элемент как родителя для следующего уровня
    tmpParentStack[tmpLevel+1] := tmpMenuItem;
    // переходим к следующей записи
    tmpDataSet.Next;
  end;
  tmpDataSet.Free;
end;</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (k245)]]></author>
			<pubDate>Mon, 10 Jun 2019 07:30:06 +0000</pubDate>
			<guid>https://myvisualdatabase.com/forum/viewtopic.php?pid=31371#p31371</guid>
		</item>
		<item>
			<title><![CDATA[Re: Главное меню на другой форме]]></title>
			<link>https://myvisualdatabase.com/forum/viewtopic.php?pid=31362#p31362</link>
			<description><![CDATA[<div class="quotebox"><cite>ivan wrote:</cite><blockquote><p>ув. sibprogsistem! можете пример проекта приложить?</p></blockquote></div><p>да, конечно</p>]]></description>
			<author><![CDATA[null@example.com (sibprogsistem)]]></author>
			<pubDate>Sat, 08 Jun 2019 16:07:42 +0000</pubDate>
			<guid>https://myvisualdatabase.com/forum/viewtopic.php?pid=31362#p31362</guid>
		</item>
		<item>
			<title><![CDATA[Re: Главное меню на другой форме]]></title>
			<link>https://myvisualdatabase.com/forum/viewtopic.php?pid=31357#p31357</link>
			<description><![CDATA[<p>ув. sibprogsistem! можете пример проекта приложить?</p>]]></description>
			<author><![CDATA[null@example.com (ivan)]]></author>
			<pubDate>Sat, 08 Jun 2019 03:40:22 +0000</pubDate>
			<guid>https://myvisualdatabase.com/forum/viewtopic.php?pid=31357#p31357</guid>
		</item>
		<item>
			<title><![CDATA[Re: Главное меню на другой форме]]></title>
			<link>https://myvisualdatabase.com/forum/viewtopic.php?pid=31355#p31355</link>
			<description><![CDATA[<p>Вот Вам пример меню из моего проекты.. можно хоть на всех формах проекта запускать..</p><div class="codebox"><pre><code>//------------------------------- выподающее меню  ----------------------------------------------
//***********************************************************************************************
//***********************************************************************************************
//Выпадающее меню работает в трех формах frmAdmin, frmMasterWork и frmServiceCen*****************
//переменная mur содержит имя формы в которой должно отображаться выподающее меню****************
//***********************************************************************************************
procedure SwitchMenu (Sender, r: string);
var
   fiLang,reporfile:TStringList;
   i,s,t,c: integer;
   subfiLangi,mnFilereport,subfiLangiEdit,subfiLangirepor,subfiLangiDel,subfiLangiPrint: TMenuItem;
   subfiLangipdf,mnFile,mnfiLangi,subFileNextUser,subFileClose,mnDictionary,subDictionaryPriceList : TMenuItem;
   subDictionaryDash1,subDictionaryDash2,subDictionaryDash3,subDictionaryDash4,subDictionaryDash5,subDictionaryDash6: TMenuItem;
   subDictionaryStatusEquipment,subDictionaryCompany,subDictionaryEquipment,subDictionaryBrand : TMenuItem;
   subDictionaryAccessories,subabout,subFilereport,mnActivities,subEvents,subDonations, mnSetting, subTelMask,subKey : TMenuItem;
   rta:TMainMenu;
   mur:TForm;
begin
  // если открыта форма * то переменная содежит имя этой формы
  if sender = &#039;frmAdmin&#039; then mur:=frmAdmin;
  if sender = &#039;frmMasterWork&#039; then mur:=frmMasterWork;
  if sender = &#039;frmServiceCen&#039; then mur:=frmServiceCen;
  if r = &#039;1&#039; then rta.free;

//************ создаем выподающее меню ***************************
       //меню файл
   mnFile := TMenuItem.Create (mur);
   mnFile.Caption := pupmFa;

       subFileNextUser := TMenuItem.Create (mur);
       subFileNextUser.Caption := pupmnuser;
       subFileNextUser.OnClick := @MenuClick1;

       subFileClose := TMenuItem.Create (mur);
       subFileClose.Caption := pupmex;
       subFileClose.OnClick := @MenuClick2;
       //меню словари
   mnDictionary := TMenuItem.Create (mur);
   mnDictionary.Caption := pupmlib;

       subDictionaryPriceList := TMenuItem.Create (mur);
       subDictionaryPriceList.Caption := pupmpr;
       subDictionaryPriceList.OnClick := @MenuClick3;

       subDictionaryDash1:= TMenuItem.Create (mur);
       subDictionaryDash1.Caption := &#039;-&#039;;
       subDictionaryDash1.Enabled:= False;

       subDictionaryStatusEquipment := TMenuItem.Create (mur);
       subDictionaryStatusEquipment.Caption := pupmst;
       subDictionaryStatusEquipment.OnClick := @MenuClick5;

       subDictionaryDash2:= TMenuItem.Create (mur);
       subDictionaryDash2.Caption := &#039;-&#039;;
       subDictionaryDash2.Enabled:= False;

       subDictionaryCompany := TMenuItem.Create (mur);
       subDictionaryCompany.Caption := pupmco;
       subDictionaryCompany.OnClick := @MenuClick6;

       subDictionaryEquipment := TMenuItem.Create (mur);
       subDictionaryEquipment.Caption := pupmeq;
       subDictionaryEquipment.OnClick := @MenuClick7;

       subDictionaryBrand := TMenuItem.Create (mur);
       subDictionaryBrand.Caption := pupmbr;
       subDictionaryBrand.OnClick := @MenuClick8;

       subDictionaryDash3:= TMenuItem.Create (mur);
       subDictionaryDash3.Caption := &#039;-&#039;;
       subDictionaryDash3.Enabled:= False;

       subDictionaryAccessories := TMenuItem.Create (mur);
       subDictionaryAccessories.Caption := pupmeex;
       subDictionaryAccessories.OnClick := @MenuClick9;
      // Меню настройки
   mnSetting := TMenuItem.Create (mur);
   mnSetting.Caption := pupmms;

       subTelMask := TMenuItem.Create (mur);
       subTelMask.Caption := pupmtm;
       subTelMask.OnClick := @MenuClick12;
      // меню помощь
   mnActivities := TMenuItem.Create (mur);
   mnActivities.Caption := pupmhe;

       subEvents := TMenuItem.Create (mur);
       subEvents.Caption := pupmsi;
       subEvents.OnClick := @MenuClick10;

       subDictionaryDash4:= TMenuItem.Create (mur);
       subDictionaryDash4.Caption := &#039;-&#039;;
       subDictionaryDash4.Enabled:= False;

       subDonations := TMenuItem.Create (mur);
       subDonations.Caption := pupmab;
       subDonations.OnClick := @MenuClick11;

       subKey := TMenuItem.Create (mur);
       subKey.Caption := &#039;Регистрация &#039;;
       subKey.OnClick := @MenuClick13;

      // меню отчет
 mnFilereport := TMenuItem.Create (mur);
 mnFilereport.Caption := pupmreport;

         subFilereport:= TMenuItem.Create (mur);
         subFilereport.Caption := pupmreportnew;
         subFilereport.OnClick := @clicknew;

         subDictionaryDash5:= TMenuItem.Create (mur);
         subDictionaryDash5.Caption := &#039;-&#039;;

 mnfiLangi := TMenuItem.Create (mur);
 mnfiLangi.Caption := pupmlang;

   // выводим выподающее меню
   rta:=TMainMenu.Create(mur);
   rta.Items.Add(mnFile);
       mnFile.Add(subFileNextUser);
       mnFile.Add(subFileClose);

   rta.Items.Add(mnDictionary);
        mnDictionary.Add(subDictionaryPriceList);
        mnDictionary.Add(subDictionaryDash1);
        mnDictionary.Add(subDictionaryStatusEquipment);
        mnDictionary.Add(subDictionaryDash2);
        mnDictionary.Add(subDictionaryCompany);
        mnDictionary.Add(subDictionaryEquipment);
        mnDictionary.Add(subDictionaryBrand);
        mnDictionary.Add(subDictionaryDash3);
        mnDictionary.Add(subDictionaryAccessories);
 // выводим в выподающем меню список файлов мультиязычности
 rta.Items.Add(mnfiLangi);

 fiLang := TStringList.Create;
 fiLang.Text := GetFilesList(&#039;languages&#039;,&#039;*.ini&#039;,False);
 s := fiLang.Count-1;
for i:=0  to s  do
 begin
  subfiLangi:= TMenuItem.Create (mur);
  subfiLangi.Caption := ExtractFileName(fiLang[i]);
  Delete(subfiLangi.Caption, Length(subfiLangi.Caption) -3 , 4);
  subfiLangi.Hint := (fiLang[i]);
  mnfiLangi.Add(subfiLangi);
  subfiLangi.OnClick := @clicklang;
  end;

 // выводим в выподющем меню список фалов отчетов
rta.Items.Add(mnFilereport);
   mnFilereport.Add(subFilereport);
   mnFilereport.Add(subDictionaryDash5);
reporfile := TStringList.Create;
    reporfile.Text := GetFilesList( &#039;Report\&#039;,&#039;*.fr3&#039;,True); //ExtractFilePath(Application.ExeName) +

     t := reporfile.Count-1;
     for i:=0  to t  do
     begin
         subfiLangirepor:= TMenuItem.Create (mur);
         subfiLangirepor.Caption := ExtractFileName(reporfile[i]);
         subfiLangirepor.Hint := (reporfile[i]);
         mnFilereport.Add(subfiLangirepor);

         Delete(subfiLangirepor.Caption, Length(subfiLangirepor.Caption) -3 , 4);

         subfiLangiEdit := TMenuItem.Create(mur);
         subfiLangiEdit.Caption := pupmreportedit;
         subfiLangiEdit.Hint := (reporfile[i]);
         subfiLangiDel := TMenuItem.Create(mur);
         subfiLangiDel.Caption := pupmreportdel;
         subfiLangiDel.Hint := (reporfile[i]);
         subfiLangipdf := TMenuItem.Create(mur);
         subfiLangipdf.Caption := &#039;PDF&#039;;
         //subfiLangipdf.Hint := (fiLang[i]);
         subfiLangiPrint := TMenuItem.Create(mur);
         subfiLangiPrint.Caption := pupmreportprint;
         subfiLangiPrint.Hint := (reporfile[i]);

         subfiLangiEdit.OnClick := @clickEdit;
         subfiLangiDel.OnClick := @clickDel;
         subfiLangiPrint.OnClick := @clickPrint;
         subfiLangipdf.OnClick := @clickpdf;
    
         subfiLangirepor.Add(subfiLangiEdit);
         subfiLangirepor.Add(subfiLangiDel);
         subfiLangirepor.Add(subfiLangipdf);
         subfiLangirepor.Add(subfiLangiPrint);
     end;

   rta.Items.Add(mnSetting);
        mnSetting.Add(subTelMask);

   rta.Items.Add(mnActivities);
        mnActivities.Add(subEvents);
        mnActivities.Add(subDictionaryDash4);
        mnActivities.Add(subDonations);
        mnActivities.Add(subKey);
end;</code></pre></div><p>в свойствах формы OnShow обращаетесь к процедуре</p>]]></description>
			<author><![CDATA[null@example.com (sibprogsistem)]]></author>
			<pubDate>Fri, 07 Jun 2019 16:24:18 +0000</pubDate>
			<guid>https://myvisualdatabase.com/forum/viewtopic.php?pid=31355#p31355</guid>
		</item>
		<item>
			<title><![CDATA[Re: Главное меню на другой форме]]></title>
			<link>https://myvisualdatabase.com/forum/viewtopic.php?pid=31354#p31354</link>
			<description><![CDATA[<p>Ну не все с TPanel умеют заморачиваться, чтобы изменять форму не меняя формы...</p>]]></description>
			<author><![CDATA[null@example.com (m.prokhachev)]]></author>
			<pubDate>Fri, 07 Jun 2019 15:34:52 +0000</pubDate>
			<guid>https://myvisualdatabase.com/forum/viewtopic.php?pid=31354#p31354</guid>
		</item>
		<item>
			<title><![CDATA[Re: Главное меню на другой форме]]></title>
			<link>https://myvisualdatabase.com/forum/viewtopic.php?pid=31352#p31352</link>
			<description><![CDATA[<div class="quotebox"><cite>m.prokhachev wrote:</cite><blockquote><p>Изящно! Всего лишь поменяли дескриптор у объекта-структуры <img src="https://myvisualdatabase.com/forum/img/smilies/smile.png" width="15" height="15" alt="smile" /> Так и продублировать меню на другие формы можно!</p></blockquote></div><p>Продублировать таким макаром нельзя, так как один экземпляр главного меню (TMainMenu) может быть только у одной формы. Но можно поэлементно скопировать.</p>]]></description>
			<author><![CDATA[null@example.com (k245)]]></author>
			<pubDate>Fri, 07 Jun 2019 14:46:07 +0000</pubDate>
			<guid>https://myvisualdatabase.com/forum/viewtopic.php?pid=31352#p31352</guid>
		</item>
		<item>
			<title><![CDATA[Re: Главное меню на другой форме]]></title>
			<link>https://myvisualdatabase.com/forum/viewtopic.php?pid=31351#p31351</link>
			<description><![CDATA[<p>Изящно! Всего лишь поменяли дескриптор у объекта-структуры <img src="https://myvisualdatabase.com/forum/img/smilies/smile.png" width="15" height="15" alt="smile" /> Так и продублировать меню на другие формы можно!</p>]]></description>
			<author><![CDATA[null@example.com (m.prokhachev)]]></author>
			<pubDate>Fri, 07 Jun 2019 14:26:37 +0000</pubDate>
			<guid>https://myvisualdatabase.com/forum/viewtopic.php?pid=31351#p31351</guid>
		</item>
		<item>
			<title><![CDATA[Re: Главное меню на другой форме]]></title>
			<link>https://myvisualdatabase.com/forum/viewtopic.php?pid=31339#p31339</link>
			<description><![CDATA[<div class="quotebox"><cite>alex842 wrote:</cite><blockquote><p>... можно ли перенести главное меню на другую форму? ...</p></blockquote></div><div class="codebox"><pre><code>var
  Menu:TMainMenu;

begin
  Menu := Form1.Menu;
  Form1.Menu := nil;
  Form2.Menu := Menu;
end.</code></pre></div><p>Код переносит главное меню с Form1 на Form2</p><br /><p><span class="postimg"><img src="http://myvisualdatabase.com/forum/misc.php?action=pun_attachment&amp;item=5549&amp;download=0" alt="http://myvisualdatabase.com/forum/misc.php?action=pun_attachment&amp;amp;item=5549&amp;amp;download=0" /></span></p>]]></description>
			<author><![CDATA[null@example.com (k245)]]></author>
			<pubDate>Fri, 07 Jun 2019 13:16:34 +0000</pubDate>
			<guid>https://myvisualdatabase.com/forum/viewtopic.php?pid=31339#p31339</guid>
		</item>
		<item>
			<title><![CDATA[Re: Главное меню на другой форме]]></title>
			<link>https://myvisualdatabase.com/forum/viewtopic.php?pid=31337#p31337</link>
			<description><![CDATA[<div class="quotebox"><cite>vovka3003 wrote:</cite><blockquote><p>Зачем..? Так не проще?:</p></blockquote></div><p>Если авторизация не проходит, то некрасиво&nbsp; блымкает главная форма перед своим закрытием.</p>]]></description>
			<author><![CDATA[null@example.com (k245)]]></author>
			<pubDate>Fri, 07 Jun 2019 13:06:03 +0000</pubDate>
			<guid>https://myvisualdatabase.com/forum/viewtopic.php?pid=31337#p31337</guid>
		</item>
		<item>
			<title><![CDATA[Re: Главное меню на другой форме]]></title>
			<link>https://myvisualdatabase.com/forum/viewtopic.php?pid=31286#p31286</link>
			<description><![CDATA[<div class="quotebox"><cite>sibprogsistem wrote:</cite><blockquote><p>вот</p></blockquote></div><p>Спасибо!</p>]]></description>
			<author><![CDATA[null@example.com (alex842)]]></author>
			<pubDate>Wed, 05 Jun 2019 20:53:02 +0000</pubDate>
			<guid>https://myvisualdatabase.com/forum/viewtopic.php?pid=31286#p31286</guid>
		</item>
		<item>
			<title><![CDATA[Re: Главное меню на другой форме]]></title>
			<link>https://myvisualdatabase.com/forum/viewtopic.php?pid=31285#p31285</link>
			<description><![CDATA[<p>вот</p>]]></description>
			<author><![CDATA[null@example.com (sibprogsistem)]]></author>
			<pubDate>Wed, 05 Jun 2019 20:48:22 +0000</pubDate>
			<guid>https://myvisualdatabase.com/forum/viewtopic.php?pid=31285#p31285</guid>
		</item>
		<item>
			<title><![CDATA[Главное меню на другой форме]]></title>
			<link>https://myvisualdatabase.com/forum/viewtopic.php?pid=31283#p31283</link>
			<description><![CDATA[<p>Добрый день. </p><p>Использую главную форму для аутентификации. После входа в систему появляется основная форма моего приложения. Как на эту форму добавить меню? Именно меню, как добавлять пункты в меню, я знаю. Т.е. можно ли перенести главное меню на другую форму? Вроде бы, такой вопрос уже задавался, но что-то поиск мне результатов не выдал.</p>]]></description>
			<author><![CDATA[null@example.com (alex842)]]></author>
			<pubDate>Wed, 05 Jun 2019 20:34:32 +0000</pubDate>
			<guid>https://myvisualdatabase.com/forum/viewtopic.php?pid=31283#p31283</guid>
		</item>
	</channel>
</rss>
