Форум: "Начинающим";
Текущий архив: 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.012 c