Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Mainmenu (https://www.delphipraxis.net/2393-mainmenu.html)

Hansa 21. Jan 2003 10:40


Mainmenu
 
Hi,

ich bin gerade dabei meine zig kleinen in eine einzige Großbaustelle umzuwandeln. :spin: Also verschiedene kleinere Programme in einem Menü-system zusammenzufassen. Also habe ich jetzt ein paar Menüpunkte und Untermenüs angelegt. Bereits beim ersten Menüpunkt, dem ich eine Aufgabe zuordnen wollte kommt beim anclicken eine Exception. Und zwar hier :

Code:
procedure TForm1.TestClick (Sender: TObject);
begin
  Form2.FormShow (Sender);
end;
Da fehlt doch bestimmt irgendein create oder so ? Ist das so überhaupt richtig, das formShow in Onclick des Menuitems reinzusetzen ? Finde dazu nirgendwo ein kleines Bsp.

Gruß
Hansa

Jan 21. Jan 2003 10:56

schonmal mit
Code:
uses unit2;
versucht?
Gruß
Jan

Hansa 21. Jan 2003 11:01

Re: Mainmenu
 
Hi,

Zitat:

Zitat von Hansa
Bereits beim ersten Menüpunkt, dem ich eine Aufgabe zuordnen wollte kommt beim anclicken eine Exception. Und zwar hier :

Code:
procedure TForm1.TestClick (Sender: TObject);
begin
  Form2.FormShow (Sender);
end;

Lest ihr denn immer nur die Hälfte. :roll: Es kommt eine Exception !!!! Hätte ich das Uses nicht richtig, wäre das Programm nicht mal compiliert worden. Die form2 ist schon in einer anderen Unit, wie Du bemerkt hast.

Gruß
Hansa

Jan 21. Jan 2003 11:16

Hallo Hansa,
entschuldige, hätte ich wissen sollen :?
Naja, aber jetzt mal zu dem wie ich es gemacht habe:
ich habe in unit2 eine eigene Klasse definiert.
Diese Klasse wird in unit1 wie folgt bereitgestellt:

Code:
procedure TForm1.FormCreate(Sender: TObject);
begin
     var1:=tklassenname.create;
end;
In dieser Klasse ist eine Prozedur, welche ein form2.show oder form2.hide beinhaltet. Diese Prozedur kann ich dann in Unit1 Aufrufen.
Ich habe keine Ahnung ob das jetzt viel zu umständlich ist, aber bei mir klappt es zumindest.
Greetz
Jan

Hansa 21. Jan 2003 11:47

Hi Jan,

brauchst Dich doch nicht gleich zu entschuldigen. :oops: Hier ist wohl jeder froh, überhaupt was zu seinem Thema zu hören. Guck mal nach wieviele unbeantwortete Beiträge es gibt. Wobei allerdings in den meisten Fällen die Frage so unglücklich formuliert wurde, daß keiner was damit anfangen kann.

zum Thema :

Zitat:

Zitat von Jan
ich habe in unit2 eine eigene Klasse definiert.

Kannst Du mir da mal den Code dazu geben, als Beispiel. Ich weiß nicht genau wie Du das meinst. Mit dem Kram komme ich immer durcheinander. Kann mir das einfach nicht behalten, wo was genau hin muß. Siehe dieses Thema. 8)

Gruß
Hansa

Luckie 21. Jan 2003 11:48

Mach mal das Sender hinter FormShow weg. Das habe ich da noch nie gesehen.

Jan 21. Jan 2003 11:57

Hallo Hansa,
also eine Klasse wird so erstellt:


Code:
type
    TDatensatz = class(TObject)
                      private
                             pose:integer;
                      public
                            Dateipfad:string;
                            Karte : tKarteikarte;
                            constructor create;
                            procedure Schreiben;
                            procedure Lesen;
                            function datencheck:boolean;
                            function Suchen(suchbegriff:shortstring; Itemindex, start:integer):boolean;
                            procedure NeueDatei;
                            procedure SetzePos(p:integer);
                            function LesePos:integer;
                            Function DateiEnde:integer;
                            procedure Vor;
                            procedure Zurueck;
                          end;
Das ist jetzt eine Klasse aus einem älteren Programm von mir.
Jetzt könntest du da z.B. eine procedure showform einfügen.
in der dann nur steht: form2.show .
weiterhin dann musst du in der unit1 in die uses klausel unit2 aufnehmen und eine Variable in folgender Weise deklarieren:

Code:
var
 myclass: tDatensatz; //in meinem Falle
Dann im oncreate-event von form1 folgendes:

Code:
myclass:=tdatensatz.create;
Also das ist jetzt alles einfach nur streng so kopiert wie es bei mir funktioniert, aber eigentlich sollte es auch ohne eine Klasse gehen.
Aber Klassen sind doch immer mal ganz nützlich, oder?
Viel Erfolg
Jan

Hansa 21. Jan 2003 12:13

Hi,

@Luckie : das mit dem Sender stimmt schon, er compiliert ja auch.

jetzt habe ich es einfach mal so machen wollen
Code:
Form2.Create ()
Nur ich habe keinen Parameter vom Typ Tcomponent, der da hin muß. Ich mache das da irgendwie verkehrt rum. Jetzt muß ich auch noch weg. Es ist zum Mäuse melken.

Gruß
Hansa

Hansa 21. Jan 2003 12:22

Hi,

@Jan : Du erweiterst doch nur die bestehende Klasse um einige Methoden. Dann würde ich doch immer noch die Methoden von der abgeleiteten Klasse benutzen können. Nee, das da bringt mich nicht weiter. Ich will ja nicht ein eigenes Show odeer Create von irgendwas ableiten. Die Form reicht völlig so wie sie ist.

Gruß
Hansa

............. Husch und weg !

eddy 21. Jan 2003 12:29

Hallo Hansa,

ich weiß zwar nicht, ob's weiterhilft, aber ein ähnliches Problem funktioniert bei mir ohne Fehler.

Ein Form FBrowser hatte mehr Funktionen, als dort hinein gehörten.

Also hab ich ein neues Projekt angelegt, nennt sich FBrwRun.

Da gibt's einen SpeedButton

Delphi-Quellcode:
procedure TFBrwRun.SpeedButton1Click(Sender: TObject);
begin
  FBrowser.Show;
end;
mit FBrowser.FormStyle := fsNormal (im OI definiert)

FBrowser ist unter uses eingebunden. Funktioniert ohne Create

Vielleicht nützt es was.

mfg
eddy


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