AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

EInvalidOperation, warum?

Ein Thema von I.A · begonnen am 26. Feb 2009 · letzter Beitrag vom 21. Mär 2009
Antwort Antwort
I.A

Registriert seit: 14. Jan 2007
83 Beiträge
 
#1

EInvalidOperation, warum?

  Alt 26. Feb 2009, 18:31
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.
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#2

Re: EInvalidOperation, warum?

  Alt 26. Feb 2009, 21:10
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)
Thomas
  Mit Zitat antworten Zitat
I.A

Registriert seit: 14. Jan 2007
83 Beiträge
 
#3

Re: EInvalidOperation, warum?

  Alt 26. Feb 2009, 23:45
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.

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:

if HorzScrollBar <> nil then HorzScrollBar.Position := 0; Warum gerade hier. Der Scrollbar ist doch in der TScrollBox enthalten, von der ich meine Klasse ableite???!!???
  Mit Zitat antworten Zitat
delphifan2004

Registriert seit: 26. Nov 2004
Ort: Dresden
272 Beiträge
 
Delphi 10.3 Rio
 
#4

Re: EInvalidOperation, warum?

  Alt 21. Mär 2009, 13:50
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?
  Mit Zitat antworten Zitat
I.A

Registriert seit: 14. Jan 2007
83 Beiträge
 
#5

Re: EInvalidOperation, warum?

  Alt 21. Mär 2009, 14:27
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.
  Mit Zitat antworten Zitat
Antwort Antwort


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 11:02 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