![]() |
Geheimnisvolle TMemo
Hallo, 8)
ich habe ein sehr interessantes Problem. Auf einem Formular habe ich ein TPageControl mit mehrere Seiten (tabShet). Dieses PageControl wird immer wider um weitere Seiten erweitert... Auf jeder Seite liegt immer NUR ein TMemo Komponente mit Inhalt (Verschiedene Texte) Ab und zu nach der Compilierung habe ich ein merkwürdiges Effekt: :shock: Auf manchen Seiten beinhalten die Memos kein Inhalt!!! Erst nach mehrmaligen Compilieren (z.B. Menü Projekt: „Alle Projekte compilieren“ und dann „Alle Projekte erzeugen“ usw... bekomme ich eine EXE mit der gewünschten Memo Inhalten. Das ist für uns sehr gefährliche Effekt..., da es ist schon passiert, dass man weiter na die Kunden ein fehlerhaften Update ausgeliefert hat! :?: Frage: 1.) Woran das liegen kann? 2.) Wie könnte man so was eventuel (fals die Frage Nr.1 ohne Antwort bleibt) automatisch überwachen? Gruß Paul Jr. |
Hallo PaulJr,
das ist zwar nichts, um den Fehler zu beheben, aber wenigstens um ihn zu erkennen: Während der Initialisierung Deiner Anwendung rufst Du eine Prozedur auf, welche jedes Memo prüft, ob es Text enthält (Memo.Lines.Count > 0). Wenn ich Dich richtig verstanden habe, dann haben Deine Memos entweder gar keinen Text (Memo.Lines.Count = 0) oder aber den vollständigen Text (Memo.Lines.Count > 0). Stellt Deine Prozedur also fest, dass mindestens ein Memoo nicht den geforderten Inhalt hat, dann kannst Du mit ShowMessage('...') irgendetwas ausgeben. Die Prozedur kann die Anzahl der Seiten des Controls abfragen (.PageCount) und dann nach und nach alle Seiten durchgehen und über die Eigenschaft "Controls" einer jeden Seite das darauf befindliche Memo ausmachen. Wie gesagt, damit ist der Fehler zwar nicht behoben, aber die Gefahr, ein fehlerhaftes Release an die Kunden zu liefern, sinkt deutlich, da der Fehler vom Programm schon beim Start gemeldet wird. Grüße, Daniel |
Hallo Paul,
zu 1.) leider keine Idee, Ist der Text fest einprogrammiert oder wird er irgendwo ausgelesen ??? zu 2.)
Code:
Diese Funktion durchläuft alle Komponenten in deinem Projekt.procedure TForm1.Button1Click(Sender: TObject); var i : Integer; begin for i:=0 to ComponentCount -1 do begin if (Components[i] is TMemo) and (Trim(TMemo(Components[i]).Lines.Text)='') then ShowMessage('Memo '+TMemo(Components[i]).Name+' enthält keinen Text !!!'); end; end; Ist die aktuelle Komponente vom Typ TMemo, so wird untersucht ob sie Text oder nur Leerzeichen enthält. Ist kein Text oder sind nur Leerzeichen enthalten, so wird eine Meldung ausgegeben. Ich hoffe das hilft dir ein wenig weiter Gruß Daniel |
Hallo Daniel,
Zitat: (...) Während der Initialisierung Deiner Anwendung rufst Du eine Prozedur auf, welche jedes Memo prüft, ob es Text enthält (Memo.Lines.Count > 0). Wenn ich Dich richtig verstanden habe, dann haben Deine Memos entweder gar keinen Text (...) Ja manche Memos erscheinen manchmal ohne Text. Daniel, ich weiß was Du meinst... Das natürlich wäre eine Sache für unserer Support und wäre Zwar eine denkbare Lösung... die leider nur eine hilfslose Reaktion auf der Fehler wäre Ich darf solche EXE nicht ausliefern... nicht mal an Support... und jedes Mal die Anwendung zu starten... ist echt sehr Aufwendig... und Zeitraubend... Du weiß wie es manchmal stressig in Software Firma ist... man muss immer an irgendwas denken... Vielleicht finden wir hier eine andere Lösung... Danke Paul Jr. |
Wie kommt denn nun der Text in die Memos? Eventuell kommt man da weiter.
|
Hallo DanielA,
es handelt sich genau genomme um festen Text (SQL-SCripts) die dort integriert sind... Danke für Deine Funktion, aber mit änlichen Konstrukten arbeite ich dort gerade... Mein Problem entsteht irgendwie bei Compilierung... Danke Gruß Paul Jr. |
Hallo Luckie,
Text kopiere ich ganz einfach (von Hand) in TMemo..., danach wird compiliert... Danke Gruß Paul Jr. |
Hallo PaulJr,
... hast ja recht - brilliant war meine Idee keineswegs. Du gibst eine Anwendung weiter ohne sie wenigstens einmal gestartet zu haben? Du wirst Deine Gründe haben - aber damit hatte ich nicht gerechnet :roteyes: Du schreibst also zur Designzeit etwas in die Memos und zur Laufzeit ist es dann nicht mehr da. Kannst Du vielleicht mit Ressourcen arbeiten? Die werden ja recht zuverlässig eingebunden... Grüße, Daniel |
Wenn er es per Hand in den StringListen-Editor einträgt, ist es ja auch nichts anderes als eine Resource.
Aber gibt es denn was auffälliges wenn du mit F7 durchgehst? Ist der Text eventuell zu groß? Was für ein OS? |
Hallo Luckie,
Text ist gewiß nicht zu groß (es sind nur bis jetzt 3 kleine Momos) Hallo Daniel, das mit Resourcen einbinden wäre vielleicht die Lösung... nun mit Resourcen Einbindung habe ich noch nicht gearbeitet...darum weiß ich überhaupt nicht wie ich das machen sollte und was ich dazu brauchen würde... (wäre vielleicht eine interessante Idee für ein sehr kleines Tutorial: Resurce erstellen und Einbidnen... Vielleicht hat jemand etwas Zeit um so was zu restellen ... Gruß Paul Jr. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz