Autor |
Beitrag |
woully
      
Beiträge: 78
|
Verfasst: Mo 24.08.09 14:09
Hi,
folgendes problem :
Wie kann ich eine Verknüpfung von einem Button aus einer Form auf den Desktop per drag/drop erstellen ?
Danke
|
|
thepaine91
      
Beiträge: 763
Erhaltene Danke: 27
Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
|
Verfasst: Mo 24.08.09 14:14
Hi,
Ich versteh deine Frage gerade nicht wirklich. Willst du einen Button auf dem Desktop verknüpfen?
Oder eine Datei?
|
|
Nersgatt
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: Mo 24.08.09 14:14
Sorry, ich hab den Satz jetzt 3x gelesen. Ich verstehe trotdem nicht, was Du willst.
Gruß,
Jens
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
|
|
woully 
      
Beiträge: 78
|
Verfasst: Mo 24.08.09 14:18
Hi,
ja sorry, stimmt ist ein bischen unverständlich...
Ich will einfach ein Button auf den Desktop verknüpfen..
|
|
thepaine91
      
Beiträge: 763
Erhaltene Danke: 27
Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
|
Verfasst: Mo 24.08.09 14:22
Wie willst du einen Button aus einer Anwendung auf den Desktop verknüpfen? XD
Kannst einen Screenshot machen ihn ausdrucken dann ausschneiden und anschließend auf deinen Bildschirm ver(knüpfen).
|
|
woully 
      
Beiträge: 78
|
Verfasst: Mo 24.08.09 14:27
hummm
schon versucht...
Der Onclick event wird aber nicht ausgeführt.... 
|
|
Dude566
      
Beiträge: 1592
Erhaltene Danke: 79
W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
|
Verfasst: Mo 24.08.09 14:27
So wie ich ihn verstanden habe, will er eine Verknüpfung haben die dann in seinem Programm einen Button drückt ohne das Programm auszuführen.
Was willst du???
_________________ Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 24.08.09 14:30
Moin!
woully hat folgendes geschrieben : | Ich will einfach ein Button auf den Desktop verknüpfen.. |
Einen Button kannst du ganz sicher nicht als Verknüpfung auf den Desktop legen.
Workaround: mach eine Verknüpfung zu einer Anwendung und gib ihr spezielle Parameter mit, die du in der laufenden Instanz als Indiz für den Buttonklick heranziehen könntest.
Aber, ehrlich gesagt, das hört sich nach einem ziemlich kaputten Konzept an...  Was soll denn das werden, wenn´s fertig ist?
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
thepaine91
      
Beiträge: 763
Erhaltene Danke: 27
Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
|
Verfasst: Mo 24.08.09 14:34
Oder verknüpf eine Anwendung die lediglich eine wm_user... Message an deine Hauptanwendung schickt.
In der Hauptanwendung führst du beim empfangen dieser Message einfach den btnclick aus.
Aber auch ich verstehe den Sinn nicht. Und selbst wenn du es über diesen Umweg machst bleibt es ein Narses hat folgendes geschrieben: | kaputtes Konzept |
|
|
woully 
      
Beiträge: 78
|
Verfasst: Mo 24.08.09 14:48
ok,
hatte mir schon gedacht das es nicht einfach wird...
Ich versuche euch mal das ganze zu erklären, damit ihr sieht was es geben soll.
Meine Anwendung ist unsichtbar, erstellt aber einen Trayicon in der Taskbar.
Bei einem Klick auf das Icon wird ein Popup menü Erzeugt mit mehreren Buttons.
Beim Onclick Event von den Buttons, wird :
1. Eine webservice Anfrage gestartet.
2. Eine Datei (.exe) heruntergeladen und auf die Festplatte kopiert.
3. Diese exe Datei wird gestartet.
So, und nun soll der Benutzer die möglichkeit haben, sich eine Verknüpfung von diesen Buttons aus dem popupmenü, auf den Desktop zu legen (per Drag and Drop.)
|
|
Andreas L.
      
Beiträge: 1703
Erhaltene Danke: 25
Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
|
Verfasst: Mo 24.08.09 15:14
Verknüpfung erstellen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| function CreateLink(const AFilename, ALNKFilename, ADescription, AArgument: string) : Boolean; var psl : IShellLink; ppf : IPersistFile; wsz : PWideChar; begin result:=false; if SUCCEEDED(CoCreateInstance(CLSID_ShellLink, nil, CLSCTX_inPROC_SERVER, IID_IShellLinkA, psl)) then begin psl.SetPath(PChar(AFilename)); psl.SetDescription(PChar(ADescription)); psl.SetWorkingDirectory(PChar(ExtractFilePath(AFilename))); psl.SetArguments(PChar(AArgument)); if SUCCEEDED(psl.QueryInterface(IPersistFile, ppf)) then begin GetMem(wsz, MAX_PATH*2); try MultiByteToWideChar(CP_ACP, 0, PChar(ALNKFilename), -1, wsz, MAX_PATH); ppf.Save(wsz, true); result:=true; finally FreeMem(wsz, MAX_PATH*2); end; end; end; end; |
Den Pfad vom Desktop kannst du mit GETSHELLFOLDER ermitteln. Dann musst du nur noch die Parameter auswerten:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.OnCreate(Sender: TObject); var i: Integer; begin for i := 0 to ParamCount -1 do begin if ParamStr(i) = '-deinParameter' then Button.Click; end; end; |
|
|
thepaine91
      
