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.

0
cerrato napisał(a):

Jeśli coś ma mieć zmienioną nazwę przez F2 i wyskakują błędy - znaczy, że to nie działa.

Działa, tylko… nie zawsze. ;)

Bo F2 powoduje, że trzeba ręcznie grzebać w .lfm'ach co nie jest wygodne i potencjalnie błędogenne.

Jeśli wartość właściwości Name i nazwa klasy formularza mają być ze sobą zgodne (czyli różniące się wyłącznie prefiksem T) to należy skorzystać z inspektora obiektów i mieć problem z głowy.

Ale jeśli chcemy, aby wartość właściwości Name, nazwa klasy formularza lub nazwa globalnej zmiennej miała nazwę niepasującą do schematu, to którąś z nich trzeba zmienić samemu – albo ręcznie poprawić, albo skorzystać z narzędzia do zmiany nazw. Jeden formularz to trzy ciągi, które nie muszą być ze sobą powiązane, więc w praktyce można mieć jeden formularz, ale trzy zupełnie różne identyfikatory.


Jeśli o nazewnictwo chodzi, to polecam poniższy schemat, zgodny z IDE i przez niego w pełni wspierany:

  • *Window.pp i *Window.lfm – nazwy plików z kodem i zasobami formularza,
  • T*Form – identyfikator klasy formularza,
  • *Form – wartość właściwości Name formularza oraz identyfikator globalnej zmiennej z jego referencją.

Notacja węgierska niemile widziana. W miejsce * należy wstawić konkretną nazwę, np. Main, Settings itd.

0

Wiem to wszystko o czym piszesz :P

Pytając "czy masz jakiś inny sposób" chodziło mi właśnie o uniknięcie tego ręcznego poprawiania. No bo niby mamy opcję refaktoryzacji, ale jak widać - nie działa ona do końca tak, jak powinna. Wiem, że ręcznie można praktycznie wszystko zrobić, ale myślałem, że znasz jakiś magiczny mechanizm.

Poza tym - można zmienić i nazwę klasy i nazwę obiektu - tak, jak widać na poniższym zrzucie:

.

screenshot-20180709145304.png

.

Najpierw zmieniasz "NAME" w inspektorze, a potem nie na klasie, ale na konkretnej instancji dajesz refaktora.
Sprawdzone - kompiluje się i działa bez jakichkolwiek akrobacji :)

0

Dzięki wszystkim za odpowiedzi. Zmiana właściwości NAME, a potem zmiana nazwy obiektu sądzę, że jest najlepsze. Niestety F2, opiera się z tego co widzę, na szukaniu ciągu znaków i nie ma pojęcia, o tym co to jest nazwa klasy, a co to jest komentarz etc. Niemniej zmiana właściwości NAME, jak zaczyna się budować nową formę jest wystarczające. Gorzej potem z refaktoryzacją, jak mamy pełno odwołań do klasy. No szkoda, że nie ma tutaj czegoś takiego jak rename w VisualStudio, gdzie rozpoznaje co to za element składni i potrafi według referencji pozmieniać wszędzie. Dzięki za pomoc. Wieczorem dalej będę rzeźbił programik. Dziś przetestuje połączenie do bazy danych. Może obędzie się bez kupowania Delphi - jednak 6k to sporo ;)

0

@furious programming: A tak właściwie - to czym się różni refaktoryzacja nazwy zmiennej przez F2 od zrobienia tego ręcznie poprzez Ctrl+R? Poza oczywiście tym, że F2 może także pozamieniać w innych miejscach/unitach, w których jest odwołanie do danej zmiennej? Pytam serio - czy poza samym zamienieniem nazwy, odbywa się jeszcze jakaś magia tudzież działania dodatkowe?

3

Narzędzie do refaktoryzacji uwzględnia kontekst (np. jeśli w wielu funkcjach masz zmienne o tej samej nazwie, Ctrl+R zamieni wszystkie te nazwy, a nie tylko jedną z nich).

0

F2, opiera się z tego co widzę, na szukaniu ciągu znaków i nie ma pojęcia, o tym co to jest nazwa klasy, a co to jest komentarz etc

Na samym dole okienka, które się pojawia podczas F2 masz do postawienia ptaszek przy "search in comments too" - to odnośnie grzebania w komentarzach :P

0

Fakt. F2 jednak wie co to nazwa klasy, co to komentarz, a co to zmienna lokalna. Jak zmieniam nazwę klasy to zmiennych lokalnych nie rusza. Czyli takie głupie to F2 nie jest. Faktycznie posiada jednak mankament - zapomina o plikach LFM. Szkoda, też, że przez F2 nie zmienisz nazwy zmiennej lokalnej. No nic trzeba pamiętać i liczyć na rozwój tych narzędzi. Co do konta - zależy mi na anonimowości i nie mam ochoty podawać maila firmowego czy prywatnego, a nie chciałem na szybko zakładać nowego.

0

przez F2 nie zmienisz nazwy zmiennej lokalnej

Teraz nie mogę sprawdzić, ale wydaje mi się, że jeśli uruchomisz F2 będąc w zakresie zmiennej lokalnej, to właśnie on zmieni tylko tą zmienną, nie ruszając takich samych zmiennych o charakterze globalnym albo lokalnych w innych zakresach. Aczkolwiek - jak powiedziałem - w tej chwili nie mogę tego sprawdzić, więc proszę o potwierdzenie albo sprostowanie.

0
SomeDev napisał(a):

Szkoda, też, że przez F2 nie zmienisz nazwy zmiennej lokalnej.

Nie wygaduj takich rzeczy… Praktycznie wszystko można za jego pomocą zmienić – nazwy typów danych, stałych, zmiennych, metod, lokalnych i globalnych, w jednym lub wielu powiązanych plikach. Zmienia również wysąpienia identyfikatorów w komentarzach (code insight też działa wewnątrz komentarzy).

A jakby tego było mało, edytor kodu wspiera coś w rodzaju subedytora, w którym jeszcze szybciej i dokładniej można poprawiać kod – szybciej, bo bez konieczności przełączania się pomiędzy oknami, tylko w zaznaczonym fragmencie kodu i dla dowolnych ciągów znaków (również literałów, słów kluczowych itd.):

subeditor.png

Może pobaw się nieco więcej samym środowiskiem, bo widzę, że w ogóle go nie znasz.

0

W moim odczuciu masz nieco nieprzyjemny styl wypowiedzi. Wspominałem, że pracuje na co dzień w Visual Studio i w C#, dlatego sugeruje się jego działaniem. Może błędnie bo VS jest na ergonomicznych wyżynach, a Lazarus to jednak chałupnictwo. Okazuje się, że kursor **musi ** być w obrębie zmienianej frazy. W VS starczy kliknąć PPM na zmienną i też łapie - w Lazarusie niestety nie. Kolejna niedoróbka, niemniej dla kogoś z przyzwyczajeniami wprowadza w błąd.

title

@cerrato - zarejestrowałem się jednak.

0
somedev napisał(a):

W moim odczuciu masz nieco nieprzyjemny styl wypowiedzi.

A w którym momencie Szanownego Pana uraziłem? Pisząc, abyś „nie wygadywał takich rzeczy” (bądź co bądź, abyś nie pisał nieprawdy)? Czy może stwierdzeniem, żebyś się pobawił środowiskiem, bo ewidentnie go nie znasz i sam sobie utrudniasz życie?

Za niedługo nawet pochwalić nie będzie można, bo i o to będą mieć pretensje.

Może błędnie bo VS jest na ergonomicznych wyżynach, a Lazarus to jednak chałupnictwo.

Ach tak… chałupnictwem jest wciśniśnięcie F2, podanie nowego identyfikatora i stuknięcie w Enter? A może wbudowany subedytor, pozwalający jeszcze szybciej i wygodniej manipulować zawartością przede wszystkim niewielkich fragmentów kodu (jak ciała metod) nim jest?

Jak Ty programujesz myszą, to nawet najdroższe i najlepsze IDE w niczym Ci nie pomoże.

Okazuje się, że kursor **musi ** być w obrębie zmienianej frazy. W VS starczy kliknąć PPM na zmienną i też łapie - w Lazarusie niestety nie.

Okazuje się, że oprócz niewiedzy, doskwiera Ci również lenistwo. To czy kursor tekstowy ma być przenoszony po PPM determinuje się w ustawieniach środowiska. Wystarczy owe okno otworzyć, wybrać gałąź Editor/Mouse i zafajkować opcję Right mouse includes caret move. A jak się nie wie czy dana opcja istnieje i jeśli tak to w której gałęzi, to korzysta się z filtrowania – w lewym górnym rogu okna ustawień masz do tego celu pole edycyjne.

VS nie ma okna ustawień, czy zawsze pracujesz na domyślnej konfiguracji, regularnie narzekając na „chałupnictwo” czy wmawiając sobie i innym domniemane bugi? Dla mnie to niepojęte.

Kolejna niedoróbka, niemniej dla kogoś z przyzwyczajeniami wprowadza w błąd.

To samo mógłbym stwierdzić przenosząc się po 6 latach z Lazarusa na VS„VS jest niedorobiony, bo robi coś inaczej niż Lazarus”. Oczywiście gdybym chciał wyjść na ignoranta i przy okazji obrazić twórców środowiska.

Lazarus nie jest środowiskiem rewelacyjnym, jednak jego funkcjonalność jest wystarczająco duża, aby programować sprawnie i wygodnie. Dlatego też powtórzę jeszcze raz – pobaw się tym środowiskiem, sprawdź jakie funkcje posiada i przede wszystkim wstępnie je skonfiguruj (a to powinieneś zrobić zaraz po pierwszym uruchomieniu IDE). A zanim coś skrytykujesz, najpierw upewnij się, że masz do tego jakieś podstawy.

1
furious programming napisał(a):
somedev napisał(a):

W moim odczuciu masz nieco nieprzyjemny styl wypowiedzi.

A w którym momencie Szanownego Pana uraziłem? Pisząc, abyś „nie wygadywał takich rzeczy” (bądź co bądź, abyś nie pisał nieprawdy)? Czy może stwierdzeniem, żebyś się pobawił środowiskiem, bo ewidentnie go nie znasz i sam sobie utrudniasz życie?

Za niedługo nawet pochwalić nie będzie można, bo i o to będą mieć pretensje.

Ja oceniłem styl Twojej wypowiedzi, gdyż wyczuwam w tym co piszesz pewnego rodzaju lekceważenie pytającego. Zauważ, że ja oceniłem tylko tekst jaki napisałeś, a nie Cienie, a Ty już zdążyłeś określić, że jestem ignorantem, leniem i mam dużą niewiedzę. No nie wiem komu tutaj nie można uwagi zwrócić ;) Opinie są subiektywne i żadnym tłumaczeniem ich nie zmienisz tylko dobrym doświadczeniem (czyli moją opinię zmieni chociażby bardziej empatyczny sposób wypowiedzi. Niemniej to tylko moja opinia, może być nie podzielana przez innych, a może i tak, jednak ostatecznie to Twoje życie).

Może błędnie bo VS jest na ergonomicznych wyżynach, a Lazarus to jednak chałupnictwo.

Ach tak… chałupnictwem jest wciśniśnięcie F2, podanie nowego identyfikatora i stuknięcie w Enter? A może wbudowany subedytor, pozwalający jeszcze szybciej i wygodniej manipulować zawartością przede wszystkim niewielkich fragmentów kodu (jak ciała metod) nim jest?

Wciśnięcie F2, zmienienie nazwy klasy, po czym przez tą operacje rzucane są wyjątki w czasie wykonywania - z pewnością jest to przejaw chałupnictwa.

Jak Ty programujesz myszą, to nawet najdroższe i najlepsze IDE w niczym Ci nie pomoże.

Wyrosłem już z bycia Ninja H4x10r3m, który gardzi myszką, koduje na klawiaturze wpatrzony w ciemny ekran z bursztynowym tekstem ;) Myszka jest na rynku już jakieś 30 czy 40 lat i jest narzędziem użytecznym. Kuriozum jest sugerowanie, że posługując się myszką zalety IDE nie wpływają na wygodę. Życie nie jest czarno/białe - można używać klawiatury/skrótów/myszki zamiennie, w różnych sytuacjach. Takie są też moje preferencje, że mając parę monitorów i parę edytorów szybszym jest kliknięcie niż przełączenie się przez szereg okien a potem jeszcze dotarcie kursorem za pomocą strzałek, ctrl,shift,home, end etc. Jeden klik w takim przypadku jest szybszy. Zresztą mam takie preferencje i tyle.

Okazuje się, że kursor **musi ** być w obrębie zmienianej frazy. W VS starczy kliknąć PPM na zmienną i też łapie - w Lazarusie niestety nie.

Okazuje się, że oprócz niewiedzy, doskwiera Ci również lenistwo. To czy kursor tekstowy ma być przenoszony po PPM determinuje się w ustawieniach środowiska. Wystarczy owe okno otworzyć, wybrać gałąź Editor/Mouse i zafajkować opcję Right mouse includes caret move. A jak się nie wie czy dana opcja istnieje i jeśli tak to w której gałęzi, to korzysta się z filtrowania – w lewym górnym rogu okna ustawień masz do tego celu pole edycyjne.

VS nie ma okna ustawień, czy zawsze pracujesz na domyślnej konfiguracji, regularnie narzekając na „chałupnictwo” czy wmawiając sobie domniemane bugi? Dla mnie to niepojęte.

PyCharm, notepad++, VS tak działają (przenoszą kursor PPM), nawet Delphi tak działa (na którym wzoruje się Lazarus), wiec miałem solidne podstawy do uznania, że tak będzie i w Lazarusie. Dla mnie niepojęte jest nie kierowanie się intuicją gdy pewne elementy w większości świata są takie same (kolor niebieski na zimną wodę, klamki otwierane w dół, nakrętki w butelkach z prawym gwintem etc.). Okazuje się, że jest inaczej i to zapamiętam.

Kolejna niedoróbka, niemniej dla kogoś z przyzwyczajeniami wprowadza w błąd.

To samo mógłbym stwierdzić przenosząc się po 6 latach z Lazarusa na VS„VS jest niedorobiony, bo robi coś inaczej niż Lazarus”. Oczywiście gdybym chciał wyjść na ignoranta i przy okazji obrazić twórców środowiska.

Wychodzi na to, że większość IDE działa w tej materii inaczej niż Lazarus.

Lazarus nie jest środowiskiem rewelacyjnym, jednak jego funkcjonalność jest wystarczająco duża, aby programować sprawnie i wygodnie. Dlatego też powtórzę jeszcze raz – pobaw się tym środowiskiem, sprawdź jakie funkcje posiada i przede wszystkim wstępnie je skonfiguruj (a to powinieneś zrobić zaraz po pierwszym uruchomieniu IDE). A zanim coś skrytykujesz, najpierw upewnij się, że masz do tego jakieś podstawy.

Tak Lazarus ma pełno błędów (aczkolwiek w obecnej wersji wcale nie więcej niż Delphi 2009), jednak masz racje, że nadaje się do produkcji oprogramowania. Sam niedawno linkowałem tutaj firmę która świadczy wsparcie w Lazarusie. Dlatego też zdecydowałem się na projekt w Lazarusie a nie mniej stabilnych i mniej dojrzałych ekosystemach. Równocześnie chciałem, by styl jaki determinuje sama technologia był sprawdzony i były znane jego zalety i wady wypracowane przez lata. Nie chce, żeby była to technologia głównego nurtu, gdyż w tej piszę w pracy. Z powodów, że to troszkę hobbystycznie/może rozwinie się coś biznesowego, obecnie bawię się, i nie zamierzam w celu rozrywki spędzać godzin czy dni na konfiguracje i poznanie środowiska, a po prostu piszę. Co do krytyki środowiska - miałem podstawy co wyżej udowodniłem.

Dziękuję Tobie bardzo za cenne rady - zapamiętam je i ustawię sobie IDE według potrzeb. Niemniej radzę, włożyć nieco więcej empatii w dyskusji, szczególnie niewerbalnej, zaprzestania pochopnego oceniania innych i nieco większy dystans do siebie i do narzędzi ... które, są tylko narzędziami posiadającymi wady i zalety (które de facto też są odbierane subiektywnie). Ten wątek nie dość, że rozwiązał mój problem, zrozumiałem jego przyczynę, to dowiedziałem się jeszcze o ciekawych opcjach. Wierzę, że z kolejnych wymian zdań, może w innych tematach czerpać będę równie wiele wiedzy. Co do tego tematu - sądzę, że go wyczerpaliśmy, przytoczone zostały powody, błędy jakie są w IDE oraz sposoby dojścia do zamierzanego efektu. Dalsza dyskusja na temat jakości Lazarusa czy innych środowisk jest prowadzona nie w tym miejscu co powinna, a i tak jest kompletnie niezasadna, gdyż jak wspomniałem wchodzi tutaj dość sporo subiektywnych kryteriów.

