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/)
-   -   Befehl 'round' macht schlapp (https://www.delphipraxis.net/178716-befehl-round-macht-schlapp.html)

joelnbp 22. Jan 2014 20:05

Delphi-Version: 5

Befehl 'round' macht schlapp
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo,

ich habe leider wieder ein Frage, und hoffe die Lösung unterliegt nicht einen ärgerlichen 'Schusselfehler'.

Um Punktezahlen in einen Schulnoten-System anzeigen zu lassen, fand ich eine Formel:
  • (Erreichte Punktzahl * 5) / Gesatmmtpunktzahl - 6
Das Minus sollte man sich weg denken - ich habe es einfach mal duch (-a)-(-b) verschwinden lassen ;D.
Das ganze habe ich in einem separaten Projekt gemacht.
Der Code sieht so aus:

Delphi-Quellcode:
label3.caption:=FloatToStr(round((-((StrToFloat(label1.caption) *5) / StrToFloat(Label2.caption))-(-6))));
Es funktionier wunderbar!
Doch dann will ich es in mein eigentliches Projekt einfügen, und...FEHLER...
Der Code hat nur andere Namen:

Delphi-Quellcode:
panel22.caption:=FloatToStr(round((-((StrToFloat(panel5.caption) *5) / StrToFloat(panel6.caption))-(-6))));
Ich kann den Befehl round in diesem Projekt nicht benutzen. Egal wie. Das verstehe ich einfach nicht. Provisorisch habe ich darunter die selbe Rechnung ohne Rundung, doch da scheitert die Ausgabe natürlich bei Kommastellen.
Auf den Bildschirmfoto sollte das zu sehen sein (bitte meinen restlich zu sehenden Quelltext nicht auslachen :) ).
Wieso? Kann mir jemand helfen? Gibt es vielleicht auch eine ganz andere Möglichkeit? Wenn ich die Suchmaschine nutze, komme ich nur auf so komplizierte Funktionen.

Ich freue mich jetzt schon sehr auf eine Antwort! Das schätze ich sehr :).

LG Joel

Furtbichler 22. Jan 2014 20:15

AW: Befehl 'round' macht schlapp
 
Schreibe die Zahlen in den Controls (Panel, Edit usw.) zunächst in lokale Variablen. Die heißen dann sinngemäß 'ErreichtePunktzahl', 'GesamtPunktZahl' usw. Diese Variablen sind vom Typ 'Double'. So etwa:
Delphi-Quellcode:
Var
  ErreichtePunktzahl : Double;

Begin
  ErreichtePunktzahl := StrToFloat(Panel3.Caption);
  ...
  // Jetzt die Formel, natürlich mit den Variablennamen
  Ergebnis := ....
  // Jetzt das Ergebnis runden
  Ergebnis := Round (Ergebnis,...); // Wie geht das nochmal?

  // Und zum Schluß das Ergebnis anzeigen.
  ZielPanel.Caption := FloatToStr(Ergebnis); // oder wie auch immer das geht
Dann kommst Du selbst auf den Fehler, denn dein Code ist doch ziemlich unübersichtlich, findest Du nicht? Deshalb erkennst du auch nicht, wo der Fehler ist. Aber so (also in kleinen Schritten, mit Zwischenergebnissen etc.) siehst Du das dann sofort.

Hoffe ich. Wenn nicht, wieder melden.

himitsu 22. Jan 2014 20:36

AW: Befehl 'round' macht schlapp
 
Funktion
Delphi-Quellcode:
Round
und
Delphi-Quellcode:
Round.Text
(paar Zeilen weiter oben im Screenshot) ..... ich ahne Böses. :stupid:

Hat Lazarus denn kein Code-Insight?
Maus über
Delphi-Quellcode:
Round
halten und schauen was im Hint steht,
bzw. Strg+Linksklick auf das Round und schauen wo man landet. (zumindestens geht das so im Delphi)



Abgesehn davon, würde ich dir dringend empfehlen den Komponenten mal einen ordentlich nahmen zu geben.
(OK, ein "Round" ist zu finden, aber sonst heißt dennoch alles Button1, Label1 usw.)

joelnbp 24. Feb 2014 15:50

AW: Befehl 'round' macht schlapp
 
Erstmal muss ich mich entschuldigen, dass ich einfach nicht geschrieben habe. Das mache ich eigentlich überhaupt nicht gerne: Nach einer so netten Hilfe einfach nicht schreiben.

Also vielen Dank! Wie man gemerkt hat, war es ein ärgerlicher Fehler, und zum Glück hat kam round nocheinmal auf dem Screenshot vor :D.
Danke himitsu!

Ja, finde ich! Ich sollte mir mehr mühe geben, damit der Quelltext mehr Struktur hat. Daran muss ich echt noch arbeiten! Aber dankeschön Furtbichler!

Liebe Grüße, Joel :)

Luki206 24. Feb 2014 16:00

AW: Befehl 'round' macht schlapp
 
Wenn ich mich hier einmal einmischen dürfte. Ich habe nichts zu bemängeln an den Antworten bevor das falsch verstanden wird bzw. auch als Off-Topic eingestuft wird. Das mag sich jetzt blöd anhören aber wie hast du diese blauen Schaltflächen hinbekommen? Als Bild erstellt und dann eingefügt oder ist das von Lazarus eine Extra? Oder sind das Einfach nur Panel's die Blau eingefärbt wurden und den inneren Schatten entfernt wurde?
Danke
Luki :)

