Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi "Str(X [: Width [: Decimals ]];..." - Parameter realisieren (https://www.delphipraxis.net/109034-str-x-%5B-width-%5B-decimals-%5D%5D%3B-parameter-realisieren.html)

turboPASCAL 23. Feb 2008 06:40


"Str(X [: Width [: Decimals ]];..." - Parameter re
 
Hi,
Wie kann man in Delphi solche Parameter wie sie bei der Procedure Str möglich sind in
Delphi realisieren ? Ich hätte das gern für meine eigene Function verwendet.

Delphi-Quellcode:
// String-Verarbeitung
// procedure Str(X [: Width [: Decimals ]]; var S);

function Test(cont X [: Width [: Decimals ]]); // <-<< Fehler
begin
  // Foo
  Result := '';
end;

Corpsman 23. Feb 2008 06:46

Re: "Str(X [: Width [: Decimals ]];..." - Paramete
 
ich hab das mal versucht meinst du etwa so ?
Delphi-Quellcode:
Procedure Test(x :Integer; Width :Integer = 3;const s:String =' ');
begin
end;

turboPASCAL 23. Feb 2008 07:05

Re: "Str(X [: Width [: Decimals ]];..." - Paramete
 
Äh, nein. Das sind normale Proceduren und Functions -Parameter.
Was ich suche ist eine Möglichkeit wie bei der Str-Procedure aus der System.pas
von Delphi, die ich nicht habe in der PE - Version, Formatierungsparameter oder
wie die heissen mit anzugeben.

Also:

Delphi-Quellcode:
// String-Verarbeitung
// procedure Str(X [: Width [: Decimals ]]; var S);

function SingleToString(X: single): string;
begin
  str(X:0:3, result);
end;

function SingleToString_2(X: single): string;
begin
  str(X:10:2, result);
end;

var s: string;

BEGIN
  s := SingleToString(10.123456);
  // Inhalt nun von s = '10.123'

  s := SingleToString_2(10.123456);
  // Inhalt nun von s ='   10.12';
END.
Delphi-Referenz durchsuchenFormat, Delphi-Referenz durchsuchenFloatToStr etc. stehen mir in meinem Programm nicht zur Verfügung.


Ich möchte mir eine eigene ( nonVCL ) str-Function basteln.

Gruss...

r2c2 23. Feb 2008 10:48

Re: "Str(X [: Width [: Decimals ]];..." - Paramete
 
Hallo,

[Halbwissen]
so wie ich das sehe, geht das nicht. Das steckt ne Menge CompilerMagic dahinter. Guck mal in die System.pas(==> TurboDelphi hat ja die Sourcen drin). Da gibts nur _Str0Ext, _Str1Ext und _Str2Ext diese - im Übrigen vollständig in ASM implementierten Routinen - werden IMHO per CompilerMagic zur Str()-Function zusammengesetzt...
[/Halbwissen]

mfg

Christian

Hawkeye219 23. Feb 2008 11:31

Re: "Str(X [: Width [: Decimals ]];..." - Paramete
 
Hallo Matti,

Christian hat es schon richtig beschrieben - es geht nicht. Du könntest zwar versuchen, die Funktionalität nachzuempfinden, die Syntax wäre jedoch in jedem Fall eine andere. Meiner Meinung nach steht der Aufwand für ein solches Unterfangen auch in keinem rechten Verhältnis zum Nutzen.

Was spricht eigentlich gegen die Verwendung von Str? Die Prozedur war schon immer Bestandteil der RTL, nicht der VCL. An der System-Unit wirst du zudem kaum vorbeikommen, ohne sie vollständig neu zu implementieren.

Gruß Hawkeye

turboPASCAL 23. Feb 2008 11:42

Re: "Str(X [: Width [: Decimals ]];..." - Paramete
 
Kurz und knapp, Sch... Schade! :cry:
Zitat:

Zitat von Hawkeye219
Was spricht eigentlich gegen die Verwendung von Str?

Das es eine Procedure und keine Function mit dem Result als String ist.
Beispiel, die Verwendung von Floattypen und wvsPrintf().

himitsu 23. Feb 2008 15:32

Re: "Str(X [: Width [: Decimals ]];..." - Paramete
 
wie schon beschrieben, du könntest höchstens über vordefinierte Parameter und Überladen sowas nachempfiden.

Delphi-Quellcode:
Function Str(X: Integer; Width: Integer = 0): String; Overload;
  Begin
    System.Str(X:Width, Result);
  End;

Function Str(X: Extended; Width: Integer = 0; Decimals: Integer = 0): String; Overload;
  Begin
    System.Str(X:Width:Decimals, Result);
  End;
Abgesehn davon gibt's ja eientlich noch solche Funkionen wie IntToStr, FloatToStr, Format und sowas, welche auch diese Funktionalität kapseln.

turboPASCAL 23. Feb 2008 19:33

Re: "Str(X [: Width [: Decimals ]];..." - Paramete
 
Verfilx, das klappt ja. Heute früh wollte es nicht so... Liegt warscheinlich an meiner Erkältung. :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:31 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