AGB  ·  Datenschutz  ·  Impressum  







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

Objekte zur Laufzeit erzeugen

Ein Thema von Luki206 · begonnen am 18. Mai 2014 · letzter Beitrag vom 24. Jun 2014
Antwort Antwort
Seite 6 von 9   « Erste     456 78     Letzte »    
Luki206
(Gast)

n/a Beiträge
 
#51

AW: Objekte zur Laufzeit erzeugen

  Alt 20. Mai 2014, 18:17
Jetzt sind wir aber mittlerweile weit ab vom Thema, oder?
Jap, aber vielen dank für die aufschlussreiche Erklärung wo if; else; & begin; end; stehen

Nur weiß ich jetzt immer noch nicht warum ich ausgerechnet einen Fehler beim beenden des Programms bekomme. Nur was mich wundert, ich habe einen Style drin, wenn ich wieder auf das Windows-Theme umsteige bekomme ich einen Fehler beim erzeugen des zweiten Formulars..
Miniaturansicht angehängter Grafiken
unbenannt.png   unbenannt2.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#52

AW: Objekte zur Laufzeit erzeugen

  Alt 20. Mai 2014, 18:31
Die "0"-Adresse weist auf einen nil-Pointer hin, d.h. Du greifst sehr wahrscheinlich auf etwas zu, für das Du keinen Speicher reserviert hast.
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
Luki206
(Gast)

n/a Beiträge
 
#53

AW: Objekte zur Laufzeit erzeugen

  Alt 20. Mai 2014, 18:51
Mir ist aber nicht bekannt wo kann es etwas mit dem Style zu tun haben?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#54

AW: Objekte zur Laufzeit erzeugen

  Alt 20. Mai 2014, 19:02
Ich habe zwar keine Styles, aber daran liegt es vermutlich nicht.

[edit]Ich habe mal schnell ein Beispiel geschrieben (unter Delphi 7, höher steht mir gerade nicht zur Verfügung). Mach doch mal ein Testprojekt mit einem Panel und einem Button auf dem Hauptformular. Das Panel ziehst Du ein bisschen auf, damit ein paar Buttons darauf Platz finden (siehe Screenshot). Im Code schreibst Du oberhalb der Form-Deklaration folgenden Code:
Delphi-Quellcode:
type
  TPanel = class(ExtCtrls.TPanel)
  private
    FButtons: TObjectList;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure AddButtons(CountButtons: Cardinal; ClickEvent: TNotifyEvent);
  end;
Im Implementation-Teil dann das hier:
Delphi-Quellcode:
procedure TPanel.AddButtons(CountButtons: Cardinal;
  ClickEvent: TNotifyEvent);
const
  X_OFFSET = 10; //horizontaler Abstand
  Y_OFFSET = 10; //vertikaler Abstand
  BUTTONWIDTH = 75; //Breite jedes Buttons
  BUTTONHEIGHT = 25; //Höhe jedes Buttons
var
  i: integer;
  ButtonsPerRow: integer;
  NewButton: TButton;
begin
  //Evtl. schon vorhandene Buttons löschen
  FButtons.Clear;
  //Wieviele Buttons passen in eine Zeile bei Abstand rechts und links?
  ButtonsPerRow := (ClientWidth - X_OFFSET) div (X_OFFSET + BUTTONWIDTH);
  for i := 0 to CountButtons - 1 do
    begin
      //Neuen Button erzeugen, Eigenschaften zuweisen...
      NewButton := TButton.Create(nil);
      NewButton.Width := BUTTONWIDTH;
      NewButton.Height := BUTTONHEIGHT;
      NewButton.Caption := 'Button ' + IntToStr(Succ(i));
      NewButton.Left := X_OFFSET + (BUTTONWIDTH + X_OFFSET) * (i mod ButtonsPerRow);
      NewButton.Top := Y_OFFSET + (BUTTONHEIGHT + Y_OFFSET) * (i div ButtonsPerRow);
      NewButton.OnClick := ClickEvent;
      NewButton.Parent := self;
      //... und der Liste hinzufügen
      FButtons.Add(NewButton);
    end;
end;

constructor TPanel.Create(AOwner: TComponent);
begin
  inherited;
  FButtons := TObjectList.Create;
end;

destructor TPanel.Destroy;
begin
  FButtons.Free;
  inherited;
end;
Das Formular selbst wird noch um eine Methode erweitert:
Delphi-Quellcode:
  TForm1 = class(TForm)
    Panel1: TPanel;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
    //wird den Buttons als Click-Event zugewiesen
    procedure DoOnClick(Sender: TObject);
  public
    { Public-Deklarationen }
  end;
Und der Formular-Code sieht in der Implementation dann so aus:
Delphi-Quellcode:
procedure TForm1.DoOnClick(Sender: TObject);
begin
  if Sender is TButton then
    ShowMessage(TButton(Sender).Caption);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Panel1.AddButtons(100, DoOnClick);
end;
Tritt der Fehler damit auch auf? [/edit]
Miniaturansicht angehängter Grafiken
demo.png  
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

Geändert von DeddyH (20. Mai 2014 um 19:18 Uhr)
  Mit Zitat antworten Zitat
Luki206
(Gast)

n/a Beiträge
 
#55

AW: Objekte zur Laufzeit erzeugen

  Alt 20. Mai 2014, 19:07
Ich meine ja, weil die Buttons mit Style richtig erzeugt werden und ohne Style bekomme ich ja den Fehler..
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.680 Beiträge
 
Delphi 5 Professional
 
#56

AW: Objekte zur Laufzeit erzeugen

  Alt 20. Mai 2014, 19:13
Wenn der Fehler beim Beenden des Programms kommt, liegt es IMO nahe, wenn auf ein Objekt zugegriffen wird, das bereits freigegeben wurde. Auch hier hilft das Durchsteppen mit dem Debugger sehr beim Lokalisieren des Fehlers.

MfG Dalai
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#57

AW: Objekte zur Laufzeit erzeugen

  Alt 20. Mai 2014, 19:14
Ich habe meinen letzten Beitrag editiert, versuch das doch bitte mal mit und ohne Styles.
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
Luki206
(Gast)

n/a Beiträge
 
#58

AW: Objekte zur Laufzeit erzeugen

  Alt 21. Mai 2014, 16:13
Bei mir fängt es schon am  TPanel = class(ExtCtrls.TPanel) an.. er findet ExtCtrls nicht
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#59

AW: Objekte zur Laufzeit erzeugen

  Alt 21. Mai 2014, 16:49
ExtCtrls und Contnrs musst Du noch in die uses-Klausel im interface-Teil aufnehmen.
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
Luki206
(Gast)

n/a Beiträge
 
#60

AW: Objekte zur Laufzeit erzeugen

  Alt 22. Mai 2014, 09:57
Ok jetzt funktioniert es und der Fehler tritt nicht mehr auf. Nur wie bekomme ich jetzt die Buttons nicht in ein Panel sondern in eine ScrollBox? Ich habe auch eigentlich schon versucht TPanel in TScrollBox zu ändern aber ich denke so einfach ist das dann doch nicht oder?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 6 von 9   « Erste     456 78     Letzte »    


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 06:14 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