![]() |
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. |
Kuck dir mal mein NetSend-Programm an. Da habe ich die Hilfe als Textresource eingebunden. Geht mit dem Resourcen-Editor von VC ganz gut. Wie es mit der VCL geht weiß ich leider auch nicht.
|
Hallo Paul,
du schreibst Zitat:
Hast du eventuell dabei versehentlich auf eine Virtuelle Klasse zugegriffen, die diese Methode noch nicht implementiert hat. zB.:
Code:
gibt wiedererwarten TStringList zurück. var st : TStrings; begin st:=TStringList.Create; ShowMessage(st.ClassName); ... Nun gut das war wahrscheinlich nur sinnloses geschwafel, denn das erklärt nicht warum es nur manchmal auftritt. Weise den Text doch nicht im Objekt Inspektor zu, sondern in deiner Onaktivate Funktion die du, wie ich dich kenne, sicher auch im Projekt hast. Das wäre denke ich die Einfachste und sicherste Lösung. Gruß Daniel |
Hi Paul,
erinnere mich morgen früh noch einmal daran, dass ich ein kurzes FAQ zum Thema Resourcen erstelle. Dann hast Du es auch. Es jetzt einfach zu spät. Danke :cat: |
Ein erster Ansatz wäre wohl:
Code:
Memo1.LoadFromresource(...);
|
Zitat:
|
Hehe, sakura, war nicht gegen dich. Ich dachte nur , falls Paul sich schon mal mit beschäftigen will und du noch nicht soweit bist mit dem FAQ-Eintrag. damit er sich schon mal damit auseinandersetzen kann.
Dass du so einen FAQ-Einttrag machen willst finde ich natürlich klasse. |
Hallo PaulJr,
der Text wird ja in der DFM Datei gespeichert. Wenn nur diese geändert wird, wird das entsprechende Modul nicht als geändert markiert und damit bei Betätigung von (STRG) F9 auch nicht neu compiliert. Übersetzt du aber alles nochmal neu, sollte der Text natürlich da sein. Schau dir doch mal die DFM Datei an, ob dort der Text korrekt drinsteht. |
Hallo DanielA,
das ist bei mir nicht der Fall… ___________________ Hallo Mr. Spock, es wird gewiss so sein wie Du beschreibst… hilf mir aber leider nichts. _____________________________ Hallo Luckie, ja... da hast Du vielleicht Recht... wir werden jetzt ganz genau dem Sakura auf die Finger gucken :warn: und aufpassen auf sein Erinnerungsvermögen... Also: ____________________ Hallo Sakura... ich erinnere Dich...!!! :coder: Gruß und Danke an Alle Paul Jr. P.S. Sollte dies mit Resourcen nichts werden, werde ich mich vielleicht DOCH für den Vorschlag von Daniel entscheiden..., dass ich bei der Initialisierung der Anwendung dieses Formular (bzw. Memos) einer Prüf- Routine unterziehe... somit wird mich wenigstens Support darauf aufmerksam machen können..., dass da irgendwas nicht stimmt...(sehe aber als die letzte mögliche Lösung)... |
Zitat:
@PaulJr: 1000 Dank für die Erinnerung, ich fange jetzt an, ein kleines FAQ zu erstellen... |
:mrgreen:
|
Hi PaulJr,
das FAQ steht und neue Beiträge. @Luckie:
Code:
gibt es bei mir nicht.
Memo1.LoadFromresource(...);
|
Kuckuck :hi:
Bei mir auch nicht. Ich dachte nur es gäbe es. |
Zitat:
|
Dann habe ich da was verwechselt. :oops:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:40 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