AGB  ·  Datenschutz  ·  Impressum  







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

Resize: Inhalt von MainForm bleibt unverändert

Ein Thema von Nikodel · begonnen am 28. Jan 2019 · letzter Beitrag vom 30. Jan 2019
Antwort Antwort
Seite 1 von 2  1 2      
Nikodel

Registriert seit: 11. Jan 2019
20 Beiträge
 
Delphi XE4 Professional
 
#1

Resize: Inhalt von MainForm bleibt unverändert

  Alt 28. Jan 2019, 16:13
Hi,
mein MainForm enthält ganz unten einen TScrollBar über die volle Breite und darüber ein 'Image1: TImage' mit
Align=alBottom, Anchors=[akLeft,akRight,akBottom], AutoSize=false. Der ScrollBar hat die gleichen Einstellungen für Align und Anchors.

Wenn das Programm gestartet und der Inhalt von Image1 erzeugt ist, und ich mit der Mouse das Fenster verbreitere, ändert sich die Größe von Image1 nicht, was ich mit den Einstellungen für Align und Anchors erwartet hätte.
Der ScrollBar wird jedoch automatisch an die neue Breite angepasst.
Wenn ich AutoSize=true setze, dann sehe ich keinen Inhalt in Image1, mit AutoSize=false aber schon.

Natürlich könnte ich mit OnResize von MainForm das alles extra programmieren, aber geht das nicht direkt?
Warum passt sich der ScrollBar an, aber Image1 nicht?
Oder hat mein Delphi XE4 da einen Fehler?

Tipps sind sehr willkommen
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.643 Beiträge
 
Delphi 12 Athens
 
#2

AW: Resize: Inhalt von MainForm bleibt unverändert

  Alt 28. Jan 2019, 16:27
Tipps sind sehr willkommen
Etwas Source-Code auch...
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Resize: Inhalt von MainForm bleibt unverändert

  Alt 28. Jan 2019, 18:33
Hallo,
bitte die Pas und die DFM posten als Minimal-Beispiel.

Vielleicht liegt ja dein Image nicht direkt auf dem Form,
sondern auf einem Panel oder was ähnlichem.

PS:
Hab gerade mal mit Delphi XE4 ein neues Projekt erzeugt,
klappt genauso wie erwartet.
Heiko

Geändert von hoika (28. Jan 2019 um 18:43 Uhr)
  Mit Zitat antworten Zitat
28. Jan 2019, 19:01
Dieses Thema wurde am "28. Jan 2019, 20:01 Uhr" von "Luckie" aus dem Forum "Object-Pascal / Delphi-Language" in das Forum "GUI-Design mit VCL / FireMonkey / Common Controls" verschoben.
Nikodel

Registriert seit: 11. Jan 2019
20 Beiträge
 
Delphi XE4 Professional
 
#5

AW: Resize: Inhalt von MainForm bleibt unverändert

  Alt 29. Jan 2019, 10:17
Hi,
die gewünschten Dateien, .dfm und .pas, sind in der Anlage zu finden.
Die .pas habe ich jedoch um die großen Teile gekürzt. Aber es befinden sich alle deklarierten Funktionen und Prozeduren darin.

Hoffentlich reicht das so. Wenn nicht, kann ich auch den kompletten Code senden, aber das wollte ich euch ersparen.

Übrigens:
Wenn ich mich hier im Forum anmelde und dann eine Anfrage erstelle oder einen Beitrag beantworte, muss ich mich zum Versenden nochmal anmelden - jetzt z.B. wieder, um den Anhang anzufügen.
Ist das normal?
Angehängte Dateien
Dateityp: zip fuerForum.zip (5,3 KB, 6x aufgerufen)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Resize: Inhalt von MainForm bleibt unverändert

  Alt 29. Jan 2019, 10:36
Hallo,

object Image1: TImage
Left = 0
Top = 68
Width = 933
Height = 458
Align = alBottom
end

Das seh ich erst mal keine Anchors.

object ScrollBarTage: TScrollBar
Left = 0
Top = 526
Width = 933
Height = 17
Align = alBottom
PageSize = 0
TabOrder = 7
OnScroll = ScrollBarTageScroll
end

