Autor |
Beitrag |
Matclou
      
Beiträge: 24
|
Verfasst: Di 24.11.09 16: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 16: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 16: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:
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. |
Moderiert von 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 16:54
Ich vermute, du hast folgendes selbst geschrieben:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| type Tgui = 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 16: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 16: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 17: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 20: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 08: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 15:07
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Do 26.11.09 17:05
_________________ PROGRAMMER: A device for converting coffee into software.
|
|