![]() |
Re: Visible eines Image=true aber trotzdem unsichtbar
:roll: 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. |
Re: Visible eines Image=true aber trotzdem unsichtbar
Zitat:
![]() Gruß Hawkeye |
Re: Visible eines Image=true aber trotzdem unsichtbar
@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. |
Re: Visible eines Image=true aber trotzdem unsichtbar
Das hat er aber schön kryptisch geschrieben...
Naja, wenn er unbedingt auf sein Formular schreiben muss, muss er halt OnPaint und OnResize überschreiben. |
Re: Visible eines Image=true aber trotzdem unsichtbar
Zitat:
Gruß Hawkeye |
Re: Visible eines Image=true aber trotzdem unsichtbar
Na dann reicht OnPaint. Oder auch gleich Repaint.
|
Re: Visible eines Image=true aber trotzdem unsichtbar
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:
(in den [...] stehen nur ein haufen ifs und son zeug)
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'); 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 |
Re: Visible eines Image=true aber trotzdem unsichtbar
Dino, wenn du auf dem Canvas des Formulars zeichnen möchtest, solltest du das nur in einer Behandlungsroutine für das Ereignis
![]() 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 ![]() ![]() Gruß Hawkeye |
Re: Visible eines Image=true aber trotzdem unsichtbar
Delphi-Quellcode:
Dafür gibt es eine wesentlich elegantere Methode:
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);
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; |
Re: Visible eines Image=true aber trotzdem unsichtbar
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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:01 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