Autor Beitrag
Eumel
Hält's aus hier
Beiträge: 13



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Fr 05.07.02 18:31 
Versuch es mal so:
ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Fr 05.07.02 19:15 
Danke, geht wunderbar. :D

Wie kann ich die neuen Labels auch noch mit der Maus verschieben?

Hat jemand schon so was gemacht?

EM.
DBR
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 46



BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 46



BeitragVerfasst: Sa 06.07.02 13:22 
na, wie es Tino eben gesagt hat.

NewLabel.caption:='Das ist der neue Text';
Eumel Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: 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:
ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Sa 06.07.02 13:50 
Dank, genau so wollt ich das .

EM.
Eumel Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: 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 :cry: :
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Sa 06.07.02 20:35 
Hallo,

niemals Destroy direckt aufrufen. Nehme anstelle dessen Free.

Gruß
Klabautermann
Eumel Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: 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. :roll:
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: 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



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 89



BeitragVerfasst: 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 :cry:

MFG SpeedyGTD
Alfons-G
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 307

Win XP Prof, Linux, Win 7
D5 Prof, D7 Architect, D2005 Architect, D2007 Architect
BeitragVerfasst: Do 25.07.02 08:59 
Du musst vorher die onClick-Prozedur erstellen. Dann kannst Du sie zuweisen:
ausblenden 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.

:idea:

_________________
Alfons Grünewald