Chce zrobic moduł o nazwie np rwplik w ktorym bedzie opendialog ( savedialog )
czy musze tworzyc jakas forme aby tam wrzucic te komponenty ?
Jaki moduł, jaka platforma, jaki język, jakie IDE?
delphi 7
Nie jestem zawodowym programista , moje programy dzialaja ale sa nabazgrane , a nie napisane tak jak powinno byc.
Dlatego to co mi dziala poprawnie i bede to wykorzystywać kiedys w innym programie chce wrzucic do innego modulu zeby nie miec smietnika przed oczami i sie nie gubic.
Nie, nie musisz mieć formatki żeby to wrzucić. Natomiast w takim przypadku musisz to ręcznie zainicjalizować i zadbać o zwolnienie.
tylko jak to zrobic
Utworzyć ręcznie obiekt, wywołać metodę i zwolnić ręcznie obiekt.
czy moze mi ktos cos wiecej napisac ?
jakis maly gotowiec ?
Prawdopodobnie coś w stylu:
Var OpenDialog: TOpenDialog;
Begin
OpenDialog := TOpenDialog.Create(nil);
if (OpenDialog.Execute) Then
Begin
End;
OpenDialog.Free;
End;
dziekuje
dziala
Patryk27 napisał(a):
Prawdopodobnie coś w stylu:
Var OpenDialog: TOpenDialog;
Begin
OpenDialog := TOpenDialog.Create(nil);
if (OpenDialog.Execute) Then
Begin
End;
OpenDialog.Free;
End;
Dobra praktyka, jeśli coś manualnie tworzymy:
Var OpenDialog: TOpenDialog;
Begin
OpenDialog := TOpenDialog.Create(nil);
try
if (OpenDialog.Execute) Then
Begin
End;
finally
OpenDialog.Free;
end;
End;
Pozwala to mieć pewność że zasoby zostaną zwolnione nawet w przypadku jakiejś kaszany po drodze.
Lub bez dodatkowej zmiennej i bez referencji poza blokiem try .. finally .. end
:
procedure Foo();
begin
with TOpenDialog.Create(Self) do
try
if Execute() then
begin
//some instructions
end;
finally
Free();
end;
end;
Jednak stosowanie ww. bloku to dobra praktyka;
furious programming napisał(a):
Lub bez dodatkowej zmiennej i bez referencji poza blokiem
try .. finally .. end
:
procedure Foo();
begin
with TOpenDialog.Create(Self) do
try
if Execute() then
begin
//some instructions
end;
finally
Free();
end;
end;
Jednak stosowanie ww. bloku to dobra praktyka;
Zgoda, bez dodatkowej zmiennej jest krócej :) Tyle że nie stosuję tego zapisu z kilku powodów:
- zaciemnia obraz kodu
- powoduje "zabawne" pomyłki, kiedy metoda o takiej samej nazwie należy do dwóch klas, których mieliśmy nieszczęście użyć w "with..." (mogą być zagnieżdżone)
- uniemożliwia uzyskanie pomocy kontekstowej i skorzystanie z autocomplete kodu w Delphi
- referencja poza blokiem kodu przydaje się (przy schemacie z deklarowaniem zmiennej) po to, żeby kompilator nie wrzeszczał że zmienna może być niezainicjowana. Im mniej ostrzeżeń do ignorowania tym lepiej, bo można przegapić naprawdę istotne zastrzeżenie :)
@zaraz_zaraz - oczywiście zgadzam się, ale to tylko inny sposób, nie propozycja;
Można stosować wiele wcześniej wspomnianych sposobów, jednak trzeba wiedzieć gdzie warto, a gdzie nie - doświadczony programista będzie wiedział czy potrzebna mu referencja poza blokiem czy nie, oraz czy wystąpi kolizja (nałożenie) metod o tym samym identyfikatorze - jednym zdaniem będzie wiedział jak uniknąć bałaganu i "zabawnych" pomyłek :]
Stosowanie bloku try .. finally .. end
to dobra praktyka i warto ją stosować; Bez dodatkowej zmiennej - czasem tak, czasem nie - zależy od tego czy potrzeba referncji, czy nie; W większości przypadków nie trzeba, bo obiekt tworzy się i zwalnia w tej samej procedurze/funkcji/zdarzeniu; Globalizacja zmiennych nie jest dobrą praktyką (przynajmniej tak uczą), stąd jeśli ma się pewność, że metody nie przesłonią się można zmienną wykluczyć;
Ale to wszystko zależy od przypadku i przeznaczenia, więc reasumując każdy sposób jest dobry;