Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Umwandlung von String in zahl (https://www.delphipraxis.net/30303-umwandlung-von-string-zahl.html)

Reini64 23. Sep 2004 10:19


Umwandlung von String in zahl
 
Hi,

ich habe folgendes Problem :

ich verwende Treeview und möchte mit hilfe des Pointer den Zugriff steuerern
Das hat bis jetzt auch wunderbar funktioniert ! - weil mein Wert maximal 8 Stellen war also integer.
Nun ist mein wert aber 12 Stellen im meinen Fall die Paket-Nr. von DPD.

nun meine Frage wie kann ich die 12 stellige Zahl dem Pointer zuweisen ?

Alter Code:

Delphi-Quellcode:
   with TreeView2.Items Do
         begin
           //erste Ebene
            Ebene1 := add(NIL,dm_auftrag.q_buchungskontrolle['versand_id'] +
                      ' - ' + formatDateTime('DD.MM.YYYY , hh:mm:ss' ,dm_auftrag.q_buchungskontrolle['versand_datum']));
           Ebene1.Data := pointer(integer(dm_auftrag.q_buchungskontrolle['versand_id']));
         end;

static_cast 23. Sep 2004 10:24

Re: Umwandlung von String in zahl
 
Hi,

versuch mal des:

Delphi-Quellcode:
var
  DPD:Int64;
  P:Pointer;
begin
  DPD:=StrToIntDef('934567823456',0);
  P:=@DPD;
end;
Gruss
Daniel

Reini64 23. Sep 2004 10:39

Re: Umwandlung von String in zahl
 
das funktioniert nicht !
ich bekomme keine Wert zurück

Delphi-Quellcode:
    DPD:=StrToIntDef(dm_auftrag.q_buchungskontrolle['versand_id'],0);
    P:=@DPD;
    Ebene1.Data := pointer(p);

static_cast 23. Sep 2004 10:51

Re: Umwandlung von String in zahl
 
wieso machst du aus einem pointer noch einen?

Delphi-Quellcode:
DPD:=StrToIntDef(dm_auftrag.q_buchungskontrolle['versand_id'],0);
P:=@DPD;
Ebene1.Data := pointer(p);
versuch es mal so:

Delphi-Quellcode:
DPD:=StrToIntDef(dm_auftrag.q_buchungskontrolle['versand_id'],0);
Ebene1.Data := @DPD;

static_cast 23. Sep 2004 10:56

Re: Umwandlung von String in zahl
 
okay hab den fehler, sorry...

Delphi-Quellcode:
function StrToIntDef(const S: string; Default: Integer): Integer;
kann kein Int64 :-/ dann nim StrToInt64 musst du halt mit nem try und except abfangen wenn es kein gültiger wert ist.

Muetze1 23. Sep 2004 12:33

Re: Umwandlung von String in zahl
 
Moin!

@static_cast:
Delphi-Quellcode:
var
  DPD:Int64;
  P:Pointer;
begin
  DPD:=StrToIntDef('934567823456',0);
  P:=@DPD;
end;
Bei dem Code ist aber folgendes zu beachten: Der Wert auf den der Pointer zeigt ist nach dem verlassen der Procedure höchstwahrscheinlich kurze Zeit später wieder weg, weil du einen Zeiger auf eine lokale Variable anlegst die aber ihre Gültigkeit verliert beim verlassen der Procedure...

Ich würde mir einen Zeigertyp definieren, z.B. ein PInt64 als ^Int64 o.ä. und den dann beim hinzufügen mit New() alloziieren, Wert zuweisen und dann anfügen an den Baum. Dabei muss man aber bedenken, dass man beim schliessen der Form diese mit New() angelegten Speicherbereiche auch wieder mit Dispose() freigeben muss, denn TTreeView kümmert sich da überhaupt nicht drum.

Und wenn nun die Frage ist, ob der Knoten.Data einen Zeiger oder der Zeiger eine Zahl ist, dann empfehle ich eine Definition eines Records und einen Typ in Form eines Zeiger auf den Record. Wenn man den immer anfügt, dann weiss man immer was dranne hängt am Knoten, wenn Data <> Nil ist und man kann anhand der Informationen im Record leicht unterscheiden welche Informationen wo im Record liegen...

MfG
Muetze1

Reini64 23. Sep 2004 13:05

Re: Umwandlung von String in zahl
 
ich habe das Problem jetzt wie folgt umgangen:

Da ich ja die Versand_ID anzeige kann ih sie ja aus dem string aus lesen:

Beispiel: 156673407209 - 23.09.2004 11:45:03

Hier suche ich nun den Wert:
Delphi-Quellcode:
   i := pos('-', TreeView2.Selected.Text);
   versandId := trim(copy(TreeView2.Selected.Text,1,i-1));
und binde versand_id in den SQL Befehl mit ein.

Danke für Eure Unterstützung


Rein64

static_cast 23. Sep 2004 13:19

Re: Umwandlung von String in zahl
 
Was hier stand ist nichtig, hab jetzt auch nix mehr hinzuzufügen ;)

Daniel


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:00 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 by Thomas Breitkreuz