AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi TWebBrowser Image (PNG) auslesen + anzeigen
Thema durchsuchen
Ansicht
Themen-Optionen

TWebBrowser Image (PNG) auslesen + anzeigen

Ein Thema von Mephisto090 · begonnen am 23. Apr 2009 · letzter Beitrag vom 29. Apr 2009
Antwort Antwort
Seite 2 von 3     12 3      
Mephisto090

Registriert seit: 11. Apr 2009
35 Beiträge
 
Delphi 7 Enterprise
 
#11

Re: TWebBrowser Image (PNG) auslesen + anzeigen

  Alt 26. Apr 2009, 13:04
ja sry recht herzlichen dank aus bloß bei den Quelltext sehe ich nicht durch (mag darn liegen das ich das nicht geschrieben habe) sprich ich würde gerne die listbox raus haben und nur 1 Bild 1 bestimmtes bild in ein TImage bekommen

nochmal danke an alle
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#12

Re: TWebBrowser Image (PNG) auslesen + anzeigen

  Alt 27. Apr 2009, 06:27
Es ist eine der wichtigsten Aufgaben eines Programmierers bestehenden Quellcode lesen und auf eigene Bedürfnisse anpassen zu können.

Vielleicht ist obiger Code nicht unbedingt schön. Doch, wenn du willst, beantworte ich deine Fragen dazu.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
Mephisto090

Registriert seit: 11. Apr 2009
35 Beiträge
 
Delphi 7 Enterprise
 
#13

Re: TWebBrowser Image (PNG) auslesen + anzeigen

  Alt 28. Apr 2009, 00:25
na wie mache ich das jetzt das es nicht in einer listbox steht sondern direkt in ein TImage rein kommt
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#14

Re: TWebBrowser Image (PNG) auslesen + anzeigen

  Alt 28. Apr 2009, 01:05
Ich kaue es dir jetzt vor und nehme für dich den Quelltext auseinander. Das mach ich genau einmal!

In der Unit gibt es 4 Funktionen/Prozeduren:

Delphi-Quellcode:
procedure TForm3.FormCreate(Sender: TObject);
procedure TForm3.ListBox1Click(Sender: TObject);
procedure TForm3.Button1Click(Sender: TObject);
function GetURLCacheFile(AURL : String; const AData : TMemoryStream) : Integer;
1.

Beim Erstellen des Formulars wird die Prozedur "FormCreate" aufgerufen. In ihr passiert nichts spektakuläres, außer, dass die TWebBrowser-Komponente, die während der Entwicklung auf das Formular gezogen wurde, eine Webseite über den .Navigate()-Befehl aufruft:

Delphi-Quellcode:
procedure TForm3.FormCreate(Sender: TObject);
begin
  WebBrowser1.Navigate('http://commons.wikimedia.org/w/index.php?title=Special%3ASearch&search=png&go=Go');
end;
Das war ja nicht weiter schwer....

2.

Nachdem die Seite erfolgreich geladen wurde (in der linken Hälfte zu sehen) kannst du auf Button1 klicken. Dabei wird die Prozedur "Button1Click" aufgerufen:

Delphi-Quellcode:
procedure TForm3.Button1Click(Sender: TObject);
var
  doc : IHTMLDocument2;
  img : OleVariant;
  images : IEnumVARIANT;
  Fetched : Cardinal;
begin
  ListBox1.Clear;

  if Supports(WebBrowser1.Document, IHTMLDocument2, doc) and
     Supports(doc.images._newEnum, IEnumVARIANT, images) then
  begin
    images.Reset;

    while images.Next(1, img, Fetched) = S_OK do
    begin
      ListBox1.Items.Add(img.src);
    end;
   
  end;
end;
Was macht diese Prozedur? Zuerst wird die Listbox geleert (da vielleicht noch Einträge vom ersten Durchlauf drin stecken). Die if-Abfrage ist etwas spezifischer, da reicht es erstmal, wenn du sie zur Kenntnis nimmst und weißt: "Brauch' ich". Images: IEnumVARIANT ist ein sogenannter Enumerator. Stell es dir einfach als Array vor, in dem etwas gespeichert ist. Als bildliche Vorstellung für den Anfang reicht das allemal.

Sehr interessant dürfte für dich dieser Teil sein:

Delphi-Quellcode:
    while images.Next(1, img, Fetched) = S_OK do
    begin
      ListBox1.Items.Add(img.src);
    end;
Hier wird nämlich solange die URL des jeweils aktuellen Bildes (img.src) in die Listbox geschrieben, bis images.Next(1, img, Fetched) = S_OK nicht mehr gegeben ist. Und das passiert genau dann, wenn alle Bilder, die in dem Dokument über das <img>-Tag eingebunden sind, abgearbeitet sind. Frage: Wie oft wird die Schleife bei einem Bild wiederholt? Wird sie überhaupt ausgeführt?

3.

Ok, jetzt wurden alle Adressen der Bilder in die Listbox geladen. Was nun? Jetzt zeigt ein Klick auf den Eintrag in der Listbox ein Bild in einem TImage an. Wie wurde das realisiert?

Dazu werden jetzt die beiden letzten Funktionen benötigt. Fangen wir zuerst mit dem OnClick-Ereignis der Listbox an:

Delphi-Quellcode:
procedure TForm3.ListBox1Click(Sender: TObject);
var
  ms : TMemoryStream;
  FName : String;
begin
  if ListBox1.ItemIndex > -1 then
  begin
    ms := TMemoryStream.Create;
    GetURLCacheFile(ListBox1.Items[ListBox1.ItemIndex], ms);

    FName := IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName)) +
             'test' + ExtractFileExt(ListBox1.Items[ListBox1.ItemIndex]);

    ms.SaveToFile(FName);

    ms.Free;

    Image1.Picture.LoadFromFile(FName);

    DeleteFile(FName);
  end;
end;
Zu Beginn wird geprüft, ob wir nicht außerhalb der Items geklickt haben. Denn es kann ja auch sein, dass nur ein Bild gefunden wird. Würden wir dann auf die freie weiße Fläche klicken, bekämen wir keinen Eintragsindex zurück, sondern nur die "-1". Dann wird ein TMemoryStream erstellt. Die nächste Funktion, GetURLCacheFile, werde ich jetzt nicht auseinanderpflücken. Aber soviel sei gesagt: Der erste Parameter gibt die URL des Bildes an, der zweite den Memorystream. Die Funktion holt jetzt aus dem Cache des Internet Explorers (denn nichts anderes ist die TWebBrowser-Komponente) die zu dieser URL passende Datei (in unserem Falle also das ausgewählte Bild) und speichert sie in den TMemoryStream. Von dort wird sie als temporäre datei namens "Test" in dem Ordner der Anwendung gespeichert. Anschließend wird die Datei in das Image1 geladen, und kann nun wieder aus dem Programmordner gelöscht werden.

Du müsstest jetzt also folgendes tun: Den Wert von Image.src (es handelt sich ja deiner Aussage nach nur um ein Bild) an die Funktion GetURLCacheFile() übergeben. Dann mit ms.SaveToFile die Datei temporär speichern und mit Image1.Picture.LoadFromFile wieder laden. Der nächste Schritt wäre dann, auf die temporäre Datei zu verzichten. Vista mag es zum Beispiel gar nicht, wenn ein Programm im Ordner "Programm" Dateien anlegt. Dafür dürfte die Funktion Image1.Picture.LoadFromStream interessant sein.

Viel Erfolg beim Probieren.
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#15

Re: TWebBrowser Image (PNG) auslesen + anzeigen

  Alt 28. Apr 2009, 06:32
@Daniel: *erleichtert* danke

btw.: ein TPicture hat leider kein LoadFromStream weil dabei nicht klar ist, was da für Daten kommen. Deshalb gibts nur LoadFromFile, weil man da die Endung der Datei auswerten kann.
Aber trotzdem: danke!
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#16

Re: TWebBrowser Image (PNG) auslesen + anzeigen

  Alt 28. Apr 2009, 09:20
Zitat von chaosben:
@Daniel: *erleichtert* danke
Kein Ding.

Zitat von chaosben:
btw.: ein TPicture hat leider kein LoadFromStream weil dabei nicht klar ist, was da für Daten kommen. Deshalb gibts nur LoadFromFile, weil man da die Endung der Datei auswerten kann.
Ach, guck an...
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Mephisto090

Registriert seit: 11. Apr 2009
35 Beiträge
 
Delphi 7 Enterprise
 
#17

Re: TWebBrowser Image (PNG) auslesen + anzeigen

  Alt 28. Apr 2009, 22:41
ich bedanke mich an die ausführliche erklärung und ich werde sie mir morgen mal ganz in ruhe anschauen
  Mit Zitat antworten Zitat
Mephisto090

Registriert seit: 11. Apr 2009
35 Beiträge
 
Delphi 7 Enterprise
 
#18

Re: TWebBrowser Image (PNG) auslesen + anzeigen

  Alt 29. Apr 2009, 15:27
also habe es Programmiert die png uses kennt mein delphi 7 nicht und wenn ich ein png datei anklicke dann kommt nur (unbekannte Bildendung .png)
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#19

Re: TWebBrowser Image (PNG) auslesen + anzeigen

  Alt 29. Apr 2009, 15:36
Versuch mal die folgende Komponente zu installieren: http://www.isheu.com/data_5095_1.aspx

Das ist ein Derivat der originalen TPNGImage-Komponente, die sich nun CodeGear unter den Nagel gerissen hat.

//Edit: Dann hast du das Projekt vorher nichtmal compilliert? Man, man, man...
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Mephisto090

Registriert seit: 11. Apr 2009
35 Beiträge
 
Delphi 7 Enterprise
 
#20

Re: TWebBrowser Image (PNG) auslesen + anzeigen

  Alt 29. Apr 2009, 16:51
neues Problem der link sieht so aus und dahinter versteckt sich eine PNG datei

http://www.meinepage.de/test.php?1241016578

der zahlen Code ist immer unterschiedlich
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz