Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Anfänger findest fehler nicht: error in prozedur (https://www.delphipraxis.net/163669-delphi-anfaenger-findest-fehler-nicht-error-prozedur.html)

eDonkey 10. Okt 2011 16:39

Delphi-Version: 5

Delphi Anfänger findest fehler nicht: error in prozedur
 
Hallo Community, ich bin gerade dabei delphi zu lernen und programmiere nun einen taschenrechner der auch mit hotkeys arbeitet.

bei meiner backspace prozedur bekomm ich aber den error:
[Error] Rechner.dpr(307): Incompatible types: 'String' and 'procedure, untyped pointer or untyped parameter'
Zeile hab ich markiert, ist in der vorletzten prozedur.
könnt ihr mir weiterhelfen? schonmal danke im vorraus :)

hier der sourcecode:

[SPOILER]
Delphi-Quellcode:
unit Rechner;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, StrUtils;

type
  TForm1 = class(TForm)
    LabelZeichen: TLabel;
    Edit: TEdit;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    Button8: TButton;
    Button9: TButton;
    Button10: TButton;
    Button11: TButton;
    Button12: TButton;
    Button13: TButton;
    Button14: TButton;
    Button15: TButton;
    Button16: TButton;
    Button17: TButton;
    Button18: TButton;
    Button19: TButton;
    Button20: TButton;
    Button21: TButton;
    Button22: TButton;
    Button23: TButton;
    LabelMemory: TLabel;
    EditErgebnis: TEdit;
    procedure Button9Click(Sender: TObject);
    procedure Button19Click(Sender: TObject);
    procedure Button20Click(Sender: TObject);
    procedure Button22Click(Sender: TObject);
    procedure Button10Click(Sender: TObject);
    procedure Button13Click(Sender: TObject);
    procedure Button14Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button18Click(Sender: TObject);
    procedure Button16Click(Sender: TObject);
    procedure Button11Click(Sender: TObject);
    procedure Button21Click(Sender: TObject);
    procedure Button23Click(Sender: TObject);
    procedure Button17Click(Sender: TObject);
    procedure Button12Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button15Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure Backspace;
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);


  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Safemode: Boolean = false;
  Memory: String = '';

implementation

{$R *.dfm}

procedure TForm1.Button9Click(Sender: TObject);
begin
If Edit.Text <> '0' then
  Edit.Text := Edit.Text + '0';
end;

procedure TForm1.Button19Click(Sender: TObject);
begin
If Edit.Text = '0' then
  Edit.Text := '1'
else
  Edit.Text := Edit.Text + '1';
end;

procedure TForm1.Button20Click(Sender: TObject);
begin
If Edit.Text = '0' then
  Edit.Text := '2'
else
  Edit.Text := Edit.Text + '2';
end;

procedure TForm1.Button22Click(Sender: TObject);
begin
If Edit.Text = '0' then
  Edit.Text := '3'
else
  Edit.Text := Edit.Text + '3';
end;

procedure TForm1.Button10Click(Sender: TObject);
begin
If Edit.Text = '0' then
  Edit.Text := '4'
else
  Edit.Text := Edit.Text + '4';
end;

procedure TForm1.Button13Click(Sender: TObject);
begin
If Edit.Text = '0' then
  Edit.Text := '5'
else
  Edit.Text := Edit.Text + '5';
end;

procedure TForm1.Button14Click(Sender: TObject);
begin
If Edit.Text = '0' then
  Edit.Text := '6'
else
  Edit.Text := Edit.Text + '6';
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
If Edit.Text = '0' then
  Edit.Text := '7'
else
  Edit.Text := Edit.Text + '7';
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
If Edit.Text = '0' then
  Edit.Text := '8'
else
  Edit.Text := Edit.Text + '8';
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
If Edit.Text = '0' then
  Edit.Text := '9'
else
  Edit.Text := Edit.Text + '9';
end;

procedure TForm1.Button18Click(Sender: TObject);
begin
If not Safemode then
  EditErgebnis.Text := FloatToStr(StrToFloat(Edit.Text));
If not Safemode then
  Edit.Text := '0';
  Safemode := true;
  LabelZeichen.Caption := '+';
end;

procedure TForm1.Button16Click(Sender: TObject);
begin
if not AnsiContainsText(Edit.Text,',') then
  Edit.Text:= Edit.Text+',';
end;

procedure TForm1.Button11Click(Sender: TObject);
begin
EditErgebnis.Text := '';
LabelZeichen.Caption := '';
Edit.Text := '0';
Safemode := false;
end;

procedure TForm1.Button21Click(Sender: TObject);
begin
Edit.Text := '0';
end;

procedure TForm1.Button23Click(Sender: TObject);
begin
If not Safemode then
  EditErgebnis.Text := FloatToStr(StrToFloat(Edit.Text));
If not Safemode then
  Edit.Text := '0';
Safemode := true;
LabelZeichen.Caption := '-';
end;

procedure TForm1.Button17Click(Sender: TObject);
begin
If not Safemode then
  EditErgebnis.Text := FloatToStr(StrToFloat(Edit.Text));
If not Safemode then
  Edit.Text := '0';
Safemode := true;
LabelZeichen.Caption := '*';
end;

procedure TForm1.Button12Click(Sender: TObject);
begin
If not Safemode then
  EditErgebnis.Text := FloatToStr(StrToFloat(Edit.Text));
If not Safemode then
  Edit.Text := '0';
Safemode := true;
LabelZeichen.Caption := '/';
end;

procedure TForm1.Button4Click(Sender: TObject);
var
s : String;
begin
s := Edit.Text;
If s = '0' then
else if AnsiContainsText(s, '-') then
  Delete(s,1,1)
else
  s := '-' + s;
  Edit.Text := s;
end;

procedure TForm1.Button7Click(Sender: TObject);
begin
Memory := Edit.Text;
LabelMemory.Caption := 'M'
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
If Memory <> '' then
   Edit.Text := Memory;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Memory := '';
LabelMemory.Caption := '';
end;

procedure TForm1.Button15Click(Sender: TObject);
var
Wert1,Wert2: Extended;
Casevar: Integer;
Ergebnis: String;
begin
Casevar := 0; //compiler meckern umgehen
If (EditErgebnis.Text <> '') and (EditErgebnis.Text <> 'error') then begin
  Wert1 := StrToFloat(EditErgebnis.Text);
  Wert2 := StrToFloat(Edit.Text);
  If LabelZeichen.caption = '+' then
    Casevar := 1
  else If LabelZeichen.caption = '-' then
    Casevar := 2
  else If LabelZeichen.caption = '*' then
    Casevar := 3
  else If LabelZeichen.caption = '/' then
    Casevar := 4
  else If (LabelZeichen.caption = '/') and (Edit.Text = '0') then
    Casevar := 5;
  If (Casevar = 1) xor (Casevar = 2) xor (Casevar = 3) xor (Casevar = 4) xor
     (Casevar = 5) then begin
    Case Casevar of
      1: Ergebnis := FloatToStr(Wert1 + Wert2);
      2: Ergebnis := FloatToStr(Wert1 - Wert2);
      3: Ergebnis := FloatToStr(Wert1 * Wert2);
      4: Ergebnis := FloatToStr(Wert1 / Wert2);
      5: Ergebnis := '0';
    end;
  end
end;
EditErgebnis.Text := Ergebnis;
end;

procedure TForm1.Button8Click(Sender: TObject);
var
s: String;
begin
s := Edit.Text;
If (s <> '0') and (s <> '1') then begin
  if AnsiContainsText(s, '-') then begin
    Delete(s,1,1);
    Edit.Text := FloatToStr(Sqrt(StrToFloat(s)));
  end;
  if s = '1,00000000000001' then
    Edit.Text := '1'
  else
    Edit.Text := FloatToStr(Sqrt(StrToFloat(s)));
end;
end;

//Problemprozedur
procedure TForm1.Backspace;
var
Str: String;
begin
Str := Edit.Text;
If Length(Str) < 1 then
  Edit.Text := Delete(Str, Length(Str), 1)
else // line 307...
  Edit.Text := '0';
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  case Key of
    VK_NUMPAD0, $30 : Button9.Click;
    VK_NUMPAD1, $31 : Button19.Click;
    VK_NUMPAD2, $32 : Button20.Click;
    VK_NUMPAD3, $33 : Button22.Click;
    VK_NUMPAD4, $34 : Button10.Click;
    VK_NUMPAD5, $35 : Button13.Click;
    VK_NUMPAD6, $36 : Button14.Click;
    VK_NUMPAD7, $37 : Button6.Click;
    VK_NUMPAD8, $38 : Button3.Click;
    VK_NUMPAD9, $39 : Button5.Click;
    110 : Button16.Click;
    106 : Button17.Click;
    107 : Button18.Click;
    109 : Button23.Click;
    111 : Button12.Click;
    VK_RETURN : Button15.Click;
    VK_BACK : Backspace;
    VK_ESCAPE : close;
  end;
end;

end.
[/SPOILER]

CCRDude 10. Okt 2011 16:51

AW: Delphi Anfänger findest fehler nicht: error in prozedur
 
Na dann schau dochmal die Fehlermeldung an, und die Zeile... schau in die Hilfe zu Delete. Kann man diese Prozedur so verwenden, wie Du es machst?

stahli 10. Okt 2011 16:54

AW: Delphi Anfänger findest fehler nicht: error in prozedur
 
Herzlich willkommen erst einmal!

Du musst den Test auf die Länge umdrehen und Delete ist keine Funktion sondern eine Prozedur.
Du könntest auf Copy ausweichen.

eDonkey 10. Okt 2011 17:01

AW: Delphi Anfänger findest fehler nicht: error in prozedur
 
Vielen Dank ich habe es jetzt mit copy gelöst,
mein code sieht jetzt so aus falls jemand ein ähnliches problem hatt:

Delphi-Quellcode:
unit Rechner;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, StrUtils;

type
  TForm1 = class(TForm)
    LabelZeichen: TLabel;
    Edit: TEdit;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    Button8: TButton;
    Button9: TButton;
    Button10: TButton;
    Button11: TButton;
    Button12: TButton;
    Button13: TButton;
    Button14: TButton;
    Button15: TButton;
    Button16: TButton;
    Button17: TButton;
    Button18: TButton;
    Button19: TButton;
    Button20: TButton;
    Button21: TButton;
    Button22: TButton;
    Button23: TButton;
    LabelMemory: TLabel;
    EditErgebnis: TEdit;
    procedure Button9Click(Sender: TObject);
    procedure Button19Click(Sender: TObject);
    procedure Button20Click(Sender: TObject);
    procedure Button22Click(Sender: TObject);
    procedure Button10Click(Sender: TObject);
    procedure Button13Click(Sender: TObject);
    procedure Button14Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button18Click(Sender: TObject);
    procedure Button16Click(Sender: TObject);
    procedure Button11Click(Sender: TObject);
    procedure Button21Click(Sender: TObject);
    procedure Button23Click(Sender: TObject);
    procedure Button17Click(Sender: TObject);
    procedure Button12Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button15Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure Backspace;
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);


  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Safemode: Boolean = false;
  Memory: String = '';

implementation

{$R *.dfm}

procedure TForm1.Button9Click(Sender: TObject);
begin
If Edit.Text <> '0' then
  Edit.Text := Edit.Text + '0';
Button15.SetFocus;
end;

procedure TForm1.Button19Click(Sender: TObject);
begin
If Edit.Text = '0' then
  Edit.Text := '1'
else
  Edit.Text := Edit.Text + '1';
Button15.SetFocus;
end;

procedure TForm1.Button20Click(Sender: TObject);
begin
If Edit.Text = '0' then
  Edit.Text := '2'
else
  Edit.Text := Edit.Text + '2';
Button15.SetFocus;
end;

procedure TForm1.Button22Click(Sender: TObject);
begin
If Edit.Text = '0' then
  Edit.Text := '3'
else
  Edit.Text := Edit.Text + '3';
Button15.SetFocus;
end;

procedure TForm1.Button10Click(Sender: TObject);
begin
If Edit.Text = '0' then
  Edit.Text := '4'
else
  Edit.Text := Edit.Text + '4';
Button15.SetFocus;
end;

procedure TForm1.Button13Click(Sender: TObject);
begin
If Edit.Text = '0' then
  Edit.Text := '5'
else
  Edit.Text := Edit.Text + '5';
Button15.SetFocus;
end;

procedure TForm1.Button14Click(Sender: TObject);
begin
If Edit.Text = '0' then
  Edit.Text := '6'
else
  Edit.Text := Edit.Text + '6';
Button15.SetFocus;
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
If Edit.Text = '0' then
  Edit.Text := '7'
else
  Edit.Text := Edit.Text + '7';
Button15.SetFocus;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
If Edit.Text = '0' then
  Edit.Text := '8'
else
  Edit.Text := Edit.Text + '8';
Button15.SetFocus;
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
If Edit.Text = '0' then
  Edit.Text := '9'
else
  Edit.Text := Edit.Text + '9';
Button15.SetFocus;
end;

procedure TForm1.Button18Click(Sender: TObject);
begin
If not Safemode then
  EditErgebnis.Text := FloatToStr(StrToFloat(Edit.Text));
If not Safemode then
  Edit.Text := '0';
  Safemode := true;
  LabelZeichen.Caption := '+';
Button15.SetFocus;
end;

procedure TForm1.Button16Click(Sender: TObject);
begin
if not AnsiContainsText(Edit.Text,',') then
  Edit.Text:= Edit.Text+',';
Button15.SetFocus;
end;

procedure TForm1.Button11Click(Sender: TObject);
begin
EditErgebnis.Text := '';
LabelZeichen.Caption := '';
Edit.Text := '0';
Safemode := false;
Button15.SetFocus;
end;

procedure TForm1.Button21Click(Sender: TObject);
begin
Edit.Text := '0';
Button15.SetFocus;
end;

procedure TForm1.Button23Click(Sender: TObject);
begin
If not Safemode then
  EditErgebnis.Text := FloatToStr(StrToFloat(Edit.Text));
If not Safemode then
  Edit.Text := '0';
Safemode := true;
LabelZeichen.Caption := '-';
Button15.SetFocus;
end;

procedure TForm1.Button17Click(Sender: TObject);
begin
If not Safemode then
  EditErgebnis.Text := FloatToStr(StrToFloat(Edit.Text));
If not Safemode then
  Edit.Text := '0';
Safemode := true;
LabelZeichen.Caption := '*';
Button15.SetFocus;
end;

procedure TForm1.Button12Click(Sender: TObject);
begin
If not Safemode then
  EditErgebnis.Text := FloatToStr(StrToFloat(Edit.Text));
If not Safemode then
  Edit.Text := '0';
Safemode := true;
LabelZeichen.Caption := '/';
Button15.SetFocus;
end;

procedure TForm1.Button4Click(Sender: TObject);
var
s : String;
begin
s := Edit.Text;
If s = '0' then
else if AnsiContainsText(s, '-') then
  Delete(s,1,1)
else
  s := '-' + s;
Edit.Text := s;
Button15.SetFocus;
end;

procedure TForm1.Button7Click(Sender: TObject);
begin
Memory := Edit.Text;
LabelMemory.Caption := 'M';
Button15.SetFocus;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
If Memory <> '' then
   Edit.Text := Memory;
Button15.SetFocus;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Memory := '';
LabelMemory.Caption := '';
Button15.SetFocus;
end;

procedure TForm1.Button15Click(Sender: TObject);
var
Wert1,Wert2: Extended;
Casevar: Integer;
Ergebnis: String;
begin
Casevar := 0; //compiler meckern umgehen
If (EditErgebnis.Text <> '') and (EditErgebnis.Text <> 'error') then begin
  Wert1 := StrToFloat(EditErgebnis.Text);
  Wert2 := StrToFloat(Edit.Text);
  If LabelZeichen.caption = '+' then
    Casevar := 1
  else If LabelZeichen.caption = '-' then
    Casevar := 2
  else If LabelZeichen.caption = '*' then
    Casevar := 3
  else If LabelZeichen.caption = '/' then
    Casevar := 4
  else If (LabelZeichen.caption = '/') and (Edit.Text = '0') then
    Casevar := 5;
  If (Casevar = 1) xor (Casevar = 2) xor (Casevar = 3) xor (Casevar = 4) xor
     (Casevar = 5) then begin
    Case Casevar of
      1: Ergebnis := FloatToStr(Wert1 + Wert2);
      2: Ergebnis := FloatToStr(Wert1 - Wert2);
      3: Ergebnis := FloatToStr(Wert1 * Wert2);
      4: Ergebnis := FloatToStr(Wert1 / Wert2);
      5: Ergebnis := '0';
    end;
  end
end;
EditErgebnis.Text := Ergebnis;
Button15.SetFocus;
end;

procedure TForm1.Button8Click(Sender: TObject);
var
s: String;
begin
s := Edit.Text;
If (s <> '0') and (s <> '1') then begin
  if AnsiContainsText(s, '-') then begin
    Delete(s,1,1);
    Edit.Text := FloatToStr(Sqrt(StrToFloat(s)));
  end;
  if s = '1,00000000000001' then
    Edit.Text := '1'
  else
    Edit.Text := FloatToStr(Sqrt(StrToFloat(s)));
end;
Button15.SetFocus;
end;

procedure TForm1.Backspace;
var
Str: String;
begin
Str := Edit.Text;
If Length(Str) > 1 then
  Edit.Text := Copy(Str, 1, Length(Str) - 1)
else
  Edit.Text := '0';
Button15.SetFocus;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  case Key of
    VK_NUMPAD0, $30 : Button9.Click;
    VK_NUMPAD1, $31 : Button19.Click;
    VK_NUMPAD2, $32 : Button20.Click;
    VK_NUMPAD3, $33 : Button22.Click;
    VK_NUMPAD4, $34 : Button10.Click;
    VK_NUMPAD5, $35 : Button13.Click;
    VK_NUMPAD6, $36 : Button14.Click;
    VK_NUMPAD7, $37 : Button6.Click;
    VK_NUMPAD8, $38 : Button3.Click;
    VK_NUMPAD9, $39 : Button5.Click;
    110 : Button16.Click;
    106 : Button17.Click;
    107 : Button18.Click;
    109 : Button23.Click;
    111 : Button12.Click;
    VK_RETURN : Button15.Click;
    VK_BACK : Backspace;
    VK_ESCAPE : close;
  end;
end;

end.

DeddyH 10. Okt 2011 17:45

AW: Delphi Anfänger findest fehler nicht: error in prozedur
 
:shock: Tut das wirklich Not, die komplette Unit zu posten? Ich meine, wenn jemand ein ähnliches Problem haben sollte, dürfte es schwer werden, die entsprechende Stelle zu finden.

Darlo 10. Okt 2011 22:20

AW: Delphi Anfänger findest fehler nicht: error in prozedur
 
War ja sicherlich nur gut gemeint und ein wenig Stolz war bestimmt auch dabei. Kannst Du Dich noch an Deinen ersten Taschenrechner erinnern ;-)

DeddyH 11. Okt 2011 07:45

AW: Delphi Anfänger findest fehler nicht: error in prozedur
 
Stolz hin oder her, unnötige Massen an Code sind doch eher kontraproduktiv, da man das Wesentliche nicht mehr (so einfach) erkennt. Man wird ja wohl noch darauf hinweisen dürfen.

Luckie 11. Okt 2011 08:10

AW: Delphi Anfänger findest fehler nicht: error in prozedur
 
Und irgendwie aussagekräftig ist der Titel des Beitrages auch nicht. Bitte entsprechend ändern.

himitsu 11. Okt 2011 09:53

AW: Delphi Anfänger findest fehler nicht: error in prozedur
 
Zitat:

Zitat von DeddyH (Beitrag 1129704)
Stolz hin oder her, unnötige Massen an Code sind doch eher kontraproduktiv, da man das Wesentliche nicht mehr (so einfach) erkennt.

Die Lösung des Problems nochmals zu zeigen, ist vollkommen OK und sogar gewollt.

Zitat:

dürfte es schwer werden, die entsprechende Stelle zu finden.
Sollte eigentlich nur soviel heißen, wie
Das Problem befand sich nur in einer Prozedur/Zeile, und es ist vollkommen ausreichend nur die wichtigen Stellen zu zeigen,
womit mann dann auch das Problem gleich erkennen kann.

OK, notfalls kann man dennoch zusätzlich den gesamten Code als Anhang an den Post dranhängen.

DeddyH 11. Okt 2011 10:01

AW: Delphi Anfänger findest fehler nicht: error in prozedur
 
Zitat:

Zitat von himitsu (Beitrag 1129720)
Die Lösung des Problems nochmals zu zeigen, ist vollkommen OK und sogar gewollt.

Poste ich neuerdings in Suaheli? Oder was hat z.B.
Zitat:

Delphi-Quellcode:
procedure TForm1.Button17Click(Sender: TObject);
begin
If not Safemode then
  EditErgebnis.Text := FloatToStr(StrToFloat(Edit.Text));
If not Safemode then
  Edit.Text := '0';
Safemode := true;
LabelZeichen.Caption := '*';
Button15.SetFocus;
end;

mit dem eigentlichen Problem zu tun? So wie ich das sehe, nüscht, deshalb meinte ich, dass man solchen Code besser weglassen sollte.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:43 Uhr.
Seite 1 von 2  1 2      

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