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/)
-   -   Prozedur von Unit2 auf Unit1 ausführen? (https://www.delphipraxis.net/186367-prozedur-von-unit2-auf-unit1-ausfuehren.html)

GroZ 27. Aug 2015 14:57

Delphi-Version: 5

Prozedur von Unit2 auf Unit1 ausführen?
 
Hey,

Ich möchte eine Prozedur die in Unit2 geschrieben ist auf die Paintbox anwenden welche sich in Unit1 befindet. Im Internet stand:
Delphi-Quellcode:
Unit Unit1
Uses Unit2;
Geht aber trotzdem nicht. Hat jemand eine Idee?

SProske 27. Aug 2015 15:01

AW: Prozedur von Unit2 auf Unit1 ausführen?
 
Wie genau definiert sich denn "geht nicht"?

GroZ 27. Aug 2015 15:01

AW: Prozedur von Unit2 auf Unit1 ausführen?
 
Er kennt die Paintbox nicht

baumina 27. Aug 2015 15:05

AW: Prozedur von Unit2 auf Unit1 ausführen?
 
Ohne Quellcode = Stochern im Nebel

SProske 27. Aug 2015 15:06

AW: Prozedur von Unit2 auf Unit1 ausführen?
 
Dann solltest du die Paintbox als Parameter beim Methodenaufruf übergeben...

GroZ 27. Aug 2015 15:08

AW: Prozedur von Unit2 auf Unit1 ausführen?
 
Unit2
Delphi-Quellcode:
unit UnitFormen;

interface

uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
     Dialogs, ExtCtrls, Unit1;

type
  TPaint = class             //Mutterklasse TPaint
  private
    FFarbe : TColor;
    FStiftbreite : integer;
    procedure SetStiftbreite(const Value: integer);
    procedure SetFarbe(const Value: TColor);
  public
    procedure Rechteck;
    property Farbe : TColor read FFarbe write SetFarbe;
  end;

  TZeichnen = class(TPaint)  //Zeichnenklasse für Koordinaten
  private
   // Fx1,Fy1,Fx2,Fy2 : integer;
  end;

  TVieleck = class(TZeichnen) //Klasse für Vieleck
  private
    constructor Create (x1,y1,x2,y2 : integer);
  end;

implementation

procedure TPaint.SetFarbe(const Value: TColor);
begin
  if FFarbe <> Value then                      //Farbe ändern
  begin
    FFarbe := Value;
    //Invalidate;
  end;
end;

procedure TPaint.SetStiftbreite(const Value: integer);
begin
  if FStiftbreite <> Value then
    begin
      FStiftbreite := Value;
      //Invalidate;
    end;
end;

procedure RechteckOnCreate(Sender: TVieleck);
var MousePos : TCursor;
    x2,y2 : integer;
begin
  X2 :=200;
  Y2 :=200;
  Paintbox1.Canvas.Rectangle(MousePos,MousePos,X2,Y2);
end;
end.
Unit1
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    PaintBox1: TPaintBox;
    procedure PaintBox1Paint(Sender: TObject);
    procedure PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure PaintBox1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private-Deklarationen }
    draw : boolean;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
  Paintbox1.Canvas.Brush.Color := clWhite;
  Paintbox1.Canvas.FillRect(Paintbox1.ClientRect);
end;

procedure TForm1.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  draw := true;
  Paintbox1.Canvas.MoveTo(X,Y);
end;

procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if draw then
    begin
      Paintbox1.Canvas.LineTo(X,Y);
    end;
end;

procedure TForm1.PaintBox1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  draw := false;
end;

end.
Ich weiß es ist purer Spaghetti Code^^

SProske 27. Aug 2015 15:15

AW: Prozedur von Unit2 auf Unit1 ausführen?
 
Theoretisch hast du in Unit2 Zugriff über Form1.Paintbox1 - wobei das nicht zu empfehlen ist, schließlich würde die Unit2 dann nur funktionieren, wenn es irgendwo eine Form1 mit einer Paintbox1 gibt.

Ich würde empfehlen, die Paintbox als Klassenvariable deiner Helferklasse zu halten und beim Create mit zu übergeben.

baumina 27. Aug 2015 15:27

AW: Prozedur von Unit2 auf Unit1 ausführen?
 
Zitat:

Zitat von GroZ (Beitrag 1313747)
Ich weiß es ist purer Spaghetti Code^^

Spaghetti Code ist das nicht. Ich sehe, dass du durch zusammenkopieren von Codezeilen dich gleich mal an das große Thema Klassen inkl. Vererbung wagst. Bis auf die procedure RechteckOnCreate(Sender: TVieleck), die eigentlich einer Klassen gehören sollte, und von der man noch nicht so genau weiß wohin sie mal gehören soll, schaut das doch ganz nett aus.

GroZ 27. Aug 2015 15:35

AW: Prozedur von Unit2 auf Unit1 ausführen?
 
Ne da is nix zusammenkopiert ein kollege hat mir da etwas geholfen.
Ja mein Ausbilder möchte das ich ein Paintprogramm schreibe das eigene Klassen nutzt. Ich checks gar nicht.

haentschman 27. Aug 2015 16:57

AW: Prozedur von Unit2 auf Unit1 ausführen?
 
Hallo...
Zitat:

Ja mein Ausbilder möchte das ich ein Paintprogramm schreibe das eigene Klassen nutzt.
Hat er dir auch erklärt was Klassen sind und wie man damit arbeitet? :roll: Mein Bauchgefühl sagt eher... Nöööö.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:04 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