AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TLabel innerhalb TImage

Ein Thema von Zuckerberg · begonnen am 8. Okt 2010 · letzter Beitrag vom 8. Okt 2010
Antwort Antwort
Zuckerberg

Registriert seit: 8. Okt 2010
55 Beiträge
 
Delphi XE Professional
 
#1

TLabel innerhalb TImage

  Alt 8. Okt 2010, 19:19
Hallo Liebe Community,
seid gegrüßt!

Also ich habe versucht so eine Art "GraffitiWand" zu programmieren ...

hier ist der Code ...

Delphi-Quellcode:
var
  GUI: TGUI;
  Spruch : array [1..50] of TLabel;
  //n : integer; //Anzahl der Labels

implementation

{$R *.DFM}

procedure TGUI.FormCreate(Sender: TObject);
var
   x,y : Integer;
begin
     Randomize;

     for x:=0 to GraffitiWand.Height do // Macht Leinwand weiß
     for y:=0 to GraffitiWand.Width do
     GraffitiWand.Canvas.Pixels[x,y];
end;

procedure TGUI.GErzeugenBtnClick(Sender: TObject);
var
i : Integer;
begin
     for i:=1 to 50 do
     begin
     Spruch[i]:= TLabel.Create(self);//hier habe ich es mal mit (GraffitiWand) versucht und parent:=Graffitiwand KLAPPT ABER NICHT
     Spruch[i].parent:=self as TWincontrol;

     Spruch[i].Transparent:=True; //wegen Hintergrund
     Spruch[i].Top:=Random(220); // hier ist der Bereich der Leinwand die die Position der Label eingrenzen sollte ...
     Spruch[i].Left:=Random(230);// hier ist der Bereich der Leinwand die die Position der Label eingrenzen sollte ...
     Spruch[i].Font.Size:=17;
     Spruch[i].Font.Name:='Playbill';
     Spruch[i].Caption:=GEingabeEdt.Text;
     end;
end;
NUN das programm soll auf einer Leinwand (bei mir mit "GraffitiWand" benannt ; typ TImage)
Sprüche abbilden die vorher auf einem Edit gemacht wurden ...

Das Problem :
Ich bekomme es nicht hin das ich sage das die erzeugten Labels(die die Sprüche enthalten...) der Leinwand gehören, sprich wenn sie per Zufall erzeugt werden, werden sie auch außerhalb der Leinwand positioniert ...

Ok nun könnte man einfach die perfekte Position der Leinwand raus finden, dass ist aber nicht sehr elegant ... und birgt einen Fehler nämlich wenn das Label zu weit rechts positioniert wird, überschreitet es die Leinwand ...

Wunschlösung wäre das die Labelsprüche nur innerhalb dieser Leinwand angezeigt werden ... aber dafür müsste ich die Label's abhängig zur Leinwand machen , aber wie ????

bitte um Hilfe

PS : ach ja und noch etwas ...
Wenn ich die Label dann wieder Löschen möchte geht das mit free und einer for-schleife oder eher anders ... ?

PSS: ich will einfach mal einen smiley ausprobiern und hiermit tue ich das ...

Geändert von Zuckerberg ( 8. Okt 2010 um 19:21 Uhr) Grund: noch was
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli
Online

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: TLabel innerhalb TImage

  Alt 8. Okt 2010, 19:29
Hallo Zuckerberg und herzlich willkommen!

Du kannst mit GraffitiWand.Canvas.TextWidth(Spruch) die benötigte Breite berechnen und bei der Positionierung berücksichtigen...
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von Björn Ole
Björn Ole

Registriert seit: 11. Jul 2008
166 Beiträge
 
Delphi XE Professional
 
#3

AW: TLabel innerhalb TImage

  Alt 8. Okt 2010, 19:32
Hi und herzlich Willkommen.

Platziere doch deine Graffitiwand mit Align = alClient auf einem Panel (evtl Borders deaktivieren).
Dann weist du den Labels als Parent das Panel zu und brauchst vielleicht noch ein Label.BringToFront.
Bei der zufälligen Positionierung ziehst du einfach die Breite des Labels ab, damit es nicht zu weit rechts steht. Beachte aber, dass du die Caption davor setzen solltest.

Zitat:
Wenn ich die Label dann wieder Löschen möchte geht das mit free und einer for-schleife oder eher anders ... ?
Ja.
  Mit Zitat antworten Zitat
Zuckerberg

Registriert seit: 8. Okt 2010
55 Beiträge
 
Delphi XE Professional
 
#4

AW: TLabel innerhalb TImage

  Alt 8. Okt 2010, 19:35
Danke das ist schonmal interessant ...

nur wie bau ich das am "elegantesten" da rein ... ? @stahli
  Mit Zitat antworten Zitat
Zuckerberg

Registriert seit: 8. Okt 2010
55 Beiträge
 
Delphi XE Professional
 
#5

AW: TLabel innerhalb TImage

  Alt 8. Okt 2010, 19:37
Danke Björn klingt interessant das probier ich jetzt mal

Björn

soll das Panel sich auf der ganzen GUI erstrecken ???

Geändert von Zuckerberg ( 8. Okt 2010 um 19:41 Uhr) Grund: björn ?
  Mit Zitat antworten Zitat
Zuckerberg

Registriert seit: 8. Okt 2010
55 Beiträge
 
Delphi XE Professional
 
#6

AW: TLabel innerhalb TImage

  Alt 8. Okt 2010, 19:53
Ok danke mit dem Panel klappt es ...

aber gibt es den keine Möglichkeit es das auch mit dem Image hinzubekommen ????
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: TLabel innerhalb TImage

  Alt 8. Okt 2010, 19:59
TLabel (und ich glaub auch TImage) haben kein eigenes Canvas.
Diese zeichnen einfach nur auf das Canvas des Parents.

Beim TLabel ist dieses Parent also die Form.
Die Form liegt hinter dem Image und wird demnach durch das Image verdeckt und ist somit nicht sichtbar.

Selbst wenn TImage auch nur auf das Canvas der Form zeichnet und somit das Label nicht wirklich verdeckt,
dann kommen sich immernoch die Zeichenroutinen der Beiden in die Quere und es funktioniert dennoch nicht richtig.

Besser also zu zeichnest den Text direkt in das Bild oder du mußt eine andere Textkomponente verwenden, welche über dem Image liegt.
TStaticText hat z.B. sein eigenes Canvas, worauf es sich zeichnet.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 8. Okt 2010 um 20:01 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

AW: TLabel innerhalb TImage

  Alt 8. Okt 2010, 20:02
@Zuckerberg: Bitte benutze nächstes mal bitte den "Bearbeiten"-Button anstelle 3 Beiträge hintereinander zu verfassen. Das verfassen mehrere Beiträge hintereinander (also ohne das zwischenzeitlich jemand anderes was gepostet hat) nennt man pushen und ist hier im Forum innerhalb von 24 Stunden nicht erwünscht.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli
Online

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: TLabel innerhalb TImage

  Alt 8. Okt 2010, 20:04
Ähh, warte mal, ich habe da vorhin etwas falsch gelesen...

Halte Dich mal an den Tip von Björn.

Und geh das ganze etwas einfacher an.
Wenn Du Labels benutzt, kannst Du diese ja auf das Formular setzen oder auf ein Panel. Dem Formular bzw. dem Panel kannst Du einfach die Farbe weiß zuweisen.
Dann weist Du dem Label einen Text zu und kannst (wenn die Eigenschaft AutoSize gesetzt ist) im Label.Width die benötigte Preite ablesen.
Dann setzt Du Label.Left auf einen Wert von 0 .. ParentPanel.Widt - Label.Width.

So ungefähr sollte es klappen...



roter Kasten->
Du kannst auch auf einen Canvas direkt schreiben, dann würde mein erster Beitrag schon passen.
Du müsstest vielleicht mal genauer schildern, was Du genau erreichen willst.
Es gibt verschiedenste Lösungen, je nachdem was man genau machen will.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Antwort Antwort


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 11:47 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