Pozdrawiam serdecznie! Dziękuję wszystkim za udział w dyskusji i rozwiązaniu mojego problemu.


BTW. dwuklik na IBConnection w Inspektorze.
title

Mam nadzieję, że nie będzie to częste, bo będę musiał niestety uzbierać nieco na Delphi ...

0
somedev napisał(a):

Ja oceniłem styl Twojej wypowiedzi, gdyż wyczuwam w tym co piszesz pewnego rodzaju lekceważenie pytającego.

Przewrażliwiony jesteś. W dwóch postach (tym i tym) odpisałem Ci bezpośrednio, w sposób rzeczowy i kulturalny, stwierdzając fakty, nie snując domysły.

Zauważ, że ja oceniłem tylko tekst jaki napisałeś, a nie Cienie, a Ty już zdążyłeś określić, że jestem ignorantem, leniem i mam dużą niewiedzę.

W którym momencie się pomyliłem, co do tych trzech stwierdzeń? Choć w sumie wymieniłem dwa. Nie zapoznałeś się ze środowiskiem, nie zajrzałeś do dokumentacji, więc owe lenistwo jest uzasadnione. Nie skonfigurowałeś środowiska, a nawet nie zapoznałeś się z jego funkcjonalnością, ale od razu ogłosiłeś, że Lazarus jest cienki, bo jakaś funkcja działa inaczej – to niewiedza i ignorancja. Do tego nie rozróżniasz nazwy formularza od nazwy klasy formularza.

Opinie są subiektywne i żadnym tłumaczeniem ich nie zmienisz tylko dobrym doświadczeniem (czyli moją opinię zmieni chociażby bardziej empatyczny sposób wypowiedzi.

Opinię można mieć na temat ogólnej jakości środowiska, a Ty po prostu wprowadzasz użytkowników w błąd, twierdząc, że czarne jest białe – to zasadnicza różnica.

Wciśnięcie F2, zmienienie nazwy klasy, po czym przez tą operacje rzucane są wyjątki w czasie wykonywania - z pewnością jest to przejaw chałupnictwa.

Ta funkcja nie została przystosowana do automatycznej aktualizacji plików z zasobami formularzy. Widać wszyscy tworzą projekty w sposób natywny, bez kombinacji na okrętkę, dlatego też brak zgłoszeń w tym temacie – może jesteś pierwszy? W razie czego zachęcam do zgłaszania swoich uwag i błędów na bugtrackerze i/lub na forum.

Wyrosłem już z bycia Ninja H4x10r3m, który gardzi myszką, koduje na klawiaturze wpatrzony w ciemny ekran z bursztynowym tekstem ;)

Gdzie napisałem, że używanie myszy jest złe?

Kuriozum jest sugerowanie, że posługując się myszką zalety IDE nie wpływają na wygodę.

Kuriozum to naciąganie, przeinaczanie i nadinterpretacja moich słów w celu obrony własnego stanowiska.

PyCharm, notepad++, VS tak działają (przenoszą kursor PPM), nawet Delphi tak działa (na którym wzoruje się Lazarus), wiec miałem solidne podstawy do uznania, że tak będzie i w Lazarusie.

Spróbuj Vima, to się szybciutko wyleczysz z przyzwyczajeń.

Ja nie mam pretensji o to, że nie podoba Ci się odmienność standardowej konfiguracji edytora (której pewnie i tak nikt nie używa), a o to, że piszesz nieprawdę, bo nawet nie spróbowałeś dowiedzieć się czy można coś w tym temacie zrobić. Tym bardziej, że absolutnie każdy edytor można konfigurować, w szczególności edytor kodu (również ten w VS).

Wychodzi na to, że większość IDE działa w tej materii inaczej niż Lazarus.

Wychodzi na to, że programistom posługującym się Lazarusem to nie przeszkadza, stąd brak przenoszenia kursora po PPM jest zachowaniem domyślnym. Zapewne gdyby było inaczej, to i domyślny stan tej opcji byłby inny.

