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

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

Закрытие окна


Страницы:   1 2

batya17 ©   (2006-07-20 03:19:00) 

НELP!!! Как сделать так чтобы при закрытии окна появлялось сообщение, что то вроде "Вы действительно хотите выйти" и кнопки да и нет если нет то прога не закрывается. Если знаеет отправте мне на мыло
batya15@rambler.ruЗаранее спасибо.


PSPF2003   (2006-07-21 13:08:00) [1]

Спасибо за лекцию. Хм.. есть над чем задуматься.


Юрий Зотов   (2006-07-21 13:00:00) [2]

> PSPF2003 ©   (21.07.06 10:07) [30]

Книга, видимо, все же полезная. Действительно, ну не может же Борланд в своей справке рассказать об всем - и как работает клавиатура, и как обрабатываются прерывания, и как... и как... Тем более, что к Delphi все это напрямую не относится. Предполагается, что программист (раз уж он программист) знает все это из других источников - вот таки источником отчасти и служит эта книга.

Книга В.В. Фаронова, о которой Вы говорите тоже полезна, и даже очень. Советую капитально в ней разобраться - поверьте, что это снимет море проблем, и далеко не только (и даже далеко не столько) по разработке компонентов.

Просто каждую книгу стоит читать вдумчиво, не доверяя автору на все 100. Особенно в тех местах, где он говорит о недостатках Борландовского кода или о каких-то "нестандартных приемах". Честно говоря, я думаю, что о недостатках Борландовского кода имеет право говорить лишь тот, кто сам способен написать что-то такого же уровня, как Delphi и VCL. А прежде, чем учиться нестандартгым приемам, стоило бы как следует освоить стандартные (кстати, после этого наверняка произойдет странная вещь - неожиданно выяснится, что значительная часть приемов, которые раньше считались нестандартными вдруг почему-то стала вполне стандартной).


PSPF2003   (2006-07-21 10:07:00) [3]


> такого рода огрехи будешь спользовать

Нет, нет я не про сам код. В книге очень много информации. Ну например каким образом идет “обработка” нажатия на клавиатуру и много прочих мелочей подобных этой.


Мефисто   (2006-07-21 10:00:00) [4]


> PSPF2003 ©   (21.07.06 09:37) [28]

Кому как…


Вот это зря ;)
Если программирование - это твой основной род занятий, то я бы задумался.
Если такого рода огрехи будешь спользовать в своих разработках - проблем не оберешся.


PSPF2003   (2006-07-21 09:37:00) [5]

Хм... Возможно в книге и есть недостатки но для себя я нашел очень много интересной информации. Кому как…


Мефисто   (2006-07-21 09:36:00) [6]


> PSPF2003 ©   (21.07.06 09:24) [24]


Книгу Юрия Ревича лучше в в лесок на отдых возьми  (костерчик разжечь :) )


Мефисто   (2006-07-21 09:32:00) [7]


> PSPF2003 ©   (21.07.06 08:13) [20]


Блин, хотел отзыв о книге оставить. Да говорят - отзыв слишком длинный - не отослать :(

http://www.bhv.ru/books/book.php?id=12155


PSPF2003   (2006-07-21 09:28:00) [8]

Блин опять соврал не Архангельского а Фаранова. :)


PSPF2003   (2006-07-21 09:24:00) [9]


> P.S. ИШ, у вас появился новый кумир :) Видать Юрий Ревич
> ярый конкурент Архангельского :)))

Кумиры тут не причем. Покупаю ты литературу которая есть в наличии. А Архангельского есть только одна книга по созданию компонентов. Их (книг) вообще не видел в продаже.


Мефисто   (2006-07-21 09:12:00) [10]


> PSPF2003 ©   (21.07.06 08:13) [20]


Gauge1.AddProgress(1);

меняем на

Gauge1.Progress := I;

И каков результат :)


Мефисто   (2006-07-21 09:00:00) [11]

Application.ProcessMessages;  {прорисовка Label}

А ведь начинающие могут и купиться.

P.S. ИШ, у вас появился новый кумир :) Видать Юрий Ревич ярый конкурент Архангельского :)))


Мефисто   (2006-07-21 08:57:00) [12]


> PSPF2003 ©   (21.07.06 08:13) [20]


А.... Как и ожидалось. Автор книги жжот!!!

Не блоков try, не учитывается и что мы могли бы в OpenDialog нажать кнопку Cancel или ввести имя файла вручную.

Вот это LOL:

   BlockRead(ff,PChar(st)^,1); {читаем в строку по одному байту}
   Gauge1.AddProgress(1);
   Application.ProcessMessages;  {прорисовка ползунка}

Яркий пример как не надо кодить!


PSPF2003   (2006-07-21 08:13:00) [13]

Вот адрес смотрите сами www.Pspf2003.narod.ru\POLZUNOK.rar
98 304 байт


Германн   (2006-07-21 02:19:00) [14]

2
> Джо ©   (21.07.06 02:01) [18]


<offtop>
Серёга, ну и как твои ощущения через полсуток после "назначения любимой женой"? :-)
</offtop>


Джо   (2006-07-21 02:01:00) [15]

> Нестандартные приемы программирования на Delphi"!

Вот оно в чем дело, оказывается! :))


Германн   (2006-07-21 02:00:00) [16]


> Так у кого же руки кривые - у меня, у Вас, у Юрия Ревича
> или у программистов Borland'а?


Не Юрий, Вы не врубились в PSPF2003 ©   (20.07.06 21:19) [8].
Вы же привели стандартноерешение! А вышеупомянутая книга Юрия Ревича (не читал её, увы) называется, если верить автору [8] - "Нестандартные приемы программирования на Delphi"!
:-)


Юрий Зотов   (2006-07-21 01:33:00) [17]

> PSPF2003 ©   (20.07.06 21:19) [8]

> Так самый ли лучший источник VCL?

ОК, давайте разберемся. Именно на Вашем же примере (точнее, на примере Юрия Ревича, видимо?). Вот программа, которая читает 100-килобайтный файл побайтно, с отбражением в ProgresBar'е и без него. Время чтения в миллисекундах выводится в заголовке формы.

const
 FileName = 'C:\100K.tst';
 FileSize = 100 * 1024;
 StepCount = 500;
 StepSize = FileSize div StepCount;

procedure TForm1.FormCreate(Sender: TObject);
var
 F: file of byte;
 i: integer;
 B: byte;
 T: cardinal;
begin
 AssignFile(F, FileName);
 Rewrite(F);
 T := GetTickCount;
 for i := 1 to FileSize do
 begin
   B := Lo(i);
   Write(F, B)
 end;
 Caption := Format('Writing: %d msec', [GetTickCount - T]);
 CloseFile(F);
 ProgressBar1.Width := StepCount;
 ProgressBar1.Smooth := True
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 F: file of byte;
 i: integer;
 B: byte;
 T: cardinal;
begin
 Button1.Enabled := False;
 Button2.Enabled := False;
 ProgressBar1.Position := 0;
 AssignFile(F, FileName);
 Reset(F);
 T := GetTickCount;
 for i := 1 to FileSize do
   Read(F, B);
 Caption := Format('Reading: %d msec', [GetTickCount - T]);
 CloseFile(F);
 Button1.Enabled := True;
 Button2.Enabled := True
end;

procedure TForm1.Button2Click(Sender: TObject);
var
 F: file of byte;
 i, j: integer;
 B: byte;
 T: cardinal;
begin
 Button1.Enabled := False;
 Button2.Enabled := False;
 ProgressBar1.Position := 0;
 AssignFile(F, FileName);
 Reset(F);
 T := GetTickCount;
 for i := 1 to StepCount do
 begin
   for j := 1 to StepSize do
     Read(F, B);
   ProgressBar1.Position := i
 end;
 Caption := Format('Showing: %d msec', [GetTickCount - T]);
 CloseFile(F);
 Button1.Enabled := True;
 Button2.Enabled := True
end;

Результаты такие. Запись: 3.6-3.7 сек, чтение без отображения: 0.42-0.44 сек, чтение с отображением: 0.45-0.48 сек. Как видите, дополнительные затраты на прогрессбар составляют всего лишь 0.03-0.04 сек. Согласитесь, что разница с приведенными Вами данными просто огромная.

И тогда возникает два вопроса.

Вопрос номер 1.Так у кого же руки кривые - у меня, у Вас, у Юрия Ревича или у программистов Borland'а? Ведь раз такая огромная разница в результатах, значит, у кого-то они точно кривые. У кого же, как Вы думаете?

Вопрос номер 2.Так какой же источник лучше - исходники VCL или книга Юрия Ревича? Может быть, автору этой книги самому стоило бы почаще в них заглядывать, как Вы думаете?


Мефисто   (2006-07-20 22:52:00) [18]


> Плохиш ©   (20.07.06 22:24) [14]


Ага, вот и мне интересно стало взглянуть на код :)
Уж больно астрономические задержки укзаны в данном посте:
PSPF 2003 ©   (20.07.06 21:19) [8]


Плохиш   (2006-07-20 22:24:00) [19]


> Мефисто   (20.07.06 22:19) [13]

Так же, небось, после каждого прочитанного байта кривые руки пытаются что-то обновить.


Мефисто   (2006-07-20 22:19:00) [20]


> Плохиш ©   (20.07.06 21:55) [12]


Там самый тормоз TProgresBar т.к. все время мессаги шлет и обрабатывает их. Вызвана эта бяка тем, что TProgressBar - это обертка для Windows Progress Bar Control.

procedure TProgressBar.SetPosition(Value: Integer);
begin
 if not F32BitMode and ((Value < 0) or (Value > Limit16)) then
   ProgressLimitError;
 if HandleAllocated then SendMessage(Handle, PBM_SETPOS, Value, 0)
 else FPosition := Value;
end;

Guage шустрее, т.к. мессагами не парится:
procedure TGauge.SetProgress(Value: Longint);
var
 TempPercent: Longint;
begin
 TempPercent := GetPercentDone;  { remember where we were }
 if Value < FMinValue then
   Value := FMinValue
 else if Value > FMaxValue then
   Value := FMaxValue;
 if FCurValue <> Value then
 begin
   FCurValue := Value;
   if TempPercent <> GetPercentDone then { only refresh if percentage changed }
     Refresh;
 end;
end;


> PSPF2003 ©   (20.07.06 21:19) [8]


Так что временные интервалы для Guage слишком! преувеличины. ProgressBar - да тормоз. Но и для него временной интервал слишком велик. Всеравно, там что-то не чисто :)


Страницы:   1 2

Наверх

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