Convert Variant to String

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: Convert Variant to String

Beitrag von hde »

Genau so, wie es seit Jahren unter etlichen DelphiVersionen läuft, nur dort kann ich es direkt einem String´zuweisen unter Laz muss es ein Variant sein, weil es fpc sonst nicht frisst.
Aber ich versuch's ja zu umgehen via Clipboard ..
hde

gocher
Beiträge: 298
Registriert: Di 23. Nov 2010, 23:41
OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
CPU-Target: 32Bit/64Bit
Wohnort: Geldern
Kontaktdaten:

Re: Convert Variant to String

Beitrag von gocher »

hde hat geschrieben:danke @marcov,
nur .. wie kriege ich ein Variant oder OleVariant umgewandelt in Tvardata ohne "Invalid variant type cast" ??
hde
ich würde es so machen:

Code: Alles auswählen

function VariantToString(AValue: OleVariant): string;
begin
  if TVarData(AValue).vType<>varNull then
    result := VariantToAnsiString(TVarData(AValue))
  else
    result := '';
end;
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: Convert Variant to String

Beitrag von hde »

danke @gocher,
der Kompiler läuft fehlerfrei, aber es bleibt zur Laufteit beim "Invalid variant type cast"

Es geht um Daten aus einem ComObject. ich vermute einfach mal, dass laz/fpc anders als Delphi nicht die Daten zuweist, sondern das ganze ComObject.

danke für Eure Hilfe, aber ich hab's zunächst durch Übergabe per Clipboard umgangen. http://www.lazarusforum.de/viewtopic.ph ... 929#p54929" onclick="window.open(this.href);return false; Nicht sauber und nicht schön, aber es funktioniert.

hde

gocher
Beiträge: 298
Registriert: Di 23. Nov 2010, 23:41
OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
CPU-Target: 32Bit/64Bit
Wohnort: Geldern
Kontaktdaten:

Re: Convert Variant to String

Beitrag von gocher »

hde hat geschrieben:der Kompiler läuft fehlerfrei, aber es bleibt zur Laufteit beim "Invalid variant type cast"
klar der Compiler weiß ja nicht was er erhält
hde hat geschrieben:Es geht um Daten aus einem ComObject. ich vermute einfach mal, dass laz/fpc anders als Delphi nicht die Daten zuweist, sondern das ganze ComObject.
das hört sich so an als würdest Du etwas falsches übergeben, hast Du vielleicht .Value am Ende vergessen, Delphi nimmt soweit ich es festgestellt habe den Default Property "Value" nämlich auch dann wenn er das Object nicht kennt.
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: Convert Variant to String

Beitrag von hde »

gocher hat geschrieben:das hört sich so an als würdest Du etwas falsches übergeben, hast Du vielleicht .Value am Ende vergessen, Delphi nimmt soweit ich es festgestellt habe den Default Property "Value" nämlich auch dann wenn er das Object nicht kennt.
gute Idee. Der Kompiler läuft dann auch sauber durch und das Programm startet, aber .. "Method 'Value' is not supported by automation object"

Aber ich denke auch, dass laz/fpc nicht das erhält was erwartet wird, aber delphi erhält bei gleichem Ablauf das Richtige. Es gibt da ganz offensichtlich Unterschiede zwischen laz/fpc und delphi.

Muss ich wohl den Umweg über Cllipboard nehmen.

dank für eure Mühe. hde

Antrepolit
Beiträge: 340
Registriert: Di 12. Sep 2006, 08:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Re: Convert Variant to String

Beitrag von Antrepolit »

@HDE:
Ein Quelltext sagt mehr als tausend Worte. Ohne Quelltext kann man dir bei deinem Problem nicht helfen, das solltest du verstehen. Ich verfolge diesen Tread seit Tagen, kann aber nur den Kopf schütteln und klinke mich nun aus.
Grüße, Antrepolit

care only if your os is really burning

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: Convert Variant to String

Beitrag von hde »

ich denke auch dass wir diesen Thead schließen sollten, das Problem hier scheint nicht zu lösen zu sein und es gibt ja einen anderen Weg an die Daten zu kommen.

@antrepolit,
ich denke nicht, dass der Quellcode helfen würde, kann ihn aber gerne reinstellen. Muss aber, damit er nachvollziehbar ist den relevanten Teil in ein Testprog übernehmen.

hde
Dateianhänge
TestVariant.zip
(126.43 KiB) 87-mal heruntergeladen

gocher
Beiträge: 298
Registriert: Di 23. Nov 2010, 23:41
OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
CPU-Target: 32Bit/64Bit
Wohnort: Geldern
Kontaktdaten:

Re: Convert Variant to String

Beitrag von gocher »

Da bin ich jetzt aber vom Stuhl gefallen als ich mir Dein Beispiel angesehen habe, Dein Problem hat überhaupt nichts mit Deinen Fragen zu tun!

In Deinem Beispiel OLE-Automatisierung benutzt Du in Einigen Zeilen das Selection Objekt und fütterst es mit Informationen und dann willst Du dieses Objekt in einen String wandeln :shock: , das ist so als möchtest Du ein TEdit in einen String wandeln :?: ! Es ist schon lange her aber so weit ich weiß wäre das Problem gleich zu lösen!
Beim TEdit liest Du die Eingabe über Property Text aus wie auch beim Selection Objekt 8) !

Beim nächsten Mal bitte bevor es zu solchen Problemen kommt eine kleine Kostprobe des Codes mitschicken, dann wären wir schneller am Ziel gewesen.
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me

Benutzeravatar
theo
Beiträge: 10904
Registriert: Mo 11. Sep 2006, 19:01

Re: Convert Variant to String

Beitrag von theo »

Naja, es ist evtl. (nicht getestet) schon möglich, dass das unter Delphi geht. Denn Text ist das Default Property des Selection Object (Word).
The Text property is the default property of the Selection object. Use this property to set or return the text in the current selection.
In einem anderen Beispiel heisst es (für VBA)
Some objects have default properties. For example, Range's default property is Value.
The following yields the same outcome.

Range("A1") = 1 and Range("A1").Value = 1
Ich denke auch, dass der Hund da begraben ist, bin aber nicht sicher, ob das unter Delphi nicht doch so geht.

Du scheinst dir ja ganz schön sicher zu sein gocher, so wie du mit hde sprichst.

gocher
Beiträge: 298
Registriert: Di 23. Nov 2010, 23:41
OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
CPU-Target: 32Bit/64Bit
Wohnort: Geldern
Kontaktdaten:

Re: Convert Variant to String

Beitrag von gocher »

Bei OLE-Automatisierung, also mit createoleobject, also ohne das der Compiler weiß was das default property ist sollte man es immer mitschreiben, sicher Delphi ist da etwas toleranter wie ich schon zuvor geschrieben habe!
Ich mein das auch nicht böse, jedoch habe ich zuvor schon mal gefragt ob er nicht Value vergessen hat, weil das nun mal das default Property für Fields ist, das er nun mit dem Selection Objekt arbeitet welches keinen Feldinhalt hat, sondern nur den markierten/selektierten Text hat, gibt höchst wahrscheinlich kein Value Property!
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: Convert Variant to String

Beitrag von hde »

Ich hab's schon mehrfach gesagt, schließen wir diesen Thread,er kostet uns allennur Zeit. Ich habe ja inzwischen einen funktionierenden Weg.

@gocher,
nur noch zur Klarstellung: Du irrst dich gewaltig!
Word gibt das selektierte Objekt als String zurück, das ist sicher.
Diesen String kann man in allen von mir getesteten Delphi-Versionen (von delphi5 bis XE) ohne jedes Problem einem String zuweisen und weiter bearbeiten. Das läuft in vielen Programmen seit Jahren. Und in diesem Zusammenhang gibt es kein Value.
Laz/fpc kann auch ohne Probleme einem solchen selektierten Objekt einen String(über Variant) zuweisen,
nur umgekehrt will er dem String/Variant das ganze Objekt zuweisen und das geht nur mit Variant und das kann laz/fpc nicht umwandeln.
Es gibt ganz offenbar in diesem Punkt einen großen Unterschied zwischen Delphi und Laz/fpc.
Laz/fpc ist nun mal ähnlich wie delphi aber kein Klon.

hde

Antrepolit
Beiträge: 340
Registriert: Di 12. Sep 2006, 08:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Re: Convert Variant to String

Beitrag von Antrepolit »

Korrigierte Datei im Anhang. Um das Unicode-Problem musst du dich selber kümmern. :wink:
War das denn so schwer? http://msdn.microsoft.com/de-de/library ... 71%29.aspx

Und selbst das war bloß copy & paste.

Man sollte halt ab und an auch einmal darüber nachdenken, ob man den Code, den man copy-pasted denn überhaupt begriffen hat. :roll:
Dateianhänge
unit1.pas
(2.03 KiB) 89-mal heruntergeladen
Grüße, Antrepolit

care only if your os is really burning

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: Convert Variant to String

Beitrag von hde »

@Antrepolit,
danke für die Idee, den Link und "die Blumen", es gibt eben nicht nur schlaue sondern auch dumme :wink:
manchmal ist man auch blind, aber ich schließe mich arturx an:
arturx hat geschrieben:Es ist wie fast immer in Lazarus : wenn man es erstmal weiß, ist es ganz einfach....
aber so funktioniert es nun wirklich? (schwere Geburt)

Code: Alles auswählen

Field := myWord.Selection;
    stringfield:=SysToUTF8(Field.&text);
    ansifield:=stringfield;
nochmals dank für eure Hilfen .. hde
Dateianhänge
TestVariant.zip
(126.67 KiB) 82-mal heruntergeladen

Antrepolit
Beiträge: 340
Registriert: Di 12. Sep 2006, 08:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Re: Convert Variant to String

Beitrag von Antrepolit »

hde hat geschrieben:@Antrepolit,
danke für die Idee, den Link und "die Blumen", es gibt eben nicht nur schlaue sondern auch dumme :wink:
Sorry, so war das nicht gemeint. Es ist halt nur ...die Antwort ist doch da. Warum sucht man dann nicht mal gezielt an der Quelle (MSDN)?
Grüße, Antrepolit

care only if your os is really burning

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: Convert Variant to String

Beitrag von hde »

Sry, aber das Problem lag nicht bei MSDN, sondern bei den Varianten. Was fehlte war nur

Code: Alles auswählen

.&text
diese 5 Zeichen fehlten, sonst nichts.

egal, was soll's ..

Gruß und danke
hde

Antworten