Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Paintbox- Text schreiben (https://www.delphipraxis.net/155716-paintbox-text-schreiben.html)

Dunkelbunt27 4. Nov 2010 19:11

AW: Paintbox- Text schreiben
 
Danke!
Fast gelöst:
Zitat:

Parent der Paintbox sollte das Panel sein
Jetzt sieht man meinen Text, jedoch flackert er, trotz Double Buffered...
Außerdem kann der Text nicht komplett angezeigt werden er wird am "Hallo Wel..." von etwas überdeckt.
Delphi-Quellcode:
Form1.PaintBox1.Canvas.TextOut(Schreibflaeche.Width div 2 - 25, 70,Schrift);
Wie kann das sein?

Edit:[entfernt]

Edit2:
Delphi-Quellcode:
procedure TForm1.PaintBox1Paint(Sender: TObject);
var  Schrift: string;
      canvas : TCanvas;
      x: integer;
begin
//Paintbox an Panel
PainBox1.Height:=Blatt.Height;
PaintBox1.Width:=Blatt.Width;
// Paintbox erstellen
PaintBox1:=TPaintbox.Create(self);
PaintBox1.Parent:=Panel1;
// Paintbox weiß färben
PainBox1.canvas.brush.color:=clwhite;
PaintBox1.Canvas.FillRect(Rect(0,0,PaintBox1.width,PaintBox1.height));

canvas := (Sender as TPaintBox).Canvas;
 // Schreibversuch
canvas.Brush.Color := clBlack;
Schrift:= 'Hallo Welt';

Form1.Panel1.canvas.TextOut(PaintBox1.Width div 2 -25, 70,Schrift);

end;
Das füht im Moment dazu:
Paintbox erstellt, jedoch komischerweise ist nur ein kleines Feld in der obeneren linken Ecke weiß und es steht Hallo Wel... dort drin. Es flackert...

sx2008 5. Nov 2010 05:15

AW: Paintbox- Text schreiben
 
Dein Code enthält leider einige Fehler.
1.) im OnPaint-Event
Delphi-Quellcode:
procedure TForm1.PaintBox1Paint
darf nur gezeichnet werden und nichts anderes

Zum Beispiel ist diese Grössenanpassung
Delphi-Quellcode:
//Paintbox an Panel
PainBox1.Height:=Blatt.Height;
PaintBox1.Width:=Blatt.Width;
verboten. Man muss das schon viel früher ausführen.
Aber Besten man setzt das Property Align der Paintbox auf alClient und spart sich die Zuweisung von Breite und Höhe.

2.) du erzeugst dynamisch eine Paintbox
Delphi-Quellcode:
// Paintbox erstellen
PaintBox1:=TPaintbox.Create(self);
PaintBox1.Parent:=Panel1;
Das geht gar nicht, denn die Paintbox muss natürlich schon früher erzeugt worden sein.
Wenn du innerhalb von OnPaint eine neue Paintbox erzeugst ist das natürlich tödlich.
Du hast zwei verschiedene Paintboxen (wobei eine sinnigerweise Painbox1 also auf Deutsch: "SchmerzBox1" heisst :-D) was ziemlich verwirrend ist.

Hier mal der bereinigte Code für nur eine Paintbox:
Delphi-Quellcode:
procedure TForm1.PaintBox1Paint(Sender: TObject);
var Schrift: string;
    canvas : TCanvas;
begin
   // zuerst den Canvas der Paintbox holen
   canvas := (Sender as TPaintBox).Canvas;
   // auch folgende Schreibweise wäre möglich
   canvas := PaintBox1.Canvas;
   
   // Paintbox weiß färben
   canvas.brush.color:=clwhite;
   canvas.FillRect(Rect(0,0,PaintBox1.width,PaintBox1.height));

   // Textausgabe
   canvas.Brush.Color := clBlack;
   Schrift:= 'Hallo Welt';

   canvas.TextOut((PaintBox1.Width div 2)-25, 70,Schrift);
end;

Dunkelbunt27 5. Nov 2010 14:45

AW: Paintbox- Text schreiben
 
Ersteinmal Danke!

Zitat:

Painbox1
Das war ein Schreibfehler :-D
Dein Code hat geholfen, jedoch muss man dort auch eine Kleinigkeit ändern.
Um die Farbe des Textes einzustellen muss man statt die Brush.Color zu ändern die Font eigenschaften ändern.
Standardmäßig ist die Schrift schwarz.
Zitat:

canvas.Brush.Color := clBlack;
Bewirkt, dass ein Rechteck um den Text schwarz gezeichnet wird... Dadurch wird der Text unsichtbar, da man schwarz auf schwarz nicht lesen kann.
Also muss es
Delphi-Quellcode:
canvas.Brush.Color := clWhite;
heißen, wenn man den schwarzen tetx auf weißem Hintergrund lesen möchte.

Ein Problem habe ich jedoch noch:
Delphi-Quellcode:
   canvas.brush.color:=clwhite;
   canvas.FillRect(Rect(0,0,PaintBox1.width,PaintBox1.height));
Das sollte meine Paintbox mit einem weißen Rechteck bemalen. Tut es aber nicht, stattdessen ist das Rechteck aus irgendeinem Grund nur 100 hoch und 100 breit. Wenn ich manuelle Werte eingeben wie:
canvas.FillRect(Rect(0,0,300,300));
dann wird das weiße Rehcteck schonmal größer. Kann man vielleicht Variablen (x,y) für Höhe und Breite verwenden?
Wieso reagiert das Programm auf
Code:
PaintBox1.width,PaintBox1.height
nicht?
(Vielleicht eine function benutzen? Wenn ja wie?)

Ich hoffe jemand weiß auf diese Fragen eine Antwort.

Dunkelbunt

Bummi 5. Nov 2010 17:53

AW: Paintbox- Text schreiben
 
Ein bisschen wenig Code um den Fehler nachzuvollziehen.

Bist Du auf dem falschen Canvas unterwegs?
Hast Du mehrere Paintboxen und kommst mit der Namensvergabe durcheinander?
Malst Du im OnPaint?


LG
Thomas

Dunkelbunt27 6. Nov 2010 11:30

AW: Paintbox- Text schreiben
 
Hi,
Zitat:

Bist Du auf dem falschen Canvas unterwegs?
Weiß nicht genau was du meinst, iegentlich nciht.

Zitat:

Hast Du mehrere Paintboxen und kommst mit der Namensvergabe durcheinander?
Nein. Ich habe 1ne Paintbox und keine Namensprobleme.

Zitat:

Malst Du im OnPaint?
Ja.

Dunkelbunt27 7. Nov 2010 10:36

AW: Paintbox- Text schreiben
 
Danke für eure Hilfe, ich habe jetzt auch für das letzte Problem eine Lösung gefunden.

Ich verwende um die Paintbox weiß zu färben:
statt dem
Delphi-Quellcode:
   canvas.brush.color:=clwhite;
   canvas.FillRect(Rect(0,0,PaintBox1.width,PaintBox1.height));
das
Delphi-Quellcode:
   canvas.brush.color:=clwhite;
   canvas.FillRect(Rect(0,0,Panel1.width,Panel1.height));
Da die Paintbox an das Panel gebunden ist passt das ganze.

Vielen Dank für eure Hilfe,
LG Dunkelbunt


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:26 Uhr.
Seite 2 von 2     12   

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-2025 by Thomas Breitkreuz