Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   HyperButtons bzw HyperPanels erstellen (Delphi Anfänger) (https://www.delphipraxis.net/170363-hyperbuttons-bzw-hyperpanels-erstellen-delphi-anfaenger.html)

Flashco 13. Sep 2012 14:44

Delphi-Version: 7

HyperButtons bzw HyperPanels erstellen (Delphi Anfänger)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Guten Tag.

Ich habe in meinem Informatik Kurs eine Aufgabe bekommen, in der ich einen HyperButton erstellen soll.
Der Theoretische Teil den ich mir bisher zusammengestellt habe ist:
Panel erzeugen, dem dann die fähigkeiten des Buttons vererben und erweitern. (Ich hoffe das ist auch Richtig..)

Mein Problem ist jetzt eher der Praktische Teil, da ich andauernd Fehlermeldungen bekomme, wie z.B bei diesen Zeilen:

Code:
  BEGIN
    inherited Create{(AOwner)};
    THyperPanel.Width := 100;
    THyperPanel.Height := 100;
    THyperPanel.Color:= clred;
  end;
Dazu kommen diese Fehlermeldungen:

Code:
[Fehler] Unit2.pas(17): Undefinierter Bezeichner: 'Width'
[Fehler] Unit2.pas(18): Undefinierter Bezeichner: 'Height'
[Fehler] Unit2.pas(19): Undefinierter Bezeichner: 'Color'
[Fehler]

Ich füge noch den Ordner als Anhang an (Falls das hilft) und hoffe auf schnelle antwort.
MfG Flashco.

implementation 13. Sep 2012 15:13

AW: HyperButtons bzw HyperPanels erstellen (Delphi Anfänger)
 
Du schreibst
Delphi-Quellcode:
THyperPanel.Width
.
THyperPanel ist eine Klasse und hat nunmal keine Klasseneigenschaft "Width".
Aber da du die Eigenschaften ja erbst, kannst du lieber gleich einfach
Delphi-Quellcode:
Width := ...;
oder
Delphi-Quellcode:
Self.Width := ...;
schreiben - dann läuft's auch ;)

THyperPanel ist ja nur die Klasse, und wenn du einfach
Delphi-Quellcode:
THyperPanel.Width
schreibst, weiß der Compiler doch nicht, welches HyperPanel du meinst. Das, das gerade erstellt wird? Dann musst du das auch so schreiben, könnte etwa
Delphi-Quellcode:
THyperPanel(self).Width
oder
Delphi-Quellcode:
(self as THyperPanel).Width
aussehen. Und nunja, der Cast ist hier ziemlich redundant, also am besten gleich einfach
Delphi-Quellcode:
Self.Width
oder
Delphi-Quellcode:
Width
.

Flashco 13. Sep 2012 15:43

AW: HyperButtons bzw HyperPanels erstellen (Delphi Anfänger)
 
Zunächst einmal: Danke für die schnelle Antwort.
Jedoch:
Ich habe jetzt in den entsprechenden Zeilen versucht "THyperPanel" durch "self" zu ersetzten, jedoch kommt immernoch die selbe Fehlermeldung.

mkinzler 13. Sep 2012 15:59

AW: HyperButtons bzw HyperPanels erstellen (Delphi Anfänger)
 
Delphi-Quellcode:
type
 THyperPanel = class ( TPanel)
   public
     constructor Create(AOwner:TComponent);override;
     procedure HyperPanelClick;
  end;

implementation

constructor THyperPanel.Create(AOwner: TComponent);
BEGIN
    inherited Create(AOwner);
    Width := 100;
    Height := 100;
    Color:= clred;
    BorderStyle:= bsSingle;

//    BevelWidth:=3;
end;

Flashco 13. Sep 2012 16:09

AW: HyperButtons bzw HyperPanels erstellen (Delphi Anfänger)
 
@mkinzler

Bei diesem Lösungsvorschlag bekomme ich die bereits vorhandenen Fehlermeldungen:

[Fehler] Unit2.pas(17): Undefinierter Bezeichner: 'Width' (usw)

UND dazu noch die Meldungen:
Code:
[Fehler] Unit2.pas(6): Undefinierter Bezeichner: 'TPanel'
[Fehler] Unit2.pas(8): Undefinierter Bezeichner: 'TComponent'
[Fehler] Unit2.pas(16): Zu viele Parameter

mkinzler 13. Sep 2012 16:14

AW: HyperButtons bzw HyperPanels erstellen (Delphi Anfänger)
 
Ergänze die Uses um ExtCtrls

DeddyH 13. Sep 2012 16:15

AW: HyperButtons bzw HyperPanels erstellen (Delphi Anfänger)
 
Dann fehlt wohl mindestens ExtCtrls in der uses-Klausel.

[edit] Classes anscheinend auch, sonst wäre zumindest TComponent bekannt. [/edit]

Flashco 13. Sep 2012 16:20

AW: HyperButtons bzw HyperPanels erstellen (Delphi Anfänger)
 
Um Sicherzugehen:
Meint ihr die Uses in Unit1? Falls ja: Stehen bereits drin.
Falls nein: Soll ich "Uses" in Unit 2 hinzufügen?

[edit] Durch Testen hat sich DIE Frage geklärt, ich musste eine Uses List in Unit2 einfügen. Dies löst die Probleme zunächst bis Height.
Schonmal riesiegen dank dafür. Als nächstes scheint jeodch auch "clRed" sowie "bsSingle" (Für bsSingle bräuchte ich vieleicht auch eine kleine erklärung was dieses genau macht bzw BorderStyle ansich, da ich dies (Auf gut Glück) aus der Aufgabe heraus kopiert habe obwohl ich nicht weiß was es macht(Ebenso das zur Zeit ausgeklammerte BevelWidth: = 3 ; ) ) ein undefinierter Bezeichner zu sein.

DeddyH 13. Sep 2012 16:23

AW: HyperButtons bzw HyperPanels erstellen (Delphi Anfänger)
 
Woher sollen wir denn wissen, was in Unit1 bzw Unit2 steht/deklariert wurde?

mkinzler 13. Sep 2012 16:25

AW: HyperButtons bzw HyperPanels erstellen (Delphi Anfänger)
 
In der Unit, in der der Fehler auftritt: Unit2

@Detlef: Der Source ist im 1. Beitrag angehängt

DeddyH 13. Sep 2012 16:31

AW: HyperButtons bzw HyperPanels erstellen (Delphi Anfänger)
 
Hatte ich gar nicht gesehen. Man könnte aber auch den Komponenten-Experten benutzen, das vermeidet solche Probleme oder sollte es zumindest.

Flashco 13. Sep 2012 16:40

AW: HyperButtons bzw HyperPanels erstellen (Delphi Anfänger)
 
Nungut, da drängt sich mir die Frage auf "Was ist das "Komponenten-Experten"" ?

mkinzler 13. Sep 2012 16:46

AW: HyperButtons bzw HyperPanels erstellen (Delphi Anfänger)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Komponente->Neue Komponente ...

Flashco 13. Sep 2012 16:53

AW: HyperButtons bzw HyperPanels erstellen (Delphi Anfänger)
 
Ich werd mich bei Gelegenheit mal genauer damit befassen.

Meine weiteren Fragen beziehen sich nun auf:

-Was genau habe ich jetzt mit
Code:
constructor THyperPanel.Create(AOwner: TComponent);
BEGIN
    inherited Create(AOwner);
    Width := 100;
    Height := 100;
    Color:= clred;
    BorderStyle:= bsSingle;
    BevelWidth:=3;
erreicht? Ist das neue "HyperPanel" jetzt vorhanden wenn ich das Programm starte, vorrausgesetzt, ich behebe die restlichen Fehler?

-Wie gebe ich jetzt diesem Panel eine Funktion, also anders gesagt, welcher Procedure(?)-Befehl wird für "OnMouseDown" gebraucht? (Wie sähe dieser aus?)
Ich habe es mit:
Code:

  Procedure TMain.HyperPanelClick (Sender: TObject);
  begin
    close;
  end;
probiert, bekomme jedoch da die aussage dass ein ";" erwartet wird statt dem "." bei " Procedure TMain.HyperPanelClick (Sender: TObject);"

DeddyH 13. Sep 2012 17:02

AW: HyperButtons bzw HyperPanels erstellen (Delphi Anfänger)
 
Das HyperPanel ist nur dann vorhanden, wenn Du es als Komponente installierst und auf Dein Formular packst oder wenn Du es von Hand instanzierst.

Flashco 13. Sep 2012 17:30

AW: HyperButtons bzw HyperPanels erstellen (Delphi Anfänger)
 
Also um sicherzu gehen, dass ichs richtig verstanden habe.

Ich muss das jetzt geschrieben HyperPanel (Für den Fall, dass es sofort im Programm vorhanden sein soll) beispielsweise als "OnCreate" einfügen?

für mich sähe das dann eigentlich so aus:

Code:
procedure THyperPanelCreate(Sender: TObject);
  begin
    TMain.Create.THyperPanel; override;
  end;
Jedoch werden dann noch "wirkliche Parameter" verlangt. Was für Parameter? Die Koordinaten? Wo werden diese reingeschrieben? (Muss bestimmt nach ziemlichen Anfängerfragen klingen, jedoch wurden meine bisher geschriebenen Programme vom ServerAdmin auf den Schulrechnern aus mir unerklärlichen Gründen gelöscht (weshalb ich nicht auf diese zurückgreifgen kann um mir da Rat zu holen) und so lang sind die Ferien noch nicht her, dass ich längere Zeit kein Informatik hatte.)

mkinzler 13. Sep 2012 17:45

AW: HyperButtons bzw HyperPanels erstellen (Delphi Anfänger)
 
Am Besten registrierst du die Klasse in der IDE und verwendest diese dann wie jede andere Komponente

oder

machst das im onCreate der Form.

Flashco 13. Sep 2012 18:04

AW: HyperButtons bzw HyperPanels erstellen (Delphi Anfänger)
 
Das Problem ist Folgendes: Ich weiß nicht wie ich das Panel, das ich in Unit2 erstellt habe, als "OnCreate" in Unit1 schreiben kann. Ebenso Fehlt mir das Wissen, diesem Panel dann gewünschte Befehle zuzuweisen wie einem Button. Von "Klasse in der IDE registrieren" habe ich jezt auch das erste mal gehört und weiß damit leider nichts anzufanegn :(

Unit1
Code:
unit Unit1;

interface

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

type
  TMain = class(TForm)
    THyperPanel:TPanel;
    PnTestpanel: TPanel;
    BtCLose: TButton;
    procedure THyperPanelCreate(Sender: TObject);
    procedure BtCLoseClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Main: TMain;
 
implementation

{$R *.dfm}

procedure THyperPanelCreate(Sender: TObject);
  begin
    TMain.Create.THyperPanel; override;
  end;

procedure TMain.BtCLoseClick(Sender: TObject);
begin
close;
end;

end.
Unit2
Code:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;
type
 THyperPanel = class ( TPanel)
   public
     constructor Create(AOwner:TComponent);override;
{     procedure HyperPanelClick;}
  end;

implementation

constructor THyperPanel.Create(AOwner: TComponent);
BEGIN
    inherited Create(AOwner);
    Width := 100;
    Height := 100;
    Caption:='Hyper Button';
    ParentColor:= False;
    Color:= clLime;
    BorderStyle:= bsSingle;
    BevelWidth:=3;
end;

 { Procedure TMain.HyperPanelClick (Sender: TObject);
  begin
    close;
  end;}

end.

Bummi 13. Sep 2012 18:11

AW: HyperButtons bzw HyperPanels erstellen (Delphi Anfänger)
 
Du solltest Dir mal ein Grundlagentutorial durchlesen (nicht als Angriff gemeint)

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    procedure MyOnClick(Sender: TObject);
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation
uses Unit2;
{$R *.dfm}

procedure TForm1.MyOnClick(Sender: TObject);
begin
  ShowMessage(TComponent(Sender).ClassName)
end;

procedure TForm1.FormCreate(Sender: TObject);
var
 ht:THyperPanel;
begin
     ht:=THyperPanel.Create(self);
     ht.Parent := Self;
     ht.OnClick := MyOnClick;
end;

end.

mkinzler 13. Sep 2012 18:11

AW: HyperButtons bzw HyperPanels erstellen (Delphi Anfänger)
 
Doppelklick auf das Formular, dann erzeugt er die Methode und verknüpft diese mit dem Event
Delphi-Quellcode:
unit Unit1;

interface

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

type
  TMain = class(TForm)
    THyperPanel:TPanel;
    PnTestpanel: TPanel;
    BtCLose: TButton;
    //procedure THyperPanelCreate(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure BtCLoseClick(Sender: TObject);
  private
    { Private-Deklarationen }
    HyperPanel: THyperPanel;
  public
    { Public-Deklarationen }
  end;

var
  Main: TMain;
 
implementation

{$R *.dfm}

{procedure THyperPanelCreate(Sender: TObject);
  begin
    TMain.Create.THyperPanel; override;
  end;}

procedure TMain.FormCreate(Sender: TObject);
begin
    HyperPanel := THyperPanel.Create( Self);
    HyperPanel.Parent := Self;
    HyperPanel.Top := 10;
    HyperPanel.Left := 10;
end;

procedure TMain.BtCLoseClick(Sender: TObject);
begin
close;
end;

end.

Flashco 13. Sep 2012 21:52

AW: HyperButtons bzw HyperPanels erstellen (Delphi Anfänger)
 
@Bummi: Keine Angst ich nehms nicht als Angriff, habe ja bereits selbst gesagt, dass ich nicht all zu Informiert bin. Ich kann nur leider nicht auf meine alten Programme zurückgreifen, da diese gelöscht wurden.

Vielen Dank euch allen nochmal, ihr wart mir ne große und vor allem schnelle Hilfe. Der Hyperbutton wird nun Richtig angezeigt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:51 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 by Thomas Breitkreuz