Вверх ↑
Этот топик читают: Гость
Разработчик
Ответов: 26151
Рейтинг: 2127
#16: 2008-01-20 00:11:30 ЛС | профиль | цитата
Galkov писал(а):
Могу намылить
Если не сложно, то вот мой адрес nesco_sochi@mail.ru

А вот это


  while WaitForSingleObject(hOK,0) <> WAIT_OBJECT_0 do begin
_hi_OnEvent(_event_onWait);
end;

вот так написать нельзя


  while WaitForSingleObject(hOK,0) <> WAIT_OBJECT_0 do begin
WaitMessage;
Applet.ProcessMessages;
end;
Я проверил, вроде провисов нет, нормально отрабатывается при чтении мультикартинок

карма: 22

0
Ответов: 9906
Рейтинг: 351
#17: 2008-01-20 00:14:10 ЛС | профиль | цитата
Не надо мне сообщать мыло
Хм... Живой размер 2878998
Забирай
карма: 9

0
Разработчик
Ответов: 26151
Рейтинг: 2127
#18: 2008-01-20 00:19:53 ЛС | профиль | цитата
Galkov, спс..., уже стянул.

Насчет отрисовки на контексте Bitmap'a, то вот так работает


#pas
if valid then begin
hdcMem:= CreateCompatibleDC(0);
hdcBmp:= CreateCompatibleBitmap(DC, wsz, hsz);
SelectObject(hdcMem, hdcBmp);
BitBlt(hdcMem, 0, 0, wsz, hsz, DC, 0, 0, SRCCOPY);

if (sz.cx * 100) div sz.cy > (hw * 100) div hh then
FImgCtx.StretchBlt(hdcMem, x1, y1 + (hh - (hw * sz.cy) div sz.cx) div 2, hw, (hw * sz.cy) div sz.cx, 0, 0, sz.cx, sz.cy, SRCCOPY)
else
FImgCtx.StretchBlt(hdcMem, x1 + (hw - (hh * sz.cx) div sz.cy) div 2, y1, (hh * sz.cx) div sz.cy, hh, 0, 0, sz.cx, sz.cy, SRCCOPY);

BitBlt(DC, 0, 0, wsz, hsz, hdcMem, 0, 0, SRCCOPY);
DeleteDC(hdcMem);

_hi_CreateEvent(_Data,@_event_onLoad);

Иначе работать никак не желает.
карма: 22

0
Ответов: 9906
Рейтинг: 351
#19: 2008-01-20 00:25:56 ЛС | профиль | цитата
nesco писал(а):
Иначе работать никак не желает.

Сказки-то не надо рассказывать
Ну или - страшные истории на ночь...

У всего есть причины - нашел, сделал работу.
А подобранное методом тыка функционирующее состояние, это - радиолюбительство
Ну честное слово, не в том я состоянии, чтобы искать... Как минимум -- в ближайший месяц...
Но базовые принципы-то -- они от моего состояния аж никак не зависят
карма: 9

0
Разработчик
Ответов: 26151
Рейтинг: 2127
#20: 2008-01-20 00:52:40 ЛС | профиль | цитата
Galkov, должно отрисовыать напрямую, но не отрисовывает. Вопрос, почему это может быть?

Я прекрасно понимаю, что сделано в коде, и что я отриисовываю через промежуточный контекст памяти, и я уже нашел, как предыдущий код упростить.

Но еще раз повторюсь, у меня начисто отказывается рисовать на Bitmap.Canvas.Handl'e, почему это может быть?
карма: 22

0
Ответов: 9906
Рейтинг: 351
#21: 2008-01-20 10:05:33 ЛС | профиль | цитата
Откуда я знаю, почему...
У тебя же была мысль перевести ВСЕ мероприятия в один поток
Собственно, я это и имел ввиду, когда говорил про INFINITE
Т.е примерно такое

#pas
...
procedure MyCallback(pCtx:pointer; pUserData:pointer); stdcall;
var pCls:THiImageLoader;
begin
pCls := THiImageLoader(pUserData);
SetEvent(pCls.hOK);
// и больше НИЧЕГО!!!
end;
procedure THiImageLoader._work_doLoad;
...
FImgCtx.SelectChanges(IMGCHG_COMPLETE,0,1);
WaitForSingleObject(hOK,INFINITE);
...
Если уж такое "все безобразие уснуло надолго (повисло просто)", или "начисто отказывается рисовать на Bitmap.Canvas.Handl'e"
-- тогда это нечистая сила, однако.

