![]() |
EInvalidOperation, warum?
Hallo,
Die EAccessviolation scheint sich erledigt zu haben. Stattdessen erhalte ich nun eine EInvalid Operation, was ja eigentlich ein neues Thema ist. Deshalb der neue Thread.
Delphi-Quellcode:
Bei der Anweisung HorzScrollBar.Position := 0 kommt die EInvalidOperation.
procedure TCR_DB_Editor.ReOrderControls;
... Varablendeklaratioen begin //Hier wird die alte Liste mit den Eingabecontrols gelöscht, um die passenden Eingabecontrols //entsprechend neuer Feldreihefolge in diese Liste einzufügen if Element_EditHeigth > FElement_RowHight then FElement_RowHight := Element_EditHeigth +2; // Label und Eingabe eine Höhe: deshalb /2 1 * Elementhöhe / Spalten // // oben und unten // ElementBlockHight := FElement_RowHight * Pred( FControlList.Count-FElement_NonVisib ) div (2 * FElement_ListCols); VertikalTopMargin := Pred(Height - ElementBlockHight ) div 2; if VertikalTopMargin < 1 then VertikalTopMargin := 1; ww := Width div (2 * FElement_ListCols) ; if ww < FMinWidthHoriz then ww := FMinWidthHoriz; VertikalRowCounter := 0; //Hier bei HorzScrollbar kommt die neue Exception //HorzScrollBar und VertScrollBar sind ider Vorgängerklasse TScrollBox bereits definiert //Warum tritt dann die EInvalidOperation auf if HorzScrollBar <> nil then HorzScrollBar.Position := 0; if VertScrollBar <> nil then VertScrollBar.Position := 0; Bloß warum??? HorzScrollBAr und VertScrollBar sind Eigenschaften von TScrollBox, dem Vorfahren von TCR_DB_Editor. |
Re: EInvalidOperation, warum?
EInvalidOperation wird ausgelöst, wenn eine Anwendung eine Operation versucht, für die ein Fenster-Handle auf eine Komponente notwendig ist, die kein übergeordnetes Objekt besitzt (Parent = NIL)
|
Re: EInvalidOperation, warum?
Zitat:
Werd mich morgen weiter damit beschäftigen. Werde den Quelltext noch mal durchgehen, vielleict gibt es ja dort einen erkennbaren Fehler. Mich wundert allerdings die Stelle, an der die Exception ausgelöst wird, nämlich wenn der Debuggercursor im Einzelschrittbetrieb auf dieser Anweisung steht und ich "F7" drücke, für Einzelne Anweisung. Diese Anweisung löst die Exception aus:
Delphi-Quellcode:
Warum gerade hier. Der Scrollbar ist doch in der TScrollBox enthalten, von der ich meine Klasse ableite???!!??? :gruebel:
if HorzScrollBar <> nil then HorzScrollBar.Position := 0;
|
Re: EInvalidOperation, warum?
Hallo,
Ich habe den Thread von vor paar Tagen verfolgt, wo es um den eigenen Fordesigner ging und um die Typinformation. Hab mir TSizeControl auch runtergeladen und experimentiert. Ich habe die folgende Änderung eingebaut, erhalte nun aber eine EInvalidOperation. Warum? Hier ist der geänderte Quelltext:
Delphi-Quellcode:
Targets[0] enthält nach meinem Verständnis die fokussierte Komponente.
procedure TForm1.SizeCtrlTargetChange(Sender: TObject);
begin if SizeCtrl.TargetCount = 0 then StatusBar1.SimpleText := '' else begin with SizeCtrl.Targets[0] do StatusBar1.SimpleText := format(' %s - left:%d top:%d, width:%d height:%d', [Name,left,top,width,height]); //### DIESE ZEILE HABE ICH HINZUGEFÜGT ### ActiveControl := TWinControl(SizeCtrl.Targets[0]); //### HIER WIRD DIE EInvalidOperation ausgelöst ### Aber warum??? end; end; Bei Klick auf Label 2 krieg ich einen EAbstractError Bei Klich auf die unsichtbare ComboBox krieg ich die EInvalidOperation mit der Meldung, das unsichtbare Controls nicht den Fokus erhalten können. Ohne die von mir eingefügte Zeile funktioniert alles einwandfrei. Die Disabled Combobox soll ja gerade demonstrieren das auch solche disabled controls verschoben, vergrößert und verkleinert werden können. Was läuft hier falsch. Wie komme ich an die aktuell selektierte Komponente? |
Re: EInvalidOperation, warum?
Hallo Delphifan2004!
Du hast mich auf den entscheidenden Gedanken gebracht. Ich experimentiere nämlich auch gearde mit SizeCtrl rum und hab das gleiche Problem. Habe Statt ActiveControl Targets[0] zur weteren Verwndung vorgesehen. Damit funktioniert es. Ich hatte ActiveControl an meinen Objektinspektor zuweisen wollen. Damit klappt es nicht. Wenn ich aber schreibe:
Delphi-Quellcode:
dann klappt es. :hello:
begin
OInspector.ClassToShow := SizeCtrl.Targets[0]; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:01 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-2025 by Thomas Breitkreuz