Beiträge: 763
Erhaltene Danke: 27
Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
|
Verfasst: Mo 24.08.09 15:23
Hmm also auf den Ersten blick sehe ich das sich das ganze im Oncreate befindet.
Aber die Anwendung läuft doch bereits. In dem Fall würde man sie dann extra Starten.
Naja wenn das so gewollt ist wurde der Quelltext ja schon 1A mitgeliefert. 
|
|
Andreas L.
      
Beiträge: 1703
Erhaltene Danke: 25
Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
|
Verfasst: Mo 24.08.09 15:49
Einloggen, um Attachments anzusehen!
|
|
Dude566
      
Beiträge: 1592
Erhaltene Danke: 79
W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
|
Verfasst: Mo 24.08.09 16:55
woully hat folgendes geschrieben : |
So, und nun soll der Benutzer die möglichkeit haben, sich eine Verknüpfung von diesen Buttons aus dem popupmenü, auf den Desktop zu legen (per Drag and Drop.) |
Warum denn das? Also ich möchte mir als Benutzer nicht den ganzen Desktop mit Verknüpfungen zu verschiedenen Programmfunktionen zumüllen. Ist doch mit dem PopUp Menu viel besser gelöst.
_________________ Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
|
|
Andreas L.
      
Beiträge: 1703
Erhaltene Danke: 25
Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
|
Verfasst: Mo 24.08.09 17:00
|
|
thepaine91
      
Beiträge: 763
Erhaltene Danke: 27
Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
|
Verfasst: Mo 24.08.09 17:32
Tja nur lässt es sich schwer realisieren da wenn das alle Anwendungen machen eben i-wann kein Platz mehr da wäre.
|
|
Andreas L.
      
Beiträge: 1703
Erhaltene Danke: 25
Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
|
Verfasst: Mo 24.08.09 17:44
thepaine91 hat folgendes geschrieben : | Tja nur lässt es sich schwer realisieren da wenn das alle Anwendungen machen eben i-wann kein Platz mehr da wäre. |
Ich denke er wird die Verknüpfung auf Wunsch vom User (also als Option) erstellen lassen. Wenn ich der Meinung bin das so ein Icon meinen Desktop vollmüllt klicke ich einfach nicht auf den "Verknüpfung erstellen"-Button in der jeweiligen Anwendung, oder?
|
|
woully 
      
Beiträge: 78
|
Verfasst: Do 10.09.09 16:36
Hi,
So, Problem ist gelöst.
Klar waren es sonderwünsche von Kunden. Warum auch immer.
also, ich habe folgende function verwendet :
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59:
| function TMPopup.CreateDesktopLink(strArgument : String;strName : String) : Boolean;
const IID_IPersistFile: TGUID = '{0000010b-0000-0000-C000-000000000046}';
var slShellLink : IShellLink; pfPersistFile : IPersistFile; wszShortCut : PWideChar; hRes : HResult; sShortCut : string; dwLen : DWORD; strIconPath : Widestring; pszIcon : PChar;
begin Result := false; hRes := CoCreateInstance(CLSID_ShellLink, nil, CLSCTX_INPROC_SERVER, IID_IShellLinkA, slShellLink); if hRes <> S_OK then begin exit; end; slShellLink.SetPath(PChar(Paramstr(0))); slShellLink.SetArguments(Pchar(strArgument)); strIconPath := ExtractFilePath(Paramstr(0))+'fluid-bit.ico';
if fileExists(striconPath) then Begin pszIcon := strAlloc(MAX_PATH); try strpCopy(pszIcon,strIconPath); slShellLink.SetIconLocation(pszIcon,0); finally strDispose(PszIcon); end; end; hRes := slShellLink.QueryInterface(IID_IPersistFile,pfPersistFile); if hRes <> S_OK then begin exit; end; dwLen := (MAX_PATH+1)*2; wszShortcut := AllocMem(dwLen); try sShortCut := ChangeFileExt(strName,'.LNK'); sShortCut := szDesktopFolder + '\' + ExtractFileName(sShortCut); StringToWideChar(sShortCut,wszShortCut,dwLen); hRes := pfPersistFile.Save(wszShortCut, TRUE); finally FreeMem(wszShortCut,dwLen); end; Result := (hRes = S_OK); end; |
Ich erzeuge einen Shortcut auf die eigene Software.
Dem Schortcut verpasse ich ein Argument.
Beim aufruf von dem shortcut weiss die Software dann was für Funktionnalitäten auszuführen sind.
Vielleicht eine unschöne Lösung, aber laufenden auf jeden Fall.
Moderiert von Narses: Delphi-Tags hinzugefügt
|
|
|