Registriert seit: 9. Jun 2002
453 Beiträge
|
2 Dimensionales OleVariant Array erstellen?
12. Jul 2004, 10:27
Hi,
das folgende Beispiel wollte ich von VB nach Delphi überstetzen. Allerdings gibt es Schwierigkeiten mit der Übergabe eines 2 Dim. OleVariant Array. Ich habe das Array folgendermaßen deklariert:
tmpObj : array[0..2] of array[0..2] of OleVariant;
So erhalte ich allerdings den Fehler: [Error] uRouteFrm.pas(175): Types of actual and formal var parameters must be identical
Hier mal meine nicht funktionierende delphi Übersetzung:
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
Var
Country, PlzTown, Street : String;
GeocodeResult : Variant;
tmpObj : array[0..2] of array[0..2] of OleVariant; // Pseudo 2 Dim array of OleVariant (Funktioniert nicht)
begin
Country := 'D';
PlzTown := '20354 Hamburg';
Street := 'Gänsemarkt';
GeocodeResult := MGCMapControl1.Map.Geocode(1, Country, PlzTown, Street);
// Objekt für den Temp-Layer anlegen
tmpObj [0, 0] := 'ID';
tmpObj [1, 0] := 1;
tmpObj [0, 1] := 'X';
tmpObj [1, 1] := GeocodeResult[egriX, 0];
tmpObj [0, 2] := 'Y';
tmpObj [1, 2] := GeocodeResult[egriY, 0];
// Objekt Darstellung vbRed
MGCMapControl1.Map.AddressDB.SetTMPSymbol(easSTAR, clred, 50);
// Data | Layer : OleVar
MGCMapControl1.Map.AddressDB.Insert(tmpObj, '#TMP'); // <= Hier kommt der oben genannte Fehler
// tmpObj needs to be a 2*X array
{
Inserts a new entry into the address data base.
The describing VARAINT needs to be a 2*X array,
where X is the number of describing fields.
[0,i] should contain the Name of the field
[1,i] should contain the Value for that field.
minimum requirements are the ID, X & Y fields.
If the value field for ID is EMPTY it will be filled by this method.
ID 1
x 2342242432
y 24523452343
}
MGCMapControl1.RefreshMap;
Hier der original VB Code:
Code:
Private Sub Command1_Click()
Dim GeocodeResult As Variant
Dim tmpObj
Dim Country As String, PlzTown As String, Street As String
'In diesem Beispiel ist eine Adresse hart codiert
'sie muß zuerst geocodiert werden
Country = "D"
PlzTown = "20354 Hamburg"
Street = "Gänsemarkt"
GeocodeResult = MGCMapControl1.Map.Geocode(1, Country, PlzTown, Street)
'Objekt für den Temp-Layer anlegen
ReDim tmpObj(1, 2)
tmpObj(0, 0) = "ID"
tmpObj(1, 0) = 1
tmpObj(0, 1) = "X"
tmpObj(1, 1) = GeocodeResult(egriX, 0)
tmpObj(0, 2) = "Y"
tmpObj(1, 2) = GeocodeResult(egriY, 0)
'Festlegen wie Objekte im Temp-Layer dargestellt werden sollen
MGCMapControl1.Map.AddressDB.SetTMPSymbol easSTAR, vbRed, 50
'Objekt in den Temp-Layer einfügen
MGCMapControl1.Map.AddressDB.Insert tmpObj, "#TMP"
MGCMapControl1.RefreshMap
End Sub
Thanx Salomon
|
|
Zitat
|