![]() |
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 |
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.. ![]() gruss |
AW: ShellExecution Brauche Hilfe
Weil dadrin
Delphi-Quellcode:
eine Zeichenfolge steht, die dem Body die Textfolge "Get-Clipboard" zuweist.
ShellExecute(Self.Handle,nil,'mailto:' +'' +'?Subject=Guck dir mal den Link an' + '&Body=Get-Clipboard',nil,nil,SW_NORMAL);
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:
Man achte bitte auf die Zahl der + und ', sowie deren Position.
ShellExecute(Self.Handle,nil,'mailto:' +'' +'?Subject=Guck dir mal den Link an' + '&Body=' + Get-Clipboard,nil,nil,SW_NORMAL);
Und ggfls. muss auch noch eine Funktion GetClipboard geschrieben werden? |
AW: ShellExecution Brauche Hilfe
Zitat:
gruss |
AW: ShellExecution Brauche Hilfe
Die Formulierung suggeriert das zumindest, ebenso die Fragestellung.
Zitat:
|
AW: ShellExecution Brauche Hilfe
Zitat:
gruss |
AW: ShellExecution Brauche Hilfe
Zitat:
|
AW: ShellExecution Brauche Hilfe
Zitat:
|
AW: ShellExecution Brauche Hilfe
Das sehe ich etwas anders:
Zitat:
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. |
AW: ShellExecution Brauche Hilfe
Zitat:
Keine Sorge ich speichere die Zwischenablage vorher ab |
AW: ShellExecution Brauche Hilfe
Danke für die vielen Antworten
Ich überlege nur noch wie der richtige Get-Clipboard Bfehl ist. |
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. |
AW: ShellExecution Brauche Hilfe
Zitat:
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. :( |
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:
UINT als Parameter ? sorry Lustig.
,nil,UINT
gruss |
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);
|
AW: ShellExecution Brauche Hilfe
Zitat:
Du hast die Professional Edition also sollte das kein Problem sein. Ich habe nur noch nicht richtig verstanden warum du die Zwischenablage brauchst. |
AW: ShellExecution Brauche Hilfe
Zitat:
Aber gut.. Wie soll er so lernen? Das er keine oder wenig Ahnung vom Programmieren hat kann selbst ein Laie erkennen. Zitat:
gruss |
AW: ShellExecution Brauche Hilfe
Zitat:
|
AW: ShellExecution Brauche Hilfe
Zitat:
|
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. |
AW: ShellExecution Brauche Hilfe
Zitat:
gruss |
AW: ShellExecution Brauche Hilfe
Zitat:
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 > ![]() |
AW: ShellExecution Brauche Hilfe
Zitat:
Es geht hier um PWideChar nicht PAnsiChar oder PChar = PAnsiChar(bei älteren Delphi Versionen) ShellExecute(W) nicht ShellExecuteA ![]() Aber ich denke damit ist er überfordert. Du schreibst ja vorher selbst noch Zitat:
gruss |
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. |
AW: ShellExecution Brauche Hilfe
Zitat:
Ansonsten ja gebe ich dir recht. Bin raus. grusss |
AW: ShellExecution Brauche Hilfe
[Teilweise OT]
Zitat:
![]() [/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 |
AW: ShellExecution Brauche Hilfe
[ganz OT]
Zitat:
Zitat:
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:
Aber wenn du meinst es ist immer noch PChar nun dann kann ich dir nicht helfen :) [/ganz OT] gruss |
AW: ShellExecution Brauche Hilfe
Was ich nicht verstehe:
Die Fehlermeldung lautete: Zitat:
|
AW: ShellExecution Brauche Hilfe
Zitat:
gruss |
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. |
AW: ShellExecution Brauche Hilfe
Zitat:
Seine Delphi Version ist "Delphi 10.1 Berlin Professional" gruss |
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.
|
AW: ShellExecution Brauche Hilfe
Zitat:
Zitat:
Nur weil der Quelltext im Compiler des Fragestellers korrekt funktioniert, heißt das nicht, dass er das auch im Compiler eines anderen tut. Zitat:
Zitat:
Zitat:
Grüße Dalai |
AW: ShellExecution Brauche Hilfe
Zitat:
Zitat:
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:
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:
gruss |
AW: ShellExecution Brauche Hilfe
Zitat:
Zitat:
Zitat:
Zitat:
Grüße Dalai |
AW: ShellExecution Brauche Hilfe
Zitat:
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:
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 |
AW: ShellExecution Brauche Hilfe
[OT]
Zitat:
Zitat:
Zitat:
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 |
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 |
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.
|
AW: ShellExecution Brauche Hilfe
Zitat:
Zitat:
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