Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   DROP Image Url vom Browser (https://www.delphipraxis.net/155261-drop-image-url-vom-browser.html)

H3llsing 15. Okt 2010 09:55

DROP Image Url vom Browser
 
Morgen zusammen :)

ich hab mitlerweile ne stunde gesucht und bin nicht fündig geworden, und das bei der Masse an Drag & Drop Themen, die es hier gibt.

ok zu meinem problem: ich wollte mir gern eine eigene Komponente schreiben, in der man ein Image aus dem Web (Firefox IE etc) auf ein Timage zieht. Das klappt auch schon wunderbar mit einem Panel dessen handle ich nehme und ein Timage darauf plaziere.

Nun möchte ich aber auch gerne die Online URL des Bildes in einem Edit anzeigen. Leider gibt mir die Funktion nur den temporären Pfad des bildes aus :/

hier die Drop funktion
Delphi-Quellcode:
procedure TDropPanel.FWM_DropFiles(var Msg: TMessage);
var i, anzahl, size: integer;
    Dateiname: String;
    antwort: Integer;
begin
  inherited;
  Dateiname := '';
  anzahl := DragQueryFile(Msg.WParam, $FFFFFFFF, nil, 0);
  for i := 0 to (anzahl - 1) do
  begin
    size := DragQueryFile(Msg.WParam, i , nil, 0) + 1;
    SetLength(Dateiname, size);
    SetLength(Dateiname, DragQueryFile(Msg.WParam,i , @Dateiname[1], size));
    //hier dein source - in "Dateiname" ist der name des droped objectes

    getPicture(dateiname,targetimage);
  end;
end;
habt ihr eine Idee wie man die Url des Webbildes herausbekommt ?

lbccaleb 15. Okt 2010 10:41

AW: DROP Image Url vom Browser
 
Vllt kann dir das weiter helfen:

Text Drag Drop

H3llsing 15. Okt 2010 10:49

AW: DROP Image Url vom Browser
 
VIELEN DANK!

deine Testprog erzielt den gewünschten effekt!
Werd es mir mal genauer anschaun und in die komponente integrieren =)

H3llsing 15. Okt 2010 15:27

AW: DROP Image Url vom Browser
 
Ich bräuchte nochmal ein wenig Hilfe.

ich habe eine Komponente die vom Tpanel abgeleitet ist.
dieser habe ich noch ein TargetEdit,TargetListbox und TargetImage hinzugefügt.

wenn man nun etwas aufs Panel Droppt, füllt er das jeweilige control mit string oder zeigt das bild an. Dass passiert mit der WM_DROPFILES funktion.

nun möchte ich allerdings
diese Unit von lbccaleb
in die komponente mit einbeziehen, damit ich bei Drop statt die tempURL die OnlineURL des bildes in die controles schreiben kann.

Wie realisier ich das ganze ?!
hab schon etliche probelaufe durch und mir ist das ganze komponenten schreiben recht neu.

Wäre für jede hilfe dankbar !

Andreas L. 15. Okt 2010 15:32

AW: DROP Image Url vom Browser
 
Verwende einfach "The Drag and Drop Component Suite for Delphi":

http://melander.dk/delphi/dragdrop/

H3llsing 15. Okt 2010 15:42

AW: DROP Image Url vom Browser
 
die hab ich bereits installiert.
Allerdings habe ich es dort auch nicht geschafft bei einem einzigen Image drop aus dem explorer die URL in einem bestimmten Edit anzeigen zu lassen und gleichzeitig das image in ein TImage zu setzten.

es funktioniert nur wenn man die Quelle genau über das Edit für die URL zum beispiel droppt, oder über dem Timage bzw dem drunterliegendem Panel für das Image. Aber nicht Beides Gleichzeitig!

Wenn du dafür ne Lösung parat hast nehme ich die auch gerne =)

Andreas L. 15. Okt 2010 15:55

AW: DROP Image Url vom Browser
 
Habe schon lange nichts mehr damit gemacht. Aber den Komponenten lag eine ziemlich gute Demo bei in der man auch ein Bild aus dem Browser in ein ImageDrop-Feld ziehen konnte. Es geht also 100%ig. Schau's dir mal an ;-) Ich habe mich damals für diese Komponenten entschieden weil es die einzigen sind die von Win XP - Win 7 funktioniert haben.

