![]() |
Nicht-visuelle Komponenten dauerhaft ausblenden?
Hallo!
Gibt es eine Methode, die nicht-visuellen Komponenten in der Design-Ansicht (Delphi XE2 IDE) DAUERHAFT auszublenden? Es gibt zwar in GExpert und in CNWizard den Befehl Hide non visual components, aber beim Anklicken einer anderen Komponente werden die nicht-visuellen Komponenten dann sofort wieder sichtbar. Es wäre also nützlich, wenn es eine Möglichkeit gäbe, die nicht-visuellen Komponenten bis zum expliziten Wiedereinblenden auszublenden. |
AW: Nicht-visuelle Komponenten dauerhaft ausblenden?
Ich denke hier müsste der Emba als IDE-Hersteller eine IDE-Anpassung vornehmen um es ähnlich wie in VS.Net zu handhaben.
|
AW: Nicht-visuelle Komponenten dauerhaft ausblenden?
Ich verstehe nicht, wieso eine moderne IDE wie XE3 immer noch diese Altlast mit sich herumschleppt, die nicht-visuellen Komponenten auf dem Hauptformular abzulegen. Das ist doch IDE-Steinzeit! Für die nicht-visuellen Komponenten sollte es doch ein eigenes Register geben!
BTW, auch das "Ankleben" des Formulars in der linken oberen Ecke der Design-Ansicht ist so ein Überbleibsel aus der Dinosaurierzeit! Viel schöner und praktischer wäre es doch, wenn das Formular in der MITTE des Design-Bereiches angezeigt würde! |
AW: Nicht-visuelle Komponenten dauerhaft ausblenden?
Wieso soll die IDE Steinzeit sein?
DU kannst doch viele dieser Componenten ganz einfach auf ein TDataModul legen und schon sind'se weg. :stupid: Wie unterscheitet man denn am Einfachten, ob eine Komponente eine nichtvisuelle Komponente ist? |
AW: Nicht-visuelle Komponenten dauerhaft ausblenden?
![]() |
AW: Nicht-visuelle Komponenten dauerhaft ausblenden?
Zitat:
Zitat:
|
AW: Nicht-visuelle Komponenten dauerhaft ausblenden?
Jupp, TControl hatte ich inzwischen auch genommen.
Das Problem ist jetzt nur noch, daß ich zwar weiß wie man die aktuelle Position soeiner Komponente auslesen kann, aber nicht wie man sie zur Designtime setze/verändert (indirekt schon), also so, daß auch der Formdesigner das mitbekommt und die komponente entsprechend umpositioniert. |
AW: Nicht-visuelle Komponenten dauerhaft ausblenden?
Zitat:
|
AW: Nicht-visuelle Komponenten dauerhaft ausblenden?
Nja, theoretisch hätte ich eine Idee, wie man die Komponenten ganz leicht "ausblendet", aber bei der Umsetzung hapert es noch.
Was immer geht, mach die Form etwas größer, schieb alle Komponenten nach rechts und/oder unten, und mach die Form wieder kleiner. Im Prinzip hab ich das versucht "automatisch" umzusetzen, inkl. rückgängig. Es wäre ja praktisch, wenn man solche nichtvisuellen Dinger nicht nur der Form zuordnen, sondern daß man auch ausblendbare Container-Komponenten dafür nehmen könnte. |
AW: Nicht-visuelle Komponenten dauerhaft ausblenden?
Zitat:
Zitat:
|
AW: Nicht-visuelle Komponenten dauerhaft ausblenden?
Stimmt, vor allem wenn man das Visual Databinding nutzt stören die BindingControls doch schon gewaltig.
Gab es bei Visual Studio oder ECO (weiß nicht mehr genau) einen gesonderten Bereich, in der solche Controls angeordnet wurden? Ich meine damit nicht ein DataModul sondern eine Art Scrollbox unter dem FormDesigner. |
AW: Nicht-visuelle Komponenten dauerhaft ausblenden?
S. auch
![]() |
AW: Nicht-visuelle Komponenten dauerhaft ausblenden?
Zitat:
|
AW: Nicht-visuelle Komponenten dauerhaft ausblenden?
Liste der Anhänge anzeigen (Anzahl: 1)
ScrollBox ist leider nicht möglich, da ich die nichtvisuellen Komponenten noch nicht umpositionieren kann und da diese sowieso immer auf der Form und nicht in meiner Komponente liegen würden.
Ist also nur ein "billiger" Workaround, welcher als "Panel" einen Bereich unten und/oder rechts belegt, wo du deine Dinger drüberlegen kannst und der dann automatisch aus der Form entfernt wird, wenn das Programm läuft. (vor XE2 sollte man die Namespaces von den Units entfernen) |
AW: Nicht-visuelle Komponenten dauerhaft ausblenden?
Zitat:
|
AW: Nicht-visuelle Komponenten dauerhaft ausblenden?
So meinte ich das. Ein andockbarer und ausblendbarer Bereich unter dem Form-Designer. Im Grunde so ähnlich wie der VisualDataBinding-Designer.
|
AW: Nicht-visuelle Komponenten dauerhaft ausblenden?
Ein Variante war noch eine TDataModul-Komponente, welche selber eine Unit erstellt und bei Änderung Dieser diese Unit sofort kompilieren lässt. (also via OTA und so)
Wenn das DataModul direkt in der Form liegt und die Erstellungsreihenfolge dieses Containers etsprechend angepaßt wurde (so als wäre es nur eine Komponente und kein eigenständiges Modul), dann wäre es halbwegs nutzbar, ohne die genannten Probleme. Das Problem ist ja, daß hierfür die Komponenten darin ja physisch mit der Form verknupplt sein müssen, damit sie mit den Eingabecontrols via OI verknüpft werden können. Oder weiß jemand, wie man eine Form erstellt, welche sich "zur Laufzeit" so editieren läßt, wie in der IDE? @PeterPanino: :oops: Ups, vergessen zu speichern vom zippen. Ich glaub das war alles. :gruebel:
Delphi-Quellcode:
procedure TNonVisualArea.Loaded;
begin ... if Visible and not (csDesigning in ComponentState) then begin // <<<<<<< Visible := False; |
AW: Nicht-visuelle Komponenten dauerhaft ausblenden?
Die Panel-Lösung ist zwar nicht sehr elegant, würde aber ihre Funktion erfüllen. Sie würde aber an Eleganz gewinnen, wenn:
1. TNonVisualArea beim Einfügen der Komponente selbständig automatisch die Form vergrößern würde 2. Bei jeder Änderung von NonVisualArea.Height im Inspektor die Höhe der Form (und auch die vertikale Position der nichtvisuellen Komponenten) angepasst würde, damit die "nutzbare" Höhe der Form gleich bleibt. 3. Beim Entfernen der TNonVisualArea-Komponente die Höhe der Form (und auch die vertikale Position der nichtvisuellen Komponenten) automatisch so angepasst würde, dass die "nutzbare" Höhe der Form gleichbleibt. TNonVisualArea sollte also für den Benutzer vollkommen transparent funktionieren, ohne dass er (außer dem Einfügen der TNonVisualArea-Komponente) selbst Hand anlegen muss. |
AW: Nicht-visuelle Komponenten dauerhaft ausblenden?
Sowas hätte ich beinah eingabaut, aber dann erstmal gelassen.
Denn ich müßte da noch prüfen, ob eventuell die obere oder linke Seite grade gezogen wird, bei der Größenänderung, denn dann darf die Form nicht verändert werden, sonst gibt es ein Chaos. Und beim hinzufügen kommt es drauf an, ob die Komponente grade mit der Form geladen oder nachträglich erstellt wird, aber ich glaub das ließ sich erkennen. |
AW: Nicht-visuelle Komponenten dauerhaft ausblenden?
Der Open Source CnPack Wizard enthält ein Tool "Arrangiere nicht sichtbare Komponenten". Hier könnte man sich also abschauen, wie man "nicht sichtbare Komponenten" unterscheidet sowie verschiebt.
|
AW: Nicht-visuelle Komponenten dauerhaft ausblenden?
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe folgende Verbesserungen in TNonVisualArea eingefügt:
1. Damit der "nutzbare" Bereich der Form gleichbleibt, habe ich folgenden Code im constructor eingefügt:
Delphi-Quellcode:
Damit wird die Höhe der Form automatisch angepasst, wenn die TNonVisualArea-Komponente eingefügt wird.
if Owner is TForm then
TForm(Owner).Height := TForm(Owner).Height + Height; 2. Sollte sich der Nutzer entschließen, die TNonVisualArea-Komponente wieder zu entfernen (nicht empfohlen), wird die Höhe der Form automatisch zurückgesetzt:
Delphi-Quellcode:
Bitte um konstruktive Kritik!
destructor TNonVisualArea.Destroy;
begin if csDesigning in ComponentState then begin if Assigned(Parent) then begin if FRight then Self.Parent.Width := Self.Parent.Width - Self.Width else Self.Parent.Height := Self.Parent.Height - Self.Height; end; end; inherited; end; |
AW: Nicht-visuelle Komponenten dauerhaft ausblenden?
1. darf nur gemacht werden, wenn sich die Form im Designmodus und nicht im Ladevorgang befindet.
|
AW: Nicht-visuelle Komponenten dauerhaft ausblenden?
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Gut, hab ich nun gemacht:
Delphi-Quellcode:
Ich habe jetzt auch Code hinzugefügt, damit die "nutzbare" Fläche der Form gleich bleibt, wenn der Nutzer von Unten nach Rechts oder zurück umschaltet:
constructor TNonVisualArea.Create(Owner: TComponent);
begin inherited; Align := alBottom; Height := 100; if csDesigning in ComponentState then begin if Owner is TForm then TForm(Owner).Height := TForm(Owner).Height + Height; end; end;
Delphi-Quellcode:
procedure TNonVisualArea.SetRight(Value: Boolean);
begin FRight := Value; if FRight then begin Self.Parent.Height := Self.Parent.Height - Self.Height; Align := alRight; Self.Parent.Width := Self.Parent.Width + Self.Width; end else begin Self.Parent.Width := Self.Parent.Width - Self.Width; Align := alBottom; Self.Parent.Height := Self.Parent.Height + Self.Height; end; end; |
AW: Nicht-visuelle Komponenten dauerhaft ausblenden?
Zitat:
BTW: Im Zip aus Posting 23 hast du
Delphi-Quellcode:
geschrieben. Mein D2007 installiert dann die Kompo nicht. Mit
procedure register;
Delphi-Quellcode:
(großes R!) geht's.
procedure Register;
|
AW: Nicht-visuelle Komponenten dauerhaft ausblenden?
Zitat:
Zitat:
|
AW: Nicht-visuelle Komponenten dauerhaft ausblenden?
Das mit dem Verschieben ist eben noch ein Problem. Hab jetzt in dem "Hinweis" noch nicht nachgesehn, aber die Stelle, wo ich weiß, daß dort die Position der Komponente gespeichert wird, die kann man zwar setzen, aber der FormEditor bekommt das nicht mit.
So, fertig mit Arbeit ... nun erstmal heimfahren. |
AW: Nicht-visuelle Komponenten dauerhaft ausblenden?
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Ich hab selber vor Jahren mal versucht, einen GExperten zu schreiben, der NV-Kompos per Menü versteckt. Da ist aber nie was Fertiges draus geworden. Mal sehen, ob ich den noch finde. Edit: Hier isser: Anhang 37958 Sicher nur mit einer uralten GExperts-Version zu kompilieren. Ich schau mal, was geht. Zitat:
|
AW: Nicht-visuelle Komponenten dauerhaft ausblenden?
Zitat:
Edit: Habe jetzt erst gemerkt, dass du das Verschieben der Komponenten meintest. |
AW: Nicht-visuelle Komponenten dauerhaft ausblenden?
Liste der Anhänge anzeigen (Anzahl: 1)
So, nun kann man auch die Größe der NonVisualArea verändern (im Inspektor sowie durch Ziehen am oberen bzw. linken Anfassfeld), wobei die Größe der Form ohne Änderung der Nutzfläche geändert wird!
Jetzt fehlt nur noch das automatische Verschieben der NV-Komponenten. |
AW: Nicht-visuelle Komponenten dauerhaft ausblenden?
Zitat:
|
AW: Nicht-visuelle Komponenten dauerhaft ausblenden?
Inzwischen habe ich herausgefunden, wie man die Positionen der nicht-visuellen Komponenten erhält:
Delphi-Quellcode:
Wer weiß, wie man diese Positionen verändern kann?
for i := 0 to TForm(Owner).ComponentCount - 1 do
begin if not (TForm(Owner).Components[i] is TControl) then begin CodeSite.Send('Left', TForm(Owner).Components[i].Name + ': ' + IntToStr(LongRec(TForm(Owner).Components[i].DesignInfo).Lo)); end; end; |
AW: Nicht-visuelle Komponenten dauerhaft ausblenden?
Ja, das hätt ich dir auch sagen können. (kann man sich gern in meinen FMX-Hints angucken).
Nur liest der VCL-Designer das nicht aus (nicht wärend er aktiv ist ... nur einmal nach dem Laden der Form), sondern setzt es nur. Wie ich die Position verschieben kann, hab ich raus, allerdings ist da snur temporär. Ich kann es verschieben, das Control ist dort anklickbar. Klickt man es aber nicht an und verschiebt es noch ein Stückchen, dann weiß der Formdesigner davon nix. Heißt also, wenn man die Form speichert und läd, dann ist die alte Position wieder da, außer bei den nachträglich nochmal manuell verschobenen. (Aber es ist denoch für einwas nutzbar ... zeig mir alles, wa draußen liegt) Nachteil: es gibt nicht direkt einen Zusammenhang zwischen der sichtbaren "virtuellen" Komponente und der echten Komponente. Und es gibt je zwei "getrennte" virtuelle Komponenten pro Komponente (einmal das Kästchen und dann noch das Label und die lassen sich witziger Weise unabhängig voneinander verschieben) Schade ist, daß diese virtuellen Komponenten (PS: es gibt aucg noch je eine dieser "falschen" Komponenten, für jedes dieser Pünktchen an der markierten Komponente). Ich lad's dann gleich hoch. |
AW: Nicht-visuelle Komponenten dauerhaft ausblenden?
Das CnWizard Tool "Arrange the non-visual Components" verschiebt die NV-Komponenten ja auch, und zwar dauerhaft. Leider ist es mir noch nicht gelungen, den Source-Code dafür zu finden.
|
AW: Nicht-visuelle Komponenten dauerhaft ausblenden?
Die "sichtbaren" Dinger haben zwar Namen, welche nach Delphi-Klassen klingen, aber es sind leider keine VCL-Klassen.
'nen Windows-Control einer VCL-Klasse kann man, anhand seines HWND, nach dem internen TWinControl fragen, was hier leider nicht funktioniert. :cry: (ich hatte jetzt aber icht unbedingt Lust dort auf Zwang rauszufinden, wie die untereinander verknubblt sind) :thumb: Ich hab noch nicht Viele gesehn, welche das CodeSite benutzen. [edit] Mist, jetzt stimm wieder irgendwas im laufenden Programm nicht :cry: So, läuft wieder. Es war auch noch ein Bug drin, wenn man die Komponente im Designer ausschnitt (das ging), aber beim Einfügen klappte es nicht mehr, da die Komponente dachte die sie (die Form) würde geladen. Deshalb wurde dabei die Fenstergröße nicht angepaßt. (immer diese blöden Spezialfälle) |
AW: Nicht-visuelle Komponenten dauerhaft ausblenden?
@PeterPanino:
Zu deinem OnResize:
Delphi-Quellcode:
protected
procedure Resize; override |
AW: Nicht-visuelle Komponenten dauerhaft ausblenden?
@ himitsu
Sehr nett! Aber das ist ja ein ganz anderer Code! 1. Bei TNonVisualHidden funktioniert die Interface-Synchronisierung noch nicht. 2. Bei der Vergrößerung von NonVisualArea wird die Fenstergröße nicht angepasst. Wäre aber sinnvoll, da der Anwender seine "Nutzfläche" ja nicht verkleinern will, wenn er die NonVisualArea vergrößert. |
AW: Nicht-visuelle Komponenten dauerhaft ausblenden?
Liste der Anhänge anzeigen (Anzahl: 2)
1: Jupp: Das war ein Wiederbeleben es ursprünglichen "Verstecken"-Codes.
Aber was meinst du mit der Synchronisierung? 2: Besser so? Bei deinem Codes solltest du aber auf globale Variablen achten. Die 3 Globalen gehören als Felder in die Klasse, vorallem die "old". Tipp: Leg mal 2 Komponenten auf eine Form (z.B. je Eine rechts und unten) und dann spiel mal mit deren Größen. Ich hab's nicht ausprobiert, aber as selbe Problem dürfte wohl auch auftreten, wenn man mehrere Forms in der IDE offen hat und dort jeweils mindestens eine Komponente drauf liegt. Hast du eine Idee, mit dem Vergrößern? Also wenn man rechts oder unten, direkt am Fensterrand die Komponente vergrößern will, dann bekommt man sie nich größer, sondern nur kleiner. (gut, wenn man es kleiner macht, als es ist, also die Außenseite über sie linke/obere Seite hinwegzieht, dann wird es dann doch irgendwann wieder größer :lol:) [edit] In HideComponents2.7z dürfte jetzt auch die Positionsänderung funktionieren. Allerdings hatte ich mich ein bissl ausgetobt und der Code läuft nun wohl nur noch ab XE2. XE und davor = neue Recordmethoden müssen ausgetauscht werden (z.B. TRect.Union zu UnionRect) und dann sollte man die NameSpaces der VCL-Units entfernen. Danke für die blöde Idee mit der Größenänderung. Hast du dir mal überlegt wo man das alles beachten muß? - Form/DFM im FormDesigner laden (Unit öffnen) - Form/DFM im laufenden Programm laden - einfügen neuer Komponenten (also das Ding von der Komponentenpalette auf die Form) - Form/DFM beim Bearbeiten laden (von DFM-Quellcode zur Formanzeige umschalten) - Komponente ausschneiden - ausgeschnittene/kopierte Komponente einfügen - Unten/Rechts umschalten - Größe der Kompoente ändern - ...... |
AW: Nicht-visuelle Komponenten dauerhaft ausblenden?
Wieso sind die im implementation-Teil deklarierten Variablen global?
|
AW: Nicht-visuelle Komponenten dauerhaft ausblenden?
Sie sind Unitglobal.
Aber das Schlimme daran ist, daß alle Instanzen der Klasse diese verwenden. Daß heißt, wenn eine Instanz die Inhalte ändert, dann wirkt sich das auf die anderen Instanzen aus. |
AW: Nicht-visuelle Komponenten dauerhaft ausblenden?
Zitat:
Ich habe in keinem der oben angeführten Fälle ein Problem gesehen, außer bei "ausgeschnittene/kopierte Komponente einfügen". Aber für diesen in der Praxis unwahrscheinlichen Fall kann man auch eine Lösung finden. Konstruktive Frage: Wie kann man einen Einfügen-Eventhandler schreiben? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:33 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