Z powodów, że to troszkę hobbystycznie/może rozwinie się coś biznesowego, obecnie bawię się, i nie zamierzam w celu rozrywki spędzać godzin czy dni na konfiguracje i poznanie środowiska, a po prostu piszę.

Niezbyt to profesjonalne i też niezbyt logiczne – Twoje tworzenie projektu szybko przerodzi się w walkę ze środowiskiem. Ale rób jak uważasz.

Dziękuję Tobie bardzo za cenne rady - zapamiętam je i ustawię sobie IDE według potrzeb.

To się kłóci z tym co skomentowałem wyżej – sam sobie zaprzeczasz. Mimo wszystko popieram chęć konfiguracji środowiska, wyjdzie Ci to wyłącznie na dobre.

BTW. dwuklik na IBConnection w Inspektorze.
title

Nie potwierdzam – u mnie działa prawidłowo, nie wyskakuje żaden błąd. Biorąc pod uwagę to, w jaki sposób tworzysz swój program i jak ”niecodzienne” praktyki stosujesz, jakoś ten błąd mnie nie dziwi.

0

@furious programming: wiesz, że Cię kocham jak brata, ale muszę tym razem (w jednym aspekcie) stanąć po stronie OP'a ;)

Fragment "Jak Ty programujesz myszą, to nawet najdroższe i najlepsze IDE w niczym Ci nie pomoże." w mojej ocenie właśnie jest podważeniem sensu używania myszki, więc odpowiadając na Twoje pytanie "Gdzie napisałem, że używanie myszy jest złe?" - napisałeś to w podanym przed chwilą cytacie. Może miałeś coś innego na myśli, ale wyszło jak wyszło i ja też ten fragment odebrałem w stylu "jak lamerze chcesz klikać myszką, to masz problem i nie marudź" :P

0
cerrato napisał(a):

@furious programming: wiesz, że Cię kocham jak brata, ale muszę tym razem (w jednym aspekcie) stanąć po stronie OP'a.

Nie podlizuj się. ;)

Może miałeś coś innego na myśli, ale wyszło jak wyszło […]

Miałem na myśli to, że wiele czynności (jak np. zmiana identyfikatora) można wykonać szybciej z poziomu klawiatury. O ile wygoda danego rozwiązania jest subiektywna, tak czas wykonania już nie jest. Zmiana nazwy elementu jest tak samo powszechną czynnością jak skopiowanie czy wycięcie tekstu, co zwykle robi się również z poziomu klawiatury, nie za pomocą myszy i menu kontekstowego.

Napisałem wyraźnie, że kursor tekstowy należy umieścić na identyfikatorze:

furious programming napisał(a):

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ź.

Pytacz tego nie zrobił i stwierdził, że „nie da się”. No kurcze, przecież to oczywiste, że kursor musi się znajdować na danym elemencie, aby odpowiednie mu opcje były dostępne. To nie jest widzimisię Lazarusa – tak to działa wszędzie… Równie dobrze można by powiedzieć, że dany edytor jest beznadziejny, bo nie pozwala skopiować tekstu, gdy ten w ogóle nie jest zaznaczony.

Również oczywistym jest to, że bez względu na sposób wywołania danej akcji, obsługa tej akcji jest jedna. Dlatego też nieistotne jest czy wciśniemy F2, czy odpalimy opcję menu głównego, czy kontekstowego – ten sam kod obsługi zostanie wywołany. Skoro dana opcja nie jest dostępna z poziomu menu kontekstowego, to i nie będzie dostępna z poziomu klawiatury – i vice versa. To przecież logiczne.

0

Nie zamierzam odnosić się więcej do tego jak oceniasz mój styl czy profesjonalizm na podstawie jednego gifa i wypowiedzi o zabawie nie widząc projektów jakie tworze czy kieruje ich rozwojem. Styl programowania nie ma nic do rzeczy w tym ze AV to AV. Nastąpił wjazd na pamięć. Oczywiście nie musiało to nastąpić w momencie dwukliku tylko wtedy doszło np. do odczytu zmienionej pamięci. AV zawsze jest nieudolnością programisty nie użytkownika. EOT.

0
somedev napisał(a):

AV zawsze jest nieudolnością programisty nie użytkownika. EOT.

No właśnie to wymaga doprecyzowania - czy Ty coś pisałeś i lekko skopałeś, w związku z czym wyskoczył pokazany wcześniej zonk, ale wina jest całkowicie po Twojej stronie, czy to raczej wynika z jakichś błędów biblioteki LCL/Lazarusa jako całości. Jeśli opcja numer 1 to po prostu musisz poprawić i tyle. Ale komentarz o treści "Mam nadzieję, że nie będzie to częste, bo będę musiał niestety uzbierać nieco na Delphi" sugeruje szukanie winy w środowisku, co się trochę kłóci z fragmentem zacytowanego na górze tego wpisu (bo rozumiem, że teraz Ty jesteś programistą, więc AV jest Twoim dziełem).

0

Nie. To nie AV w moim programie tylko Lazarus się wykrzyczał przy losowym dwukliku.

1
somedev napisał(a):

Nie zamierzam odnosić się więcej do tego jak oceniasz mój styl czy profesjonalizm na podstawie jednego gifa i wypowiedzi o zabawie nie widząc projektów jakie tworze czy kieruje ich rozwojem.

Tylko na podstawie tego wątku mógłbym napisać znacznie więcej na ten temat. Przez tyle lat na forum zdążyłem poznać podejście mnóstwa osób i naoglądać się tysięcy mniejszych i większych kawałków kodu w różnych językach – potrafię odróżnić programowanie od chałupnictwa, a także profesjonalistę od newbie. ;)

Oczywiście nie musiało to nastąpić w momencie dwukliku tylko wtedy doszło np. do odczytu zmienionej pamięci.

Nie, nie, nie – Access Violation lub SIGSEGV to wyjątek rzucany wyłącznie podczas próby odczytu lub modyfikacji pamięci nieprzydzielonej (nieważne czy jeszcze nie zaalokowanej, czy już zwolnionej), nie żadnej zmienionej.

AV zawsze jest nieudolnością programisty nie użytkownika. EOT.

Zależy od kontekstu. Bo zależy, czy dany algorytm ma być bezpieczny i uniwersalny, czy priorytetem jest wysoka wydajność. Jeśli to pierwsze, to implementuje się szereg zabezpieczeń i konkretny mechanizm obsługi ewentualnych błędów, tak aby nigdy nie utracić kontroli nad przepływem sterowania. A jeśli to drugie, to nie implementuje się żadnych zabezpieczeń, przenosząc odpowiedzialność za poprawność wywołania i danych wejściowych na użytkownika.

W tym przypadku akurat jest to błąd albo po stronie komponentu, albo po stronie IDE.


Dlatego też zamiast prowadzić tutaj jałowe narzekanie, poproś o wskazanie przyczyny i rozwiązanie problemu np. na forum Lazarusa – opisz problem sensownie, podaj sposób reprodukcji błędu, standardowo. Przy czym zrzut okna błędu podpisany słowami „dwuklik na IBConnection w Inspektorze” to nie jest sensowny opis problemu. Tylko nie wyskakuj od razu z epitetami, bo w odpowiedzi dostaniesz bardziej dosadne stwierdzenia, niż to co sam napisałem.

Przyzwyczaj się – Lazarus jest oprogramowaniem otwartym, nad którym pracują wolontariusze. Nie wiem czy i ile mają za to płacone (nie moja broszka), jednak mimo wszystko dają całkiem dobre narzędzie za darmo, więc trzeba się cieszyć. Zresztą niczym nadzwyczajnym jest niższa jakość oprogramowania otwartego od komercyjnego, tworzonego przez giganta jak np. Microsoft. Zrozum to w końcu i albo pogódź się z tym, albo zbieraj na Delphi. Tylko nie zdziw się, jeśli w Delphi znajdziesz błędy – każde oprogramowanie je posiada, VS również.

1
furious programming napisał(a):
somedev napisał(a):

Nie zamierzam odnosić się więcej do tego jak oceniasz mój styl czy profesjonalizm na podstawie jednego gifa i wypowiedzi o zabawie nie widząc projektów jakie tworze czy kieruje ich rozwojem.

