Länge des Namens einer TmseForm

Forum für alles rund um die MSEide und MSEgui
ATILIUS_REGULUS
Beiträge: 57
Registriert: Mi 20. Feb 2013, 10:06
OS, Lazarus, FPC: KUBUNTU 14.04 (fpc 3.3.1) / Raspbian (fpc 3.3.1)
CPU-Target: x86, x64, ARM
Kontaktdaten:

Länge des Namens einer TmseForm

Beitrag von ATILIUS_REGULUS »

Habe mal ein einfaches Projekt mit MSEide erzeugt, und dabei ist mir aufgefallen, daß der Name von TmseForm abgeschnitten wird.
Beispielsweise habe ich eine neue TmseForm mit Namen Test_Form erzeugt und MSEide hat daraus test_fo in der Pascaldatei gemacht.
Dann habe ich versucht, im Objektinspektor die Eigenschaft Name zu ändern: von test_fo nach Test_Form.
Leider wurden in der Pascaldatei keinerlei Änderungen vorgenommen, nur im Objektinspektor blieb der lange Name stehen, was mich verwirrt hat, da ich annahm, daß der Name in der Pascaldatei überall automatisch angepaßt wird.

Ist das so Absicht oder habe ich etwas übersehen?

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Länge des Namens einer TmseForm

Beitrag von mse »

Das ist Absicht. MSEide ist zurückhaltend mit Automatismen. Es scheint schon der Automatismus aus dem Dateinamen "*form" den Instanznamen "*fo" abzuleiten ist zu viel. ;-)
Die entsprechenden Definitionen stehen in 'Project'-'Options'-'Templates'-'New Form'.
http://mseide-msegui.sourceforge.net/pics/templates.png
Um Namenskonflikte zu vermeiden wird die Unitnamen-Endung 'Namebase' für die Instanzvariable durch die ersten zwei Buchstaben von 'Namebase' ersetzt.
Aus unit "testform" (Makro ${%UNITNAME%}) wird die Instanzvariable "testfo", aus unit "settings" wird die Instanzvariable "settingsfo" (Makro ${%FORMNAME%}).
apps/ide/templates/default/mainform.pas ist z.B.

Code: Alles auswählen

 
unit ${%UNITNAME%};
{$ifdef FPC}{$mode objfpc}{$h+}{$endif}
interface
uses
 msetypes,mseglob,mseguiglob,mseguiintf,mseapplication,msestat,msemenus,
 msegui,msegraphics,msegraphutils,mseevent,mseclasses,msewidgets,mseforms;
 
type
 t${%FORMNAME%} = class(tmainform)
 end;
var
 ${%FORMNAME%}: t${%FORMNAME%};
implementation
uses
 ${%UNITNAME%}_mfm;
end.
 

Ich werde die Endung der Instanzvariable parametrierbar machen.

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1430
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Länge des Namens einer TmseForm

Beitrag von fliegermichl »

Da bin ich auch schon mehrfach drübergestolpert.

Manchmal überlegt man sich, daß man den Namen des Formulars oder der unit etwas unglücklich gewählt hat.
Wenn man das dann umbenennen will, muß man an ganz schön vielen Stellen apassen. Vor allem die mfm / unit_mfm.pas stellt sich hier quer.

Zu viele Automatismen sind sicher nicht gut, aber wenn man im Objektinspektor den Namen eines Formulares ändert, wäre es schön, wenn alle Referenzen darauf automatisch angepasst würden.

Das ist einer der Gründe, weshalb ich nur das Formulardesign in mseide und das coden mit Lazarus und dem lazmsepackage von sooner mache.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Länge des Namens einer TmseForm

Beitrag von mse »

In MSEide sind Formulardateien und Sourcedateien unabhängig. Eine Formular *.mfm Datei lässt sich auch laden und bearbeiten wenn keine zugehörige unit *.pas Datei vorhanden ist. Die Klassennamen und Dergleichen können in 'Project'-'Tree' eingestellt werden.
http://mseide-msegui.sourceforge.net/pi ... cttree.png
Alternativ kann der Formulartext auch direkt mit LeftClick-'Show as Text' bearbeitet werden. Zurückwandeln Text -> Form durch LeftClick-'Show as Form'. Abspeichern unter anderem Namen geschieht mit 'File'-'Save as'.
Zu viele Automatismen sind sicher nicht gut, aber wenn man im Objektinspektor den Namen eines Formulares ändert, wäre es schön, wenn alle Referenzen darauf automatisch angepasst würden.

Namensänderungen werden für alle in Formularen verlinkten Komponenten automatisch nachgeführt. Dass die Instanzvariable und die Komponenten "name"-Property eines Formulars übereinstimmen ist lediglich eine Konvention.

ATILIUS_REGULUS
Beiträge: 57
Registriert: Mi 20. Feb 2013, 10:06
OS, Lazarus, FPC: KUBUNTU 14.04 (fpc 3.3.1) / Raspbian (fpc 3.3.1)
CPU-Target: x86, x64, ARM
Kontaktdaten:

Re: Länge des Namens einer TmseForm

Beitrag von ATILIUS_REGULUS »

Das Problem, daß Änderungen im Objektinspektor nicht im Pascalquelltext nachvollzogen werden, war es auch, was mich irritiert hat.

Habe jetzt mal zum Test die Eigenschaften im Tree geändert, aber auch da wurden die Änderungen nicht in den Quelltext übernommen.

Persönlich nutze ich das Verhalten, daß wenn man den Namen einer Komponente im Objektinspektor ändert, sich alle Stellen im Quelltext und in der Formulardatei automatisch mitgeändert werden, schon seit Urzeiten aus Delphiversionen. Dies finde ich sehr sinnvoll. Könnte man es in MSEide nicht ebenso machen, eventuell abschaltbar, falls es jemanden stört?

Die Art der Namensgebung am Anfang, also die default Werte bei neuen Komponenten, stören mich nicht, da ich diese ohnehin immer auf eigene Namen ändere. Aber ein manuelles Durchgehen und Ändern bei Namensänderungen ist gerade bei großen Units sehr aufwendig und fehleranfällig.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Länge des Namens einer TmseForm

Beitrag von mse »

ATILIUS_REGULUS hat geschrieben:Habe jetzt mal zum Test die Eigenschaften im Tree geändert, aber auch da wurden die Änderungen nicht in den Quelltext übernommen.

Die Eigenschaftswerte beziehen sich auf die *.mfm-Datei.
Persönlich nutze ich das Verhalten, daß wenn man den Namen einer Komponente im Objektinspektor ändert, sich alle Stellen im Quelltext und in der Formulardatei automatisch mitgeändert werden, schon seit Urzeiten aus Delphiversionen. Dies finde ich sehr sinnvoll. Könnte man es in MSEide nicht ebenso machen, eventuell abschaltbar, falls es jemanden stört?

Die Komponenten-Feldnamen in der Formular-Klassendefinition der zugehörigen Pascal Unitdatei werden nachgeführt sofern sie geöffnet ist; nicht verändert wird die Formular-Instanzvariable und weitere Verweise in der Software, da dies zu Fehleranfällig ist. MSEide ist nicht darauf angewiesen ein ganzes Projekt fehlerfrei parsen zu können.
Die Art der Namensgebung am Anfang, also die default Werte bei neuen Komponenten, stören mich nicht, da ich diese ohnehin immer auf eigene Namen ändere. Aber ein manuelles Durchgehen und Ändern bei Namensänderungen ist gerade bei großen Units sehr aufwendig und fehleranfällig.

Der Feldname in der zugehörigen Pascal Unit-Datei wird dabei automatisch nachgeführt.

ATILIUS_REGULUS
Beiträge: 57
Registriert: Mi 20. Feb 2013, 10:06
OS, Lazarus, FPC: KUBUNTU 14.04 (fpc 3.3.1) / Raspbian (fpc 3.3.1)
CPU-Target: x86, x64, ARM
Kontaktdaten:

Re: Länge des Namens einer TmseForm

Beitrag von ATILIUS_REGULUS »

Bei mir werden Änderungen, welche ich im Tree durchführe, nicht in den Pascalquelltextdateien nachgezogen, auch nicht, wenn diese geöffnet sind. Leider kann ich kein Bild beifügen, sonst könnte man sehen, daß im Pascalquelltext (Typenname), im Obejktinspektor (Name) und im Tree (classtype, instancevarname, name) alles unterschiedliche Werte zur gleichen Zeit stehen.

Eigentlich geht es mir nur darum, das die Änderungen im Objektinspektor am Namen in der Pascaldatei nachgezogen werden, so wie es Delphi, Lazarus und Typhon schon immer machen.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Länge des Namens einer TmseForm

Beitrag von mse »

Die Änderungen im Tree beziehen sich auf die *.mfm-Datei nicht auf die *.pas-Datei. Formular- und Unit-Datei sind in MSEide unabhängig. Komponenten- und Methodennamenänderungen werden in der geöffneten Unitdatei nachvollzogen, siehe oben und hier
http://mseide-msegui.sourceforge.net/pics/compname1.png
http://mseide-msegui.sourceforge.net/pics/compname2.png

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1430
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Länge des Namens einer TmseForm

Beitrag von fliegermichl »

Ja eben, wieso dann nicht bei dem Formular auch?

Wenn ich in Lazarus oder Delphi ein Formular umbenenne, dann wird sowohl der Klassenname als auch die Instanzvariable ebenfalls umbenannt.

und genau das ist es, was ich dann mühsam in der mfm Datei und in der .pas Datei von Hand machen muss.
Ausserdem muss ich die Unit dann manuell umbenennen und das einbinden der *_mfm.pas ueberarbeiten.

EDIT: Wenn ich im Codeexplorer von Lazarus eine Klasse umbenenne, dann werden (optional) sogar alle externen Referenzen darauf umbenannt. Das spart viel Zeit.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Länge des Namens einer TmseForm

Beitrag von mse »

fliegermichl hat geschrieben:Ja eben, wieso dann nicht bei dem Formular auch?

Weil gleich benannte Instanzvariablen lediglich eine Konvention sind. Wenn man die Namen-Eigenschaft einer inline-Form (Lazarus Jargon "TFrame") umbenennt, wird das Instanz-Feld nachgetragen.
Wenn ich in Lazarus oder Delphi ein Formular umbenenne, dann wird sowohl der Klassenname als auch die Instanzvariable ebenfalls umbenannt.

Das ist ebenfalls lediglich eine Konvention.
EDIT: Wenn ich im Codeexplorer von Lazarus eine Klasse umbenenne, dann werden (optional) sogar alle externen Referenzen darauf umbenannt. Das spart viel Zeit.

Das bedingt, dass die IDE das ganze Projekt fehlerfrei parsen kann, das ist mir zu unsicher. Der Grund für den zurückhaltenden Einsatz von Automatismen in MSEide ist einerseits dass die IDE nicht klüger sein will als die Nutzer und dass man Reparaturen und Änderungen nur dann durchführen kann, wenn man auch weiss wie der Ist-Zustand entstanden ist.

ATILIUS_REGULUS
Beiträge: 57
Registriert: Mi 20. Feb 2013, 10:06
OS, Lazarus, FPC: KUBUNTU 14.04 (fpc 3.3.1) / Raspbian (fpc 3.3.1)
CPU-Target: x86, x64, ARM
Kontaktdaten:

Re: Länge des Namens einer TmseForm

Beitrag von ATILIUS_REGULUS »

Auch wenn es nur eine Konvention ist, ist diese schon sehr alt (>10 Jahre) und wird von allen Pascal-Programmierern, die ich kenne, genutzt.
Das man nicht unbedingt in allen Dateien die Namen anpaßt - obgleich dies auch nützlich ist -, kann ich verstehen, aber zumindest in der zugeordneten Pasacaldatei wäre es schön, Änderungen des Namens im Objektinspektor auch im Pascalquelltext synchron zu halten.

Wenn dies nicht zuviel Aufwand darstellt, überlegst Du es Dir vielleicht nochmal, man könnte das Verhalten ja optional halten.
Zumindest Neu-/Quereinsteigern in MSEide wie mir würde dies sehr zusagen.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Länge des Namens einer TmseForm

Beitrag von mse »

mse hat geschrieben:Ich werde die Endung der Instanzvariable parametrierbar machen.

git master 2a57b7e220767a8859ae8f16278e878c6abd3d8b hat eine neue Spalte 'Formsuffix'.
http://mseide-msegui.sourceforge.net/pi ... suffix.png
https://gitlab.com/mseide-msegui/mseide-msegui

ATILIUS_REGULUS
Beiträge: 57
Registriert: Mi 20. Feb 2013, 10:06
OS, Lazarus, FPC: KUBUNTU 14.04 (fpc 3.3.1) / Raspbian (fpc 3.3.1)
CPU-Target: x86, x64, ARM
Kontaktdaten:

Re: Länge des Namens einer TmseForm

Beitrag von ATILIUS_REGULUS »

Nur um kein Mißverständnis aufkommen zu lassen:
Die Parametrierung der Endung der Instanzvariablen hat nichts mit dem Synchronhalten des Namensproperty im Objektinspektor mit den Typennamen in der Pascaldatei zu tun...

ATILIUS_REGULUS
Beiträge: 57
Registriert: Mi 20. Feb 2013, 10:06
OS, Lazarus, FPC: KUBUNTU 14.04 (fpc 3.3.1) / Raspbian (fpc 3.3.1)
CPU-Target: x86, x64, ARM
Kontaktdaten:

Re: Länge des Namens einer TmseForm

Beitrag von ATILIUS_REGULUS »

Habe gerade gemerkt, daß bei Komponenten innerhalb eines TForm, also nicht bei TForm selbst, die Umbennung des Namens im Objektinspektor im Pascalquelltext synchron gehalten wird, also zum Beispiel bei einem TButton automatisch der Name im Pascalquelltext umbenannt wird.
Nur bei der Änderung des Namens einer TForm wird dies nicht bei dem Namen des Typs nachgehalten...

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Länge des Namens einer TmseForm

Beitrag von mse »

ATILIUS_REGULUS hat geschrieben:Habe gerade gemerkt, daß bei Komponenten innerhalb eines TForm, also nicht bei TForm selbst, die Umbennung des Namens im Objektinspektor im Pascalquelltext synchron gehalten wird, also zum Beispiel bei einem TButton automatisch der Name im Pascalquelltext umbenannt wird.
Nur bei der Änderung des Namens einer TForm wird dies nicht bei dem Namen des Typs nachgehalten...

Das habe ich in mehren Posts versucht rüberzubringen. ;-)

Antworten