AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Methodenaufruf nur für Klassenmethoden und Konstruktoren
Thema durchsuchen
Ansicht
Themen-Optionen

Methodenaufruf nur für Klassenmethoden und Konstruktoren

Ein Thema von DelphiNewbie929 · begonnen am 15. Dez 2014 · letzter Beitrag vom 16. Dez 2014
Antwort Antwort
Seite 2 von 2     12   
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#11

AW: Methodenaufruf nur für Klassenmethoden und Konstruktoren

  Alt 15. Dez 2014, 16:40
Das komplette Zitat:
Zitat:
 Self.Width := Self.Width div 2; //Breite des Übergabeobjektes verdoppeln .
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#12

AW: Methodenaufruf nur für Klassenmethoden und Konstruktoren

  Alt 15. Dez 2014, 16:56
Es ist aber nur jeweils der Kommentar falsch, die Methoden tun schon das, was ihr Name beschreibt.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#13

AW: Methodenaufruf nur für Klassenmethoden und Konstruktoren

  Alt 15. Dez 2014, 16:58
Hallo zusammen,
Div liefert immer eine Ganzzahl.
Hatte ich doch geschrieben.
Daher teilte ich lediglich mit, dass ein Round() schön wäre.

Ob jetzt wirklich sinnvoll, dass stellen wir beiseite, wenn er nur in Delphi programmiert.
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.

