Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Zahl grafisch anzeigen lassen (https://www.delphipraxis.net/178743-zahl-grafisch-anzeigen-lassen.html)

lollypop 24. Jan 2014 16:12

Zahl grafisch anzeigen lassen
 
Hallo liebe Community,

Ich versuche mal meine Situation zu erklären:
Ich habe eine Listbox,
in die verschiedene Zahlen hinzugefügt werden.
die Summe der Zahlen wird berechnet (Habe den Wert "summe" genannt, Typ integer). Soweit so gut.
Jetzt soll dem Benutzer diese Summe grafisch angezeigt werden.
Als kleine farbige Quadrate/Blöcke die unterhalb der List box platziert werden.

Sind in der Listbox folgende zahlen: 2, 3, 4, 5...

dann ist die Summe 14, es sollen unter der Listbox dann 14 Quadrate erscheinen.


bei 0 zahlen keine Quadrate,
bei 14 eben 14 Quadrate,
bei 19 sollen es 19 sein...

die Summe ändert sich ständig.

Für jede Zahl müsste ein Objekt erstellt werden, aber ich komme einfach nicht darauf, wie es
gehen könnte.
Vielleicht habt ihr eine Idee?

lbccaleb 24. Jan 2014 16:29

AW: Zahl grafisch anzeigen lassen
 
Das kannst du ganz einfach mit einer for-Schleife machen. Wenn du danach sust, wirst du bestimmt fündig :)

nuclearping 24. Jan 2014 18:58

AW: Zahl grafisch anzeigen lassen
 
Delphi-Quellcode:
const
  SHAPE_WIDTH = 10;
  SHAPE_HEIGHT = 10;
var
  Quadrate, i, l, t: Integer;
  Shape: TShape; // uses ExtCtrls
begin
  // Quadrate werden in ein Panel namens Panel1 gezeichnet
  Panel1.DoubleBuffered := TRUE;
  Quadrate := 5;
  l := 0;
  t := 0;
  for i := 0 to Quadrate - 1 do
    begin
      Shape := TShape.Create(Panel1);
      with Shape do
        begin
          Parent := Panel1;
          Left := l;
          Top := t;
          Width := SHAPE_WIDTH;
          Height := SHAPE_HEIGHT;
          Color := clSkyBlue;
        end;
      Inc(l, SHAPE_WIDTH);
      if (l > Panel1.ClientWidth) then
        begin
          l := 0;
          Inc(t, SHAPE_HEIGHT);
        end;
    end;
end;

Bummi 24. Jan 2014 19:36

AW: Zahl grafisch anzeigen lassen
 
Statt mit Controls zu jonglieren könntest Du auch ein Paintbox verwenden und diese in OnPaint die Quadrate zeichnen lassen, zu aktualisieren invalidate aufrufen.

Volker Z. 24. Jan 2014 23:15

AW: Zahl grafisch anzeigen lassen
 
Hallo,

ich würde eher Bummis Ansatz wählen: Denn den Spass mit Controls (TShape) zu erledigen heißt ja auch diese wieder los zu werden (im Eingangspost steht da was von: "die Summe ändert sich ständig."); das ist zwar eigentlich auch kein Problem, aber lästiger Mehraufwand.

Man könnte also den Code von nuclearping (leicht geändert: Es kommt besser, wenn die Quadrate nicht abgeschnitten werden) und den Ansatz von Bummi vereinen zu:
Delphi-Quellcode:
const
  SQUARE_SIDE = 20;

procedure TForm1.PaintBox1Paint(Sender: TObject);
var
  i, l, t : Integer;
begin
  PaintBox1.Canvas.Brush.Color := clSkyBlue;

  l := 0;
  t := 0;
  for i := 1 to FSum do
    begin
      PaintBox1.Canvas.FillRect (Rect (l, t, l + SQUARE_SIDE, t + SQUARE_SIDE));
      Inc (l, SQUARE_SIDE + 2);
      if PaintBox1.Width < l + SQUARE_SIDE then
        begin
          l := 0;
          Inc (t, SQUARE_SIDE + 2)
        end
    end
end;
Wann jetzt noch ein Invalidate notwendig wird wirst Du sicherlich rausfinden.

[EDIT]Wie unhöflich von mir[/EDIT] Willkommen in der DP

Gruß

nuclearping 25. Jan 2014 00:07

AW: Zahl grafisch anzeigen lassen
 
Ja, stimmt. Die Quadrate in eine TPaintBox zu zeichnen ist natürlich die simplere Variante. Keine Ahnung, warum ich als erstes auf TShape gekommen bin. :wall: :mrgreen:

hathor 25. Jan 2014 08:01

AW: Zahl grafisch anzeigen lassen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Schriftname: WINGDINGS
Ist in jedem WINDOWS.

Delphi-Quellcode:
procedure TForm1.Button23Click(Sender: TObject);
begin
Memo1.Font.Name:= 'WingDings';
Memo1.Font.Size:=24;
Memo1.lines.add('xnm');
Memo1.lines.add('qwertzuiopü+');
Memo1.lines.add('asdfghjklöä#');
Memo1.lines.add('1234567890ß');
end;

Codix32 25. Jan 2014 13:09

AW: Zahl grafisch anzeigen lassen
 
Gibt es eigentlich die Möglichkeit mit Delphi oder einem nennen wir es Generator eigene
Schriftarten zu erstellen?

Mein eigenes:
Delphi-Quellcode:
Memo1.Font.Name:= 'MeinDings';

nuclearping 25. Jan 2014 13:21

AW: Zahl grafisch anzeigen lassen
 
Das hat mit Delphi nichts zu tun. Du brauchst ein Tool, womit du TTF (True Type Font) Dateien erstellen und dann (zB) in deinem Windows installieren kannst. Dann kannst du sie mit
Delphi-Quellcode:
Memo1.Font.Name := 'MeinIrgendwas';
auch verwenden.


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