und hier auch nichts.

OK, habe dann doch mal Delphi aufgemacht.
Du benutzt Align und Anchors in einem Formular, warum?.
Das würde ich ändern.
Anchors sind ja moderner, also stell das Align auf alNone.
Heiko

Geändert von hoika (29. Jan 2019 um 10:43 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.643 Beiträge
 
Delphi 12 Athens
 
#7

AW: Resize: Inhalt von MainForm bleibt unverändert

  Alt 29. Jan 2019, 10:42
Und was muss man tun, um das von dir beschriebene Verhalten zu reproduzieren?

Übrigens:
Bist du sicher, daß sich wirklich die Breite des TImage-Controls nicht ändert, oder lediglich deine Zeichenoperationen die neue Breite nicht auswerten?
Zeichnest du überhaupt neu, wenn sich die Breite ändert?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Nikodel

Registriert seit: 11. Jan 2019
20 Beiträge
 
Delphi XE4 Professional
 
#8

AW: Resize: Inhalt von MainForm bleibt unverändert

  Alt 29. Jan 2019, 11:51
Hi,

vorab noch eine Info: es handelt sich um ein VCL-Programm, nicht FMX!

Zu hoika:
Die Werte für Align und Anchors gebe ich im Objektinspektor ein. Dabei war wichtig, dass Align=Bottom zuerst für den ScrollBar und dann für Image1 angegeben wurde. In der anderen Reihenfolge hängt der ScrollBar über dem Image1.
Warum in der .dfm Datei nichts für Anchors steht, kann ich nicht sagen. Was soll ich denn sonst noch tun, damit die im Objektinspektor eingegebenen Werte auch alle in der .dfm Datei landen?
Würde es helfen, manuell die Werte einzutragen? - bisher habe ich die .dfm Datei nie angerührt.

Ich hab's auch mit Align=None probiert. Die Größe von Image1 wird auch damit nicht automatisch angepasst.

Zu Uwe Raabe:
Zitat:
Und was muss man tun, um das von dir beschriebene Verhalten zu reproduzieren?
Genau um diese Frage geht es.
Ich könnte natürlich im OnResize von MainForm die Größe von Image anpassen. Nur frage ich mich, wozu die Einstellungen in Align und Anchors dann gut sind, zumal ja der ScrollBar schon automatisch angepasst wird, aber Image1 eben nicht - beide mit den selben Einstellungen für Align und Anchors.

Und die Größe von Image1 wird wirklich nicht angepasst. Der Plot passt sich an die Größe von Image1 an. Nach Vergrößerung des MainForm bleibt der erzeugte Plot - mit neuem Aufruf zum Plotten - unverändert groß.

Zu peterbelow:
Das sind gute Tipps. Leider bin ich noch nicht so fit mit Delphi und vor allem noch nicht mit den vielen Möglichkeiten der Tool-Palette. Ich habe das Zoomen und die entsprechenden Anpassungen des ScrollBars selber programmiert.
Beim nächsten mal weiß ich es dann
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.643 Beiträge
 
Delphi 12 Athens
 
#9

AW: Resize: Inhalt von MainForm bleibt unverändert

  Alt 29. Jan 2019, 14:18
Zitat:
Und was muss man tun, um das von dir beschriebene Verhalten zu reproduzieren?
Genau um diese Frage geht es.
Also, die Schritte des von dir beschriebenen Verhaltens
Zitat:
Wenn das Programm gestartet und der Inhalt von Image1 erzeugt ist, und ich mit der Mouse das Fenster verbreitere, ändert sich die Größe von Image1 nicht
solltest du schon aufzählen können. Insbesondere, wie man den Part "der Inhalt von Image1 erzeugt ist" erschließt sich mir noch nicht.

Wenn ich ein entsprechend großes JPG in das Image lade, wird das allerdings schon richtig dargestellt, was in diesem Fall heißt, beim Vergrößern sehe ich mehr vom Bild. Damit ist eigentlich die Aussage "ändert sich die Größe von Image1 nicht" schon widerlegt, denn das Control Image1 ändert seine Größe schon. Was sich nicht ändert, ist die Größe seines Inhalts.

Ich könnte natürlich im OnResize von MainForm die Größe von Image anpassen. Nur frage ich mich, wozu die Einstellungen in Align und Anchors dann gut sind, zumal ja der ScrollBar schon automatisch angepasst wird, aber Image1 eben nicht - beide mit den selben Einstellungen für Align und Anchors.

Und die Größe von Image1 wird wirklich nicht angepasst. Der Plot passt sich an die Größe von Image1 an. Nach Vergrößerung des MainForm bleibt der erzeugte Plot - mit neuem Aufruf zum Plotten - unverändert groß.
Dann liste doch bitte exakt alle Schritte auf, die nötig sind, um dieses Verhalten nachzustellen. Mit den bereitgestellten Sourcen konnte ich nämlich keinen Plot hervorzaubern.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Nikodel

Registriert seit: 11. Jan 2019
20 Beiträge
 
Delphi XE4 Professional
 
#10

AW: Resize: Inhalt von MainForm bleibt unverändert

  Alt 29. Jan 2019, 14:44
Hi,
neue Info:

Mein Programm malt auf Image1.Canvas. Beim Vergrößern von MainForm wird die Größe von Image1 tatsächlich angepasst, aber Canvas scheint dies nicht mitzumachen.
Laut Delphi-Hilfe gibt es ein Canvas.Width. Im Programm jedoch gibt es einen Compilerfehler 'undeklarierter Bezeichner: Width', wenn ich den Wert ausgeben lassen möchte, z.B. in Edit2:
(ohne "+'Canvas.Width='+IntToStr(Image1.Canvas.Width )" klappt die Ausgabe)
Code:
procedure TMainForm.DrawAxes(start_date, ndays: int32);
var
  nhours: int32;
  countl, counts, px, py, pxl, rptxt: int32;
  dstr: string;
  DateUnit: TDateUnits; // Zeitskale der x-Achse, TS: Tage/Std., MT: Monate/Tage
  minTcDist: int32;
  hd_perMinTick: int32;  // kleinste Unterteilung der x-Achse in Anzahl Stunden/Tage
  timespan_stick: int32; // Dauer der kurzen Ticks in Minuten
  timespan_ltick: int32; // Dauer der langen Ticks in Minuten
  PlotWidth: uint32;
  Jahr0, Jahr1, Monat0, Monat1, dayOffs: uint16;
  act_ts, ts_ltick, nextts_ltick: uint32;  // time stamps
  minVal, maxVal, actVal, rval: int16;
begin
  nhours:=ndays*24;

  Edit2.Text:='Form: W='+IntToStr(Width)+' Image1: W='+IntToStr(Image1.Width)+
                ' ClientWidth='+IntToStr(ClientWidth)+'Canvas.Width='+IntToStr(Image1.Canvas.Width);

  with Image1 do
  begin
...
// x-Achse malen:
    py:=Height-border_bottom;
    Canvas.Moveto(Width-border_right,py);
    Canvas.LineTo(border_left,py);
...
jetzt kommen die Ticks auf der x-Achse
// y-Achse links:
    Canvas.MoveTo(border_left, Height-border_bottom);
    Canvas.LineTo(border_left, border_top);
...
jetzt die Ticks auf der y-Achse
// y-Achse rechts:
    px:=Width-border_right;
    Canvas.MoveTo(px, border_top);
    Canvas.LineTo(px, Height-border_bottom);
...
und noch die Ticks auf der rechten y-Achse
...
  end
Im Code sind die Teile, die die Achsen des Plots malen, enthalten. Die Achsen werden relativ zur Größe von Image1 gezeichnet. Nach Vergrößerung von MainForm verschwindet die rechte Achse und der rechte Teil des Plots, was mir ein Rätsel ist.
Wo ist da mein Fehler?

Der rechte Rand des Plots ist in den anliegenden beiden Bildern dargestellt, im Originalzustand und nach Verbreiterung von MainForm.
Angehängte Dateien
Dateityp: zip BilderfuerForum.zip (10,4 KB, 2x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 05:52 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