Geändert von BadenPower (15. Dez 2014 um 17:07 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#14

AW: Methodenaufruf nur für Klassenmethoden und Konstruktoren

  Alt 15. Dez 2014, 18:36
Hallo zusammen,
Div liefert immer eine Ganzzahl.
Hatte ich doch geschrieben.
Daher teilte ich lediglich mit, dass ein Round() schön wäre.

Ob jetzt wirklich sinnvoll, dass stellen wir beiseite, wenn er nur in Delphi programmiert.
Er soll ernsthaft erst eine Float-Division machen um das Ergebnis dann wieder mit Round in einen Integer zu transferieren?

Da ist doch das DIV wesentlich ehrlicher und tut, was verlangt wird.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#15

AW: Methodenaufruf nur für Klassenmethoden und Konstruktoren

  Alt 15. Dez 2014, 19:27
Hallo zusammen,
Da ist doch das DIV wesentlich ehrlicher und tut, was verlangt wird.
Das ist ohne Zweifel richtig.

Er soll ernsthaft erst eine Float-Division machen um das Ergebnis dann wieder mit Round in einen Integer zu transferieren?
Vielleicht denke ich manchmal etwas zu aufwendig, da ich bei Größenberechnungen von visuellen Komponenten gerne selbst entscheide, ob das Angezeigte nachher eine ungerade oder gerade Anzahl von Bildpunkten hat und daher meistens in einer Abfrage mit Ceil() und Floor() arbeite um einen gleichmäßigen Randabstand beizubehalten.
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#16

AW: Methodenaufruf nur für Klassenmethoden und Konstruktoren

  Alt 16. Dez 2014, 07:42
Vielleicht denke ich manchmal etwas zu aufwendig, da ich bei Größenberechnungen von visuellen Komponenten gerne selbst entscheide, ob das Angezeigte nachher eine ungerade oder gerade Anzahl von Bildpunkten hat und daher meistens in einer Abfrage mit Ceil() und Floor() arbeite um einen gleichmäßigen Randabstand beizubehalten.
Wie schaffst Du es, mit 'Ceil' und 'Floor' zu bestimmen, ob Du eine ungerade oder gerade Anzahl von Bildpunkten hast? Poste mal deinen Code, gerne auch in einem anderen Thread.
  Mit Zitat antworten Zitat
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#17

AW: Methodenaufruf nur für Klassenmethoden und Konstruktoren

  Alt 16. Dez 2014, 10:05
Hallo zusammen,
Wie schaffst Du es, mit 'Ceil' und 'Floor' zu bestimmen, ob Du eine ungerade oder gerade Anzahl von Bildpunkten hast? Poste mal deinen Code, gerne auch in einem anderen Thread.
Einfache Mathematik.

Quick and dirty mit einem Button und 3 Editfeldern zum Nachbauen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  liNewValue: Integer;
  lfValue: Extended;
begin

  lfValue := StrToInt(Edit1.Text) / StrToInt(Edit2.Text);

  if ((Ceil(lfValue) mod 2) = 0) then
   begin
    liNewValue := Ceil(lfValue);
   end
  else
   begin
    liNewValue := Ceil(lfValue) + 1;
   end;

  Edit3.Text := IntToStr(liNewValue);

end;
Wenn Du Ceil() nimmst, dann kommt nie 0 heraus, ausser der Dividend ist 0. Natürlich solltest Du auch noch vor der Teilung abfragen, ob der Divisor 0 ist, um einen Fehler zu vermeiden.
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.

Geändert von BadenPower (16. Dez 2014 um 10:13 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#18

AW: Methodenaufruf nur für Klassenmethoden und Konstruktoren

  Alt 16. Dez 2014, 10:19
Also du benötigst ein abgewandelten Integer DIV
Delphi-Quellcode:
function IntCeilDiv( Val1, Val2 : Integer ) : Integer;
begin
  Result := Val1 div Val2;
  if not ( Val1 mod Val2 = 0 ) then
    Inc( Result );
end;
und kannst dann
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  liNewValue: Integer;
begin

  liNewValue := IntCeilDiv( StrToInt(Edit1.Text), StrToInt(Edit2.Text) );

  if not ( liNewValue mod 2 = 0 ) then
    Inc( liNewValue );

  Edit3.Text := IntToStr(liNewValue);

end;
Hab ich das so richtig verstanden?

UPDATE
So geht es auch und ist damit kurz und knackig und man sieht auch sofort, was beabsichtigt ist
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  liNewValue: Integer;
begin

  liNewValue := Ceil( StrToInt(Edit1.Text) / StrToInt(Edit2.Text) );

  if not ( liNewValue mod 2 = 0 ) then
    Inc( liNewValue );

  Edit3.Text := IntToStr(liNewValue);

end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (16. Dez 2014 um 10:23 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#19

AW: Methodenaufruf nur für Klassenmethoden und Konstruktoren

  Alt 16. Dez 2014, 10:20
(x mod 2) = 0 ... Du meinst also NOT Delphi-Referenz durchsuchenODD?

Zitat:
Delphi-Quellcode:
function IntCeilDiv( Val1, Val2 : Integer ) : Integer;
begin
  Result := Val1 div Val2;
  if Val1 mod Val2 <> 0 then
    Inc( Result );
end;
Immer aufrunden?

Delphi-Quellcode:
Result := (Val1 + 1) div 2;

Result := (Val1 + Val2 div 2) div Val2;
Vor dem Dividieren die Hälfte des Divisors hinzuaddiert, führt zu einem arithmetischem Aufrunden, da man den 0-Wert um die Hälfte (auf 0,5) verschoben hat. (oder wie auch immer man das auf Mathematikdeutsch ausdrückt)
$2B or not $2B

Geändert von himitsu (16. Dez 2014 um 10:24 Uhr)
  Mit Zitat antworten Zitat
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#20

AW: Methodenaufruf nur für Klassenmethoden und Konstruktoren

  Alt 16. Dez 2014, 11:29
Hallo zusammen,

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  liNewValue: Integer;
begin

  liNewValue := Ceil( StrToInt(Edit1.Text) / StrToInt(Edit2.Text) );

  if not ( liNewValue mod 2 = 0 ) then
    Inc( liNewValue );

  Edit3.Text := IntToStr(liNewValue);

end;
So geht's natürlich auch, wenn Du den Float-Wert nicht noch für andere Berechnungen benötigst.
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:32 Uhr.
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