Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Result-Zuweisung wird nicht erkannt


Mitmischer 1703 - Fr 27.02.09 20:37
Titel: Result-Zuweisung wird nicht erkannt

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
unit convert;

interface
 uses Forms, ShellAPI, Windows;
 procedure ShellExecuteS (WndH : HWND; Operation : String; FileName : String; Parameters : String; Directory : String; CmdShow : Integer);
 procedure BoolToInt(Bool : Boolean; IsBool : Integer; IsNot : Integer);

implementation

procedure ShellExecuteS (WndH : HWND; Operation : String; FileName : String; Parameters : String; Directory : String; CmdShow : Integer);
var OperationW, FileNameW, ParametersW, DirectoryW, Dummy : PWideChar;
begin
  OperationW := StringToWideChar(Operation, Dummy, 255);
  FileNameW := StringToWideChar(FileName, Dummy, 255);
  ParametersW := StringToWideChar(Parameters, Dummy, 255);
  DirectoryW := StringToWideChar(Directory, Dummy, 255);
  ShellExecuteW(WndH, OperationW, FileNameW, ParametersW, DirectoryW, CmdShow);
end;

procedure BoolToInt(Bool : Boolean; IsBool : Integer; IsNot : Integer);
begin
// 'Umwandlung' von Bool in Int
  if(Bool) then
  Result := IsBool
  else // if not(Bool)
  result := IsNot;
end;

end.


Hi DF! Ich habe in ein Projekt eine selbsterstellte Unit auf meinem USB-Stick abgespeichert und nun eingebunden. Allerdings erkennt er die Result-Zuweisung (highlighted!) nicht. Das hier ist die gesamte Unit!


Delete - Fr 27.02.09 20:44

Benenn Bool mal um in z.B. bBool.


Mitmischer 1703 - Fr 27.02.09 20:49

Hat nicht geklappt, das Problem besteht weiterhin!


Delete - Fr 27.02.09 20:50

Dann mach aus procedure mal function ;)


Mitmischer 1703 - Fr 27.02.09 20:53

Ah, klar! :autsch:

Danke sehr! :flehan:


FinnO - Fr 27.02.09 22:26

ma so nebenbei: Gibts das nicht schon?

BoolToString(True) = '1' oder so?


Yogu - Fr 27.02.09 22:34

user profile iconFinnO hat folgendes geschrieben Zum zitierten Posting springen:
ma so nebenbei: Gibts das nicht schon?

BoolToString(True) = '1' oder so?

Die Funktion macht doch was ganz anderes - sie gibt den Parameter IsBool zurück, wenn der Boolean True ist, sonst IsNot.

BoolToStr wandelt den als Integer gecasteten Boolean in einen String um; du könntest sie so definieren:


Delphi-Quelltext
1:
2:
3:
4:
function BoolToStr(Value: Boolean): String;
begin
  Result := IntToStr(Integer(Value));
end;

Und jetzt vergleich sie mal mit BoolToInt ;)


FinnO - Fr 27.02.09 22:48

ob man nun 1 hat oder "isNot" ist doch wurst wie kartoffel^^


Yogu - Fr 27.02.09 22:50

user profile iconFinnO hat folgendes geschrieben Zum zitierten Posting springen:
ob man nun 1 hat oder "isNot" ist doch wurst wie kartoffel^^


Ein Beispiel:

Delphi-Quelltext
1:
Preis := BoolToInt(IsAdult, 63);                    


Edit: Beispiel korrigiert


FinnO - Fr 27.02.09 23:00

Dann ist die Bezeichnung verwirrend, weil die Funktion keinen Boolean zurückgibt sondern einen Gleitkommawert. BoolToFloat oder BoolToInt macht da doch mehr sinn oder?


Yogu - Fr 27.02.09 23:02

user profile iconFinnO hat folgendes geschrieben Zum zitierten Posting springen:
Dann ist die Bezeichnung verwirrend, weil die Funktion keinen Boolean zurückgibt sondern einen Gleitkommawert. BoolToFloat oder BoolToInt macht da doch mehr sinn oder?

Sie heißt ja auch BoolToInt, hab mich verschrieben :oops:


dummzeuch - Fr 27.02.09 23:23

user profile iconFinnO hat folgendes geschrieben Zum zitierten Posting springen:
ma so nebenbei: Gibts das nicht schon?

BoolToString(True) = '1' oder so?


Ja:


Delphi-Quelltext
1:
i := IfThen(b, 12);                    


twm


GTA-Place - Sa 28.02.09 00:51

X := IfThen(isAdult, 63); ist eine nette Funktion, die scheinbar wenige kennen, aber das von z.B. PHP bekannte x = (isAdult) ? 6 : 3; ersetzt.


Delphi-Quelltext
1:
2:
3:
4:
function IfThen(AValue: Boolean; const ATrue: Integer; const AFalse: Integer = 0): Integer; overload;
function IfThen(AValue: Boolean; const ATrue: Int64; const AFalse: Int64 = 0): Int64; overload;
function IfThen(AValue: Boolean; const ATrue: Double; const AFalse: Double = 0.0): Double; overload;
function IfThen(AValue: Boolean; const ATrue: stringconst AFalse: string = ''): stringoverload;