Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Verstehe Fehler nicht (https://www.delphipraxis.net/41398-verstehe-fehler-nicht.html)

ferby 2. Mär 2005 21:53


Verstehe Fehler nicht
 
Hallo,

ich probiere gerade mit savedialoge zu programmieren und ein bitmap zu speichern


Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);

var
  Bitmap: TBitmap;
begin
  Bitmap:=TBitmap.Create;
  Bitmap.PixelFormat:= pf1bit;
  Bitmap.Width:=100;
  Bitmap.Height:=100;

  bitmap.Canvas.pen.Color:=clred;
  bitmap.canvas.Polyline([Point(0, 0), Point(50, 0), Point(75, 50), Point(25, 50), Point(0, 0)]);

    if SaveDialog1.Execute then Bitmap.SaveToFile(SaveDialog1.Filename);

  Bitmap.Free;
end;

es funktioniert auch so wie ich will, aber wenn ich das "if SaveDialog1.Execute then" weglase kommt eine fehlermeldung:

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Project1.exe ist eine Exception der Klasse EFCreateError aufgetreten. Meldung: 'Datei "" kann nicht erstellt werden. Das System kann den angegebenen Pfad nicht finden'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK Hilfe
---------------------------



Ich verstehe nicht warum, wie kann diese if abfrage den fehler vermeiden, es kann ja nichts anders sein wenn ich die if abfrage weglasse da savedialog sowiso ausgelöst wird??? ich blick da nicht durch???


Und dann habe ich noch Fragen zu
Bitmap.PixelFormat:= pf1bit;

wiviel Farben entsprechen 1 und 24 bit?
Wiviel bit sind 16 und 256 Farben?

Rastaman 2. Mär 2005 21:58

Re: Verstehe Fehler nicht
 
is doch logisch.
Du willst unter savedialog1.Filename speichern, aber er wurde ja gar nicht ausgeführt :shock:

ferby 2. Mär 2005 21:59

Re: Verstehe Fehler nicht
 
hallo,

versteh ich noch immer nicht,
was wurde gar nicht ausgeführt?
warum wird er ausgeführt wenn ich ein if davor gebe?

Bernhard Geyer 2. Mär 2005 22:00

Re: Verstehe Fehler nicht
 
Zitat:

Zitat von ferby
es funktioniert auch so wie ich will, aber wenn ich das "if SaveDialog1.Execute then" weglase kommt eine fehlermeldung:

Wenn Du SaveDialog1.Execute wegläßt (also den Dialog nicht anzeigst) ist ja SaveDialog.FileName undefiniert (vermutlich leer).
Und wohin soll nun Bitmap.SaveToFile('') erfolgen?

Zitat:

Zitat von ferby
Und dann habe ich noch Fragen zu
Bitmap.PixelFormat:= pf1bit;

wiviel Farben entsprechen 1 und 24 bit?
Wiviel bit sind 16 und 256 Farben?

1 Bit = 2 Farben (Schwarz und Weiß)
16 Farben = 2^4 = 4 Bit
256 Farben = 2^8 = 8 Bit

ferby 2. Mär 2005 22:03

Re: Verstehe Fehler nicht
 
hallo,


was bewirkt/heißt saveDialog1.Execute, und wie kann ich mit einer if abfrage etwas definieren, das versteh ich nicht...??

schöni 2. Mär 2005 22:09

Re: Verstehe Fehler nicht
 
Zitat:

Zitat von ferby
es funktioniert auch so wie ich will, aber wenn ich das "if SaveDialog1.Execute then" weglase kommt eine fehlermeldung:

Die Fehlermeldung kommt, weil in der Execute - Methode (als Funktion implementiert->mit Boolschem Rückgabewert) das Erzeugen des Dialogs und die Einstellung des Dateinamen per Auswahl in der Listview des Dialoges steckt. Wenn alles geklappt hat, d.h. die Datei auf der Platte gefunden wurde, fehlerfrei von der Platte gelesen werden konnte, dann wird der Name der Eigenschaft FileName zugewiesen und als Funktionsergebnis TRUE zurückgegeben. Dann und nur dann kannst Du Dich auch drauf verlassen, das mit SaveDialog.Filename auch ein gültiger Dateiname übergeben wird.

Zitat:

Zitat von ferby
wiviel Farben entsprechen 1 und 24 bit?
Wiviel bit sind 16 und 256 Farben?

1 Bit = 2 Farben (Schwarz und Weiß) 2 hoch 1
2 Bit = 4 Farben usw. 2 hoch 2
4 Bit = 16 Farben 2 hoch 4

-> 256 Farben = 2 hoch 8 also 8 Bit

Es grüßt

schöni

ferby 2. Mär 2005 22:14

Re: Verstehe Fehler nicht
 
hallo,


jetzt habs ich verstanden

Luckie 2. Mär 2005 22:16

Re: Verstehe Fehler nicht
 
Zitat:

Zitat von schöni
fehlerfrei von der Platte gelesen werden konnte, dann wird der Name der Eigenschaft FileName zugewiesen und als Funktionsergebnis TRUE zurückgegeben.

Der Dialog liest nichts von der Festplatte. Er gibt nur den ausgewählten Dateinamen in der Eigenschaft Filename zurück.

Binärbaum 2. Mär 2005 22:16

Re: Verstehe Fehler nicht
 
Zitat:

Zitat von ferby
Und dann habe ich noch Fragen zu
Bitmap.PixelFormat:= pf1bit;

wiviel Farben entsprechen 1 und 24 bit?
Wiviel bit sind 16 und 256 Farben?

Ein Bit sind zwei Farben (meist schwarz und weiß), auch monochrom genannt.
24 bit sind 16.777.216 Farben. Allgemein gilt:
Anzahl der Farben := 2^Anzahl der Bits

Dementsprechend sind 16 Farben 4 Bit und 256 Farben sind 8 Bit.

Selbstverständlich brauchen Bilder mit größerer Farbtiefe auch mehr Speicher.

MfG
Binärbaum

sniper_w 2. Mär 2005 22:58

Re: Verstehe Fehler nicht
 
Du könntest es auch so machen... :gruebel:
Delphi-Quellcode:
 if SaveDialog1.Execute then
        if SaveDialog1.FileName<>'' then...

Luckie 2. Mär 2005 23:01

Re: Verstehe Fehler nicht
 
Wenn kein Dateiname gewählt oder eingegeben wurde, läßt sichd er Dialog auch nicht mit OK schließen, womit dann aich der Rückgabewert von Execute False wäre.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:53 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz