AGB  ·  Datenschutz  ·  Impressum  







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

Fehler beim Parent setzen eines Labels

Ein Thema von CreativeMD · begonnen am 27. Jun 2012 · letzter Beitrag vom 9. Jul 2012
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von CreativeMD
CreativeMD

Registriert seit: 11. Okt 2011
127 Beiträge
 
Delphi XE2 Architect
 
#1

Fehler beim Parent setzen eines Labels

  Alt 27. Jun 2012, 20:40
Hi,
ja wie der Fehler schon sagt gibt es einen Fehler beim setzen eines Parent beim Labels.

Delphi-Quellcode:

var
Label_Create: TLabel;

//Nach einigen Zeilen Code
...

procedure addText(Text: String);
begin
  Label_Create := TLabel.Create(Form1.Panel1);
  Label_Create.Parent := Form1.Panel1;

  Label_Create.Caption := Text;
  Label_Create.Top := 0;
  Label_Create.Left := 10;
  Label_Create.Autosize := true;
  Label_Create.Tag := 0;
  Label_Create.OnMouseEnter := Form1.onMouseOver;
  Label_Create.OnMouseLeave := Form1.onMouseOut;

  Form1.Text_Objects.Add(Label_Create);

  newMessage;

end;
Ich weiß nicht wo mein Fehler liegt, es stürtz auch erst beim 2. oder 3. Aufruf der Funktion ab.

Kann mir jemand sagen was ich falsch mache.

Vielen Dank im voraus.

Geändert von CreativeMD (27. Jun 2012 um 20:45 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Fehler beim Parent setzen eines Labels

  Alt 27. Jun 2012, 20:55
ja wie der Fehler schon sagt gibt es einen Fehler beim setzen eines Parent beim Labels.
Der Fehler sagt absolut garnichts.
Also was für ein Fehler denn?

Wo/Wann wird diese Prozedur aufgerufen?





weitere Tipps:

Und warum ist sie keine Methode der TForm1, wo doch alles auf diese Form hinausläuft?

Zitat:
Delphi-Quellcode:
var
  Label_Create: TLabel;
Gibt es einen Grund, warum das keine lokale Variable ist?
Oder nutzt du wirklich wo anders nochmal diese Referenz des Labels?

PS: "Parent setzen" ist ein Wort, wobei "das Setzen" (beim Setzen) das Hauptwort ist.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (27. Jun 2012 um 21:09 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von CreativeMD
CreativeMD

Registriert seit: 11. Okt 2011
127 Beiträge
 
Delphi XE2 Architect
 
#3

AW: Fehler beim Parent setzen eines Labels

  Alt 28. Jun 2012, 16:50
Ich arbeite an einem Chatprogramm
und zur Verschönerung nehme ich kein Memo, sondern
füge die Objekte in ein Panel.

Chatsystem.pas:
Delphi-Quellcode:
unit ChatSystem;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, IdContext, Vcl.ComCtrls, Vcl.StdCtrls,
  IdCustomTCPServer, IdTCPServer, IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient, Vcl.Menus, Vcl.ExtCtrls, mmSystem, ClipBrd, User, Contnrs,
  Data.DB, Datasnap.DBClient, Datasnap.Win.MConnect, Datasnap.Win.SConnect,
  Vcl.OleCtrls, SHDocVw, JvExStdCtrls, JvRichEdit, ShellApi;

procedure renderLabels;
procedure addButton(id: Integer; Text: String);
procedure addProgessbar(id: Integer);
procedure addImage(Text: String);
procedure addText(Text: String);
procedure addUserText(Text: String);
procedure newMessage;
procedure Create;

implementation

uses Main, Optionen, Aufnahme, Beitreten, Erstellen, Favoriten, Feld, Player,
  FileSystem;

var
  Label_Create: TLabel;
  Image_Create: TImage;
  Progressbar_Create: TProgressBar;
  Button_Create: TButton;
  current_Height : Integer;

procedure Create;
begin

end;

  procedure newMessage;
  begin
  renderLabels;
    Form1.ScrollBar1.Position := current_Height - Form1.ScrollBar1.PageSize;
    renderLabels;
  end;

procedure renderLabels;
var
  zahl: Integer;
begin

  current_Height := 0;

  for zahl := 0 to Form1.Text_Objects.count - 1 do
  begin

    case (Form1.Text_Objects[zahl] as TComponent).Tag of
      0:
        begin
          // Label
          (Form1.Text_Objects[zahl] as TLabel).Top := current_Height -
            Form1.ScrollBar1.Position;
          current_Height := current_Height +
            (Form1.Text_Objects[zahl] as TLabel).Height;
        end;

      1:
        begin
          // Ausrechnen der Größe
          (Form1.Text_Objects[zahl] as TImage).Height :=
            Form1.Panel1.Height div 3;

          (Form1.Text_Objects[zahl] as TImage).Width :=
            (Form1.Text_Objects[zahl] as TImage)
            .Picture.Width div ((Form1.Text_Objects[zahl] as TImage)
            .Picture.Height div (Form1.Text_Objects[zahl] as TImage).Height);

          // Ausrechen der Position
          (Form1.Text_Objects[zahl] as TImage).Top := current_Height -
            Form1.ScrollBar1.Position;
          current_Height := current_Height +
            (Form1.Text_Objects[zahl] as TImage).Height;
        end;
      2:
        begin
          // Progressbar
          (Form1.Text_Objects[zahl] as TProgressBar).Top := current_Height -
            Form1.ScrollBar1.Position;
          current_Height := current_Height +
            (Form1.Text_Objects[zahl] as TProgressBar).Height;
        end;
      3:
        begin
          // button
          (Form1.Text_Objects[zahl] as TButton).Top := current_Height -
            Form1.ScrollBar1.Position;
          current_Height := current_Height +
            (Form1.Text_Objects[zahl] as TButton).Height;
        end;
    end;

  end;
  current_Height := current_Height + 10;

  if Form1.Panel1.Height < current_Height then
  begin
  Form1.ScrollBar1.Max := current_Height;
    Form1.ScrollBar1.PageSize := Form1.Panel1.Height;
    Form1.ScrollBar1.Enabled := true;

  end
  else
  begin
    Form1.ScrollBar1.Enabled := false;
  end;



 Application.ProcessMessages;
end;

procedure addUserText(Text: String);
begin
  Label_Create := TLabel.Create(Form1.Panel1);
  Label_Create.Parent := Form1.Panel1;

  Label_Create.Caption := Text;
  Label_Create.Top := 0;
  Label_Create.Left := 0;
  Label_Create.Autosize := false;
  Label_Create.Font.size := 13;

  Label_Create.Width := Form1.Panel1.Width;
  Label_Create.Height := 20;

  Label_Create.Font.Color := clHotLight;

  Label_Create.Tag := 0;
  Label_Create.OnMouseDown := Form1.onMouseClick;
  Label_Create.Cursor := crHandPoint;

  Form1.Text_Objects.Add(Label_Create);

  //newMessage;
end;

procedure addText(Text: String);
begin
  Label_Create := TLabel.Create(Form1.Panel1);
  Label_Create.Parent := Form1.Panel1;

  Label_Create.Caption := Text;
  Label_Create.Top := 0;
  Label_Create.Left := 10;
  Label_Create.Autosize := true;
  Label_Create.Tag := 0;
  Label_Create.OnMouseEnter := Form1.onMouseOver;
  Label_Create.OnMouseLeave := Form1.onMouseOut;

  Form1.Text_Objects.Add(Label_Create);

  newMessage;

end;

procedure onMouseOver(Sender: TObject);
begin
  case (Sender as TComponent).Tag of
    0:
      (Sender as TLabel).Font.Style := (Sender as TLabel).Font.Style + [fsBold];
end;

renderLabels;
end;

procedure onMouseOut(Sender: TObject);
begin
  case (Sender as TComponent).Tag of
    0:
      (Sender as TLabel).Font.Style := (Sender as TLabel).Font.Style - [fsBold];
end;
renderLabels;
end;

procedure addImage(Text: String);
begin
  Image_Create := TImage.Create(Form1.Panel1);
  Image_Create.Parent := Form1.Panel1;
  Image_Create.Picture.LoadFromFile(Text);
  Image_Create.Height := 150;
  Image_Create.Width := Image_Create.Picture.Width div
    (Image_Create.Picture.Height div Image_Create.Height);
  Image_Create.Stretch := true;
  Image_Create.Top := 0;
  Image_Create.Left := 10;
  Image_Create.Tag := 1;
  Image_Create.OnMouseDown := Form1.onMouseClick;
  Image_Create.DragMode := dmAutomatic;

  Form1.Text_Objects.Add(Image_Create);

  newMessage;
end;

procedure addProgessbar(id: Integer);
begin
  Progressbar_Create := TProgressBar.Create(Form1.Panel1);
  Progressbar_Create.Parent := Form1.Panel1;
  Progressbar_Create.Left := 10;
  Progressbar_Create.Top := 0;

  Progressbar_Create.Max := 100;
  Progressbar_Create.Position := 0;
  Progressbar_Create.Height := 20;
  Progressbar_Create.Width := 100;

  Progressbar_Create.Tag := 2;
  Progressbar_Create.MarqueeInterval := id;

  Form1.Text_Objects.Add(Progressbar_Create);

  newMessage;


end;

procedure addButton(id: Integer; Text: String);
begin
  Button_Create := TButton.Create(Form1.Panel1);
  Button_Create.Parent := Form1.Panel1;
  Button_Create.Caption := Text;
  Button_Create.Left := 10;
  Button_Create.Top := 0;
  // Button_Create.Height := Form1.Canvas.TextHeight(Text) + 10;
  // Button_Create.Width := Form1.Canvas.TextWidth(Text) + 10;
  Button_Create.Tag := 3;
  // Button_Create.TBDockHeight := id;

  Form1.Text_Objects.Add(Button_Create);

  newMessage;
end;

end.
http://i.imgur.com/QRXUE.png

Der Fehler passiert, aber nur wenn der Client oder der Server Aktiv sind, aber davor hat es funktioniert
und wenn ich mit dem Compiler den Code verfolge stürzt er beim 2 oder 3 mal ab.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

AW: Fehler beim Parent setzen eines Labels

  Alt 28. Jun 2012, 17:31
... Chatprogramm und zur Verschönerung nehme ich kein Memo
Du könntest aber auch ein TRichEdit verwenden.
Damit ist es möglich, dass jeder der Chatter seinen eigenen Font + Farbe erhält.
Mit etwas Mühe kann man sogar Smilies und Avatarbilder als Grafiken in den Text einfügen.

Auf jeden Fall würdest du Dir eine Menge an (fehlerhaftem) Programmcode sparen.
Du kannst den Chatverlauf auch bequem im TXT oder RTF-Format speichern.
Scrollen und Suchen sind ebenfalls viel einfacher zu realisieren, bzw. sind von Haus aus vorhanden.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von CreativeMD
CreativeMD

Registriert seit: 11. Okt 2011
127 Beiträge
 
Delphi XE2 Architect
 
#5

AW: Fehler beim Parent setzen eines Labels

  Alt 28. Jun 2012, 17:36
ja,
aber in diese Chatsystem kann ich jedes beliebiges Objekt einfügen.
Vorallem soll man auch Daten senden können.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#6

AW: Fehler beim Parent setzen eines Labels

  Alt 28. Jun 2012, 17:41
Und was hat das mit den verwendeten Anzeigekomponenten zu tun?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von CreativeMD
CreativeMD

Registriert seit: 11. Okt 2011
127 Beiträge
 
Delphi XE2 Architect
 
#7

AW: Fehler beim Parent setzen eines Labels

  Alt 28. Jun 2012, 17:49
Und was hat das mit den verwendeten Anzeigekomponenten zu tun?
Ich glaube du hast es auf das Daten senden bezogen.

Ich will das man wie in Skype einen Button hat wo man anschließend auswählen kann wohin man die Datei
downloaden will und dann sieht wie weit es fortgeschritten ist (Progessbar).
Ich kenn mich mit dem RichEdit nicht aus.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Fehler beim Parent setzen eines Labels

  Alt 28. Jun 2012, 18:56
Hallo,

warum

Delphi-Quellcode:
  for zahl := 0 to Form1.Text_Objects.count - 1 do
  begin

    case (Form1.Text_Objects[zahl] as TComponent).Tag of
      0:
        begin
          // Label
          (Form1.Text_Objects[zahl] as TLabel).Top := current_Height -
            Form1.ScrollBar1.Position;
          current_Height := current_Height +
            (Form1.Text_Objects[zahl] as TLabel).Height;
        end;
warum nicht

if (Form1.Text_Objects[zahl] is TLabel of Nicht dass du in Text_Objects andere Komponenten reinpackst mit Tag=0,
kann es knallen.


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von CreativeMD
CreativeMD

Registriert seit: 11. Okt 2011
127 Beiträge
 
Delphi XE2 Architect
 
#9

AW: Fehler beim Parent setzen eines Labels

  Alt 28. Jun 2012, 18:58
if (Form1.Text_Objects[zahl] is TLabel of
Könntest du mir erklären was diese Zeile Code bedeutet?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Fehler beim Parent setzen eines Labels

  Alt 28. Jun 2012, 20:01
AS = den Typ konvertieren und wenn's nicht geht, dann knallt es ganz laut
IS = auf diesen Typ prüfen (und auf dessen Nachkommen)

Wozu unsichere Prüfunen auf "Tag", wenn man auch gleich den Typen sicher prüfen kann?





Und dennoch fehlt so Einiges, denn ich hatte nicht umsonst nach den Aufrufen gefragt.
Also wie und wo diese Prozeduren verwendet werden.

Aber auch ansonsten ist da so Einiges nicht wirklich gut.

Zitat:
Delphi-Quellcode:
var
  Label_Create: TLabel;
  Image_Create: TImage;
  Progressbar_Create: TProgressBar;
  Button_Create: TButton;
gehört eindeutig lokal in die entsprechenden Prozeduren.

Die Objektliste gehört in diese Unit,
wobei diese Liste und die Prozeduren besser in eine Klasse reingehören sollte.
OOP ist eine tolle sache und hat viele Vorteile.

Der direkte Zugriff auf Form1 ist nicht schön,
stattdessen eher ein Property in der OOP-Klasse, wo die Form an das Objekt übergeben wird, anstatt es sich das selber holt.

Statt dem Zugriff auf die Form, würde ich diese OOP-Klasse z.B. von TPanel, TScrollBox oder Dergleichen abgeleitet werden und die behandelt dann alles (ScrollBar, die ganzen Edits und weitere Controls) ausschließlich in sich selber.


Und schwups, schon hast du ein eigenständiges System, welches man wiederverwenden kann
und außerdem ist alles zusammen an einem Ort, was eigentlich auch zusammengehören würde.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (28. Jun 2012 um 20:10 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 16:03 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