Autor Beitrag
Xeron
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41

WinXP Home, Vista Home Premium 64Bit, Win7 Home Premium
Delphi 3 Prof, Delphi 7 Personal, Delphi 2010 Prof., AutoIt
BeitragVerfasst: Fr 29.04.11 12:27 
Hallo :)
Ich habe ein kleines Problem :(

Folgender Code:

Unit 1
ausblenden volle Höhe 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:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
unit NeueAdresse;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Controls,
  Dialogs;



TYPE
  TValue = record
    Offset: Array of DWord;
    Base: DWORD;
    ArrLength: Integer;
  end;

function SetNewValue(): TValue;

var
Value: TValue;
Status: Boolean = false;
i: Integer = 1;

implementation

function SetNewValue(): TValue;
var j: Integer;
begin
  Value.Base := StrToInt(InputBox('Neue Adresse''Bitte geben sie die Base Adresse an''$00000000'));
  if MessageDlg('Weitere Offset Adressen?', mtconfirmation, [mbyes, mbno], 0) = mryes then
  begin
    SetLength(Value.Offset, 1);
    Value.Offset[0] := StrToInt(InputBox('Neue Adresse''Bitte geben sie eine Offset Adresse an''$00'));
    if MessageDlg('Weitere Offset Adressen?', mtconfirmation, [mbyes, mbno], 0) = mryes then
    begin
      Status := true;
      inc(i);
      while Status do
      begin
        SetLength(Value.Offset, High(Value.Offset) + 1);
        Value.Offset[i] := StrToInt(InputBox('Neue Adresse''Bitte geben sie eine Offset Adresse an''$00'));
        if MessageDlg('Weitere Offset Adressen?', mtconfirmation, [mbyes, mbno], 0) = mryes then
        begin
          inc(i);
          Status := true;
        end
        else
          Status := false;
      end;
    end;
  end;

      for j := 0 to high(Value.Offset) do
      begin
        Result.Offset[j] := Value.Offset[j];
      end;
      Result.Base := Value.Base;
      Result.ArrLength := High(Value.Offset);
end;
end.


und die Hauptunit

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
TYPE
  TValueMain = record
    Offset: Array of DWord;
    Base: DWORD;
    ArrLength: Integer;
  end;


....


procedure TForm1.Button2Click(Sender: TObject);
var i: Integer;
begin
  Value.Base := SetNewValue.Base;
  Value.ArrLength := SetNewValue.ArrLength;
  for i := 0 to Value.ArrLength do
    begin
      Value.Offset[i] := SetNewValue.Offset[i];
    end;
end;


Mit dieser Methode wird die Function SetNewValue aber immer wieder ausgerufen. Wie kann ich das Funktionsergebnis (Rückgabelwert) mit einmal in einer Variable speichern?

Vielen vielen Dank :)
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Fr 29.04.11 13:08 
Willst du den Record-Typ wirklich zweimal deklarieren? So wie es jetzt aussieht, macht das wenig Sinn.

Wenn du den Typ nur einmal deklarierst, müsste doch folgendes funktionieren:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.Button2Click(Sender: TObject);
var Value: TValue;
begin
  Value = SetNewValue;
end;

Für diesen Beitrag haben gedankt: Xeron
Xeron Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41

WinXP Home, Vista Home Premium 64Bit, Win7 Home Premium
Delphi 3 Prof, Delphi 7 Personal, Delphi 2010 Prof., AutoIt
BeitragVerfasst: Fr 29.04.11 13:14 
Klappt wunderbar. :)
vielen dank