Witam i od razu proszę nie linczować, jeśli pytam o coś oczywistego. Od kilku godzin walczę z Delphi 12 a dokładniej z tym, że przy zapisie usuwa mi puste procedury czyli takie które zawierają tylko Begin i end. I już nie wiem co jest nie tak. Instalowałem od początku, i aktualizowałem i nic to nie dało. Komputer sprawdziłem, Wirusów nie ma, konfliktów klawiatury też nie i nadal to samo. Pomocy. Wróciłem do programowania po 25 latach przerwy i czuję się przez ten problem jeszcze gorzej niż laik.
Niestety to jest domyślnie zachowanie IDE i nie da się tego zmienić. Jednak takie zachowanie dotyczy tylko pustego zdarzenia które jest automatycznie generowane przez IDE z poziomu np. inspektora obiektów. Jeśli napiszesz własną funkcję/procedurę, to Delphi Ci niczego nie usunie.
A po co Ci puste zdarzenia?
Jednak jeśli chciałbyś na później sobie stworzyć puste zdarzenie zawsze możesz dać tam komentarz w stylu:
procedure TForm1.FormCreate(Sender: TObject);
begin
// TO_DO: do zrobienia na potem
end;
Wtedy IDE uzna to za niepuste zdarzenie i nie usunie przy zapisie.
Serio nie da się wyłączyć automatycznego usuwania pustych funkcji?
Mr.YaHooo napisał(a):
A po co Ci puste zdarzenia?
Do zrobienia potem.
W swoim projekcie mam trochę takich funkcji, które na razie istnieją i są wywoływane (mimo że póki co nic nie robią), bo na razie nie wymagają żadnej logiki. Natomiast istnieją, bo dotyczą podsystemów, które są aktualizowane w ten sam sposób — UpdateEnter
, Update
, UpdateLeave
. Wszystkie takie wywołania znajdują się w innym module i wywołania tych pustych też tam są, aby o nich w przyszłości nie zapomnieć. Natomiast w ich ciałach są komentarze świadczące o tym, że na razie nie wymagają implementacji. Przykład:
{
Initializes text input.
[!] This function must be called every frame of the game, before updating based on SDL events.
}
procedure Game_TextInputUpdateEnter ();
begin
// Currently no operations required.
end;
{
Finalizes text input.
[!] This function must be called every frame of the game, right after updating based on SDL events.
}
procedure Game_TextInputUpdateLeave ();
begin
// Currently no operations required.
end;
Natomiast funkcja Game_TextInputUpdate
zawiera logikę, bo przetwarza zdarzenia SDL-a.
Wszystkie tego typu funkcje, które póki co nie mają co wykonywać, mają ten sam komentarz w środku (czyli Currently no operations required.
), dzięki czemu łatwo jest je wyszukać za pomocą narzędzi IDE.
Ciała niektórych innych funkcji w silniku mam już wygenerowane i są puste, jeszcze zastanawiam się nad ich implementacją. Póki co natomiast wstawione są {TODO:}
, abym o nich nie zapomniał, w razie gdybym się zamyślił. Ale to tylko dla mojej wygody, bo mi Lazarus niczego sam nie usuwa. :P
Dla mnie to nie był problem raczej zaleta, w C++ mi trochę tego brakuje i sam muszę kasować puste funkcje :(
Generalnie ten problem rozwiazuje sie zawsze najprosciej:
- CTR+SHIFT+C (tego też mi brakuje w C++)
- //
- ENTER
Trochę do bani, że takie kombinacje trzeba odstawiać. W Lazarusie też nie jest jakoś szczególnie miło, bo o ile puste funkcje same nie giną, to narzędzie do ich automatycznego usuwania obejmuje jedynie metody. Releasem raczej nie trzeba się przejmować, bo jeśli używa się przełącznika {$SMARTLINK}
to wszystko co nieużywane, nie zostanie zlinkowane, a wywołania pustych funkcji wytnie optymalizator.
Rok 2024, a IDE nadal posysają.
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.