Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Tutorials und Kurse (https://www.delphipraxis.net/36-tutorials-und-kurse/)
-   -   Prism [.NET] Konvertieren von String nach Integer... (https://www.delphipraxis.net/14298-%5B-net%5D-konvertieren-von-string-nach-integer.html)

sakura 6. Jan 2004 14:54


[.NET] Konvertieren von String nach Integer...
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi DPler,

man soll ja klein anfangen und so tat ich das dann auch. Vorweg eine kleine Information. Unter Delphi 8 kann man die Anwendungs-Projekte in zwei Lager aufteilen
  1. VCL Forms Anwendungen
  2. Windows Forms Anwendungen
Erste basiert auf dem bekannten Prinzip der VCL und ist vor allem für die interessant, welche die alten Anwendungen nach .NET übernehmen möchten. Letztere basiert 100%-ig auf der eigentlichen .NET Technologie und ist für neue Projekte zu empfehlen, da Borland nicht garantiert, das die VCL Forms auch in Zukunft immer unterstützt werden :shock:

Na gut, genug der Vorrede, also an die Anwendung. Ich habe eine kleine Windows Forms Anwendung geschaffen, welche dem Nutzer die Möglichkeit gibt, einen Text-Wert einzugeben und diesen mit der Zahl 10 zu vergleichen.

Ist der eingegebene Wert keine Zahl, so wird dem User dieses erklärt, ist es eine Zahl, so werden die Häckchen in den Checkboxen entsprechend gesetzt.



Im Code habe ich über den Compilerschalter UseVCL die Möglichkeit eingeräumt mit den SysUtils bzw. mit den .NET Klassen zu arbeiten. In Delphi haben wir bisher zur Umwandlung von Strings in Zahlen die Funktion StrToInt (oder ähnliche) genutzt.

Die Variante der Borländer

Die Funktion StrToInt ist auch in Delphi 8 noch verfügbar. Möchte man diese jedoch einbinden, so muss man gleichzeitig auch die Basis der VCL.NET-Klassen mitnehmen. Das macht in der Exe ca. 20 KB mehr Gewicht. Dazu wird in die Uses-Klausel einfach die Unit Borland.Vcl.SysUtils aufgenommen. Ihr seht richtig, Punkt im Namen :shock:

Es wird auch nicht wirklich eine Unit eingebunden. Viel mehr wird hier das .NET-Assembly aus dem Namespace Borland.Vcl.SysUtils aufgenommen.

Damit können wir später einfach
Delphi-Quellcode:
Value := StrToInt(edtValue.Text);
im Quellcode schreiben.

Die offizielle .NET Variante

Die Funktion StrToInt ist wie bereits gesagt eine durch Borland zur Verfügung gestellte Funktion. Standardmäßig existiert diese nicht in unseren .NET Programmen. Microsoft stellt uns hier allerdings mit den Standard-Assemblies eine andere Methode zur Konvertierung zur Verfügung.

Im .NET-Assembly System.Convert wird uns eine größere Gruppe an Konvertierungsmethoden zur Verfügung gestellt. Die für uns interessante ist
Delphi-Quellcode:
Value := System.Convert.ToInt32(edtValue.Text);
(gut das es CodeInsight gibt, auch wenn es noch nicht so zuverlässig arbeitet)

Der Code für beide Varianten

Folgend die entscheidenden Codeauszüge aus dem Projekt. Schaut Euch mal die MessageBox im Exceptionhandler an :shock:

Delphi-Quellcode:
unit uFormMain;

{.$DEFINE UseVCL}

interface

uses
  System.Drawing, System.Collections, System.ComponentModel,
  System.Windows.Forms, System.Data
  {$IFDEF UseVCL}
    , Borland.Vcl.SysUtils
  {$ENDIF}
  ;

[...]

procedure TWinForm.btnConvert_Click(sender: System.Object; e: System.EventArgs);
var
  Value: Integer;
const
  CheckValue: array[Boolean] of CheckState = (
    CheckState.UnChecked, CheckState.Checked
  );
begin
  try
    {$IFDEF UseVCL}
      Value := StrToInt(edtValue.Text);
    {$ELSE}
      Value := System.Convert.ToInt32(edtValue.Text);
    {$ENDIF}
    chkLess.CheckState := CheckValue[Value < 10];
    chkEqual.CheckState := CheckValue[Value = 10];
    chkGreater.CheckState := CheckValue[Value > 10];
  except
    on E: Exception do
    begin
      chkLess.CheckState := CheckState.Indeterminate;
      chkEqual.CheckState := CheckState.Indeterminate;
      chkGreater.CheckState := CheckState.Indeterminate;
      MessageBox.Show(E.Message, 'Es trat ein Fehler auf', MessageBoxButtons.OK,
          MessageBoxIcon.Error);
    end;
  end;
end;
Das soll es für das erste Beispiel sein. Viel Erfolg mit .NET.

...:cat:...

r_kerber 6. Jan 2004 16:38

Re: [.NET] Konvertieren von String nach Integer...
 
Das Programm läuft schon mal. Mit dem Quellcode kann ich leider erst herumspielen, wenn ich D8 habe. :?
Zitat:

Zitat von Sakura
Letztere basiert 100%-ig auf der eigentlichen .NET Technologie und ist für neue Projekte zu empfehlen

Hier kann ich Dir nur voll und ganz zustimmen.
BTW: Auch die VCL.net ist 100% .net. Sie stellt jedoch eine völlig selbständige Klassenbibliothek dar, die nicht unbedingt mit der .net-Standard-Klassenbibliothek zusammenarbeitet. Während WinForms in .net bereits enthalten, gilt dies für VCL.net nicht. Das bedeutet, dass man bei VCL.net-Applikationen die VCL.net mitliefern muß, damit das Programm auch läuft. Bei einer puren WinForms-Anwendung genügt die eigentliche Assembly.

sakura 6. Jan 2004 16:41

Re: [.NET] Konvertieren von String nach Integer...
 
Zitat:

Zitat von r_kerber
BTW: Auch die VCL.net ist 100% .net. Sie stellt jedoch eine völlig selbständige Klassenbibliothek dar...

Das stimmt natürlich. Schlechte Wortwahl meinerseits :oops:

...:cat:...

Jens Schumann 6. Jan 2004 16:46

Re: [.NET] Konvertieren von String nach Integer...
 
Moin sakura,
tatsächlich es läuft.
Aber ich vermisse den XP-Style. Da ja D8 gerade erst herausgekommen ist gehe ich eigentlich
davon aus, dass das Programm ohne weiteres (ohne explizites einbinden des Manifests)
den XP-Style verwendet.

mirage228 6. Jan 2004 16:53

Re: [.NET] Konvertieren von String nach Integer...
 
Die .NET Einstellungen unter Systemsteuerung\Verwaltung Verwaltung besitzen auch kein Manifest. Und da .NET ja nicht an ein Windows Betriebssystem gebunden ist (soweit ich das verstanden habe), gibt es standardmäßig auch kein Manifest.
Aber man kann schnell eins mittels Ressource oder .manifest datei einbinden.

mfG
mirage228

Stanlay Hanks 6. Jan 2004 16:54

Re: [.NET] Konvertieren von String nach Integer...
 
Hi. Bei mir sagt er nur:

Windows XP Home beschwert sich
ConvertDemo.exe - Fehler in Anwendung
----------------------------------------------------------------------
Die Anwendung konnte nicht richtig initialisiert wereden (0xc0000135). Klicken Sie auf "OK", um die Anwendung zu beenden.
----------------------------------------------------------------------


:cry:

Man liest sich, Stanlay :hi:

Jens Schumann 6. Jan 2004 16:56

Re: [.NET] Konvertieren von String nach Integer...
 
Hallo Stanley,
hast Du das .NET framework installiert ?
Wenn ja, welche Version.

Ich vermute mal D8 benötigt min. die Version 1.1

sakura 6. Jan 2004 16:56

Re: [.NET] Konvertieren von String nach Integer...
 
Zitat:

Zitat von Jens Schumann
Aber ich vermisse den XP-Style. Da ja D8 gerade erst herausgekommen ist gehe ich eigentlich davon aus, dass das Programm ohne weiteres (ohne explizites einbinden des Manifests) den XP-Style verwendet.

Keine Ahnung, so weit bin ich noch nicht. Ich habe mich nie um die Manifeste gekümmert :|

...:cat:...

r_kerber 6. Jan 2004 16:56

Re: [.NET] Konvertieren von String nach Integer...
 
Hast Du das .net-Framework auf Deinem PC? Ohne dem läuft nichts!

sakura 6. Jan 2004 16:57

Re: [.NET] Konvertieren von String nach Integer...
 
Windows XP Home beschwert sich
ConvertDemo.exe - Fehler in Anwendung
----------------------------------------------------------------------
Die Anwendung konnte nicht richtig initialisiert wereden (0xc0000135). Klicken Sie auf "OK", um die Anwendung zu beenden.
----------------------------------------------------------------------


Die spannende Frage: Hast Du das Microsoft .NET Framework v1.1 installiert? Das ist eine .NET Anwendung ;-)

...:cat:...

Stanlay Hanks 6. Jan 2004 16:58

Re: [.NET] Konvertieren von String nach Integer...
 
Zitat:

Zitat von Jens Schumann
Hallo Stanley,
hast Du das .NET framework installiert ?
Wenn ja, welche Version.

Ich vermute mal D8 benötigt min. die Version 1.1

:pale: :wall: :oops:

Nö...glaub ich nicht :(
.oO Hoffentlich gibt er mir gleich einen Link, wo ich das runterladen kann :oops:

r_kerber 6. Jan 2004 17:01

Re: [.NET] Konvertieren von String nach Integer...
 
Hallo Stanlay,

hast Du schon mal was von Google gehört? Bei Google suchen.net Framework. Da findest Du dann auch .NET Framework Home

Stanlay Hanks 6. Jan 2004 17:03

Re: [.NET] Konvertieren von String nach Integer...
 
:wall: Hatte mein Hirn grade auf Standby :wall:
Vielen Dank!

CalganX 6. Jan 2004 17:05

Re: [.NET] Konvertieren von String nach Integer...
 
Hi,
die Visuellen Styles zu aktivieren müsstest du folgendes schreiben:
Delphi-Quellcode:
Application.EnableVisualStyles
Oder irgendwas in diese Richtung. Zumindest geht das bei C#.

Btw: ich habe vorhin mal das Beispiel nahezu 1-zu-1 nach C# übertragen: siehe da! Es funktioniert! Das ist das, was ich an .NET so toll finde! ;)
Das Beispiel hänge ich gleich mal an. :)

Chris

Alexander 6. Jan 2004 17:06

Re: [.NET] Konvertieren von String nach Integer...
 
Zitat:

Das Beispiel hänge ich gleich mal an.
Ja, wo ist es denn :mrgreen:

Edit: Bei mir funktioniert es übrigens auch ;-)

