Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi ItemCount bei OleVariant (https://www.delphipraxis.net/100512-itemcount-bei-olevariant.html)

bundy 29. Sep 2007 08:58


ItemCount bei OleVariant
 
Einen wunderschönen Guten Morgen DP :)

Ich probiere schon seit gästern am Abend, verzweifelnd den Linecount eines OleVariants abzufragen.

Es handelt sich glaubich um einen 2 dimensionalen OleVariant.

Ich arbeite mit der Komponente von Map&Guide.
Und mit der Procedure GetRouteList kann mann die Routen Liste abfragen
GetRouteList(level:TOleEnum;out Result:OleVariant);
Die Code dazu lautet wie folgt:
Delphi-Quellcode:
procedure TForm1.OnRouteCalculated(Sender: TObject; success: WordBool);
var
  nDistance,nDrivingTimeFrom :integer;
  RouteList:OleVariant;

begin
 if success then
    begin
      MGCMapControl1.Map.Routing.GetDistanceAndDuration(nDistance,nDrivingTimeFrom);
      MGCMapControl1.Map.Routing.GetRouteList(erldDetailedList,routeList);

    end
    else
    begin
     ShowMessage ('route calculation failed');
    end;

end;
Bis an diese Stelle funktioniert alles einwandfrei.
Ich habe also jetzt die Routinglist in meiner Variable routeList vom Type OleVariant gespeichert.

Aber wie bekomme ich denn jetzt meine routeList in ein Memo auf meinem Form.
ich hab das mal so gemacht:
Delphi-Quellcode:
i:=0;
while RouteList[0,i] <> '' then
  begin
  cxMemo1.lines.add(Routlist[0,i]);
  inc(i);
  end;
Jetzt liest er die Routinglist ein, aber ich bekomme immer einen Fehler am Schluss, das Der sichere Index auserhalb des zulässigen bereiches liegt.
Kann ich diesen Index max wert nicht irgendwie abfragen , um einen genau definierten loop zu erzeugen?
hab schon high(Routlist) probiert, SizeOf , Lenght , usw... hab es aber leider nicht hinbekommen.

Bitte bitte um hilfe.

lg
bundy

semo 29. Sep 2007 09:11

Re: ItemCount bei OleVariant
 
wenn du mit einem leeren string vergleichst dann typcastest du doch schon von olevariant auf string.
wenn dein olevariant aber empty oder null ist dann knallt es.
du solltest also auf empty oder null prüfen. bei olevariant heisst es glaube unassigned.

bei variant ist es varEmpty oder varNull

bundy 29. Sep 2007 09:27

Re: ItemCount bei OleVariant
 
hmmm....

so gehts nicht
Delphi-Quellcode:
 while RouteList[0,i] <> varEmpty do
  begin
  cxMemo1.lines.add(Routelist[0,i]);
  inc(i);
  end;
so will er das auch nicht

Delphi-Quellcode:
 while RouteList[0,i] <> Unassigned do
  begin
  cxMemo1.lines.add(Routelist[0,i]);
  inc(i);
  end;
ich glaube das das nichts mit dem wert zu tun hat, sondern mit der abfrage des Wertes "while RouteList[0,i]"

Am Ende der Routlist angenommen sie hat 50 Lines das heisst i=50 ist alles noch in Ordung, aber jetzt frag ich ab RouteList[0,51] und dieser Wert liegt ausserhalb, deswegen kracht es.

Aber wie kann ich das umgehen ?

bundy 29. Sep 2007 10:02

Re: ItemCount bei OleVariant
 
Nach langem suchen hab ich jetzt.
Delphi-Quellcode:

 for i := VarArrayLowBound(routeList, 2) to VarArrayHighBound(routeList, 2) do
  begin
  cxMemo1.lines.add(Routelist[0,i]+' | '+Routelist[1,i]+' | '+Routelist[2,i]+' | '+Routelist[3,i]+' | '+Routelist[4,i]+' | '+Routelist[5,i]);

  end;
so funktionierts


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