jak wstawic open(save)dialog do zewnetrznego modułu ?

0

Chce zrobic moduł o nazwie np rwplik w ktorym bedzie opendialog ( savedialog )
czy musze tworzyc jakas forme aby tam wrzucic te komponenty ?

0

Jaki moduł, jaka platforma, jaki język, jakie IDE?

0

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.

0

Nie, nie musisz mieć formatki żeby to wrzucić. Natomiast w takim przypadku musisz to ręcznie zainicjalizować i zadbać o zwolnienie.

0

tylko jak to zrobic

1

Utworzyć ręcznie obiekt, wywołać metodę i zwolnić ręcznie obiekt.

0

czy moze mi ktos cos wiecej napisac ?
jakis maly gotowiec ?

1

Prawdopodobnie coś w stylu:

Var OpenDialog: TOpenDialog;
Begin
 OpenDialog := TOpenDialog.Create(nil);
 if (OpenDialog.Execute) Then
 Begin
 End;
 OpenDialog.Free;
End;
0

dziekuje
dziala

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

0

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;

1
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 :)
0

@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;

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