------------ Дoбавленo:

Вообще-то, если сторонний поток (в котором предположим работает MyCallBack) сотворяет какое-то действие связанное как-то с SendMessage для хэндла основного потока (собственно, почти любое обращение к визуальному элементу), то он уходит в слип до тех пор, пока основной поток не сделает обращение к очереди сообщений (GetMessage или PeekMessage).
А отсюда не один логический выход (сделать эти самые GetMessage или PeekMessage), а два -- еще и НЕ делать действий, "связанных как-то с SendMessage для хэндла основного потока" в этом стороннем потоке.
карма: 9

0
Разработчик
Ответов: 26151
Рейтинг: 2127
#22: 2008-01-20 12:31:33 ЛС | профиль | цитата
Galkov, оригинально. А где FImgCtx.GetStateInfo(stat, sz, 0);, без него это безобразие вообще работать не будет?
карма: 22

0
Ответов: 9906
Рейтинг: 351
#23: 2008-01-20 12:38:24 ЛС | профиль | цитата
Ты же сказал, что все может работать ПОСЛЕ...
карма: 9

0
Разработчик
Ответов: 26151
Рейтинг: 2127
#24: 2008-01-20 13:28:16 ЛС | профиль | цитата
Ну, положим я сказал несколько по-другому.
nesco писал(а):
Я попробовал все, что можно, оттуда перенести в основной метод

Так вот это я, как раз, и оставил.
Ха, интересно, сейчас попробую перенести.

------------ Дoбавленo:

Перенес. С INFINITE завис начисто, но вот так работать стал намного быстрее в мультичтении


#pas
FImgCtx.GetStateInfo(stat, sz, 0);
// WaitForSingleObject(hOK,INFINITE);
while WaitForSingleObject(hOK,10) <> WAIT_OBJECT_0 do begin
WaitMessage;
if Assigned(Applet) and (not AppletTerminated) then Applet.ProcessMessages;
end;
CloseHandle(hOK);
FImgCtx.GetStateInfo(stat, sz, 0);
FImgCtx.Disconnect;

------------ Дoбавленo:

Проверил с Bitmap.Canvas.Handle, нифига не работает, только через промежуточный контекст, те вот так


#pas
if (Bitmap <> nil) and (not Bitmap.Empty) then begin
hdcMem:= CreateCompatibleDC(0);
SelectObject(hdcMem, Bitmap.Handle);
hRect := MakeRect(0, 0, Bitmap.Width, Bitmap.Height);
ClientRect;
if (sz.cx <> 0) or (sz.cy <> 0) then begin
if (sz.cx * 100) div sz.cy > (hw * 100) div hh then
FImgCtx.StretchBlt(hdcMem, x1, y1 + (hh - (hw * sz.cy) div sz.cx) div 2, hw, (hw * sz.cy) div sz.cx, 0, 0, sz.cx, sz.cy, SRCCOPY)
else
FImgCtx.StretchBlt(hdcMem, x1 + (hw - (hh * sz.cx) div sz.cy) div 2, y1, (hh * sz.cx) div sz.cy, hh, 0, 0, sz.cx, sz.cy, SRCCOPY);
end;
DeleteDC(hdcMem);
_hi_onEvent(_event_onLoad);
end;
Кстати, в одном источнике я встречал похожее решение.
------------ Дoбавленo:

Тут еще тэги косячат, зачем-то лишнюю ";" между "<>" воткнуло
карма: 22

0
Ответов: 9906
Рейтинг: 351
#25: 2008-01-20 13:35:44 ЛС | профиль | цитата
nesco, я не умею работать методом тыка
Здесь ты обратился за помощью не по адресу: я не умею делать выводы из "чего будет, если ту фиговинку переместить туда"
Я умею делать выводы, например, из работоспособности вышеприведенного

#pas
...
procedure MyCallback(pCtx:pointer; pUserData:pointer); stdcall;
var pCls:THiImageLoader;
begin
pCls := THiImageLoader(pUserData);
SetEvent(pCls.hOK);
// и больше НИЧЕГО!!!
end;
procedure THiImageLoader._work_doLoad;
...
FImgCtx.SelectChanges(IMGCHG_COMPLETE,0,1);
WaitForSingleObject(hOK,INFINITE);
...
Где вместо многоточий стоят проверенные минимальные коды, даже если к рисованию они не имеют отношения.
И проверять работоспособность по-шагам.
карма: 9

0
Разработчик
Ответов: 26151
Рейтинг: 2127
#26: 2008-01-20 13:49:11 ЛС | профиль | цитата
Galkov, я сделал, как ты написал и добавил debug для проверки


#pas
...
procedure MyCallback(pCtx:pointer; pUserData:pointer); stdcall;
var pCls:THiImageLoader;
begin
pCls := THiImageLoader(pUserData);
SetEvent(pCls.hOK);
// и больше НИЧЕГО!!!
end;
procedure THiImageLoader._work_doLoad;
...
FImgCtx.SelectChanges(IMGCHG_COMPLETE,0,1);
WaitForSingleObject(hOK,INFINITE);
_debug('ok');
...
Ну так вот, до debug'a он не дошло, а повисло, начисто

карма: 22

0
Ответов: 2125
Рейтинг: 159
#27: 2008-01-20 17:54:21 ЛС | профиль | цитата
Galkov писал(а):
5) Обязательность обработки очереди сообщений - сомнительна.

Galkov писал(а):
Какие нахрен сообщения, которые якобы шлются, для контекста

Ну вы тут и понаписали Читать устал.
Сообщения посылает IE, сам себе, когда загрузка закончена, очевидно для синхронизации с основным thread, поскольку загрузка картинки ведётся в другом, чаще всего читая из сокета, а не файла.
А раз уж мы IE используем, приходится считаться с его методами работы.
------------ Дoбавленo:

nesco писал(а):
Ну так вот, до debug'a он не дошло, а повисло, начисто

И не дойдёт. Callback вызывается из обработчика сообщений окна IE.
карма: 1

0
Разработчик
Ответов: 26151
Рейтинг: 2127
#28: 2008-01-20 18:07:51 ЛС | профиль | цитата
tsdima писал(а):
И не дойдёт. Callback вызывается из обработчика сообщений окна IE
А это означает, что мы должны прерываться для чтения посланного нам сообщения, орабатывая очередь сообщений, правильно я понял?

------------ Дoбавленo:


Выложил новый релиз. Прекрасно отрабытывает все режимы отрисовки, и в мульти-режиме, и в сингл-режиме. Примеры внизу, кому надо.

P.S.
Добавлено два свойства координат для начальной установки.
Добавлена возможность по пустому имени выводить считанный буфер из памяти.
карма: 22

0
Ответов: 9906
Рейтинг: 351
#29: 2008-01-20 21:56:08 ЛС | профиль | цитата
tsdima писал(а):
Ну вы тут и понаписали Читать устал

