Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Neuen Beitrag zur Code-Library hinzufügen (https://www.delphipraxis.net/33-neuen-beitrag-zur-code-library-hinzufuegen/)
-   -   Delphi ShellExecution Brauche Hilfe (https://www.delphipraxis.net/200444-shellexecution-brauche-hilfe.html)

Teklador 20. Apr 2019 13:15

ShellExecution Brauche Hilfe
 
Hey,

ich habe hier mal ein Problem wo ich einfach nicht weiter komme.
Habe schon eimniges ausprobiert aber nichts klappt.
Villeicht könnt ihr mir ja weiterhelfen:

Folgendes

Ich bin zurzeit an einem etwas größerem Projekt beschäftigt, einem Webbrowser
mit Chromium. Alles läuft im Grunde ganz gut, bis auf eine Sache. ich habe ein Popup Menu gemacht wo man die Möglichkeit haben soll den link per Email zu teilen, das Ganze habe ich mit einem mailto Link als ShellExecution versucht, das hat auch sehr gut geklappt

ShellExecute(Self.Handle,nil,'mailto:' +'' +'?Subject=Guck dir mal den Link an' + '&Body=Get-Clipboard',nil,nil,SW_NORMAL);

Leider wird nicht die Zwischenablage sondern der Text"Get-Clipboard"
in die Email geschrieben. Wisst ihr was man da schreiben muss?

PS: Frohe Ostern

EWeiss 20. Apr 2019 13:33

AW: ShellExecution Brauche Hilfe
 
Ich frage mich manchmal warum es wohl Google und Konsorte gibt.:gruebel:

Delphi-Quellcode:
ShellExecute(0,'open','mailto:johndoe@hotmail.com?subject=HUD&body=Body',NIL, NIL, SW_SHOWNORMAL);


Nicht getestet.

oder..
http://qaru.site/questions/362807/ho...-e-mail-client

gruss

Delphi.Narium 20. Apr 2019 13:41

AW: ShellExecution Brauche Hilfe
 
Weil dadrin
Delphi-Quellcode:
ShellExecute(Self.Handle,nil,'mailto:' +'' +'?Subject=Guck dir mal den Link an' + '&Body=Get-Clipboard',nil,nil,SW_NORMAL);
eine Zeichenfolge steht, die dem Body die Textfolge "Get-Clipboard" zuweist.

Was ist den Get-Clipboard? Der auszugebende Text oder soll sich dahinter irgendeine Funktion befinden, die den aktuellen Text aus der Zwischenablage holt?

Gedacht ist vermutlich sowas in der Art:
Delphi-Quellcode:
ShellExecute(Self.Handle,nil,'mailto:' +'' +'?Subject=Guck dir mal den Link an' + '&Body=' + Get-Clipboard,nil,nil,SW_NORMAL);
Man achte bitte auf die Zahl der + und ', sowie deren Position.

Und ggfls. muss auch noch eine Funktion GetClipboard geschrieben werden?

EWeiss 20. Apr 2019 13:54

AW: ShellExecution Brauche Hilfe
 
Zitat:

Und ggfls. muss auch noch eine Funktion GetClipboard geschrieben werden?
Vorausgesetzt er will den Inhalt des Clipboard mit versenden.

gruss

Delphi.Narium 20. Apr 2019 14:04

AW: ShellExecution Brauche Hilfe
 
Die Formulierung suggeriert das zumindest, ebenso die Fragestellung.
Zitat:

Leider wird nicht die Zwischenablage sondern der Text"Get-Clipboard"
in die Email geschrieben. Wisst ihr was man da schreiben muss?
Warum sollte man in den Body einer Mail den Text "Get-Clipboard" schreiben und sich dann darüber wundern, dass der Body den Text "Get-Clipboard" enthält, wenn man nicht was anderes erreichen möchte, als man geschrieben hat? ;-)

EWeiss 20. Apr 2019 14:12

AW: ShellExecution Brauche Hilfe
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1430687)
Die Formulierung suggeriert das zumindest, ebenso die Fragestellung.
Zitat:

Leider wird nicht die Zwischenablage sondern der Text"Get-Clipboard"
in die Email geschrieben. Wisst ihr was man da schreiben muss?
Warum sollte man in den Body einer Mail den Text "Get-Clipboard" schreiben und sich dann darüber wundern, dass der Body den Text "Get-Clipboard" enthält, wenn man nicht was anderes erreichen möchte, als man geschrieben hat? ;-)

Jo habe es überlesen ;)

gruss

DieDolly 20. Apr 2019 14:55

AW: ShellExecution Brauche Hilfe
 
Zitat:

Leider wird nicht die Zwischenablage sondern der Text"Get-Clipboard"
Schreibst du die aktuelle URL erst in die Zwischenablage oder versuchst du das? Lass das bitte sein. Damit wirst du es dir bei vielen Leuten verscherzen. Stell dir vor es hat jemand irgendwas in der Zwischenablage was sehr wichtig ist und dummerweise ist das die letzte Kopie.

Luckie 20. Apr 2019 16:47

AW: ShellExecution Brauche Hilfe
 
Zitat:

Zitat von DieDolly (Beitrag 1430689)
Zitat:

Leider wird nicht die Zwischenablage sondern der Text"Get-Clipboard"
Schreibst du die aktuelle IRL erst in die Zwischenablage oder versuchst du das? Lass das bitte sein. Damit wirst du es dir bei vielen Leuten verscherzen. Stell dir vor es hat jemand irgendwas in der Zwischenablage was sehr wichtig ist und dummerweise ist das die letzte Kopie.

Zumindest sollte die Schaltfläche entsprechend beschriftet sein, damit der Anwender weiß, was passiert.

Delphi.Narium 20. Apr 2019 17:10

AW: ShellExecution Brauche Hilfe
 
Das sehe ich etwas anders:
Zitat:

Ich bin zurzeit an einem etwas größerem Projekt beschäftigt, einem Webbrowser
mit Chromium. Alles läuft im Grunde ganz gut, bis auf eine Sache. ich habe ein Popup Menu gemacht wo man die Möglichkeit haben soll den link per Email zu teilen, das Ganze habe ich mit einem mailto Link als ShellExecution versucht, das hat auch sehr gut geklappt
Wir habe also einen Link, einen Menüeintrag, um den Link als Mail zu verschicken. Soweit sogut.

Wofür braucht man in diesem Kontext denn da bitteschön die Zwischenablage?

Wenn man aber erwartet, dass der Anwender vor dem Anklicken des Menüeintrages erstmal einen Link in die Zwischenablage kopiert, halte ich das Konzept für überdenkungswürdig, da man hier "immer" den Inhalt der Zwischenablage verschickt, die unterumständeneventuellvielleichtauchmal 'nen Link enthalten könnte.

Abgesehen davon wird die Zwischenablage ja nicht durch den ShellExecute-Aufruf gelöscht, der fälschliche, einmalige und unwiderbringliche Inhalt bleibt also (vorerst noch) erhalten ;-)

Zum Glück wird ja nur das Mailprogramm gestarte und nicht die Mail sofort verschickt (was mit den Indykomponenten o. ä. durchaus einfach möglich wäre), man kann also (zumindest als aufmerksamer Anwender) sein Missgeschick (eventuell?) noch beheben ;-)

@Teklador

Auch wenn das jetzt alles etwas sehr überspitzt und böse klingt: Bitte überleg' Dir nochmal, ob das, was Du vorhast, ein gutes Konzept ist.

Teklador 20. Apr 2019 18:07

AW: ShellExecution Brauche Hilfe
 
Zitat:

Zitat von DieDolly (Beitrag 1430689)
Zitat:

Leider wird nicht die Zwischenablage sondern der Text"Get-Clipboard"
Schreibst du die aktuelle URL erst in die Zwischenablage oder versuchst du das? Lass das bitte sein. Damit wirst du es dir bei vielen Leuten verscherzen. Stell dir vor es hat jemand irgendwas in der Zwischenablage was sehr wichtig ist und dummerweise ist das die letzte Kopie.



Keine Sorge ich speichere die Zwischenablage vorher ab

Teklador 20. Apr 2019 18:14

AW: ShellExecution Brauche Hilfe
 
Danke für die vielen Antworten

Ich überlege nur noch wie der richtige Get-Clipboard Bfehl ist.

DieDolly 20. Apr 2019 18:19

