Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.08.06;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.54 MB
Время: 0.013 c
2-1153126465
oleggar
2006-07-17 12:54
2006.08.06
как достать информацию?


2-1152867839
SergP.
2006-07-14 13:03
2006.08.06
Как сделать свой класс TTreenode?


15-1152536407
Guest89
2006-07-10 17:00
2006.08.06
Антивирус Касперского


15-1152231748
Жаждущий помощи
2006-07-07 04:22
2006.08.06
Что неправильно?


15-1152452599
AlexanderMS
2006-07-09 17:43
2006.08.06
"Мигающее" модальное окно.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский