Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Punkte in einer Paintbox beschriften?! (https://www.delphipraxis.net/46861-punkte-einer-paintbox-beschriften.html)

fabiO 1. Jun 2005 20:07


Punkte in einer Paintbox beschriften?!
 
Hallo,

Ich habe in der Schule eine Aufgabe bekommen, dass ich in einer Paintbox 4 Zufällig positionierte Ellipsen eintragen soll, die 1. halt eine unterschiedliche Lage besitzen, 2. eine unterschiedliche Farbe und 3. deren Bezeichnung unter ihnen erscheint.

Die ersten 2 Aufgaben habe ich gelöst, doch bei der 3ten tappe ich im Dunkeln.

Ich habe es mit einem Label versucht, doch das wird nich angezeigt, oder vielleicht auch von der Paintbox überdeckt, ich weiss es leider nicht.

Hier ma mein Quelltext:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls;

type
  TPoint = Record
    x,y : LongInt;
    end;
  TForm1 = class(TForm)
    PaintBox1: TPaintBox;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  Karte : array[1..4] of TPoint;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var x,y,z : Integer;
    ortsname : TLabel;
begin
  Paintbox1.Refresh;
  Randomize;
  For z := 1 to 4 do
    begin
      x := Karte[z].x;
      y := Karte[z].y;
      x := Random(Paintbox1.Width);
      y := Random(Paintbox1.Height);
      PaintBox1.Canvas.Pen.Color := RGB(random(256), random(256), random(256));
      PaintBox1.Canvas.Ellipse(x-2,y-2,x+2,y+2);
      Ortsname := TLabel.Create(Self);
      Ortsname.Caption := ('Ort ' + IntToStr(z));
      Ortsname.Top := y+5;
      Ortsname.Left := x+5;
    end;
end;

end.
Wäre nett wenn mir einer auf die sprünge helfen könnte.

Gruss fabiO

Luckie 1. Jun 2005 20:20

Re: Punkte in einer Paintbox beschriften?!
 
Versuch es mal mit Delphi-Referenz durchsuchenTCanvas.TextOut.

Und wenn du es trotzdem mit deinem TLabel machen willst, dann setzt mal den Parent und setze es mit Delphi-Referenz durchsuchenBringtoFront in den Vordergrund. Desweiteren würde ich auf ein Bitmap im Speicher zeichnen und es bei bedarf, wenn sich was geändert hat oder wenn die Paintbox neugezeichnet werden muss (Delphi-Referenz durchsuchenOnPaint), auf den Canvas der Paintbox kopieren mit BitBlt.

Khabarakh 1. Jun 2005 20:59

Re: Punkte in einer Paintbox beschriften?!
 
Zitat:

Delphi-Quellcode:
type
  TPoint = Record
    x,y : LongInt;
    end;

TPoint musst du nicht selbst deklarieren, einfach die Unit Types einbinden. Desweiteren sollte randomize nur einmal im Programm aufgerufen werden, also am besten im OnCreate . Und nicht vergessen, das Label wieder freizugeben :!:

BenjaminH 2. Jun 2005 14:44

Re: Punkte in einer Paintbox beschriften?!
 
Zitat:

Zitat von fabiO
Ich habe es mit einem Label versucht, doch das wird nich angezeigt, oder vielleicht auch von der Paintbox überdeckt, ich weiss es leider nicht.
[...]
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var x,y,z : Integer;
    ortsname : TLabel;
begin
  Paintbox1.Refresh;
  Randomize;
  For z := 1 to 4 do
    begin
      x := Karte[z].x;
      y := Karte[z].y;
      x := Random(Paintbox1.Width);
      y := Random(Paintbox1.Height);
      PaintBox1.Canvas.Pen.Color := RGB(random(256), random(256), random(256));
      PaintBox1.Canvas.Ellipse(x-2,y-2,x+2,y+2);
      Ortsname := TLabel.Create(Self);
      Ortsname.Caption := ('Ort ' + IntToStr(z));
      Ortsname.Top := y+5;
      Ortsname.Left := x+5;
    end;
end;

Das Label wird dir nicht angezeigt, weil es nur innerhalb der ButtonClick Prozedur existiert!
Du musst das Label als Variable der Form deklarieren.
Und wie Khabarakh schon sagte, musst du das Label auch wieder freigeben!;

Viele Grüße, Benjamin

barf00s 2. Jun 2005 14:52

Re: Punkte in einer Paintbox beschriften?!
 
falsch, das Label wird nicht angezeigt, weil es kein "Parent" zugeordnet bekommen hat... bzw nur teilweise...

versuch mal "Label.Parent := PaintBox1;" nachdem dus erzeugt hast.......



aber wie Luckie schon gesagt hat, solltest das ganze mit TextOut machen, das spart ne ganze menge arbeit :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:31 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz