Autor Beitrag
jbChrissi
Hält's aus hier
Beiträge: 3



BeitragVerfasst: So 09.03.03 17:19 
Hallo,

ich habe eine kleine Delphi 6.0 Application mit einer Access97 Datenbank zur Datenhaltung unter Windows Me programmiert. In dieser Anwendung habe ich ein Formular entwickelt, dass per Projektoptionen automatisch beim Starten des Programms erst einmal erzeugt wird. Wenn nun im Startformular dieses Formular angezeigt werden soll, erhält dieses Formular (Klasseninstanz) ein Von- und ein Bis-Datum und wird anschließend mit der Methode .ShowModal zur anzeige gebracht! Bei der Anzeige des Formulars werden nun abhängig vom definierten Zeitraum in einer TScrollBox-Komponente eine bestimmten Anzahl an TListBox-Komponenten dynamisch mit der Anweisung:

LB_MP:=TListBox.Create(SB_MP);

erzeugt. SB_MP ist dabei die TScrollBox-Komponente! Ich nutze dabei die Standartkomponenten von Delphi aus der Unit StdCtrls der VCL.

Nun zu meinem Problem:
-------------------------------
Wenn nun ein sehr langer Zeitraum angegeben wird und dies zwangsweise auch bedeutet, dass auch mehr TListBox-Komponenten zur Laufzeit erzeugt werden müssen, bricht die Routine, die für die Erzeugung der TListBox-Komponenten zuständig ist mit der Fehlermeldung "A call to an OS function failed" ab. Diese tut sie genau an der Stelle, an der eine TListBox-Komponente erzeugt werden soll. Meine Vermutung ist, das es einfach etwas mit der Speicherreservierung für die Komponenten zu tun hat, aber ich habe bisher noch keine Lösung für dieses Problem gefunden.

Dieser Fehler tritt aber auch auf, und das ist ganz einfach zum testen, wenn Ihr:
Eine neue Anwendung in Delphi erzeugt und gleich im Startformular so ca. 155 TListBox-Komponenten zum Entwurfszeitpunkt anlegt, dann bringt Delphi genau die gleiche Meldung!

Hinweis: :!:
-----------
Ich habe die gleiche Applikation auch mal unter Windows 2000 compilieren und starten lassen. Dort tritt dieser Fehler NICHT auf!
Vielleicht könnte es auch nur eine Einstellungssache des Projektes sein?

Über Tips, Vorschläge oder ähnliche Anregungen wäre ich sehr dankbar! :D
derDoc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 623

Win Vista Prof
D2007 Prof
BeitragVerfasst: So 09.03.03 17:29 
Also das was du beschreibst ist ganz eindeutig die Speicherreservierung. Erzeugst du deine ListBoxen alle in der selben Variablen oder benutzt du verschiedene?

_________________
MfG derDoc
There are only 10 types of people: those who understand binary and those who don't.
MSCH
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1448
Erhaltene Danke: 3

W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
BeitragVerfasst: So 09.03.03 17:30 
Hi,
ohne jetzt das auzuproben wird ich vermuten, dass hier die Speicherverwaltung abprotzt. W2K hat ja im Gegensatz zu den W9x Pedants eine völlig andere Speichelverwaltung.

Aber ich komm echt ins Grübeln, welcher User brauch 155 TListboxen? Ist das ein Anti-Stress-Programm ? :eyecrazy:

Grüße
MSCH
jbChrissi Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: So 09.03.03 17:52 
Vielen Dank mal für die schnellen Reaktionen!

Also erstens: :D
Ich erzeuge diese TListBoxen alle in einer For-Schliefe, in der immer der gleichen Variable LB_MB vom Typ TListBox die neue Instanz der TListBox zugewiesen wird.

ausblenden Quelltext
1:
LB_MP:=TListBox.Create(SB_MP);					


Zweitens: :D
Nein, das ist durchaus kein Stressprogramm.
Als Hintergrundinformation: Es handelt sich hierbei um eine Dienstplanzuordnung, für einen bestimmten Zeitraum. Dort habe ich dann eine "tabellarische" Darstellung in folgender Form:


_________________Tag 1______Tag 2_______Tag 3 .....

Mitarbeiter a____[TListBox]___[TListBox]___[TListBox]


Mitarbeiter b____[TListBox]___[TListBox]___[TListBox]


Mitarbeiter c____[TListBox]___[TListBox]___[TListBox]

....

Ich benötige diese Darstellung, weil ein Mitarbeiter an einem bestimmten Tag mehrere Aufgaben in einer chronologischen Reihenfolge abzuarbeiten hat. Da kann es dann schnell mal vorkommen, dass ich 15 Mitarbeiter habe und 10 Tage als Zeitraum definiere!!!!!
Mir ist bisher noch keine bessere Darstellungsform eingefallen, zumal ich damit sehr schön auch bestimmte Einträge rauslöschen und einem anderen Mitarbeiter zuordnen kann.
Es läuft ja unter Windows 2000, aber ich fände es sehr schade, wenn es keine anderen Möglichkeiten zur Lösung dieses Problems gibt.
derDoc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 623

Win Vista Prof
D2007 Prof
BeitragVerfasst: So 09.03.03 18:01 
Versuch es mal mit
ausblenden Quelltext
1:
LB_MP: array of TListBox					

und erstelle darin mal deine ListBoxen. Ich glaube Win2k ist mit der Speicherreservierung besser als Win9x und deshalb läuft es darauf. Aber mit einem Array müsste es auch unter 9x-Systemen laufen.

_________________
MfG derDoc
There are only 10 types of people: those who understand binary and those who don't.
MSCH
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1448
Erhaltene Danke: 3

W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
BeitragVerfasst: So 09.03.03 18:37 
Hi, der Trick könnte sein, nicht für jeden Mitarbeiter eine Liste (ist viel zu Aufwendig), sondern einfach EINE!. Der Nutzer kann eh nur eine Focussieren, also Verschiebt man nur die eine Liste an den entsprechenden ort und füllt Sie dementsprechend. Die Daten zu den einzelnen Mitarbeitern sichert man in einen Array of [] oder Record.

Grüße
MSCH
jbChrissi Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mo 10.03.03 11:37 
Vielen Dank für die Tips,

werde diese demnächst ausprobieren. Vielleicht klappts ja!

Jedenfall danke für eure Anregungen :)