AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Exception bei FMX IntputBox

Ein Thema von jeng37 · begonnen am 14. Dez 2015 · letzter Beitrag vom 14. Dez 2015
Antwort Antwort
jeng37

Registriert seit: 23. Jul 2015
42 Beiträge
 
#1

Exception bei FMX IntputBox

  Alt 14. Dez 2015, 08:10
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:

   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
      );
Kann mir da jemand weiter helfen?
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#2

AW: Exception bei FMX IntputBox

  Alt 14. Dez 2015, 08:31
Die Fehlermeldung besagt, daß du die Funktion InputBox mit falschen bzw. fehlerhaften Argumenten aufzurufen versuchst. Wenn du dir die Online-Hilfe zu InputBox, die ich dir mal verlinkt habe, anschaust, wirst du unweigerlich feststellen, daß es sich erstens um eine Funktion handelt, die einen Wert zurückliefert, und daß diese Funktion zweitens drei Parameter erwartet, und zwar in dieser Reihenfolge: ACaption, APrompt, ADefault – wobei der erste String die Überschrift (Caption) der InputBox darstellt, die zweite den Text, der zur Eingabe auffordern soll, und der dritte den Text, der bereits im Eingabe-Feld steht, wenn dieser Dialog aufgerufen wird. Davon, daß man der Funktion InputBox als vierten Parameter eine Procedure übergeben kann, habe ich noch nie etwas gehört oder gelesen.

Daher rufst du zuerst die InputBox auf:
AValue := InputBox('Machine ID: '+ MachineID, 'Release Code',CodeStr); Danach steht in AValue das drin, was du in der InputBox eingegeben hast.

Geändert von Perlsau (14. Dez 2015 um 08:35 Uhr)
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Exception bei FMX IntputBox

  Alt 14. Dez 2015, 08:36
Davon, daß man der Funktion InputBox als vierten Parameter eine Procedure übergeben kann, habe ich noch nie etwas gehört oder gelesen.
Die mobilen Plattformen haben ihre liebe Not mit modalen Fenstern und Dialogen. Somit ist dort auch ein Aufruf von "InputBox()" nicht blockierend. Stattdessen gibt man dem Funktionsaufruf eine Prozedur mit auf den Weg, die aufgerufen wird, wenn der Anwender seine Eingabe beendet und bestätigt oder abgebrochen hat.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#4

AW: Exception bei FMX IntputBox

  Alt 14. Dez 2015, 09:05
Danke, Daniel

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
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Exception bei FMX IntputBox

  Alt 14. Dez 2015, 09:32
  1. [DCC Fehler] MiniDOMain.pas(528): E2555 Symbol 'Result' kann nicht erfasst werden
  2. [DCC Fehler] MiniDOMain.pas(1594): E2250 Es gibt keine überladene Version von 'InputBox', die man mit diesen Argumenten aufrufen kann.
Zu 1. können wir etwas sagen, aber zu 2. können wir nichts sagen, denn den Source hast du uns nicht gezeigt.

Zu 1.
Delphi-Quellcode:

   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
                      { Man kann hier auf Result nicht zugreifen }
                      Result := GetSpecialCodeValue(ModKey, SpecialCode);
                end;
              mrCancel:
                begin
                end;
           end;
    end
      );
@Perlsau

Dein Link zeigt auf die Doku von XE5 und da gab es das noch nicht. Die Doku der aktuellen Version zeigt auch die Überladungen.

http://docwiki.embarcadero.com/Libra...alogs.InputBox

Ich finde in dem Beitrag aber auch keinen Hinweis auf die verwendete Delphi Version
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (14. Dez 2015 um 09:36 Uhr)
  Mit Zitat antworten Zitat
jeng37

Registriert seit: 23. Jul 2015
42 Beiträge
 
#6

AW: Exception bei FMX InputBox

  Alt 14. Dez 2015, 09:39
Vileicht hilft das weiter?
Ich habe versucht dieses umzuschreiben so dass es halt auf Android läuft.

Original code für Windows:

Delphi-Quellcode:
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;
@Sir Rufo
Wenns weiter Hilft, ich benutze zur Zeit XE8 Trial

Geändert von jeng37 (14. Dez 2015 um 09:45 Uhr) Grund: Update:
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Exception bei FMX IntputBox

  Alt 14. Dez 2015, 09:50
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:
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;
Speziell unter Android funktioniert das aber so generell nicht, denn die Doku sagt ja, dass InputBox unter Android nicht blockierend ist.

Also kommt dein Funktionsaufruf zurück, obwohl die InputBox noch angezeigt wird und es ja noch kein Ergebnis gibt.

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.

@Sir Rufo
Wenns weiter Hilft, ich benutze zur Zeit XE8 Trial
Da die Versionen sich schon recht stark unterscheiden (wie man sieht) ist es sehr hilfreich die konkrete Delphi-Version zu wissen um eine konkrete Antwort geben zu können.

Information does matter
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (14. Dez 2015 um 09:53 Uhr)
  Mit Zitat antworten Zitat
jeng37

Registriert seit: 23. Jul 2015
42 Beiträge
 
#8

AW: Exception bei FMX IntputBox

  Alt 14. Dez 2015, 10:13
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;
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: Exception bei FMX IntputBox

  Alt 14. Dez 2015, 10:38
Da wirst du dir ein anderes, sauberes Konzept ausdenken müssen. Eine Vermischung von UI und Logik war noch nie sauber.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz