Форум: "Основная";
Текущий архив: 2005.01.02;
Скачать: [xml.tar.bz2];
Внизглюки в Дельфях Найти похожие ветки
← →
Megabyte © (2004-12-17 22:48) [0]Народ. Первый раз наткнулся на такой прикол. Причем даже человека позвал, чтобы убедиться, что руки все таки не кривые. Он мне заявил, что это глюк.
Есть условие выбора. Так вот при выполнении(if) этого условия у меня должно выдать showmessage, при невыполнении(else) сделать некоторые вычисления и закрыть форму.
Глюк: при выполнении условия Дельфя выдает showmessage и в добавок выполняет все, что после else, т.е. вычисления и закрытие формы.
Попытался поменять условие на обратное и, соответственно, поменял действия наоборот, та же фигня.
Даже не знаю, что им делать... :(((
У меня там проверка некоторых условий идет.
← →
Sergey_Masloff (2004-12-17 22:51) [1]Такого не бывает. Полный код в студию.
← →
Palladin © (2004-12-17 22:54) [2]А у меня за окном снег наверх падает. Снял на пленку, показал друзьям. Они сказали это глюк.
← →
Megabyte © (2004-12-17 22:55) [3]procedure TFrm4.BitBtn1Click(Sender: TObject);
var
i, j : integer;
begin
for j := 0 to 2 do begin
if (B_Down[0,j] or B_Down[1,j] or B_Down[2,j]) = true then begin
key2 := true;
DtMd.T_Sub_vibor.Refresh;
Frm4.Close;
with DtMd.T_Sub_vibor do
begin
i := 0;
first;
while not EOF do begin
for i := N_sys to 13 do begin
if DBTxt1.Caption = Type_sys[j] then begin
S_type_sys[i] := DBTxt1.Caption;
S_var_type[i] := DBTxt2.Caption;
S_mas_sum[i] := StrToInt(DBTxt3.Caption);
end; {if}
end; {for}
i := i + 1;
next;
end; {while}
end; {with}
if key2 = true then begin
frm3.Label8.Enabled := true;
frm3.Label9.Enabled := true;
frm3.BBtn2.Enabled := true;
frm3.Label1.Enabled := false;
frm3.Label2.Enabled := false;
frm3.BBtn1.Enabled := false;
end; {if}
end {if}
else begin
showmessage("Ñëåäóåò âûáðàòü îäèí êîýôôèöèåíò äëÿ êàæäîãî óñëîâèÿ");
end; {else}
end; {for}
end;
Вот уже сделал наоборот. Если условие не выполняется, то выдает сообщение, + делает все действия полсе then и в том числе закрывает форму(т.е. сразу видно, что не так работает). :(
← →
ssk © (2004-12-17 22:55) [4]насколько я понял из описания глюка, не работает следующая конструкция, верно?
var
a, b: integer;
begin
a := 0;
if a = 0 then
ShowMessage("OK")
else
begin
b := 1; // некоторые вычисления
Close; // закрытие
end;
end;
← →
Megabyte © (2004-12-17 23:02) [5]begin
if a = true then begin
вычисления;
закрытие формы;
end;
else
showmessage();
а = thue, то делает выисления и закрытие.
а = false, то выдает сообщение + делает выисления и закрытие.
← →
ssk © (2004-12-17 23:08) [6]может это
if (B_Down[0,j] or B_Down[1,j] or B_Down[2,j]) = true then begin
нужно заменить просто наif B_Down[0,j] or B_Down[1,j] or B_Down[2,j] then begin
?
как-то логика не складывается...
у себя проверил [5] - нормально отрабатывает.
← →
Palladin © (2004-12-17 23:12) [7]Во первых i:=0 и i:=i+1; не понятно для чего. Во вторых от половины begin end можно избавится. И вообще переформатировав код становится понятно, что глюки у тебя и твоих друзей.
var
i, j : integer;
begin
for j:=0 to 2 do
if (B_Down[0,j] or B_Down[1,j] or B_Down[2,j]) then
begin
key2 := true;
DtMd.T_Sub_vibor.Refresh;
Frm4.Close;
DtMd.T_Sub_vibor.First;
With DtMd.T_Sub_vibor Do while not EOF do
begin
for i := N_sys to 13 do
if DBTxt1.Caption = Type_sys[j] then
begin
S_type_sys[i] := DBTxt1.Caption;
S_var_type[i] := DBTxt2.Caption;
S_mas_sum[i] := StrToInt(DBTxt3.Caption);
end; {if}
next;
end; {with}
if key2 = true then
begin
frm3.Label8.Enabled := true;
frm3.Label9.Enabled := true;
frm3.BBtn2.Enabled := true;
frm3.Label1.Enabled := false;
frm3.Label2.Enabled := false;
frm3.BBtn1.Enabled := false;
end; {if}
end else showmessage("Neaaoao aua?aou iaei eiyooeoeaio aey ea?aiai oneiaey");
end;
Это же цикл. На первой итерации сделались вычисления или чего там у тебя. На второй итерации вышло сообщение и на третьей итерации могут быть еще вычисления или сообщение.
← →
Megabyte © (2004-12-17 23:15) [8]Закидайте меня камнями. Я торможу уже в конце рабочей недели.
1-й вариант) Я почему-то думал, что для "if" будет достаточно одного неверного "for j := 0 to 2 do begin" ,чтобы прога только показала сообщение.
А у меня только в одном случае(при одном j) не выполняется условие. Вот по счетчику у меня j менялось, и выполнялось условие else ^)
Сделал так, все работает, как надо:
procedure TFrm4.BitBtn1Click(Sender: TObject);
var
i, j : integer;
label
vihod;
begin
for j := 0 to 2 do begin
if (B_Down[0,j] or B_Down[1,j] or B_Down[2,j]) = false then begin
showmessage("Ñëåäóåò âûáðàòü îäèí êîýôôèöèåíò äëÿ êàæäîãî óñëîâèÿ");
goto vihod;
end; {if}
end; {for}
key2 := true;
DtMd.T_Sub_vibor.Refresh;
Frm4.Close;
with DtMd.T_Sub_vibor do
begin
i := 0;
first;
while not EOF do begin
for i := N_sys to 13 do begin
if DBTxt1.Caption = Type_sys[j] then begin
S_type_sys[i] := DBTxt1.Caption;
S_var_type[i] := DBTxt2.Caption;
S_mas_sum[i] := StrToInt(DBTxt3.Caption);
end; {if}
end; {for}
i := i + 1;
next;
end; {while}
end; {with}
if key2 = true then begin
frm3.Label8.Enabled := true;
frm3.Label9.Enabled := true;
frm3.BBtn2.Enabled := true;
frm3.Label1.Enabled := false;
frm3.Label2.Enabled := false;
frm3.BBtn1.Enabled := false;
end; {if}
vihod:
end;
← →
VMcL: (2004-12-18 00:16) [9]>>Megabyte © (17.12.04 23:15) [8]
goto vihod;
заменить наExit;
if (B_Down[0,j] or B_Down[1,j] or B_Down[2,j]) = false then
заменить наif not (B_Down[0,j] or B_Down[1,j] or B_Down[2,j]) then
илиif not B_Down[0,j] and not B_Down[1,j] and not B_Down[2,j] then
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.01.02;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.035 c