sakura 6. Jan 2004 17:09

Re: [.NET] Konvertieren von String nach Integer...
 
Zitat:

Zitat von Chakotay1308
Hi,
die Visuellen Styles zu aktivieren müsstest du folgendes schreiben:
Delphi-Quellcode:
Application.EnableVisualStyles
Oder irgendwas in diese Richtung. Zumindest geht das bei C#.

Ist auch so in Delphi. Ich habe es mal eingefügt und neu hochgeladen.

@Jens Schumann: Teste doch mal, bitte. :angle:

...:cat:...

Jens Schumann 6. Jan 2004 17:13

Re: [.NET] Konvertieren von String nach Integer...
 
Zitat:

Zitat von sakura
@Jens Schumann: Teste doch mal, bitte.

mach ich gerne. Wenn Du mir sagst wo ich es finden kann.

sakura 6. Jan 2004 17:13

Re: [.NET] Konvertieren von String nach Integer...
 
Zitat:

Zitat von Jens Schumann
mach ich gerne. Wenn Du mir sagst wo ich es finden kann.

Im ersten Beitrag - ist neu hochgeladen ;-)

...:cat:...

mirage228 6. Jan 2004 17:16

Re: [.NET] Konvertieren von String nach Integer...
 
Funktioniert nicht ganz, da du noch FlatStyle von den Buttons auf "System" stellen musst. (Ist bisher auf "Standard" wahrs.)

mfG
mirage228

Jens Schumann 6. Jan 2004 17:17

Re: [.NET] Konvertieren von String nach Integer...
 
Hallo sakura,
ich habe es getestet. Ich kann keine XP-Styles entdecken.

sakura 6. Jan 2004 17:19

Re: [.NET] Konvertieren von String nach Integer...
 
Zitat:

Zitat von mirage228
Funktioniert nicht ganz, da du noch FlatStyle von den Buttons auf "System" stellen musst. (Ist bisher auf "Standard" wahrs.)

Na ja, ich habe mit rumgespielt :angle:

...:cat:...

sakura 6. Jan 2004 17:22

Re: [.NET] Konvertieren von String nach Integer...
 
Und jetzt - klappt es jetzt mit den XP-Styles?

...:cat:...

Jens Schumann 6. Jan 2004 17:25

Re: [.NET] Konvertieren von String nach Integer...
 
Zitat:

Zitat von sakura
Und jetzt - klappt es jetzt mit den XP-Styles?

Leider nein.

sakura 6. Jan 2004 17:30

Re: [.NET] Konvertieren von String nach Integer...
 
Zitat:

Zitat von Jens Schumann
Leider nein.

Dann bin ich überfragt... Mal schauen, vielleicht kann ich dazu mal eine Lösung ermitteln.

...:cat:...

MathiasSimmack 6. Jan 2004 17:30

Re: [.NET] Konvertieren von String nach Integer...
 
Das Manifest habt ihr aber angelegt? Ich meine, in sakuras ZIP ist keins, und ohne Manifest keine Visual Styles ... ;)

Christian S. 6. Jan 2004 17:31

Re: [.NET] Konvertieren von String nach Integer...
 
Hallo!

Zumindest bei C# musste ich das EnableVisualStyles einschalten, bevor die Form erstellt wird. Im FormShow funktionierte es nicht!

MfG
Peter

//edit: @Mathias: zumindest bei C# klappt es ohne.
//edit2: meinte natürlich "FormLoad"

mirage228 6. Jan 2004 17:32

Re: [.NET] Konvertieren von String nach Integer...
 
Bei mir in C# gehts auch ohne .manifest oder sonstige Ressourcen @Mathias.

Und sakura, du musst es, wie Peter Lustig schon sagte, aktivieren bevor das Form erstellt wird.

mfG
mirage228

MathiasSimmack 6. Jan 2004 17:33

Re: [.NET] Konvertieren von String nach Integer...
 
Aha. Ich denke, ich sollte mich doch langsam mal mit .NET beschäftigen. :mrgreen:

CalganX 6. Jan 2004 17:38

Re: [.NET] Konvertieren von String nach Integer...
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
als Beweis zur "Genialität" von .NET: Konvertierung von sakura's Beispiel nach C#. Problemlos. Ich habe nur eine Sache geändert, denn sakura greift auf den Status der CheckBoxen per CheckedState zu und ich mache das direkt per Checked. :)

Chris

sakura 6. Jan 2004 17:45

Re: [.NET] Konvertieren von String nach Integer...
 
Zitat:

Zitat von Peter Lustig
Zumindest bei C# musste ich das EnableVisualStyles einschalten, bevor die Form erstellt wird. Im FormShow funktionierte es nicht!

Danke, dann sollte es jetzt aber gehen :WoIstDerBetendeSmiley:

...:cat:...

Jens Schumann 6. Jan 2004 18:04

Re: [.NET] Konvertieren von String nach Integer...
 
Zitat:

Zitat von Chakotay1308
Hi,
als Beweis zur "Genialität" von .NET: Konvertierung von sakura's Beispiel nach C#. Problemlos. Ich habe nur eine Sache geändert, denn sakura greift auf den Status der CheckBoxen per CheckedState zu und ich mache das direkt per Checked. :)

Chris

Bei mir werden keine XP-Styles sichtbar.

Code:
      static void Main()
      {
         Application.Run(new WinForm());
         Application.EnableVisualStyles();
      }
Welchen Sinn macht es Application.EnableVisualStyles();
nach Application.Run(new WinForm()); aufzurufen ?

Jens Schumann 6. Jan 2004 18:05

Re: [.NET] Konvertieren von String nach Integer...
 
Zitat:

Zitat von sakura
Zitat:

Zitat von Peter Lustig
Zumindest bei C# musste ich das EnableVisualStyles einschalten, bevor die Form erstellt wird. Im FormShow funktionierte es nicht!

Danke, dann sollte es jetzt aber gehen

Leider immer noch nicht.

mirage228 6. Jan 2004 18:06

Re: [.NET] Konvertieren von String nach Integer...
 
Zitat:

Zitat von Jens Schumann
Zitat:

Zitat von Chakotay1308
Hi,
als Beweis zur "Genialität" von .NET: Konvertierung von sakura's Beispiel nach C#. Problemlos. Ich habe nur eine Sache geändert, denn sakura greift auf den Status der CheckBoxen per CheckedState zu und ich mache das direkt per Checked. :)

Chris

Bei mir werden keine XP-Styles sichtbar.

Code:
      static void Main()
      {
         Application.Run(new WinForm());
         Application.EnableVisualStyles();
      }
Welchen Sinn macht es Application.EnableVisualStyles();
nach Application.Run(new WinForm()); aufzurufen ?

Es muss auch vorher aufgerufen werden^^

mfG
mirage228

CalganX 6. Jan 2004 18:16

Re: [.NET] Konvertieren von String nach Integer...
 
Hi,
stimmt. Und das es danach steht ist irgendwo Absicht, denn ich habe keine Visual Styles installiert gehabt und ich wollte auch keine haben, nachdem ich sie wieder eingeschaltet habe. ;) Ich hätte kommentieren können: ja... aber egal. *g*

Chris

Jens Schumann 10. Jan 2004 19:38

Re: [.NET] Konvertieren von String nach Integer...
 
Hallo,
habe gerade D8 Pro installiert und ein bißchen rumgespielt.
Damit die Komponenten im XP Style angezeigt werden
ist folgender Code in der dpr Datei nicht ausreichend.
Delphi-Quellcode:
[STAThread]
begin
  Application.EnableVisualStyles;
  Application.Run(TWinForm1.Create);
end.
Zusätzlich muss bei jeder Komponente im OI die Eigenschaft FlatStyle auf System stehen.

sakura 10. Jan 2004 19:41

Re: [.NET] Konvertieren von String nach Integer...
 
Zitat:

Zitat von Jens Schumann
Zusätzlich muss bei jeder Komponente im OI die Eigenschaft FlatStyle auf System stehen.

*roll* Echt umständlich :?

...:cat:...

Christian S. 10. Jan 2004 20:15

Re: [.NET] Konvertieren von String nach Integer...
 
Oh, das ist in C# auch so. Hatte Mirage228 aber schon auf der vorigen Seite geschrieben.


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