Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Grafik im Speicher erstellen für BlobStream (DB) (https://www.delphipraxis.net/207654-grafik-im-speicher-erstellen-fuer-blobstream-db.html)

venice2 21. Apr 2021 09:30

AW: Grafik im Speicher erstellen für BlobStream (DB)
 
Delphi-Quellcode:
 if not Assigned(Abmp) then
    Abmp := Vcl.Graphics.TBitmap.Create;
EDIT:
Warum?

Es wird sich immer beschwert das man NIE auf True oder False hin prüfen soll.
Was ist eine Prüfung auf Nil.. Ja oder Nein, 1 oder 0, True oder False.

Also es ist in jedem fall eine Prüfung darauf ob der Wert True oder False ist.

Wenn man sich schon hier beschwert ->
Delphi-Quellcode:
if (x = True) then

sollte das gleiche auch bei Nil gelten.

Denn Assigned liefert den korrekten wert nämlich True oder False.

Es ist nicht grundsätzlich falsch auf NIL zu prüfen aber dann hat auch die Prüfung auf True wie im Beispiel seine Berechtigung.
Wenn nicht dann bitte schön konsequent bleiben und auch nicht auf NIL hin prüfen. Dafür gibt es Assigned.

NoGAD 21. Apr 2021 09:57

AW: Grafik im Speicher erstellen für BlobStream (DB)
 
Wenn das Objekt aber in der Function erstellt wurde, übersieht man dann nicht außerhalb die Freigabe?

LG 👋🏻

KodeZwerg 21. Apr 2021 10:06

AW: Grafik im Speicher erstellen für BlobStream (DB)
 
Zitat:

Zitat von NoGAD (Beitrag 1487496)
Wenn das Objekt aber in der Function erstellt wurde, übersieht man dann nicht außerhalb die Freigabe?

LG ����

Da ich ja eigentlich weiß wann ich etwas erschaffe, ob per methode oder per .Create, weiß ich auch das ich es freizugeben habe. (ich nutze halt freeandnil)
Für mich pers. ist das der bessere Umgang da es generischer ist und (sogut wie) immer ein resultat liefert.
Der eigentliche Grund warum ich überhaupt den Code abgeändert gepostet habe war deine "width and height = 0" abfrage. Wozu ein Bitmap erstellen lassen wenn eins von beiden 0 sein darf?

Es tut mir leid wenn dir mein vorschlag unangehm vorkommt. Jeder kocht halt sein eigenes süppchen.

DeddyH 21. Apr 2021 10:07

AW: Grafik im Speicher erstellen für BlobStream (DB)
 
Die übergebene Bitmap müsste aber dann ein Var-Parameter sein, sonst ist die Referenz weg, die Instanz aber weiterhin da.

venice2 21. Apr 2021 10:08

AW: Grafik im Speicher erstellen für BlobStream (DB)
 
Zitat:

(ich nutze halt freeandnil)
Nur nötig bei Objekten die sich nicht selbst freigeben also die Rückgabe nicht Nil ist nach Free!
Aber gut jedem das seine ;)

KodeZwerg 21. Apr 2021 10:14

AW: Grafik im Speicher erstellen für BlobStream (DB)
 
Zitat:

Zitat von venice2 (Beitrag 1487495)
Delphi-Quellcode:
 if not Assigned(Abmp) then
    Abmp := Vcl.Graphics.TBitmap.Create;
EDIT:
Warum?

Es wird sich immer beschwert das man NIE auf True oder False hin prüfen soll.
Was ist eine Prüfung auf Nil.. Ja oder Nein, 1 oder 0, True oder False.

Also es ist in jedem fall eine Prüfung darauf ob der Wert True oder False ist.

Wenn man sich schon hier beschwert ->
Delphi-Quellcode:
if (x = True) then

sollte das gleiche auch bei Nil gelten.

Denn Assigned liefert den korrekten wert nämlich True oder False.

Es ist nicht grundsätzlich falsch auf NIL zu prüfen aber dann hat auch die Prüfung auf True wie im Beispiel seine Berechtigung.
Wenn nicht dann bitte schön konsequent bleiben und auch nicht auf NIL hin prüfen. Dafür gibt es Assigned.

Inhaltlich beißt sich da irgendwie die katze am eigenen schwanz, oder?
Eine "if" abfrage, egal wie man sie formuliert, bleibt immer eine True oder False abfrage.
Uwe Raabe hatte doch gerade erst gezeigt das eine "if nil" und ein "if assigned()" per debugger den gleichen code ausspuckt oder irre ich mich jetzt total?

Ich nehme natürlich gerne ratschläge dazu an, also Danke für Deinen Ratschlag!! :thumb:

DeddyH 21. Apr 2021 10:14

AW: Grafik im Speicher erstellen für BlobStream (DB)
 
Nochmal für Emil zum Mitschreiben:
Delphi-Quellcode:
function APICallResult: integer;
begin
  Result := not 0;
end;

procedure TForm13.Button1Click(Sender: TObject);
var
  lBool: Boolean;
begin
  lBool := Boolean(APICallResult);
  if lBool = true then
    ShowMessage('Vergleich mit true ergibt true')
  else if lBool then
    ShowMessage('Prüfung ohne Vergleich ergibt true');
end;
Deshalb vergleicht man nicht mit true, das hat mit einer Prüfung auf nil nichts zu tun.

venice2 21. Apr 2021 10:16

AW: Grafik im Speicher erstellen für BlobStream (DB)
 
Zitat:

Inhaltlich beißt sich da irgendwie die katze am eigenen schwanz, oder?
Richtig!
Wollte nur mal auf die nicht konsequente Herangehensweise hinweisen.

KodeZwerg 21. Apr 2021 10:18

AW: Grafik im Speicher erstellen für BlobStream (DB)
 
Zitat:

Zitat von DeddyH (Beitrag 1487499)
Die übergebene Bitmap müsste aber dann ein Var-Parameter sein, sonst ist die Referenz weg, die Instanz aber weiterhin da.

Ahhhhh. Ich spring ausm Fenster. Das stimmt! Das habe ich übersehen! Danke!!

venice2 21. Apr 2021 10:19

AW: Grafik im Speicher erstellen für BlobStream (DB)
 
Zitat:

Deshalb vergleicht man nicht mit true, das hat mit einer Prüfung auf nil nichts zu tun.
Für dich zum mitschreiben es gibt nur 2 werte 0 oder <> 0 (VB = -1) btw. 1
Wie man sie letztendlich prüft bleibt sich gleich. Aber wenn schon dann mit allen Variablen gleich so wie es in C++ auch stattfindet.

Ok bin raus ist ein anderes Thema.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:20 Uhr.
Seite 3 von 4     123 4      

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