Да лучше бы написал...
Честное слово, написанное тобой понять трудно, даже уже зная происходящее
Какой-то IE посылает сообщения самому себе... понимай как хочешь (у меня - напряжение вызвало)
А фактический материал (шпионские наблюдения) такой:
  • после FImgCtx := CreateComObject появляется еще один поток, и невидимое окно в основном потоке с классом "Internet Explorer_Hidden" и нулевыми размерами
  • после FImgCtx.Load появляется еще один поток
    Далее, действительно, если появилось окно, известное этому COM-у (он сам его и сделал), то ожидать от этой собаки -- можно чего хочешь...
    С этим понятно.
    Имелось ввиду, именно понятно, а не получение инструкций по применению чего-то

    tsdima, но ты позабыл открыть секрет использования event-а при ожидании с нулевым таймаутом
    Это тем более актуально, что без обработки очереди ничего не дождешься

    И второе, не подскажешь-таки, где про сей COM хоть чего-то прочитать можно


    ------------ Дoбавленo:

    nesco писал(а):
    Добавлена возможность по пустому имени выводить считанный буфер из памяти

    Чего

    писал(а):
    if Assigned(FImgCtx) then free_and_nil(FImgCtx);

    Офигеть

    Устал я спрашивать, почему не работает Bitmap.Canvas.Handle
    У меня работает и этот хэндл, почему-то
    
    Add(MainForm,7649955,35,63)
    {
    Left=10
    Top=10
    Position=1
    link(onCreate,12423105:doData,[])
    }
    Add(InlineCode,13555273,154,98)
    {
    WorkPoints=#6:doLoad|9:doStretch|
    DataPoints=#8:FileName|6:Bitmap|
    Code=#15:unit HiAsmUnit;|0:|9:interface|0:|56:uses Windows,Messages,Share,Debug,ActiveX,KOLComObj,KOL;|0:|4:type|32: IImgCtx = interface(IUnknown)|48: ['{3050f3d7-98b5-11cf-bb82-00aa00bdce0b}']|40: // Initialization/Download methods|68: function Load(pszUrl:PWChar; dwFlags:DWORD): HResult; stdcall;|93: function SelectChanges(ulChgOn:DWORD; ulChgOff:DWORD; fSignal:DWORD): HResult; stdcall;|83: function SetCallback(pCallback:pointer; pUserData:pointer): HResult; stdcall;|44: function Disconnect: HResult; stdcall;|0:|22: // Query methods|95: function GetUpdateRects(prc:PRect; var prcImg:TRect; var pcrc:integer): HResult; stdcall;|104: function GetStateInfo(var pulState:DWORD; var pSize:TSize; fClearChanges:DWORD): HResult; stdcall;|64: function GetPalette(var phpal:HPalette): HResult; stdcall;|0:|26: // Rendering methods|69: function Draw(_hdc:HDC; var prcBounds:TRect): HResult; stdcall;|107: function Tile(_hdc:HDC; var pptBackOrg:TPoint; var prcClip:TRect; var psize:TSize): HResult; stdcall;|120: function StretchBlt(_hdc:HDC; dstX,dstY,dstXE,dstYE,srcX,srcY,srcXE,srcYE:integer; dwROP:DWORD): HResult; stdcall;|5: end;|0:|28: THiAsmClass = class(TDebug)|10: private|21: FImgCtx:IImgCtx;|17: hOK:THandle;|16: sg:boolean;|14: sz:TSize;|9: public|31: FileName,Bitmap:THI_Event;|47: procedure doLoad(var Data:TData;idx:word);|50: procedure doStretch(var Data:TData;idx:word);|5: end;|0:|14:implementation|0:|5:const|31: IMGCHG_SIZE = $0001;|31: IMGCHG_VIEW = $0002;|31: IMGCHG_COMPLETE = $0004;|31: IMGCHG_ANIMATE = $0008;|31: IMGCHG_MASK = $000F;|0:|35: IMGLOAD_NOTLOADED = $00100000;|35: IMGLOAD_LOADING = $00200000;|35: IMGLOAD_STOPPED = $00400000;|35: IMGLOAD_ERROR = $00800000;|35: IMGLOAD_COMPLETE = $01000000;|35: IMGLOAD_MASK = $01F00000;|0:|35: IMGBITS_NONE = $02000000;|35: IMGBITS_PARTIAL = $04000000;|35: IMGBITS_TOTAL = $08000000;|35: IMGBITS_MASK = $0E000000;|0:|35: IMGANIM_ANIMATED = $10000000;|35: IMGANIM_MASK = $10000000;|0:|35: IMGTRANS_OPAQUE = $20000000;|35: IMGTRANS_MASK = $20000000;|0:|35: DWN_COLORMODE = $0000003F;|35: DWN_DOWNLOADONLY = $00000040;|35: DWN_FORCEDITHER = $00000080;|35: DWN_RAWIMAGE = $00000100;|0:|66: CLSID_IImgCtx:TGUID = '{3050f3d6-98b5-11cf-bb82-00aa00bdce0b}';|66: IID_IImgCtx:TGUID = '{3050f3d7-98b5-11cf-bb82-00aa00bdce0b}';|0:|0:|22:{ StringToWideString }|73:function StringToWideString(const s: String; codePage: Word): WideString;|17:var l: integer;|5:begin|16: Result := '';|23: if s = '' then exit;|80: l := MultiByteToWideChar(codePage, MB_PRECOMPOSED, PChar(@s[1]), -1, nil, 0);|28: SetLength(Result, l - 1);|23: if l <= 1 then exit;|93: MultiByteToWideChar(CodePage, MB_PRECOMPOSED, PChar(@s[1]), -1, PWideChar(@Result[1]), l);|4:end;|0:|63:procedure MyCallback(pCtx:pointer; pUserData:pointer); stdcall;|5:begin|37: THiAsmClass(pUserData).sg := true;|4:end;|0:|32:procedure THiAsmClass.doStretch;|41:var dt:TData; DC:hdc; R:TRect; Wnd:dword;|5:begin|23: if not sg then exit;|31: dt := ReadData(Data,Bitmap);|46: if _isBitmap(dt) then with ToBitmap(dt)^ do|80: FImgCtx.StretchBlt(Canvas.Handle,0,0,Width,Height,0,0,sz.cx,sz.cy,SRCCOPY)|14: else begin |28: Wnd := ToInteger(dt); |28: if Wnd = 0 then exit; |29: DC := GetWindowDC(Wnd);|27: GetWindowRect(Wnd,R);|87: FImgCtx.StretchBlt(DC,0,0,R.right-R.Left,R.bottom-R.Top,0,0,sz.cx,sz.cy,SRCCOPY);|24: ReleaseDC(Wnd,DC);|10: end; |3: |4:end;|0:|29:procedure THiAsmClass.doLoad;|25:var s:string; stat:dword;|5:begin|34: s := ReadString(Data,FileName);|34: if not FileExists(s) then exit;|56: FImgCtx := CreateComObject(CLSID_IImgCtx) as IImgCtx;|52: FImgCtx.Load(PWChar(StringToWideString(s,3)), 0);|56: FImgCtx.SetCallback(@MyCallback, pointer(Self)); |46: FImgCtx.SelectChanges(IMGCHG_COMPLETE,0,1);|15: sg := false;|49: while not sg do Applet.ProcessPendingMessages;|37: FImgCtx.GetStateInfo(stat, sz, 0);|3: |4:end;|0:|14:initialization|20: CoInitialize(nil);|12:finalization|17: CoUninitialize;|4:end.|
    link(Bitmap,10276675:Bitmap,[])
    }
    Add(DoData,12423105,91,98)
    {
    Data=String(D:\HiAsm\Int\logo.jpg)
    link(onEventData,13555273:doLoad,[])
    }
    Add(PaintBox,10276675,161,42)
    {
    Left=220
    Top=145
    Align=5
    link(onBeforeDraw,13555273:doStretch,[(205,48)(205,86)(142,86)(142,111)])
    }
    И рисование на контексте почему-то тоже "привязывается"
    
    Add(MainForm,7649955,35,63)
    {
    Left=10
    Top=10
    Position=1
    Point(onPaint)
    link(onCreate,12423105:doData,[])
    link(onPaint,4633675:doStretch,[])
    }
    Add(InlineCode,4633675,154,98)
    {
    WorkPoints=#6:doLoad|9:doStretch|
    DataPoints=#8:FileName|6:Bitmap|
    Code=#15:unit HiAsmUnit;|0:|9:interface|0:|56:uses Windows,Messages,Share,Debug,ActiveX,KOLComObj,KOL;|0:|4:type|32: IImgCtx = interface(IUnknown)|48: ['{3050f3d7-98b5-11cf-bb82-00aa00bdce0b}']|40: // Initialization/Download methods|68: function Load(pszUrl:PWChar; dwFlags:DWORD): HResult; stdcall;|93: function SelectChanges(ulChgOn:DWORD; ulChgOff:DWORD; fSignal:DWORD): HResult; stdcall;|83: function SetCallback(pCallback:pointer; pUserData:pointer): HResult; stdcall;|44: function Disconnect: HResult; stdcall;|0:|22: // Query methods|95: function GetUpdateRects(prc:PRect; var prcImg:TRect; var pcrc:integer): HResult; stdcall;|104: function GetStateInfo(var pulState:DWORD; var pSize:TSize; fClearChanges:DWORD): HResult; stdcall;|64: function GetPalette(var phpal:HPalette): HResult; stdcall;|0:|26: // Rendering methods|69: function Draw(_hdc:HDC; var prcBounds:TRect): HResult; stdcall;|107: function Tile(_hdc:HDC; var pptBackOrg:TPoint; var prcClip:TRect; var psize:TSize): HResult; stdcall;|120: function StretchBlt(_hdc:HDC; dstX,dstY,dstXE,dstYE,srcX,srcY,srcXE,srcYE:integer; dwROP:DWORD): HResult; stdcall;|5: end;|0:|28: THiAsmClass = class(TDebug)|10: private|21: FImgCtx:IImgCtx;|17: hOK:THandle;|16: sg:boolean;|14: sz:TSize;|9: public|31: FileName,Bitmap:THI_Event;|47: procedure doLoad(var Data:TData;idx:word);|50: procedure doStretch(var Data:TData;idx:word);|5: end;|0:|14:implementation|0:|5:const|31: IMGCHG_SIZE = $0001;|31: IMGCHG_VIEW = $0002;|31: IMGCHG_COMPLETE = $0004;|31: IMGCHG_ANIMATE = $0008;|31: IMGCHG_MASK = $000F;|0:|35: IMGLOAD_NOTLOADED = $00100000;|35: IMGLOAD_LOADING = $00200000;|35: IMGLOAD_STOPPED = $00400000;|35: IMGLOAD_ERROR = $00800000;|35: IMGLOAD_COMPLETE = $01000000;|35: IMGLOAD_MASK = $01F00000;|0:|35: IMGBITS_NONE = $02000000;|35: IMGBITS_PARTIAL = $04000000;|35: IMGBITS_TOTAL = $08000000;|35: IMGBITS_MASK = $0E000000;|0:|35: IMGANIM_ANIMATED = $10000000;|35: IMGANIM_MASK = $10000000;|0:|35: IMGTRANS_OPAQUE = $20000000;|35: IMGTRANS_MASK = $20000000;|0:|35: DWN_COLORMODE = $0000003F;|35: DWN_DOWNLOADONLY = $00000040;|35: DWN_FORCEDITHER = $00000080;|35: DWN_RAWIMAGE = $00000100;|0:|66: CLSID_IImgCtx:TGUID = '{3050f3d6-98b5-11cf-bb82-00aa00bdce0b}';|66: IID_IImgCtx:TGUID = '{3050f3d7-98b5-11cf-bb82-00aa00bdce0b}';|0:|0:|22:{ StringToWideString }|73:function StringToWideString(const s: String; codePage: Word): WideString;|17:var l: integer;|5:begin|16: Result := '';|23: if s = '' then exit;|80: l := MultiByteToWideChar(codePage, MB_PRECOMPOSED, PChar(@s[1]), -1, nil, 0);|28: SetLength(Result, l - 1);|23: if l <= 1 then exit;|93: MultiByteToWideChar(CodePage, MB_PRECOMPOSED, PChar(@s[1]), -1, PWideChar(@Result[1]), l);|4:end;|0:|63:procedure MyCallback(pCtx:pointer; pUserData:pointer); stdcall;|5:begin|37: THiAsmClass(pUserData).sg := true;|4:end;|0:|32:procedure THiAsmClass.doStretch;|41:var dt:TData; DC:hdc; R:TRect; Wnd:dword;|5:begin|23: if not sg then exit;|31: dt := ReadData(Data,Bitmap);|46: if _isBitmap(dt) then with ToBitmap(dt)^ do|80: FImgCtx.StretchBlt(Canvas.Handle,0,0,Width,Height,0,0,sz.cx,sz.cy,SRCCOPY)|14: else begin |28: Wnd := ToInteger(dt); |28: if Wnd = 0 then exit; |29: DC := GetWindowDC(Wnd);|27: GetWindowRect(Wnd,R);|87: FImgCtx.StretchBlt(DC,0,0,R.right-R.Left,R.bottom-R.Top,0,0,sz.cx,sz.cy,SRCCOPY);|24: ReleaseDC(Wnd,DC);|10: end; |3: |4:end;|0:|29:procedure THiAsmClass.doLoad;|25:var s:string; stat:dword;|5:begin|34: s := ReadString(Data,FileName);|34: if not FileExists(s) then exit;|56: FImgCtx := CreateComObject(CLSID_IImgCtx) as IImgCtx;|52: FImgCtx.Load(PWChar(StringToWideString(s,3)), 0);|56: FImgCtx.SetCallback(@MyCallback, pointer(Self)); |46: FImgCtx.SelectChanges(IMGCHG_COMPLETE,0,1);|15: sg := false;|49: while not sg do Applet.ProcessPendingMessages;|37: FImgCtx.GetStateInfo(stat, sz, 0);|3: |4:end;|0:|14:initialization|20: CoInitialize(nil);|12:finalization|17: CoUninitialize;|4:end.|
    link(Bitmap,7649955:Handle,[(167,89)(80,89)(80,127)(41,127)])
    }
    Add(DoData,12423105,98,98)
    {
    Data=String(D:\HiAsm\Int\logo.jpg)
    link(onEventData,4633675:doLoad,[])
    }
    Вынудил таки, блин, хоть и на скорую руку
  • карма: 9

    0
    Разработчик
    Ответов: 26151
    Рейтинг: 2127
    #30: 2008-01-20 22:02:01 ЛС | профиль | цитата
    Galkov писал(а):
    Чего
    , а чего тебе непонятно, если нету имени файла, то читаем то, что с чем связаны, те буфер. Чего не нравится-то, работает прекрасно. Примере глянь, там все есть.

    Galkov писал(а):
    Офигеть
    , а причем тут офигеть, в одном коде я видел очистку такого класса, так там стояло присвоение nil. К тому же, у нас есть чужой поток.
    ------------ Дoбавленo:

    Galkov, текст не читается (пустоты левые внутри), кинь файлами, пожалуйста.
    карма: 22

    0
    Сообщение
    ...
    Прикрепленные файлы
    (файлы не залиты)