|
Вопрос # 5 351/ вопрос решён / |
|
Здравствуйте! Подскажите пожалуйста команду, которая бы сбрасывала все счетчики, которые используются в программе.
 |
Вопрос задала: Валентинка (статус: Посетитель)
Вопрос отправлен: 31 мая 2011, 12:03
Состояние вопроса: решён, ответов: 1.
|
Ответ #1. Отвечает эксперт: min@y™
Вот, набросал тебе пример. Прицепляю к ответу.
З.Ы. И выкинь к ядрени фене паскалевские файловые процедуры. Они давно устарели. Я ж тебе советовал юзать TIniFile. Чем он тебе не угодил? И кода будет меньше. К ответу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки ответа)
 |
Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 31 мая 2011, 14:28
Оценка за ответ: 5
Комментарий к оценке: Спасибо!!!
|
Мини-форум вопроса
Всего сообщений: 38; последнее сообщение — 31 мая 2011, 15:24; участников в обсуждении: 4.
Страницы: [1] [2] [Следующая »]
|
DNK (статус: Студент), 31 мая 2011, 12:06 [#1]:
Кто такие счетчики? И откуда их сбрасывать?
"Digital Networked Knight"
|
|
Вадим К (статус: Академик), 31 мая 2011, 12:07 [#2]:
просто взять и обнулить.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Валентинка (статус: Посетитель), 31 мая 2011, 12:12 [#3]:
у меня такая проблема: с главной формы запускается форма с тестирующей программой, при закрытии формы с тестирующей программой появляется главная форма, а второй раз запустить тестирующую программу с главной формы не получается.
|
|
Валентинка (статус: Посетитель), 31 мая 2011, 12:14 [#4]:
а если этих счетчиков очень много?
|
|
Валентинка (статус: Посетитель), 31 мая 2011, 12:14 [#5]:
нужно вернуть форму к первоначальному виду
|
|
DNK (статус: Студент), 31 мая 2011, 12:21 [#6]:
Цитата (Вадим К):
просто взять и обнулить. Взять что? Резинку и карандаш?
Валентинка: Код в студию.
"Digital Networked Knight"
|
|
Валентинка (статус: Посетитель), 31 мая 2011, 12:22 [#7]:
Существует ли такая команда???
|
|
DNK (статус: Студент), 31 мая 2011, 12:23 [#8]:
На нули расчитайсь!
"Digital Networked Knight"
|
|
Валентинка (статус: Посетитель), 31 мая 2011, 12:24 [#9]:
код главной формы:
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus;
type
TForm2 = class(TForm)
Button1: TButton;
MainMenu1: TMainMenu;
Label1: TLabel;
Button2: TButton;
Label2: TLabel;
Button3: TButton;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
uses TESTER_, Unit3;
{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject);
begin
form2.Hide;
form1.show;
end;
procedure TForm2.Button2Click(Sender: TObject);
begin
Form2.Close;
end;
procedure TForm2.Button3Click(Sender: TObject);
begin
Form3.Show;
Form3.WindowState:=wsMaximized;
Form3.MediaPlayer1.Notify := false;
Form3.MediaPlayer1.Display := Form3;
Form3.MediaPlayer1.Open;
Form3.MediaPlayer1.DisplayRect := Form3.ClientRect;
end;
procedure TForm2.N2Click(Sender: TObject);
begin
form2.Hide;
form1.show;
end;
procedure TForm2.N3Click(Sender: TObject);
begin
Form3.Show;
Form3.WindowState:=wsMaximized;
Form3.MediaPlayer1.Notify := false;
Form3.MediaPlayer1.Display := Form3;
Form3.MediaPlayer1.Open;
Form3.MediaPlayer1.DisplayRect := Form3.ClientRect;
end;
end.
|
|
Валентинка (статус: Посетитель), 31 мая 2011, 12:27 [#10]:
начало кода тестирующей программы:unit tester_;
interface
uses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, ExtCtrls,
jpeg;
type
TForm1 = class(TForm)
// вопрос
Label5: TLabel;
// альтернативные ответы
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
// радиокнопки выбора ответа
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
RadioButton3: TRadioButton;
RadioButton4: TRadioButton;
Image1: TImage; //область вывода иллюстрации
Panel1: TPanel;
RadioButton5: TRadioButton; //"служебная кнопка"
Button1: TButton; //кнопка ОК, дальше
procedure FormActivate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure RadioButtonClick(Sender: TObject);
// Эти объявления вставлены сюда вручную
procedure Info;
procedure VoprosToScr;
procedure ShowPicture; // выводит иллюстрацию
procedure ResetForm; // "очистка" формы перед выводом очередного вопроса
procedure Itog;
procedure FormCreate(Sender: TObject); // результат тестирования
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1; // форма
implementation
uses Unit2;
{$R *.DFM}
const
N_LEV=6; // четыре уровня оценки
N_ANS=4; // четыре варианта ответов
var
f:TextFile;
fn:string; // имя файла вопросов
level:array[1..N_LEV] of integer; // сумма, соответствующая уровню
mes:array[1..N_LEV] of string; // сообщение, соответствующее уровню
score:array[1..N_ANS] of integer; // оценка за выбор ответа
summa:integer; // набрано очков
vopros:integer; // номер текущего вопроса
otv:integer; // номер выбранного ответа
// вывод информации о тесте
procedure Tform1.Info;
var
s,buf:string;
begin
readln(f,s);
Form1.Caption := s;
buf:='';
repeat
readln(f,s);
if s[1] <> '.'
then buf := buf +s + #13;
until s[1] ='.';
Label5.caption:=buf;
end;
// прочитать информацию об оценках за тест
Procedure GetLevel;
var
i:integer;
buf:string;
begin
i:=1;
repeat
readln(f,buf);
if buf[1] <> '.' then begin
mes[i]:=buf; // сообщение
readln(f,level[i]); // оценка
i:=i+1;
end;
until buf[1]='.';
end;
// масштабирование иллюстрации
Procedure TForm1.ShowPicture;
var
w,h: integer; // максимально возможные размеры картинки
begin
// вычислить допустимые размеры картинки
w:=ClientWidth-10;
h:=ClientHeight
- Panel1.Height -10
- Label5.Top
- Label5.Height - 10;
// вопросы
if Label1.Caption <> ''
then h:=h-Label1.Height-10;
if Label2.Caption <> ''
then h:=h-Label2.Height-10;
if Label3.Caption <> ''
then h:=h-Label3.Height-10;
if Label4.Caption <> ''
then h:=h-Label4.Height-10;
// если размер картинки меньше w на h,
// то она не масштабируется
Image1.Top:=Form1.Label5.Top+Label5.Height+10;
if Image1.Picture.Bitmap.Height > h
then Image1.Height:=h
else Image1.Height:= Image1.Picture.Height;
if Image1.Picture.Bitmap.Width > w
then Image1.Width:=w
else Image1.Width:=Image1.Picture.Width;
Image1.Visible := True;
end;
// вывести вопрос
Procedure TForm1.VoprosToScr;
var
i:integer;
s,buf:string;
ifn:string; // файл иллюстрации
begin
vopros:=vopros+1;
caption:='Вопрос ' + IntToStr(vopros);
// прочитать вопрос
buf:='';
repeat
readln(f,s);
if (s[1] <> '.') and (s[1] <> '\')
then buf:=buf+s+' ';
until (s[1] ='.') or (s[1] ='\');
Label5.caption:=buf; // вывести вопрос
|
|
Валентинка (статус: Посетитель), 31 мая 2011, 12:27 [#11]:
продолжение:{ Иллюстрацию прочитаем, но выведем только после
того, как прочитаем альтернативные ответы
и определим максимально возможный размер
области формы, который можно использовать
для ее вывода.}
if s[1] <> '\'
then Image1.Tag:=0 // к вопросу нет иллюстрации
else // к вопросу есть иллюстрация
begin
Image1.Tag:=1;
ifn:=copy(s,2,length(s));
try
Image1.Picture.LoadFromFile(ifn);
except
on E:EFOpenError do
Image1.Tag:=0;
end;
end;
// Читаем варианты ответов
i:=1;
repeat
buf:='';
repeat // читаем текст варианта ответа
readln(f,s);
if (s[1]<>'.') and (s[1] <> ',')
then buf:=buf+s+' ';
until (s[1]=',')or(s[1]='.');
// прочитан альтернативный ответ
score[i]:= StrToInt(s[2]);
case i of
1: Label1.caption:=buf;
2: Label2.caption:=buf;
3: Label3.caption:=buf;
4: Label4.caption:=buf;
end;
i:=i+1;
until s[1]='.';
// здесь прочитана иллюстрация и альтернативные ответы
// текст вопроса уже выведен
if Image1.Tag =1 // есть иллюстрация к вопросу
then ShowPicture;
// вывод альтернативных ответов
if Form1.Label1.Caption <> ''
then begin
if Form1.Image1.Tag =1
then Label1.top:=Image1.Top+Image1.Height+10
else Label1.top:=Label5.Top+Label5.Height+10;
RadioButton1.top:=Label1.top;
Label1.visible:=TRUE;
RadioButton1.visible:=TRUE;
end;
if Form1.Label2.Caption <> ''
then begin
Label2.top:=Label1.top+ Label1.height+10;
RadioButton2.top:=Label2.top;
Label2.visible:=TRUE;
RadioButton2.visible:=TRUE;
end;
if Form1.Label3.Caption <> ''
then begin
Label3.top:=Label2.top+ Label2.height+10;
RadioButton3.top:=Label3.top;
Label3.visible:=TRUE;
RadioButton3.visible:=TRUE;
end;
if Form1.Label4.Caption <> ''
then begin
Label4.top:=Label3.top+ Label3.height+10;
RadioButton4.top:=Label4.top;
Label4.visible:=TRUE;
RadioButton4.visible:=TRUE;
end;
end;
Procedure TForm1.ResetForm;
begin // сделать невидимыми все метки и радиокнопки
Label1.Visible:=FALSE;
Label1.caption:='';
Label1.width:=ClientWidth-Label1.left-5;
RadioButton1.Visible:=FALSE;
Label2.Visible:=FALSE;
Label2.caption:='';
Label2.width:=ClientWidth-Label2.left-5;
RadioButton2.Visible:=FALSE;
Label3.Visible:=FALSE;
Label3.caption:='';
Label3.width:=ClientWidth-Label3.left-5;
RadioButton3.Visible:=FALSE;
Label4.Visible:=FALSE;
Label4.caption:='';
Label4.width:=ClientWidth-Label4.left-5;
RadioButton4.Visible:=FALSE;
Label5.width:=ClientWidth-Label5.left-5;
Image1.Visible:=FALSE;
end;
// определение достигнутого уровня
procedure TForm1.Itog;
var
i:integer;
buf:string;
begin
buf:='';
buf:='Результаты тестирования'+ #13
+'Всего баллов: '+ IntToStr(summa);
i:=1;
while (summa < level[i]) and (i<N_LEV) do
i:=i+1;
buf:=buf+ #13+mes[i];
Label5.Top:=20;
Label5.caption:=buf;
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
ResetForm;
if ParamCount = 0
then begin
Label5.caption:= 'Не задан файл вопросов теста.';
Button1.caption:='Ok';
Button1.tag:=2;
Button1.Enabled:=TRUE
end
else begin
fn := ParamStr(1);
assignfile(f,fn);
try
reset(f);
except
on EFOpenError do
begin
ShowMessage('Файл теста '+fn+' не найден.');
Button1.caption:='Ok';
Button1.tag:=2;
Button1.Enabled:=TRUE;
exit;
end;
end;
Info; // прочитать и вывести информацию о тесте
GetLevel; // прочитать информацию об уровнях оценок
end;
end;
// щелчок на кнопке Button1
procedure TForm1.Button1Click(Sender: TObject);
begin
case Button1.tag of
0: begin
Button1.caption:='Дальше';
Button1.tag:=1;
RadioButton5.Checked:=TRUE;
// вывод первого вопроса
Button1.Enabled:=False;
ResetForm;
VoprosToScr;
end;
1: begin // вывод остальных вопросов
summa:=summa+score[otv];
RadioButton5.Checked:=TRUE;
Button1.Enabled:=False;
ResetForm;
if not eof(f)
then VoprosToScr
else
begin
summa:=summa+score[otv];
closefile(f);
Button1.caption:='Ok';
Form1.caption:='Результат';
Button1.tag:=2;
Button1.Enabled:=TRUE;
Itog; // вывести результат
end;
end;
2: begin // завершение работы
Form1.Hide;
Form2.show;
end;
end;
end;
// Процедура обработки события OnClick
// для компонентов RadioButton1-RadioButton4
procedure TForm1.RadioButtonClick(Sender: TObject);
begin
if sender = RadioButton1
then otv:=1
else if sender = RadioButton1
then otv:=2
else if sender = RadioButton3
then otv:=3
else otv:=4;
Button1.enabled:=TRUE;
end;
// обеспечивает настройку компонентов
procedure TForm1.FormCreate(Sender: TObject);
begin
Image1.AutoSize := False;
Image1.Proportional := True;
RadioButton1.Visible := False;
end;
end.
|
|
Валентинка (статус: Посетитель), 31 мая 2011, 12:34 [#12]:
Мне может кто-нибудь помочь???
|
|
DNK (статус: Студент), 31 мая 2011, 12:41 [#13]:
Погода - прекрасная, программа - ужасная.
summa, vopros, otv. Это так называемые счетчики?
"Digital Networked Knight"
|
|
Вадим К (статус: Академик), 31 мая 2011, 12:41 [#14]:
я не вижу ни одного счетчика. где они?
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Валентинка (статус: Посетитель), 31 мая 2011, 12:44 [#15]:
summa:integer; // набрано очков
vopros:integer; // номер текущего вопроса
otv:integer; // номер выбранного ответа
|
|
Вадим К (статус: Академик), 31 мая 2011, 12:47 [#16]:
значит, ставите кнопку "обнулить все" и пишете такой код
summa := 0;
vopros := 0;
otv := 0;
и все.
А так, делфи не знает, что такое счетчики - это более высокая сущность, которой может управлять только программист.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Валентинка (статус: Посетитель), 31 мая 2011, 12:51 [#17]:
непомогло
|
|
Валентинка (статус: Посетитель), 31 мая 2011, 12:52 [#18]:
при нажатии на кнопку ОК, она вылетает
|
|
Вадим К (статус: Академик), 31 мая 2011, 12:53 [#19]:
непомогло - это не ответ. нужно писать, что именно не так.
Хотя я подозреваю что. Кроме просто обновления "счетчиков", наверное нужно обновить все визуальные компоненты (label, edit и так далее) и привести их в начальный вид
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Валентинка (статус: Посетитель), 31 мая 2011, 12:54 [#20]:
а как сделать это???
|
Страницы: [1] [2] [Следующая »]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|