himitsu 24. Feb 2014 16:53

AW: Befehl 'round' macht schlapp
 
Gute Frage.
Ich könnte mir auch fast vorstellen, daß das der normale Windows 8-Style für die VCL/LCL/Windows-Buttons ist.
wenn ja, dann kommt das praktisch von alleine, wenn man den normalen TButton unter Win8 laufen lässt.

Ansonsten gibt es Skins, welche das aussehen der Standardkomponenten beeinflusst, oder spezielle geskinnte/selbstgezeichnete Komponenten, oder man misbraucht einfach sowas wie TShape, oder man zeichnet den Button selber.

Luki206 24. Feb 2014 17:00

AW: Befehl 'round' macht schlapp
 
Also von win8 kommt das nicht, habe ich nämlich auch und da ist nichts der gleichen.. Also kann man sich da so Skinpacks downloaden oder selber zeichnen? Zeichnen dann wie? ;)

himitsu 24. Feb 2014 17:29

AW: Befehl 'round' macht schlapp
 
Es gibt Komponentenpacks mit eigenem SkinSupport, z.B. von TMS, DevExpress usw.
War beim Kauf von Delphi nicht auch wieder ein Link dabei, wo du dir ein paar "Gratis"-Komponenten downloaden kannst? (mir war so, als war da auch mal was mit Skins dabei)

Bei Google suchenDelphi Skin oder Hier im Forum suchenSkin:
http://www.alphaskins.com/asdwnld.php
http://www.torry.net/pages.php?id=1544
http://www.link-rank.com/
...

TPanel nehmen, Rahmen weg (BorderStyle und BevelOuter), Hintergrundfarbe ändern, die Caption setzen und dann ins OnClick den gewünschen Code rein, der beim "Drücken" aufgerufen werden soll.

michaelthuma 24. Feb 2014 18:22

AW: Befehl 'round' macht schlapp
 
Habe das ausprobiert im Laz als auch im Delphi XE5. Funktioniert in beiden.

Welche ist die Fehlermeldung?

Solltest du im Laz programmieren, dann Klicke einfach auf die Klammern, solltest du mal Sorgen haben bezüglich Klammerung.

Mit der Maus über die Funktion double und es wird dir der Funktionsprototyp angezeigt.

Round gibt einen Int64 zurück ist aber an sich egal. Mich schlimmsten Fall mit einer Konstante ausmultiplizieren falls du sicher gehen willst.

Delphi-Quellcode:
const double : One = 1.0;
Exkurs: Bei Sprachen außerhalb von Pascal - Vorsicht.
Beispiel: ABAP und Datum

Code:
DATA: BEGINN TYPE D VALUE '20001224',
      ENDE LIKE BEGINN.

BEGIN = SY-DATUM. - funktioniert, entspricht in dem Zusammenhang now()
BEGINN = '19990101'. - funktioniert, Zeichenketten können zugewiesen werden
ENDE = BEGINN + 1. - funktioniert, Folgetag
ENDE = '19990101' + 1 - denkste
Intern führt der ABAP Interpreter eine Konvertierung auf Integer durch und addiert - Tage bezogen auf den Startzeitpunkt. In der letzten Zeile sieht der ABAP Interpreter.

a) ... Oh, 1 eine Integer - was sonst.
b) ... '19990101' und das Plus dazwischen - ist auch ein Integer
und denkt sich ...
c) ... So ein netter Programmierer! Ganz integere Persönlichkeit, von der bekomm ich ne Integer - was sonst - spar ich mir das Umrechnen - einfach rein mit der Zahl - wird schon wissen was er tut. Tja. Gespart am falschen Platz :)

Der Fairness halber - es steht in der Doku.

Auch deswegen sind sämtliche Ratschläge Teilergebnisse in Variablen zu halten durchaus nützliche. Man soll eher mit Typen sehr sauber umgehen. 1.0 ist nicht unbedingt double 1.0 in jedem Fall und jeder Sprache.

Zitat:

Zitat von joelnbp (Beitrag 1244957)
Hallo,
Ich freue mich jetzt schon sehr auf eine Antwort! Das schätze ich sehr :).


joelnbp 24. Feb 2014 20:08

AW: Befehl 'round' macht schlapp
 
Hallo Luki206 und co :D

Da ich einer der wenigen bin, den das flache Windows 8+ Design sehr gefällt, habe ich es mit meinen wenigen Kenntnissen versucht, so gut wie möglich um zu setzen.

Es sind ganz normale Panels, die die Eigentschaft BevelOuter = bvNone haben. Dann sind sie flach und mit den Farben sollte ja alles klar sein.
Natürlich noch nen bisschen 'hover' mit reingepackt, und natürlich bekannte Button Funktionen wie z.B. enabled ergänzt (auf die einfachste Weise wie es geht; versteht sich :D) :D.

Aber verändern die Skin-Packs nur das Aussehen von Delphi, oder nur das Anwendungs-Design? Und ist es dann auch auf einen PC ohne Skin-Pack zu sehen?
Und ist das auch mit Lazarus möglich?

Liebe Grüße, Joel


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