Здравствуйте, Sergei I. Gorelkin, Вы писали:
SIG>TJpegImage является наследником TGraphic, значит, он должен уметь напрямую рисоваться в прямоугольник заданного размера с помощью метода TCanvas.StretchDraw. Т.е. не преобразовывать в битмап, а рисовать на канве пустого битмапа.
А рисовать-то напрямую что? Внутреннее представление jpeg не готово для отрисовки. Преобразовывать в битмап по любому придется. Собственно вот реализация:
procedure TJPEGImage.Draw(ACanvas: TCanvas; const Rect: TRect);
begin
ACanvas.StretchDraw(Rect, Bitmap);
end;
Битмап создается по запросу и кешируется для последующих манипуляций.
Здравствуйте, squid, Вы писали:
S>ну есть и кривые методы обхода кривого кода
Понятное дело, что есть Проблема в том, что они кривые
S>типа добавления переменной-флага в цикл для выхода из него. происходит какое-то специфичное событие типа закрытия окна — присваиваешь ей true и все ок. относительно конечно.
Здравствуйте, Mr.Cat, Вы писали:
H>>Cпагетти я люблю в тарелке, но не в коде MC>Ну дык с рекомендуемым в мсдн BackgroundWorker будет примерно то же самое.
Здравствуйте, hattab, Вы писали: H>Хочешь чтоб я вывод сделал?
Ну сделай. Вероятно, ты знаешь принципиально иной способ нормально прервать поток, кроме как предложить ему прерваться самому.
Здравствуйте, Mr.Cat, Вы писали:
MC> H>Хочешь чтоб я вывод сделал?
MC> Ну сделай. Вероятно, ты знаешь принципиально иной способ нормально прервать поток, кроме как предложить ему прерваться самому.
Это был риторический вопрос. Впрочем... Я же не о чеках флажков говорю. С воркером получается тоже, да не то. Состояние инкапсулируется (пусть даже частично), есть возможность параллельно запустить хоть два, хоть десять... Ну?
Здравствуйте, BlackEric, Вы писали:
BE>Я прифигел. Честно. Хотя проблема подозреваю в том, что .Net обрабатывает все через GDI+, a Delphi использует свои классы. И если delphi версию переписать через GDI+ то производительность по идее должна сравняться. Но пока некогда разбираться...
GDI+ это тормозная, глючная поделка, которую вставили во фреймворк за неимением ничего лучшего. Не проходит и месяца, что бы там баг не нашелся
Здравствуйте, Ikemefula, Вы писали:
I>Здравствуйте, BlackEric, Вы писали:
BE>>Я прифигел. Честно. Хотя проблема подозреваю в том, что .Net обрабатывает все через GDI+, a Delphi использует свои классы. И если delphi версию переписать через GDI+ то производительность по идее должна сравняться. Но пока некогда разбираться...
I>GDI+ это тормозная, глючная поделка, которую вставили во фреймворк за неимением ничего лучшего. Не проходит и месяца, что бы там баг не нашелся
Здравствуйте, BlackEric, Вы писали:
BE>>>Нужно тянуть за собой SysUtils. Не всегда хорошо. NW>>Не могу вспомнить\придумать случая когда это было бы не хорошо. NW>>Буду благодарен если просвятите. BE>Ну практически в каждой фирме есть такое понятите как стандарты кодирования. А вот как и начем они основаны это уже хз.
Вам запрещали явно использовать SysUtils? И все юниты что его юзают? И все юниты что юзают те юниты что его юзают?
Не смешите меня.
BE>>>Нужно тянуть за собой SysUtils. Не всегда хорошо.
Когда это не хорошо?
Если сказали чиста для отмазки, можете не отвечать.
Здравствуйте, hattab, Вы писали:
NW>>> Delphi-Style forever BE>>В данном случае допустимо, т.к. на общую производительность заметного влияния не оказывает. Нужно лишь чтобы программа не производила впечатление полностью повисшей.
H>А она именно такое впечатление производить и будет. Попробуй в течении тех 4 минут нажать на кнопку закрытия окна. Кнопка нажимается? Нажимается. А вот окно закроется только после завершения цикла.
В Delphi-Style есть паттерн для решения этой проблемы
Здравствуйте, Nonmanual Worker, Вы писали:
NW> H>А она именно такое впечатление производить и будет. Попробуй в течении тех 4 минут нажать на кнопку закрытия окна. Кнопка нажимается? Нажимается. А вот окно закроется только после завершения цикла.
NW> В Delphi-Style есть паттерн для решения этой проблемы
Здравствуйте, Nonmanual Worker, Вы писали:
NW> NW>> В Delphi-Style есть паттерн для решения этой проблемы
NW> H>Озвучишь?
NW> оффтоп: NW> серьезно нужно озвучивать? NW> Я думаю этот "паттерн" известен всем, чей первый рабочий язык программирования был Delphi.
Здравствуйте, hattab, Вы писали:
NW>> H>А она именно такое впечатление производить и будет. Попробуй в течении тех 4 минут нажать на кнопку закрытия окна. Кнопка нажимается? Нажимается. А вот окно закроется только после завершения цикла. NW>> В Delphi-Style есть паттерн для решения этой проблемы H>Озвучишь?
Озвучиваю (прошу обратить внимание что слово "паттерн" используется с иронией):
private
FNeedClode, FProcessing: Boolean;
procedure TForm1.Button1Click(Sender: TObject);
begin
FNeedClose := False;
// TODO дизаблим кнопки и контролы
FProcessing := True;
try
while True do
begin
if FNeedClose then
begin
if MessageDlg('Close?', mtConfirmation, mbYesNo, 0) = mrYes then
Break
else
FNeedClose := False;
end;
// TODO что-то делаем....
Application.ProcessMessages;
Sleep(42);
end;
finally
FProcessing := False;
// TODO енаблим кнопки и контролыend;
if FNeedClose then
Close;
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if FProcessing then
begin
FNeedClose := True;
CanClose := False;
end
else
CanClose := True;
end;
BE>>В .Net я так понимаю хорошим тоном является вынесение подобных операций в отдельный поток?
H>Это везде хорошим тоном является.
Кстати. Недавно пришлось наваять небольшую штуку на j2me. Так там сановский эмулятор прямым текстом на некоторые инструкции(например, доступ к сети) матюкается: мол, КРАЙНЕ не рекомендуется исполнять данное действие в основном потоке, создайте другой.
И это действительно правильно. Приложения, которые подвешивают поток обработки событий, довольно сильно бесят.
Новости очень смешные. Зря вы не смотрите. Как будто за наркоманами подсматриваешь. Только тетка с погодой в завязке.
There is no such thing as a winnable war.