AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Rahmen wieder löschen

Ein Thema von Luckie · begonnen am 7. Mai 2007 · letzter Beitrag vom 7. Mai 2007
Antwort Antwort
Benutzerbild von Luckie
Luckie

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

Rahmen wieder löschen

  Alt 7. Mai 2007, 13:01
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:
procedure TfrmMain.PageClick(Sender: TObject);
begin
  FotoBook.CurrentPage := TImageEnVect(Sender);
  FotoBook.DrawBorder;
end;
CurrentPage ist die Seite, die gerade angeklickt wurde.

Delphi-Quellcode:
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;
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.
Wichtig: Ich kann den Rahmen nicht mit einer festgelegten Farbe überzeichnen, da der Rahmen eventuell auf einem Bild gezeichnet wird.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
uwewo

Registriert seit: 14. Jul 2004
Ort: Karlsruhe
479 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Rahmen wieder löschen

  Alt 7. Mai 2007, 13:11
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;
Uwe
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Rahmen wieder löschen

  Alt 7. Mai 2007, 13:14
Den Rahmen zeichnen ist ja kein Problem. Nur wie bekomme ich ihn wieder weg? Das ist mein Problem.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Rahmen wieder löschen

  Alt 7. Mai 2007, 13:20
Zitat:
Wichtig: Ich kann den Rahmen nicht mit einer festgelegten Farbe überzeichnen, da der Rahmen eventuell auf einem Bild gezeichnet wird.
Wer soll denn noch wissen, wenn du mit pmCopy einen Strich zeichnest, was da vorher drunter war
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von Tormentor32
Tormentor32

Registriert seit: 27. Okt 2005
Ort: Düsseldorf
369 Beiträge
 
Delphi XE5 Professional
 
#5

Re: Rahmen wieder löschen

  Alt 7. Mai 2007, 13:22
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
Richard Mahr
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Rahmen wieder löschen

  Alt 7. Mai 2007, 13:28
Ok, dann will ich wieder einen weißen Rahmen:
Delphi-Quellcode:
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;
Aber da habe ich den gleichen "Zwinker"-Effekt, wie oben beschrieben.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
uwewo

Registriert seit: 14. Jul 2004
Ort: Karlsruhe
479 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Rahmen wieder löschen

  Alt 7. Mai 2007, 13:49
Du könntest es doch mit DrawFocusRect machen, oder willst Du eine durchgehende farbige Linie?

Delphi-Quellcode:
procedure TForm1.Image1Click(Sender: TObject);
begin
 (Sender as TImage).Canvas.DrawFocusRect((Sender as TImage).ClientRect);
end;
Müsstest Dir nur merken welches den Focus hat und die die Funktion ein zweites mal aufrufen.

erstes Mal markiert
zweites Mal demarkiert
Uwe
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#8

Re: Rahmen wieder löschen

  Alt 7. Mai 2007, 13:59
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:
LeftShape.Visible := Assigned(LeftPage) and (CurrentPage = LeftPage);
RightShape.Visible := Assigned(RightPage) and (CurrentPage = RightPage);
Rahmenfarbe und -dicke lassen sich über die Eigenschaften von TShape.Pen beeinflussen.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Rahmen wieder löschen

  Alt 7. Mai 2007, 14:01
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort


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 09:38 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