Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Altes Programm kompilieren (https://www.delphipraxis.net/214425-altes-programm-kompilieren.html)

Runningdog 10. Jan 2024 21:36

AW: Altes Programm kompilieren
 
Delphi-Quellcode:
Function DeCode(Wort:Char):String;

Begin
  Case Wort Of
  '1','A' : DeCode:= 'Bar';
  '2','B' : DeCode:= 'Einzug';
  '3','C' : DeCode:= 'Scheck';
  '4','D' : DeCode:= 'Kartenzahlung';
  '5','E' : DeCode:= 'Überweisung';
  '6','F' : DeCode:= 'Dauerauftrag'
  Else DeCode:= 'Unbekannt';
  End;
End;

jaenicke 10. Jan 2024 21:46

AW: Altes Programm kompilieren
 
Dann musst du nur Wort:Char in Wort:AnsiChar ändern.

Runningdog 11. Jan 2024 09:27

AW: Altes Programm kompilieren
 
Zitat:

Zitat von jaenicke (Beitrag 1531781)
Dann musst du nur Wort:Char in Wort:AnsiChar ändern.

Hat AnsiChar nicht 2 Byte anstelle von Char (meine ich gelesen zu haben)?
Dann lassen sich leider sämtliche Dateien nicht mehr einlesen.

Der schöne Günther 11. Jan 2024 09:46

AW: Altes Programm kompilieren
 
Hallo und Willkommen zurück in der Delphi-Welt!

Das Leben wird oft relativ einfach wenn du nur "docwiki [Suchwort]" in die Internet-Suchmaschine deines Vertrauens eingibst.

Für "docwiki AnsiChar" landet man direkt auf der offiziellen Delphi-Dokumentation:
https://docwiki.embarcadero.com/Libr...ystem.AnsiChar

Die sagt dann direkt:
Zitat:

Repräsentiert einen 1 Byte großen (8 Bit) Zeichentyp.

AnsiChar-Werte stellen auf Byte-Größe (8 Bit) ausgerichtete Zeichen dar. (...)

jaenicke 11. Jan 2024 10:09

AW: Altes Programm kompilieren
 
Zitat:

Zitat von Runningdog (Beitrag 1531793)
Hat AnsiChar nicht 2 Byte anstelle von Char (meine ich gelesen zu haben)?

Char ist seit Delphi 2009 Unicode und damit sind das 2 Byte, während AnsiChar nach wie vor 1 Byte hat. Shortstrings wie in deinem Record sind weiter AnsiStrings, von daher passt das.

Dein case würde aber mit beidem funktionieren. Insofern kannst du AnsiChar für die Funktion verwenden oder das Zeichen mit Decode(Char(AktZeiger^.Satz.Typ[1])) vorher umwandeln.

Runningdog 11. Jan 2024 10:32

AW: Altes Programm kompilieren
 
Zitat:

Zitat von jaenicke (Beitrag 1531796)
Zitat:

Zitat von Runningdog (Beitrag 1531793)
Hat AnsiChar nicht 2 Byte anstelle von Char (meine ich gelesen zu haben)?

Char ist seit Delphi 2009 Unicode und damit sind das 2 Byte, während AnsiChar nach wie vor 1 Byte hat. Shortstrings wie in deinem Record sind weiter AnsiStrings, von daher passt das.

Dein case würde aber mit beidem funktionieren. Insofern kannst du AnsiChar für die Funktion verwenden oder das Zeichen mit Decode(Char(AktZeiger^.Satz.Typ[1])) vorher umwandeln.

Ok, werde ich probieren. Dann gibt es hier noch eine Fehlermeldung, die offensichtlich mit der Chr-Funktion zusammenhängt.

AktZeiger^.Satz.Typ[1]:= Chr(Ord(AktZeiger^.Satz.Typ[1])+16);

Da kommt auch wieder der Fehlercode Inkompatible Type: AnsiChar und Char

Übrigens: Wenn ich die Fehlerzeilen auskommentiere (die Funktionen sind zum Testen nicht so wichtig) läuft das Programm :-) das heißt, das heißt, daß ich dann die fehlerhafte Sortierfunktion in Angiff nehmen kann, die seit 2024 nicht mehr funktioniert. Da werde ich mich wohl wieder richtig reinlesen müssen in Delphi. Jetzt wo ich weiß, daß ich es wieder kompilieren kann. Und ich bedanke mich recht herzlich bei den Helfern hier im Forum, man hat es nach so vielen Jahren ja wirklich nicht leicht.

jaenicke 11. Jan 2024 10:44

AW: Altes Programm kompilieren
 
In der anderen Richtung sollte AnsiChar statt Chr funktionieren. Du kannst auch AnsiChar(Chr(... verwenden, aber die Umwandlung in einen Char ist dort nicht nötig.

Runningdog 11. Jan 2024 11:06

AW: Altes Programm kompilieren
 
Zitat:

Zitat von jaenicke (Beitrag 1531798)
In der anderen Richtung sollte AnsiChar statt Chr funktionieren. Du kannst auch AnsiChar(Chr(... verwenden, aber die Umwandlung in einen Char ist dort nicht nötig.

Tschuldige, aber das habe ich jetzt nicht verstanden. Aber wenn ich mir die Prozedur mal nach so vielen Jahren ansehe, dann geht das hier nur um Groß- bzw- Kleinschreibung, wie gesagt, wenn ich das auskommentiere, wird das Programm kompiliert. Könntest Du mir vielleicht nur noch kurz erklären, wie ich die Zeile

AktZeiger^.Satz.Typ[1]:= Chr(Ord(AktZeiger^.Satz.Typ[1])+16);

umformulieren müßte?


Hier man die ganze Prozedur:



Begin
If AktZeiger <> Nil Then
Begin
If Ord (AktZeiger^.Satz.Typ[1]) < 58 Then
Begin
AktZeiger^.Satz.Typ[1]:= Chr(Ord(AktZeiger^.Satz.Typ[1])+16);
StringGrid1.Cells[0,StringGrid1.Row]:= C_Kontrolliert;
End Else
Begin
AktZeiger^.Satz.Typ[1]:= Chr(Ord(AktZeiger^.Satz.Typ[1])-16);
StringGrid1.Cells[0,StringGrid1.Row]:= '';
End;
GlobalChanged:= True;
Form1.StatusBar1.Panels[0].Text:= 'Daten geändert';
DispAktZeiger;
FillStringGrid(Sender); (* Damit Markierung angezeigt wird *)
End;
End;

jaenicke 11. Jan 2024 11:07

AW: Altes Programm kompilieren
 
Das habe ich doch geschrieben, AnsiChar statt Chr:
Delphi-Quellcode:
AktZeiger^.Satz.Typ[1]:= AnsiChar(Ord(AktZeiger^.Satz.Typ[1])+16);
// oder
AktZeiger^.Satz.Typ[1]:= AnsiChar(Chr(Ord(AktZeiger^.Satz.Typ[1])+16));

Runningdog 11. Jan 2024 11:13

AW: Altes Programm kompilieren
 
Hat geklappt, danke!

AktZeiger^.Satz.Typ[1]:= ansiChar(Ord(AktZeiger^.Satz.Typ[1])+16);

Google hatte gar nicht ausgeworfen, daß es diese Funktion gibt...
War kurz auf dem Schlauch gestanden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:23 Uhr.
Seite 2 von 3     12 3      

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