Tylko na podstawie tego wątku mógłbym napisać znacznie więcej na ten temat. Przez tyle lat na forum zdążyłem poznać podejście mnóstwa osób i naoglądać się tysięcy mniejszych i większych kawałków kodu w różnych językach – potrafię odróżnić programowanie od chałupnictwa. ;)

Ja z kolei przez ponad dekadę komercyjnego wytwarzania oprogramowania nauczyłem się oceniać ludzi po ich kodzie produkcyjnym, a nie wieczornej zabawie i jednej pustej procedurze którą wrzuciłem ;) W zasadzie ta procedura nawet nic nie robiła więc nie mam pojęcia jak potrafisz ocenić to... Wiem, że mój kod produkcyjny za to działa na setkach stanowisk więc chyba źle nie jest.

Oczywiście nie musiało to nastąpić w momencie dwukliku tylko wtedy doszło np. do odczytu zmienionej pamięci.

Nie, nie, nie – Access Violation lub SIGSEGV to wyjątek rzucany wyłącznie podczas próby odczytu lub modyfikacji pamięci nieprzydzielonej (nieważne czy jeszcze nie zaalokowanej, czy już zwolnionej), nie żadnej zmienionej.

Jak wyjedziesz pętlą za tablice to zaczynasz modyfikować inne obiekty czasami. Może się okazać, że taki wyjazd w cudzą pamięć, spowoduje zmianę adresu wskaźnika który od tej pory wskazuje na nieprzydzieloną pamięć. Użycie takiego wskaźnika daje AV - czyli mamy AV za naruszenie pamięci, ale nie spowodowało to logika danej funkcji tylko np. właśnie funkcja z innego miejsca programu która zmodyfikowała obiekt w którym doszło do AV. Naoglądałem się tego sporo ;) Czasami pokłosie pewnych błędów wychodzi dopiero za chwilę, w innych miejscach. Są to cholernie trudne błędy do znalezienia. Dlatego "coś" mogło zmodyfikować obszar Inspektora i jak go użyłem to poszedł AV - taką postawiłem hipotezę, gdyż problem nie jest łatwo odtwarzalny i nie powtarza się za każdym dwuklikiem w Inspektorze.

AV zawsze jest nieudolnością programisty nie użytkownika. EOT.

I tak, i nie – zależy od kontekstu. W tym przypadku jest to błąd albo po stronie komponentu, albo po stronie IDE.


Dlatego też zamiast prowadzić tutaj jałowe narzekanie, poproś o wskazanie przyczyny i rozwiązanie problemu np. na forum Lazarusa – opisz problem sensownie, podaj sposób reprodukcji błędu, standardowo. Przy czym zrzut okna błędu podpisany słowami „dwuklik na IBConnection w Inspektorze” to nie jest sensowny opis problemu. Tylko nie wyskakuj od razu z epitetami, bo w odpowiedzi dostaniesz bardziej dosadne stwierdzenia, niż to co sam napisałem.

Ale ja nic innego nie zrobiłem tylko dwuklik w Inspektorze Obiektów ;) Ale rozumiem, że to dlatego, że używam myszki! (joke ;) Niemniej jak znajdę powtarzalną w jakimś stopniu ścieżkę to błąd zgłoszę.

Przyzwyczaj się – Lazarus jest oprogramowaniem otwartym, nad którym pracują wolontariusze. Nie wiem czy i ile mają za to płacone (nie moja broszka), jednak mimo wszystko dają całkiem dobre narzędzie za darmo, więc trzeba się cieszyć. Zresztą niczym nadzwyczajnym jest niższa jakość oprogramowania otwartego od komercyjnego, tworzonego przez giganta jak np. Microsoft. Zrozum to w końcu i albo pogódź się z tym, albo zbieraj na Delphi. Tylko nie zdziw się, jeśli w Delphi znajdziesz błędy – każde oprogramowanie je posiada, VS również.

Przecież już wcześniej pisałem, że wiem, że Laz ma swoje wady i świadomie go wybrałem. Niemniej nie będę mu cukrzył z tego powodu. Co do Delphi - sam pisałem, że Laz ma obecnie mniej błędów niż Delphi 2009 który krwi napsuł przez lata. Ja to wszystko wiem i nie wiem dlaczego dalej mnie przekonujesz ;)

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