|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Размер картинки <img src="/items/phone..>
Помоги плз, никак немогу найти инфу как можно програмно определить размер картинки такого вида:
Код HTML:
Код:
procedure TForm1.Button4Click(Sender: TObject); var doc: IHTMLDocument2; i: Integer; img: IHTMLImgElement; begin doc:=WebBrowser1.Document as IHTMLDocument2; for i:=0 to doc.all.length-1 do if doc.all.item(i, 0).QueryInterface(IID_IHTMLImgElement, img)=S_OK then if img.width=121 then memo1.Text:=img.fileSize; end; |
#2
|
||||
|
||||
А в img что-то есть или он пустой? Если Webbrowser всё же получает картинку, то тогда вариант такой - брать её из кэша.
Код:
uses WinInet; function GetCacheFileName(const Url: string; var FileName: string): Boolean; var Info: PInternetCacheEntryInfo; InfoBufSize: Cardinal; begin Result := False; InfoBufSize := 0; GetUrlCacheEntryInfo(PChar(Url), TInternetCacheEntryInfo(nil^), InfoBufSize); if GetLastError = ERROR_INSUFFICIENT_BUFFER then begin GetMem(Info, InfoBufSize); try Result := GetUrlCacheEntryInfo(PChar(Url), TInternetCacheEntryInfo(Info^), InfoBufSize); if Result then begin FileName := Info^.lpszLocalFileName; end; finally FreeMem(Info); end; end; end; //(c) Nikolai Adrianov Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#3
|
|||
|
|||
А подкскажи как ее использовать на примерчике?)
А то ошибка одолела( [DCC Error] Unit1.pas(125): E2197 Constant object cannot be passed as var parameter Делаю так: Код:
procedure TForm1.Button5Click(Sender: TObject); //var s:string; begin //s:=edit1.Text; GetCacheFileName(edit1.Text,'5570fae99e97c793fb7443cbd43753d8.png'); end; |
#4
|
||||
|
||||
Здесь нужно запомнить одно простое правило, если используемая функция или процедура в своих параметрах для запуска содержит ключевое слово var, то с этой переменной нужно работать не на прямую, а передавать ей переменную соответствующего типа, поскольку после того как процедура или функция эта отработает, в "заваренной" переменной будет лежать выходной результат. Это действует всегда и везде.
Конкретно с примером - ведь начиналось всё правильно, зачемто отключена s типа string, в код передается константная величина в одинарных кавычках ('*.png'), которую нельзя изменить во время работы, вот компилятор как раз на это (E2197) и ругается. А решается очень просто Код:
procedure TForm1.Button5Click(Sender: TObject); var s:string; begin // edit1.Text должен содержать ответ на GET запрос, содержащий адрес картинки на сервере в сети // используем основной результат функции который по определению типа boolean if GetCacheFileName(edit1.Text, s) then Image1.Picture.LoadFromFile(s) //вернула true, т.е. файл в кэше есть, в s её имя на диске else ShownMessage('Файл получить не удалось, пичалька'); // вернула false, нету файла end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#5
|
|||
|
|||
Блин, не остается эта картинка в кэше((( Даже оперовский кэш проверял так opera:cache и там нету(( Как же его выдернуть то?(( Опера главное его размер определяет легко и скачивает тоже.
|
#6
|
||||
|
||||
Ну загрузить в стрим, обнаружить сигнатуру, от нее отплясать и найти информацию о ширине и высоте, все.
З.Ы. Читал тему по диагонали. — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#7
|
|||
|
|||
Цитата:
|
#8
|
||||
|
||||
Ну см. RFC по нужному формату, png или что там.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#9
|
|||
|
|||
Цитата:
|
#10
|
||||
|
||||
Объем штоле? Так бы и писал. Вон там пример со стримом, stream.size взять.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#11
|
|||
|
|||
Цитата:
Код:
var doc: IHTMLDocument2; i: Integer; img: IHTMLImgElement; begin doc:=WebBrowser1.Document as IHTMLDocument2; for i:=0 to doc.all.length-1 do if doc.all.item(i, 0).QueryInterface(IID_IHTMLImgElement, img)=S_OK then if img.width=121 then memo1.Text:=img.fileSize; //Но размер определяется как -1 Нашел такой код: Код:
var stream:Tfilestream; v:variant; begin stream:=TfileStream.create('c:1.jpg',fmOpenRead); V:=VarArrayCreate([0, stream.size - 1], varByte); stream.read(v,stream.size); stream.free; end; |