![]() |
Re: Eine Frage die nur die Glaskugel beantworten werden kann
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:
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.
OldStyle := GetWindowLong(Handle, GWL_STYLE);
SetWindowLong(Handle, GWL_STYLE, (OldStyle and not WS_POPUP) or WS_CHILD or WS_VISIBLE); Das hier funktioniert NICHT:
Delphi-Quellcode:
Das hier funktioniert korrekt:
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;
Delphi-Quellcode:
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.
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; 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. |
Re: Eine Frage die nur die Glaskugel beantworten werden kann
Zitat:
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. |
Re: Eine Frage die nur die Glaskugel beantworten werden kann
Warum hat der Threadtitel eigentlcih nichts mit dem Problem bzw. der Frage zu tun? :roll: Ich dachte eigentlich, dass du la´nge genug dabei bist, dass du wüsstest, wie man seinen Thread benennt.
|
Re: Eine Frage die nur die Glaskugel beantworten werden kann
Zitat:
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. |
Re: Eine Frage die nur die Glaskugel beantworten werden kann
Zitat:
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:
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.
STRINGTABLE
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL { 1, "Mein Bildschirmschoner" } Viel Spaß beim Testen. Viele Grüße Mirko (ganz neu hier, siehe Beitragszahl.) |
Re: Eine Frage die nur die Glaskugel beantworten werden kann
Zitat:
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" |
Re: Probleme mit Bildschirmschonervorschau
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 |
Re: Eine Frage die nur die Glaskugel beantworten werden kann
Zitat:
|
Re: Probleme mit Bildschirmschonervorschau
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:
dann die Datei RESBUILD.BAT
STRINGTABLE
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL { 1, "Mein Bildschirmschoner" }
Delphi-Quellcode:
Ergebnis war die STRING.RES
@brcc32 STRING.RC
Diese hab ich in der Projektdatei eingebunden
Delphi-Quellcode:
Hat nichts gebracht.
{$R STRING.RES}
Aber trotzdem danke. |
Re: Probleme mit Bildschirmschonervorschau
Liste der Anhänge anzeigen (Anzahl: 1)
@ 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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:14 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