Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.08.06;
Скачать: CL | DM;

Вниз

Закрытие окна   Найти похожие ветки 

 
batya17 ©   (2006-07-20 03:19) [0]

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


 
SergP ©   (2006-07-20 07:36) [1]

OnCloseQuery


 
PSPF2003 ©   (2006-07-20 07:52) [2]

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin                  
 if MessageBoxA(Handle, "Выходим ?", "Дурацкий вопрос ...", MB_YESNO + MB_ICONQUESTION) = IDYES then
   CanClose := true
 else
   CanClose := false;
end;


 
Amoeba ©   (2006-07-20 10:43) [3]


> PSPF2003 ©   (20.07.06 07:52) [2]
> procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose:
>  Boolean);
> begin                  
>  if MessageBoxA(Handle, "Выходим ?", "Дурацкий вопрос ..
> .", MB_YESNO + MB_ICONQUESTION) = IDYES then
>    CanClose := true
>  else
>    CanClose := false;
> end;


Лучше так, и никаких "else" здесь не надо:

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin                  
CanClose :=  MessageBoxA(Handle, "Выходим ?", "Дурацкий вопрос ...",
MB_YESNO + MB_ICONQUESTION) = IDYES;
end;


 
PSPF2003 ©   (2006-07-20 12:31) [4]


> Лучше так, и никаких "else" здесь не надо:

Хм... Возможно.


 
Amoeba ©   (2006-07-20 14:03) [5]


> PSPF2003 ©   (20.07.06 12:31) [4]
>
> > Лучше так, и никаких "else" здесь не надо:
>
> Хм... Возможно.

Не просто возможно, а это нормальный правильный стиль написания кода. Привыкай.


 
PSPF2003 ©   (2006-07-20 14:10) [6]


> Не просто возможно, а это нормальный правильный стиль написания
> кода. Привыкай.

Понял, был неправ, но исправлюсь :)


> правильный стиль написания кода

Еще кто-нибудь сказал бы, где его посмотреть этот “правильный стиль написания кода”


 
Юрий Зотов ©   (2006-07-20 14:29) [7]

> PSPF2003 ©   (20.07.06 14:10) [6]

> где его посмотреть этот “правильный стиль написания кода”

Самый доступный и самый лучший источник - это исходники VCL.


 
PSPF2003 ©   (2006-07-20 21:19) [8]


> Самый доступный и самый лучший источник - это исходники
> VCL.

Хм... Данные из книги "Нестандартные приемы программирования на Delphi" Юрия Ревича

Читается побайтно100-килобайтный файл. Без графического длительность процедуры составила 2сек,с ProgressBar 55сек, Gauge 130сек.
Так самый ли лучший источник VCL ?


 
Мефисто   (2006-07-20 21:26) [9]


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


Прям заинтриговал. Кинь код в форум или на www.zalil.ru. Что-то тут не чисто :)


 
Пусик ©   (2006-07-20 21:41) [10]


>  Как сделать так чтобы при закрытии окна


Окна, или, все же, формы?


> Если знаеет отправте мне на мылоbatya15@rambler.ruЗаранее
> спасибо.


Заранее пожалуйста, но не стоит на мыло. Лучше здесь.


 
Джо ©   (2006-07-20 21:45) [11]

> [8] PSPF2003 ©   (20.07.06 21:19)
> Читается побайтно100-килобайтный файл.

А не нужно заниматься таким извращением...


 
Плохиш ©   (2006-07-20 21:55) [12]


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

Просто выпрямитель рук надо купить.


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


> Плохиш ©   (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 - да тормоз. Но и для него временной интервал слишком велик. Всеравно, там что-то не чисто :)


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


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

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


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


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


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


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

> 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-21 02:00) [17]


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


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


 
Джо ©   (2006-07-21 02:01) [18]

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

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


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

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


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


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

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


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


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


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

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

Вот это LOL:

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

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


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

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

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

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


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


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


Gauge1.AddProgress(1);

меняем на

Gauge1.Progress := I;

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


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


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

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


 
PSPF2003 ©   (2006-07-21 09:28) [25]

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


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


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


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

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


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


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


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


 
PSPF2003 ©   (2006-07-21 09:37) [28]

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


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


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

Кому как…


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


 
PSPF2003 ©   (2006-07-21 10:07) [30]


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

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


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

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

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

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

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2006.08.06;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.053 c
15-1152366303
ptrbuild
2006-07-08 17:45
2006.08.06
Хочу работать


15-1152509587
Ega23
2006-07-10 09:33
2006.08.06
С Днём рождения! 9 июля


5-1137112317
КодеКорешь
2006-01-13 03:31
2006.08.06
Как програмно заставить "выпасть список" в ComboBox


2-1152845667
delphi_primat
2006-07-14 06:54
2006.08.06
WinApi на русском


2-1153252646
crazy_corpse
2006-07-18 23:57
2006.08.06
Java