Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   EInvalidOperation, warum? (https://www.delphipraxis.net/129847-einvalidoperation-warum.html)

I.A 26. Feb 2009 17:31


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:
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;
Bei der Anweisung HorzScrollBar.Position := 0 kommt die EInvalidOperation.

Bloß warum??? HorzScrollBAr und VertScrollBar sind Eigenschaften von TScrollBox, dem Vorfahren
von TCR_DB_Editor.

toms 26. Feb 2009 20:10

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)

I.A 26. Feb 2009 22:45

Re: EInvalidOperation, warum?
 
Zitat:

Zitat von toms
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)

Hmmmm, aaaber der Scrollbar, bei dem Ich die Exception erhalte ist eine Eigenschaft der TScrollBox, von der meine Klasse abgeleitet ist, in deren Methode die Exception auftritt. :wall:

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:
if HorzScrollBar <> nil then HorzScrollBar.Position := 0;
Warum gerade hier. Der Scrollbar ist doch in der TScrollBox enthalten, von der ich meine Klasse ableite???!!??? :gruebel:

delphifan2004 21. Mär 2009 12:50

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:
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;
Targets[0] enthält nach meinem Verständnis die fokussierte Komponente.

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?

I.A 21. Mär 2009 13:27

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:
  begin
    OInspector.ClassToShow := SizeCtrl.Targets[0];
  end;
dann klappt es. :hello:


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