Entwickler-Ecke

Sonstiges (Delphi) - Hat einer Erfahrungen mit Bildschirmschonern und $D ...


Popov - Sa 30.12.06 22:48
Titel: Hat einer Erfahrungen mit Bildschirmschonern und $D ...
Hat einer Erfahrungen mit Bildschirmschonern und besonders mit der Compiler Direktive $D, bzw. {$D SCRNSAVE ...} ?

Allgemein gibt es in jeder Beschreibung den Hinweis, daß man über die Compiler Direktive (z. B.)

{$D SCRNSAVE = Mein Bildschirmschoner}

dem Bildschirmschoner einen Namen geben kann. Zwar ist das ein Relikt aus der Windows 3.1 zeit, wo es nur möglich war 8 Zeichen lange Dateinamen zu geben, und man auf diese Weise dem Bildschirmschoner einen langen Namen geben konnte, aber auch heute spricht nichts dagegen dem Bildschirmschoner einen ausführlichen Namen zu geben. Dieser Name erschient dann entweder in den Explorer Dateieigenschaften unter Beschreibung, oder im Anzeige Dialogfenster der Bildschirmschoner als Bildschirmschonername.

Laut zig Anleitungen, auch Microsoftanleitungen, bewirkt

{$D SCRNSAVE = Mein Bildschirmschoner}

daß der Bildschirmschoner einen Bildschirmschonerbeschriebung erhält. Klappt aber nicht. Zumindest bei mir nicht und noch nie, auch wenn ich seit Jahren Bildschirmschoner programmiere. Ich hab alles drauf was man zum programmieren von Bildschirmschonern braucht, nur dieses eine Teil funktioniert nicht. Dabei habe ich in allen möglichen Variationen getestet:

{$D SCRNSAVE = Mein Bildschirmschoner}
{$D SCRNSAVE Mein Bildschirmschoner}
{$D SCRNSAVE: Mein Bildschirmschoner}
{$D SCRNSAVE: "Mein Bildschirmschoner"}
{$D SCRNSAVE: 'Mein Bildschirmschoner'}
{$D SCRNSAVE = 'Mein Bildschirmschoner'}
usw.

Nichts. Als Beschreibung kommt immer der Dateiname. Und eigentlich kann es nicht am mir liegen, denn ich hab es von Delphi 3 bis Delphi 7 mit allen Versionen versucht, von Standard bis Enterprise. Natürlich könnte man sagen, daß es mit Delphi allgemein nicht klappt, aber ich kenne Bildschirmschoner die mit Delphi programmiert wurden und diese Beschreibung haben. Auch kann ich mir nicht vorstellen, daß keiner derer die je eine Anleitung für Delphi und Bildschirmschoner geschgrieben hat und diese Derektive in die Anleitung gepackt hat, es nicht selbst ausprobiert hat. Ansonsten wäre das ein Beispiel für ein immer weiter kopierten Fehler, der von Anleitung zur Anleitung weitergegeben wurde.

Also, hat einer schon erfolgreich diese Direktive benutzt und kann mir schreiben woran das lag?


Raffo - Di 02.01.07 19:46

hier http://www.delphimeister.de/ steht (suche nach $D), das es wohl in der Projekt Datei, direkt unter Program ... stehen soll.

Ich hab selbst mal nen "Dimmer" (=> meine HP) geschrieben, aber wo lese ich denn die Beschreibung aus? Wenn ich per rMaus / Eigenschaften gehe, gibts ja eine Dateibeschreibung - wo ist die andere zu lesen?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
program dimmer;
{$D SCRNSAVE: Beschreibung}

uses
  Forms,
  Messages,
  Windows,


GTA-Place - Di 02.01.07 19:52

DOH hat folgendes geschrieben:
Mit der Direktive $D kann die Generierung von Debug-Informationen aktiviert und deaktiviert werden. Diese Informationen beinhalten für jede Prozedur eine Tabelle mit Zeilennummern, in der Adressen des Objektcodes als Zeilennummern im Quelltext dargestellt werden.

Ich glaub ja nicht, dass das was mit Screensaver und Beschreibungen zu tun hat.


EDIT: Hab mal danach gesucht und das eine Tutorial sagt:
{$D SCRNSAVE Text}
und ein anderes sagt:
{$D SCRNSAVE : Text}
Die sind sich da glaub alle nicht so einig ;-)


tommie-lie - Di 02.01.07 20:13

http://groups.google.de/group/borland.public.delphi.graphics/browse_thread/thread/ac515f5f4db3fcdb/
Möglicherweise solltest du auf ein NT-basiertes System umsteigen, man scheint sich in diesem Thread einig zu sein, daß das mit der alten Win9x-Schiene nicht funktioniert (nur über sprechende Dateinamen). Marko Peric zeigt aber eine Alternativlösung auf, die auch mit Delphi funktionieren sollte (still NT-only). Einem anderen Faden zufolge ist diese Bedeutung von $D bereits mit Delphi 2.0 wieder verschwunden. Egal, wo du deine Tutorials her hast, sie sind zu alt ;-)
Hier [http://groups.google.de/group/borland.public.delphi.winapi/browse_thread/thread/b487af56d70e6862/] wird etwas mehr über das unterschiedliche Verhalten der Windows-Versionen verraten.


Popov - Di 09.01.07 07:48

Damit ihr alle auch wisst was ich meine. Das:

user defined image

Wie ihr sieht gibt es den Dateinamen. Der ist nicht gleich mit der Programmbeschreibung. Und beide sind nicht gleich mit dem Bildschirmschonernamen, bzw. Bildschirmschonerbeschreibung.

Irgendwie ist es also möglich dem Bildschrimschoner eine Alternativbezeichnung zu geben. Und die Möglichkeit suche ich.

@tommie-lie

Ach, ich hab schon so gut wie alles mal durchgetestet. Um eine BS zu schreiben brauche ich kein Tut. Ich hab eigentlich alles drauf, bis auf Parameter L (der mich nicht interessiert, und der Beschreibung.

Aber danke für den Link. Ich guck mir das an. Und wenn das was ist, dann schreibe ich ein Tut.


GTA-Place - Di 09.01.07 13:04

Wir wissen, was du meinst und der Link von tommie-lie zu den Google Groups behandelt das selbe Problem.

Zitat:
This only works on Windows NT but not Windows 95/98 (don't know about
2000). So, with NT you add a stringtable resource by adding the following
line to your RC file:

STRINGTABLE DISCARDABLE
BEGIN
1 "My Alternative Name"
END

and compiling it with BRCC32.EXE (I haven't actually tried this). And the
name should have 25 characters or fewer. With 95/98 you're stuck with the
filename.

Zitat:
Well, according to win32.hlp:

"One final requirement is a screen saver description string. The resource file
for a screen saver must contain a descriptive string that Control Panel displays
as the screen saver name. The description string must be the first string in the
resource file's string table (identified with the ordinal value 1). "


Hast du das probiert?


tommie-lie - Di 09.01.07 17:20

user profile iconPopov hat folgendes geschrieben:
Damit ihr alle auch wisst was ich meine.
Sorry für die späte Antwort, aber ich wusste, was du meintest.

Popov hat folgendes geschrieben:
Irgendwie ist es also möglich dem Bildschrimschoner eine Alternativbezeichnung zu geben. Und die Möglichkeit suche ich.
Diese Möglichkeit scheint sich zwischen Win3.1, Win95 und WinNT geändert zu haben. Und die Möglichkeit, es in Delphi zu machen, scheint sich zwischen Delphi 1 und allen Nachfolgern ebenfalls geändert zu haben. Alle nötigen Hinweise findest du in den beiden verlinkten Fäden.

Popov hat folgendes geschrieben:
Um eine BS zu schreiben brauche ich kein Tut.
Nein, davon bin ich nicht ausgegangen, weil's 'ne ganz normale Exe ist. Es gibt nur unterschiedliche Verhalten bei unterschiedlichen Systemen, und das von dir in deinem Profil eignetragene System kann laut Usenet gar nichts anderes anzeigen, als den Dateinamen des Bildschirmschoners. Ich weiß ja nicht, ob du es auch auf NT-Systemen getestet hast (und damit meine ich nicht notwendigerweise NT 3.51 ;-)).
Mangels Windows-System konnte ich dir keine konkreten Hinweise geben, sonst hätte ich das getan und nicht nur ein paar Links rausgesucht. Aber ich könnte in Erfahrung bringen, wie man einem xscreensaver einen Namen gibt :mrgreen:

Popov hat folgendes geschrieben:
Aber danke für den Link. Ich guck mir das an.
Hat's denn was gebracht?


Popov - Di 09.01.07 20:28

@GTA-Place, tommie-lie

Ich hab schon gemerkt, daß ihr es verstanden habt ;) Ich hab es nur noch mal für die gezeichnet die sich nichts unter "Bildschirmschoner Beschreibung" vorstellen können.

@tommie-lie

Sorry, hab inzwischen XP Prof drauf. Hab nur vergessen die Info hier zu aktualisieren.

Ja, ich hab es getestet, aber es funktioniert nicht, oder noch nicht. Die Ressource ist korrekt kompiliert und eingetragen. Daran liegt es also nicht. Klar ist auch, daß der String die ID 1 haben muß. Aus irgend einem Grund klappt es aber trotzdem nicht. Ob es nur für NT gilt? Ich werde noch paar Tests durchführen.