Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Objekt an Form ausrichten (https://www.delphipraxis.net/2137-objekt-form-ausrichten.html)

nailor 8. Jan 2003 16:55


Objekt an Form ausrichten
 
Es gibt ja nette Sachen von wegen Alignment...
Aber bis auf alClient müssen alle passen, wenn man die Form resized.
Ich will aber ein PageControl, dass die Höhe (Form1.Height div 2) hat. Wenn man das auf alBottom stellt und beim Resizen von Form1 die Höhe neu berechnet, wird das nichts (zb einfach mal maximieren und wieder zurück, dann ist schon wieder alles falsch) oder einfach ein wenig die Größe ändern. Nach ca. 5 Versuchen, ist bestimmt wieder ein Fehler drin...

Was kann man da machen?

Christian Seehase 8. Jan 2003 17:08

Moin Nailor,

verwende doch mal für die Berechnung nicht (Form1.Height div 2), sondern ((Form1.ClientRect.Bottom-Form1.ClientRect.Top) div 2).

nailor 8. Jan 2003 17:44

Liste der Anhänge anzeigen (Anzahl: 1)
1 mal maximieren, 1 mal wiederherstellen, Ergebnis: Anhang

Christian Seehase 8. Jan 2003 17:52

Moin Nailor,

ich hab's bei mir eben so ausprobiert und geht:

Delphi-Quellcode:
procedure TfrmMAIN.FormResize(Sender: TObject);
begin
  PageControl1.Height := (frmMAIN.ClientRect.Bottom - frmMAIN.ClientRect.Top) div 2;
end;

nailor 8. Jan 2003 19:53

Du kannst mich ja für blöd erklären, aber wenn man das "div 2" weglässt oder dur "+ XYZ" ersetzt, sieht es wieder wie vorher aus.

Ich habe eine Form, ein PageControl(alBottom) darin PageControls, darin RichEdits(alClient)...

Christian Seehase 8. Jan 2003 20:54

Moin Nailor,

also ich hab' ein Formular genommen, da ein PageControl draufgelegt, zwei, drei Tabs erzeugt, das PageControl so bis ca. Mitte hochgezogen (vorher alBottom), dann in FormResize die genannte Zeile und gut.

Und das funktioniert bei Dir nicht? :shock:

nailor 8. Jan 2003 21:14

nein, du klickst einmal auf das Icon neben X (Schliessen) dann nochmal.
Und dann sieht das, egal welche Zeile im Resize-Block steht, so aus wie in gezeigtem Bild.

Manchmal auch, wenn man die Größe "normal" ändert Gibt es Prozeduren oder Properties, die mit Resize kollidieren könnten?

Christian Seehase 8. Jan 2003 21:18

Moin Nailor,

ich hab' das mehrere Male auf verschiedenen Wegen probiert, über Minimize/Maximize Button, DoppelClick auf die Caption und auch direktes Resize über den Rand. Keine Probleme.

Kollisionen kann's eigentlich nur noch dann geben, wenn, Du an irgendeiner anderen Stelle noch Grössenänderungen vornimmst, oder in die Messages eingreifst (z.B. WndProc überschreiben).

nailor 8. Jan 2003 21:22

Die Messages sind in jungfräulichem Zustand, andere Größenänderugen. Ausschließen kann ichs nicht, aber mal deheim schauen...

nailor 8. Jan 2003 22:15

Liste der Anhänge anzeigen (Anzahl: 1)
Source und .exe
Bei mir auf meinem Rechner (ich will das jetzt nicht verallgemeinern, tritt der beschriebene Effekt ein!

*Witzbolde* kann man nicht bevor die komplette Datei hochgeladen wurde testen, ob die Erweiterung legal ist? und warum ist *.ace nicht erlaubt? Das ist imho die beste Art etwas zu packen!

Christian Seehase 9. Jan 2003 01:18

Moin Nailor,

war wohl schon etwas spät ;-)

Die Unit und das Formular fehlen nämlich.

Aber die EXE zeigt interessante Effekte.
So etwas hab' ich auch noch nicht gesehen ;-)

Helld_River 9. Jan 2003 11:58

Nur so eine Idee:

Eingeschaft SCALED (des Formulars) und ANCHORS mal verändern, bzw. mal damit etwas experimentieren.

Gruß, Helld;

nailor 9. Jan 2003 14:34

Liste der Anhänge anzeigen (Anzahl: 1)
Nochmal. Jetzt hoffentlich mit allem dabei...

Helld_River 9. Jan 2003 15:09

Hi !
Hab's runtergeladen und wollte es ausfürhern

==>[Fataler Fehler] Unit1.pas(6): Datei nicht gefunden: 'Variants.dcu'

Kenne ich nicht, wo kommt die her ?

Gestest unter D5 Ent / Win98SE

Ach ja, deine SCALED-Eigenschaft des Formulares ist auf true, setz die mal auf false (siehe oben). Vielleicht geht es dann !

Gruß, Helld;

nailor 9. Jan 2003 15:36

Variants? Ist das nicht bei D6 zumindest eine von den Standard-Units?

----

Scaled ändert nichts an der Sache... :cry:

Helld_River 9. Jan 2003 15:41

OK, ich schaue nachher mal unter D7 nach, da müsste es ja wohl auf alle Fälle gehen.

Gruß, Helld;

sakura 9. Jan 2003 15:47

Ja. In Delphi 5 und älter einfach den Verweis auf die Variants Unit aus der uses Klausel entfernen und schon gehts weiter.

Christian Seehase 9. Jan 2003 15:48

Moin Nailor,

ich hab' mal mit Deinen Code experimentiert.
Mal abgesehen davon, dass Du das div 2 vergessen hattest, also die Höhe immer des des Client Bereiches hätte entsprechen müssen, sollte das so funktionieren, und tut's nicht :shock:

Ich hab' mal ein leeres Projekt genommen, dort dann ein Pagecontrol draufgelegt, die Unit1 einfach komplett durch Deine ersetzt (div 2 ergänzt, sonst kann es ja nicht funktionieren, und variants gelöscht, die wird eh' nicht gebraucht und D5 kennt die nicht), und dann die beiden Ereignisse zugewiesen.
Anschliessend gespeichert, und Deine INI ins Projektverzeichnis gelegt.

Alles funktioniert.

Das scheint demnach an der dfm Datei zu liegen, oder irgendeiner Option, auch wenn ich mir nicht erklären könnte, welche das wohl sein sollte.

nailor 9. Jan 2003 16:14

Das div 2 hb ich nicht vergessen, in "echt" brauch ich nämlich was anderes, nur halt von der Größe von Form1 abgeleitet. Als Beispiel, um das Problem einzuengen, hab ich halt mal div 2 genommen.

Also: ich mach mal ein neues Projekt, kopiere meinen Quelltext da rein, und meld mich dann wieder.

Danke schon mal.

nailor 9. Jan 2003 16:51

:kotz: :kotz: ICh hab das jetzt in einer neuen Anwendung eingefügt. Und was passiert. Im Prinzip das gleiche, nur das jetzt auch manchmal der Effekt eintritt, dass das Pagecontrol ganz verschwindet (nicht weil das Fenster zu klein ist - das kann ganz groß sein).

Schick mir mal deine kopilierte Version (mit der Versicherung, dass bei dir solche Effekte nicht da sind), ich teste die bei mir, und wenn wieder sowas passiert, dann schieb ich das auf meinen PC, und bin echt sauer. An sonsten liegts an meinem Delphi und ich bin auch echt sauer!

:evil: :evil:

Christian Seehase 9. Jan 2003 17:50

Liste der Anhänge anzeigen (Anzahl: 1)
Moin Nailor,

ich hab's mal als Attachement angehängt, incl. Source.

Wie schon gesagt, unter Verwendung Deines Original Codes der Unit1 (ohne DFM!) klappt es, mit Deiner DFM nicht.

Was Du noch probieren könntest (ich weiss nicht ob D6 das schluckt, müsste aber eigentlich):

Kopier Dein Projekt noch mal in einen neuen Ordner, und dann kopiere mal meine DFM Datei rein (dadurch müsste ja Deine überschrieben werden).
Zur Sicherheit auch noch die Unit1.DCU löschen.

Jetzt das Projekt öffnen und kompilieren. Wenn's dann geht, liegt's mit ziemlicher Sicherheit an der Formulardatei.

Da Dein Programm, egal ob von Dir mit D6, oder von mir mit D5 kompiliert, bei mir immer den Fehler gezeigt hat, müsste meines bei Dir laufen.

nailor 9. Jan 2003 18:47

Deine exe könnte sein, dass sie richtig arbeitet, aber bei div 2 kann man schlecht sagen, ob es wirklich stimmt.

Die dfm-s sind gleich. Wenn ich den Quelltext, der bei dir noch dabei ist, kompiliere ist das Ergebnis aber auf jeden Fall falsch.

PS: neue (eventuell sehr wichtige Info) mir ist grade aufgefallen, dass, wenn man nachdem der Fehler auftritt, die Seite manuell ändert, das PageControl seine Größe erneut ändert und alles so wird, wie es sein sollte.

PPS:
Delphi-Quellcode:
Form1.Realign;
PageControl1.ActivePageIndex := Zahl;
PageControl1.Refresh;
PageControl1.Repaint;
von denen hilft keins.

Christian Seehase 9. Jan 2003 19:59

Moin Nailor,

probier doch mal das ganze Projekt von mir nochmals zu entpacken, zu laden, und einfach nochmal starten

Die CFG und DOF unterscheiden sich nämlich.

nailor 9. Jan 2003 20:18

hab ich doch. Hab nur Zeug aus deinem ziparchiv genommen...

Christian Seehase 9. Jan 2003 20:22

Moin Nailor,

also abgesehen von diesen Unterschieden in der CFG und DOF, konnte ich keine Feststellen.

Das muss sich nochmal jemand mit D6 ansehen.

Da weiss ich jetzt leider auch nicht mehr weiter.

nailor 9. Jan 2003 23:16

Neue Frage an alle:
Welche procedures werden beim Wechseln des TabSheets in einem PageControl durchlaufen?

nailor 30. Jan 2003 19:28

Hi!

Ich habe nochmal mit dem Programm rumgespielt. Ergebnis: Das ganze führt nur zu falschen Ergebnissen, wenn man die Fensterhöhe verkleinert. Dann wird das PageControl soweit nach unten verschoben, wie man das Fenster grade verkleinert hat. d.h. ich kann mir vorstellen, dass er einfach noch das "alte" Fenster nimmt, daran ausrichtet, und dann die Fenstergröße ändert. Dadurch erklärt sich auch, warum bei PAgeControl das untere Ende fehlt. Es ist dann ja, dort wo vorher das Fenster aufgehört hat.
Dagegen spricht, dass, wenn man das Fenster größer macht, das PageControl nicht einfach irgendwo in der Luft anfängt, da wo vorher das Fenster zu Ende war.

HILFE!!! :roteyes:

PS: weiter Versuche: Das gleiche Problem tritt analog bei alRight auf, nicht aber bei alTop, alBottom, alClient. Ich krieg gleich nen Rappel!


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:34 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