Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Слайд шоу не работает [D2005, XP]


Страницы:   1 2

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-цикла.
И не надо болтать ерундой)


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо