Autor |
Beitrag |
Eumel
Hält's aus hier
Beiträge: 13
|
Verfasst: Fr 05.07.02 18:13
Hallo,
ich möchte einen kleinen Formulareditor schreiben.
Nun weis ich nicht wie ich ein neues Label auf mein Formular(in meinen Formulareditor) bekomme.
Das Problem ist das ich mehrere Labels hinzufügen muss.
Wer kann mir helfen
Zur Zeit hab ich 2 Variablen wo ich die Kordinaten eintrage und einen Button um das Label einzufügen.
EM.
|
|
Tino
Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: Fr 05.07.02 18:31
Versuch es mal so:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| NewLabel := tLabel.Create (Self); With NewLabel Do Begin Parent := Self Left := 10; // Hier die Variable setzen Top := 10; // Hier die Variable setzen Caption := 'Neues Label'; End; |
|
|
Eumel
Hält's aus hier
Beiträge: 13
|
Verfasst: Fr 05.07.02 19:15
Danke, geht wunderbar.
Wie kann ich die neuen Labels auch noch mit der Maus verschieben?
Hat jemand schon so was gemacht?
EM.
|
|
DBR
Beiträge: 46
|
Verfasst: Fr 05.07.02 20:58
im unteren Teil von
home.pages.at/dbr-so.../delphi/schieben.htm
steht das Prinzip.
Du musst deinen Labels aber vorher das Event MouseDown zuweisen
|
|
Eumel
Hält's aus hier
Beiträge: 13
|
Verfasst: Sa 06.07.02 12:02
Titel: Labels ansprechen ?!
Nun hab ich das gröbste eingebaut.
Mein Problem jetzt: wie kann ich jetzt die Eigenschaften der neuen Labels ändern? Bzw. wie spreche ich diese an.
Ich verwende ähnlich den Code von Tino oben.
EM.
|
|
Tino
Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: Sa 06.07.02 13:05
Die Eigenschaften setzt Du genau so wie ich oben die Properties Parent, Left, Top und Caption gesetzt habe!
Was möchtest Du denn zuweisen?
TINO
|
|
Eumel
Hält's aus hier
Beiträge: 13
|
Verfasst: Sa 06.07.02 13:13
Sorry hab es ein bissel falsch formuliert ... ich meinte: wie kann ich diese nachträglich ändern?
Angenohmen ich hab mir mehrere Labels erzeugt und möchte diesen jetzt anders Positionieren oder die Schriftart ändern etc. , wie kann ich diese dann ansprechen?
|
|
DBR
Beiträge: 46
|
Verfasst: Sa 06.07.02 13:22
na, wie es Tino eben gesagt hat.
NewLabel.caption:='Das ist der neue Text';
|
|
Eumel
Hält's aus hier
Beiträge: 13
|
Verfasst: Sa 06.07.02 13:32
Ja, ist ja richtig, nur ich hab die Labels ja dynamisch hinzugefügt (siehe post 1 und 2) also nicht vorher definiert.
Mein Ziel ist beliebig viele Labels zu erzeugen (was auch schon geht) und diese zu ändern (in allen ihren eigenschaften)
EM.
|
|
Tino
Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: Sa 06.07.02 13:42
Ich denke das Problem das du hast (eigentlich ist es kein Problem) ist das Du keinen direkten Zugriff mehr auf die Labels hast. Beim Erstellen von Labels zur Entwicklungszeit kannst Du ja direkt per Variable auf das Label zugreifen:
Label1.Caption := 'Neuer Text';Das Problem ist das natürlich die Variabel Label1 beim dynamischen erstellen nicht existiert (Jedenfalls in Deinem Code).
Ich weiß nicht wann Du die Eingenschaften ändern willst? Wenn es z. B. in einem Event ist (z. B. das OnClickEvent) ist dann könntest Du über die Variable Sender auf das Label zugreifen. Z. B. so:
Quelltext 1: 2: 3: 4: 5:
| Procedure tForm1.DoLabelClick (aSender: tObject); Begin If aSender is tLabel Then tLabel (aSender).Caption := 'Neuer Text'; End; |
Eine weiter Möglichkeit wäre alle Komponenten die Du dynamisch erstellst hast in einem tList-Objekt hinzuzufügen und dann kannst Du halt über alle Objekte zur Laufzeit über dieses tList-Objekt zugreifen!
Gruß
|
|
Eumel
Hält's aus hier
Beiträge: 13
|
Verfasst: Sa 06.07.02 13:50
Dank, genau so wollt ich das .
EM.
|
|
Eumel
Hält's aus hier
Beiträge: 13
|
Verfasst: Sa 06.07.02 19:43
Titel: Labels wieder löschen ... Programm stürtzt mit Ausnahmefehle
Hallo,
ich hab mal wieder ein Problem.
Jetzt funktioniert zwar das anlegen und ändern der Labels aber löschen lassen sich diese leider nicht.
wenn ich folgenden code verwende stürt mein Programm mit einen Ausnahmefehler ab :
Quelltext 1: 2: 3:
| if Form1.cbDel.Checked = true then If MessageDlg('Objekt löschen?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then tLabel (Sender).Destroy; |
EM.
|
|
Klabautermann
Beiträge: 6366
Erhaltene Danke: 60
Windows 7, Ubuntu
Delphi 7 Prof.
|
Verfasst: Sa 06.07.02 20:35
Hallo,
niemals Destroy direckt aufrufen. Nehme anstelle dessen Free.
Gruß
Klabautermann
|
|
Eumel
Hält's aus hier
Beiträge: 13
|
Verfasst: Sa 06.07.02 20:52
danke. funktioniert zwar aber es kommt sporatisch oft der fehler "zugriffsverletzung bei adresse ..."
also ist das auch nicht die lösung.
|
|
Klabautermann
Beiträge: 6366
Erhaltene Danke: 60
Windows 7, Ubuntu
Delphi 7 Prof.
|
Verfasst: So 07.07.02 00:25
Eumel hat folgendes geschrieben: | danke. funktioniert zwar aber es kommt sporatisch oft der fehler "zugriffsverletzung bei adresse ..." |
Kann es sein, das du versuchst auf das Object zuzugreifen, nachdem du es freigegeben hast? Ind irgendeinem Ereignis vielleicht?
Gruß
Klabautermann
|
|
Eumel
Hält's aus hier
Beiträge: 13
|
Verfasst: Mo 08.07.02 10:09
Zitat: | Kann es sein, das du versuchst auf das Object zuzugreifen, nachdem du es freigegeben hast? Ind irgendeinem Ereignis vielleicht? |
Ich verwende die OnClick Anweisung, zum löschen der Labels. Kann es sein das diese Probleme bereitet, wenn das Label terminiert wird?
Gruß EM.
|
|
DaSurv
Hält's aus hier
Beiträge: 8
|
Verfasst: Do 18.07.02 00:14
Dein OnClick-Ereignis zum Löschen sollte eigentlich nicht das Problem sein.
Ich denke, das Klabautermann gemeint hat, dass du in irgendeiner anderen Prozedur ein schon gelöschtes Label nochmals ansprichts.
Zum Beispiel in einer Prozedur, in der du alle selbst erstellten Labels verschiebst oder löscht.
DaSurv
|
|
SpeedyGTD
Beiträge: 89
|
Verfasst: Do 25.07.02 02:26
Titel: Code
Hallo ich hab jetzt eine wahrscheinlich ziemlich dumme Frage dazu, aber wie kann ich den zur Laufzeit neu erzeugten Labels jetzt Code hinzufügen?
Ich konnte dies aus den bisherigen Antworten nicht erkennen
MFG SpeedyGTD
|
|
Alfons-G
Beiträge: 307
Win XP Prof, Linux, Win 7
D5 Prof, D7 Architect, D2005 Architect, D2007 Architect
|
Verfasst: Do 25.07.02 08:59
Du musst vorher die onClick-Prozedur erstellen. Dann kannst Du sie zuweisen: Quelltext 1: 2: 3: 4: 5: 6: 7:
| procedure MeinFormular.MeinKlick (Sender: TObject); begin ... end; ... MeineKomponente.onClick := MeinKlick; ... | Die Prozedur deklarierst Du im private-Teil Deines Formulars.
_________________ Alfons Grünewald
|
|