AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Delphi XE6 ComboBox im Frame wirft Exception bei Items

Delphi XE6 ComboBox im Frame wirft Exception bei Items

Ein Thema von thomaskroger · begonnen am 12. Feb 2021 · letzter Beitrag vom 13. Feb 2021
Antwort Antwort
thomaskroger

Registriert seit: 22. Mär 2009
16 Beiträge
 
#1

Delphi XE6 ComboBox im Frame wirft Exception bei Items

  Alt 12. Feb 2021, 16:11
Moin,
in meiner Anwendung wird dynamisch ein Frame erzeugt.
Der Kind-Frame enthält u.a. eine TComboBox:

Delphi-Quellcode:
type
  TblaFrame = class(TBasicFrame)
    cb: TComboBox;
    ...
Der Frame wirft eine Exception, aber nur, wenn in den Items ein String (oder nur ein einzelnes Zeichen) ist:

Delphi-Quellcode:
private
 ProtokollFrame: TBasicFrame;

ProtokollFrame := TblaFrame .create(Self);

Typ= EReadError - Error= Fehler beim Lesen von cb.Items.Strings: Element 'blaFrame' hat kein übergeordnetes Fenster
Ist Items leer, läuft die Kiste an. Wenn ich allerdings Items hinzufüge gibt es wieder eine Exception:
Delphi-Quellcode:
cb.Items.add('1');
oder
cb.Items.Strings[0] := '1';
oder auch bei
cb.Items.Clear;
Was meint die Meldung: "Element 'blaFrame' hat kein übergeordnetes Fenster"
Alle anderen Frames, die so aufgerufen werden arbeiten korrekt. Die haben auch keine ComboBox....


Hat jemand eine Idee dazu?

Geändert von thomaskroger (12. Feb 2021 um 16:20 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.495 Beiträge
 
Delphi 7 Professional
 
#2

AW: Delphi XE6 ComboBox im Frame wirft Exception bei Items

  Alt 12. Feb 2021, 16:35
Delphi-Quellcode:
ProtokollFrame.Parent := Panel1; // Das, worauf ProtokollFrame erscheinen soll.
// oder
ProtokollFrame.Parent := Form1;
// oder
ProtokollFrame.Parent := Self; // Janachdem, was hier Self ist und ob man ein Frame darauf platzieren kann / darf.
// eventuell noch:
ProtokollFrame.Align := alClient; // alTop ...
// oder
ProtokollFrame.Top := 0; // Oder welche Koordinaten, Höhe, Breite ... sonst gewünscht sind.
ProtokollFrame.Left := 8;
ProtokollFrame.Height := 15;
ProtokollFrame.Width := 42;
  Mit Zitat antworten Zitat
thomaskroger

Registriert seit: 22. Mär 2009
16 Beiträge
 
#3

AW: Delphi XE6 ComboBox im Frame wirft Exception bei Items

  Alt 12. Feb 2021, 17:08
Danke für den Tipp !

Was ich unterschlagen hatte, waren die folgenden Zeilen nach create:
Delphi-Quellcode:
ProtokollFrame := TblaFrame.create(Self);
...
ProtokollFrame.Load; //irgend eine Fkt in blaFrame in der die ComboBox angesprochen wird.
ProtokollFrame.Parent := PanelStandard; //TPanel
Da create(Self) vor ..Parent:=PanelStandard kommt, wäre es eine Erklärung für "Element 'blaFrame' hat kein übergeordnetes Fenster"
da wegen der ComboBox sowieso eine Exception passiert.

Der Ursprung der Exception ist jedoch die ComboBox mit einem Item, und hier passiert es schon bei create.
Wie der Debugger im CPU-Fenster zeigt, springt er hier auf 004CB08C
Code:
004CB08C 55               push ebp
004CB08D E81AFDFFFF      call HandleException
004CB092 59               pop ecx
004CB093 E89CE9F3FF      call @DoneExcept
004CB098 33C0             xor eax,eax
004CB09A 5A              pop edx
004CB09B 59               pop ecx
004CB09C 59               pop ecx
004CB09D 648910           mov fs:[eax],edx
was jedoch kein gültiger Maschinenbefehl zu sein scheint:004CB087 008CB04C0055E8:

Code:
004CB06C E893E7FFFF      call TReader.PropertyError
004CB071 33C0             xor eax,eax
004CB073 5A              pop edx
004CB074 59               pop ecx
004CB075 59               pop ecx
004CB076 648910           mov fs:[eax],edx
004CB079 EB1D            jmp $004cb098
004CB07B E9C4E5F3FF      jmp @HandleOnException
004CB080 0100             add [eax],eax
004CB082 0000             add [eax],al
004CB084 C0DD41           rcr ch,$41
004CB087 008CB04C0055E8   add [eax+esi*4-$17aaffb4],cl
004CB08E 1AFD            sbb bh,ch
004CB090 FFFF            db $ff $ff
004CB092 59               pop ecx
004CB093 E89CE9F3FF      call @DoneExcept
004CB098 33C0             xor eax,eax

Übrigens, gibt es keine Probleme, wenn alternativ statt der ComboBox eine RadioGroup verwendet wird.

Geändert von thomaskroger (12. Feb 2021 um 17:23 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.495 Beiträge
 
Delphi 7 Professional
 
#4

AW: Delphi XE6 ComboBox im Frame wirft Exception bei Items

  Alt 13. Feb 2021, 11:12
Delphi-Quellcode:
ProtokollFrame := TblaFrame.create(Self);
...
ProtokollFrame.Parent := PanelStandard; //TPanel
ProtokollFrame.Load; //irgend eine Fkt in blaFrame in der die ComboBox angesprochen wird.
Da die Combobox wohl 'nen Parent braucht (und zwar vor ihrer erstmaligen Benutzung / Befüllung ..., wäre es eventuell sinnvoll ihr vor der erstmaligen Benutzung / Befüllung ... einen Parent zuzuweisen.

Was wir nicht wissen: Was bitte ist denn Self?

Ein TForm, ein TPanel, 'ne Bratkartoffel , ...? Self muss halt etwas sein, auf das man 'ne ComboBox legen darf. In der IDE, im Formulardesigner, kann man 'ne ComboBox ja auch nicht zwingend überall drauflegen, wobei die IDE "schlau genug ist", die entsprechenden Komponenten erst garnicht in der Komponentenauswahl anzubieten.

Sollte Self z. B. ein Datenmodul sein, so wird das scheitern, bei 'nem WebModul ebenfalls.
Delphi-Quellcode:
ProtokollFrame := TblaFrame.create(PanelStandard);
ProtokollFrame.Parent := PanelStandard; //TPanel
...
ProtokollFrame.Load; //irgend eine Fkt in blaFrame in der die ComboBox angesprochen wird.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 00:55 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