Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача на объекты
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Саирис123
С помощью объектов на Паскале нужно решить следующую задачу:
"Создать объект "Progressbar", имеющий следующие свойства: отображающий прогресс какого-либо процесса в виде постепенно закрашиваемой линии. Окно должно иметь изменяемые размер, координаты верхнего левого угла, цвет. От этого объекта создать дочерний объект, в котором кроме закрашиваемой линии присутствует число, отображающее количество процентов от выполненной работы".
Пожалуйста, кто знает как это сделать, то помогите.
volvo
Создай объект вот такого типа:

(выдрано из одной очень старой моей поделки, у меня TPercentBar унаследован от общего для всех объектов предка, для удобства обработки... Можешь сделать так же, можешь оставить без наследования, если это тебе не нужно, дело твое...)
Type
PTPercentBar = ^TPercentBar;
TPercentBar =
Object(TSquare)
curr : Integer;
Fresh : Byte;

Procedure ShowBar( i : Integer );
Constructor Init( pxSt, pySt, pxFn, pyFn : Word;
x : Integer );
Destructor Done; Virtual;

Procedure Clear; Virtual;
Procedure Show; Virtual;

End;

...

Constructor TPercentBar.Init( pxSt, pySt, pxFn, pyFn : Word;
x : Integer );
Begin
TSquare.Init( pxSt, pySt, pxFn, pyFn, White, Black );
Fresh := 2; curr := x
End;
Destructor TPercentBar.Done;
Begin
TSquare.Done
End;

Procedure TPercentBar.Clear;
Begin
SetFillStyle( SolidFill, Black );
Bar( xSt + Fresh, ySt + Fresh, xFn - Fresh, yFn - Fresh )
End;

Procedure TPercentBar.ShowBar( i : Integer );
Var ix, w, xf, xs : Word;
Begin
curr := i;

w := (OwnWidth - 2 * Fresh) * i Div 100;
xs := xSt + Fresh; xf := xs + w;

Clear;
SetTextJustify( CenterText, CenterText );
OutTextXY( xSt + OwnWidth Div 2, ySt + OwnHeight Div 2,
IntToStr( curr ) + '%' );

SetWriteMode( XorPut );
For ix := xs To Pred(xf) Do
Line( ix, ySt + Fresh, ix, yFn - Fresh );
SetWriteMode( CopyPut )
End;

Procedure TPercentBar.Show;
var new_value: integer;
Begin
TSquare.Show;

{ !!! Обновить curr !!! }
new_value := ...

ShowBar( new_value );
End;


И в Show получай как-то новое отображаемое значение в процентах (если ты напишешь, откуда будешь его получать, я скажу, как именно это будет выглядеть полностью)...
rolleyes.gif
Гость
В общем, должно быть так, чтобы при подстановки в какой-либо процесс проценты отображались. То бишь отображаемое значение может быть любым.
Гость
Заранее большущее спасибо за помощь. Завтра с утра встану и постараюсь разобраться в этой программе.
volvo
Цитата
То бишь отображаемое значение может быть любым.
Ну, допустим, любым оно быть не может...

Отображаемое значение должно быть целым числом в интервале 0 .. 100 (меньше 0 и больше 100 процентов - глупость), но суть не в этом. Меня интересует, например, при сортировке массива, ОТКУДА ты знаешь, сколько процентов уже закончилось?
Гость
Ну да, про проценты-то я понял.
Знаешь, меня это теперь тоже интересует. В моём условии нет чёткого ответа на этот вопрос. Просто задано, что должны отображаться проценты в этом дочернем объекте. Тогда я постараюсь уточнить это на следующей неделе.
А то, что ты мне написал работает без этого? Или там обязательно надо знать откуда берётся значение?
volvo
Цитата
А то, что ты мне написал работает без этого? Или там обязательно надо знать откуда берётся значение?
Там, откуда я выдрал этот код, он использовался для индикации громкости/уровня сигнала, т.е. всегда было известно максимальное значение, а текущее (в процентах от MAX) отображалось в каждый момент времени...
Гость
Понятно. В общем на неделе я постараюсь узнать поподробнее про задание и тогда напишу здесь.
Спасибо уже за то, что помог мне. smile.gif
Гость
В общем, я спросил, но так чёткого ответа мне и не сказали.
Короче, программа должна сама то ли постраиваться под любой процесс, то ли состыкововаться. Должно задаваться число от 1 до 100 и видимо с помощью этого как-то всё должно работать. Извини, я конечно понимаю, что мало что понятно, но я надеюсь, что мне кто-нибудь поможет с решением этой задачи.
Гость
У меня тут проблемка с задачей.
При компиляции в строке
TPercentBar =
Object(TSquare)
пишет что Error 3:Unknown identifier.
volvo
Правильно пишет... Объект-предок я не выкладывал. ЗА ТЕБЯ решать задачу тоже не буду... Нужно - разберешься по коду, который я привел.
Гость
Понятно тогда. Я просто подумал, что тут полное решение. Ну теперь понятно хоть, как дальше делать. Спасибо за идею задачи, ты мне очень помог. smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.