| Autor | Beitrag | 
| Matclou 
          Beiträge: 24
 
 
 
 
 | 
Verfasst: Di 24.11.09 15:36 
 
Man stelle sich folgendes vor:
 Ich habe zwei Units, eine Hauptunit und eine andere zum erzeugen einer Kuh [Bilddatei]. Das ist ja weithin bekannt als "Objektorientiertes Programmieren"....
 Nun habe ich bereits eine funktionierende Version des Programmtext vorlesen und ich habe mir gedacht: Versuch ich das nochmal alleine von Hand, habe alles gemacht, was passiert: Nichts.
 Dann habe ich mal den Programmiertext mit dem Text aus dem funktionierenden Programm verglichen und festgestellt und habe festgestellt: Sie sind vollkommen identisch!
 Wo kann denn der Fehler dann liegen? Hinweis: Es scheint i-wie der Wechsel zwischen den Units nicht zu funktionieren. Anweiseungen aus der ersten Units (z.b. bei mir jetzt Hintergrundfarbe ändern) akzeptiert das Programm noch ohne zu murren, bei einem Klick "Kuh/Bilddatei" erzeugen, reagiert das Programm allerdings widerrum nicht...
 ---Moderiert von  Narses: Beiträge zusammengefasst ---
 [Warnung] mKuh.pas(15): Methode 'Create' verbirgt virtuelle Methode vom Basistyp 'TImage'
 Das wird angezeigt... | 
|  | 
| Robert.Wachtel 
          Beiträge: 895
 Erhaltene Danke: 7
 
 Windows 7 Ultimate x64
 D5 Ent, D7 Arch, RAD Studio 2010 Pro, VS 2008
 
 | 
Verfasst: Di 24.11.09 15:42 
 
	  |  Matclou hat folgendes geschrieben  : |  	  | [...] Ich habe zwei Units, eine Hauptunit und eine andere zum erzeugen einer Kuh [Bilddatei]. Das ist ja weithin bekannt als "Objektorientiertes Programmieren".... [...] | 
   Da ist wieder das Kristallkugelproblem: woher sollen wir wissen, was Du gemacht hast?
 	  | Zitat: |  	  | [...] Es scheint i-wie der Wechsel zwischen den Units nicht zu funktionieren. [...] | 
 Was ist ein "Wechsel zwischen den Units"? Und was heisst "nicht funktionieren"? | 
|  | 
| Matclou  
          Beiträge: 24
 
 
 
 
 | 
Verfasst: Di 24.11.09 15:45 
 
Moderiert von  Narses: Komplett-Zitat des letzten Beitrags entfernt. Mit Wechsel meine ich: Sobald die Hauptunit auf die Kuhunit zu greifen will. passiert nichts mehr.
 D.h. es gibt einen Button, und bei einem Klick auf diesen sollte eben eigentlich eine Kuh erscheinen... Mom. ich poste den Text mal:
 Hauptunit:
 												| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 18:
 19:
 20:
 21:
 22:
 23:
 24:
 25:
 26:
 27:
 28:
 29:
 30:
 31:
 32:
 33:
 34:
 35:
 36:
 37:
 38:
 39:
 40:
 41:
 42:
 43:
 44:
 45:
 46:
 
 | unit mHaupt; interface
 
 uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls,mKuh;
 
 
 type
 Tgui = class(TForm)
 BtNeueKuh: TButton;
 procedure FormActivate(Sender: TObject);
 procedure BtNeueKuhClick(Sender: TObject);
 private
 
 public
 
 end;
 
 var
 gui: Tgui;
 Kuh:Tkuh; implementation
 
 {$R *.dfm}
 
 
 
 procedure Tgui.BtNeueKuhClick(Sender: TObject);
 begin
 Kuh:=TKuh.create(gui);Kuh.Parent:=gui;
 
 Kuh.Left:= random(gui.clientWidth-120);
 Kuh.Top:=random(gui.clientheight-120);
 Kuh.Show;
 end;
 
 procedure Tgui.FormActivate(Sender: TObject);
 begin
 randomize;
 color :=$005B9D1B;
 end;
 end.
 |  "Kuh"-Unit:
 			Moderiert von									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 18:
 19:
 20:
 21:
 22:
 23:
 24:
 25:
 26:
 27:
 28:
 29:
 30:
 31:
 32:
 33:
 34:
 35:
 36:
 37:
 38:
 39:
 40:
 41:
 42:
 43:
 44:
 45:
 46:
 47:
 48:
 49:
 
 | unit mKuh;  interface
 uses
 ExtCtrls,Classes;
 
 type
 TKuh = class(TImage)
 
 private
 FFarbe:String;
 
 
 public
 constructor create(Aowner:TComponent);
 
 
 end;
 
 
 implementation
 
 constructor TKuh.create(Aowner:TComponent);
 Var a:Integer;
 begin
 a:= random(4);
 inherited create (Aowner);
 case a of 0: begin
 FFarbe := 'rot';
 picture.loadfromfile('Bilder/Fisch1.bmp');
 end;
 1: begin
 FFarbe := 'gelb';
 picture.loadfromfile('Bilder/Fisch2.bmp');
 end;
 2:begin
 FFarbe := 'lila';
 picture.LoadFromFile('Bilder/Fisch3.bmp');
 end;
 3: begin
 FFarbe := 'weiss';
 picture.LoadFromFile('Bilder/Fisch4.bmp');
 end;
 
 
 end;
 transparent:=true;
 end;
 end.
 |   Klabautermann: Code- durch Delphi-Tags ersetzt. | 
|  | 
| baka0815 
          Beiträge: 489
 Erhaltene Danke: 14
 
 Win 10, Win 8, Debian GNU/Linux
 Delphi 10.1 Berlin, Java, C#
 
 | 
Verfasst: Di 24.11.09 15:54 
 
Ich vermute, du hast folgendes selbst geschrieben:
 		                       Delphi-Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 
 | typeTgui = class(TForm)
 BtNeueKuh: TButton;
 procedure FormActivate(Sender: TObject);
 procedure BtNeueKuhClick(Sender: TObject);
 private
 
 public
 
 end;
 |  Dann fehlt vermutlich die Zuordnung der Methoden zum Event. Wenn man in der Delphi IDE doppelt auf einen Knopf klickt wird nicht nur der Prozedur-Rumpf erstellt, sondern in der *.dfm Datei auch noch die Zuordnung vorgenommen.
 Du hast jetzt entweder die Möglichkeit, die Methoden selbst zuzuordnen oder in der GUI doppelt auf die Komponenten zu klicken und evtl. den Code umzukopieren.
 Zuweisen sähe z.B. so aus:
 		                       Delphi-Quelltext 
 									| 1:2:
 
 |   Self.OnActivate := FormActivate;BtNeueKuh.OnClick := BtNeueKuhClick;
 |  | 
|  | 
| Matclou  
          Beiträge: 24
 
 
 
 
 | 
Verfasst: Di 24.11.09 15:57 
 
Oha, das hört sich richtig an, es kann sehr gut sein, dass ich da etwas gelöscht und wieder eingefügt habe usw....
 Wo müsste das zuweisen denn passieren? Auch unter Type`?
 | 
|  | 
| Robert.Wachtel 
          Beiträge: 895
 Erhaltene Danke: 7
 
 Windows 7 Ultimate x64
 D5 Ent, D7 Arch, RAD Studio 2010 Pro, VS 2008
 
 | 
Verfasst: Di 24.11.09 15:59 
 
	  |  baka0815 hat folgendes geschrieben  : |  	  | [...] Du hast jetzt entweder die Möglichkeit, die Methoden selbst zuzuordnen oder in der GUI doppelt auf die Komponenten zu klicken [...] | 
 | 
|  | 
| Matclou  
          Beiträge: 24
 
 
 
 
 | 
Verfasst: Di 24.11.09 16:01 
 
	  |  Robert.Wachtel hat folgendes geschrieben  : |  	  | 	  |  baka0815 hat folgendes geschrieben  : |  	  | [...] Du hast jetzt entweder die Möglichkeit, die Methoden selbst zuzuordnen oder in der GUI doppelt auf die Komponenten zu klicken [...] | 
 | 
 Klar, habe ich gelesen    Bedenke aber: Ich bin Anfänger, und nehme im Zweifel immer das einfachere...    Und das klang jetzt so als wär es einfacher...
 Meint er mit denn mit "auf die Komponenten klicken" das im Objektinspektor bei den Methoden??
 ---Moderiert von  Narses: Beiträge zusammengefasst ---
 Ah, sehr gut, toll wie ihr sowas immer herausfindet^^
 Ich habs mit dem Klick auf die methoden im Objektinspektor (bzw. auf die Kompenenten) probiert, es ging!
 Ich danke euch allen für die schnelle und gute Hilfe!   | 
|  | 
| Bergmann89 
          Beiträge: 1742
 Erhaltene Danke: 72
 
 Win7 x64, Ubuntu 11.10
 Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
 
 | 
Verfasst: Di 24.11.09 19:23 
 
[OT]Wieso heißt die Klasse Kuh, wenn sie Fische läd oO[/OT] _________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
 | 
|  | 
| ffgorcky 
          Beiträge: 573
 
 WIN XP/2000 & 7Prof (Familie:Win95,Win98)
 
 
 | 
Verfasst: Mi 25.11.09 07:18 
 
	  |  Matclou hat folgendes geschrieben  : |  	  | Wo müsste das zuweisen denn passieren? Auch unter Type`? | 
 Das zuweisen würde ich immer unter FormOnCreate  machen.
 Also einfach einmal einen Doppelclick auf eine freie Fläche Deines Fensters, dann erscheint diese Procedure. | 
|  | 
| baka0815 
          Beiträge: 489
 Erhaltene Danke: 14
 
 Win 10, Win 8, Debian GNU/Linux
 Delphi 10.1 Berlin, Java, C#
 
 | 
Verfasst: Do 26.11.09 14:07 
 | 
|  | 
| Xentar 
          Beiträge: 2077
 Erhaltene Danke: 2
 
 Win XP
 Delphi 5 Ent., Delphi 2007 Prof
 
 | 
Verfasst: Do 26.11.09 16:05 
 
_________________ PROGRAMMER: A device for converting coffee into software.
 | 
|  |