six1 hat geschrieben:
da sind über 900 Komponenten... no go
Das sind vielleicht ein bisschen viele. Wenn jede komponente mit jeder interagieren kann (was sie ja können, da es für jede komponente a und a' mindestens die interaktion a.focused -> a'.focused gibt, wo wir eh vom focus reden) gilt dann das die anzahl an möglichen interaktionen exponentiell wächst.
Einfache induktion, mit 0 komponenten hast du 1 state. Wenn du jetzt eine komponente C hinzufügst, und wir nur die fukus beziehung betrachten, kommt für jeden bisherigen state S der state S->C.focused hinzu, also erhöht sich die anzahl der states um genau das was sie vorher war, also um faktor 2. Also #S(#C + 1) = #S(#C) * 2. Mit dem fakt das wir mit 1 state anfangen ergibt sich also #S(#C) = 2 ^ #C.
Für 900 komponenten also 2^900 = 8.452712e+270, das ist ne 8 mit 270 nullen hinten dran. Das ist die anzahl der fehlerquellen durch so viele komponenten die miteinander in beziehung stehen (allein da durch das sie auf der selben form sitzen)
Es hat einen grund warum man normalerweise versucht software komponenten möglichst klein und abgekapselt zu haben. Z.B. durch subkomponenten. Das einfachste in Lazarus dafür ist Frames mit sehr schmalen schnittstellen. Man denkt da oft nicht so drüber nach, aber Code wird exponentiell komplizierter (und damit auch fehleranfälliger) je größer er wird. Der einzige weg das in den griff zu bekommen ist modularisierung. Zwei module haben nur halb so viel komplexität wie ein doppelt so großes, obwohl die anzahl an Code Zeilen identisch sein mag, oder bei den zwei modulen sogar mehr ist.
Aber, zum fehler finden musst du ja nicht jede komponente einzeln löschen. Binärsuche ist das Zauberwort. Kopiere dein projekt, und lösche die hälfte aller komponenten raus. Tritt der fehler nicht mehr auf stell den vorrigen state wieder her und lösch die andere hälfte raus. In der hälfte die über bleibt machst du dann das selbe. Im ersten schritt hast du dann nur noch 450 komponenten, im zweiten 225, im dritten 112, im vierten 56 und so weiter. Nach 10 schritten bist du spätestens durch
Normalerweise sind aber auch komponenten nicht so das problem, sondern wahrscheinlich eher der code. Da kannst du aber genauso vorgehen, isolier die Form in ein separates projekt, und dann beginn indem du die hälfte der Funktionen löschst, und mach dann binärsuche wie mit komponenten beschrieben
six1 hat geschrieben:Ich glaube da eher daran, dass ich eine eigene Uhrzeitauswahl stricke

Damit dir in ein paar wochen das was anderes um die ohren fliegt was die selbe ursache hat?