Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Projekt mit PaintBoxen funktioniert nich wie gewollt :/ (https://www.delphipraxis.net/114285-projekt-mit-paintboxen-funktioniert-nich-wie-gewollt.html)

cetinbiryoldayim 22. Mai 2008 21:03


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:
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.
:feuerchen:

mkinzler 22. Mai 2008 21:04

Re: Projekt funktioniert nich wie gewollt :/
 
Und was geht nicht?

cetinbiryoldayim 22. Mai 2008 21:06

Re: Projekt funktioniert nich wie gewollt :/
 
sry :)
die Rechtecke werden in x und y Richtung nicht verschoben

mkinzler 22. Mai 2008 21:07

Re: Projekt funktioniert nich wie gewollt :/
 
Versuch mal .Paint zu überschreiben

cetinbiryoldayim 22. Mai 2008 21:11

Re: Projekt funktioniert nich wie gewollt :/
 
wie soll das genau gehen :)

SirThornberry 22. Mai 2008 21:12

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. :)

cetinbiryoldayim 22. Mai 2008 21:15

Re: Projekt funktioniert nich wie gewollt :/
 
Zitat:

Zitat von SirThornberry
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. :)

+Paintbox
sry genauer gehts glaub garnicht ^^

angefügt
Zitat:

Zitat von mkinzler
Versuch mal .Paint zu überschreiben

könntest du mir sagen was du genau meinst?

[edit=SirThornberry]Beiträge zusammengeführt - zukünftig bitte NICHT pushen - Mfg, SirThornberry[/edit]

mkinzler 22. Mai 2008 21:20

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

cetinbiryoldayim 22. Mai 2008 21:27

Re: Projekt mit PaintBoxen funktioniert nich wie gewollt :/
 
Zitat:

Zitat von mkinzler
Alle Zeichen-Operationen sollte im PaintEvent durchgeführt werden, da er aufgerufen wird, wenn die Kompo neu gezeichnet werden muss

öhmm.. soll ich jetzt mein ganzes Programm in den OnPaint-Ereignis reinstecken oder wie...
weil das ganze Programm besteht großteils auch Zeichen-Funktionen

mkinzler 22. Mai 2008 21:29

Re: Projekt mit PaintBoxen funktioniert nich wie gewollt :/
 
Nein nur die Zeichenoperationen


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:55 Uhr.
Seite 1 von 2  1 2      

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