Autor Beitrag
WormHole
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 145



BeitragVerfasst: Mi 20.04.05 21:37 
Hallo,

ich hab eigentlich zwei Fragen an euch. Ich habe erst vor zwei Wochen mit Delphi angefangen und traue mich nun an ein "größeres" (nicht lachen) Projekt ran. Ich möchte gerne ein Programm schreiben, womit man z.B. den Flächeninhalt eines Dreiecks etc. berechnen kann. Nun, die Formeln etc. habe ich alles schon, nur wollte ich wohl gerne ein Bild von der angegeben Form oben einfügen. Wie geht das?^^

Meine zweite Frage bezieht sich auf was ganz anderes. Ich möchte einen Taschenrechner programmieren. Einen Taschenrechner mit zwei Editfeldern habe ich schon gemacht, doch ich möchte das gerne so wie bei dem Windows Taschenrechner machen und nur ein Editfeld haben. Könntet ihr mir bitte helfen? Das wäre sehr nett.

Greetz WormHole
Karlson
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 2088



BeitragVerfasst: Mi 20.04.05 22:13 
Servus,

Eigentlich gilt, das man hier pro Frage einen Thread eröffnen sollte. Aber das wird ein Mod dir wahrscheinlich gleich nochmal sagen.

user profile iconWormHole hat folgendes geschrieben:
Hallo,
ich hab eigentlich zwei Fragen an euch. Ich habe erst vor zwei Wochen mit Delphi angefangen und traue mich nun an ein "größeres" (nicht lachen) Projekt ran. Ich möchte gerne ein Programm schreiben, womit man z.B. den Flächeninhalt eines Dreiecks etc. berechnen kann. Nun, die Formeln etc. habe ich alles schon, nur wollte ich wohl gerne ein Bild von der angegeben Form oben einfügen. Wie geht das?^^


Es gibt hier die Möglichkeit des Befehls paintbox.canvas.polygon(). Übergeben werden die drei Eckpunkte, daraus wird dann auf die Komponente TPaintbox (zu finden in der Registerkarte System) ein Dreieck gezeichnet.

Dein Hauptproblem besteht also daran an die Eckpunkte zu kommen. Da ist dann aber nur noch ein mathematisches Problem. Mit Sin und Cossinus sollte das schon möglich sein. Musst aber halt dein Gehirn einschalten und das auf dem Blatt erstmal vorrechnen. Wenn du die Formel dann hast kannst du es in Delphi umsetzen. Aber bitte dann kein thread davor. Wenn du nicht weisst wie man unter Delphi bestimmte Rechenoperatoren benutzt, dann benutze die Boardsuche!

Zitat:

Meine zweite Frage bezieht sich auf was ganz anderes. Ich möchte einen Taschenrechner programmieren. Einen Taschenrechner mit zwei Editfeldern habe ich schon gemacht, doch ich möchte das gerne so wie bei dem Windows Taschenrechner machen und nur ein Editfeld haben. Könntet ihr mir bitte helfen? Das wäre sehr nett.


Schwer bzw. nicht unbedingt sehr einfach für einen Anfänger.

Du musst programmintern die Eingaben abspeichern, und dann zum schluss alles nochmal parsen und ausrechnen.

Beispiel:

Im Editfeld des TR's steht '5034', dann drückst du auf [+] und möchtest '5' dazuzählen. Sobald du auf das Rechenzeichen klickst, soll die '5034' aus dem Editfeld verschwinden. Quellcode würde so aussehen:

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:
var
 List : TStringList;

procedure formcreate();
begin
 List := TStringList.Create;
end;

procedure AufPlusKlicken();
begin
 list.add(edit1.text); //der internen Liste die Zahl hinzufügen die im Edit steht
 list.add('+');        //in einer neuen Zeile das Rechenzeichen hinzufügen
 edit1.text := '';     //Das Editfeld löschen
end;

procedure Ergebnissberechnen(); //Klick auf [=] Zeichen
//Das ist jetzt der schwere Teil...
var aZ1 : Real;
    aZ2 : Real;
    aZ3 : Real;
    i : integer;
    Result : Real; //Dort wird das Endergebniss drin gespeichert
begin
 list.add(edit1.text);  //die letzte Zahl nicht vergessen!
 list.add('='); //Das zeichen gibt unserem Algo an wann Ende ist!
 edit1.text := ''//Und wieder löschen
 aZ2 := 0;
 i := 0;
 while i <> list.count -1 do
  begin
   if i = 0 then
    begin
     aZ1 := StringToFloat(List[i]);
     case list[i+1of
      '+' : az3 := az1 + az2;
      // Hier müssen natürlich alle weiteren Rechenzeichen folgen
      '=' : begin 
             Result := az3; //bzw. Edit1.text := FloatToString(az3);
             exit;
            end;
      end;
     inc(i,2);
    end
     else
      begin
       az1 := az3;
       az2 := stringToFloat(List[i]);
        case list[i+1of
         '+' : az3 := az1 + az2;
         // etc.
        end;
       inc(i,2);
     end;
end;


So, das ganze ist ungetestet, ergo werden ein paar Fehler drin sein. Aber du hast einen Ansatz und von jetzt an musst du selbst drauf kommen ;)

Du musst nur darauf achten, dass die Anzahl der Items in der Stringlist (list.count) im gerade ist! Das sollte klappen, denn wir haben pro Hinzufügeschritt eine Zahl und einen Operator (deswegen am Ende das '=').

Übel wird das ganze erst wenn du noch Klammern sowie Punkt vor Strich und ähnliches willst ;) Aber das macht der Windows TR meines wissens auch nicht.
WormHole Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 145



BeitragVerfasst: So 24.04.05 17:13 
Erstmal dankeschön! Echt nett das du mir geholfen hast. Nur,

Wie macht man das denn mit TPaintbox? Wie sag ich Delphi das der mir aus den Drei Punkten ein dreieck machen soll?
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: So 24.04.05 17:15 
user profile iconWormHole hat folgendes geschrieben:
Erstmal dankeschön! Echt nett das du mir geholfen hast. Nur,

Wie macht man das denn mit TPaintbox? Wie sag ich Delphi das der mir aus den Drei Punkten ein dreieck machen soll?


Schau dir mal TCanvas.LineTo an ;)

AXMD
WormHole Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 145



BeitragVerfasst: So 24.04.05 17:33 
Zitat:
Schau dir mal TCanvas.LineTo an


Tut mir leid aber damit kann ich nichts anfangen :cry:
Karlson
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 2088



BeitragVerfasst: So 24.04.05 17:48 
Wen du damit nichts anfangen kannst dann bestimmt Suche bei Google LINETO DELPHI , die Forensuche unter Suche in: Delphi-Forum, Delphi-Library LINETO, die forensuche des befreundeten Forums Suche in der Delphi-PRAXiS LINETO und zu guter letzt natürlich noch die Delphi Hilfe. (Einfach in der IDE F1 drücken, oder im MainMenu auf Hilfe drücken).

Die Sache ist nicht schwer, aber ohne Eigeninitiative nicht lösbar.