AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Klassen

Ein Thema von Cöster · begonnen am 30. Aug 2006 · letzter Beitrag vom 31. Aug 2006
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#11

Re: Problem mit Klassen

  Alt 30. Aug 2006, 22:14
Zitat von 3_of_8:
Wieder was dazugelernt. An dieser Stelle könnte man doch eigentlich doch eigentlich Delphi wieder ein bisschen "sicherer" machen, indem man da eine AV raist, oder?
Dann müsstest du erstmal Free neu implementieren .
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#12

Re: Problem mit Klassen

  Alt 30. Aug 2006, 22:23
Dafür könnte man ja dann ne Extra-Direktive einführen.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#13

Re: Problem mit Klassen

  Alt 31. Aug 2006, 15:52
Zitat von mkinzler:
Zitat:
Danke für den Hinweis. Was schlägst du mir denn vor, wie ich das überarbeiten sollte?
Alle Referenzen auf Form1 entfernen, und diese als parameter der Methode übergeben.
Meinst du so?
Delphi-Quellcode:
procedure TBild.Oeffnen(Dlg: TOpenPictureDialog; Img: TImage);
begin
  If Dlg.Execute then
  begin
    self.FCurrentFile := Dlg.FileName;
    Img.Picture.LoadFromFile(Dlg.FileName);
    Img.Picture.Bitmap.PixelFormat := pf24Bit;
    Img.Visible := True;
  end;
end;
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#14

Re: Problem mit Klassen

  Alt 31. Aug 2006, 15:58
Ja. Nur hier würde ich auch gleich den Dateiname übergeben:
Delphi-Quellcode:
TBild.Oeffnen(FileName: String; Img: TImage);
...
self.FCurrentFile := FileName;
Markus Kinzler
  Mit Zitat antworten Zitat
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#15

Re: Problem mit Klassen

  Alt 31. Aug 2006, 16:04
Zitat von mkinzler:
Ja. Nur hier würde ich auch gleich den Dateiname übergeben:
Delphi-Quellcode:
TBild.Oeffnen(FileName: String; Img: TImage);
...
self.FCurrentFile := FileName;
Dann bräuchte ich aber drei Parameter. Für Dlg.Execute brauche ja auch den Parameter des Typs TOpenPictureDialog. Hast du das übersehen?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#16

Re: Problem mit Klassen

  Alt 31. Aug 2006, 16:09
Zitat:
Dann bräuchte ich aber drei Parameter. Für Dlg.Execute brauche ja auch den Parameter des Typs TOpenPictureDialog. Hast du das übersehen?
Ja, dann war deine Lösung natürlich besser.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#17

Re: Problem mit Klassen

  Alt 31. Aug 2006, 16:10
Zitat von Cöster:
Dann bräuchte ich aber drei Parameter. Für Dlg.Execute brauche ja auch den Parameter des Typs TOpenPictureDialog. Hast du das übersehen?
Klassen sollen, wenn möglich, für sich alleine werkeln können. Referenzen von anderen Objekten zu übergeben ist also nicht immer angebracht, meiner Meinung nach.

Da ich davon ausgehe, dass Du jetzt kein spezielles TOpenPictureDialog konfigueriert hast, würde ich diesen auch selbst in deiner Klasse erzeugen. Dann brauchst Du nämlich gar nix übergeben... Etwa so:


Delphi-Quellcode:
procedure TBild.Oeffnen(Img: TImage);
var
 dlg : TOpenPictureDialog ;
begin
  try
     Dlg := TOpenPictureDialog.create (Self) ;
     // Hier kannst Du natürlich noch weiter Dlg Eigenschaften einstellen, wie z.B. Dlg.Title oder Dlg.Filter
     If Dlg.Execute then
     begin
       self.FCurrentFile := Dlg.FileName;
       Img.Picture.LoadFromFile(Dlg.FileName);
       Img.Picture.Bitmap.PixelFormat := pf24Bit;
       Img.Visible := True;
     end;
  finally
     Dlg.Free ;
  end ;
end;
  Mit Zitat antworten Zitat
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#18

Re: Problem mit Klassen

  Alt 31. Aug 2006, 16:26
