![]() |
Rahmen wieder löschen
Folgende Situation: Dargestellt werden zwei Images neben einander. Der Benutzer soll nun per KLick auswählen köbnnen, mit welche er arbeiten will. Damit man sieht, welches Image das aktuelle ist, soll ein Rahmen um das Image gezeichnet werden. Und dieser soll natürlich auch wieder verschwinden, wenn man das andere Image auswählt. Bisher sieht mein Code so aus:
Delphi-Quellcode:
CurrentPage ist die Seite, die gerade angeklickt wurde.
procedure TfrmMain.PageClick(Sender: TObject);
begin FotoBook.CurrentPage := TImageEnVect(Sender); FotoBook.DrawBorder; end;
Delphi-Quellcode:
Mit dem ersten Teil des Codes, dachte ich, würde ich den Rahmen wieder löschen, aber leider ist das nicht der Fall. Wenn ich auf die andere Seite Klicke, bleibt der Rahmen auf der vorherigen Seite erhalten und wenn ich dann wieder auf die vorherige Seite klicke, "zwinkert" der Rahmen nur mal kurz.
procedure TFotoBook.DrawBorder;
begin // erst Rahmen entfernen if Assigned(LeftPage) then begin with LeftPage do begin IEBitmap.Canvas.Pen.Width := 3; IEBitmap.Canvas.Pen.Mode := pmNotXor; IEBitmap.Canvas.Pen.Style := psSolid; IEBitmap.Canvas.Pen.Color := clBlue; IEBitmap.Canvas.Rectangle(0, 0, Width, Height); end; end; if Assigned(Rightpage) then begin with RightPage do begin IEBitmap.Canvas.Pen.Width := 3; IEBitmap.Canvas.pen.Mode := pmNotXor; IEBitmap.Canvas.Pen.Style := psSolid; IEBitmap.Canvas.Pen.Color := clBlue; IEBitmap.Canvas.Rectangle(0, 0, Width, Height); end; end; with CurrentPage do begin IEBitmap.Canvas.Pen.Width := 3; IEBitmap.Canvas.pen.Mode := pmCopy; IEBitmap.Canvas.Pen.Style := psSolid; IEBitmap.Canvas.Pen.Color := clBlue; IEBitmap.Canvas.Rectangle(0, 0, Width, Height); Update; end; end; Wichtig: Ich kann den Rahmen nicht mit einer festgelegten Farbe überzeichnen, da der Rahmen eventuell auf einem Bild gezeichnet wird. |
Re: Rahmen wieder löschen
Hi Luckie,
irgendwie ist mir nicht klar was Du willst? Eine alternative zu deinem Code, oder nur zeigen wie Du es machst. Na ja Hier eine alternative
Delphi-Quellcode:
procedure TForm1.Image1Click(Sender: TObject);
begin Image1.Canvas.DrawFocusRect(Image1.ClientRect); end; |
Re: Rahmen wieder löschen
Den Rahmen zeichnen ist ja kein Problem. Nur wie bekomme ich ihn wieder weg? Das ist mein Problem.
|
Re: Rahmen wieder löschen
Zitat:
|
Re: Rahmen wieder löschen
Vielleicht solltest du die beiden Bilder intern als Bitmap speichern, und diese Bitmaps nicht verändern. Dann kannst du jederzeit wieder den Originalzustand herstellen.
Edit: wider <> wieder :wall: |
Re: Rahmen wieder löschen
Ok, dann will ich wieder einen weißen Rahmen:
Delphi-Quellcode:
Aber da habe ich den gleichen "Zwinker"-Effekt, wie oben beschrieben.
procedure TFotoBook.DrawBorder;
begin // erst Rahmen entfernen if Assigned(LeftPage) then begin with LeftPage do begin IEBitmap.Canvas.Pen.Width := 3; IEBitmap.Canvas.Pen.Style := psSolid; IEBitmap.Canvas.Pen.Color := clWhite; IEBitmap.Canvas.Rectangle(0, 0, Width, Height); end; end; if Assigned(Rightpage) then begin with RightPage do begin IEBitmap.Canvas.Pen.Width := 3; IEBitmap.Canvas.Pen.Style := psSolid; IEBitmap.Canvas.Pen.Color := clWhite; IEBitmap.Canvas.Rectangle(0, 0, Width, Height); end; end; with CurrentPage.IEBitmap do begin Canvas.Pen.Width := 3; Canvas.Pen.Style := psSolid; Canvas.Pen.Color := clBlue; Canvas.Rectangle(0, 0, CurrentPage.Width, CurrentPage.Height); end; end; |
Re: Rahmen wieder löschen
Du könntest es doch mit DrawFocusRect machen, oder willst Du eine durchgehende farbige Linie?
Delphi-Quellcode:
Müsstest Dir nur merken welches den Focus hat und die die Funktion ein zweites mal aufrufen.
procedure TForm1.Image1Click(Sender: TObject);
begin (Sender as TImage).Canvas.DrawFocusRect((Sender as TImage).ClientRect); end; erstes Mal markiert zweites Mal demarkiert |
Re: Rahmen wieder löschen
Hallo,
wäre es nicht noch einfacher, TShapes hinter die Bilder zu legen? Die Shapes sollten dabei etwas größer als die Bilder sein, ihre Sichtbarkeit könnte man etwa so steuern:
Delphi-Quellcode:
Rahmenfarbe und -dicke lassen sich über die Eigenschaften von TShape.Pen beeinflussen.
LeftShape.Visible := Assigned(LeftPage) and (CurrentPage = LeftPage);
RightShape.Visible := Assigned(RightPage) and (CurrentPage = RightPage); Gruß Hawkeye |
Re: Rahmen wieder löschen
Ich wollte einen durchgehenden Rahmen, da man ihn besser sieht. Aber wo ist mein Denkfehler in meinem Code? Warum "zwinkert" der Rahmen und verschwindet nicht, obwohl ich doch beide Seiten erst mit einem weißen Rahmen übermale bevor ich den Rahmen für die aktuelle Seite male?
@Hawkeye: Das wäre auch eine Möglichkeit, muss ich mal drüber nachdenken. Ich hab's, es hat ein Repaint gefehlt. :wall: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:08 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