Autor Beitrag
D. Annies
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: Mi 26.12.07 22:15 
Hi, Delpher,
mit dem folgenden Code mache ich per Timer ein Bild sichtbar und es soll dann wieder unsichtbar sein:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure TForm1.Timer1Timer(Sender: TObject);
var tempform  : TForm;
    bild      : TJpegImage;
begin
  if home[length(home)] <> '/' then home := home + '/';
  bild := TJPEGImage.create; bild.loadfromfile(home + 'Schluessel.jpg');
  tempform := Tform.Create(self); tempform.WindowState := wsmaximized;
    image3.Parent := tempform;
    image3.Picture.Graphic := bild; image3.setbounds(10,10,980,680);
    Image3.Visible := true;
    tempform.Visible := true;
  //    application.MessageBox('(wegen Zeitüberschreitung!)', 'Neuanmeldung');
      messagedlgpos('Zeitüberschreitung!', mtInformation, [mbOk], 0,450,530);
    timer1.Enabled := false;
    image3.parent := form1;
    bild.Free;
  tempform.Release; //nicht: tempform.Free;
  form1.passwd(self);   // timer1 !
end;


Aber leider "scheint" es auf dem Formular, auf dem sich Groupboxen befinden, die dicht aneinander liegen, noch "durch", das heißt, ich kann noch "Reste" des Bildes sehen, obwohl es ja verschwunden sein soll.
Wer weiß, was ich da noch verkehrt mache?

Danke für Hilfe,
Detlef A.
Lossy eX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1048
Erhaltene Danke: 4



BeitragVerfasst: Do 27.12.07 09:31 
Also ich muss gestehen, dass ich den Code etwas schräg finde. Zu mal die Formatierung auch etwas sehr gewöhnungsbedürftig ist. ;)

Aber wenn du ein Bild auf Image.Picture.Graphic zuweist wird intern Assign aufgerufen was dafür sorgt, dass das Bild kopiert wird. Also wenn du es bei einem Image löschen möchtest solltest du nil auf Graphic zuweisen.

Bei dem Image: Ich weiß nicht welcher tiefere Sinn dahinter steckt aber ich würde dir empfehlen für jedes Formular eine eigene Komponente anzulegen und diese nicht zwischen den Formularen hin und her zu schieben. Selbst wenn es Problemlos funktioniert kann das leicht zu Verwirrungen führen, wenn du deinen Code später mal wieder siehst.

_________________
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.
D. Annies Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: Do 27.12.07 10:33 
Hi, Lossy eX,

Volltreffer, vielen Dank für deine Hilfe - man beachte: eine einzige Antwort! Aber sie ist richtig. Jetzt weiß ich nur noch nicht genau, wie ich deinen Rat umsetze, die Image-Komponente nicht zwischen den Formularen " hin- und her zu schieben". Mal etwas nachdenken ... 8) falls du noch eine Idee hast ...

Gruß, Detlef
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Do 27.12.07 14:52 
@Mods: Bitte seid doch so gut, und löscht diesen Post. Um user profile iconD. Annies' willen.


Zuletzt bearbeitet von Yogu am Do 27.12.07 20:54, insgesamt 3-mal bearbeitet
D. Annies Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: Do 27.12.07 20:09 
Ich stelle mir gerade vor, dass noch ca. 40 andere die nicht einmal lustige Einlassung von yogu gelesen haben könnten... Solch ein Verhalten ist nach meinen bisherigen Erfahrungen mit diesem Forum einfach - indiskutabel!

Grußlos!
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Do 27.12.07 20:20 
Was soll ich denn sonst machen, außer darauf zu warten, bis ein Moderator meinen Post löscht oder sonst was passiert? Selber löschen kann ich meine Beiträge nicht, und ich habe eben etwas falsch gelesen. Ich bin doch auch nur ein Mensch!
D. Annies Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: Fr 28.12.07 09:14 
Hi, Yogu,

deine Entschuldigung nehme ich gerne an, da ist wohl etwas richtig schief gelaufen. Ist jetzt für mich wieder ok.

Gruß, Detlef
Lossy eX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1048
Erhaltene Danke: 4



BeitragVerfasst: Fr 28.12.07 09:29 
Hallo D. Annies. Ich weiß nicht genau was du mit dem Image vor hast und ob es dort noch einen tieferen Sinn dahinter gibt deswegen Muss ich einfach mal ins Blaue schießen. Was ich meinte ist folgendes. Du benutzt kurzzeitige eine Komponente die eigentlich woanders hin gehört. Das sollte man eher vermeiden. Wegen meiner kann man so etwas auch in die Kategorie Programmiergnigge stecken. ;)

Viel klarer getrennt wäre es, wenn du bei deinem selbst erstellten Formular ein eigenes TImage verpasst. Zu mal du dann auch kein seperates TJPEGImage mehr benötigen würdest. Was obendrein auch noch Speicher sparen würde, da das Bild nur noch ein mal im Speicher wäre. Also als Code gesehen in etwas so.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
var
  TempForm: TForm;
  Image: TImage;
begin
  Timer1.Enabled := false;

  TempForm := TForm.Create(self); 
  try
    TempForm.WindowState := wsmaximized;
    Image := TImage.Create(TempForm);
    Image.Parent := TempForm;
    Image.Picture.LoadFromFile();
    Image.SetBounds(10,10,980,680);

    TempForm.Show;

    messagedlgpos('Zeitüberschreitung!', mtInformation, [mbOk], 0,450,530);
  finally
    TempForm.Free;
  end;
end;


Wobei noch eine kleine Anmerkung. Wenn du den Timer nur benötigst um Zeitverzögert eine Methode aufzurufen, dann ist es besser, wenn du den Timer auch gleich als erstes Deaktivierst. Sollte ein Fehler in der Methode sein etc. dann kann es passieren, dass der Timer nicht deaktiviert werden kann und er somit dauerhaft ausgelöst wird.

_________________
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.
D. Annies Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: Fr 28.12.07 10:44 
Hi, Lossy Ex,

vielen Dank für deine Nachsorge. Ich glaube, das habe ich jetzt besser verstanden!

Gruß, Detlef A.