AW: ShellExecution Brauche Hilfe
 
Die Zwischenablage sollte man im besten Fall niemals benutzen. Darum ging es mir.
Du solltest dein Konzept noch einmal überdenken und es anders machen.

Teklador 20. Apr 2019 18:57

AW: ShellExecution Brauche Hilfe
 
Zitat:

Zitat von DieDolly (Beitrag 1430695)
Die Zwischenablage sollte man im besten Fall niemals benutzen. Darum ging es mir.
Du solltest dein Konzept noch einmal überdenken und es anders machen.

ich habe schon eine Funktion wo ich die Zwischenablage seperat speichere und später wieder auf das Original zurück setze.

Das Konzept würde also funktionieren.

Bitte, kann mir irgendwer sagen was ich hier schreiben muss?

1.
ShellExecute(Self.Handle,nil,'mailto:' +'' +'?Subject=Guck dir mal den Link an' + '&Body=' + GetClipboardData ,nil,UINT,SW_NORMAL);

Ich kriege immer die Fehlermeldung: zu wenig wirkliche Parameter.

Oder

2.
ShellExecute(Self.Handle,nil,'mailto:' +'' +'?Subject=Guck dir mal den Link an' + '&Body=' + clipboard,nil,nil,SW_NORMAL);

Fehlermeldung: Inkompatible Typen String und TClipboard

Zu 2
Wenn ich

ShellExecute(Self.Handle,nil,'mailto:' +'' +'?Subject=Guck dir mal den Link an' + '&Body=' + clipboard.ToString,nil,nil,SW_NORMAL);

schreibe kommt die Fehlermeldung: Inkompatible Typen PWideChar und String!?
dasselbe mit

ShellExecute(Self.Handle,nil,'mailto:' +'' +'?Subject=Guck dir mal den Link an' + '&Body=' + clipboard.asText,nil,nil,SW_NORMAL);

Ich weiß so langsam echt nicht mehr weiter. :(

EWeiss 20. Apr 2019 19:00

AW: ShellExecution Brauche Hilfe
 
Schau dir die Parameter an und arbeite damit.
Verstehe nicht was daran so schwierig ist zumal dir die Fehler auch noch gemeldet werden.

Delphi-Quellcode:
,nil,UINT
UINT als Parameter ? sorry Lustig.

gruss

Delphi.Narium 20. Apr 2019 19:04

AW: ShellExecution Brauche Hilfe
 
eventuell
Delphi-Quellcode:
ShellExecute(Self.Handle,nil,PWideChar('mailto:' +'' +'?Subject=Guck dir mal den Link an' + '&Body=' + clipboard.asText),nil,nil,SW_NORMAL);
?

DieDolly 20. Apr 2019 19:07

AW: ShellExecution Brauche Hilfe
 
Zitat:

Ich weiß so langsam echt nicht mehr weiter.
STRG gedrückt halten und auf ShellExecute klicken. Dann kommst du zu den Quellcodes und kannst dir in Ruhe angucken welche Parameter du brauchst.
Du hast die Professional Edition also sollte das kein Problem sein.

Ich habe nur noch nicht richtig verstanden warum du die Zwischenablage brauchst.

EWeiss 20. Apr 2019 19:07

AW: ShellExecution Brauche Hilfe
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1430698)
eventuell
Delphi-Quellcode:
ShellExecute(Self.Handle,nil,PWideChar('mailto:' +'' +'?Subject=Guck dir mal den Link an' + '&Body=' + clipboard.asText),nil,nil,SW_NORMAL);
?

So einfach hätte ich es ihm nicht gemacht.
Aber gut.. Wie soll er so lernen? Das er keine oder wenig Ahnung vom Programmieren hat kann selbst ein Laie erkennen.

Zitat:

STRG gedrückt halten und auf ShellExecute klicken. Dann kommst du zu den Quellcodes und kannst dir in Ruhe angucken welche Parameter du brauchst.
Zu spät! Lösung wurde schon verraten.. Nur lernen kann er davon nichts.

gruss

Teklador 20. Apr 2019 19:17

AW: ShellExecution Brauche Hilfe
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1430698)
eventuell
Delphi-Quellcode:
ShellExecute(Self.Handle,nil,PWideChar('mailto:' +'' +'?Subject=Guck dir mal den Link an' + '&Body=' + clipboard.asText),nil,nil,SW_NORMAL);
?

Nein, das ist nicht die Lösung: habe ich auch schon versucht.

Teklador 20. Apr 2019 19:18

AW: ShellExecution Brauche Hilfe
 
Zitat:

Zitat von EWeiss (Beitrag 1430697)
Schau dir die Parameter an und arbeite damit.
Verstehe nicht was daran so schwierig ist zumal dir die Fehler auch noch gemeldet werden.

Delphi-Quellcode:
,nil,UINT
UINT als Parameter ? sorry Lustig.

gruss

Uups, kann mich nicht errinern das geschrieben zu haben

Teklador 20. Apr 2019 19:19

AW: ShellExecution Brauche Hilfe
 
Wert := 'mailto:' + '' +'?Subject=Guck dir mal den Link an' + '&Body=' + Clipboard.AsText;
ShellExecute(Self.Handle,nil,Pchar(Wert),nil,nil,S W_NORMAL);


Das hier ist der richtige Code.

Mit allem in einer Zeile funktioniert einfach nicht.

EWeiss 20. Apr 2019 19:23

AW: ShellExecution Brauche Hilfe
 
Zitat:

Typen PWideChar
Auch wenn der Typ PChar automatisch nach PWideChar gecastet wird ist trotzdem PWideChar der richtige DatenTyp nicht PChar.

gruss

DieDolly 20. Apr 2019 19:27

AW: ShellExecution Brauche Hilfe
 
Zitat:

Nein, das ist nicht die Lösung: habe ich auch schon versucht.
Ich verstehe das Problem nicht. STRG gedrückt halten und auf ShellExecute klicken wird dein Problem in einer Minute lösen.

Selbst bei Eingabe der ersten Klammer nach ShellExecute sollte ein Hint angezeigt werden wo genau steht welche Typen zu übergeben sind. PWideChar.

Als kleiner Tipp vielleicht noch. Du übergibst einen Wert der nicht dem entspricht was ShellExecute verlangt.
Mehr aber sage ich nicht. Bisschen anstrengen muss man sich auch.

Aller letzter Tipp: LPCTSTR > https://docs.microsoft.com/en-us/win...-shellexecutea

EWeiss 20. Apr 2019 19:41

AW: ShellExecution Brauche Hilfe
 
Zitat:

Aller letzter Tipp: LPCTSTR > https://docs.microsoft.com/en-us/win...-shellexecutea
Sorry das ist falsch..
Es geht hier um PWideChar nicht PAnsiChar oder PChar = PAnsiChar(bei älteren Delphi Versionen)

ShellExecute(W) nicht ShellExecuteA
https://docs.microsoft.com/en-us/win...-shellexecutew
Aber ich denke damit ist er überfordert.

Du schreibst ja vorher selbst noch
Zitat:

nach ShellExecute sollte ein Hint angezeigt werden wo genau steht welche Typen zu übergeben sind. PWideChar.
und verzweigst dann auf ShellExecuteA.

gruss

DieDolly 20. Apr 2019 19:49

AW: ShellExecution Brauche Hilfe
 
Ich wusste nicht, dass man nil als Operation übergeben kann. Mein Fehler.
Trotzdem ist sein Konzept mehr als fragwürdig. Man spielt nicht mit der Zwischenablage herum.

Noch viel wichtiger ist aber, dass man ab und zu auch mal in die Hilfe oder in die Quellcodes guckt.

EWeiss 20. Apr 2019 19:51

AW: ShellExecution Brauche Hilfe
 
Zitat:

Zitat von DieDolly (Beitrag 1430707)
Ich wusste nicht, dass man nil als Operation übergeben kann. Mein Fehler.
Trotzdem ist sein Konzept mehr als fragwürdig. Man spielt nicht mit der Zwischenablage herum.
Noch viel wichtiger ist aber, dass man ab und zu auch mal in die Hilfe oder in die Quellcodes guckt.

Na ja hat nichts mit Nil zu tun sondern damit das du ihm zu einem Link auf LPCTSTR = PAnsiChar verwiesen hast.
Ansonsten ja gebe ich dir recht.

Bin raus.

grusss

Dalai 20. Apr 2019 21:51

AW: ShellExecution Brauche Hilfe
 
[Teilweise OT]

Zitat:

Zitat von EWeiss (Beitrag 1430704)
Auch wenn der Typ PChar automatisch nach PWideChar gecastet wird ist trotzdem PWideChar der richtige DatenTyp nicht PChar.

Ist er nicht. Warum? Wenn man ShellExecute verwendet, nimmt man PChar, bei ShellExecuteA nimmt man PAnsiChar und bei ShellExecuteW nimmt man PWideChar. Nur so funktioniert es in allen Delphi-Versionen. Ich frag mich wirklich, warum dieser Fehler bzw. die Diskussion dazu immer wieder auftaucht. Konkrete Typen (Ansi/Wide) sollte man ausschließlich dann verwenden, wenn die Funktionen bzw. deren Datentypen das verlangen, z.B. weil es nur eine Definition davon gibt. Konkretes Beispiel: MSDN-Library durchsuchenMapAndLoad() gibt's nur mit Ansi.

[/OT]

Zum Thema: Auch ich kann nur deutlich davon abraten, an der Zwischenablage zu fummeln. Die Zwischenablage gehört dem Benutzer, nicht irgendeinem Programm! Da hilft es auch wenig, wenn der Inhalt der Zwischenablage vorher gesichert und hinterher wiederhergestellt wird. Sowas ist einerseits schlechtes Design, und bei Verwendung von Multi-Clipboard-Programmen (wie z.B. ArsClip bei mir) fällt sowas ganz besonders negativ auf.

Stattdessen wäre es viel besser, den Inhalt direkt zu übergeben und in den Parameterstring für ShellExecute einzubauen.

Es gibt übrigens noch weitere Probleme mit dem Ansatz: Was ist mit Umlauten und Sonderzeichen? Stichwort Zeichensatzkodierung. Ich weiß nicht genau, wie das mit Leerzeichen ist, ob die auch speziell kodiert werden müssen (%20) - dafür gibt's bestimmt auch einen Fachbegriff.

Grüße
Dalai

EWeiss 20. Apr 2019 21:57

AW: ShellExecution Brauche Hilfe
 
[ganz OT]
Zitat:

Wenn man ShellExecute verwendet, nimmt man PChar
Das ist schlichtweg falsch.

Zitat:

Nur so funktioniert es in allen Delphi-Versionen.
Es ging nicht um die frage ob es bei allen Delphi Versionen so funktioniert.

Fakt ist wenn ich in D2010 PChar verwende wird PChar automatisch zu PWideChar konvertiert oder willst du das bezweifeln?
Wenn ich ShellExecute ohne A oder W aufrufe wird Automatisch von ShellExecuteW ausgegangen versuch es doch einfach.

Die ganze Automatische Konvertierung ist eh ein Witz unter Delphi und dient nur den zweck um eine Abwärtskompatibilität zu erhalten.
In keiner von mir verwendeten Programmiersprache wird so mit Dateitypen umgegangen. (Mein großes Problem mit Delphi)

OK war schon raus aber das musste noch gesagt werden.
Aber für die, die immer recht behalten wollen was steht im Shot! PChar oder PWideChar.
Wenn man mir glauben mag das ich noch lesen kann dann steht dort ganz deutlich für jeden der lesen kann PWideChar!

Zitat:

Ich frag mich wirklich, warum dieser Fehler bzw. die Diskussion dazu immer wieder auftaucht.
Ganz einfach weil deine Aussage einfach falsch und nicht zutreffend ist.
Aber wenn du meinst es ist immer noch PChar nun dann kann ich dir nicht helfen :)

[/ganz OT]

gruss

Delphi.Narium 20. Apr 2019 22:06

AW: ShellExecution Brauche Hilfe
 
Was ich nicht verstehe:

Die Fehlermeldung lautete:
Zitat:

schreibe kommt die Fehlermeldung: Inkompatible Typen PWideChar und String!?
Warum sollte man hier was anderes als PWideChar nehmen, wenn doch explizit PWideChar verlangt wird?

EWeiss 20. Apr 2019 22:10

AW: ShellExecution Brauche Hilfe
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1430714)
Was ich nicht verstehe:

