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
Perlsau
(Gast)

n/a Beiträge
 
#1

AW: Exception bei FMX IntputBox

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

AW: Exception bei FMX IntputBox

  Alt 14. Dez 2015, 08: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 08:36 Uhr)
  Mit Zitat antworten Zitat
jeng37

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

AW: Exception bei FMX InputBox

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

AW: Exception bei FMX IntputBox

  Alt 14. Dez 2015, 08: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 08:53 Uhr)
  Mit Zitat antworten Zitat
jeng37

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

AW: Exception bei FMX IntputBox

  Alt 14. Dez 2015, 09: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
 
#6

AW: Exception bei FMX IntputBox

  Alt 14. Dez 2015, 09: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 01:20 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