![]() |
Änderungen in Units werden nicht erkannt
Ich ändere in einem externen Programm den Code von Units.
Hierbei werden irgendwelche Res-Dateien erzeugt und zum Einbinden in die Unit wird der entsprechende Code ({$R <Name der generierten Datei>.RES})in die Unit geschrieben (hierzu lese ich den Code in eine Stringlist, suche die Position, an der eingefügt wird, füge ein und speichere per SaveToFile), die dann bei der nächsten Übersetzung mit eingebunden wird. Das funktioniert auch alles, aber folgendes Problem: wenn ich das Projekt, zu dem die geänderte Unit gehört, in der IDE angezeige, erkennt D10.3 diese Änderung nicht. Es erfolgt keine Anzeige der Art "Unit hat sich geändert, soll sie neu geladen werden", sie wird natürlich auch nicht im Editor angezeigt und auch beim Übersetzen wird treu und brav der "alte" Code verwendet. Offensichtlich wird der Quellcode gepuffert und es wird die Änderung nicht erkannt (das Änderungsdatum wird geändert, im Explorer sichtbar). Erst wenn ich D neu starte oder zwischenzeitlich ein anderes Projekt öffne, ist der neue Code da (klar, dann wird alles neu geladen). Das ist ziemlich nervig, weils viel Zeit kostet (ich werde ca. 200 von 500 Untist gearbeiten müssen)! Daher meine Frage: wie kriege ich D dazu, einzelne Units neu zu laden? Keine programmierte Funktion, sondern einfach eine Tastenkombination oder so, die aktualisiert? Vielleicht kann ja einer helfen! cckloud |
AW: Änderungen in Units werden nicht erkannt
Und du bist sicher, dass du den Fokus zwischendurch von Delphi weg änderst und dann beim Fokussieren keine Änderung erkannt wird?
Funktioniert das in Tools wie Notepad++ denn? Da wird die entsprechende API von Windows verwendet. Seit Windows 10 hat das bei mir überall gut funktioniert. Vielleicht funkt ein Virenscanner dazwischen? |
AW: Änderungen in Units werden nicht erkannt
Das funktioniert bei mir leider auch nur meistens, und nicht immer (Delphi 10.0 Seatle).
Ich bin der Sache nie auf den Grund gegangen, aber du könntest einmal versuchen
|
AW: Änderungen in Units werden nicht erkannt
Zitat:
Manuell neu eingelesen wird, wenn man ganz einfach das Projekt einmal schließt und wieder öffnet. |
AW: Änderungen in Units werden nicht erkannt
Man könnte aber auch via OTA selber die geöffneten Dateien im EditBuffer bearbeiten, dann muß nix neu geladen werden.
Aber was ich nicht verstanden hab, ich dachte du wolltest RESsourcen ändern ... was wird denn dabei nun sändig auch an den PAS rumgefummelt? |
AW: Änderungen in Units werden nicht erkannt
Ist die Unit im Delphi-Editor geöffnet?
Wenn sie dort nicht geöffnet ist könnte es sein, dass die Änderung nicht erkannt wird (auch nicht mit F9). Dann könnte "Projekt erzeugen" helfen. In Delphi 7 kann das aber grundsätzlich auch noch anders funktioniert haben als heute. |
AW: Änderungen in Units werden nicht erkannt
Danke für die vielen Antworten!
Ich möchte zunächst etwas genauer erklären, was ich mache. Ich habe (bzw. bin noch dabei) einen Wrapper für Stringrids geschrieben. Der erlaubt es mir, wesentlich komfortabler mit den Grids umzugehen. So kann ich zB Spalten über einen Namen ansprechen statt über den Index, kann spaltenweise Datentpyp (zB. Gleitkomma) und Formatierungen vergeben. Zellen kann ich in der Art "Cell.asInteger" ansprechen; weiterhin werden Funktionen zur Verfügung gestellt, die man beim Stringrid schmerzlich vermisst wie Zeile löschen, austauschen, Spaltensummen bilden uvam. Da mir das nicht als Component-Editor gelungen ist, gibts da ein Hilfsprogramm. Darin "baue" ich mein Grid so wie ich es brauche, mit Spaltenüberschriften usw. Aus diesen Definitonen wird dann eine RES-Datei erstellt, die dann mit diesem Programm auch in die Unit eingetragen werden kann, die das Grid nutzt. Und genau hier habe ich das Problem. Wenn ich gerade an einer Unit mit Grid arbeite, dann rufe ich parallel zu Delphi das Hilfsprogramm auf, schustere mir das Grid zurecht und lasse mir das die Res-Datei erstellen und in die Unit eintragen. Allein, im D10-Quellcode-Editor erscheint die Änderung nicht. Egal, was ich auch mache (zB. das Fenster schliessen und wieder öffnen), der geänderte Code kommt nicht. Erst wenn ich D10 schliwsse und neu öffne oder zwischendurch ein anderes Projekt öffne, funktionierts. @ stahli: natürlich sind die entsprechenden Units geöffnet. Aber auch wenn nicht - das Ergebnis bleibt das gleiche... (folgende antworten an die verfasser im umgekehrter reihenfolge des eingangs...) @ himitsu: ota sagt mir im Moment nix. Aber ich bezweifle, dass dieser Aufwand grössere Vorteile bringen wird. Und ja, es handelt sich um Resourcen, die nicht so direkt mit dem Programmcode zu tun haben. Aber wie kriege ich die Eintragung "{$R <Name der generierten Datei>.RES}" in die Unit? Das ginge sicher auch manuell, aber ich bin faul und überhaupt, wofür habe ich denn einen Computer? @ jaenicke Hallo jaenicke, schön zu sehen, dass du nach den turbulenten Delphi-Treff-Zeiten noch aktiv bist! und du hast recht, so wies aussieht übersetzt Delphi mit den gepufferten Dateien... Und ja, der Fokus hat zwischendurch gewechselt. Nebenbei: zZ. arbeite nich mit 2 D10-Instanzen, einmal das Hilfsprogramm einmal die Anwendung mit den Grids. In beiden ist das XGrid-object zwecks beschleunigter Fehlerbehebung angezeigt. Da werden Änderungen von der Gegenseite erkannt. Auch Notepad++ erkennt die die Änderungen wg/Res und fordert zun Neuladen auf... Und nein, ein Virenscanner funkt niht dazwischen. Ich habr nur die Standard-Win-Sicherungen drin... @ Der schöne Günther den "geändert am"-Zeitstempel aktualisiere (aktualisierte)ich selbst, da ich dem savetofile nicht traute. Mittlerweile hat sich herausgestellt, dass dieses nicht gar schuld war am nicht geänderten "geändert am"-Zeitstempel, das war ein Prgrammfehler. Den "Erstellt am"-Zeitstempel braucht ich später noch für meine Versionsverwaltung, da werde ich auf keinen fall was ändern! |
AW: Änderungen in Units werden nicht erkannt
Alles zurück! Seit gerade eben werde ich von D zum Update aufgefordert!!!
Warum auch immer, ich habe zwischenzeitlich nix, aber auch gar nix geändert, ich habe noch nicht mal D neu gestartet... Es hat sich wieder bewahrheitet: nur Gott versteht (Win oder D) 10! Trotzdem vielen Dank für euere Mühe! |
AW: Änderungen in Units werden nicht erkannt
Noch eine Erkenntnis: D10 scheint auch die Res-Datei zu puffern, auch wenn die gar nicht "zur Bearbeitung" steht. Jedenfalls werden Änderungen auch hier erst dann wirksam, wenn das Projekt geschlossen wird!
|
AW: Änderungen in Units werden nicht erkannt
Ist die .res Datei eigentlich mit ins Projekt aufgenommen (so wie eine normale Unit)?
|
AW: Änderungen in Units werden nicht erkannt
Seit wann werden die im Projekt aufgenommen? Nein, natürlich nicht!
|
AW: Änderungen in Units werden nicht erkannt
Diese Option gibt es schon eine Weile:
![]() |
AW: Änderungen in Units werden nicht erkannt
Na, das sind doch die icons usw, Bilder halt. Das kenne ich schon, aber ich habe eine xml-resource (als RCDATA). Und ich sehe nicht, was ds in meinem Fall für Vorteile bringen sollte.
Also nein, die .res Datei wurde von mir nicht mit ins Projekt aufgenommen. Und in der DProj finde ich sie auch nicht. |
AW: Änderungen in Units werden nicht erkannt
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Zitat:
|
AW: Änderungen in Units werden nicht erkannt
Ich kann nicht im Detail folgen, was Du da machst...
... aber vielleicht ist das Stichwort "Propertyeditor" etwas für Dich: ![]() Zumindest könnte das ein Weg sein, um bestimmte Änderungen nicht außerhalb von Delphi veranlassen zu müssen. Kann natürlich auch sein, dass das kein sinnvoller Weg für Dich ist oder einfach zu aufwendig. |
AW: Änderungen in Units werden nicht erkannt
@ stahli: Ja, das wäre ein Thema gewesen für einen Resourceneditor. Hab ich aber nicht hingekriegt (obwohl ich schon den einen oder anderen geschrieben hab), ist einfach zu komplex. Ist der einfachere Weg, den ich gewählt habe!
@ Uwe Raabe Ja, hat es auch nicht oder sollte es eigentlich nicht haben. Es scheint mir, als würde D alle beim Compilieren verwendeten Dateien puffern, zum Zwecke eines Geschwindigkeitsgewinns bei den nächsten Compilationen. Ist mir halt aufgefallen, dss die geänderte Resource nicht eingebunden wird... |
AW: Änderungen in Units werden nicht erkannt
Zitat:
Wie wird die .res genau eingebunden? |
AW: Änderungen in Units werden nicht erkannt
Nur den Inhalt! Die rc bleibt gleich, ist aber ja auch nicht relevant für das Programm. Die dient nur brcc32 zum erstellen der res.
|
AW: Änderungen in Units werden nicht erkannt
OK, dann solltest du den Weg über Ressourcen und Bilder vielleicht doch in Betracht ziehen. Dabei gibst du ja neben dem Ressourcenamen und dem Ressourcentyp insbesondere den Dateinamen an. Diese Datei wird dann dem Projekt hinzugefügt und taucht auch im Projektmanager auf. Das bringt jetzt zwei Vorteile:
Ohne diesen Schritt musst du die res-Datei manuell außerhalb der IDE erzeugen, wenn sich dein Dateiinhalt ändert. Alternativ kannst du auch die .rc Datei deinem Projekt hinzufügen. Das erzeigt dann einen solchen Eintrag in der dpr:
Delphi-Quellcode:
Der sorgt dann auch dafür, dass die res-Datei immer neu erzeugt wird. Das funktioniert wie gesagt aber nur, wenn dieser Eintrag in der dpr steht und die .rc in das Projekt aufgenommen wird. In einer Unit wird diese Zeile nur wie ein simples {$R test.res} behandelt.
{$R 'test.res' 'test.rc'}
Mir persönlich gefällt der erste Ansatz aber deutlich besser, weil damit die eigentliche Datei im Projekt aufgenommen wird. Die rec und res sind dann nur Zwischenprodukte, die ja mit den eigentlichen Sourcen und Daten nichts zu tun haben. Außerdem kann man viele solcher Dateien (txt, html, xml) direkt in der IDE anzeigen und bearbeiten (teilweise auch mit passender Syntaxhervorhebung). |
AW: Änderungen in Units werden nicht erkannt
Also ich sehe die Vorteile nicht. Das programmierte System erfolgt völlig geschlossen. In einem eigenen Programmm wird das Grid, das später verwendet wird, definiert: ich sage da zB, wieviele Spalten/Zeilen es haben soll, wie breit die Spalten sein sollen, welche Überschrift und welchen Datentyp, welche Formatierung und Ausrichtung sie haben (dabei auch ein Datentyp "InterpretedString", der einen eingegebenen String wie "(2+3)*(4+(3-2)) auswertet und das Ergebnis ermittelt; die Source für den Parser hatte ich damals im Delphi-Treff eingetellt)) und ob Zellen der Spalte editierbar sind oder nicht. Weiterhin kann ich Namen für spalten vergeben, über die später auch zugegriffen werden kann (das erhöht die Übersichtlichkeit des Programmcodes ungemein!). Und, wenn sie aus einer DB stammen, kann die Quelle (Table, Field) angegeben werden. Das alles passt genau ins Konzept meiner anderen Controls wie tXedit, tXMemo, tXcombobox usw.
Aus den Angaben wird vom Programm eine XML erzeugt, die dann automatisch in einer Resource ungewandelt wird. Die res-Datei kann direkt in die Source der zugehörigen Unit "eingebunden" werden(natürlich nur das "{$R myresource.res}"). Der zugehörige Wrapper, in der Unit eingebunden, liest die XML aus der Resource und behandelt das Grid entsprechend. Es wacht zB, darüber, dass in eine Integer-Spalte nur Zeichen eingeben werden können, die zu einer Integer gehören, dass in einer Float-Spalte auch eine gülige Float steht. Er liefert mir einen "oncellchanged-Event, einen Zugriff alla "Cell.asFloat" uvm. Er liefert Zeilen. und Spalten/Zeilensummen, Funktionen zun leeren/löschen von Zeilen/spalte, zum Austauschen uvm. Und als Highlight (finde ich jedenfalls) kann der Inhalt des Grids aus einer DB geladen bzw, gespeichert werden - alles ohne weiteren Code. Wie sollte da der Eintrag in das Projekt einen Vorteil bringen? Denk daran, was mein Ursprngliches Problem war: Delphi erkannte die Änderung IN DER UNIT (in der die "{$R myresource.res}" per Programm eingetragen wurde! Und wenn es die nicht erkannte, warum sollte es dann die Änderung an der Res erkennen? Und die Aussicht "taucht auch im Projektmanager auf" gruselt es mich noch mehr. Das Projekt, für das ich das mache (wg/Umstellung von D7 auf D10/D11) hat gereits 500 - 600 Einträge im Projektmanager - und da sollen nun nochmal 200 - 300 dazu kommen? Ehrlich: nein danke! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:00 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-2025 by Thomas Breitkreuz