ich habs (hoffe ich zumindest
)
falsch gedacht s. unten
der fehler lag beim anlegen der objekte(panels), dies geschah über eine onClick-Routine einer comboBox:
Delphi-Quellcode:
procedure TForm2.ComboBox1Click(Sender: TObject);
var lab: TLabel;
cb: mycb;
pan: myPanel;
img: myImg;
begin
lab:=TLabel.create(Form1);
cb:=mycb.Create(Form1);
pan:=myPanel.Create(Form1);
img:=myImg.Create(Form1);
pan.Visible:=true; pan.Color:= clSilver;
pan.Width:=350;
pan.Height:=40;
pan.Left:=20;
pan.BevelInner:=bvRaised;
pan.BevelOuter:=bvLowered;
// erstes erzeugen ------------
if form1.letztes=nil then begin
pan.parentPanel:=nil;
pan.childPanel:=nil;
form1.letztes:=pan;
pan.Top:=50;
end
// weitere erzeugen -----------
else begin
pan.parentPanel:=form1.letztes;
pan.childPanel:=nil;
form1.letztes.childPanel:=pan;
pan.Top:=form1.letztes.Top+form1.letztes.height+10;
form1.letztes:=pan;
end;
/// schnipp - etc. ...
end;
es muss aber lauten:
lab:=TLabel.create(self);
cb:=mycb.Create(self);
pan:=myPanel.Create(self);
img:=myImg.Create(self);
ich dachte das in Klammern hinter Create steht für das Parent-Objekt, und da die Panels auf Form1 kommen sollen hatte ich eben Form1 statt self drinstehn. ich sag nur:
naja jetzt gehts wie gesagt, viell. hilfts ja mal jemanden weiter
///////////////////////-----------------/////////////////////
mist Doch zu früh gefreut, jetzt bekomme ich immer nachdem ich mehr als 10 elemente aus der liste lösche bei einigen einen EAbstract Error der vorher nicht kam.
Ich hab schonmal danach gegoogelt und alles was ich finden konnte war dass der auftritt wenn man abstrakte methoden verwendet. bloss bitt wo mach ich das (der abstrakte fehler kommt immer beim self.destroy des panels)
hier nochmal der angepasste Quelltext
Delphi-Quellcode:
procedure myPanel.remove_it();
begin
//einziges Element ?
if (self.parentPanel = nil) and (self.childPanel = nil) then
begin
form1.letztes:=nil;
self.move(self.Height*(-1)-10);
end
//erstes Element ?
else if self.parentPanel=nil then
begin
self.childPanel.parentPanel:=nil;
self.childPanel.move(self.Height*(-1)-10);
end
//letztes Element ?
else if self.childPanel=nil then
begin
self.parentPanel.childPanel:=nil;
form1.letztes:=self.parentPanel;
self.move(self.Height*(-1)-10);
end
//mittel Element ?
else if (self.childPanel <> nil) and (self.parentPanel <> nil) then
begin
self.parentPanel.childPanel:=self.childPanel;
self.childPanel.parentPanel:=self.parentPanel;
self.childPanel.move(self.Height*(-1)-10);
end;
self.comboBox.Items.Add(self.filterName);
if self.comboBox.Items.count=1 then self.combobox.visible:=true;
self.destroy; <------ hier kommt der fehler (aber nicht bei allen)
end;
Ich hab auch mal in den definitionen der geerbten TPanel-Klasse nachgeschaut und auch in der TCustomControl noch eine Ebene höher, aber nirgends eine abstrakte Methode zu finden die ich erst überschreiben müsste...
kann irgendwer helfen ????