Zitat von Jelly:
Da ich davon ausgehe, dass Du jetzt kein spezielles TOpenPictureDialog konfigueriert hast...
Was heißt speziell?

Zitat von Jelly:
Dlg := TOpenPictureDialog.create (Self) ;
Inkompatible Typen: 'TComponent' und 'TBild'

Noch ne Frage: Wozu ist der try-finally-Block erforderlich. Kann es etwa sein, dass er es nicht schafft den Dialog zu createn?
  Mit Zitat antworten Zitat
Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#19

Re: Problem mit Klassen

  Alt 31. Aug 2006, 16:28
Zitat von Jelly:
Zitat von Cöster:
Dann bräuchte ich aber drei Parameter. Für Dlg.Execute brauche ja auch den Parameter des Typs TOpenPictureDialog. Hast du das übersehen?
Klassen sollen, wenn möglich, für sich alleine werkeln können. Referenzen von anderen Objekten zu übergeben ist also nicht immer angebracht, meiner Meinung nach.

Da ich davon ausgehe, dass Du jetzt kein spezielles TOpenPictureDialog konfigueriert hast, würde ich diesen auch selbst in deiner Klasse erzeugen. Dann brauchst Du nämlich gar nix übergeben... Etwa so:


Delphi-Quellcode:
procedure TBild.Oeffnen(Img: TImage);
var
 dlg : TOpenPictureDialog ;
begin
  try
     Dlg := TOpenPictureDialog.create (Self) ;
     // Hier kannst Du natürlich noch weiter Dlg Eigenschaften einstellen, wie z.B. Dlg.Title oder Dlg.Filter
     If Dlg.Execute then
     begin
       self.FCurrentFile := Dlg.FileName;
       Img.Picture.LoadFromFile(Dlg.FileName);
       Img.Picture.Bitmap.PixelFormat := pf24Bit;
       Img.Visible := True;
     end;
  finally
     Dlg.Free ;
  end ;
end;

Delphi-Quellcode:
procedure TBild.Oeffnen(Img: TImage);
var
 dlg : TOpenPictureDialog ;
begin
     Dlg := TOpenPictureDialog.create (Self) ;
  try
     // Hier kannst Du natürlich noch weiter Dlg Eigenschaften einstellen, wie z.B. Dlg.Title oder Dlg.Filter
     If Dlg.Execute then
     begin
       self.FCurrentFile := Dlg.FileName;
       Img.Picture.LoadFromFile(Dlg.FileName);
       Img.Picture.Bitmap.PixelFormat := pf24Bit;
       Img.Visible := True;
     end;
  finally
     Dlg.Free ;
  end ;
end;
Wäre so besser, da Du sonst versuchst etwas freizugeben, was vielleicht gar nicht erzeugt worden ist, im Falle wenn das Erzeugen des Dialogs schon fehlschlägt.
Günter
Pünktlichkeit ist die Fähigkeit vorherzusagen um wieviel sich der Andere verspäten wird.
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#20

Re: Problem mit Klassen

  Alt 31. Aug 2006, 16:32
Zitat von Cöster:
Was heißt speziell?
Damit mein die Eigenschaften die du bei deiner TOpenPictureDialog im Object Inspector eingestellt hast. Die müsstest Du dann im Code setzen.

Zitat von Cöster:
Inkompatible Typen: 'TComponent' und 'TBild'
Sorry, mein Fehler... TBild ist ja nicht von TComponent abgeleitet... Probier mal
Dlg := TOpenPictureDialog.create (nil) ;
Zitat von Cöster:
Noch ne Frage: Wozu ist der try-finally-Block erforderlich. Kann es etwa sein, dass er es nicht schafft den Dialog zu createn?
Es sollte nicht seil können, aber um sicher zu gehen, werden so Create...Free Konstrukte prinzipiell in einen try...finally Block gepackt... Alles unter finally wird auf jeden Fall ausgeführt, auch wenn ein Fehler auftritt. Ist zwar bei deinem bisherigem Code unwahrscheinlich, aber wenn Du den noch um 300 Zeilen ergänzt eventuell nicht mehr.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz