![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Слайд шоу не работает [D2005, XP]
Ramzes001 © (2008-03-31 11:09:00)Всем доброго времени суток!
Почти доделал программу для просмотра изображений и записи на них звука, остался последний штрих: слайд шоу. Но тут меня поджидал сюрприз: хотя звук воспроизводится, заголовок окна меняется, но сами картинки не показываются Там всегото две переменные в цикле, а всё равно глюк(((
Помогите кто чем может, я реально запутался((((( Уже кровавую оскомену набил от этого кода(((((((
with Image1.Picture do
begin
//Загрузка самой картинки
LoadFromFile(filepach + guber[prokrut]);
//Развёртование окна вовсю ширину, просто при загрузки картинки оно съежает вниз
WindowState := wsMaximized;
//Наполнение заголовка названием фотки
Caption:=guber[prokrut];
//Дальше идёт воспроизведение звука
GetMem(PCh,Length(filepach + guber[prokrut] + '.wav')+1);
StrPCopy(PCh,filepach + guber[prokrut] + '.wav');
PlaySound(PCh,0, SND_FILENAME or SND_SYNC);
//...............................................................
//Прибавление к счётчику
prokrut:=prokrut+1;
//Освобождаем память
FreeMem(PCh)
end;
end;
Заранее спасибо!
Сергей М. (2008-03-31 22:30:00) [1]
> я-сомоучка
Интересно, чему ты учишь сомов ?)
DDR (2008-03-31 22:30:00) [2]а мне 27 лет и сАмоучка :)
Удачи тебе!
Ramzes001 (2008-03-31 22:28:00) [3]Прошу прощения что так долго не писал, просто Нет у меня очень сильно логал. Всем спасибо всё работает просто надо было вставить Application.ProcessMessagesж и всё отлично работает, а вообще значит код был не убитый, протестую, идея была хорошей, ещё раз всем спасибо.
P.S. В своё оправдание хочу сказать, что мне 15 лет и я-сомоучка.
DDR (2008-03-31 22:23:00) [4]{RASkow}, это же типа толчок :) Человеку нужно понять, а он не может (или не хочет), ну.... я поделился своими мыслями. Может быть, может быть.... я чёта не догнал или лишнее состряпал.
{RASkov} (2008-03-31 22:09:00) [5]> [25] DDR (31.03.08 22:03)
> Вот тебе подсказка, но дальше ты сам!
Да уж... :) Наподсказывал тут не о чем...)
{RASkov} (2008-03-31 22:08:00) [6]> [16] Ramzes001 © (31.03.08 21:41)
> GetMem(PCh,Length(filepach + guber[prokrut] + '.wav')+1);
И зачем все эти манипуляции с памятью?
Примерно вот как выглядит твой цикл:
//Развёртывание окна во всю ширину, просто при загрузки картинки оно съезжает вниз
WindowState := wsMaximized;
for I :=megaguban to neve do
begin
with Image1.Picture do
begin
//Загрузка самой картинки
LoadFromFile(filepach + guber[i]);
//Наполнение заголовка названием фотки
Application.ProcessMessages;
Caption:=guber[i];
//Дальше идёт воспроизведение звука
PlaySound(PChar(filepach + guber[i] + '.wav'), 0, SND_FILENAME or SND_SYNC); //С именем не совсем понятно, но это тебе виднее
end;
end;
end;
DDR (2008-03-31 22:03:00) [7]чё-чё, а ребята правильно говорят: не страдать фигнёй, а включать голову и думать!
Я сам почти ТРИ (!) месяца писал аналогичную прогу, и пару раз переписывал ее "с нуля"!
Вот тебе подсказка, но дальше ты сам!
var
Form1: TForm1;
Nomer, i: integer; // для определения позиции списка
procedure TForm1.Next; //листание по списку
begin
Inc (Nomer);
if Nomer > (listbox1.Items.Count-1) then
Nomer := 0;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
next;
end;
.........
Дальше ты просто ОБЯЗАН думать сам!
Извини.
{RASkov} (2008-03-31 21:55:00) [8]> [22] Ramzes001 © (31.03.08 21:50)
никак :) Просто это нужно знать и учитывать)
{RASkov} (2008-03-31 21:54:00) [9]> [19] Ramzes001 © (31.03.08 21:48)
> {RASkov} Ну что значит "код бредовый"?
А то и значит...
Это значит, что в голове у тебя совсем не то что нужно :(
> Всё работает
Через каку все работает.... а тебя это к сожалению устраивает :(
> да и она грузится, но только последняя
Они все грузятся, но почитай про сообщение выше...
> Я не говорю, что это эталон, но ведь почти всё работает!
Лучше исправь все по нормальному :) Сергей вон тебе подсказал.... но не нужно бездумно вставлять в бредовый код спасительную строчку.
Ramzes001 (2008-03-31 21:50:00) [10]{RASkov}А как повысить этот приоритет?
{RASkov} (2008-03-31 21:50:00) [11]> Собственно это не ошибка и ничего страшного не произойдет,
> об этом позаботились более умные программисты в сеттерах
> свойств...
Черт, не докончил мысль...
..., но говорит о плохой подготовки "текущего"(в данном случае тебя) (горе)программиста...
Сергей М. (2008-03-31 21:50:00) [12]
> не следует изменять значение управляющей переменной внутри
> цикла
Да, не следует.
> Ситуация осталась неизменной
А что принципиально изменилось ?
Ничто.
Код как был неверным по логике, так им и остался, несмотря на то что отпущен один из "грехов".
Пробуй вставить в тело цикла вызов
Application.ProcessMessages
Ощути разницу.
Думай. Много.
Ramzes001 (2008-03-31 21:48:00) [13]{RASkov} Ну что значит "код бредовый"? Всё работает, кроме непосредственно згрузки самой картинки, да и она грузится, но только последняя и после конца выполнения цикла. Я не говорю, что это эталон, но ведь почти всё работает!
{RASkov} (2008-03-31 21:46:00) [14]> [16] Ramzes001 © (31.03.08 21:41)
Пипец :(
{RASkov} (2008-03-31 21:45:00) [15]> Объясни - зачем каждую итеррацию цикла выстовлять состояние формы?
Собственно это не ошибка и ничего страшного не произойдет, об этом позаботились более умные программисты в сеттерах свойств...
> но сами картинки не показываются
сообщение WM_PAINT мало того, что имеет низкий приоритет, но и обрабатывается только последнее из очереди...
Ramzes001 (2008-03-31 21:41:00) [16]Сергей, ошибка не в этом, насколько я понял, Вы имели ввиду то, что
не следует изменять значение управляющей переменной внутри цикла. Но изменив код на следующий:beginСитуация осталась неизменной, я уверен, что проблема при отображении картинки.
megaguban:= prokrut;
for I :=megaguban to neve do
begin
with Image1.Picture do
begin
//Загрузка самой картинки
LoadFromFile(filepach + guber[prokrut]);
//Развёртывание окна во всю ширину, просто при загрузки картинки оно съезжает вниз
WindowState := wsMaximized;
//Наполнение заголовка названием фотки
Caption:=guber[prokrut];
//Дальше идёт воспроизведение звука
GetMem(PCh,Length(filepach + guber[prokrut] + '.wav')+1);
StrPCopy(PCh,filepach + guber[prokrut] + '.wav');
PlaySound(PCh,0, SND_FILENAME or SND_SYNC);
//...............................................................
prokrut:=prokrut+1;
//Освобождаем память
FreeMem(PCh)
end;
end;
end;
{RASkov} (2008-03-31 21:23:00) [17]> [13] Ramzes001 © (31.03.08 21:16)
А вместо prokrut, в цикле, использовать переменную цикла(I) - не сообразил?
Впрочем это не отвечает на твой вопрос...
Объясни - зачем каждую итеррацию цикла выстовлять состояние формы?
Это тоже не ответ...
Код бредовый.... прямой ответ - не поможет :(
Сергей М. (2008-03-31 21:19:00) [18]http://pascal.guti.ru/fornext.html
Ramzes001 (2008-03-31 21:16:00) [19]А в чём глюк? С этим циклом работаю давно, таких проблем не было, объясните пожалуйста.
Сергей М. (2008-03-31 21:07:00) [20]
> Проблема в том, что счётчик работает нормально
ПРоблема в том, что ты не знаешь логики работы for-цикла.
И не надо болтать ерундой)