AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Visible eines Image=true aber trotzdem unsichtbar
Thema durchsuchen
Ansicht
Themen-Optionen

Visible eines Image=true aber trotzdem unsichtbar

Ein Thema von dino · begonnen am 17. Jul 2006 · letzter Beitrag vom 2. Okt 2006
Antwort Antwort
Seite 4 von 5   « Erste     234 5      
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#31

Re: Visible eines Image=true aber trotzdem unsichtbar

  Alt 19. Jul 2006, 21:45
Das ist ein Äpfel-und-Birnen-Vergleich.

Er hat ein Image. Du hast eine Form.

Das Canvas einer Form wird ständig überschrieben, immer wenn Repaint; aufgerufen wird.

Das Canvas eines Images wird nicht automatisch überschrieben.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Hawkeye219

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

Re: Visible eines Image=true aber trotzdem unsichtbar

  Alt 19. Jul 2006, 21:47
Zitat von Sascha L:
Wenn man auf dem Canvas vom Formular ständig etwas zeichnet, weil man z.B. einen Farbverlauf als Hintergrund haben möchte, dann passiert es ständig, dass die Komponenten nicht mehr sichtbar sind.
Das dürfte aber nicht passieren, wenn man nur in der Behandlungsroutine für den dafür vorgesehenen Event zeichnet: Delphi-Referenz durchsuchenTForm.OnPaint.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Sascha L

Registriert seit: 4. Jun 2004
Ort: Hamm
390 Beiträge
 
Delphi 2006 Professional
 
#33

Re: Visible eines Image=true aber trotzdem unsichtbar

  Alt 19. Jul 2006, 21:54
@3_of_8: wieso? er hat doch geschrieben, dass er auf dem Formular zeichnet. Von dem Image war doch nie die Rede. Das Image ist transparent geschaltet und liegt auf dem Formular, auf dem er zeichnet.

@Hawkeye219: Richtig, aber wenn man die Fenstergröße verändert (Resize), dann wird aber nicht neu gezeichnet, sodass man manuell noch mal die Zeichnen-Prozedur aufrufen muss und dann passiert's.
Sascha
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#34

Re: Visible eines Image=true aber trotzdem unsichtbar

  Alt 19. Jul 2006, 22:04
Das hat er aber schön kryptisch geschrieben...

Naja, wenn er unbedingt auf sein Formular schreiben muss, muss er halt OnPaint und OnResize überschreiben.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Hawkeye219

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

Re: Visible eines Image=true aber trotzdem unsichtbar

  Alt 19. Jul 2006, 22:10
Zitat von Sascha L:
Richtig, aber wenn man die Fenstergröße verändert (Resize), dann wird aber nicht neu gezeichnet, sodass man manuell noch mal die Zeichnen-Prozedur aufrufen muss.
Bei einem (manuellen oder durch das Programm verursachten) Resize wird der OnPaint-Handler des Formulars im Rahmen der Behandlung von WM_PAINT aufgerufen. Ein manueller Aufruf ist nicht notwendig (gerade mit Delphi 6 getestet). Hast du ein kleines Beispielprogramm, welches das von dir beschriebene Verhalten aufweist?

Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#36

Re: Visible eines Image=true aber trotzdem unsichtbar

  Alt 19. Jul 2006, 22:12
Na dann reicht OnPaint. Oder auch gleich Repaint.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
dino

Registriert seit: 15. Jul 2006
Ort: Bad Münstereifel
627 Beiträge
 
Delphi 5 Professional
 
#37

Re: Visible eines Image=true aber trotzdem unsichtbar

  Alt 20. Jul 2006, 00:44
jetzt wo ich auf der anderen festplatte auf dem neuen Windows ein neues besseres Delphi (2005) habe, hab ich den alten quellcode nicht mehr

er gin aber in etwa so:
Delphi-Quellcode:
var i:Integer;
keys:array[0..127] of Boolean;
xf,yf:array[1..3] of Integer;
time,xp,yp,xs,ys,z,bier,i1,live,x1,y1,rl,xsz,ysz:integer;
feld:array[1..18,1..16] of Integer;
bmp0,bmp1,bmp2,bmp3,bmp4,bmp5: Tbitmap;
[...]
for x1:=0 to 19 do
for y1:=0 to 17 do begin
if (x1=0)or(y1=17)or(x1=19) then form1.canvas.Draw(x1*32+70-xs,y1*32+70-ys,bmp4) else begin
if Feld[x1,y1]=0 then form1.canvas.Draw(x1*32+70-xs,y1*32+70-ys,bmp0);
if Feld[x1,y1]=1 then form1.canvas.Draw(x1*32+70-xs,y1*32+70-ys,bmp1);
if Feld[x1,y1]=2 then form1.canvas.Draw(x1*32+70-xs,y1*32+70-ys,bmp2);
if Feld[x1,y1]=3 then form1.canvas.Draw(x1*32+70-xs,y1*32+70-ys,bmp3);
if Feld[x1,y1]=4 then form1.canvas.Draw(x1*32+70-xs,y1*32+70-ys,bmp4);
if Feld[x1,y1]=5 then form1.canvas.Draw(x1*32+70-xs,y1*32+70-ys,bmp5);
if Feld[x1,y1]=6 then form1.canvas.Draw(x1*32+70-xs,y1*32+70-ys,bmp1);
if (Feld[x1,y1]=7) and (bier=0) then form1.canvas.Draw(x1*32+70-xs,y1*32+70-ys,bmp2);
if (Feld[x1,y1]=7) and (bier<>0) then form1.canvas.Draw(x1*32+70-xs,y1*32+70-ys,bmp0);
if Feld[x1,y1]=8 then form1.canvas.Draw(x1*32+70-xs,y1*32+70-ys,bmp0);
if Feld[x1,y1]=9 then form1.canvas.Draw(x1*32+70-xs,y1*32+70-ys,bmp0);

end;

[...]
image1.Top:=xs;
image1.loadfromfile('bild.bmp');
(in den [...] stehen nur ein haufen ifs und son zeug)

jedenfalls hat das im Gegensatz zu bei der PaintBox in Delphi 2005 win32
auch geklappt, nur dass wie gesagt mein Image dauernd überzeichnet wurde, ich hab das mal immer wieder mit refresh glaub ich war das wieder hervorheben lassen, aber das Programm war dann viel langsamer und es flackerte(das bild des Images)
ich arbeite im Moment paar Tutorials durch, wodurch ichs vielleicht auch in Griff kriege, aber da ihr schon diskutiert, könntet ihr mir vllt auch helfen...

Danke im vorraus
MFG Dino
  Mit Zitat antworten Zitat
Hawkeye219

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

Re: Visible eines Image=true aber trotzdem unsichtbar

  Alt 20. Jul 2006, 09:04
Dino, wenn du auf dem Canvas des Formulars zeichnen möchtest, solltest du das nur in einer Behandlungsroutine für das Ereignis Delphi-Referenz durchsuchenTForm.OnPaint tun. Damit verhinderst du, daß deine Zeichnung durch andere Ereignisse übermalt wird.

Markiere im Objektinspektor das Formular, gehe auf die Seite "Ereignisse" und klicke doppelt in das Feld neben "OnPaint". Dann sollte Delphi eine neue leere Prozedur im Editorfenster erzeugen oder in die vorhandene Routine springen, falls schon eine da war. Nur in dieser Routine sollten deine Zeichenbefehle stehen. Beachte aber, daß diese Routine bei jedem (Neu-)Zeichnen des Formulars aufgerufen wird. Wenn du dort ständig Bilder von der Festplatte lädst, bremst du deine gesamte Anwendung enorm aus.

Zum Anzeigen von Bildern stellt Delphi die Komponente Delphi-Referenz durchsuchenTImage zur verfügung, zum Zeichnen die Komponente Delphi-Referenz durchsuchenTPaintBox. Du solltest dich intensiv mit diesen Komponenten befassen, bevor du an deinem Programm weiterarbeitest. Vielleicht helfen dir die Tutorials, welche dir an anderer Stelle bereits empfohlen wurden.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Thorben77

Registriert seit: 22. Okt 2004
359 Beiträge
 
#39

Re: Visible eines Image=true aber trotzdem unsichtbar

  Alt 20. Jul 2006, 09:22
Delphi-Quellcode:
if Feld[x1,y1]=0 then form1.canvas.Draw(x1*32+70-xs,y1*32+70-ys,bmp0);
if Feld[x1,y1]=1 then form1.canvas.Draw(x1*32+70-xs,y1*32+70-ys,bmp1);
if Feld[x1,y1]=2 then form1.canvas.Draw(x1*32+70-xs,y1*32+70-ys,bmp2);
if Feld[x1,y1]=3 then form1.canvas.Draw(x1*32+70-xs,y1*32+70-ys,bmp3);
if Feld[x1,y1]=4 then form1.canvas.Draw(x1*32+70-xs,y1*32+70-ys,bmp4);
if Feld[x1,y1]=5 then form1.canvas.Draw(x1*32+70-xs,y1*32+70-ys,bmp5);
if Feld[x1,y1]=6 then form1.canvas.Draw(x1*32+70-xs,y1*32+70-ys,bmp1);
if (Feld[x1,y1]=7) and (bier=0) then form1.canvas.Draw(x1*32+70-xs,y1*32+70-ys,bmp2);
if (Feld[x1,y1]=7) and (bier<>0) then form1.canvas.Draw(x1*32+70-xs,y1*32+70-ys,bmp0);
if Feld[x1,y1]=8 then form1.canvas.Draw(x1*32+70-xs,y1*32+70-ys,bmp0);
if Feld[x1,y1]=9 then form1.canvas.Draw(x1*32+70-xs,y1*32+70-ys,bmp0);
Dafür gibt es eine wesentlich elegantere Methode:
Delphi-Quellcode:
case Feld[x1, y1] of
  1, 6: form1.canvas.Draw(x1*32+70-xs,y1*32+70-ys,bmp1);
  2: form1.canvas.Draw(x1*32+70-xs,y1*32+70-ys,bmp2);
  3: form1.canvas.Draw(x1*32+70-xs,y1*32+70-ys,bmp3);
  4: form1.canvas.Draw(x1*32+70-xs,y1*32+70-ys,bmp4);
  5: form1.canvas.Draw(x1*32+70-xs,y1*32+70-ys,bmp5);
  7:
    begin
      if Bier = 0 then
        Form1.Canvas.Draw(x1*32+70-xs,y1*32+70-ys,bmp2)
      else
        Form1.Canvas.Draw(x1*32+70-xs,y1*32+70-ys,bmp0);
    end;
  8, 9: form1.canvas.Draw(x1*32+70-xs,y1*32+70-ys,bmp0);
end;
  Mit Zitat antworten Zitat
dino

Registriert seit: 15. Jul 2006
Ort: Bad Münstereifel
627 Beiträge
 
Delphi 5 Professional
 
#40

Re: Visible eines Image=true aber trotzdem unsichtbar

  Alt 2. Okt 2006, 14:25
nun habe ich 2 verschiedene Paintboxen! warum übermalt die eine paintbox die canvas des anderen???
und hab immernoch Probleme damit, dass der Inhalt der Paintbox sichtbar bleiben muss
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 5   « Erste     234 5      


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 23:59 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