Вниз
Скачать: 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.019 c
1-43654
an-na2002
2004-03-02 04:24
2004.03.14
TEdit


1-43497
Lena19
2004-02-28 23:46
2004.03.14
for n:=1 to 10 do goto n


3-43307
tomek
2004-02-11 20:50
2004.03.14
Interbase драйвер


4-43958
rustamus
2004-01-06 10:59
2004.03.14
Икона в трее


1-43620
JIruaasgyy
2004-03-02 13:42
2004.03.14
А какой функцией узнать число ли в текстовом поле?




   Наверх