Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi FormResize Procedure Funktionier nicht (https://www.delphipraxis.net/115933-formresize-procedure-funktionier-nicht.html)

Timb0 20. Jun 2008 07:48


FormResize Procedure Funktionier nicht
 
Morgen an alle,
ich habe im Moment ein Problem. Ich habe eine Form mit FormStyle = fsMDIChild. ICh habe auf diesem Formular
ein Pagecontrol. In der Resize Funktion soll nun das Pagecontrol auf die Größe der Form angepasst werden.
Sobald ich in der Resizefunktion dem Pagecontrol die entsprechenden Werte zuweise wird die Funktion frühzeitig
beendet ohne Fehlermeldung.
was habe ich falsch gemacht ?


GRuß Timb0

Sherlock 20. Jun 2008 07:53

Re: FormResize Procedure Funktionier nicht
 
Woher weisst Du, daß die Function frühzeitig beendet wird?
Vielleicht solltest Du einfach mal debuggen? Also einen Breakpunkt in die erste Zeile dieser Function setzen un dann schrittweise schauen was passiert...

Weil so ist das erst mal ein Ratespiel :glaskugel:

Sherlock

Timb0 20. Jun 2008 07:59

Re: FormResize Procedure Funktionier nicht
 
Daher weiss ich das, ich habe Breakpoints in die Komplette Funktion eingebaut und nach der ersten, der wo die Pagecontrol Eigenschaften verändert werden, wird bei den darauf folgenden Breakpoints nicht gehalten. Dabei Passier nichts. Kommentier ich das aus dann wird an allen anderen Breakpoints ausgeführt.


GRuß Timb0

RavenIV 20. Jun 2008 08:06

Re: FormResize Procedure Funktionier nicht
 
dann mach mal ein try..ecxept drum rum und lass Dir den Text der Exception anzeigen.

Timb0 20. Jun 2008 09:12

Re: FormResize Procedure Funktionier nicht
 
Ok ich denke das PRoblem ist, dass ich die Form auf der das PageControll eingebettet ist Dynamisch erzeugen. Was ich raus gefunden habe ist, dass wenn man die grösse die Form ändert und diesen Wert dann abruft dieser sich nicht geändert hat. Ich habe Überhaupt keinen Einfluss mehr auf das Formular wenn ich auf den Zeiger der auf die erstellte Form zeigt zugreife. Was mache ich könnte das sein ?

gruß Timb0

RavenIV 20. Jun 2008 09:13

Re: FormResize Procedure Funktionier nicht
 
Zitat:

Zitat von Timb0
Ok ich denke das PRoblem ist, dass ich die Form auf der das PageControll eingebettet ist Dynamisch erzeugen. Was ich raus gefunden habe ist, dass wenn man die grösse die Form ändert und diesen Wert dann abruft dieser sich nicht geändert hat. Ich habe Überhaupt keinen Einfluss mehr auf das Formular wenn ich auf den Zeiger der auf die erstellte Form zeigt zugreife. Was mache ich könnte das sein ?

hääähhhh?
Versteh nur Bahnhof.
Erklär das mal ein Bisschen ausführlicher.

Timb0 20. Jun 2008 09:30

Re: FormResize Procedure Funktionier nicht
 
Ok Sorry ist noch was früh für mich.

ALso worum es in meinem Projekt geht:
Ich bekomme Messdaten von einer Rechensoftware, diese soll ich auswerten und Plotten. Ich habe dazu eine MDIForm angelegt welche die Daten verwaltet und dazu eine Form entworfen auf der ich ein Pagecontrol und ein Diagramm eingebettet habe. Diese Childformular will ich jetzt dynamisch erzeugen (was auch klappt) und dann während dem laufen der Software dynamisch Pages zum Pagecontrol hizuzufügen.
Greife ich während dem Laufen mittels eines Zeigers ( der auf das Spezielle Formular zeigt) auf das Formular zu, dabei reagiert das Formular auf nichts mehr.
Jetzt kommte meine Frage von eben ins Spiel. Wenn ich nun bei dem Formular die größe änderen und die gänderten daten dan abfragen will dann kann ich das nur machen wenn ich einen Button auf das Formluar lege und diesem die entsprechende Funktion zuweise. Greif ich über den Vorher angelegten Zeiger auf das Formular zu dann erhalte ich eine Expation die mir verbietet auf diese Adresse zu zu greifen. Und jetzt weiss ich nicht was ich machen könnte. Dynamisch habe ich schon oft steuerelemente hinzugefügt aber noch nie Formular auf denen ich dann wieder was hinzufüge.

Kann es vielleicht sein, dass das PRoblem ist das ich quasi in einer Klasse Rumfummel die Dynamisch erzeugt habe womit sich die Zeigerstruktur verändert. Dann würde ich ja nicht mehr mit dem selben Zeiger darauf zugreifen ???


Ich hoffe das ist etwas besser erklärt was mein Probelm ist.

GRuß und vielen Dank schonmal Timb0

RavenIV 20. Jun 2008 09:38

Re: FormResize Procedure Funktionier nicht
 
Ich erzeuge auch Forms dann, wenn ich sie brauche.
Und greife auch darauf zu und es passiert kein Fehler.

Wie erzeugst Du das Formular und die darauf liegenden Komponenten?
Zeig vielleicht mal ein Bisschen Code.

Timb0 20. Jun 2008 09:49

Re: FormResize Procedure Funktionier nicht
 
Also Bei dieser Funktion
Delphi-Quellcode:
procedure TForm1.MenuNeuesFensterClick(Sender: TObject);
var
  NewItem:TMenuItem;
  NewForm2:TForm2;
  str:String;
begin
str := Inputbox('Name Eingeben','Namen Des Diagramms eingeben','');
if StringlistFenster.IndexOf(str) < 0 then
begin
  Newitem := TMenuitem.create(self);
  Newitem.caption := str;
  stringlistFenster.add(str);
  newitem.OnClick := Form1.DynMenuitem;
  MenuFenster.add(NEwitem);
  ListMenuItem.Add(@NEwitem);

  NewForm2 := TForm2.create(self);
  NewForm2.caption := str;
  NEwForm2.Name:=str;
  NEwForm2.Show;
  ListFenster.add(@NewForm2);
end
else ShowMEssage('Der Name Existiert bereits!');
end;
Kann ich noch ganz locker auf das Formular zugreifen. Greif ich dan später auf einen der Zeiger aus der ListFenster zu dann sieht das so aus
Delphi-Quellcode:
PRocedure TForm1.DynMenuitem(Sender:Tobject);
var
  i:Integer;
  PForm2:^TForm2;
begin
  i:= MenuFenster.IndexOf((Sender as TMenuItem));
  PForm2 := ListFenster.Items[i-2];
  PForm2^.Height := 130
end;
dann erhalte ich eine Fehlermeldung.

Gruß Timb0

RavenIV 20. Jun 2008 09:53

Re: FormResize Procedure Funktionier nicht
 
Vielleicht verwaltest Du das Array ListFenster ja falsch.
Warum speicherst Du Pointer und nicht TForms?

Zeig mal die Definition der Arrays.

BTW:
Warum greifst Du auf i-2 zu?


Vielleicht musst Du auch Dein Konzept neu überdenken?

P.S. Bei dem ersten Delphi-Tag in Deinem vorherigen Posting ist was falsch gelaufen.
Bitte editieren.

Timb0 20. Jun 2008 09:59

Re: FormResize Procedure Funktionier nicht
 
Achso das hätte ich sagen sollen. Ich habe ein Menu in dem die Namen der Formular gespeichert werdenm, auf deren Liste greife ich zu und da beginnen die interessanten Indices erst ab dem 2.

GRuß Timb0

Timb0 20. Jun 2008 10:08

Re: FormResize Procedure Funktionier nicht
 
Ich werde die Geschichte nochmal von vorne neu aufbauen, diese TForms ist das eine List speziell für Formulare? habe ich noch nie von
gehört ?

gruß Timb0

RavenIV 20. Jun 2008 10:12

Re: FormResize Procedure Funktionier nicht
 
Zitat:

Zitat von Timb0
Ich werde die Geschichte nochmal von vorne neu aufbauen, diese TForms ist das eine List speziell für Formulare? habe ich noch nie von
gehört ?

Nein, das ist keine Liste, sondern die Mehrzahl von TForm.

Also Liste würde ich eine TList oder TObjectList nehmen.
Konsultier die Hilfe oder die Delphi-Beispiele dazu.
Bei Arrays bist Du eh viel zu eingeschränkt und musst die Verwaltung u.U. selbst machen.

P.S. Kann es sein, dass Du aus dem C/C++-Lager kommst?

Timb0 20. Jun 2008 10:51

Re: FormResize Procedure Funktionier nicht
 
ICh habe halt mit c/c++ Angefangen und bin dann für ein Job auf Delphi umgestiegen. Ich glaube das das der Grund ist das ich alles dynamisch und mit Zeigern machen will..

RavenIV hab dank für deine Hilfe.

GRuß Timb0

RavenIV 20. Jun 2008 11:04

Re: FormResize Procedure Funktionier nicht
 
Zitat:

Zitat von Timb0
Ich glaube das das der Grund ist das ich alles dynamisch und mit Zeigern machen will..

RavenIV hab dank für deine Hilfe.

Dynamischer wie eine TList geht es doch garnicht.
Von den Zeigern solltest Du Dich aber verabschieden. Das kommt in Delphi nicht so gut.

Bitteschön. Freut mich, wenn ich helfen konnte.

Muetze1 20. Jun 2008 12:30

Re: FormResize Procedure Funktionier nicht
 
Zitat:

Zitat von Timb0
ICh habe halt mit c/c++ Angefangen und bin dann für ein Job auf Delphi umgestiegen. Ich glaube das das der Grund ist das ich alles dynamisch und mit Zeigern machen will..

Alle Instanzenvariablen und Objektinstanzen sind intern Zeiger in Delphi. Somit keine Gedanken an Referenzen o.ä. verschwenden. Auch Copy Constructoren gibt es nicht. Mit diesen paar Weisheiten sollte vllt. so manches klarer werden in Delphi...


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:59 Uhr.

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