Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Frames mit Tücken??? (https://www.delphipraxis.net/206173-frames-mit-tuecken.html)

Delbor 26. Nov 2020 14:24

Delphi-Version: 10.4 Sydney

Frames mit Tücken???
 
Hi zusammen

Ein besserer Titel ist mir da leider nicht eingefallen. Ich bin dabei, eine brauchbare Oberfläche für meinen Kalender zu entwerfen. Dazu fülle ich zur Laufzeit ein Stringggrid in einem Frame. Dieser enthält (zumindest bis jetzt) nur gerade die Prozedur zum füllen des Grids. Das Testprogramm enthält letztlich mehrere solcher Frames.

Nun habe ich vor einiger Zeit einen Frame angelegt und diesem eine schon bestehende und erprobte Prozedur zum füllen des Grids verpasst. Bei Programmstart rufe ich diese Prozedur auf, das Programm hält an zwei Haltepunkten, so dass ich besagte Procedur Zeile für Zeile durchlaufen kann.
Aber nachdem das geschehen ist ist das Grid in der Frameinstanz leer.
Das Programm enthält noch weitere, andere Instanzen anderer Frames mit den selben Einstellungen, und die zeigen alle genau das an, was sie sollen, nur dieser eine ist leer...

Kann es sein, dass das Arbeiten mit Frames in früheren Editionen von Delphi...hmmm...zuverlässiger war? Ich habe erst kürzlich einige Zugriffsverletzungen gehabt, nachdem ich im Basisframe eine Komponente gelöscht habe. Erst ein Neustart von Delphi und Windows hat das Problem gelöst.

Meine Frage im Moment ist: wesswegen wird mein Stringgrid auf dem Frame nich ausgefüllt? Die Prozedur:
Delphi-Quellcode:
procedure TCompleteYearFrame.StartAndEndOfTheMont;
  var i,j,y, Nr,x : Integer; Jahr,Woche: Word;
      Today : String;ADate,Datum, LLastMonthDay :TDateTime;
begin
   ADate := a.DateTimePicker2.Date; //Übergeben des Anfangdatums
   Nr := DayofTheWeek(ADate);    //Tagesnummer ermitteln : 1. Wochentag := Montag
   Today := Wochentage[(NR-(NR-1))];
   Datum := (ADate-(NR-1));
   i := 0;
   j := 2;
   x := 1;
   y :=1;
   LLastMonthDay := EndOfTheMonth(ADate);
   while Datum <= LLastMonthDay do   // Dies schreibt 7 Wochenblöcke ins Stringgrid ;
   begin
      inc(i);
      while j <= 8 do begin
         if j = 2 then begin
           DateToWeek(Datum, Woche, Jahr);
           StringGrid15.Cells[y,x] := 'Woche '+IntToStr(Woche);  {1 ist die Spalte, X ist die Zeile}
         end;
         StringGrid15.Cells[0,j]:= Today;
         StringGrid15.Cells[y,j]:= DateToStr(Datum);
         StringGrid15.Cells[y+1,j]:= 'StartAndEndOfTheMont';
         Inc(j);
         Datum := Datum +1;
         Nr := DayofTheWeek(Datum);  //Tagesnummer ermitteln : 1. Wochentag Montag
         Today := Wochentage[Nr];
      end;
      Inc(y);
      j := 2;
   end;
end;
Gruss
Delbor

himitsu 26. Nov 2020 14:38

AW: Frames mit Tücken???
 
Falscher Frame?
Was anderes angezeigt, als du denkst dort die Funktion ausgeführt zu haben.


Was man hier sieht, ist bezüglich irgendwelcher Instanzen nicht falsch.
Die Funktion greift immer nur auf das Grid zu, was dazu gehört.

Mal debuggen und schauen obund was gemacht wird?
Eventuell machen ja die Schleifen ab
Delphi-Quellcode:
while Datum <= LLastMonthDay
garnichts, weil die Werte nicht stimmen.

Oder der Fehler ist wo anders.
Dort wo du die Frames erstellst und diese Funktion aufrufst.


Aber dennoch ein paar Kleinigkeiten:
* Was ist
Delphi-Quellcode:
a
?
*
Delphi-Quellcode:
NR-(NR-1)
ähhhh = 1 :stupid:
* DateToWeek ist eine Funktion, aber wieso benutzt niemand desser Result?

Rollo62 26. Nov 2020 14:49

AW: Frames mit Tücken???
 
An Frames habe ich mich nur vorsichtig rangetastet, weil ich früher ähnliche Probleme damit hatte.

Ich denke mittlerweile, es liegt daran wie man Frames benutzt:
- Design im Designer: Kein Problem
- Änderungen zur Laufzeit: Kein Problem
- Frame ist wie Datenmodul, überall nutzbar: Kein Problem
- Frame in Frame nutzen (zur Laufzeit create & festlegen): Kein Problem

Das Einzige was ich NIEMALS mehr mache ist:
- Ein Frame als Komponente nutzen, und per Designer auf Form/Frame werfen: !! PROBLEME

Der schöne Günther 26. Nov 2020 14:53

AW: Frames mit Tücken???
 
Schau dir die DFM-Dateien des Formulars/Frames an auf welchem die Frames liegen. Meistens enthalten die redundante Informationen, teilweise werden sogar ImageLists gedoppelt.

Delbor 26. Nov 2020 15:35

AW: Frames mit Tücken???
 
Liste der Anhänge anzeigen (Anzahl: 5)
Hi Himitsu

Das Programm ist eine Uralt-Lösung, seinerzeit zum Erstellen und auslesen von Excel-Dateien erstellt - die zur Zeit älteste Sicherung wurde 2007 gespeichert. Damals gab es noch vieles nicht und musste selbst oder nach Beispielen gebaut werden.
Zitat:

* Was ist a ?
Aus irgendwelchem dämlichen Grund habeich damals die Mainform so genannt.
Zitat:

* NR-(NR-1) ähhhh = 1
Damals gab es DayofTheWeek offensichtlich noch nicht. Ich habe damals nach einem meiner schlauen Bücher gearbeitet;hier entweder Elmar Warken oder Doberenz.
Mein Array der Wochentage beginnt mit Montag; entsprechend musste ich jeweils umrechnen
Zitat:

* DateToWeek ist eine Funktion, aber wieso benutzt niemand desser Result?
Dieses DateToWeek ist eben keine Funktion, sondern eine Prozedur.

Im Anhang noch ein paar jpegs vom durchsteppen:
Anhang 53336Anhang 53337Anhang 53339
Anhang 53338Anhang 53340

Inzwischen habe ich auch die Beiträge von Der schöne Günther und Rollo62 gesehen-ich werde daseparat drauf eingehen.


Gruss
Delbor

Delbor 26. Nov 2020 17:06

AW: Frames mit Tücken???
 
Hi Der schöne Günther
Zitat:

Zitat von Der schöne Günther (Beitrag 1478011)
Schau dir die DFM-Dateien des Formulars/Frames an auf welchem die Frames liegen. Meistens enthalten die redundante Informationen, teilweise werden sogar ImageLists gedoppelt.

Das hab ich gerade mit zweien der Frames gemacht - nachdem ich deren Instanzen gelöscht habe. Beide Frames enthalten keine Redundanzen.
Allerdings war eine der 2 Instanzen jenes Frames, um den es hier geht, seinerseits in einem Frame eingebettet.

Ich weiss jetzt nicht wirklich, ob ich auf der richtigen Spur bin, aber mir scheint, im Create der Mainform liegt die Antwort:

Delphi-Quellcode:
Self.CalendariumFrame1.CompleteYearFrame1.StartAndEndOfTheMont;


Und die zweite Instanz liegt in einem PageControl direkt auf der Mainform und müsste wohl nochmal separat angesprochen werden.

Gruss
Delbor

Redeemer 26. Nov 2020 18:06

AW: Frames mit Tücken???
 
Zitat:

Zitat von Rollo62 (Beitrag 1478010)
An Frames habe ich mich nur vorsichtig rangetastet, weil ich früher ähnliche Probleme damit hatte.

Ich denke mittlerweile, es liegt daran wie man Frames benutzt:
- Design im Designer: Kein Problem
- Änderungen zur Laufzeit: Kein Problem
- Frame ist wie Datenmodul, überall nutzbar: Kein Problem
- Frame in Frame nutzen (zur Laufzeit create & festlegen): Kein Problem

Das Einzige was ich NIEMALS mehr mache ist:
- Ein Frame als Komponente nutzen, und per Designer auf Form/Frame werfen: !! PROBLEME

Ich erstelle meine Frame-Instanzen ebenfalls nur zur Laufzeit.
Manchmal machen sie zwar Probleme (z.B. kann man kein THotKey auf einen TFrame packen), aber im Großen und Ganzen funktioniert es.


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