-
Всем доброго времени суток! Почти доделал программу для просмотра изображений и записи на них звука, остался последний штрих: слайд шоу. Но тут меня поджидал сюрприз: хотя звук воспроизводится, заголовок окна меняется, но сами картинки не показываются Там всегото две переменные в цикле, а всё равно глюк((( Помогите кто чем может, я реально запутался((((( Уже кровавую оскомену набил от этого кода((((((( 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; Заранее спасибо!
-
РУССКИЙ УЧИТЬ
-
> <Цитата> > > > Игорь Шевченко © (31.03.08 11:12) [1] > РУССКИЙ УЧИТЬ
А кроме него?
-
А кроме него приводить полный код. С исправленными грамматическими ошибками
-
> две переменные в цикле,
Цикла не видно.
-
Удалено модератором
-
Приношу свои извинения за издевательство над русским языком, вот полный код функции: procedure TformMain.TplayClick(Sender: TObject);
var
i: word;
PCh: Pchar;
begin
for I :=prokrut 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; Помогите бедному ламеру(((((((
-
Ты еще умудрился надругаться над английсиким и над Паскалем.
-
> Ты еще умудрился надругаться над английсиким и над Паскалем.
Так скажите, что я должен сделать, чтоб Великий Бог Паскаля меня простил?
-
Нууууу... я думаю... не страдать фигней, а использовать PowerPoint... куда круче и эффектней... он своих денег стоит....
-
> Ramzes001 © (31.03.08 20:45) [8]
Один из грехов он тебе отпустит, если ты не будешь фривольно манипулировать счетчиком итераций for-цикла.
-
> Один из грехов он тебе отпустит, если ты не будешь фривольно > манипулировать счетчиком итераций for-цикла.
Проблема в том, что счётчик работает нормально, заголовки формы меняются, звук воспроизводится, но фото не грузится.
> Нууууу... я думаю... не страдать фигней, а использовать > PowerPoint... куда круче и эффектней... он своих денег стоит. > ...
Блин, я месяц эту прогу писал, а слайд шоу-это всего лишь примочка.
-
> Проблема в том, что счётчик работает нормально
ПРоблема в том, что ты не знаешь логики работы for-цикла. И не надо болтать ерундой)
-
А в чём глюк? С этим циклом работаю давно, таких проблем не было, объясните пожалуйста.
-
-
> [13] Ramzes001 © (31.03.08 21:16)
А вместо prokrut, в цикле, использовать переменную цикла(I) - не сообразил? Впрочем это не отвечает на твой вопрос... Объясни - зачем каждую итеррацию цикла выстовлять состояние формы? Это тоже не ответ... Код бредовый.... прямой ответ - не поможет :(
-
Сергей, ошибка не в этом, насколько я понял, Вы имели ввиду то, что не следует изменять значение управляющей переменной внутри цикла. Но изменив код на следующий: 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; Ситуация осталась неизменной, я уверен, что проблема при отображении картинки.
-
> Объясни - зачем каждую итеррацию цикла выстовлять состояние формы?
Собственно это не ошибка и ничего страшного не произойдет, об этом позаботились более умные программисты в сеттерах свойств...
> но сами картинки не показываются
сообщение WM_PAINT мало того, что имеет низкий приоритет, но и обрабатывается только последнее из очереди...
-
> [16] Ramzes001 © (31.03.08 21:41)
Пипец :(
-
{RASkov} Ну что значит "код бредовый"? Всё работает, кроме непосредственно згрузки самой картинки, да и она грузится, но только последняя и после конца выполнения цикла. Я не говорю, что это эталон, но ведь почти всё работает!
-
> не следует изменять значение управляющей переменной внутри > цикла
Да, не следует.
> Ситуация осталась неизменной
А что принципиально изменилось ? Ничто.
Код как был неверным по логике, так им и остался, несмотря на то что отпущен один из "грехов".
Пробуй вставить в тело цикла вызов
Application.ProcessMessages
Ощути разницу.
Думай. Много.
-
> Собственно это не ошибка и ничего страшного не произойдет, > об этом позаботились более умные программисты в сеттерах > свойств...
Черт, не докончил мысль...
..., но говорит о плохой подготовки "текущего"(в данном случае тебя) (горе)программиста...
-
{RASkov}А как повысить этот приоритет?
-
> [19] Ramzes001 © (31.03.08 21:48) > {RASkov} Ну что значит "код бредовый"?
А то и значит... Это значит, что в голове у тебя совсем не то что нужно :(
> Всё работает
Через каку все работает.... а тебя это к сожалению устраивает :(
> да и она грузится, но только последняя
Они все грузятся, но почитай про сообщение выше...
> Я не говорю, что это эталон, но ведь почти всё работает!
Лучше исправь все по нормальному :) Сергей вон тебе подсказал.... но не нужно бездумно вставлять в бредовый код спасительную строчку.
-
> [22] Ramzes001 © (31.03.08 21:50)
никак :) Просто это нужно знать и учитывать)
-
чё-чё, а ребята правильно говорят: не страдать фигнёй, а включать голову и думать! Я сам почти ТРИ (!) месяца писал аналогичную прогу, и пару раз переписывал ее "с нуля"! Вот тебе подсказка, но дальше ты сам!
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;
.........
Дальше ты просто ОБЯЗАН думать сам!
Извини.
-
> [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;
-
> [25] DDR (31.03.08 22:03) > Вот тебе подсказка, но дальше ты сам!
Да уж... :) Наподсказывал тут не о чем...)
-
{RASkow}, это же типа толчок :) Человеку нужно понять, а он не может (или не хочет), ну.... я поделился своими мыслями. Может быть, может быть.... я чёта не догнал или лишнее состряпал.
-
Прошу прощения что так долго не писал, просто Нет у меня очень сильно логал. Всем спасибо всё работает просто надо было вставить Application.ProcessMessagesж и всё отлично работает, а вообще значит код был не убитый, протестую, идея была хорошей, ещё раз всем спасибо. P.S. В своё оправдание хочу сказать, что мне 15 лет и я-сомоучка.
-
а мне 27 лет и сАмоучка :) Удачи тебе!
-
> я-сомоучка
Интересно, чему ты учишь сомов ?)
|