Forum > LCL
Using same procedure to generate menu on Form1 and Combobox on Frame2
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