241

Re: Програма розв'язування задач з фізики! Для учнів 7-го класу.

Torbins написав:
koala написав:

І ця процедура має бути елементом форми, на якій знаходиться RichEdit1.

Немає жодної потреби якщо це локальна процедура, або існує глобальна змінна "RichEdit1".

ProgramBandera написав:
NameFormula := ('Густина речовини ρmV5.jpg');
Formula(NameFormula);

Закінчення ".jpg" також можна додавати в процедурі.

Тоді треба RichEdit туди передавати. Або робити публічним і адресувати через глобальну змінну форми.
І не треба так із закінченнями, наступного разу буде .jpeg чи взагалі якийсь .gif.

Подякували: leofun01, ProgramBandera2

242

Re: Програма розв'язування задач з фізики! Для учнів 7-го класу.

Доброї ночі! Хто працював з компонентом MediaPlayer підкажіть чому в мене не програється перший файл Фізика1.mp3, який викликається процедурою локальною Play. Ось уривок коду:

procedure TForm1.BitBtn7Click(Sender: TObject);

 Procedure Play(fail:string);
  begin
   try
    MediaPlayer1.FileName := ('Медіа\Фізика\'+fail);
    MediaPlayer1.Open;
    MediaPlayer1.Play;
   finally
    if MediaPlayer1.Position = 1 then
    MediaPlayer1.Close;
   end;
  end;

begin
 if AnsiCompareText('Фізика',Edit7.Text)=0 then
 begin
  begin
   Definition := FIZIKA1;
   RichEdit1.Lines.Add(Definition);
   Definition := EmptyLine;
   RichEdit1.Lines.Add(Definition);
   Play('Фізика1.mp3');
  end;
  begin
   Definition := FIZIKA2;
   RichEdit1.Lines.Add(Definition);
   Definition := EmptyLine;
   RichEdit1.Lines.Add(Definition);
   Play('Фізика2.mp3');
  end;
 end

 else

 if AnsiCompareText('Альтиметри',Edit7.Text)=0 then
 begin
  Definition := ALTIMETRI;
  RichEdit1.Lines.Add(Definition);
  Definition := EmptyLine;
  RichEdit1.Lines.Add(Definition);
  Play('Альтиметри.mp3');
 end

 else

 if AnsiCompareText('Амплітуда коливань',Edit7.Text)=0 then
 begin
  Definition := AMPLITUDA_KOLIVAN;
  RichEdit1.Lines.Add(Definition);
  Definition := EmptyLine;
  RichEdit1.Lines.Add(Definition);
  Play('Амплітуда коливань.mp3');
 end

 else
............
.............
....................
...........
end;

Програється тільки другий файл Фізика2.mp3.

243

Re: Програма розв'язування задач з фізики! Для учнів 7-го класу.

бо fail з англійської - невдача...
і взагалі використовування кирилиці в програмуванні то є моветон

244

Re: Програма розв'язування задач з фізики! Для учнів 7-го класу.

А нічого, що другий файл починає відтворюватися одразу після того, як запустили перший?
Виставіть у першому блоці

MediaPlayer.Wait := true;

щоб програма чекала, доки плеєр дограє. Або ставте Notify і обробляйте OnNotify вручну, але це вас більше заплутає.

Подякували: leofun01, ProgramBandera2

245

Re: Програма розв'язування задач з фізики! Для учнів 7-го класу.

ur_naz написав:

бо fail з англійської - невдача...
і взагалі використовування кирилиці в програмуванні то є моветон

Файлів є майже дві з половиною тисячі, якщо я їх перекладу на англійську то точно заплутаюсь.

246

Re: Програма розв'язування задач з фізики! Для учнів 7-го класу.

koala написав:

А нічого, що другий файл починає відтворюватися одразу після того, як запустили перший?
Виставіть у першому блоці

MediaPlayer.Wait := true;

щоб програма чекала, доки плеєр дограє. Або ставте Notify і обробляйте OnNotify вручну, але це вас більше заплутає.

Не працює властивість Wait, напевно глюк якийсь. Чи можливо іще якось програти декілька звукових файлів по черзі?

247

Re: Програма розв'язування задач з фізики! Для учнів 7-го класу.

Вибачте, ви ще й досі не зрозуміли, що тут немає телепатів?

248

Re: Програма розв'язування задач з фізики! Для учнів 7-го класу.

Не працює властивість Wait, напевно глюк якийсь.

Код до студії.

249 Востаннє редагувалося ProgramBandera (31.01.2020 16:27:08)

Re: Програма розв'язування задач з фізики! Для учнів 7-го класу.

Усім привіт! Підкажіть як правильно зробити процедуру з локальної глобальну!
В мене є локальна процедура, і як виявилось вона мені потрібна іще в декількох глобальних процедурах.

Procedure Formula(f:string);
  var
   Pict: TPicture;
  begin
   Pict := TPicture.Create;
    try
     Pict.LoadFromFile('Формули\'+f);
     Clipboard.Assign(Pict);
     RichEdit1.PasteFromClipboard;
    finally
     Pict.Free;
    end;
    SkipTheLine := EmptyLine;
    RichEdit1.Lines.Add(SkipTheLine);
  end;

Я її, якби зробив, глобальною, переписав її заголовок, і в type прописав її:

type
  TForm1 = class(TForm)
  .....
  .........
  ......
  Procedure Formula(Sender: TObject; RichEdit1: TJvRichEdit; f:string);
Procedure TForm1.Formula(Sender: TObject; RichEdit1: TJvRichEdit; f:string);
  var
   Pict: TPicture;
  begin
   Pict := TPicture.Create;
    try
     Pict.LoadFromFile('Формули\'+f);
     Clipboard.Assign(Pict);
     RichEdit1.PasteFromClipboard;
    finally
     Pict.Free;
    end;
    SkipTheLine := EmptyLine;             // Змінна SkipTheLine глобальна, EmptyLine глобальна константа типу string
    RichEdit1.Lines.Add(SkipTheLine); 
  end;

Та програма не компілюється видає помилку в рядку де вона викликається

Formula('Об’єм трикутної призми.jpg');

Несумісні типи: 'TObject' та 'string'
Підозрюю що помилка в рядку коду де вона викликається.

Як мені правильно записати її глобальною, щоб я викликав її старим рядком коду? Звичайно її можна зробити публічною: в public записати Procedure Formula(f:string); і заголовок її змінити на Procedure TForm1.Formula(f:string);.
Та для загального розвитку хотілося б знати як взагалі ці процедури робити глобальними і не публічними.

250 Востаннє редагувалося topprogrammer (31.01.2020 16:38:38)

Re: Програма розв'язування задач з фізики! Для учнів 7-го класу.

Створіть окремий Unit і перенесіть в нього необхідні процедури та функції.
Приклад тут:
https://stackoverflow.com/questions/161 … -in-delphi

Подякували: koala, ProgramBandera, leofun013

251

Re: Програма розв'язування задач з фізики! Для учнів 7-го класу.

topprogrammer написав:

Створіть окремий Unit і перенесіть в нього необхідні процедури та функції.
Приклад тут:
https://stackoverflow.com/questions/161 … -in-delphi

Так, це добре, але якщо в мене їх буде багато, наприклад чотири пять сотень: для всіх створювати окремі Unit?

252

Re: Програма розв'язування задач з фізики! Для учнів 7-го класу.

тоді щось ти не вірно робиш

253 Востаннє редагувалося ProgramBandera (31.01.2020 16:52:51)

Re: Програма розв'язування задач з фізики! Для учнів 7-го класу.

ur_naz написав:

тоді щось ти не вірно робиш

Ваша логіка вражає!!! Чому б я іще запитував би тут, як мені це вірно зробити.

254 Востаннє редагувалося koala (31.01.2020 16:56:14)

Re: Програма розв'язування задач з фізики! Для учнів 7-го класу.

ProgramBandera написав:
topprogrammer написав:

Створіть окремий Unit і перенесіть в нього необхідні процедури та функції.
Приклад тут:
https://stackoverflow.com/questions/161 … -in-delphi

Так, це добре, але якщо в мене їх буде багато, наприклад чотири пять сотень: для всіх створювати окремі Unit?

Ні, збирати однотипні в окремі модулі. Модулі для того і придумали, щоб збирати пов'язані речі в одному місці; крім того, частою практикою є створити модуль з назвою на кшталт helper і тримати там корисні функції, які не виходить запхати у щось інше.
Тобто це може бути якось так:

mathematics.pas
    unit mathematics; {математичні функції}
    ...
files.pas
    unit files; {функції для роботи з файлами}
    ...
helper.pas
    unit helper; {корисні спільні функції, що не увійшли до інших модулів}
Подякували: ProgramBandera, topprogrammer2

255

Re: Програма розв'язування задач з фізики! Для учнів 7-го класу.

koala написав:
ProgramBandera написав:
topprogrammer написав:

Створіть окремий Unit і перенесіть в нього необхідні процедури та функції.
Приклад тут:
https://stackoverflow.com/questions/161 … -in-delphi

Так, це добре, але якщо в мене їх буде багато, наприклад чотири пять сотень: для всіх створювати окремі Unit?

Ні, збирати однотипні в окремі модулі. Модулі для того і придумали, щоб збирати пов'язані речі в одному місці; крім того, частою практикою є створити модуль з назвою на кшталт helper і тримати там корисні функції, які не виходить запхати у щось інше.
Тобто це може бути якось так:

mathematics.pas
    unit mathematics; {математичні функції}
    ...
files.pas
    unit files; {функції для роботи з файлами}
    ...
helper.pas
    unit helper; {корисні спільні функції, що не увійшли до інших модулів}

Дякую! Напевно я зроблю ці процедури просто публічними. Я просто не знаю як створювати ці unit і як їх викликати потім.
Дякую пане koala та пане topprogrammer заваш час.

256

Re: Програма розв'язування задач з фізики! Для учнів 7-го класу.

File -> New

англійська

https://replace.org.ua/uploads/images/931/6908e84e912e265b8fb4124eb5a3fb78.jpg

знаходите Unit, називаєте, як вам треба, при цьому створюється файл із шаблоном.
В шаблоні будуть дві основні частини: interface - там пишете заголовки ваших функцій, типи і т.д., що можна буде брати з модуля; в implementation - закрита частина, там реалізації функцій, статичні змінні і т.д.

unit mathematics; {математичні функції}
interface
uses
  потрібні модулі;

function do_some_math(x:integer) : float;

implementation

function do_some_math(x:integer) : float;
begin
 ...
end;

end. {це кінець модуля}

В інших файлах, де треба, дописуєте в uses:

uses Forms, ..., mathematics;
Подякували: ProgramBandera, leofun012

257

Re: Програма розв'язування задач з фізики! Для учнів 7-го класу.

koala написав:

File -> New

англійська

https://replace.org.ua/uploads/images/931/6908e84e912e265b8fb4124eb5a3fb78.jpg

знаходите Unit, називаєте, як вам треба, при цьому створюється файл із шаблоном.
В шаблоні будуть дві основні частини: interface - там пишете заголовки ваших функцій, типи і т.д., що можна буде брати з модуля; в implementation - закрита частина, там реалізації функцій, статичні змінні і т.д.

unit mathematics; {математичні функції}
interface
uses
  потрібні модулі;

function do_some_math(x:integer) : float;

implementation

function do_some_math(x:integer) : float;
begin
 ...
end;

end. {це кінець модуля}

В інших файлах, де треба, дописуєте в uses:

uses Forms, ..., mathematics;

Складно дуже виходить. Якби можливо була б практика в цьому ділі, то щось мудрував би, а так навіть не знаю які мені модулі прописати в Uses, і як мені викликати в програмі саме цю процедуру, щоб вона вивела скріншот формули.

unit Scrinshot;

interface
 uses

 Procedure TForm1.Formula(Sender: TObject; RichEdit1: TJvRichEdit; f:string);

implementation

 Procedure TForm1.Formula(Sender: TObject; RichEdit1: TJvRichEdit; f:string);
  var
   Pict: TPicture;
  begin
   Pict := TPicture.Create;
    try
     Pict.LoadFromFile('Формули\'+f);
     Clipboard.Assign(Pict);
     RichEdit1.PasteFromClipboard;
    finally
     Pict.Free;
    end;
    SkipTheLine := EmptyLine;             // Змінна SkipTheLine глобальна, EmptyLine глобальна константа типу string
    RichEdit1.Lines.Add(SkipTheLine);
  end;

end.

Я тоді все таки спробую їх зробити публічними.

Діло в тому, чому я хочу зробити їх глобальними, наприклад, в мене є локальна процедура яка визначає густину. І щоб визначити густину часто буває спочатку потрібно визначити об'єм. В мене є також локальна процедура на об'єм, яку я можу вставити в локальну процедуру густини, але треба відслідковувати щоб вона була прописана в коді вище локальної процедури густини. Тому що, коли я викликаю процедуру Volume;, а вона не прописана вище процедури Density;, то вибиває помилку "Невідомий ідентифікатор".
Хочу спробувати зробити їх глобальними, можливо тоді не буде мати значення, яка процедура перед якою описана.
А можливо це і не допоможе!

258

Re: Програма розв'язування задач з фізики! Для учнів 7-го класу.

Можна використати forward

procedure ProcA; forward;

procedure ProcB;
begin
  ProcA;
end;

procedure ProcA;
begin
  ProcB;
end;
Подякували: ProgramBandera, koala, leofun013

259 Востаннє редагувалося koala (31.01.2020 18:10:15)

Re: Програма розв'язування задач з фізики! Для учнів 7-го класу.

Якщо ви хочете ТАКИМИ процедурами ділитися, то доведеться повністю аналізувати, що і з чим саме вони роблять.

unit RichEditHelpers; {краще не робити помилок у назвах; і це ж, мабуть, буде не лише для скріншотів?}

interface
 uses {не заповнили - а треба. Далі побачимо, що саме} 

 Procedure LoadFormulaIntoRichEdit(RichEdit: TJvRichEdit; Formula:string); forward;{у вас тепер це вже не частина TForm1, і Sender не потрібен.
Крім того, треба додати JvRichEdit (чи як там модуль зветься) до uses}

implementation

 Procedure LoadPictureIntoRichEdit(RichEdit: TJvRichEdit; FileName:string);
  var
   Pict: TPicture; {О, його модуля теж немає в uses. Я так розумію, це Graphics}
  begin
   Pict := TPicture.Create;
    try
     Pict.LoadFromFile('Формули\'+Formula);
     Clipboard.Assign(Pict); {uses ClipBrd}
     RichEdit.PasteFromClipboard;
    finally
     Pict.Free;
    end;
    SkipTheLine := EmptyLine;             {Глобальні значення теж доведеться кудись винести у спільне місце. Якщо вони потрібні.}
    RichEdit.Lines.Add(SkipTheLine);
  end;

end.

І так, зовсім забув про forward, дякую за виправлення.

Подякували: ProgramBandera1

260

Re: Програма розв'язування задач з фізики! Для учнів 7-го класу.

Панове програмісти підкажіть чому моя публічна процедура спочатку програє звуковий файл а тоді виводить текст? Дуже потрібно навпаки. Спочатку текст а потім звук! І знову спочатку текст а потім звук!

Procedure TForm1.Definition_Play(d, f: string);
 begin
  RichEdit1.Lines.Add(d);
  RichEdit1.Lines.Add('');
  try
   MediaPlayer1.FileName := ('Медіа\Фізика\'+f);
   MediaPlayer1.Open;
   MediaPlayer1.Wait := True;
   MediaPlayer1.Play;
  finally
   MediaPlayer1.Stop;
   MediaPlayer1.Position := 0;
   MediaPlayer1.Close;
   MediaPlayer1.Wait := False;
  end;
 end;

Виклик процедури:

procedure TForm1.BitBtn7Click(Sender: TObject);
begin
 if AnsiCompareText('Фізика',Edit7.Text)=0 then
 begin
  Definition_Play (FIZIKA1,'Фізика1.mp3');
  Definition_Play (FIZIKA2,'Фізика2.mp3');
 end

 else

 if AnsiCompareText('Альтиметри',Edit7.Text)=0 then
 begin
  Definition_Play (ALTIMETRI,'Альтиметри.mp3');
 end

 else

 if AnsiCompareText('Амплітуда коливань',Edit7.Text)=0 then
.........
......
..........
.....
end;