AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Projekt mit PaintBoxen funktioniert nich wie gewollt :/
Thema durchsuchen
Ansicht
Themen-Optionen

Projekt mit PaintBoxen funktioniert nich wie gewollt :/

Ein Thema von cetinbiryoldayim · begonnen am 22. Mai 2008 · letzter Beitrag vom 22. Mai 2008
 
cetinbiryoldayim

Registriert seit: 6. Mai 2008
33 Beiträge
 
#1

Projekt mit PaintBoxen funktioniert nich wie gewollt :/

  Alt 22. Mai 2008, 21:03
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:
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.
  Mit Zitat antworten Zitat
 


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 03:58 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