Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Pchar Rückgabe (https://www.delphipraxis.net/1883-pchar-rueckgabe.html)

berbog 29. Dez 2002 21:56

Hallo Dietmar

Ich habe grade in einer Alten Version nachgesehen (delphi4), dort ist der Decimalseparator in der Hilfe vorhanden, in der aktuellen dagegen nicht aber trotzdem weiss ich nicht weiter.

Gruss Bernd

Brüggendiek 29. Dez 2002 22:50

Hallo Bernd!

Ist doch ganz einfach:

Code:
var
  DsSich : char;

begin
  DsSich := SysUtils.DecimalSeparator;
  SysUtils.DecimalSeparator := '.';

  // dein Code zur Umwandlung

  SysUtils.DecimalSeparator := DsSich;

end;
Damit sichest Du den alten Wert in DsSich, setzt einen neuen Wert ('.') ein und speicherst nach Deinem Code den gesicherten Wert wieder zurück (Merke: immer hinterher aufräumen, sonst stolpern andere über Deinem Müll!)

Gruß

Dietmar Brüggendiek

DerKapitalist 29. Dez 2002 23:52

@Berbog: schau, genau das meinte ich. Wenn das aber nicht in der DLL Dokumentation drinnen stand, dann würde ich die DLL auch nciht weiter verwenden, vermutlich ist sie dann unsauber programmiert.

klappts jetzt eigtl. mit dem DecimalSeparator?

berbog 30. Dez 2002 00:12

Hallo

Ich Möchte euch allen danken
Die Idee mit dem Decimalseparator war goldrichtig
hier mein Code

analog1:=strAlloc(20);
decimalseparator:='.';

label11.Caption:= 'rückgabe TextToFloat '+ inttostr(typ);

label3.caption := 'Fehler ' + inttostr ((ND_Readchanai(1,1,0,analog1)));// Dll Funktion analog1 wird ausgelesen und ergebnis angezeigt
label4.caption := 'Messwert' +(analog1); //wird richtig als +0029 ausgegeben
label5.Caption := 'Stringlänge ' + inttostr (strlen(analog1));
label6.caption := 'Neuer Wert ' +(floattostr(strtofloat(analog1)));


series1.Addy((strtofloat(analog1)));
Allerdings muss ich den Decimalseparator noch zurücksetzen

Gruss Bernd
:D

Christian Seehase 30. Dez 2002 03:25

Moin Dietmar,

grundsätzlich ist es eine sehr gute Idee aufzuräumen, nachdem man etwas verändert hat.
DecimalSeparator gehört allerdings zu den Dingen, bei denen es nicht zwingend notwendig ist, falls nicht gerade mehrere Personen an dem Projekt arbeiten, oder arbeiten könnten.
Dadurch werden ja keine Systemeinstellungen verändert, sondern nur eine SysUtils interne Variable geändert.

Brüggendiek 30. Dez 2002 16:50

Hallo Christian!

Natürlich werden bei DecimalSeparator keine Systemeinstellungen verändert, aber:
Wenn man nicht daran denkt, zeigen andere Programmteile dann ein merkwürdiges Verhalten. Vielleicht benötigt der Programmierer an anderer Stelle ja den voreingestellten Wert - und eine Veränderung wirkt sich für den Rest des Programmlaufs aus! Nicht aufzuräumen führt dazu, daß andere Programmteile je nach Programmablauf unterschiedlich reagieren. Ausnahme: Die Einstellung wird im "initialization"-Abschnitt einer Unit durchgeführt und nicht von einer anderen überschrieben.

Im Übrigen sollte man vielleicht noch ein Wenig Ressourcenschutz hinzufügen:
Code:
// Einstellungen vornehmen
try
  // Arbeiten
finally
  // aufräumen
end;
Dann wird auch bei einem Fehler noch aufgeräumt.
Das ist besonders wichtig, wenn die Prozedur von irgendwo aufgerufen wird und dort mit TRY Fehler abgefangen werden (Merke: einmal TRY, immer TRY), da auch mehrfach verschachtelte Programmaufrufe bei Abbruch-Fehlern aller Art zum letzten geöffneten TRY zurückkehren und dort EXCEPT bzw. FINALLY ausführen. EXCEPT ist besonders eklig, weil dann ein Fehler bei IntToStr möglicherweise als "Dateifehler" angezeigt wird und die Ursache schwer zu finden ist.

Gruß

Dietmar Brüggendiek


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

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