Текущий архив: 2004.03.09;
Скачать: CL | DM;
Вниз
Нехватка ресурсов под win98 Найти похожие ветки
← →
Сергей Петров (2004-02-27 01:26) [0]Прилагаемый код под Windows98 либо вешает машину, либо приводит ее в состояние, когда все свободные ресурсы съедены. В чем дело и как избавиться? Это код form1.create. Вешается где-то на третьем-четвертом loadfromfile. Под XP все ок.
clientwidth := 818;
clientheight := 600;
application.OnActivate := Form1.FormActivate;
application.OnDeActivate := Form1.FormDeActivate;
thumb := tbitmap.create;
formbg := tbitmap.create;
formbg.LoadFromFile(extractfilepath(application.exename)+"\res\bg.bmp");
formbg.Dormant;
formbg.Freeimage;
mouseoff := tbitmap.create;
mouseoff2 := tbitmap.create;
mouseon := tbitmap.create;
mouseon2 := tbitmap.create;
mousesel := tbitmap.create;
mousesel2 := tbitmap.create;
fp := extractfilepath(application.exename);
mouseoff.loadfromfile(fp+"res\mouseoff.bmp");
mouseoff.TransparentMode := tmFixed;
mouseoff.TransparentColor := clWhite;
mouseoff.Transparent := true;
mouseon.loadfromfile(fp+"res\mouseon.bmp");
mouseon.TransparentMode := tmFixed;
mouseon.TransparentColor := clWhite;
mouseon.Transparent := true;
mousesel.loadfromfile(fp+"res\mousesel.bmp");
mousesel.TransparentMode := tmFixed;
mousesel.TransparentColor := clWhite;
mousesel.Transparent := true;
mouseon2.loadfromfile(fp+"res\mouseon2.bmp");
mouseon2.TransparentColor := clWhite;
mouseon2.TransparentMode := tmFixed;
mouseon2.Transparent := true;
mouseoff2.loadfromfile(fp+"res\mouseoff2.bmp");
mouseoff2.TransparentColor := clWhite;
mouseoff2.TransparentMode := tmFixed;
mouseoff2.Transparent := true;
mousesel2.loadfromfile(fp+"res\mousesel2.bmp");
mousesel2.TransparentColor := clWhite;
mousesel2.TransparentMode := tmFixed;
mousesel2.Transparent := true;
← →
Defunct (2004-02-27 01:51) [1]Я Вам вчера, кажется, уже говорил, что в этой ситуации прийдется смириться. Глюк ОС. Ищите другие способы посторения прозрачности. Напишите собственную реализацию Transparent.
например:
MyTransparentColor := clRed;
if Bmp.canvas.pixels[x,y] = MyTransparentColor Then Bmp.canvas.pixels[x,y] := _цвет_точки_с_формы_
У Вас ведь там только однократное использование свойства Transparent, при заливке.
← →
Сергей Петров (2004-02-27 02:01) [2]Да хрен с ним, с transparent. Ничего не работает и без него. Даже если оставить только loadfromfile. Съедает все ресурсы.
← →
Defunct (2004-02-27 02:14) [3]А если поставить на форму несколько image и загрузить в них заранее все картинки?
Кстати, а без отладчика программа работает? Отладчик Delphi жрет около 50% сист. ресурсов под W95/98
← →
Сергей Петров (2004-02-27 02:19) [4]А я теперь уже ничего не понимаю. Вроде заработало. С прозрачностью проблемы, конечно, остались, но это другой вопрос.
Фишка только в том, что ровно десять минут назад тот же самый код вешал систему. А теперь вроде ничего...
Запускал утилиту, которая показывает, сколько ресурсов свободно, так на указанном коде даже не шелохнется! А десять минут назад количество свободных ресурсов сбрасывал до 0.
В общем, не понятно совершенно ничего.
← →
Сергей Петров (2004-02-27 02:21) [5]Да уж и сразу насчет прозрачности...
Есть у меня TPanel. Надо, чтобы под ней была видна форма. Как это сделать? От TPanel отказаться вряд ли получится. Разве что заменить на что-то аналогичное...
← →
Defunct (2004-02-27 02:40) [6]>А я теперь уже ничего не понимаю. Вроде заработало. С прозрачностью проблемы, конечно, остались, но это другой вопрос.
> Фишка только в том, что ровно десять минут назад тот же самый код вешал систему. А теперь вроде ничего...
Так ясное дело 10 минут назад у Вас была запущена программа "А" которая жрала X% сист ресурсов, и на вашу программу ресурсов не оставалось, а сейчас Вы закрыли программу "A" освободили X% сист. ресурсов и на вашу программу уже ресурсов хватает.
Еще раз повторюсь: ПРОБЛЕМА НЕ В ВАШЕЙ ПРОГРАММЕ, ПРОБЛЕМА В КРИВОЙ W95/98.
Как вы думаете зачем некоторые программы под Win95 перед запуском просят закрыть все приложения? Ибо знают, что иначе им не хватит ресурсов.
> Да уж и сразу насчет прозрачности...
Есть у меня TPanel. Надо, чтобы под ней была видна форма. Как это сделать? От TPanel отказаться вряд ли получится. Разве что заменить на что-то аналогичное...
Я для такой цели создал себе наследника от TPanel -> TSkinnedPanel с TPicture внутри и перекрытым методом перерисовки Paint, который просто скопировал из компонента TImage.
Ну а если свой компонент писать не хочется, можно TPanel заменить на TImage.
← →
Сергей Петров (2004-02-27 02:43) [7]Так не было никаких программ! Я тестирую на Win98, установленном под Virtual PC.
Ха! Вот только что перезагрузил ее, и на абсолютно чистой запустил .exe. Зависло намертво.
С ума сойти...
Я не спорю, что Win9x кривые. Но я уверен, что возможно написать так, что будет и у формы бекграунд и еще пару битмапов загружено. Только не понимаю как..
← →
Defunct (2004-02-27 02:56) [8]> Так не было никаких программ! Я тестирую на Win98, установленном под Virtual PC.
может в этом и ответ? хотя VMWare вроде нормально эмулирует.
> Я не спорю, что Win9x кривые. Но я уверен, что возможно написать так, что будет и у формы бекграунд и еще пару битмапов загружено. Только не понимаю как..
А что там получилось если просто несколько Image создать и загнать в них все картинки?
Попробуйте в цикле создавать множество Bitmap (каждая по 1Mb), посмотрите когда программа вылетит:
While True Do With TBitmap.Create Do
Begin
Width := 1000;
Height := 1000;
End;
Может что-то с файлами не так, добавьте в config.sys строку
FILES = 200
Страницы: 1 вся ветка
Текущий архив: 2004.03.09;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.007 c