![]() |
Delphi-Version: 5
Copy(S, 1) macht was? Wo ist der 3 Parameter?
Habe in Data.DB.pas im folgenden Code ein Copy() gefunden, das ich so nicht kenne:
Delphi-Quellcode:
Diese Zeile mit dem Copy ist in D11 dazugekommen und unterscheidet sich von D10.3. Mich hat nun gewundert was dieser Copy Befehle da genau macht, da ich den nur mit 3 Prametern kenne. Ein Blick in die System Unit hat auch nicht geholfen, da dort der Befehl auch 3 Parameter hat und keiner davon eine Default zu sein scheint. Jemand eine Idee was da wirklich gemacht wird und wieso man den betroffen Code so angeändert hat? Früher wurde da FOnSetText(Self, Value) aufgerufen und hier sieht es aus, als würde nur das 1. Zeichen als Feldtext übergeben?!
procedure TField.SetEditText(const Value: string);
begin if Assigned(FOnSetText) then begin var S: string := Copy(Value, 1); FOnSetText(Self, S); end else SetText(Value); end; |
AW: Copy(S, 1) macht was? Wo ist der 3 Parameter?
Dabei wird einfach nur bis zum Ende des Strings kopiert. Das ist also wie:
Delphi-Quellcode:
Copy(Value, 1, MaxInt);
Das kannst du ja auch einfach selbst testen:
Delphi-Quellcode:
var a := 'Testen';
ShowMessage(Copy(a, 2)); |
AW: Copy(S, 1) macht was? Wo ist der 3 Parameter?
Zitat:
dann entspricht es eigentlich einem UniqueString.
Delphi-Quellcode:
var S: string := UniqueString(Value);
(falls doch, dann MaxInt ... siehe jaenicke) k.A. warum man das dann nicht direkt verwendet hat und wozu das hier überhaupt gemacht wird. Bei dynamischen Arrays kann man hier auch den zweiten Parameter weglassen, um das "Gleiche" zu erreichen ... k.A. warum hier die Version für Strings nicht "identisch" reagiert.
Delphi-Quellcode:
A := Copy(B);
|
AW: Copy(S, 1) macht was? Wo ist der 3 Parameter?
Zitat:
![]()
Delphi-Quellcode:
und keine
procedure
Delphi-Quellcode:
.
function
|
AW: Copy(S, 1) macht was? Wo ist der 3 Parameter?
ups :oops:
Delphi-Quellcode:
var S: string := Value;
UniqueString(S); oder :freak:
Delphi-Quellcode:
procedure TField.SetEditText({const} Value: string);
begin if Assigned(FOnSetText) then begin UniqueString(Value); FOnSetText(Self, Value); end else SetText(Value); end; |
AW: Copy(S, 1) macht was? Wo ist der 3 Parameter?
Da sowohl SetEditText als auch FOnSetText einen const string erwarten, erschließt sich mir der Sinn dieses Kopierens noch nicht. Das wäre vielleicht einen Kommentar wert gewesen.
|
AW: Copy(S, 1) macht was? Wo ist der 3 Parameter?
Zitat:
Vielleicht ist der Code Hilfscode zum Debuggen, den man vergessen hat zu entfernen. |
AW: Copy(S, 1) macht was? Wo ist der 3 Parameter?
Wenn es sich hier um einen internen Puffer/String handeln würde,
dann könnte man es auch noch verstehen, wenn man ihn nicht direkt raus gibt. (nicht dass wer böse pointert und den Inhalt der CONST verändert :stupid:) Aber hier kommt Value ja von extern und hat diese DB-Klasse garnicht zu interessieren. Vermutlich:
Aber ganz im Ernst, dann läßt man eben das CONST weg und Gut ist. (die Referenzzählung funktioniert wieder und bei Änderung wird eine Kopie angelegt) (wenn beim OnSetText, anstatt SetEditText, dann passiert es nur beim Eventaufruf innerhalb des IF) Das "Unique" macht hier aber IMHO wirklich keinen Sinn. (ein Kommentar wäre tatsächlich von Nöten gewesen) |
AW: Copy(S, 1) macht was? Wo ist der 3 Parameter?
Danke für eure Beiträge. Da bin ich ja erleichtert, dass ich nicht der einzige bin, der den Sinn dieser Änderung nicht nachvollziehen kann.
|
AW: Copy(S, 1) macht was? Wo ist der 3 Parameter?
Zitat:
Aber noch einfacher wäre es natürlich mit String.Copy(A): Kein Rumgefussle mehr mit UniquString und irgendwelchen temporären Variablen... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:38 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-2025 by Thomas Breitkreuz