Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi wie kann einFunktions-Rückgabewert im Text angezeigt werden? (https://www.delphipraxis.net/62089-wie-kann-einfunktions-rueckgabewert-im-text-angezeigt-werden.html)

juergen 30. Jan 2006 20:53


wie kann einFunktions-Rückgabewert im Text angezeigt werden?
 
Hallo zusammmen,
ich weiß nicht so recht wonach ich suchen soll/muss :oops:
Ich habe eine Funktion, welche einen String-Rückgabewert hat. (Programmversion)
Diesen Wert möchte ich zusätzlich zu einem Text anzeigen lassen, aber wie???

Zum Verständnis:
Delphi-Quellcode:
procedure TmyProg.ButtonClick(Sender: TObject);
begin
ShellExecute(myProg.Handle,
            'open',
'mailto:xxx.de'+'?subject=Email aus myPro generiert- ' + '*****und hier sollte zusätzlich das Ergebnis meiner Funktion stehen*****' + '&body=Hallo!',
            nil,
            nil,
            SW_SHOWNORMAL);
end;
Danke schonmal vorab!

tomsel 30. Jan 2006 20:57

Re: wie kann einFunktions-Rückgabewert im Text angezeigt wer
 
Delphi-Quellcode:
procedure TmyProg.ButtonClick(Sender: TObject);
begin
ShellExecute(myProg.Handle,
            'open',
'mailto:xxx.de'+'?subject=Email aus myPro generiert- ' + MeineFunktion + '&body=Hallo!',
            nil,
            nil,
            SW_SHOWNORMAL);
end;

ibp 30. Jan 2006 20:59

Re: wie kann einFunktions-Rückgabewert im Text angezeigt wer
 
Delphi-Quellcode:
function meinefunktion:string;
begin
  result:='*****und hier sollte zusätzlich das Ergebnis meiner Funktion stehen*****';
end;
procedure TmyProg.ButtonClick(Sender: TObject);
begin
ShellExecute(myProg.Handle,
            'open',
'mailto:xxx.de'+'?subject=Email aus myPro generiert- ' +meinefunktion+ '&body=Hallo!',
            nil,
            nil,
            SW_SHOWNORMAL);
end;

juergen 30. Jan 2006 21:00

Re: wie kann einFunktions-Rückgabewert im Text angezeigt wer
 
Hallo Tomsel,
dann bekomme ich diese Fehlermeldung:
Zitat:

[Pascal Error] rechner.pas(1835): E2010 Incompatible types: 'string' and 'PAnsiChar'

tomsel 30. Jan 2006 21:03

Re: wie kann einFunktions-Rückgabewert im Text angezeigt wer
 
Ah ja. Benutze eine Stringvariable. Weise dieser den Ganzen Text zu und übergebe diese mit pchar() an ShellExecute.

juergen 30. Jan 2006 21:33

Re: wie kann einFunktions-Rückgabewert im Text angezeigt wer
 
also, ich bekomms net hin...
Ich hab jetzt komplett ein Brett vorm Kopf :wall:
Ich bekomme der Variable "Programmversionsanzeige" nicht den Wert der Funktion "ProgrammVersion" zugewiesen...(siehe Fehler von Delphi im Kommentar des 2.Code-Blocks..)

hier mal meine funktion:
Delphi-Quellcode:
function ProgrammVersion : string;

const
   InfoNum = 1;
   InfoStr : array[1..InfoNum] of string = ('FileVersion');
var
   S: string;
   n, Len, i: DWORD;
   Buf: PChar;
   Value: PChar;
begin
   S := Application.ExeName;
   n := GetFileVersionInfoSize(PChar(S), n);
   if n > 0 then
   begin

     Buf := AllocMem(n);
     GetFileVersionInfo(PChar(S), 0, n, Buf);
     for i := 1 to InfoNum do
       if VerQueryValue(Buf, PChar('StringFileInfo\040704E4\' + InfoStr[i]), Pointer(Value), Len) then
          result := result + Value;
     FreeMem(Buf, n);
   end;
end;
wenn ich dann eine Variable vom Typ "String" anlege kann ich dieser den Wert der Funktion nicht zuweisen...

Delphi-Quellcode:
procedure TmyProg.ButtonClick(Sender: TObject);
var Programmversionsanzeige: String;
begin
Programmversionsanzeige:= (ProgrammVersion); // hier erscheint Fehler: [Pascal Error] rechner.pas(1831): E2003 Undeclared identifier: 'ProgrammVersion'
ShellExecute(myProg.Handle,
            'open',
'mailto:xxx.de'+'?subject=Email aus myPro generiert-- ' + 'pchar(Programmversion)' + '&body=Hallo!',
            nil,
            nil,
            SW_SHOWNORMAL);

3_of_8 30. Jan 2006 21:34

Re: wie kann einFunktions-Rückgabewert im Text angezeigt wer
 
Nein. Nicht 'pchar(Bla)'. Dann hast du einen String, der 'pchar(Bla)' enthält.

Es muss heißen pchar(Bla) ohne die ' Dinger.

tomsel 30. Jan 2006 21:36

Re: wie kann einFunktions-Rückgabewert im Text angezeigt wer
 
So ungefähr:
Delphi-Quellcode:
procedure TmyProg.ButtonClick(Sender: TObject);
var sCommandline:string;
begin

sCommandline := 'mailto:xxx.de'+'?subject=Email aus myPro generiert- ' + 
                 Programmversion + 
                '&body=Hallo!';

ShellExecute(
    myProg.Handle,
    'open',
    pchar(sCommandline),
    nil,
    nil,
    SW_SHOWNORMAL
);
end;

juergen 30. Jan 2006 21:51

Re: wie kann einFunktions-Rückgabewert im Text angezeigt wer
 
Hallo Tomsel,

Delphi erkennt an dieser Stelle einfach meine Funktion "ProgrammVersion" nicht mehr....
Delphi-Quellcode:
sCommandline := 'mailto:xxx.de'+'?subject=Email aus myPro generiert- ' +
                 Programmversion +  //hier wird die Funktion gar nicht mehr erkannt...
                '&body=Hallo!';
Es kommt dort wo die Funktion aufgerufen wird wieder:
[Pascal Error] rechner.pas(1831): E2003 Undeclared identifier: 'Programmversion'

Gruß Jürgen

tomsel 30. Jan 2006 22:04

Re: wie kann einFunktions-Rückgabewert im Text angezeigt wer
 
- ist die Unit, in der sich die Funktion befindet, eingebunden?
- wird die Funktion in ihrer Unit im Interface-Abschnitt aufgeführt?

juergen 30. Jan 2006 22:13

Re: wie kann einFunktions-Rückgabewert im Text angezeigt wer
 
Hallo Tomsel,
so, ich habs! Es musste ja an der Funktion liegen...
Ich traus mir gar nicht zu sage :oops:
Ich hatte diese Funktion unter FormCreate stehen....
Manchmal sieht man den Wald halt vor lauter Bäumen nicht.
Interessant war für mich auf jeden Fall dein Code zur Umwandlung.

Also vielen Dank für dein Geduld und Gute Nacht!

Grüsse Jürgen

malo 30. Jan 2006 23:12

Re: wie kann einFunktions-Rückgabewert im Text angezeigt wer
 
So etwas kann man umgehen, indem man eine Forward-Deklaration macht, oder seine Funktion einfach im Interface-Abschnitt ankündigt. Oder man entwickelt objektorientiert (und benutzt dann Methoden) ;)

tomsel 31. Jan 2006 07:41

Re: wie kann einFunktions-Rückgabewert im Text angezeigt wer
 
Zitat:

Zitat von malo
So etwas kann man umgehen, indem man eine Forward-Deklaration macht, oder seine Funktion einfach im Interface-Abschnitt ankündigt. Oder man entwickelt objektorientiert (und benutzt dann Methoden) ;)

Was bringt das? Jürgen ist einfach nur einem Versehen "zum Opfer gefallen", was immer passieren kann. Die Funktion lag lediglich innerhalb eines Blocks (FormCreate) und war daher anderswo nicht gültig, obwohl sie doch vorhanden war. Eine Forwarddeklaration wäre hier in die Hose gegangen, da dem Compiler die Implementierung der Funktion gefehlt hätte. Bei Methoden kann einem ähnliches passieren, indem man sie z.Bsp. private statt protected macht oder beim Copy&Paste vergisst, virtual durch override zu ersetzen. Solche Schussel-Fehlerquellen hat man da eher mehr als weniger.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:27 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