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

Вниз

return value of function might be undefined   Найти похожие ветки 

 
Drone ©   (2008-08-26 14:42) [0]

function exitt(b:TWinControl):Boolean;
var i:integer;
begin
for i:=0 to b.ControlCount-1 do
if (b.controls[i] is TEdit)and((b.Controls[i] as TEdit).Text="exit")
then exitt:=true end;

procedure TForm1.Button1Click(Sender:TObject);
begin if exitt(self)=true then form1.Close end;


как избавиться от этой ошибки?
Ведь функция возвращает значение ...


 
stas ©   (2008-08-26 14:45) [1]

then Result:=true end;


 
stas ©   (2008-08-26 14:46) [2]

begin
Result:=false


 
Palladin ©   (2008-08-26 14:53) [3]


> Ведь функция возвращает значение ...

с чего ты взял?


 
Vlad Oshin ©   (2008-08-26 14:54) [4]


function exitt(b:TWinControl):Boolean;
var
 i:integer;
begin
Result:=false;
for i:=0 to b.ControlCount-1 do
  if (b.controls[i] is TEdit)and((b.Controls[i] as TEdit).Text="exit") then
  result:=true;
end;


 
Ega23 ©   (2008-08-26 14:55) [5]

function exitt(b:TWinControl):Boolean;
var i:integer;
begin
Result := False;
for i:=0 to b.ControlCount-1 do
if (b.controls[i] is TEdit)and((b.Controls[i] as TEdit).Text="exit")
then exitt:=true end;


exitt:=true
Так можно, но уже почти никто так не пишет. Пользуют Result.


 
Ega23 ©   (2008-08-26 14:57) [6]

А она у тебя ещё и неправильная:

function exitt(b:TWinControl):Boolean;
var i:integer;
begin
Result := False;
for i:=0 to b.ControlCount-1 do
if (b.controls[i] is TEdit)and((b.Controls[i] as TEdit).Text="exit")then
begin
 Result := True;
 Break;
end;
end;


 
stas ©   (2008-08-26 14:58) [7]

а так будет быстрее
function exitt(b:TWinControl):Boolean;
var
i:integer;
begin
Result:=false;
for i:=0 to b.ControlCount-1 do
begin
Result:= (b.controls[i] is TEdit)and((b.Controls[i] as TEdit).Text="exit")
if result then break;
end;
 
end;


 
stas ©   (2008-08-26 14:59) [8]

Ega23 ©   (26.08.08 14:57) [6]
не успел.


 
Ega23 ©   (2008-08-26 15:00) [9]


> а так будет быстрее


Гы... Это чем быстрее-то?


 
Ega23 ©   (2008-08-26 15:01) [10]


> stas ©   (26.08.08 14:59) [8]
>
> Ega23 ©   (26.08.08 14:57) [6]
> не успел.
>


А, это не мне было.
Ну без Break эта функция вообще ошибочная.


 
Deltas ©   (2008-08-26 15:01) [11]


> for i:=0 to b.ControlCount-1 do
> if (b.controls[i] is TEdit)and((b.Controls[i] as TEdit).
> Text="exit")
> then exitt:=true end;

for i := 0 to b.ControlCount - 1 do
 if (b.Controls[i] is TEdit) and ((b.Controls[i] as TEdit).Text = "exit") then begin
   Result := True;
   Exit;  // выход из функции
 end;
Result := False;
> if exitt(self)=true then form1.Close

Не нужно сравнивать булевские переменные на равенство False, True. Достаточно записать
if exitt(self) then form1.Close;


 
Ega23 ©   (2008-08-26 15:06) [12]


> Не нужно сравнивать булевские переменные на равенство False, True.


Не всегда.


 
Deltas ©   (2008-08-26 15:07) [13]


> > Не нужно сравнивать булевские переменные на равенство
> False, True.
>
>
> Не всегда.

Например?


 
Palladin ©   (2008-08-26 15:07) [14]

Result := False;
for i := 0 to b.ControlCount - 1 do
if (b.Controls[i] is TEdit) and ((b.Controls[i] as TEdit).Text = "exit") then begin
  Result := True;
  Break;  // выход из функции
end;


 
Ega23 ©   (2008-08-26 15:08) [15]


> Например?


С вариантами связано. Сейчас в точности не упомню, но прикол такой был.


 
Deltas ©   (2008-08-26 15:14) [16]


> С вариантами связано. Сейчас в точности не упомню, но прикол
> такой был.

Насчет вариантов спорить не стану. Но я же написал, что булевские переменные не обязательно сравнивать, а Boolean это не Variant. Кстати, насчет вариантов, думаю прокатит приведение типов Boolean(vrnt), где vrnt: Variant?


 
Drone ©   (2008-08-26 15:58) [17]

@ stas, Vlad Oshin спасибо!
@ Palladin мне так казалось из-за exitt:=true
@ Ega23 спасибо огромное за поправку я не знал про result
@ Deltas без сравнения на истинность иногда булевские функции срабатывают ошибочно
@ Palladin спасибо за комент :)
@ Ega23 отлично! я не знал про Break и что без Break эта функция не будет работать.

Спасибо всем большое! Я недавно начал работать с Дельфи. Так что всего не знаю



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

Форум: "Начинающим";
Текущий архив: 2008.10.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.005 c
2-1219324963
Nucer
2008-08-21 17:22
2008.10.05
Дочерний класс со ссылкой на родителя


2-1219779477
Jimmy
2008-08-26 23:37
2008.10.05
Курсор мыши


3-1207033803
dolmat
2008-04-01 11:10
2008.10.05
Как в тригере определить пользователя


11-1193735383
tigra
2007-10-30 12:09
2008.10.05
kolindy


11-1194121276
LazyBob
2007-11-03 23:21
2008.10.05
КалорДиалог проблема небольшая





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский