AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Probleme mit Bildschirmschonervorschau
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme mit Bildschirmschonervorschau

Ein Thema von Popov · begonnen am 17. Nov 2007 · letzter Beitrag vom 26. Mai 2012
Antwort Antwort
Seite 2 von 4     12 34      
Popov
(Gast)

n/a Beiträge
 
#11

Re: Eine Frage die nur die Glaskugel beantworten werden kann

  Alt 18. Nov 2007, 11:17
Ok, ich hab das Problem gefunden. Wie ich schon oben geschrieben habe liegt mein letzter Bildschirmschoner schon über ein halbes Jahr her, oder länger. Deshalb hab ich die eine oder andere Sache schon mal vergessen, und kein Bildschirmschoner ist gleich wie die anderen. Manchmal muß man nur etwas über das Problem quatschen um selbst auf die Lösung zu kommen, denn dabei denkt man oft an Sachen die man vorher nicht beachtet hat.

Der schuldige Part ist der hier:

Delphi-Quellcode:
OldStyle := GetWindowLong(Handle, GWL_STYLE);
SetWindowLong(Handle, GWL_STYLE, (OldStyle and not WS_POPUP) or WS_CHILD or WS_VISIBLE);
Ich hab die zwei Zeilen nicht vergessen, aber ihre Bedeutung nicht mehr im Kopf gehabt. Außerdem habe ich die Reihenfolge falsch gesetzt, so daß die oberen Zeilen nicht funktionierten. Und deshalb hab ich sie irgendwann entfernt.

Das hier funktioniert NICHT:

Delphi-Quellcode:
procedure TPreview.FormCreate(Sender: TObject);
var
  OldStyle: Integer;
  hWnd: THandle;
  Rec: TRect;
begin
  hWnd := StrToIntDef(ParamStr(2), 0);
  GetWindowRect(hWnd, Rec);
  SetBounds(0, 0, Rec.Right - Rec.Left, Rec.Bottom - Rec.Top);

  OldStyle := GetWindowLong(Handle, GWL_STYLE);
  SetWindowLong(Handle, GWL_STYLE, (OldStyle and not WS_POPUP) or WS_CHILD or WS_VISIBLE);

  BorderStyle := bsNone; // <<<<<<<<<< NACH

  Windows.SetParent(Self.Handle, hWnd);
end;
Das hier funktioniert korrekt:

Delphi-Quellcode:
procedure TPreview.FormCreate(Sender: TObject);
var
  OldStyle: Integer;
  hWnd: THandle;
  Rec: TRect;
begin
  hWnd := StrToIntDef(ParamStr(2), 0);
  GetWindowRect(hWnd, Rec);
  SetBounds(0, 0, Rec.Right - Rec.Left, Rec.Bottom - Rec.Top);

  BorderStyle := bsNone; // <<<<<<<<<< VOR

  OldStyle := GetWindowLong(Handle, GWL_STYLE);
  SetWindowLong(Handle, GWL_STYLE, (OldStyle and not WS_POPUP) or WS_CHILD or WS_VISIBLE);

  Windows.SetParent(Self.Handle, hWnd);
end;
Da mein letzter Bildschirmschoner schon länger her ist und ich das Preview Fenster jedes mal neu schreibe und dieses mal BorderStyle hinter SetWindowLong gesetzt habe und deshalb SetWindowLong keine Wirkung hatte und ich auf der Suche nach dem Fehler nach und nach alles entfernte und ganz einfach vergessen habe, daß beim Style einige Flags gesetzt werden müssen, habe ich letztendlich auch SetWindowLong entfernt.

Ich könnte mich jetzt versuchen rauszureden, ich hab es einfach vergessen. Vielleicht sollte ich mir mal ein Tutorial schrieben. Ich hatte mich mal wirklich ausführlich damit beschäftigt und jetzt passiert mir sowas. Man vergisst genauso schnell wie man es lernt.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#12

Re: Eine Frage die nur die Glaskugel beantworten werden kann

  Alt 18. Nov 2007, 11:35
Zitat von hathor:
Betrifft Directive - So geht's:

Delphi-Quellcode:
program NurTest;
...
{$R *.RES}
{$D SCRNSAVE : Test Screen Saver}
...
Offensichtlich darf bei meinem DELPHI 2007 diese Directive erst NACH der $R-Directive
auftauchen. Im Übrigen sieht man sie nur mit geeigneten Programmen, z.B. Hexeditor.
Siehe Anhänge.
Letztendlich ist es unwichtig. Früher hatte diese Direktive beim Bildschirmschoner eine Bedeutung. Auch wenn sie heute noch in so ziemlich jedem BS Tutorial steht, was zeigt, daß einige die Tutorials schreiben einfach nicht wissen was sie da schreiben, sondern einfach zum Teil nur abschreiben, so hat diese Direktive nicht die Funktion die sei früher hatte. Früher, in den 8.3 Zeiten, konnte man so dem Bildschirmschoner einen langen Namen geben. Seit Windows 9x hat diese Direktive keinen Einfluß auf den Namen. Zumindest nicht bei Delphi zwischen D3 und D7 und Windows 98 und XP. Ich hab alle Varianten getestet, keine Wirkung. Wenn ich also diese Zeile noch drin hatte, dann eher aus sentimentalen Gründen.

Allerdings gibt es tatsächlich eine Möglichkeit einen BS Namen unabhängig dem Datei Namen zu setzten. Nur ist mir der nicht bekannt. Auch wenn ich schon seit Jahren dran suche.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#13

Re: Eine Frage die nur die Glaskugel beantworten werden kann

  Alt 18. Nov 2007, 17:12
Warum hat der Threadtitel eigentlcih nichts mit dem Problem bzw. der Frage zu tun? Ich dachte eigentlich, dass du la´nge genug dabei bist, dass du wüsstest, wie man seinen Thread benennt.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#14

Re: Eine Frage die nur die Glaskugel beantworten werden kann

  Alt 18. Nov 2007, 18:05
Zitat von Luckie:
Warum hat der Threadtitel eigentlcih nichts mit dem Problem bzw. der Frage zu tun? Ich dachte eigentlich, dass du la´nge genug dabei bist, dass du wüsstest, wie man seinen Thread benennt.
Wenn du dir den Text im ersten Beitrag durchliest, dann wirst du erkennen, daß das Problem gar nicht klar war. Erst im Laufe des Threads hat sich nach und nach rausgestellt, daß es die Bildschirmschoner Preview war, bis zuletzt das Problem erkannt wurde.

Warum dann aber nicht gleich geschrieben, daß es ein Bildschirmschoner Problem ist? Zum Zeitpunkt der Threaderstelleung stelle sich mir die Frage ob es überhaupt ein Bildschirmschoner Problem ist, denn die Eigenschaften von Anzeige produzierten immer frische Prozesse, auch bei einem leeren Konfigurationsfenster. Und das konnte nicht sein. Erst später stellte ich fest, daß der Konfigurationsfenster im gleichen Moment geschlossen wurde wie ein neuer Preview Prozess erstellt wurde. Nur erkannte ich es damals noch nicht. Für mich sah es so aus als ob das Konfigurationsfenster das mit Close beendet wurde, wobei dieses Fenster in dem Moment das Mainfenster war, nicht geschlossen werden konnte.

Für mich war also zu dem Zeitpunkt dieses Problem ein Problem was nicht nicht sein konnte. Es konnte nicht sein, daß sowohl Preview, wie Konfiguration und Vorschau Prozesse erstellten, denn alle waren unterschiedlich programmiert. Er war zu dem Zeitpunkt also ein unerklärliches Etwas was ich eigentlich nicht beschreiben konnte.
  Mit Zitat antworten Zitat
Bornemaxx

Registriert seit: 28. Nov 2007
9 Beiträge
 
#15

Re: Eine Frage die nur die Glaskugel beantworten werden kann

  Alt 28. Nov 2007, 19:19
Zitat von Popov:
...
Allerdings gibt es tatsächlich eine Möglichkeit einen BS Namen unabhängig dem Datei Namen zu setzten. Nur ist mir der nicht bekannt. Auch wenn ich schon seit Jahren dran suche.
.. genau danach habe ich heute gesucht, als ich auf diesen Thread gestoßen bin. Da hier leider nichts zu finden war, habe ich mir mal die Original-BS genauer angesehen. Und die Lösung gefunden !
In der String-Table gibt es einen Eintrag mit der Nummer 1, der enthält den String, der als Name angezeigt wird.
Erzeugen kann man den mittels einer rc/res-Datei, die man mit einbindet. In der rc-Datei muß stehen:
Code:
STRINGTABLE
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
{
1,    "Mein Bildschirmschoner"
}
Habe es getestet unter XP und 98, da funktioniert es. unter NT und 95 scheint es nicht zu klappen, auch nicht mit der $D Direktive.
Viel Spaß beim Testen.

Viele Grüße

Mirko
(ganz neu hier, siehe Beitragszahl.)
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#16

Re: Eine Frage die nur die Glaskugel beantworten werden kann

  Alt 28. Nov 2007, 20:59
Zitat von Bornemaxx:
...(ganz neu hier, siehe Beitragszahl.)
Oje, das fängt ja gut an!

Ich bekomme eine Fehlermeldung - bist Du sicher, dass das was mit Delphi (oder mit Reactos???) zu tun hat?

[DCC Fehler] E2161 RLINK32: Unsupported 16bit resource in file "F:\Borland Studio Projects\31-LeererBildschirmschoner\test.res"
  Mit Zitat antworten Zitat
Bornemaxx

Registriert seit: 28. Nov 2007
9 Beiträge
 
#17

Re: Probleme mit Bildschirmschonervorschau

  Alt 28. Nov 2007, 21:15
Hallo hathor,
Ich hoffe, Deine Antwort bezieht sich auf meinen Tip zur Anzeige des Bildschirmschoner-Namens.

Also von Anfang an: Ich nutze Delphi 5.
Habe eine Datei namens string1.rc erstellt, diese enthält die o.g. Zeilen. Diese dann in der Eingabeaufforderung übersetzt mittels "brcc32 -r string1.rc" (brcc32 steht im Delphi-Verzeichnis unter \bin, sollte aber durch die Pfadangaben überall gefunden werden). Dadurch erhalte ich eine Datei namens string.res und die binde ich ein per {$R string1.res}. Damit funktioniert es bei mir jedenfalls.
Ich drück Dir die Daumen.

Gruß Mirko
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#18

Re: Eine Frage die nur die Glaskugel beantworten werden kann

  Alt 28. Nov 2007, 21:16
Zitat von Bornemaxx:
Code:
STRINGTABLE
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
{
1,    "Mein Bildschirmschoner"
}
Habe es getestet unter XP und 98, da funktioniert es. unter NT und 95 scheint es nicht zu klappen, auch nicht mit der $D Direktive.
Viel Spaß beim Testen.
Getestet habe ich dein Tipp noch nicht, aber so weit war ich eigentlich auch schon. Ich werde deinen Tipp nochmal testen, aber das mit der Ressource habe ich auch schon in 20 verschiedenen Varianten ausprobiert. Neu ist das für mich also nicht. Aber ich werde es trotzdem testen.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#19

Re: Probleme mit Bildschirmschonervorschau

  Alt 28. Nov 2007, 21:28
Ich hab es ausprobiert, funktionieren tut es aber nicht. Ich hab es mit Delphi 3 und Delphi 7 ausprobiert.

Erstellt habe ich die Datei STRING.RC

Delphi-Quellcode:
STRINGTABLE
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
{
1,    "Mein Bildschirmschoner"
}
dann die Datei RESBUILD.BAT

@brcc32 STRING.RC Ergebnis war die STRING.RES

Diese hab ich in der Projektdatei eingebunden

{$R STRING.RES} Hat nichts gebracht.

Aber trotzdem danke.
  Mit Zitat antworten Zitat
Bornemaxx

Registriert seit: 28. Nov 2007
9 Beiträge
 
#20

Re: Probleme mit Bildschirmschonervorschau

  Alt 28. Nov 2007, 21:45
@ Popov
Schade, ich gehe davon aus, dass die *.res auch im Projektverzeichnis liegt. Aber mit einem Resourcen-Editor kann man sich das anzeigen lassen. Im Anhang ein Bild wie es bei mir aussieht.

Gruß Mirko
Miniaturansicht angehängter Grafiken
resource_207.jpg  
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:35 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