Delphi-PRAXiS
Seite 4 von 6   « Erste     234 56      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Nicht-visuelle Komponenten dauerhaft ausblenden? (https://www.delphipraxis.net/171248-nicht-visuelle-komponenten-dauerhaft-ausblenden.html)

PeterPanino 30. Okt 2012 19:14

AW: Nicht-visuelle Komponenten dauerhaft ausblenden?
 
Inzwischen habe ich herausgefunden, wie man die Positionen der nicht-visuellen Komponenten erhält:
Delphi-Quellcode:
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;
Wer weiß, wie man diese Positionen verändern kann?

himitsu 30. Okt 2012 21:10

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.

PeterPanino 30. Okt 2012 21:37

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.

himitsu 30. Okt 2012 21:49

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)

himitsu 30. Okt 2012 22:27

AW: Nicht-visuelle Komponenten dauerhaft ausblenden?
 
@PeterPanino:

Zu deinem OnResize:
Delphi-Quellcode:
protected
  procedure Resize; override

PeterPanino 30. Okt 2012 23:27

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.

himitsu 31. Okt 2012 11:09

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
- ......

PeterPanino 1. Nov 2012 11:34

AW: Nicht-visuelle Komponenten dauerhaft ausblenden?
 
Wieso sind die im implementation-Teil deklarierten Variablen global?

himitsu 1. Nov 2012 12:27

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.

PeterPanino 1. Nov 2012 13:22

AW: Nicht-visuelle Komponenten dauerhaft ausblenden?
 
Zitat:

Zitat von himitsu (Beitrag 1189210)
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
- ......

Das ist keine "blöde Idee", sondern hilfreich für den Benutzer.

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 10:01 Uhr.
Seite 4 von 6   « Erste     234 56      

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