Forum > LCL

Using same procedure to generate menu on Form1 and Combobox on Frame2

<< < (3/3)

wp:
You mean this?

--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---      item := TMenuItem.Create(nil);I had missed the "self" in my first post on this topic...

Setting the owner to nil will leave you with the burden to destroy the menuitem later - normally the owner would do this... But you have the MenuItem to which the new item will be added. Why not use the same owner?


--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---      item := TMenuItem.Create(AMenuItem.Owner);

wasp41p:
Thank you wp for your time.
 I mean I can't use self in global:

--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---....AList := TFPList.Create;AList.Add(TSynADSP21xxSyn.Create(self));AList.Add(TSynFortranSyn.Create(self));AList.Add(TSynGalaxySyn.Create(self));......

KodeZwerg:
changes in uglobal

--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---var    GHighlighters : TFPList;implementationvar    g: TFPFontCacheList;
--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---procedure PrepareHighlighters(AOwner: TComponent; AMenu: TMenuItem; ACombobox: TComboBox; AClickHandler: TNotifyEvent);var  i: Integer;  HL: TSynCustomHighlighter;  item: TMenuitem;begin  if GHighlighters = nil then    GHighlighters := TFPList.Create;  GHighlighters.Add(TSynADSP21xxSyn.Create(AOwner));  GHighlighters.Add(TSynFortranSyn.Create(AOwner));  GHighlighters.Add(TSynGalaxySyn.Create(AOwner));  GHighlighters.Add(TSynBaanSyn.Create(AOwner));  GHighlighters.Add(TSynAWKSyn.Create(AOwner));  GHighlighters.Add(TSynHaskellSyn.Create(AOwner));  GHighlighters.Add(TSynCacheSyn.Create(AOwner));  GHighlighters.Add(TSynModelicaSyn.Create(AOwner));  GHighlighters.Add(TSynCobolSyn.Create(AOwner));  GHighlighters.Add(TSynCSSyn.Create(AOwner));  GHighlighters.Add(TSynDmlSyn.Create(AOwner));  GHighlighters.Add(TSynProgressSyn.Create(AOwner));  GHighlighters.Add(TSynEiffelSyn.Create(AOwner));  GHighlighters.Add(TSynGWScriptSyn.Create(AOwner));  GHighlighters.Add(TSynHP48Syn.Create(AOwner));  GHighlighters.Add(TSynVBScriptSyn.Create(AOwner));  GHighlighters.Add(TSynUnrealSyn.Create(AOwner));  GHighlighters.Add(TSynVrml97Syn.Create(AOwner));  GHighlighters.Add(TSynTclTkSyn.Create(AOwner));  GHighlighters.Add(TSynLDRSyn.Create(AOwner));  GHighlighters.Add(TSynRubySyn.Create(AOwner));  GHighlighters.Add(TSynInnoSyn.Create(AOwner));  GHighlighters.Add(TSynAsmSyn.Create(AOwner));  GHighlighters.Add(TSynDOTSyn.Create(AOwner));  GHighlighters.Add(TSynIdlSyn.Create(AOwner));  GHighlighters.Add(TSynKixSyn.Create(AOwner));  GHighlighters.Add(TSynSDDSyn.Create(AOwner));  GHighlighters.Add(TSynSMLSyn.Create(AOwner));  GHighlighters.Add(TSynFreePascalSyn.Create(AOwner));  GHighlighters.Add(TSynM3Syn.Create(AOwner));  GHighlighters.Add(TSynRCSyn.Create(AOwner));  GHighlighters.Add(TSynPrologSyn.Create(AOwner));  GHighlighters.Add(TSynLuaSyn.Create(AOwner));  GHighlighters.Add(TSyn8051Syn.Create(AOwner));  GHighlighters.Add(TSynCACSyn.Create(AOwner));  GHighlighters.Add(TSynJavaSyn.Create(AOwner));  GHighlighters.Add(TSynSQLSyn.Create(AOwner));  GHighlighters.Add(TSynVHDLSyn.Create(AOwner));  GHighlighters.Add(TSynVerilogSyn.Create(AOwner));  GHighlighters.Add(TSynJSONSyn.Create(AOwner));  GHighlighters.Add(TSynPasSyn.Create(AOwner));  GHighlighters.Add(TSynXMLSyn.Create(AOwner));  GHighlighters.Sort(@CompareHighlighters); if (AMenu <> nil) then  for i:=0 to Pred(GHighlighters.Count) do begin    HL := TSynCustomHighlighter(GHighlighters[i]);    if Assigned(HL) then    begin      item := TMenuItem.Create(nil);      AMenu.Add(item);      item.Caption := Format('%d - %s', [i, GetHighlighterCaption(HL)]);      item.Tag := i+1;      item.OnClick := AClickHandler;      if AComboBox <> nil then AComboBox.Items.Add(item.Caption);    end;  end;end; procedure SelectHighlighter(AIndex: Integer; ASynEdit: TSynEdit; ACaption: TCaption; AVer: String);begin  begin    if AIndex < GHighlighters.Count then      begin        ASynEdit.Highlighter := TSynCustomHighlighter(GHighlighters[AIndex]);        ACaption := Format('%s - %s [%s]', [          AVer, ASynEdit.Highlighter.LanguageName, ASynEdit.Highlighter.ClassName]);      end;  end;end;
--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---initialization  GHighlighters := nil;finalization  GHighlighters.Free;end.changes in unit1

--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---  PrepareHighlighters(Self, MenuFileHL, ComboBox3, @MenuClick);
I have not tested it fully, at least thats how it compile and run without error

wasp41p:
Update: I've managed to get the menu on form1 and the combobox on form2 and it works fine too, but I don't understand if this is normal or I've done something wrong, if I call the procedure in form2 it generates both the menu and the combobox, but if I call it from form1 it goes into access violation at compile time, it would seem that with form1 I can't write into form2. I attach part of the code:
Unit2.pas

--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---var  Form2: TForm2;  implementation {$R *.lfm} uses  unit1; { TForm2 }procedure TForm2.FormCreate(Sender: TObject);var   SynEdit: TSynEdit;begin  ComboBox3.Items.Clear;  FFontlist:= TFPFontCacheList.Create;  ComboBox1.Items.Clear;  PrepareFontList(FFontlist, ComboBox1);    SynEdit := CurrentSynEdit(Form1.PageControl1);  if SynEdit <> nil then fillfontmenu(ComboBox1, SpinEdit1, SynEdit);   PrepareHighlighters(Self, ComboBox3, Form1.MenuFileHL, @Form1.MenuClick);     SynEdit := CurrentSynEdit(Form1.PageControl1);  if SynEdit <> nil then SelectHighlighter(27, SynEdit); end;But if I do this, I have an access violation:

--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---var  Form1: TForm1; implementation {$R *.lfm} uses  unit2;  { TForm1 } procedure TForm1.FormCreate(Sender: TObject);var  SynEdit: TSynEdit;begin.......   PrepareHighlighters(Self, Form2.ComboBox3, MenuFileHL, @MenuClick);   SynEdit := CurrentSynEdit(PageControl1);  if SynEdit <> nil then SelectHighlighter(27, SynEdit); end;

wasp41p:
I apologize for bothering you with my silly questions (again) but I´m just starting out with Lazarus and still learning.
I´ve read a lot and I´m still reading, but I can´t figure out why in the statusbar the caret works only on the first tab, if I delete it, doesn´t work anymore even with the new one.  The same thing happens with the markup and other things, It seems that it doesn´t update to the active Synedit/tab. Please I attach the project, if someone wants to have a look could tell me where I am wrong.

Navigation

[0] Message Index

[*] Previous page

Go to full version