Announcement

Collapse
No announcement yet.

Hintergrundbildschirm in einer Anwendung

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Hintergrundbildschirm in einer Anwendung

    Hallo, mit den unten angeführten Proceduren erhalte ich wie gewünscht ein Hintergrundbild, das auch nach dem Start des Programmes, dank Speicherung in der Registry, wieder am Bildschirm erscheint. Nun möchte ich aber das ich das Bild auch abschalten kann und der eingestellte normale Hintergrund der Form erscheint. Kann man mir dazu einen, einige Hinweise geben. Vielen Dank. Mfg ph.

    <BR>uses registry;

    <BR>procedure TForm1.FormActivate(Sender: TObject);
    <BR>var reg : TRegistry;
    <BR> iFile : String;
    <BR>begin
    <BR>//Die gespeicherten Werte aus der Registry auslesen
    <BR>reg := TRegistry.Create;
    <BR>reg.OpenKey('Software\HenGap\LottNeu',False) ;
    <BR>try
    <BR>iFile := reg.ReadString('Auswahl');
    <BR>except; //Falls kein Eintrag vorhanden: Exception
    <BR>iFile := 'OpenDialog1.FileName';
    <BR>end;
    <BR>reg.Free;
    <BR>OpenDialog1.FileName := iFile;

    <BR>//Die in der Registry gespeicherte Bitmap-Datei wird
    <BR>//zugewiesen
    <BR>if not Assigned(FWallpaper) then
    <BR>FWallpaper := TBitmap.Create;
    <BR>FWallpaper.LoadFromFile(OpenDialog1.FileName );
    <BR>Invalidate;
    <BR>end;

    <BR>procedure TForm1.Button1Click(Sender: TObject);
    <BR>var
    <BR>reg : TRegistry;
    <BR>begin
    <BR>// Bild laden
    <BR>if OpenDialog1.Execute then
    <BR>begin
    <BR>if not Assigned(FWallpaper) then
    <BR>FWallpaper := TBitmap.Create;
    <BR>FWallpaper.LoadFromFile(OpenDialog1.FileName );
    <BR>Invalidate;
    <BR>end;
    <BR>reg := TRegistry.Create;
    <BR>reg.OpenKey('Software\HenGap\LottNeu',true);
    <BR>reg.WriteString('Auswahl',OpenDialog1.FileName );
    <BR>reg.Free;
    <BR>end;

    <BR>procedure TForm1.WMEraseBkGnd(var Msg: TWMEraseBkGnd);
    <BR>var
    <BR>row, col: Integer;
    <BR>begin
    <BR>if not Assigned(FWallpaper) then
    <BR>inherited
    <BR>else
    <BR>begin
    <BR>// Das Bild zeichnen
    <BR>for Row := 0 to ClientHeight div FWallpaper.Height do
    <BR> for Col := 0 to ClientWidth div FWallpaper.Width do
    <BR> BitBlt(Msg.Dc,
    <BR> Col * FWallpaper.Width,
    <BR> Row * FWallpaper.Height,
    <BR> FWallpaper.Width,
    <BR> FWallpaper.Height,
    <BR> FWallpaper.Canvas.Handle,
    <BR> 0,
    <BR> 0,
    <BR> SRCCOPY);
    <BR> Msg.Result := 1;
    <BR> end; { else }
    <BR>end;

    <BR>procedure TForm1.FormDestroy(Sender: TObject);
    <BR>begin
    <BR>FWallpaper.Free;
    <BR>end;

  • #2
    Der Registrywert sollte leer sein oder auf eine Datei zeigen die nicht existiert. Sollte dies dann der Fall sein wird beim Laden dieser Bitmap ja eine Exception ausgelösst. Diese Exception abfangen, FWallpaper zerstören und auf nil setzen.

    Gruß Hage

    Comment


    • #3
      Hallo, Hagen ich tue mein bestes bekomme es aber nicht hin. Lasse ich ich die unten angeführten Anweisungen abarbeiten, so bekomme ich eine Zugriffsachutzverletzung, wenn ich diese bestätige wird aber schon mal der Hindergrundbildschirm rot. Kannst Du mir das näher erklären ? Lasse ich die Anweisung form1.color weg, dann ist die Anwendung verschwunden. Danke ph.
      <br>form1.color := clred;
      <br>fwallpaper := nil;
      <br>reg.free;
      <br>fwallpaper.free

      Comment


      • #4
        Hi, ich komme zwar aus dem C++ Bereich, aber das sieht so aus, als würdest du mit
        <PRE>
        fwallpaper := nil;
        </PRE>
        den Zeiger auf fwallpaper löschen
        und dann mit
        <PRE>
        fwallpaper.free;
        </PRE>
        versuchen dieses auf nil gesetzte Objekt zu löschen. Versuch es mal anders herum. Erst löschen, dann auf nil setzen.

        Grüße Joche

        Comment


        • #5
          Hallo, ich versuche mein bestes aber beim wechseln der Aneisungen tut sich auch nichts. Aber funktioniern muß das doch irgendwie. Vielleicht kann man mir noch weiterhelfen. Schönen Sonntag ph

          Comment


          • #6
            Warum löschst du nicht einfach den Wert für Auswahl aus der registry?

            Ich habe das immer so gemacht.

            <pre>
            var
            Form1: TForm1;
            FWallpaper : tbitmap;
            <br><br>
            implementation
            <br><br>
            {$R *.dfm}
            <br><br>
            <b>//Wert in Registry speichern</b>
            procedure save2reg(bitmapname: string);
            var
            reg : tregistry;
            begin
            reg := TRegistry.Create;
            reg.OpenKey('Software\HenGap\LottNeu',true);
            reg.WriteString('Auswahl',bitmapname);
            reg.Free;
            end;
            <br><br>
            <b>//Die gespeicherten Werte aus der Registry auslesen</b>
            procedure TForm1.FormActivate(Sender: TObject);
            var
            reg : TRegistry;
            iFile : String;
            begin
            reg := TRegistry.Create;
            try
            reg.OpenKey('Software\HenGap\LottNeu',False);
            if reg.ValueExists('Auswahl') then
            begin
            iFile := reg.ReadString('Auswahl');
            FWallpaper:=TBitmap.create;
            FWallpaper.loadfromfile(iFile);
            form1.brush.bitmap:=FWallpaper;
            FWallpaper.dormant;
            end;
            finally
            reg.Free;
            end;
            end;
            <br><br>
            <b>//Hintergrundbild auswählen</b>
            procedure TForm1.Button1Click(Sender: TObject);
            var
            reg : TRegistry;
            begin
            if OpenDialog1.Execute then
            begin
            FWallpaper:=TBitmap.create;
            FWallpaper.loadfromfile(OpenDialog1.FileName);
            form1.brush.bitmap:=FWallpaper;
            FWallpaper.dormant;
            save2reg(opendialog1.filename);
            Invalidate;
            end;
            end;
            <br><br>
            <b>//Beim nächsten Programmstart kein Hintergrundbild mehr laden</b>
            procedure TForm1.Button2Click(Sender: TObject);
            var
            reg: tregistry;
            begin
            reg := TRegistry.Create;
            reg.OpenKey('Software\HenGap\LottNeu',False);
            if reg.ValueExists('Auswahl') then
            reg.DeleteValue('Auswahl');
            reg.Free;

            showmessage('Beim nächsten Start wird kein Hintergrundbild mehr angezeigt');
            end;
            <br><br>
            procedure TForm1.FormDestroy(Sender: TObject);
            begin
            FWallpaper.Free;
            end;
            </pre&gt

            Comment


            • #7
              Hallo, als Heimwerker Einzelkämpfer hätte ich das Problem nicht lösen können. Jetzt funktioniert es. Vielen Dank für die Hilfe. Gruß ph

              Comment

              Working...
              X