Die Fehlermeldung lautete:
Zitat:

schreibe kommt die Fehlermeldung: Inkompatible Typen PWideChar und String!?
Warum sollte man hier was anderes als PWideChar nehmen, wenn doch explizit PWideChar verlangt wird?

Und ich verstehe nicht wie @Dalai schreibt das man PChar statt dessen nehmen soll.. Sorry das ist einfach Quatsch wie mein ScreenShot belegt.

gruss

DieDolly 20. Apr 2019 22:14

AW: ShellExecution Brauche Hilfe
 
Ich denke es wäre sehr hilfreich, wenn der Fragende uns erst einmal mitteilt, welche Delphiversion er hat.
Ich kann mir kaum vorstellen, dass er Berlin Pro hat bei so einem einfachen Problem. Außerdem hätte er dann schon lange in die Delphiquellcodes reingeguckt.

EWeiss 20. Apr 2019 22:17

AW: ShellExecution Brauche Hilfe
 
Zitat:

Zitat von DieDolly (Beitrag 1430716)
Ich denke es wäre sehr hilfreich, wenn der Fragende uns erst einmal mitteilt, welche Delphiversion er hat.
Ich kann mir kaum vorstellen, dass er Berlin Pro hat bei so einem einfachen Problem. Außerdem hätte er dann schon lange in die Delphiquellcodes reingeguckt.

Für ihn ist das Problem doch schon erledigt ;) Seit dem letzten Beitrag auf Seite 2!
Seine Delphi Version ist "Delphi 10.1 Berlin Professional"

gruss

DieDolly 20. Apr 2019 22:26

AW: ShellExecution Brauche Hilfe
 
Dann bleibt nur noch zu sagen, dass gehofft werden darf, dass er den Nutzer auf dieses Verhalten hinweist. Nicht, dass nachher einem Nutzer durch einen Programmfehler die Zwischenablage fehlt und er sich wundert warum.

Dalai 20. Apr 2019 23:08

AW: ShellExecution Brauche Hilfe
 
Zitat:

Zitat von EWeiss (Beitrag 1430713)
Das ist schlichtweg falsch.

Nö, ist es nicht.

Zitat:

Es ging nicht um die frage ob es bei allen Delphi Versionen so funktioniert.
Warum nicht? Denk doch mal über den konkreten Fragesteller hinaus. Wenn in der Zukunft jemand (anderes) den Quelltext kopiert, um diesen in einem alten Delphi zu benutzen, wird er - unnötigerweise (aber natürlich völlig korrekterweise) - eine Warnung vom Compiler bekommen, weil dort ShellExecute eben auf ShellExecuteA verweist, was PAnsiChar als Parameter benutzt.

Nur weil der Quelltext im Compiler des Fragestellers korrekt funktioniert, heißt das nicht, dass er das auch im Compiler eines anderen tut.

Zitat:

Fakt ist wenn ich in D2010 PChar verwende wird PChar automatisch zu PWideChar konvertiert oder willst du das bezweifeln?
Daran habe ich keinen Zweifel, und das habe ich auch an keiner Stelle angedeutet.

Zitat:

Wenn ich ShellExecute ohne A oder W aufrufe wird Automatisch von ShellExecuteW ausgegangen versuch es doch einfach.
Aber eben erst in Delphi ab 2009. Davor war es eben ShellExecuteA, und das will PAnsiChar und kein PWideChar.

Zitat:

Ganz einfach weil deine Aussage einfach falsch und nicht zutreffend ist.
Ist sie eben nicht. Und ich bin übrigens nicht der einzige, der immer wieder in diese Richtung darauf hinweist - himitsu schägt in die gleiche Kerbe.

Grüße
Dalai

EWeiss 20. Apr 2019 23:11

AW: ShellExecution Brauche Hilfe
 
Zitat:

Warum nicht? Denk doch mal über den konkreten Fragesteller hinaus. Wenn in der Zukunft jemand (anderes) den Quelltext kopiert, um diesen in einem alten Delphi zu benutzen, wird er - unnötigerweise (aber natürlich völlig korrekterweise) - eine Warnung vom Compiler bekommen
Siehe mein Shot alle deine versuche deine Aussage zu rechtfertigen sind damit widerlegt und dann fragst du noch warum diese Diskussion immer wieder angefacht wird?
Zitat:

weil dort ShellExecute eben auf ShellExecuteA verweist, was PAnsiChar als Parameter benutzt.
Eben nicht was steht auf meinem ScreenShot?
Aber gut hier nochmal genauer!
Delphi-Quellcode:
function ShellExecute; external shell32 name 'ShellExecuteW';
function ShellExecuteA; external shell32 name 'ShellExecuteA';
function ShellExecuteW; external shell32 name 'ShellExecuteW';
Zitat:

Aber eben erst in Delphi ab 2009.
Kein Argument.
Es ist nicht die frage ab welcher Delphi Version sondern die frage steht im Raum warum so eine bescheidene Krankhafte Abwärtskompatibilität.
Warum soll ich also wenn wie im Shot gezeigt bei ShellExecute hier PChar anstelle von PWideChar verwenden? Sorry das wäre schwachsinnig unabhängig davon ob
PChar automatisch nach PWideChar konvertiert wird.. Hier liegt schon das Problem.

Zitat:

himitsu schägt in die gleiche Kerbe.
Uninteressant wer wo was sagt für mich zählen die Fakten und die sind belegt.

gruss

Dalai 20. Apr 2019 23:34

AW: ShellExecution Brauche Hilfe
 
Zitat:

Zitat von EWeiss (Beitrag 1430720)
Eben nicht was steht auf meinem ScreenShot?

Selbstverständlich verwenden Delphi-Versionen vor 2009 ShellExecute als "Alias" für ShellExecuteA. OK, vielleicht war "ältere Delphi-Version" zu unkonkret; gemeint war Delphi < 2009, eben Nicht-Unicode-Delphis.

Zitat:

Kein Argument.
Das ist kein Argument für diejenigen, die alte Delphis verwenden? Sehr rücksichtsvoll von dir...

Zitat:

Es ist nicht die frage ab welcher Delphi Version sondern die frage steht im Raum warum so eine bescheidene Krankhafte Abwärtskompatibilität.
Wo ist da eine krankhafte Abwärtskompatibilität? Im Gegenteil: Ich find's gut, wenn Code von vor 10 Jahren auch noch in einem aktuellen Delphi läuft. Das funktioniert aber nicht, wenn die Datentypen sich geändert haben, weil man unsauber gearbeitet hat - eine Vermischung von Datentypen ist unsauber.

Zitat:

Warum soll ich also wenn wie im Shot gezeigt bei ShellExecute hier PChar anstelle von PWideChar verwenden?
Solange du den Code nur für dich schreibst oder nur für einen ganz bestimmten Compiler, spielt es keine Rolle. Aber wir sind hier in der Öffentlichkeit, und da ist es immer eine gute Idee, auf andere Rücksicht zu nehmen, und dazu gehören auch Nutzer von Delphi älter 2009. Andererseits müsstest du dir überhaupt keinen Kopf darüber machen, ob nun PChar ein PWideChar ist oder nicht, wenn du einfach den generischen Typ PChar benutzt (außer eben an den Stellen, wo ein expliziter Ansi-/Wide-Typ verlangt wird, was ziemlich selten ist).

Grüße
Dalai

EWeiss 20. Apr 2019 23:40

AW: ShellExecution Brauche Hilfe
 
Zitat:

Wo ist da eine krankhafte Abwärtskompatibilität?
Krankhaft weil nur von Delphi Praktiziert.
Mach das mal mit Visual Studio oder einer anderen Programmiersprache.

Mich interessiert nur was meine aktuelle Delphi Version mir vorschreibt.. nicht mehr nicht weniger und das ist nun mal..
Delphi-Quellcode:
function ShellExecute; external shell32 name 'ShellExecuteW';
function ShellExecuteA; external shell32 name 'ShellExecuteA';
function ShellExecuteW; external shell32 name 'ShellExecuteW';
Zitat:

Aber wir sind hier in der Öffentlichkeit, und da ist es immer eine gute Idee, auf andere Rücksicht zu nehmen, und dazu gehören auch Nutzer von Delphi älter 2009.
Selbst wenn ich das würde wird bei ShellExecute in meiner Delphi Version und der des Thread Erstellers trotzdem PWideChar erwartet du kannst da rumreden wie du willst es wird nicht auf ShellExecuteA verzweigt unabhängig davon ob ich jetzt PChar oder PWideChar verwende.
Das sollte jetzt langsam auch dir klar sein.

Aber.. ich könnte PChar verwenden so das auch ältere Versionen mit meinem Source arbeiten könnten aber warum soll ich das tun..
Wenn ich PChar verwende ja dann verzweigt ShellExecute unter älteren Delphi Versionen auf 'ShellExecuteA' aber ich bin nicht dafür zuständig dafür sorge zu tragen
das die Abwärtskompatibilität zu unterschiedlichen Delphi Versionen eingehalten wird. Interessiert mich einfach nicht.

Mehr ist da nicht zu sagen.
Du magst deine Meinung haben dann lebe damit.
Aber wundere dich nicht das diese Diskussion immer wieder aufflammt.

gruss

Dalai 21. Apr 2019 00:16

AW: ShellExecution Brauche Hilfe
 
[OT]

Zitat:

Zitat von EWeiss (Beitrag 1430722)
Mach das mal mit Visual Studio oder einer anderen Programmiersprache.

In C++ verwendet man halt z.B. TCHAR, was auch nur ein Alias auf einen konkten Ansi-/Wide-Typ ist. Inwiefern ist das jetzt anders als PChar? Genau, gar nicht.

Zitat:

Aber.. ich könnte PChar verwenden so das auch ältere Versionen mit meinem Source arbeiten könnten aber warum soll ich das tun..
Wenn ich PChar verwende ja dann verzweigt ShellExecute unter älteren Delphi Versionen auf 'ShellExecuteA' aber ich bin nicht dafür zuständig dafür sorge zu tragen
das die Abwärtskompatibilität zu unterschiedlichen Delphi Versionen eingehalten wird. Interessiert mich einfach nicht.
Ich kann mich nur wiederholen: Sehr rücksichtsvoll von dir... Mit der Einstellung wirst du kaum lange in einem Team arbeiten, vermute ich mal...

Zitat:

Du magst deine Meinung haben dann lebe damit.
Das hat nicht nur mit Meinung zu tun sondern auch mit den von dir so geliebten Fakten. Zu diesen Fakten gehört es nämlich auch, dass es Nicht-Unicode-Delphis gibt, und wenn man Code für andere oder zusammen mit anderen oder für die Öffentlichkeit schreibt, hat man das unter Umständen zu berücksichtigen.

Gerade Programmieranfänger sollte man auf solche Fallstricke aufmerksam machen, damit sie im Idealfall Anfängerfehler vermeiden. So schwer ist das nun wirklich nicht zu verstehen.

[/OT]

Grüße
Dalai

EWeiss 21. Apr 2019 00:37

AW: ShellExecution Brauche Hilfe
 
Um das abzuschließen du kennst meine Meinung.. deine Ausflüche können mich nicht überzeugen.
Ich arbeite mit D2010 alles andere ist Nebensache.

Nutzt jemand meinen Source dann muss er die Kompatibilität zu seiner Delphi Version selbst herstellen.
Was ist da so schwierig?

gruss

Luckie 21. Apr 2019 05:25

AW: ShellExecution Brauche Hilfe
 
Jetzt ist es aber gut, ihr beiden. :roll: Bitte beendet eure Diskusion hier. Eure Standpunkte habt ihr klar gemacht und so langsam scheint es persönlich zu werden.

EWeiss 21. Apr 2019 09:34

AW: ShellExecution Brauche Hilfe
 
Zitat:

Zitat von Luckie (Beitrag 1430725)
Jetzt ist es aber gut, ihr beiden. :roll: Bitte beendet eure Diskusion hier. Eure Standpunkte habt ihr klar gemacht und so langsam scheint es persönlich zu werden.

War ja dabei!
Zitat:

Um das abzuschließen
Es ist nur seltsam das Leute die Heute noch mit Delphi5 arbeiten von anderen die mit der Zeit gehen erwarten das man doch bitte schön Abwärtskompatibilität einhalten soll.
Warum? Ich unterstütze auch kein Windows31, Windows for Worksgroup, XP mehr wenn ich neuere Software entwickle.

gruss


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