H3llsing 15. Okt 2010 15:58

AW: DROP Image Url vom Browser
 
hmm... aber in der demo wars auch so dass man entweder auf dem Edit oder auf dem Image droppen konnte, werds mir aber nochmal anschaun!

ich möchte ja mit einem drop beides angezeigt bekommen!


EDIT: stimmt dort ist noch ne super demo drin die ich wohl übersehen habe! -> DETAILED DEMO

daran werde ich das wohl zusammenbasteln können =) Vielen Dank an Euch beide !

H3llsing 15. Okt 2010 16:56

AW: DROP Image Url vom Browser
 
so ganz klappts irgendwie nicht.
denn URL TargetDrop nimmt wenn das bild nicht verlinkt ist die URL des bildes.
Falls es jedoch verlinkt ist, zeigt es die Verlinkung des Bildes im label an.

Downloadbild lädt die url nur in einen stream und zeigt sie dann im Image an.

Wie bekomme ich denn nun immer bei einem BilderDrop....
1.das Bild an sich im Image
2.die Bild Url
3.die verlinkte URL des bildes


Delphi-Quellcode:
procedure TForm1.DropURLTarget1Drop(Sender: TObject; ShiftState: TShiftState;
  APoint: TPoint; var Effect: Integer);
begin
  // An URL has been dropped - Copy the URL and title from the drop target.
  PanelURL.Caption := DropURLTarget1.Title;
  LabelURL.Caption := DropURLTarget1.URL;
  DownloadBild(DropURLTarget1.URL,ImageTarget);


end;

lbccaleb 15. Okt 2010 17:25

AW: DROP Image Url vom Browser
 
Wenn du die Url zu dem Bild "gedroped" hast, kannst du das Bild doch einfach nachträglich von dieser Url laden und anzeigen!


Edit:
Wie die von mir oben gepostete Komponente allerdings mit Win 7 funktioniert weiß ich nicht....

H3llsing 18. Okt 2010 16:45

AW: DROP Image Url vom Browser
 
vielleicht hab ich mich ein wenig missverständlich ausgedrückt.

angenommen ich habe 2 Bilder auf einer Website Bild_1.jpeg und Bild_2.jpeg
Bild_1 besitzt per HTML die verlinkung auf http://meineseite.php?page1
Bild_2 hat keine Bildverlinkung

beide bilder sind auf dem Server unter http://meineseite.php/bilder/
gespeichert.

möchte ich nun bild_2 droppen, gibt er mir die url: http://meineseite.php/bilder/bild_1.jpeg aus.
bei bild_1 gibt er mir leider die url: http://meineseite.php?page1 aus.

ich möchte aber gerne immer beide Adresse haben. Einmal Grafikadresse und einmal URL adresse.

Das bild anzeigen kann ich aufjedenfall da es mit der Drop-Komponente unterschiedliche prozeduren sind.

hat da jemand eine idee wie ich also

GrafikURL und VerlinkungsURL bekomme ?

Andreas L. 18. Okt 2010 17:15

AW: DROP Image Url vom Browser
 
Hast du die MultiDropTarget-Komponente schon versucht? Dort bekommst du alles (Bilder, Links, Text, ...).

H3llsing 18. Okt 2010 17:34

AW: DROP Image Url vom Browser
 
ne noch nicht,

ich kann sie allerdings nicht finden bei dieser KomponentenSuite http://melander.dk/delphi/dragdrop/

welche meinst du denn genau ?

Andreas L. 18. Okt 2010 18:00

AW: DROP Image Url vom Browser
 
Zitat:

Zitat von H3llsing (Beitrag 1056368)
ne noch nicht,

ich kann sie allerdings nicht finden bei dieser KomponentenSuite http://melander.dk/delphi/dragdrop/

welche meinst du denn genau ?

Steht doch auf der Seite:
Zitat:

TDropComboTarget Enables your application to accept files, shortcuts, text, URLs, meta files, and bitmaps dropped on it from other applications. The component is basically all the above components rolled into one.

H3llsing 19. Okt 2010 09:45

AW: DROP Image Url vom Browser
 
:wall: vielen dank, war kurz vor feierabend und habs leider übersehen.

allerdings führt diese kompo zu den gleichen ergebnissen.
in der Demo der komponente erscheint TEXT,FILES,BITMAP,URL

und leider wird unter FILES die temporäre url des bildes wiedergegeben
unter TEXT und URL entweder die des bildes oder die der Bildverlinkung aber in beiden immer die gleiche.

hat noch jemand eine idee ?

EDIT: btw @lbccaleb deine gepostete kompo läuft doch einwandfrei unter win7 ;)

axellang 20. Okt 2010 11:11

AW: DROP Image Url vom Browser
 
Hallo,

Zitat:

Zitat von H3llsing (Beitrag 1056413)
:wall: vielen dank, war kurz vor feierabend und habs leider übersehen.

hat noch jemand eine idee ?

also es kommt doch darauf an wie das Bild vom Server an den Client übertragen wird. Damit meine ich, wird die komplette URI ergo: http://example.com/image.png übergeben oder wird das Bild als Stream an den Browser gesandt.

Ich habe z.B. eine ASP.NET MVC Anwendung die sich die Bilder von Amazon's S3 Server holt.
Das funktioniert in etwa so:

Code:
 HttpWebRequest iReq = (HttpWebRequest)WebRequest.Create(@"http://s3.amazonaws.com/?x=1&y=2&z=3&img=1234");
 WebResponse iResp = iReq.GetResponse();
 Stream iFile = iResp.GetResponseStream();
           
 Response.ClearHeaders();
 Response.Clear();
 return File(iFile, "image/png");
Lässt Du Dir nun die URL des Bilden anzeigen, wirst Du immer nur die Adresse meiner Seite sehen z.B. http://MeineSeite.de/?bild=1234 und nie die des Bildes.

Ich weiß zwar nicht wie sich das mit der D&D Kompo verhält, jedoch denke ich, das dieser Ansatz dein Problem beschreibt.

Axel

H3llsing 21. Okt 2010 10:20

AW: DROP Image Url vom Browser
 
hmm es herscht anscheinend ein gravierender unterschied mit welchem Browser ich die bilder droppe.
Bei der melander komponenten suite kann man zumindest aus dem Firefox immer Bilder auf ein TImage droppen, bei IE dagegen nur wenn sie nicht verlinkt sind.

In der ComboTagetDemo werden die Bilder vom IE, die verlinkt sind gar nciht erst angezeigt sondern nur die verlinkung :(

Mit der Ole Funktion von lbccaleb wird leider auch entweder die verlinkung mit .html oder wenn nicht verlinkt die bildURL ausgegeben, genau wie bei der Komponente Suite.

@axellang

Zitat:

Lässt Du Dir nun die URL des Bilden anzeigen, wirst Du immer nur die Adresse meiner Seite sehen z.B. http://MeineSeite.de/?bild=1234 und nie die des Bildes.
aber ich möchte immer beides angezeigt bekommen
HTTP bildURL vom gedropten bild
und falls verlinkt
bildverlinkung mit .html zum beispiel

;/ ich werd mal ein wenig nach Clipboardfunktionen suchen und schauen obs da nicht nen weg gibt, wie man beides bekommt.
es muss doch irgendwie gehen ^^


EDIT:
Das Problem mit dem IE8 ist ein Bug vom InternetExplorer laut einem Beitrag vom MelanderBlog
btw. wird beim Drag&Drop aus dem IE nichts in die Zwischenablage kopiert ??? ich habe mir den Clipboard Explorer angeschaut und beim Drag tut sich nichts in der Zwischenablage :shock:

lbccaleb 22. Okt 2010 13:35

AW: DROP Image Url vom Browser
 
Eventuell wirst du das einwenig anders handeln müssen. Vllt die Seite in einem TWebbrowser laden, und dir die Links zu den Bildern von dort beschaffen.
Wie man die Links von einer Seite extrahiert kann man hier im Forum ein paar Bsp. zu finden.

Vllt kommst du so an deine Lösung.

H3llsing 22. Okt 2010 17:18

AW: DROP Image Url vom Browser
 
Das wäre leider zu umständlich für den User, denn er dürfte dann nur mit dem Programminternen Browser Bilder aussuchen.
es sollte schon möglich sein direkt aus dem externen Browser alles zu bekommen.

Momentan hab ich eine lösung ohne Dropdown zu kosten der Bedienerfreundlichkeit :(

lbccaleb 22. Okt 2010 20:13

AW: DROP Image Url vom Browser
 
Um was für eine Lösung handelt es sich da?? Vllt kann man das irgendwie erweitern oder so??!!

H3llsing 25. Okt 2010 08:35

AW: DROP Image Url vom Browser
 
naja im moment gibt es halt 2 Edit felder zur eintragung einer Grafik und einer Verlinkung.

Mein Programm ist ein NewsletterVersandtool mit integriertem Newslettergenerator.
Und schön wärs für meinen Chef wenn mans einfach droppen könnte =)

axellang 27. Okt 2010 11:37

AW: DROP Image Url vom Browser
 
Hallo,

Zitat:

Zitat von H3llsing (Beitrag 1056861)

@axellang

Zitat:

Lässt Du Dir nun die URL des Bilden anzeigen, wirst Du immer nur die Adresse meiner Seite sehen z.B. http://MeineSeite.de/?bild=1234 und nie die des Bildes.
aber ich möchte immer beides angezeigt bekommen
HTTP bildURL vom gedropten bild
und falls verlinkt
bildverlinkung mit .html zum beispiel

;/ ich werd mal ein wenig nach Clipboardfunktionen suchen und schauen obs da nicht nen weg gibt, wie man beides bekommt.
es muss doch irgendwie gehen ^^


EDIT:
Das Problem mit dem IE8 ist ein Bug vom InternetExplorer laut einem Beitrag vom MelanderBlog
btw. wird beim Drag&Drop aus dem IE nichts in die Zwischenablage kopiert ??? ich habe mir den Clipboard Explorer angeschaut und beim Drag tut sich nichts in der Zwischenablage :shock:

leider wirst Du, wenn die Bilder so wie in meinem Beispiel gesendet werden, nie den richtigen Pfad sehen!!
Ich mache es deshalb, damit der User den ApiKey (Anmeldedaten des Kunden) nicht sehen und die Bilder nicht verlinken kann. Das war die Anforderung des Kunden.
Das Bild wird in der HTML Seite einfach als
Code:
<img src="/img/show?1234" />
eingebunden.

Verlinkt der User nun das Bild, kann er es nur solange sehen, wie seine Session gültig ist. Schließt dieser den Browser, und versuch sich das Bild anzuzeigen z.B. auf seiner Webseite, dann Sieht er nur ein Copyright Bild.

Die Bilder befinden sich nicht auf irgendeiner Platte, im übertragenen Sinne, sondern kommen aus der Datenbank! Das einzige Bild was auf der Platte ist, ist das Copyright Bild. Aber dies wird ebenfalls als Stream an den Browser gesendet, so das auch da der User nur
Code:
<src="/img/show?1234" />
sieht und nicht
Code:
<src="http://example.com/img/image.png />
Letztendlich ist es egal ob die Bilder, so wie in meinem Beispiel, aus der DB kommen oder auf von einem anderen Server von dessen Platte, sobald ich es als Stream an den Client sende hat dieser keine Chance den tatsächlichen Pfad des Bildes herauszufinden. Bestes Beispiel dafür sind Captchas.

Axel

H3llsing 28. Okt 2010 12:43

AW: DROP Image Url vom Browser
 
ist ja ne schöne Methode um vom user unbefugtes verlinken zu unterbinden, aber geht leider komplett an meiner Fragestellung vorbei ;)

1. möchte ich VOM Browser in meine Anwendung droppen
2. sollte die GrafikURL in ein Edit eingetragen werden
-> BSP( http://www.meineSeite.de/bilder/test.jpg )
3. sollte falls ein Link auf dem Bild liegt, dass gedroppt werden soll, ebenfalls in ein Edit eingetragen werden
-> BSP ( http://www.meineSeite.de/Seiten/testSeite.html )

Also benötige ich vielleicht die anderen ClipboardFormate in denen die relevanten Strings beim Draggen vom FireFox & InternetExplorer geschrieben werden.

Leider funktionen alle bisherigen Methoden nicht so wie gewünscht.
Es wird entweder die GrafikURL gedroppt ODER der Link der auf der Grafik liegt!
Aber NIE beides! Nicht mit der OLE funktion und nicht mit der Schönen Dropp Komponente :/


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