Brauche Hilfe!

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Brauche Hilfe!

Beitrag von Michl »

Code: Alles auswählen

function Berechnung(aInt: Integer): Integer;
begin
  Result:=(aInt + 5) * 3;
end;  
 
procedure TForm1.Button1Click(Sender: TObject);
var
  a: Integer;
begin
  a:=Berechnung(StrToInt(Edit1.Text));
  Label1.Caption:=IntToStr(a);
//würde auch ohne a gehen:
  Label1.Caption:=IntToStr(Berechnung(StrToInt(Edit1.Text)));
end;
Aber mal ganz ehrlich, Deine Fragen behandeln quasi jedes Einsteigertutorial. Diese http://www.delphi-treff.de/tutorials/gr ... tutorials/ sind auch sehr gut geschrieben und für Lazarus gut nutzbar!

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

XDeKa
Beiträge: 10
Registriert: Mi 6. Aug 2014, 13:54

Re: Brauche Hilfe!

Beitrag von XDeKa »

Hi Michl,
ich dachte mir schon das mein Problem eher ein Problemchen für Einige hier sein wird. Das ist wahrscheinlich einfach meiner Erfahrung und Kenntnissen geschuldet. Danke dir trotzdem das du dich einbringst.

Leider klappt es immernoch nicht. Vielleicht habe ich mein Code zu sehr vereinfacht dargestellt.

Bei mir kommt immer wieder die Fehlermeldun: "unit4.pas(118,46) Error: Only class class methods, class properties and class variables can be accessed in class methods".

Nochmal kurz zu meinem Programm: Es besteht aus 6 Units. Die ersten 5 Units stehen für unterschiedliche Seiten, die jeweils Buttons, Comboboxen, Labels etc. beeinhalten. In Unit6 möchte ich nun die Procedure/Function erstellen um diese so in den anderen Units zu verwenden.

Der gesamte Code ist ein wenig zu lang denke ich um ihn hier komplett darzulegen.

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Brauche Hilfe!

Beitrag von Michl »

Die Fehlermeldung sagt aus, dass Du eine Methode (Function / Procedure etc.) einer Klasse, nicht die eines Objekts aufrufst.

Bsp:

Code: Alles auswählen

type
  TForm1 = class(TForm)  //Klasse -> TForm1
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    function Berechnung(aInt: Integer): Integer;
  public
  end;
 
var
  Form1: TForm1;  //Objekt -> Form1 !!!!!
...
 
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  i:=TForm1.Berechnung(1000);  //hier kommt diese Fehlermeldung
  i:=Form1.Berechnung(1000);   //hier nicht!!!
  ShowMessage(IntToStr(i));
end;
 
function TForm1.Berechnung(aInt: Integer): Integer;
begin
  Result:=aInt*2;
end; 

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Lion
Beiträge: 197
Registriert: Mo 24. Mär 2014, 09:58

Re: Brauche Hilfe!

Beitrag von Lion »

XDeKa ich denke Du machst es viel zu kompliziert, Du erschwerst Dir das Programmieren selber. Wozu die ganzen Units? Mache es ganz einfach, für deine Aufgabe reicht höchstwahrscheinlich eine Unit pro Form. Man muss einfach alles gut dokumentieren und dann ist es voll verständlich und übersichtlich.

Der berühmte russische Raketenkonstrukteur Sergei Koroljow, der den Sputnik, den ersten Menschen uvm. in den All geschossen hat, hat mal gesagt: "Kompliziert bauen können alle, wir aber bauen einfach!" :wink:

XDeKa
Beiträge: 10
Registriert: Mi 6. Aug 2014, 13:54

Re: Brauche Hilfe!

Beitrag von XDeKa »

Lion: ich dachte ich gestallte es einfach übersichtlicher indem ich die Rechnungen seperat halte. Habe mich jetzt aber dazu entschlossen pro Form eine Unit zu machen. (Soll ja keiner behaupten das ich stur bin :lol: )

Michl: danke für den Code es funktioniert jetzt eigentlich alles bis auf eine Kleinigkeit (ich hoffe das es eine ist ^^)

Code: Alles auswählen

 
 function TForm4.Berechnung_RK(P1: double): double;
begin
  Result:=(dsFl/(LamFl*AKel)+dsBe/(LamBe*AKel)+P1/(LamSty*AKel));
end;
 
procedure TForm4.Button1Click(Sender: TObject);
var i:double;
begin
  Form4.Visible:=false;
  Form5.Visible:=true;
  i:=Form4.Berechnung_RK(0.15);
  Form5.Label7.Caption:=(IntToStr(i));
end;   
Jetzt kommt der Fehler: Incompatible type for arg no. 1: Got "Double", expected "QWord"
Die Meldung steht doch dafür, dass er jetzt halt keine Zahl(double) sondern ein Wort haben will. Aber ich dachte das ist mit der Function IntToStr erledigt?!

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Brauche Hilfe!

Beitrag von m.fuchs »

Sowohl dein IntToStr ist falsch, als auch das was du aus der Fehlermeldung herausliest. Tu dir bitte selber den Gefallen und lies das Grundlagenwerk, dessen Link ich oben gepostet habe. Ein minimales Verständnis der Datentypen ist da schon erforderlich.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

XDeKa
Beiträge: 10
Registriert: Mi 6. Aug 2014, 13:54

Re: Brauche Hilfe!

Beitrag von XDeKa »

m.fuchs: bin dabei es zu lesen. Habe leider nicht soviel Zeit mich komplett in die Materie zu denken. Das Projekt muss in zwei Wochen fertig und abgegeben sein.

Habe es jetzt mit FloatToStr gelöst. Hoffe das es so "formal" okay ist.

Ich hab zwar noch nicht wirklich den Durchblick, aber jetzt läuft es erstmal und es kommt sogar das Richtige raus ^^.

Ist das mit dem IntToStr denn wirklich so falsch? Im Werk steht
IntToStr Wandelt eine Zahl in einen String um.
Und ein String kann doch bis zu 255 Zeichen darstellen?!

Lion
Beiträge: 197
Registriert: Mo 24. Mär 2014, 09:58

Re: Brauche Hilfe!

Beitrag von Lion »

Hier auch ein tolles Buch http://www.delphi-treff.de/downloads/e-book/

i ist bei dir als Double deklariert, Integer hat da also nichts zu suchen. FloatToStr ist schon richtig!

Antworten