Zmiana nazwy formy.

0

Cześć.

Powracam do zabawy z Lazarusem po paru latach. Niestety nie jest gładko. Po zmianie nazwy formy z TForm1 na TFormaA w głównym unicie oraz w *.lpr dostaję taki wyjątek na start jak w screenie. Bardzo proszę o pomoc. Hobbystycznie po pracy tworzyć chcę pewną aplikacje, jednak nie w języku w którym pracuje na co dzień (C#). Lubię Pascala, ale widzę, że nowe Delphi jest strasznie drogie, a wersja Starter ma ograniczenia dlatego chciałem użyć Lazarusa. Dzięki za pomoc i wasz czas!

title

3

Prawdopodobnie w pliku DFM (czy jaki jest ich odpowiednik w Lazarusie bo nawet nie pamiętam czy tak samo czy inaczej) powinieneś jeszcze zmienić. Poza tym to nie jest zmiana nazwy formy a nazwy jej klasy.

0

Dzięki. To rozwiązało mój problem. Pytanie czy można jakoś sensownie zmieniać nazwy klas formularzy bez grzebania ręcznie w *lfm w Lazarusie? Oczywiście masz racje - to chodzi o nazwę klasy a nie formularza. Użyłem złego sformowania. Wole nazywać konkretnie klasy formularzy tym czym są, a nie TForm1 ;)

2
SomeDev napisał(a):

Pytanie czy można jakoś sensownie zmieniać nazwy klas formularzy bez grzebania ręcznie w *lfm w Lazarusie?

Da się – otwórz projekt w Lazarusie, znajdź interesującą Cię klasę, ustaw na niej kursor (tekstowy), wciśnij F2, podaj nową nazwę i zatwierdź. To spowoduje, że wszystkie wystąpienia identyfikatora klasy w całym projekcie zostaną zamienione na nowy ciąg, czyli na nową nazwę. Narzędzie do zmiany identyfikatorów ma trochę opcji, więc je sprawdź (głównie mowa o radio-przyciskach określających zasięg zmian).

W ten sposób możesz zmieniać nazwy dowolnych elementów kodu – stałych, zmiennych, typów danych itd.

0

wystarczy to zrobić z poziomu lazarusa a nie ręcznie

1

@furious programming: Da się, ale z tego co zrozumiałem, to OP pyta nie o zmianę nazwy formy, ale całej klasy ("czy można jakoś sensownie zmieniać nazwy klas formularzy"). Jak zrobisz to przez F2 to niby się kompiluje, ale podczas uruchomienia wywala błąd jak na załączonym obrazku:

screenshot-20180709132231.png
.

Natomiast jeśli chcesz zmienić nazwę klasy - chodzi o zmianę TForm1 na coś innego (jak np. w poniższym przykładzie - na innanazwa)
.

type
      innanazwa = class(TForm)
      private

      public

      end;                       

.

to robi się to z poziomu Objeci Inspectora - tak, jak pokazałem na poniższym obrazku:

.

screenshot-20180709133551.png

.

P.S. Widać, że mam zdolności plastyczne. W końcu żona po malarstwie na ASP, więc do czegoś to zobowiązuje :D

1
cerrato napisał(a):

@furious programming: Da się, ale z tego co zrozumiałem, to OP pyta nie o zmianę nazwy formy, ale całej klasy.

Toż ja nie napisałem o zmianie nazwy formularza, a o zmianie nazwy klasy, czyli typu danych, bo o to właśnie pyta OP. Choć to narzędzie pozwala na zmianę nazw dowolnych identyfikatorów.

Jak zrobisz to przez F2 to niby się kompiluje […]

Ma się kompilować – to narzędzie zapewnia, że wszystkie wystąpienia danego identyfikatora w projekcie zostaną podmienione (chyba że wybrano inny zasięg zmian). Tak więc skorzystanie z niego jest jedynym sensownym rozwiązaniem.

Nigdy nie zmienia się nazw ręcznie, bo nie dość, że trwa to znacznie dłużej, to jeszcze nie ma gwarancji, że zmieniło się wszystkie wystąpienia (co w razie czego wyjdzie na jaw podczas kompilacji – jeśli coś przeoczeno, dostaniemy błąd undeclared identifier).

ale podczas uruchomienia wywala błąd […]

A no wywala, bo durne IDE nie bierze pod uwagę plików .lfm, gdzie nazwy klas formularzy także są zapisywane. Ba, problemów związanych z tym narzędziem jest więcej – czasem ignoruje zmiany nazw metod z własnych helperów, a czasem gubi się, gdy używamy przestrzeni nazw. Trochę bugów jest.


Podsumowując – narzędzie do zmiany nazw pozwala na zmianę identyfikatorów w zadanych plikach (według ustawienia zasięgu zmian), po to, aby zapewnić poprawność kompilacji, natomiast zasobami (czyli zawartością plików .lfm) trzeba się zająć samemu. Te póki co nie są wspierane, albo ze względu na okrojoną funkcjonalność, albo ze względu na błędy.

0

@furious programming: Zgadza się, wiem, z czego ten błąd wynika.
Ale robiąc to poprzez zmianę w Object Inspectorze unikasz problemu związanego z niemożliwością podłączenia zasobów.

Teraz pytanie - co OP chce osiągnąć:
Jeśli chce zmienić nazwę klasy na samym początku pisania, kiedy jeszcze nigdzie nie ma żadnych odwołań do tej klasy - poprawia w Inspektorze i po temacie.

Jeśli natomiast ma już działający kod to trzeba go rzeczywiście zrefaktorować poprzez F2 (albo ręcznie - aczkolwiek nie polecam). Tylko problemem jest to, że się .lfm'y nie podlinkują i całość się wychrzani. Dlatego w takiej sytuacji najlepiej połączyć jedno z drugim - najpierw refaktor, a potem zmiana w Inspektorze, co spowoduje poprawienie wszędzie tam, gdzie trzeba - w ten sposób da się poprawnie zmienić nazwę klasy formatki.

0
cerrato napisał(a):

Ale robiąc to poprzez zmianę w Object Inspectorze unikasz problemu związanego z niemożliwością podłączenia zasobów.

Ale wiesz, że nazwa obiektu formularza nie musi być zgodna z nazwą klasy formularza? ;)

To że IDE pewne rzeczy robi z automatu (jak np. aktualizacja nazwy klasy okna), wcale nie oznacza, że zabieg ten jest konieczny – można mieć różne nazwy klas i właściwości. IDE jest tylko narzędziem pozwalającym przeprowadzać modyfikacje w prosty i efektywny sposób. Kompilator natomiast skompiluje kod, pod warunkiem, że jest poprawny składniowo i semantycznie – a owa różnorodność identyfikatorów jest jak najbardziej dozwolona.

0

Ja jestem prosty chłop, który myśli w prosty sposób: Jeśli coś ma mieć zmienioną nazwę przez F2 i wyskakują błędy - znaczy, że to nie działa.
Jeśli zmieniam to w Inspektorze w pozycji NAME i system mi sam zmienia w kodzie deklarację klasy (zaznaczyłem/pokazałem to kilka postów wyżej na screenie) i jest OK - znaczy, że działa ;)

A tak poważnie - co jest złego w podanym przeze mnie sposobie?

A co do Ale wiesz, że nazwa obiektu formularza nie musi być zgodna z nazwą klasy formularza? - masz jakiś inny sposób? Bo F2 powoduje, że trzeba ręcznie grzebać w .lfm'ach co nie jest wygodne i potencjalnie błędogenne.

1 użytkowników online, w tym zalogowanych: 0, gości: 1