Einzelnen Beitrag anzeigen

Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#5

Re: Komponenten löschen > Abstracter Fehler

  Alt 27. Aug 2006, 11:19
Gut, wenn ich Dir helfen konnte. Nur noch einige kurze Anmerkungen:

1. Zu Deiner Namensgebung für die Panels und IntToStr/StrToInt: Dein Vorgehen verstehe ich. Ich vermute aber, dass Delphi bei diesen Umwandlungen viel probieren muss (und StrToInt gerne zu Exceptions führt, wenn auch nicht in Deinem Fall). Deshalb würde ich eher int-Variablen als Zwischenspeicher verwenden als diese Konvertierungen.

2. ActiveControl := nil; gefällt mir nicht, denn das aktive Formular sollte auch ein ActiveControl haben. Aber wenn es klappt... Aber füge noch eine Zeile ein, damit Du sicher sein kannst, dass der Focus entfernt ist:
Delphi-Quellcode:
form1.ActiveControl:=niL;
Application.ProcessMessages;
3. Wozu hast Du in PanelFree die Variable MenuItem deklariert? Warum setzt Du die Variable test nicht auf das, was sie ist, nämlich TJvCaptionPanel - Du musst doch sowieso das cast vornehmen?!

4. Delphi-Referenz durchsuchenRemoveControl entfernt die Komponente nur aus der Liste test.Controls[i], macht also das Gleiche wie Parent := nil. Du musst diese Komponenten jeweils ebenfalls "free" machen!

5. Zur Erzeugung der Anzeige:
Zitat von mimi #3:
ScrollBox.Refresh; warum ? es klappt doch auch so...
Unnötige Verweise auf "ferne" Formulare sollten entfallen (es sei denn, ich habe das Zusammenspiel Deiner Formulare falsch verstanden). Es geht Dir vermutlich darum, dass die Anzeige erneuert wird, nachdem das Panel erzeugt wurde. Dazu ist (nur) das Control neu zu zeichnen, auf dem das Panel angelegt wurde, also ScrollBox; für diesen Vorgang ist Refresh vorgesehen, während Show die Eigenschaft Visible des betreffenden Formulars verändert. (Ich hoffe, dies erklärt meinen Vorschlag - wie gesagt, vorausgesetzt, dass er zu Deinen Intentionen passt.)

Gruß Jürgen
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat