Entwickler-Ecke
Sonstiges (Delphi) - Fehler liegt nicht im Programmtext, wo dann?
Matclou - Di 24.11.09 16:36
Titel: Fehler liegt nicht im Programmtext, wo dann?
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 - 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".... [...] |
:dunce:
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 - 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:
Delphi-Quelltext
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:
Delphi-Quelltext
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 - 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 - 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 - 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 - 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 - Di 24.11.09 20:23
[OT]Wieso heißt die Klasse Kuh, wenn sie Fische läd oO[/OT]
ffgorcky - 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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!