Вниз
Скачать: CL | DM;

Help. Проблемы с TMemoryStream;   Найти похожие ветки 

← →
siriusP   (2004-01-23 13:11) [0]

Подскажите, пожалуйста, где ошибка:

function LoadPicture(aStr: Ansistring; var aPicture: TPicture): boolean;
var tmpStrm: TMemoryStream;
tmpStr: Ansistring;
begin
// В aStr может быть "0;AASD47474", "0;", поэтому
tmpLen:= Length(aStr);
tmpStr:= aStr;
if ((tmpLen>2) and (tmpStr[1] = "0") and (tmpStr[2] = ";")) then
tmpStr:= Copy(zStr, 3, tmpLen-2);

result:= false;
tmpStrm:= TMemoryStream.Create;
try
tmpStrm.WriteBuffer(tmpStr, Length(tmpStr));
tmpStrm.Position:= 0;
aPicture.Bitmap.LoadFromStream(tmpStrm);// здесь вылетает с Stream read error
finally
tmpStrm.Free;
end;
result:= true;
end;


← →
icWasya ©   (2004-01-23 13:17) [1]

ну во первых

tmpStrm.WriteBuffer(tmpStr [1], Length(tmpStr));

а во вторых,
AASD47474 - это что, прямо так и написано? это шестнадцатеричное представление? на каждый байт по два символа строки? или как?


← →
Romkin ©   (2004-01-23 13:18) [2]

tmpStrm.WriteBuffer(tmpStr [1], Length(tmpStr));


← →
Digitman ©   (2004-01-23 13:18) [3]

чушь (никакого отношения к bmp-данным не имеющую) загружаешь в поток, ту же чушь и пытаешься оттуда считывать следом же
вот тебе и Stream read error


← →
siriusP   (2004-01-23 13:20) [4]

Эта строка сжата по базе 64. Я сначала ее расжимаю, потом пытаюсь загрузить в картинку


← →
Digitman ©   (2004-01-23 13:23) [5]


> Я сначала ее расжимаю


где ? "разжимаешь" ? покажи фрагмент кода соотв-щий ?


← →
siriusP   (2004-01-23 13:28) [6]

Да какая разница, разжимает правильно. В Buildere работает, точно такой же код, в Delphi - нет.


← →
Тимохов ©   (2004-01-23 13:30) [7]


> tmpStrm.WriteBuffer(tmpStr[1], Length(tmpStr));

И это не помогло?


← →
Тимохов ©   (2004-01-23 13:31) [8]


> tmpStrm.WriteBuffer(tmpStr[1], Length(tmpStr));

И это не помогло?


← →
Digitman ©   (2004-01-23 13:31) [9]


> siriusP (23.01.04 13:28) [6]


> Да какая разница


ну-ну


← →
Digitman ©   (2004-01-23 13:36) [10]


> // В aStr может быть "0;AASD47474", "0;", поэтому


не знаю уж, что у тебя там "может быть", но в буфере строковой переменной, передаваемой тобой в кач-ве параметра, должны быть данные в формате bmp, "нули", "апострофы" и пр.


← →
Digitman ©   (2004-01-23 13:41) [11]

ко всему прочему на ото есть класс TStringStream


← →
WebErr ©   (2004-03-01 17:56) [12]


> siriusP (23.01.04 13:28) [6]
> Да какая разница, разжимает правильно. В Buildere работает,
> точно такой же код, в Delphi - нет.

В Builder"e String другой, там это вообще представлено как класс AnsiString. Естественно одинаковый код, без учёта различий в таком фундаментальном понятии как строка, не будет работать в Delphi так же как в Builder"e!!!



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.029 c
3-43311
nejest
2004-02-10 16:24
2004.03.14
Можно ли обойтись 1 запросом?


1-43624
Vanja
2004-03-01 19:00
2004.03.14
как программно удалить папку?


1-43502
sucer
2004-02-29 06:37
2004.03.14
Помогите с Pchar


8-43686
UnDISCOvery
2003-11-06 15:15
2004.03.14
DirectSound. Как записать многоканальный звук ?


6-43730
Cooler
2004-01-09 15:38
2004.03.14
ClientSocket, ServerSocket




   Наверх