2012-04-11 15 views
18

Ist es möglich, ein TImage auf einem FMX-Formular für iOS zu platzieren und Bild (jpg) von einer URL in dieses TImage zu laden, um in der iOS App angezeigt zu werden?FireMonkey iOS RAD Studio XE2 - Bild im Formular von URL laden

Ich habe es mit keinem Erfolg versucht. Irgendwelche Hinweise oder Punkte in die richtige Richtung werden geschätzt.

+0

Es ist schwer zu sagen, was mit dieser trivialen Aufgabe schief gelaufen ist, ohne dass der Code, den Sie geschrieben haben, fehlgeschlagen ist. – Kromster

+0

Tut mir leid Krom Ich mag mich irren, aber zu dieser Zeit gibt es keine Comms Objekte in Firemonkey. Ich habe gesucht, es gibt viele xcode Beispiele, aber keine für FMX. – ckglobalroaming

+0

alle Hinweise geschätzt, zeigen Sie mir einfach in die richtige Richtung – ckglobalroaming

Antwort

2

Drop einen TButton, TImageControl und TIdHttp auf ein Firemonkey-Formular und dieser Code wird ein Bild aus dem Internet herunterziehen:

procedure TForm1.btnReadWebImgClick(Sender: TObject); 
begin 
    ReadWebImage('http://www.gravatar.com/avatar/5af5f8c5f88c6c237745e9472a31410f?s=32&d=identicon&r=PG'); 
end; 
procedure TForm1.ReadWebImage(imgAddress: string); 
var 
    memStream: TMemoryStream; 
begin 
    memStream := TMemoryStream.Create; 
    try 
    idhttp1.Get (imgAddress,memStream); 
    except 
    ShowMessage('Image not found at:'+imgAddress); 
    memStream.Free; 
    exit; 
    end; 
    try 
    memStream.Position := 0; 
    ImageControl1.Bitmap.LoadFromStream(memStream); 
    finally 
    memStream.Free; 
    end; 
end; 
0

Die Antwort mit einem wenig Einfrieren funktioniert. Ich lade 4 Bilder in einer Schleife. Wenn ich den Knopf drücke, friert das Programm ein, um die Bilder herunterzuladen, der Fortschrittsbalken funktioniert nicht und wenn Sie heruntergeladen werden, fahren Sie perfekt fort. Für 4 Bilder für 1 Sekunde einfrieren. Für 50 ist es eine "keine Verbindung" oder "Schlechtes Programm". Dies ist der Code.

procedure TForm1.SpeedButton1Click(Sender: TObject); 
var 
    i: Integer; 
    Stream: TMemoryStream; 
    imgAddress: string; 
begin 
    ProgressBar1.Min := 0; 
    ProgressBar1.Max := Table1.RecordCount; 

    for i := 1 to Table1.RecordCount do 
    begin 
    ProgressBar1.Value := i; 

    imgAddress := VirtualTable1.FieldByName('flyer').AsString; 
    Stream := TMemoryStream.Create; 
    idhttp1.Get (imgAddress,Stream); 

    try 
     Stream.Position := 0; 
     Table1.Edit; 
     TBlobField(Table1.FieldByName('image')).LoadFromStream(Stream); 
     Table1.Post; 
    finally 
     Stream.Free; 
    end; 
    Table1.Next; 
    end; 
    Table1.First; 
end;