Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Geheimnisvolle TMemo (https://www.delphipraxis.net/262-geheimnisvolle-tmemo.html)

Gast 25. Jun 2002 22:33


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.

Daniel 25. Jun 2002 22:41

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

danielA 25. Jun 2002 22:56

Hallo Paul,

zu 1.) leider keine Idee,
Ist der Text fest einprogrammiert oder wird er irgendwo ausgelesen ???

zu 2.)

Code:

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;
Diese Funktion durchläuft alle Komponenten in deinem Projekt.
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

Gast 25. Jun 2002 23:02

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.

Luckie 25. Jun 2002 23:03

Wie kommt denn nun der Text in die Memos? Eventuell kommt man da weiter.

Gast 25. Jun 2002 23:05

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.

Gast 25. Jun 2002 23:06

Hallo Luckie,

Text kopiere ich ganz einfach (von Hand) in TMemo..., danach wird compiliert...

Danke

Gruß

Paul Jr.

Daniel 25. Jun 2002 23:08

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

Luckie 25. Jun 2002 23:11

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?

Gast 25. Jun 2002 23:24

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.

Luckie 25. Jun 2002 23:29

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.

danielA 25. Jun 2002 23:29

Hallo Paul,

du schreibst

Zitat:


...aber mit änlichen Konstrukten arbeite ich dort gerade...

Mein erster Gedanke, als ich das las, ging in folgende Richtung.

Hast du eventuell dabei versehentlich auf eine Virtuelle Klasse zugegriffen, die diese Methode noch nicht implementiert hat.

zB.:

Code:

var st : TStrings;
begin
  st:=TStringList.Create;
  ShowMessage(st.ClassName);
  ...
gibt wiedererwarten TStringList zurück.

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

sakura 25. Jun 2002 23:56

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:

Luckie 26. Jun 2002 00:07

Ein erster Ansatz wäre wohl:
Code:
Memo1.LoadFromresource(...);

sakura 26. Jun 2002 00:08

Zitat:

Zitat von Luckie
Ein erster Ansatz wäre wohl:
Code:
Memo1.LoadFromresource(...);

Hätte ich doch glatt wieder vergessen :evil::cat:

Luckie 26. Jun 2002 00:12

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.

MrSpock 26. Jun 2002 06:36

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.

Gast 26. Jun 2002 07:21

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)...

sakura 26. Jun 2002 08:24

Zitat:

Zitat von Luckie
Hehe, sakura, war nicht gegen dich.

Hi Luckie, im Ernst, ich hätte das doch wirklich wieder mal vergessen :D

@PaulJr: 1000 Dank für die Erinnerung, ich fange jetzt an, ein kleines FAQ zu erstellen...

Gast 26. Jun 2002 08:51

:mrgreen:

sakura 26. Jun 2002 10:02

Hi PaulJr,

das FAQ steht und neue Beiträge.

@Luckie:
Code:
Memo1.LoadFromresource(...);
gibt es bei mir nicht.

Luckie 26. Jun 2002 10:05

Kuckuck :hi:

Bei mir auch nicht. Ich dachte nur es gäbe es.

sakura 26. Jun 2002 10:07

Zitat:

Zitat von Luckie
Kuckuck :hi:

Bei mir auch nicht. Ich dachte nur es gäbe es.

Gibt es aber dafür bei TBitmap, und das habe ich als Beispiel mit angebracht :cat:

Luckie 26. Jun 2002 11:13

Dann habe ich da was verwechselt. :oops:


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:13 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