![]() |
Exception bei FMX IntputBox
Hallo,
Ich habe folgendes problem mit einer InputBox, ich bekomme diese fehler meldung: [DCC Fehler] MiniDOMain.pas(528): E2555 Symbol 'Result' kann nicht erfasst werden [DCC Fehler] MiniDOMain.pas(1594): E2250 Es gibt keine überladene Version von 'InputBox', die man mit diesen Argumenten aufrufen kann. Wie kann ich das beheben?
Delphi-Quellcode:
Kann mir da jemand weiter helfen?InputBox('Machine ID: '+ MachineID, 'Release Code',CodeStr, procedure(const AResult: TModalResult; const AValue: string) begin case AResult of mrOk: begin // AValue is the result of the inputbox dialog HexToBuffer(AValue, SpecialCode, SizeOf(SpecialCode)); if IsSpecialCodeValid(ModKey, SpecialCode) then Result := GetSpecialCodeValue(ModKey, SpecialCode); end; mrCancel: begin end; end; end ); |
AW: Exception bei FMX IntputBox
Die Fehlermeldung besagt, daß du die Funktion
![]() ![]() Daher rufst du zuerst die InputBox auf:
Delphi-Quellcode:
Danach steht in AValue das drin, was du in der InputBox eingegeben hast.
AValue := InputBox('Machine ID: '+ MachineID, 'Release Code',CodeStr);
|
AW: Exception bei FMX IntputBox
Zitat:
|
AW: Exception bei FMX IntputBox
Danke, Daniel :thumb:
Kann man denn in FMX InputBox wirklich als vierten Parameter eine Procedure übergeben? Denn immerhin besagt doch die Fehlermeldung, daß keine überladene Version von InputBox existiert, die man mit diesen Parametern aufrufen könnte. Oder sollte die Procedure etwa anschließend aufgerufen werden? Mit meinem D2009 kann ich das natürlich nicht nachprüfen, ich hatte mich einzig an die Online-Hilfe gehalten. Okay, ich halte mich da jetzt raus, es gibt genügend gewiefte FMX-Entwickler hier, die sicher mehr dazu schreiben können als ich :stupid: |
AW: Exception bei FMX IntputBox
Zu 1.
Delphi-Quellcode:
@PerlsauInputBox('Machine ID: '+ MachineID, 'Release Code',CodeStr, procedure(const AResult: TModalResult; const AValue: string) begin case AResult of mrOk: begin // AValue is the result of the inputbox dialog HexToBuffer(AValue, SpecialCode, SizeOf(SpecialCode)); if IsSpecialCodeValid(ModKey, SpecialCode) then { Man kann hier auf Result nicht zugreifen } Result := GetSpecialCodeValue(ModKey, SpecialCode); end; mrCancel: begin end; end; end ); Dein Link zeigt auf die Doku von XE5 und da gab es das noch nicht. Die Doku der aktuellen Version zeigt auch die Überladungen. ![]() Ich finde in dem Beitrag aber auch keinen Hinweis auf die verwendete Delphi Version :stupid: |
AW: Exception bei FMX InputBox
Vileicht hilft das weiter?
Ich habe versucht dieses umzuschreiben so dass es halt auf Android läuft. Original code für Windows:
Delphi-Quellcode:
@Sir Rufo
if InputQuery('Machine ID: '+ MachineID ,
'Release Code', CodeStr) then begin HexToBuffer(CodeStr, SpecialCode, SizeOf(SpecialCode)); if IsSpecialCodeValid(ModKey, SpecialCode) then Result := GetSpecialCodeValue(ModKey, SpecialCode); end; Wenns weiter Hilft, ich benutze zur Zeit XE8 Trial |
AW: Exception bei FMX IntputBox
Manchmal hilft es, wenn man in ganzen Sätzen spricht.
Ein paar Codezeilen aus dem Zusammenhang gerissen sind kein ganzer Satz. Vermutlich sieht es so aus
Delphi-Quellcode:
Speziell unter Android funktioniert das aber so generell nicht, denn die Doku sagt ja, dass
function foo() : integer;
begin if InputQuery( {} 'Machine ID: ' + MachineID, {} 'Release Code', {} CodeStr) then begin HexToBuffer( CodeStr, SpecialCode, SizeOf( SpecialCode ) ); if IsSpecialCodeValid( ModKey, SpecialCode ) then Result := GetSpecialCodeValue( ModKey, SpecialCode ); end; end;
Delphi-Quellcode:
unter Android nicht blockierend ist.
InputBox
Also kommt dein Funktionsaufruf zurück, obwohl die
Delphi-Quellcode:
noch angezeigt wird und es ja noch kein Ergebnis gibt.
InputBox
Und wenn es ein Ergebnis gibt ... wohin soll das Result denn geliefert werden? An einen Funktionsaufruf, der schon längst ein Gewesener ist. Du musst dein Konzept umstellen. Zitat:
Information does matter |
AW: Exception bei FMX IntputBox
Oh, Sorry
Ich meinte dass der Code Schnipsel genug Info währe. Der Vollständigkeit halber dann hier der ganze Code.
Delphi-Quellcode:
function TMiniDOForm.DecodeSpecialCode : Longint;
var CodeStr : string; ModKey : TKey; MachineID : string; Modifier : longint; begin Result := 0; MachineID := ''; Modifier := GenerateMachineModifierPrim; MachineID := BufferToHex(Modifier, SizeOf(Modifier)); ModKey := TheKey; ApplyModifierToKeyPrim(Modifier, ModKey, SizeOf(ModKey)); {First see if existing Special code is valid} if IsSpecialCodeValid(ModKey, SpecialCode) then begin Result := GetSpecialCodeValue(ModKey, SpecialCode); Exit; end; {Otherwise prompt user for Special code} CodeStr := ''; {$IFDEF MSWINDOWS} if InputQuery('Machine ID: '+ MachineID , 'Release Code', CodeStr) then begin HexToBuffer(CodeStr, SpecialCode, SizeOf(SpecialCode)); if IsSpecialCodeValid(ModKey, SpecialCode) then Result := GetSpecialCodeValue(ModKey, SpecialCode); end; {$ENDIF MSWINDOWS} {$IFDEF ANDROID} InputBox('Machine ID: '+ MachineID, 'Release Code',CodeStr, procedure(const AResult: TModalResult; const AValue: string) begin case AResult of mrOk: begin // AValue is the result of the inputbox dialog HexToBuffer(AValue, SpecialCode, SizeOf(SpecialCode)); if IsSpecialCodeValid(ModKey, SpecialCode) then Result := GetSpecialCodeValue(ModKey, SpecialCode); end; mrCancel: begin end; end; end ); {$ENDIF ANDROID} end; |
AW: Exception bei FMX IntputBox
Da wirst du dir ein anderes, sauberes Konzept ausdenken müssen. Eine Vermischung von UI und Logik war noch nie sauber.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz