![]() |
Projekt mit PaintBoxen funktioniert nich wie gewollt :/
Hey Leute,
ich hab mal wieder ein großes Prolem für mich bzw. ein kleines Problem für euch. Ich habe folgende Anwendung programmiert, die durch Eingabe von 4 Werten (somit 2 Koordinaten, 2 Eckpunkte für ein Rechteck) ein Rechteck auf einer PaintBox darstellen soll. Sobald der Timer durch den Button6-Click enabled wird soll das Rechteck(=Balken im Programm) mit jedem Timerdurchlauf auf der X-Achse und der Y-Achse verschoben werden. zusätzliche Informationen: BalkenKoordinaten[1..8,0..4]: array of integer --> speichert maximal 8 Rechtecke (1..8 ) --> mit ihrer x-Richtung (Speicherstelle 0), --> ihren Koordinaten x1,y1,x2,y2 (Speicherstelle 1..4) FEHLER: die Rechtecke werden nicht verschoben in x und y Richtung
Delphi-Quellcode:
:feuerchen:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) PB_ViewingBox: TPaintBox; PB_BufferBox: TPaintBox; I_Background: TImage; I_Mask: TImage; I_Inhalt: TImage; Label14: TLabel; Label15: TLabel; Button1: TButton; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Button2: TButton; Timer1: TTimer; Label7: TLabel; Button3: TButton; Button4: TButton; procedure Button2Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); strict private public procedure definiereMaskundInhaltRects(); function invertiereXRichtung(p_nr:integer):integer; procedure frageXRichtung(p_nr: integer); procedure ZeichneNeu(); procedure ZeichneBackground(); procedure ZeichneMaskAndInhalt(); procedure AusgabeViewingBox(); procedure zeichneBalken(x1,y1,x2,y2: integer); end; var Form1: TForm1; anzahlBalken: integer = 0; BalkenKoordinaten: array[1..8,0..4] of integer; BackgroundZielRect: TRect; BackgroundQuellRect: TRect; MaskZielRect: array[1..8] of TRect; MaskQuellRect: array[1..8] of TRect; InhaltZielRect: array[1..8] of TRect; InhaltQuellRect: array[1..8] of TRect; BufferBoxZielRect: TRect; BufferBoxQuellRect: TRect; gedrueckteTasten: array[0..3] of boolean; geschwX: integer = 5; // Geschwindigkeit in X geschwY: integer = 1; // und Y implementation {$R *.dfm} procedure TForm1.Timer1Timer(Sender: TObject); var i: integer; begin for i:=1 to anzahlBalken do begin frageXRichtung(i); if BalkenKoordinaten[i,0] = 0 then begin BalkenKoordinaten[i,1] := BalkenKoordinaten[i,1]-geschwX; BalkenKoordinaten[i,3] := BalkenKoordinaten[i,3]-geschwX; end; if BalkenKoordinaten[i,0] = 1 then begin BalkenKoordinaten[i,1] := BalkenKoordinaten[i,1]+geschwX; BalkenKoordinaten[i,3] := BalkenKoordinaten[i,3]+geschwX; end; BalkenKoordinaten[i,2] := BalkenKoordinaten[i,2]-geschwY; BalkenKoordinaten[i,4] := BalkenKoordinaten[i,4]-geschwY; end; ZeichneNeu(); label7.caption := IntToStr(StrToInt(label7.caption)+1) end; procedure TForm1.ZeichneNeu(); begin ZeichneBackground(); ZeichneMaskAndInhalt(); AusgabeViewingBox(); end; procedure TForm1.definiereMaskundInhaltRects(); begin I_Mask.Canvas.Brush.Color := clBlack; I_Mask.Canvas.Pen.Color := clBlack; I_Mask.Canvas.Rectangle(BalkenKoordinaten[anzahlBalken,1],BalkenKoordinaten[1,2],BalkenKoordinaten[anzahlBalken,3],BalkenKoordinaten[anzahlBalken,4]); MaskZielRect[anzahlBalken] := Rect(BalkenKoordinaten[anzahlBalken,1],BalkenKoordinaten[anzahlBalken,2],BalkenKoordinaten[anzahlBalken,3],BalkenKoordinaten[anzahlBalken,4]); MaskQuellRect[anzahlBalken] := Rect(BalkenKoordinaten[anzahlBalken,1],BalkenKoordinaten[anzahlBalken,2],BalkenKoordinaten[anzahlBalken,3],BalkenKoordinaten[anzahlBalken,4]); I_Inhalt.Canvas.Brush.Color := clBlue; I_Inhalt.Canvas.Pen.Color := clBlue; I_Inhalt.Canvas.Rectangle(BalkenKoordinaten[anzahlBalken,1],BalkenKoordinaten[anzahlBalken,2],BalkenKoordinaten[anzahlBalken,3],BalkenKoordinaten[anzahlBalken,4]); InhaltZielRect[anzahlBalken] := Rect(BalkenKoordinaten[anzahlBalken,1],BalkenKoordinaten[anzahlBalken,2],BalkenKoordinaten[anzahlBalken,3],BalkenKoordinaten[anzahlBalken,4]); InhaltQuellRect[anzahlBalken] := Rect(BalkenKoordinaten[anzahlBalken,1],BalkenKoordinaten[anzahlBalken,2],BalkenKoordinaten[anzahlBalken,3],BalkenKoordinaten[anzahlBalken,4]); end; procedure TForm1.FormCreate(Sender: TObject); begin BackgroundZielRect := Rect(0,0,PB_BufferBox.Width,PB_BufferBox.Height); BackgroundQuellRect := Rect(0,0,I_Background.Width,I_Background.Height); BufferBoxZielRect := Rect(0,0,PB_ViewingBox.Width,PB_ViewingBox.Height); BufferBoxQuellRect := Rect(0,0,PB_BufferBox.Width,PB_BufferBox.Height); end; procedure TForm1.frageXRichtung(p_nr: integer); begin if BalkenKoordinaten[p_nr,1]>geschwX then begin BalkenKoordinaten[p_nr,0] := invertiereXRichtung(p_nr); end; if BalkenKoordinaten[p_nr,3]>(400-geschwX) then begin BalkenKoordinaten[p_nr,0] := invertiereXRichtung(p_nr); end; end; function TForm1.invertiereXRichtung(p_nr: integer):integer; begin if BalkenKoordinaten[p_nr,0] = 0 then begin result := 1; end; if BalkenKoordinaten[p_nr,0] = 1 then begin result := 0; end; end; procedure TForm1.zeichneBalken(x1,y1,x2,y2: integer); begin BalkenKoordinaten[anzahlBalken,1] := x1; BalkenKoordinaten[anzahlBalken,2] := y1; BalkenKoordinaten[anzahlBalken,3] := x2; BalkenKoordinaten[anzahlBalken,4] := y2; end; procedure TForm1.Button1Click(Sender: TObject); begin anzahlBalken := anzahlBalken+1; zeichneBalken(StrToInt(Edit1.Text),StrToInt(Edit2.Text), StrToInt(Edit3.Text),StrToInt(Edit4.Text)); definiereMaskundInhaltRects(); zeichneMaskAndInhalt(); end; procedure TForm1.ZeichneBackground(); begin PB_BufferBox.Canvas.CopyMode := cmSrcCopy; PB_BufferBox.Canvas.CopyRect(BackgroundZielRect, I_Background.Canvas, BackgroundQuellRect); end; procedure TForm1.ZeichneMaskAndInhalt(); var i: integer; begin for i:=1 to anzahlBalken do begin PB_BufferBox.Canvas.CopyMode := cmSrcAnd; PB_BufferBox.Canvas.CopyRect(MaskZielRect[i], I_Mask.Canvas, MaskQuellRect[i]); PB_BufferBox.Canvas.CopyMode := cmSrcPaint; PB_BufferBox.Canvas.CopyRect(InhaltZielRect[i], I_Inhalt.Canvas, InhaltQuellRect[i]); end; end; procedure TForm1.AusgabeViewingBox(); begin PB_ViewingBox.Canvas.CopyMode := cmSrcCopy; PB_ViewingBox.Canvas.CopyRect(BufferBoxZielRect, PB_BufferBox.Canvas, BufferBoxQuellRect); end; procedure TForm1.Button3Click(Sender: TObject); begin ZeichneBackground(); end; procedure TForm1.Button4Click(Sender: TObject); begin AusgabeViewingBox(); end; procedure TForm1.Button2Click(Sender: TObject); begin Timer1.Enabled := true; end; end. |
Re: Projekt funktioniert nich wie gewollt :/
Und was geht nicht?
|
Re: Projekt funktioniert nich wie gewollt :/
sry :)
die Rechtecke werden in x und y Richtung nicht verschoben |
Re: Projekt funktioniert nich wie gewollt :/
Versuch mal .Paint zu überschreiben
|
Re: Projekt funktioniert nich wie gewollt :/
wie soll das genau gehen :)
|
Re: Projekt funktioniert nich wie gewollt :/
Könntest du deinem Beitrag bitte einen aussagekräftigen Titel geben der dein Problem ansatzweise beschreibt. Das irgendwas nicht funktioniert sagt bereits die Rubrik aus und mehr sagt dein Titel momentan nicht aus. :)
|
Re: Projekt funktioniert nich wie gewollt :/
Zitat:
sry genauer gehts glaub garnicht ^^ angefügt Zitat:
[edit=SirThornberry]Beiträge zusammengeführt - zukünftig bitte NICHT pushen - Mfg, SirThornberry[/edit] |
Re: Projekt mit PaintBoxen funktioniert nich wie gewollt :/
Alle Zeichen-Operationen sollte im PaintEvent durchgeführt werden, da er aufgerufen wird, wenn die Kompo neu gezeichnet werden muss
|
Re: Projekt mit PaintBoxen funktioniert nich wie gewollt :/
Zitat:
weil das ganze Programm besteht großteils auch Zeichen-Funktionen |
Re: Projekt mit PaintBoxen funktioniert nich wie gewollt :/
Nein nur die Zeichenoperationen
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:49 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