Форум: "Начинающим";
Текущий архив: 2005.11.06;
Скачать: [xml.tar.bz2];
ВнизВ Win98 проекты ведут себя весьма странно Найти похожие ветки
← →
norwikh (2005-10-06 14:50) [0]Упростил задачу до минимума: динамически создаются ~10 TImage. В них загружаются изображения из файлов. Под XP все нормально, под 98-ой все глохнет - единственно активным элементом является курсор мыши. Система никак не реагирует. Писал одно и тоже как Делфи (6), так и на Билдере (6).
Если невнятно, извините - не сплю давно :)
Я в растеряности.
← →
Германн © (2005-10-06 14:53) [1]В 9х очень мало ресурсов GDI. Уменьшай количество картинок.
← →
umbra © (2005-10-06 14:53) [2]Запускается откомпилированная прога или проект из делфи?
← →
umbra © (2005-10-06 14:55) [3]2 Германн ©
ну уж 10 картинок то можно одновременно открыть
← →
norwikh (2005-10-06 14:57) [4]Так и знал (но не хотел верить), что проблема в кол-ве объектов...
Совсем не решается?
← →
Del_programmer © (2005-10-06 14:57) [5]если проект, то под 98 динамика будет глохнуть...
← →
Anatoly Podgoretsky © (2005-10-06 14:58) [6]Упрости до миниму - создай только один объект, гадом буду повиснет.
← →
Del_programmer © (2005-10-06 14:59) [7]Удалено модератором
← →
Игорь Шевченко © (2005-10-06 14:59) [8]В Win98 есть такой системный монитор, показывающий количество свободных ресурсов. Попробуй уменьшить количество TImage и посмотри, что этот монитор покажет.
← →
norwikh (2005-10-06 15:05) [9]> Запускается откомпилированная прога или проект из делфи?
Первое. Собирается под Искпёй, запускается под 98-ой (изврат, конечно).
Запускается откомпилированная прога или проект из делфи?
> В Win98 есть такой системный монитор, показывающий количество свободных
> ресурсов. Попробуй уменьшить количество TImage и посмотри, что этот
> монитор покажет.
Система глухая ко всему, кроме мыши. Думаешь, создается больше чем надо копий TImage?
← →
norwikh (2005-10-06 15:10) [10]Хоть на асме все пиши...
Спасибо, други.
← →
umbra © (2005-10-06 15:18) [11]
> Первое. Собирается под Искпёй, запускается под 98-ой (изврат,
> конечно).
>
Скорее всего, в этом все и дело. Все таки множество функций имеют разные варианты для 98 и ХР. Если собрано на 98, то на ХР скорее всего будет работать также, а наоборот вовсе не обязательно. В общем надо собирать на 98
← →
Anatoly Podgoretsky © (2005-10-06 15:20) [12]Веселый разговор, особенно нравится насчет сборки, получается, что программу надо компилировать под каждой версией ОС и поставлять все варианты. Хоть день сегодня пройдет весело.
← →
umbra © (2005-10-06 15:23) [13]
> что программу надо компилировать под каждой версией ОС и
> поставлять все варианты
не для каждой, а для минимальной. разве Вам не случалось видеть программы, не работающие на 98, но прекрасно работающие на ХР?
← →
Amoeba © (2005-10-06 15:29) [14]
> umbra © (06.10.05 15:23) [13]
>
> > что программу надо компилировать под каждой версией ОС
> и
> > поставлять все варианты
>
>
> не для каждой, а для минимальной. разве Вам не случалось
> видеть программы, не работающие на 98, но прекрасно работающие
> на ХР?
Компилятору по барабану, под какой WIN от компилирует. Просто все дело в исходном коде.
← →
Anatoly Podgoretsky © (2005-10-06 15:47) [15]umbra © (06.10.05 15:23) [13]
Мне приходилось видеть откомпилированые на ХР, запускаемые на ХР и в тоже время нерабочии. Достаточно почитать форум в любой день. Но мне встречались и люди верящие в чудо, что стоит только откомпилировать на 98, как все заработает.
← →
Sapersky (2005-10-06 17:34) [16]динамически создаются ~10 TImage. В них загружаются изображения из файлов
Как именно создаются (код)? Какого размера и типа (bmp, jpg) картинки?
← →
norwikh (2005-10-07 12:58) [17]
> Как именно создаются (код)? Какого размера и типа (bmp,
> jpg) картинки?
В файле flist.txt нах. список файлов (*.bmp), которые надо отобразить на форме в новосозданных TImage.
Delphi:
procedure TForm1.FormCreate(Sender: TObject);
var
files: TStringList;
imgs: array [0..69] of TImage;
i: integer;
begin
files := TStringList.Create;
files.LoadFromFile(".\flist.txt");
for i := 0 to 9 do
begin
imgs[i] := TImage.Create(Form1);
imgs[i].Top := i * 3;
imgs[i].Left := i * 3;
imgs[i].Picture.LoadFromFile(".\1\"+files.Strings[i]);
end;
end;
Builder:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
TStringList *files;
files = new TStringList;
files->LoadFromFile(".\\flist.txt");
TImage *imgs[70];
for(int i = 0; i < 9; i++)
{
imgs[i] = new TImage(Form1);
imgs[i]->Parent = Form1;
imgs[i]->Top = i * 3;
imgs[i]->Left = i * 3;
imgs[i]->Picture->LoadFromFile(".\\1\\"+files->Strings[i]);
}
}
Элементарщина ведь!
Общий размер файлов - почти два метра полноцветного битмапа.
← →
umbra © (2005-10-07 13:32) [18]Anatoly Podgoretsky © (06.10.05 15:47) [15]
насколько я понял автора, на ХР программа как раз работает нормально. и хотя компилятору все равно, где компилировать, но выполняет программу не компилятор, а операционная система
← →
kot andrei © (2005-10-07 13:33) [19]files.LoadFromFile(".\flist.txt");
особо не вчитывался , но что там за точка перед косой?
да и надежней было бы по моему extractfiledir(paramstr(0))+"\flist.txt")
← →
norwikh (2005-10-07 13:52) [20]
> но что там за точка перед косой?
Текущая директория. На самом деле без разницы, какой путь использовать - относительный или полный.
Но проблема, kot andrei, не в этом.
Хотелось бы узнать, есть ли более "экономный" способ загрузить много изображений на форму? Ведь это делается и довольно успешно. Неужто мне экзешник расковыривать (есть пример) и выяснять, как там картинки загружаются?
← →
Sapersky (2005-10-07 14:03) [21]Более экономный способ - выкинуть нафиг TImage и использовать TBitmap. Неужели так трудно нарисовать их в OnPaint?
Что касается TImage - видимо, при создании какие-то свойства не назначены (Parent в дельфийской версии?) или назначены не так. А может, от наложения 10 штук друг на друга (imgs[i].Top := i * 3; imgs[i].Left := i * 3) им худо становится.
← →
umbra © (2005-10-07 14:10) [22]
> imgs: array [0..69] of TImage;
А после выхода из FormCreate где оказываются твои картинки? где-то в неопределенном месте, массив то у тебя локальный для процедуры
← →
norwikh (2005-10-07 14:23) [23]
> Более экономный способ - выкинуть нафиг TImage и использовать
> TBitmap. Неужели так трудно нарисовать их в OnPaint?
Вот это уже похоже на дельный совет, попробую.
> Что касается TImage - видимо, при создании какие-то свойства
> не назначены (Parent в дельфийской версии?) или назначены
> не так. А может, от наложения 10 штук друг на друга (imgs[i].
> Top := i * 3; imgs[i].Left := i * 3) им худо становится.
В делфях не получалось родителя указать, вот я забил на это. Впрочем, и без этого все прекрасно показывалось (под XP), а под 98-ой - зависа-а-аем. :)
Даже если TImage будет создан не динамически, все равно винда виснет. Люди говорили, слишком много GDI объектов для 98-ой...
← →
Sapersky (2005-10-07 18:44) [24]А после выхода из FormCreate где оказываются твои картинки? где-то в неопределенном месте, массив то у тебя локальный для процедуры
Они добавляются к списку "детей" формы. Вот StringList - тот и правда теряется.
И TBitmap"ы потеряются, т.к. они не являются компонентами, и уничтожать их нужно вручную.
← →
SMATMP © (2005-10-11 19:10) [25]Ув. norwikh! Не считаю себя профессионалом, но всё-таки помогу, поскольку об этом просто в хелпе сказано. Сходи по F1 на метод Create и ты сам всё поймешь. А ни количество TImage, ни требование (вполне обоснованное) по их уничтожению тут ни при чём. У меня была возможность ради интереса проверить то что ты хочешь сделать даже на 100-м пне. Ну занято это не долю секунда, а может быть полторы (картинки правда небольшие были, по 50 кБ). Но вот ни количество TImage, ни система (на 100-м пне была W98) тут точно не при чем. А вот
imgs[i]->Top = i * 3;
imgs[i]->Left = i * 3;
надо будет скорее всего поправить. Что-то здесь не так.
Всех благ.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2005.11.06;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.04 c