Jak do pliki XML dołączyć grafikę JPG lub BMP jako atrybut, a następnie go wczytać do programu?
możesz dołączyć jak atrybut ścieżkę do pliku graficznego i go wczytywać
ewentualnie zapisać obrazek jako BinaryStream...
bardziej interesuje mnie ta druga możliwość, tylko powiedz mi jeszcze jak mam to zrobić [???]
na pewno Image.Picture.Bitmap.SaveToStream() względnie Image.Picure.Bitmap.LoadFromSTream()
a także przydatne mogą być dwie funkcyjki które są w TXMLINI, a które wziąłem z oryginalnego TINIFIle. W nich jest to co ciebie interesuje, tj. zamiana odczytywanego stringa na TStream i odwrotnie (zapis TStream jako string)
Należy w nich tylko zmienić na jakiś sposób inny pobierania takstu z pliku XML i zapisywania do pliku i to będzie działało.
function TXMLIni.ReadBinaryStream(Section, Name: string;
Value: TStream): integer;
var
Text: string;
Stream: TMemoryStream;
Pos: Integer;
begin
Text := ReadString(Section, Name, ''); {tutaj jest odczytywany tekst do zmiennej - po tym następuje zamiania - tutaj zmień}
if Text <> '' then
begin
if Value is TMemoryStream then
Stream := TMemoryStream(Value)
else Stream := TMemoryStream.Create;
try
Pos := Stream.Position;
Stream.SetSize(Stream.Size + Length(Text) div 2);
HexToBin(PChar(Text), PChar(Integer(Stream.Memory) + Stream.Position), Length(Text) div 2);
Stream.Position := Pos;
if Value <> Stream then Value.CopyFrom(Stream, Length(Text) div 2);
Result := Stream.Size - Pos;
finally
if Value <> Stream then Stream.Free;
end;
end else Result := 0;
end;
procedure TXMLIni.WriteBinaryStream(Section, Name: string; Value: TStream);
var
Text: string;
Stream: TMemoryStream;
begin
SetLength(Text, (Value.Size - Value.Position) * 2);
if Length(Text) > 0 then
begin
if Value is TMemoryStream then
Stream := TMemoryStream(Value)
else Stream := TMemoryStream.Create;
try
if Stream <> Value then
begin
Stream.CopyFrom(Value, Value.Size - Value.Position);
Stream.Position := 0;
end;
BinToHex(PChar(Integer(Stream.Memory) + Stream.Position), PChar(Text),
Stream.Size - Stream.Position);
finally
if Value <> Stream then Stream.Free;
end;
end;
{tutaj podobnie, aczkolwiek string jest zapisywany do pliku. to tez zmień wedle swojego uznania}
WriteString(Section, Name, Text);
end;
niestety nie wiem, czy te funkcje działają, ale nikt jeszce żadnego błędu na bugtraqa xmlini z nimi związanego nie zgłosił.
ok, dzięki. Przejrze te procedury i spróbuje dostosować do swoich potrzeb. Jeszcze raz dzięki [browar]