IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Задача на объекты
Саирис123
сообщение 18.11.2006 15:59
Сообщение #1


Гость






С помощью объектов на Паскале нужно решить следующую задачу:
"Создать объект "Progressbar", имеющий следующие свойства: отображающий прогресс какого-либо процесса в виде постепенно закрашиваемой линии. Окно должно иметь изменяемые размер, координаты верхнего левого угла, цвет. От этого объекта создать дочерний объект, в котором кроме закрашиваемой линии присутствует число, отображающее количество процентов от выполненной работы".
Пожалуйста, кто знает как это сделать, то помогите.
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 11)
volvo
сообщение 18.11.2006 16:51
Сообщение #2


Гость






Создай объект вот такого типа:

(выдрано из одной очень старой моей поделки, у меня 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
 К началу страницы 
+ Ответить 
Гость
сообщение 19.11.2006 0:29
Сообщение #3


Гость






В общем, должно быть так, чтобы при подстановки в какой-либо процесс проценты отображались. То бишь отображаемое значение может быть любым.
 К началу страницы 
+ Ответить 
Гость
сообщение 19.11.2006 0:34
Сообщение #4


Гость






Заранее большущее спасибо за помощь. Завтра с утра встану и постараюсь разобраться в этой программе.
 К началу страницы 
+ Ответить 
volvo
сообщение 19.11.2006 0:37
Сообщение #5


Гость






Цитата
То бишь отображаемое значение может быть любым.
Ну, допустим, любым оно быть не может...

Отображаемое значение должно быть целым числом в интервале 0 .. 100 (меньше 0 и больше 100 процентов - глупость), но суть не в этом. Меня интересует, например, при сортировке массива, ОТКУДА ты знаешь, сколько процентов уже закончилось?
 К началу страницы 
+ Ответить 
Гость
сообщение 19.11.2006 14:02
Сообщение #6


Гость






Ну да, про проценты-то я понял.
Знаешь, меня это теперь тоже интересует. В моём условии нет чёткого ответа на этот вопрос. Просто задано, что должны отображаться проценты в этом дочернем объекте. Тогда я постараюсь уточнить это на следующей неделе.
А то, что ты мне написал работает без этого? Или там обязательно надо знать откуда берётся значение?
 К началу страницы 
+ Ответить 
volvo
сообщение 19.11.2006 16:25
Сообщение #7


Гость






Цитата
А то, что ты мне написал работает без этого? Или там обязательно надо знать откуда берётся значение?
Там, откуда я выдрал этот код, он использовался для индикации громкости/уровня сигнала, т.е. всегда было известно максимальное значение, а текущее (в процентах от MAX) отображалось в каждый момент времени...
 К началу страницы 
+ Ответить 
Гость
сообщение 20.11.2006 0:20
Сообщение #8


Гость






Понятно. В общем на неделе я постараюсь узнать поподробнее про задание и тогда напишу здесь.
Спасибо уже за то, что помог мне. smile.gif
 К началу страницы 
+ Ответить 
Гость
сообщение 24.11.2006 1:05
Сообщение #9


Гость






В общем, я спросил, но так чёткого ответа мне и не сказали.
Короче, программа должна сама то ли постраиваться под любой процесс, то ли состыкововаться. Должно задаваться число от 1 до 100 и видимо с помощью этого как-то всё должно работать. Извини, я конечно понимаю, что мало что понятно, но я надеюсь, что мне кто-нибудь поможет с решением этой задачи.
 К началу страницы 
+ Ответить 
Гость
сообщение 24.11.2006 19:50
Сообщение #10


Гость






У меня тут проблемка с задачей.
При компиляции в строке
TPercentBar =
Object(TSquare)
пишет что Error 3:Unknown identifier.
 К началу страницы 
+ Ответить 
volvo
сообщение 24.11.2006 20:16
Сообщение #11


Гость






Правильно пишет... Объект-предок я не выкладывал. ЗА ТЕБЯ решать задачу тоже не буду... Нужно - разберешься по коду, который я привел.
 К началу страницы 
+ Ответить 
Гость
сообщение 24.11.2006 21:12
Сообщение #12


Гость






Понятно тогда. Я просто подумал, что тут полное решение. Ну теперь понятно хоть, как дальше делать. Спасибо за идею задачи, ты мне очень помог. smile.gif
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 24.06.2025 20:08
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"