Absturz beim Bewegen eines Forms
-
- Beiträge: 115
- Registriert: Sa 17. Mär 2007, 10:53
Absturz beim Bewegen eines Forms
Hallo,
ich hab zwar schon mit den Suchbegriffen "Absturz und Form" usw. nach meinem Problem gesucht. Ich finde aber nichts.
Deswegen meine Frage:
Ich habe Lazarus neu intalliert (Version 1.0.14). Dann ging ich daran einige Sachen dazuzuinstallieren (Zeos zum Beispiel oder LazReport).
Immer wenn ich mit der Maus das Form Fenster wegschieben will, um z. b. das Meldungsfenster besser im Blick zu haben stürzt die IDE ab.
IDE Absturz und nach Fehler suchen. Dann wieder Neustart von Lazarus und wieder das Gleiche. Sowie ich irgendwas verschiebe oder ein anderes Fenster anklicke, stürzt Lazarus ab. Das Abstürzen passiert auch, wenn ich ein "normales Projekt" bearbeite. Immer, wenn Lazarus werkelt und ich irgendwo rumschiebe oder rumklicke, stürzt es ab.
Meine Systemangaben:
Windows XP
Arbeitsspeicher 2GB
32 Bit
Hat jemand eine Idee, woran das liegen könnte?
Danke.
Josef
ich hab zwar schon mit den Suchbegriffen "Absturz und Form" usw. nach meinem Problem gesucht. Ich finde aber nichts.
Deswegen meine Frage:
Ich habe Lazarus neu intalliert (Version 1.0.14). Dann ging ich daran einige Sachen dazuzuinstallieren (Zeos zum Beispiel oder LazReport).
Immer wenn ich mit der Maus das Form Fenster wegschieben will, um z. b. das Meldungsfenster besser im Blick zu haben stürzt die IDE ab.
IDE Absturz und nach Fehler suchen. Dann wieder Neustart von Lazarus und wieder das Gleiche. Sowie ich irgendwas verschiebe oder ein anderes Fenster anklicke, stürzt Lazarus ab. Das Abstürzen passiert auch, wenn ich ein "normales Projekt" bearbeite. Immer, wenn Lazarus werkelt und ich irgendwo rumschiebe oder rumklicke, stürzt es ab.
Meine Systemangaben:
Windows XP
Arbeitsspeicher 2GB
32 Bit
Hat jemand eine Idee, woran das liegen könnte?
Danke.
Josef
Re: Absturz beim Bewegen eines Forms
Zur Fehlerursachensuche sind evtl. noch folgende Fragen interessant:
- Welche Version hattest Du zuvor benutzt und lief diese ohne Probleme?
- Hast Du diese Installation zuvor komplett entfernt oder 1.0.14 darüber installiert?
- Hast Du Lazarus 1.0.14 nochmal ohne die zusätzlichen Packages getestet und läuft dieses da stabil?
- Welche Version hattest Du zuvor benutzt und lief diese ohne Probleme?
- Hast Du diese Installation zuvor komplett entfernt oder 1.0.14 darüber installiert?
- Hast Du Lazarus 1.0.14 nochmal ohne die zusätzlichen Packages getestet und läuft dieses da stabil?
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
-
- Beiträge: 115
- Registriert: Sa 17. Mär 2007, 10:53
Re: Absturz beim Bewegen eines Forms
Hallo,
ich muß dazusagen, daß ich normalerweise Delphi benutze. Ich schaue ab und an nach Lazarus, um die Entwicklungsfortschritte zu beobachten.
Bei der Lazarus Vesion 12 dachte ich, naja, die kriegen diese Abstürze schon in den Griff. Aber bei 1.0.14 ist es immer noch so.
Dabei möchte ich dringenst umsteigen. Lazarus hat sich gemausert ohne Ende. Wenn ich da an meine ersten Tests denke. Das sind Welten. Angefangen von der Installation von packages bis zum Designer bei lazreport usw.
Vor Allem die Geschwindigkeit beim Aufbau eines Treeviews ist phantastisch. Bei Delphi brauche ich für 100 Items 15 Sekunden.
Mit Lazarus werden 1000 Knoten und dazu je Knoten 50 Subknoten in einem Wimpernschlag aufgebaut.
Nur diese blöden Abstürze, das ist blöd. Solltest mal nicht gespeichert haben, ist die ganze Tipperei umsonst gewesen.
Bei der Neuintallation kam die Abfrage, ob das alte Lazarus entfernt werden soll. Ich hab da mit ja geantwortet.
Nach den ersten Abstürzen hab ich nochmal neu intalliert und vorher unter appdata>local>lazarus alles gelöscht.
Half aber auch nicht.
Die beiden Packages, die ich dazu installiert habe (LazReport und Zeos) können es ja kaum sein. Denn, wie gesagt, bei 1.0.12, stürzte Lazarus auch ab.
Mehr kann ich jetzt auch nicht zur genaueren Eingrenzung sagen.
Danke.
Josef
Ich hatte vorher 1.0.12, da war es genauso.Michl hat geschrieben:Zur Fehlerursachensuche sind evtl. noch folgende Fragen interessant:
- Welche Version hattest Du zuvor benutzt und lief diese ohne Probleme?
- Hast Du diese Installation zuvor komplett entfernt oder 1.0.14 darüber installiert?
- Hast Du Lazarus 1.0.14 nochmal ohne die zusätzlichen Packages getestet und läuft dieses da stabil?
ich muß dazusagen, daß ich normalerweise Delphi benutze. Ich schaue ab und an nach Lazarus, um die Entwicklungsfortschritte zu beobachten.
Bei der Lazarus Vesion 12 dachte ich, naja, die kriegen diese Abstürze schon in den Griff. Aber bei 1.0.14 ist es immer noch so.
Dabei möchte ich dringenst umsteigen. Lazarus hat sich gemausert ohne Ende. Wenn ich da an meine ersten Tests denke. Das sind Welten. Angefangen von der Installation von packages bis zum Designer bei lazreport usw.
Vor Allem die Geschwindigkeit beim Aufbau eines Treeviews ist phantastisch. Bei Delphi brauche ich für 100 Items 15 Sekunden.
Mit Lazarus werden 1000 Knoten und dazu je Knoten 50 Subknoten in einem Wimpernschlag aufgebaut.
Nur diese blöden Abstürze, das ist blöd. Solltest mal nicht gespeichert haben, ist die ganze Tipperei umsonst gewesen.
Bei der Neuintallation kam die Abfrage, ob das alte Lazarus entfernt werden soll. Ich hab da mit ja geantwortet.
Nach den ersten Abstürzen hab ich nochmal neu intalliert und vorher unter appdata>local>lazarus alles gelöscht.
Half aber auch nicht.
Die beiden Packages, die ich dazu installiert habe (LazReport und Zeos) können es ja kaum sein. Denn, wie gesagt, bei 1.0.12, stürzte Lazarus auch ab.
Mehr kann ich jetzt auch nicht zur genaueren Eingrenzung sagen.
Danke.
Josef
Re: Absturz beim Bewegen eines Forms
Leider kann ich Dir mit diesen Informationen nicht wirklich weiterhelfen. Als es bei mir Probleme gab, lag das immer an verkorksten Installationen (Verzeichnis unglücklich gewählt oder Restdaten einer alten Installation). Evtl. gibt es ein Konflikt mit einer anderen Software?!
Ich selber nutze Win7. Auch wenn Dir das nicht hilft, auf Win7 (zumindest, was ich so treibe) ist Lazarus so stabil, dass ich mich gar nicht (mehr) daran erinnern kann, dass mir die IDE gecrasht ist.
Habe auch mal im Netz geschaut, das Problem (unter Win XP) scheint recht selten zu sein.
Versuchen könntest Du noch Lazarus zu löschen, dann per Hand nach Überbleibseln, evtl. auch im Registry, zu suchen und diese zu entfernen und in einem neuen Verzeichnis (z.B. C:\Lazarus oder C:\Laz - am besten, in eins, was es bis dato noch nicht gab), zu installieren. Weiter könntest Du evtl. noch Lazarus-Trunc (mit FPC-Trunc) probieren zu installieren. Weiss aber nicht, ob Dir irgend was davon weiterhilft.
Falls Dir sonst keiner weiter helfen kann, könntest Du noch im englischen Forum nachfragen oder einen Bugreport erstellen - da wäre es aber eigentlich günstig, wenn Du sagen könntest, welche die letzte ordentlich funktionierende Version war.
Ich selber nutze Win7. Auch wenn Dir das nicht hilft, auf Win7 (zumindest, was ich so treibe) ist Lazarus so stabil, dass ich mich gar nicht (mehr) daran erinnern kann, dass mir die IDE gecrasht ist.
Habe auch mal im Netz geschaut, das Problem (unter Win XP) scheint recht selten zu sein.
Versuchen könntest Du noch Lazarus zu löschen, dann per Hand nach Überbleibseln, evtl. auch im Registry, zu suchen und diese zu entfernen und in einem neuen Verzeichnis (z.B. C:\Lazarus oder C:\Laz - am besten, in eins, was es bis dato noch nicht gab), zu installieren. Weiter könntest Du evtl. noch Lazarus-Trunc (mit FPC-Trunc) probieren zu installieren. Weiss aber nicht, ob Dir irgend was davon weiterhilft.
Falls Dir sonst keiner weiter helfen kann, könntest Du noch im englischen Forum nachfragen oder einen Bugreport erstellen - da wäre es aber eigentlich günstig, wenn Du sagen könntest, welche die letzte ordentlich funktionierende Version war.
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
Re: Absturz beim Bewegen eines Forms
Benutzt du Lazarus im Original oder hast du Zusatzpackages installiert? Wenn ja, welche? Ich kann mir nur vorstellen, dass du ein fehlerhaftes Package installiert hast. Ansonsten läuft Lazarus einwandfrei, auch unter XP.
Ich will in einem Lazarus-Forum Delphi nicht schön reden, aber dass Delphi's TreeView 100 Items in 15 Sekunden aufbaut, entspricht nicht meiner Erfahrung, auch als ich noch einen Pentium-II hatte nicht. Benutzt du TreeView.Items.BeginUpdate/EndUpdate vor und nach dem Füllen des Treeview, um das Neuzeichnen nach jeder Änderung zu unterbinden (http://users.iafrica.com/d/da/dart/Delp ... _eg06.html)?
Ich will in einem Lazarus-Forum Delphi nicht schön reden, aber dass Delphi's TreeView 100 Items in 15 Sekunden aufbaut, entspricht nicht meiner Erfahrung, auch als ich noch einen Pentium-II hatte nicht. Benutzt du TreeView.Items.BeginUpdate/EndUpdate vor und nach dem Füllen des Treeview, um das Neuzeichnen nach jeder Änderung zu unterbinden (http://users.iafrica.com/d/da/dart/Delp ... _eg06.html)?
-
- Beiträge: 115
- Registriert: Sa 17. Mär 2007, 10:53
Re: Absturz beim Bewegen eines Forms
Hallo,
Was soll ich sagen: Es stürzt nichts mehr ab. Weder beim Bewegen von Formularen noch beim Kopieren und Einfügen von Komponenten von einem in ein anderes Formular.
Vielleicht sollte ich noch erwähnen, daß in der Registry etliche Hinweise auf lazarus.exe und old-lazarus.exe drin waren. Vielleicht lag es an diesen beiden Lazarus Varianten in der Registry.
Ist aber jetzt egal.
So wie es ausschaut, funktioniert zumindest mal die Grundversion.
danke.
Ciao
Josef
Ich hab jetzt alles, was irgendwie lazarus auf meiner Festplatte und in der Registry gelöscht. Dann den Rechner neu gestartet und dann Lazarus wieder installiert. Zur Sicherheit auch ein anders lautender Verzeichnisname.Michl hat geschrieben:Leider kann ich Dir mit diesen Informationen nicht wirklich weiterhelfen. Als es bei mir Probleme gab, lag das immer an verkorksten Installationen (Verzeichnis unglücklich gewählt oder Restdaten einer alten Installation). Evtl. gibt es ein Konflikt mit einer anderen Software?!
Ich selber nutze Win7. Auch wenn Dir das nicht hilft, auf Win7 (zumindest, was ich so treibe) ist Lazarus so stabil, dass ich mich gar nicht (mehr) daran erinnern kann, dass mir die IDE gecrasht ist.
Habe auch mal im Netz geschaut, das Problem (unter Win XP) scheint recht selten zu sein.
Versuchen könntest Du noch Lazarus zu löschen, dann per Hand nach Überbleibseln, evtl. auch im Registry, zu suchen und diese zu entfernen und in einem neuen Verzeichnis (z.B. C:\Lazarus oder C:\Laz - am besten, in eins, was es bis dato noch nicht gab), zu installieren. Weiter könntest Du evtl. noch Lazarus-Trunc (mit FPC-Trunc) probieren zu installieren. Weiss aber nicht, ob Dir irgend was davon weiterhilft.
Falls Dir sonst keiner weiter helfen kann, könntest Du noch im englischen Forum nachfragen oder einen Bugreport erstellen - da wäre es aber eigentlich günstig, wenn Du sagen könntest, welche die letzte ordentlich funktionierende Version war.
Was soll ich sagen: Es stürzt nichts mehr ab. Weder beim Bewegen von Formularen noch beim Kopieren und Einfügen von Komponenten von einem in ein anderes Formular.
Vielleicht sollte ich noch erwähnen, daß in der Registry etliche Hinweise auf lazarus.exe und old-lazarus.exe drin waren. Vielleicht lag es an diesen beiden Lazarus Varianten in der Registry.
Ist aber jetzt egal.
So wie es ausschaut, funktioniert zumindest mal die Grundversion.
danke.
Ciao
Josef
-
- Beiträge: 115
- Registriert: Sa 17. Mär 2007, 10:53
Re: Absturz beim Bewegen eines Forms
Meine "Fehlerbehebung" hab ich in der vorigen Antwort geschildert.wp_xyz hat geschrieben:Benutzt du Lazarus im Original oder hast du Zusatzpackages installiert? Wenn ja, welche? Ich kann mir nur vorstellen, dass du ein fehlerhaftes Package installiert hast. Ansonsten läuft Lazarus einwandfrei, auch unter XP.
Ich will in einem Lazarus-Forum Delphi nicht schön reden, aber dass Delphi's TreeView 100 Items in 15 Sekunden aufbaut, entspricht nicht meiner Erfahrung, auch als ich noch einen Pentium-II hatte nicht. Benutzt du TreeView.Items.BeginUpdate/EndUpdate vor und nach dem Füllen des Treeview, um das Neuzeichnen nach jeder Änderung zu unterbinden (http://users.iafrica.com/d/da/dart/Delp ... _eg06.html)?
Noch kurz zum TreeView.
Ich schätze mal, die sehr unterschiedlich langen Aufbauzeiten kommen aus den Datenbankverknüpfungen.
das treeView wird mit Datenbankeinträgen gefüllt. In Delphi 6 muß ich z. b. bei UTF8 DB's, wie SQLite, alles bei GetText und SetText konvertieren. Bei den String's im Treeview nochmals.
Ich schätz mal, diese Konvertierei ist das Übel.
Bei Lazarus fällt das Umwandeln weg. Da werden die Original-DB-Tabellen aus SQLite blitzsauber ohne Umwandlung in Grid's, usw. angezeigt.
Ich probier's aber dann nochmal aus, wie groß die Aufbauzeitunterschiede sind. Das Wichtigst war erst Mal, daß Lazarus überhaupt vernünftig läuft.
Danke
Ciao
Josef
-
- Beiträge: 115
- Registriert: Sa 17. Mär 2007, 10:53
Re: Absturz beim Bewegen eines Forms
Hallo,
der Absturz scheint durch die Installation von "größeren" Packages verursacht zu werden.
Ich hab Lazreport installiert und während des Installationsprozesses überall hingeklickt. die verschiedenen Fenster größer und kleiner gezogen.
War kein Problem.
dann hab ich ZEOS (7.1.3) installiert. auch während dieses Installationsvorganges machte ich wieder das Gleiche (Fenster größer gezogen, in das Nachrichtenfenster geklickt, usw.).
Da wurde dann der Absturz der IDE verursacht.
Nach Neustart hab ich ZEOS wieder installiert. Dieses Mal klickte ich nur auf Kompilieren und dann auf Installieren. ansonsten blick der Mauszeiger unverändert. Es verlief alles reibungslos.
Bis jetzt keine weiteren Abstürze mehr.
ciao
Josef
der Absturz scheint durch die Installation von "größeren" Packages verursacht zu werden.
Ich hab Lazreport installiert und während des Installationsprozesses überall hingeklickt. die verschiedenen Fenster größer und kleiner gezogen.
War kein Problem.
dann hab ich ZEOS (7.1.3) installiert. auch während dieses Installationsvorganges machte ich wieder das Gleiche (Fenster größer gezogen, in das Nachrichtenfenster geklickt, usw.).
Da wurde dann der Absturz der IDE verursacht.
Nach Neustart hab ich ZEOS wieder installiert. Dieses Mal klickte ich nur auf Kompilieren und dann auf Installieren. ansonsten blick der Mauszeiger unverändert. Es verlief alles reibungslos.
Bis jetzt keine weiteren Abstürze mehr.
ciao
Josef
-
- Beiträge: 115
- Registriert: Sa 17. Mär 2007, 10:53
Re: Absturz beim Bewegen eines Forms
Hallo,
es scheint eindeutig Zeos 7.1.3 zu sein.
sobald einer Connection Kompo auf einer From ist, man diese mit einer Dankenbank verbindet und dann die form größer oder kleiner zieht oder bewegt, dann stürzt Lazarus ab.
Ich versuchs mal mit einer anderen, älteren Version.
ciao
Josef
es scheint eindeutig Zeos 7.1.3 zu sein.
sobald einer Connection Kompo auf einer From ist, man diese mit einer Dankenbank verbindet und dann die form größer oder kleiner zieht oder bewegt, dann stürzt Lazarus ab.
Ich versuchs mal mit einer anderen, älteren Version.
ciao
Josef
Re: Absturz beim Bewegen eines Forms
Ich habe div. Versionen von Lazarus auf etlichen XPs, Win7(64) und MACs laufen, alle mit Zeos. Nirgendwo tauchte dein Problem auf. Allerdings hab ich 1.0.14 mit Zeos 7.1.3 (noch) nicht laufen, wohl aber etliche SVN 1.1 ( 1.2 RC macht bei mir leider Probs) und bei Zeos sind leider die div. Versionen nicht ganz kompatibel.
Ich werde 1.0.14 und 7.1.3 mal installieren sobald ich etwas Luft hab.
Wenn du viele Pakete zusätzlich brauchst schau dir mal die CT Versionen an, die haben massig packages dabei, meist die neuesten Versionen und installieren (bei mir bisher) problemlos alles in einem Zug.
hde
Ich werde 1.0.14 und 7.1.3 mal installieren sobald ich etwas Luft hab.
Wenn du viele Pakete zusätzlich brauchst schau dir mal die CT Versionen an, die haben massig packages dabei, meist die neuesten Versionen und installieren (bei mir bisher) problemlos alles in einem Zug.
hde
Re: Absturz beim Bewegen eines Forms
Ich nehme an, die hast keine Zweitinstallation von Lazarus. Dann steht die Konfiguration von Lazus im Ordner c:\Users\<username>\AppData\Local\Lazarus (ansonsten in dem, der im Kommandozeilenparameter primary_config_path, oder pcp, angegeben ist oder in der Datei Lazarus.cfg steht). In ähnlich gelagerten Fällen hat mir geholfen, diesen Ordner zu löschen oder umzubenennen (für spätere Wiederverwendung). Damit verschwinden auch alle installierten Packages. Zusätzlich solltest du auch noch den Order lib unter (ZEOS)\packages\lazarus löschen, dort stehen die übersetzten ppu's aus der aktuellen Installation. (wobei "(ZEOS)" für das Verzeichnis steht, in das du die ZEOS-Bibliothek installiert hast).
Nochmals: auch ich habe ZEOS in Lazarus installiert, und das läuft einwandfrei. Dein Problem muss zu lösen sein.
Nochmals: auch ich habe ZEOS in Lazarus installiert, und das läuft einwandfrei. Dein Problem muss zu lösen sein.
-
- Beiträge: 115
- Registriert: Sa 17. Mär 2007, 10:53
Re: Absturz beim Bewegen eines Forms
Hallo,
Meine Abstürze: So einfach, wie ich mir eine Problemlösung vorgestellt hatte, ist es nun doch nicht. Ich bracuhe ewig um auf einer form halbwegs was zustande zu bringen. Komisch ist nur, daß es nur zu Abstürzen kommt, wenn ich an den Lazarusfenstern was mache (also den Objektinspektor breiter ziehe oder Komponenten von einer Form kopiere und in eine andere einfüge oder wenn ein Propertyeditor offen ist und ich den verschieben will und sowas. Wenn ich in andere Anwendungen wechsle, also z. b. in mein offenes EMailprogramm, passiert nichts.
Wie gesagt, immer nur, wenn ich was an den Lazarusfenstern mache. Ob das wirklich an Windows mit seinen Fensterhandlen liegt oder nicht doch eher ein Lazarusproblem ist, kann ich einfach nicht beurteilen. Da es nur in Lazarus passiert, schätz ich einfach mal, daß doch Lazarus der Auslöser ist.
Noch schnell zum Treeview:
eigentlich wollte ich zu Vergleichszwecken auf die Schnelle zwei Anwendungen machen (einmal Delphi, einmal Lazarus). Nur jeweils eine Form mit Zugriff auf die gleichen Tabellen.
Aber das ist leichter gesagt als getan. Bis ich in Lazarus einige ZEOS Querys und so auf dem Form habe und die entsprechenden Abfragen und Verknüpfungen setze wird es späte Nacht. Ich bin mehr am Aufpassen, daß ich nach edem zweiten Tastenschlag speiche als das ich sonst vorwärts komme.
Das treeview füllen ist eigentlich nix weltbewegendes:
Mit dieser ersten Prozedure fülle ich das treeview nur mit dem Hauptknoten (weils eben solange dauert)
Mit der zweiten Prozedure füge ich dann die Subknoten dazu, wenn der jeweilige Hauptknoten selektiert wird.
so ungefähr:
Wie ich sagte, schon alle das Füllen des ersten Knotens dauert mit rund 100 Datensätzen schon an die 15 Sekunden.
Wie hier so schreibe fällt mir ein, daß ich im Change Ereignis drin habe, daß wenn selektiert wird, soll mit locate die Tabelle auf den Datensatz gesetzt werden, deren ID ich in den Idx Indexen beim Füllen speichere.
Vielleicht wird im OnChange mit jedem Füllen des Knotens, also mit jedem While-Durchlauf auch das selected = true geprüft und quasi mit jedem Durchlauf das locate gestartet.
Muß mal einen Breakpoint im OnChange setzen, ob der mit jedem While not eof.... next in If ... selected = true reinspringt und damit jedes Mal locate aufruft.
Wenn mir nur das ganze Zeugs nicht dauert abstürzen würde.
Ciao
Josef
Echt gut hier in diesem Forum. Keiner putzt einen runter, so nach dem Motto: "du stellst Dich nur zu blöd an!"wp_xyz hat geschrieben:Ich nehme an, die hast keine Zweitinstallation von Lazarus. Dann steht die Konfiguration von Lazus im Ordner c:\Users\<username>\AppData\Local\Lazarus (ansonsten in dem, der im Kommandozeilenparameter primary_config_path, oder pcp, angegeben ist oder in der Datei Lazarus.cfg steht). In ähnlich gelagerten Fällen hat mir geholfen, diesen Ordner zu löschen oder umzubenennen (für spätere Wiederverwendung). Damit verschwinden auch alle installierten Packages. Zusätzlich solltest du auch noch den Order lib unter (ZEOS)\packages\lazarus löschen, dort stehen die übersetzten ppu's aus der aktuellen Installation. (wobei "(ZEOS)" für das Verzeichnis steht, in das du die ZEOS-Bibliothek installiert hast).
Nochmals: auch ich habe ZEOS in Lazarus installiert, und das läuft einwandfrei. Dein Problem muss zu lösen sein.
Danke, werd ich mir merken. Aber da ich Lazarus gestern sowieso öfters neu installierte, war das dann kein Problem mehr. Das mit den AppData Dateien wußte ich und hab sie auch gelöscht.wp_xyz hat geschrieben:Zusätzlich solltest du auch noch den Order lib unter (ZEOS)\packages\lazarus
Meine Abstürze: So einfach, wie ich mir eine Problemlösung vorgestellt hatte, ist es nun doch nicht. Ich bracuhe ewig um auf einer form halbwegs was zustande zu bringen. Komisch ist nur, daß es nur zu Abstürzen kommt, wenn ich an den Lazarusfenstern was mache (also den Objektinspektor breiter ziehe oder Komponenten von einer Form kopiere und in eine andere einfüge oder wenn ein Propertyeditor offen ist und ich den verschieben will und sowas. Wenn ich in andere Anwendungen wechsle, also z. b. in mein offenes EMailprogramm, passiert nichts.
Wie gesagt, immer nur, wenn ich was an den Lazarusfenstern mache. Ob das wirklich an Windows mit seinen Fensterhandlen liegt oder nicht doch eher ein Lazarusproblem ist, kann ich einfach nicht beurteilen. Da es nur in Lazarus passiert, schätz ich einfach mal, daß doch Lazarus der Auslöser ist.
Noch schnell zum Treeview:
eigentlich wollte ich zu Vergleichszwecken auf die Schnelle zwei Anwendungen machen (einmal Delphi, einmal Lazarus). Nur jeweils eine Form mit Zugriff auf die gleichen Tabellen.
Aber das ist leichter gesagt als getan. Bis ich in Lazarus einige ZEOS Querys und so auf dem Form habe und die entsprechenden Abfragen und Verknüpfungen setze wird es späte Nacht. Ich bin mehr am Aufpassen, daß ich nach edem zweiten Tastenschlag speiche als das ich sonst vorwärts komme.
Das treeview füllen ist eigentlich nix weltbewegendes:
Mit dieser ersten Prozedure fülle ich das treeview nur mit dem Hauptknoten (weils eben solange dauert)
Mit der zweiten Prozedure füge ich dann die Subknoten dazu, wenn der jeweilige Hauptknoten selektiert wird.
Code: Alles auswählen
procedure Tauftraguebersicht.fillTVAufDetail;
begin
try
try
sPanel4.Visible := True;
TVAufDetail.Visible := False;
screen.Cursor := crHourGlass;
TVAufDetail.Items.Clear;
TVAufDetail.Update;
TVAufDetail.Items.BeginUpdate;
with TVAufDetail.Items do
begin
DMbeeBook.ZQAuftragOrders.First;
while not DMbeeBook.ZQAuftragOrders.Eof do
begin
New(OrdIdx);
OrdIdx^[1] := '-';
//Der Anfangsbuchstabe, wie T, M oder N für orderstype, ordersmessage, ordersnotice
OrdIdx^[2] := DMbeeBook.ZQAuftragOrdersord_id.AsString;
// die ID von orders
OrdIdx^[3] := '-'; // die id von orderstype
OrdIdx^[4] := '-'; // die id von orderstypearticle
OrdIdx^[5] := '-'; // die id von ordersmessage
OrdIdx^[6] := '-'; // die id von ordersnotice
nodeadress := AddObject(nil,
CharsetConversion(FormatDateTime('dd.mm.yyyy',
DMbeeBook.ZQAuftragOrders.FieldByName('ord_datum').AsVariant) +
': '
+
DMbeeBook.ZQAuftragOrders.FieldByName('ord_firma').Value + ' ' +
DMbeeBook.ZQAuftragOrders.FieldByName('ord_sel_anrede').Value + ' '
+
DMbeeBook.ZQAuftragOrders.FieldByName('ord_vorname').Value + ' ' +
(DMbeeBook.ZQAuftragOrders.FieldByName('ord_nachname').Value) + ' '
+
DMbeeBook.ZQAuftragOrders.FieldByName('ord_strasse').Value + ' ' +
DMbeeBook.ZQAuftragOrders.FieldByName('ord_plz').Value + ' ' +
DMbeeBook.ZQAuftragOrders.FieldByName('ord_ort').Value + ' ' +
DMbeeBook.ZQAuftragOrders.FieldByName('ord_land').Value, UTF_8,
CP1252),
OrdIdx);
DMbeeBook.ZQAuftragOrders.Next;
end;
end;
finally
TVAufDetail.Items.EndUpdate;
TVAufDetail.Visible := True;
if TVAufDetail.Items.Count > 0 then
begin
TVAufDetail.SetFocus;
if nodeSelected <> nil then
begin
RestoreTree(TVAufDetail);
end
else
begin
TVAufDetail.Items.Item[0].Focused := true;
TVAufDetail.Items.Item[0].Selected := true;
TVAufDetail.Items.Item[0].Expand(true);
end;
end;
sPanel4.Visible := False;
screen.Cursor := crDefault;
end;
except
on E: Exception do
begin
MessageDlg('Fehler 200120141833: ' + E.ClassName + ', Meldung: ' +
e.Message,
mtError, [mbOK], 0);
end;
end;
end;
Code: Alles auswählen
procedure Tauftraguebersicht.fillSubTVAufDetail;
begin
with TVAufDetail.Items do
begin
if (nodeSelected.Level = 0) and (nodeSelected.HasChildren = False) then
begin
nodesubheaderschrift := AddChildObject(nodeSelected, 'Schriftverkehr',
OrdIdx);
DMbeeBook.ZQAuftragOrdersType.First;
while not DMbeeBook.ZQAuftragOrdersType.Eof do
begin
New(OrdTypeIdx);
OrdTypeIdx^[1] := 'T';
//Der Anfangsbuchstabe, wie T, M oder N für orderstype, ordersmessage, ordersnotice
OrdTypeIdx^[2] := DMbeeBook.ZQAuftragOrdersord_id.AsString;
// die ID von orders
OrdTypeIdx^[3] := DMbeeBook.ZQAuftragOrdersTypetype_id.AsString;
// die id von orderstype
OrdTypeIdx^[4] := '-'; // die id von orderstypearticle
OrdTypeIdx^[5] := '-'; // die id von ordersmessage
OrdTypeIdx^[6] := '-'; // die id von ordersnotice
nodesubschrift := AddChildObject(nodesubheaderschrift,
CharsetConversion(DMbeeBook.ZQAuftragOrdersTypetype_art.AsString +
' vom: ' +
DMbeeBook.ZQAuftragOrdersTypetype_datum.AsString, UTF_8, CP1252),
OrdTypeIdx);
OrdTypeIdx^[3] := DMbeeBook.ZQAuftragOrdersTypetype_id.AsString;
nodesubarticlehead := AddChildObject(nodesubschrift, 'Artikel',
OrdTypeIdx);
DMbeeBook.ZQAuftragOrdersTypeArtikel.First;
while not DMbeeBook.ZQAuftragOrdersTypeArtikel.Eof do
begin
New(OrdTypeArticleIdx);
OrdTypeArticleIdx^[1] := '-';
//Der Anfangsbuchstabe, wie T, M oder N für orderstype, ordersmessage, ordersnotice
OrdTypeArticleIdx^[2] := DMbeeBook.ZQAuftragOrdersord_id.AsString;
// die ID von orders
OrdTypeArticleIdx^[3] :=
DMbeeBook.ZQAuftragOrdersTypetype_id.AsString;
; // die id von orderstype
OrdTypeArticleIdx^[4] :=
DMbeeBook.ZQAuftragOrdersTypeArtikelart_id.AsString;
; // die id von orderstypearticle
OrdTypeArticleIdx^[5] := '-'; // die id von ordersmessage
OrdTypeArticleIdx^[6] := '-'; // die id von ordersnotice
//New(OrdTypeArticleIdx);
//OrdTypeArticleIdx^ := DMbeeBook.ZQAuftragOrdersTypeArtikelart_id.AsString;
nodesubarticle := AddChildObject(nodesubarticlehead,
CharsetConversion(DMbeeBook.ZQAuftragOrdersTypeArtikelart_anzahl.AsString + ' ' +
DMbeeBook.ZQAuftragOrdersTypeArtikelart_einheit.AsString + ' ' +
DMbeeBook.ZQAuftragOrdersTypeArtikelart_bezeichnung.AsString + ', '
+
DMbeeBook.ZQAuftragOrdersTypeArtikelart_bezeichnungzusatz.AsString,
UTF_8, CP1252),
OrdTypeArticleIdx);
DMbeeBook.ZQAuftragOrdersTypeArtikel.Next;
end; // typearticle
DMbeeBook.ZQAuftragOrdersType.Next;
end; //while orderstype;
nodesubmessagehead := AddChildObject(nodeSelected, 'Mitteilungen',
OrdIdx);
DMbeeBook.ZQAuftragOrdersMessage.First;
while not DMbeeBook.ZQAuftragOrdersMessage.Eof do
begin
New(OrdmessageIdx);
OrdMessageIdx^[1] := 'M';
//Der Anfangsbuchstabe, wie T, M oder N für orderstype, ordersmessage, ordersnotice
OrdMessageIdx^[2] := DMbeeBook.ZQAuftragOrdersord_id.AsString;
// die ID von orders
OrdMessageIdx^[3] := '-'; // die id von orderstype
OrdMessageIdx^[4] := '-'; // die id von orderstypearticle
OrdMessageIdx^[5] := DMbeeBook.ZQAuftragOrdersMessagemes_id.AsString;
// die id von ordersmessage
OrdMessageIdx^[6] := '-'; // die id von ordersnotice
//New(OrdMessageIdx);
//OrdMessageIdx^ := 'M' + DMbeeBook.ZQAuftragOrdersMessagemes_id.AsString;
nodesubmessage := AddChildObject(nodesubmessagehead,
CharsetConversion(DMbeeBook.ZQAuftragOrdersMessagemes_header.AsString
+
' vom: ' +
DMbeeBook.ZQAuftragOrdersMessagemes_datum.AsString, UTF_8,
CP1252), OrdMessageIdx);
DMbeeBook.ZQAuftragOrdersMessage.Next;
end;
nodesubnoticehead := AddChildObject(nodeSelected, 'Notizen', OrdIdx);
DMbeeBook.ZQAuftragOrdersNotice.First;
while not DMbeeBook.ZQAuftragOrdersNotice.Eof do
begin
New(OrdNoticeIdx);
OrdNoticeIdx^[1] := 'N';
//Der Anfangsbuchstabe, wie T, M oder N für orderstype, ordersmessage, ordersnotice
OrdNoticeIdx^[2] := DMbeeBook.ZQAuftragOrdersord_id.AsString;
// die ID von orders
OrdNoticeIdx^[3] := '-'; // die id von orderstype
OrdNoticeIdx^[4] := '-'; // die id von orderstypearticle
OrdNoticeIdx^[5] := '-'; // die id von ordersmessage
OrdNoticeIdx^[6] := DMbeeBook.ZQAuftragOrdersNoticenot_id.AsString;
// die id von ordersnotice
nodesubnotice := AddChildObject(nodesubnoticehead,
CharsetConversion(DMbeeBook.ZQAuftragOrdersNoticenot_header.AsString +
' vom: ' +
DMbeeBook.ZQAuftragOrdersNoticenot_datum.AsString, UTF_8, CP1252),
OrdNoticeIdx);
DMbeeBook.ZQAuftragOrdersNotice.Next;
end;
end;
//TVAufDetail.Update;
end;
end;
Wie hier so schreibe fällt mir ein, daß ich im Change Ereignis drin habe, daß wenn selektiert wird, soll mit locate die Tabelle auf den Datensatz gesetzt werden, deren ID ich in den Idx Indexen beim Füllen speichere.
Vielleicht wird im OnChange mit jedem Füllen des Knotens, also mit jedem While-Durchlauf auch das selected = true geprüft und quasi mit jedem Durchlauf das locate gestartet.
Muß mal einen Breakpoint im OnChange setzen, ob der mit jedem While not eof.... next in If ... selected = true reinspringt und damit jedes Mal locate aufruft.
Wenn mir nur das ganze Zeugs nicht dauert abstürzen würde.
Ciao
Josef
-
- Beiträge: 115
- Registriert: Sa 17. Mär 2007, 10:53
Re: Absturz beim Bewegen eines Forms
Nachtrag:
Hab grad schnell in der Delphi Anwendung in Onchange beim treeview ein Breakpoint gesetzt.
Nein, es wird nicht nach jeder while-Schleife "Locate" aufgerufen. Es dauert einfach schlichtweg solange, ohne das ich wüßte was an den obigen Prozeduren so für eine "Verlangsamung sorgen könnte.
Ciao
Josef
Hab grad schnell in der Delphi Anwendung in Onchange beim treeview ein Breakpoint gesetzt.
Nein, es wird nicht nach jeder while-Schleife "Locate" aufgerufen. Es dauert einfach schlichtweg solange, ohne das ich wüßte was an den obigen Prozeduren so für eine "Verlangsamung sorgen könnte.
Ciao
Josef
Re: Absturz beim Bewegen eines Forms
Ich hätte mir zwar ein kleines Projekt gewünscht, das ich selbst mit dem Debugger abklopfen kann. Aber wie dem auch sei: Hast du andere Datenbank-Controls mit den Datasets verknüpft, die zum Aufbau des Trees durchlaufen werden? (Besonders "dankbar" wäre ein DBGrid...) Wenn ja dann solltest du das Durchlaufen der Datasets mit DisableControls/EnableControls umgeben, damit auch hier Neuzeichnen unterdrückt wird. Außerdem solltest du alle Event-Handler aushängen, die beim Durchlaufen unnötigerweise aufgerufen werden, z.B. Before/AfterScroll, aber das erwähnte OnChange erscheint mir auch so ein Kandidat. Weiterhin ist mir als Geschwindigkeitsbremse noch aufgefallen, dass du in den Schleifen mit "FieldByName" auf die Tabellenfelder zugreifst. Da dabei jedesmal alle Felder nach dem gewünschten durchsucht werden müssen, kann das bei großen Tabellen gehörig unnötige Zeit kosten. Besser ist, mit persistenten Feldern zu arbeiten, oder die Felder vor der Schleife zu suchen und in Variablen abzulegen.
Selbst falls diese Ideen helfen sollten, das Delphi-Programm zu beschleunigen, ist natürlich nicht klar, warum Lazarus so viel schneller ist...
Selbst falls diese Ideen helfen sollten, das Delphi-Programm zu beschleunigen, ist natürlich nicht klar, warum Lazarus so viel schneller ist...
Code: Alles auswählen
procedure Tauftraguebersicht.fillTVAufDetail;
// neu:
var
SavedAuftragOrdersAfterScroll: TDatasetNotifyEvent;
begin
try
// neu:
SavedAuftragOrdersAfterScroll := DMbeeBook.ZQAuftragOrders.AfterScroll;
DBbeeBook.ZQAuftragOrders.DisbleControls;
try
sPanel4.Visible := True;
TVAufDetail.Visible := False;
screen.Cursor := crHourGlass;
TVAufDetail.Items.Clear;
TVAufDetail.Update;
TVAufDetail.Items.BeginUpdate;
// neu:
DMbeeBook.ZQAuftragOrders.AfterScroll := nil;
with TVAufDetail.Items do
begin
// Hier weiter wie bei dir
end;
finally
// neu
DMbeeBook.ZQAuftragOrders.AfterScroll := AuftragOrdersAfterScroll;
DMbeeBook.ZQAuftragOrders.EnableControls;
TVAufDetail.Items.EndUpdate;
TVAufDetail.Visible := True;
if TVAufDetail.Items.Count > 0 then
begin
TVAufDetail.SetFocus;
if nodeSelected <> nil then
begin
RestoreTree(TVAufDetail);
end
else
begin
TVAufDetail.Items.Item[0].Focused := true;
TVAufDetail.Items.Item[0].Selected := true;
TVAufDetail.Items.Item[0].Expand(true);
end;
end;
sPanel4.Visible := False;
screen.Cursor := crDefault;
end;
except
on E: Exception do
begin
MessageDlg('Fehler 200120141833: ' + E.ClassName + ', Meldung: ' +
e.Message,
mtError, [mbOK], 0);
end;
end;
end;
-
- Beiträge: 115
- Registriert: Sa 17. Mär 2007, 10:53
Re: Absturz beim Bewegen eines Forms
Hallo,
Danke für Deine Mühe.
Hab grad in der Delphi Anwendung einen Timer gesetzt. Mit Deiner Verbesserung disable/enablecontrols kommt das Füllen jetzt auf 4 sec und etwas.
Das Ausklinken von Scroll brachte nichts. Ich hatte auch unter diesen Events nichts drin. Es ist auch kein Grid oder sowas dazwischen.
Einfach nur das Treeview und eben beim Activate das Füllen des ersten Knotens. Im Onchange hab ich ein paar Breakpoints gesetzt. Da passiert nichts während des Füllens. Also von 15 sec. auf 4 sec. ist schon mal was.
Aber eben noch immer zu langsam. Es sind ja nur an die 100 DS. Wenn das mal 1000 oder 10000 werden, dann kann ich das Treeview einfach nicht verwenden.
Warum mit Lazarus 10000 Knoten in einem Schlag erzeugt werden ist mir ein Rätsel. In Lazarus hab ich aber eine for-Schleife genommen (auch mit addchildobject und einem Index hindran. Nur halt einen fiktivem text, statt der Tabellenwerte), weil mir die Erzeugerei von ZEOS Komponenten zwecks Verbindung zur DB wegen der Abstürze mittlerweile doch auf den Geist gehen.
Ich will das Ganze aber trotz der Abstürze mit Lazarus realisieren. Es ist einfach schneller und diese UTF-8 Sachen kann ich vollkommen außer Acht lassen.
Nur es fehlen mir in Lazarus so liebgewordene Tools wie CNPack oder GExperts. In Lazarus hab ich z.b. nur eine Codevervollständigung, wenn ich erstmal den Komponentennamen richtig hinschreibe und einen Punkt setze. Auch Funktions- oder Prozedureinhalte werden mir als Orientierung nicht angezeigt. Mit Delphi wird mir vorwärts und rückwärts nach 2 oder 3 Buchstaben alles angezeigt, weiß es dazu zu verwenden gibt. Nach einer Klammer kommt, welche Paramter in welcher Form erwartet werden, usw.
Vielleicht kannst du mir mit so einem Tool für Lazarus auch weiterhelfen. Ich find nix Rechtes im Netz. CnPack gibt es nicht für Lazarus. Was Anderes finde ich nicht.
GExperts (Code neu formatieren z. b.) für Lazarus find ich auch nicht.
Wie gesagt, lauter so Kleinigkeiten, an die man sich sehr schnell gewöhnt.
Danke dir nochmals für Deine Hilfe.
Ciao
Josef
Danke für Deine Mühe.
Hab grad in der Delphi Anwendung einen Timer gesetzt. Mit Deiner Verbesserung disable/enablecontrols kommt das Füllen jetzt auf 4 sec und etwas.
Das Ausklinken von Scroll brachte nichts. Ich hatte auch unter diesen Events nichts drin. Es ist auch kein Grid oder sowas dazwischen.
Einfach nur das Treeview und eben beim Activate das Füllen des ersten Knotens. Im Onchange hab ich ein paar Breakpoints gesetzt. Da passiert nichts während des Füllens. Also von 15 sec. auf 4 sec. ist schon mal was.
Aber eben noch immer zu langsam. Es sind ja nur an die 100 DS. Wenn das mal 1000 oder 10000 werden, dann kann ich das Treeview einfach nicht verwenden.
Warum mit Lazarus 10000 Knoten in einem Schlag erzeugt werden ist mir ein Rätsel. In Lazarus hab ich aber eine for-Schleife genommen (auch mit addchildobject und einem Index hindran. Nur halt einen fiktivem text, statt der Tabellenwerte), weil mir die Erzeugerei von ZEOS Komponenten zwecks Verbindung zur DB wegen der Abstürze mittlerweile doch auf den Geist gehen.
Ich will das Ganze aber trotz der Abstürze mit Lazarus realisieren. Es ist einfach schneller und diese UTF-8 Sachen kann ich vollkommen außer Acht lassen.
Nur es fehlen mir in Lazarus so liebgewordene Tools wie CNPack oder GExperts. In Lazarus hab ich z.b. nur eine Codevervollständigung, wenn ich erstmal den Komponentennamen richtig hinschreibe und einen Punkt setze. Auch Funktions- oder Prozedureinhalte werden mir als Orientierung nicht angezeigt. Mit Delphi wird mir vorwärts und rückwärts nach 2 oder 3 Buchstaben alles angezeigt, weiß es dazu zu verwenden gibt. Nach einer Klammer kommt, welche Paramter in welcher Form erwartet werden, usw.
Vielleicht kannst du mir mit so einem Tool für Lazarus auch weiterhelfen. Ich find nix Rechtes im Netz. CnPack gibt es nicht für Lazarus. Was Anderes finde ich nicht.
GExperts (Code neu formatieren z. b.) für Lazarus find ich auch nicht.
Wie gesagt, lauter so Kleinigkeiten, an die man sich sehr schnell gewöhnt.
Danke dir nochmals für Deine Hilfe.
Ciao
Josef