![]() |
unbegründete AccessViolation?
Delphi-Quellcode:
kurz - popup auf einem tabsheet wo auf dynamisch generiertenseiten auf pupupclick etwas geschehen soll..
procedure TMyArtz.NeuClick(Sender: TObject);
var newsheet:ttabsheet; begin newsheet := ttabsheet.Create(tabs); newsheet.Name := 'ts_' + IntToStr(nr); newsheet.PageControl := tabs; newsheet.Caption := 'Unbekannt_' + IntToStr(nr); pb := TPaintbox.Create(Tabs); pb.Parent := Tabs.Pages[nr]; pb.Tag := nr; pb.Name := 'pb_' + IntToStr(nr); inc(nr); end; procedure TMyArtz.Delete1Click(Sender: TObject); var i : Integer; begin i := TPaintbox(Sender).Tag; TPaintbox(Sender).Canvas.Rectangle(0,0,TPaintbox(Sender).Width, TPaintbox(Sender).Height); end; ich kann nur darauf nicht zeichnen - sehr wohl aber .destroy ohne fehler bzw alle anderen sachen. wär super hätte wer einen fehler gefunden(komm einfach nicht drauf und mag nicht stupide um diese uhrzeit rumprobieren) grüße Nico |
Re: unbegründete AccessViolation?
Die Sheets haben keinen Parent.
|
Re: unbegründete AccessViolation?
newsheet.PageControl := tabs; genügt wenn ich mich nicht irre
zumal das unten irrelevant ist :zwinker: |
Re: unbegründete AccessViolation?
Moin Nico,
prüf' doch erst einmal, ob der Sender überhaupt eine Paintbox ist:
Delphi-Quellcode:
oder lass' Dir mit
if Sender is TPaintBox then ...
Delphi-Quellcode:
mal ausgeben, welche Klasse der Sender hat.
ShowMessage(Sender.Classname);
|
Re: unbegründete AccessViolation?
Ist möglich, würde es aber an deiner Stelle versuchen ob es was hilft, den parent zu setzen.
Die Symptomatik weist jedenfalls auf den fehlenden parent hin. |
Re: unbegründete AccessViolation?
@christian - hi
hatte ich vorhin zur kontrolle drinnen - der sender stimmt. @mkinzler - danke, aber ist sicher nicht das problem(habs auch probiert ;) ) |
Re: unbegründete AccessViolation?
Versuch mal
Delphi-Quellcode:
statt
pb.Parent := newsheet;
Delphi-Quellcode:
Was ist der Initialwert von nr? 0 oder 1
Tabs.Pages[nr];
|
Re: unbegründete AccessViolation?
Hi Nico,
würde es helfen, der Paintbox eine Größe zu geben? Gruß Hawkeye |
Re: unbegründete AccessViolation?
ging auch nicht ;)
der initialisierungswert ist 0 aber mit eins gehts auch nicht vorneweg ;) @hawk - leider nicht - aber danke dass hab ich sowieso vergessen gehabt stimmt :oops: |
Re: unbegründete AccessViolation?
Was mir gerade noch so auffällt:
Bei einer TPaintBox sollte man doch nur in der Behandlungsroutine für OnPaint zeichnen. Ist "Delete1Click" wirkliche diese Routine? :gruebel: |
Re: unbegründete AccessViolation?
Hallo,
Zitat:
//Edit: Noch was zur Frage: Was löst denn das Ereignis "Delete1Click" aus? Das sieht mir nach einem Menüeintrag aus (Du schreibst ja auch von einem Popup-Menü). Dann ist Sender natürlich der Menüpunkt und somit auch keine Paintbox. Gruß xaromz |
Re: unbegründete AccessViolation?
Die Online-Hilfe:
Zitat:
Korrigiere mich bitte, wenn ich mich irre! Gruß Hawkeye |
Re: unbegründete AccessViolation?
also das ist eigentlich nur ein test diese zeile - normal sollte es das bild halt leeren
das mit dem sender vom popup kommt mir aber seltsam vor weil ich komme trotz
Delphi-Quellcode:
absicherung in den block rein ;)
if Tpaintbox(Sender) <> nil then ...
grüße Nico |
Re: unbegründete AccessViolation?
danke das mit dem sender stimmte natürlich - ich hab als sender ja das popupmenu
@ christian ich versteh nich ich hab die richtigen tagwerte bekommen bei meiner kontrolle und bin in den block gekommen? |
Re: unbegründete AccessViolation?
Noch ein Wort zu Deiner "Absicherung": es ist keine! Der Sender sollte unter normalen Umständen <> NIL sein, daran ändert auch der TypeCast nichts.
Christians Vorschlag war
Delphi-Quellcode:
Gruß Hawkeye
if Sender is TPaintBox then ...
|
Re: unbegründete AccessViolation?
es geht doch noch nicht :(
Delphi-Quellcode:
procedure TMyArtz.NeuClick(Sender: TObject);
var newsheet:ttabsheet; begin newsheet := ttabsheet.Create(tabs); newsheet.Name := 'ts_' + IntToStr(nr); newsheet.PageControl := tabs; newsheet.Caption := 'Unbekannt_' + IntToStr(nr); pb := TPaintbox.Create(Tabs); pb.Parent := newsheet; pb.Tag := nr; pb.Name := 'pb_' + IntToStr(nr); pb.Width := tabs.Width; pb.Height := tabs.Height; inc(nr); end; procedure TMyArtz.Delete1Click(Sender: TObject); var i, w, h : Integer; begin w := TPaintbox(FindComponent('pb_' + IntToStr(tabs.ActivePageIndex))).width; h := TPaintbox(FindComponent('pb_' + IntToStr(tabs.ActivePageIndex))).height; TPaintbox(FindComponent('pb_' + IntToStr(tabs.ActivePageIndex))).Canvas.Rectangle(0,0,w,h); end; so muss es doch gehn? - ich hab drei seiten erstellt und hab bei activepage auch schon mal -1 genommen... |
Re: unbegründete AccessViolation?
Delphi-Quellcode:
procedure TMyArtz.Delete1Click(Sender: TObject);
var i, w, h : Integer; lElem: TPaintBox; begin If ( tabs.ActivePageIndex > -1 ) Then Begin lElem := FindComponent('pb_' + IntToStr(tabs.ActivePageIndex)) As TPaintBox; If Assigned(lElem) Then Begin w := lElem.width; h := lElem.height; lElem.Canvas.Rectangle(0,0,w,h); End; End; end; |
Re: unbegründete AccessViolation?
heyy danke vielmals :)
das nennt man guten start in den tag :thumb: ahh allerdings springts bei assigned(lelem) immer raus :( grüße Nico :) edit// pb := TPaintbox.Create(Self); hatte hinten Tabs stehen - in der früh merkt man die fehler eben :mrgreen: :mrgreen: danke an alle trotzdem vielmals ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz