| Autor |
Beitrag |
Martello
      
Beiträge: 131
WIN 2000
TP, C, Delphi 1.0, Turbo Delphi 2006, Delphi 7
|
Verfasst: So 22.03.09 23:51
Hallo,
ich unternehme gerade erste Versuche in Windows-Graphik:
Delphi-Quelltext 1: 2: 3: 4: 5:
| procedure TForm1.FormPaint(Sender: TObject); begin with Canvas do Polyline([Point(0, 0), Point(50, 0), Point(75, 50), Point(25, 50), Point(0, 0)]); end; |
Der Code stammt aus der Turbo 2006 Hilfe und erzeugt die Fehlermeldung im Titel.
Unter TForm Elemente findet man tatsächlich kein 'FormPaint'.
Wo liegt also hier der Fehler?
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: So 22.03.09 23:53
Moin!
Mach mal im Objektinspektor einen Doppelklick auf dem Ereignis OnPaint des Formulars.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Martello 
      
Beiträge: 131
WIN 2000
TP, C, Delphi 1.0, Turbo Delphi 2006, Delphi 7
|
Verfasst: Mo 23.03.09 00:01
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 23.03.09 00:04
Moin!
Martello hat folgendes geschrieben : | | Dann öffnet sich rechts daneben ein leeres Listenfeld... |
Wo auch immer du da hinklickst, es ist nicht der ObjektInspektor und das entsprechende Ereignis...  Zeig mal einen Screenshot.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Martello 
      
Beiträge: 131
WIN 2000
TP, C, Delphi 1.0, Turbo Delphi 2006, Delphi 7
|
Verfasst: Mo 23.03.09 00:12
Narses hat folgendes geschrieben : | Moin!
Martello hat folgendes geschrieben : | | Dann öffnet sich rechts daneben ein leeres Listenfeld... | Wo auch immer du da hinklickst, es ist nicht der ObjektInspektor und das entsprechende Ereignis... Zeig mal einen Screenshot.
cu
Narses |
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:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;
type TForm1 = class(TForm) private public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormPaint(Sender: TObject); begin with Canvas do Polyline([Point(0, 0), Point(50, 0), Point(75, 50), Point(25, 50), Point(0, 0)]); end; end. |
Ich fürchte das Anfängerfehler ist gröber, als der Fehler, den Du vermutest. Aber Delphi ist mir fremder als es einfach ist...
Aber das muß auch heute nicht mehr gelernt werden. Ich muß ins Bett....
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 23.03.09 00:13
Moin!
Wie die Unit aussieht, ist klar.  Du solltest einen Snapshot davon machen, wo du hinklickst und was dann passiert.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
jaenicke
      
Beiträge: 19336
Erhaltene Danke: 1751
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 23.03.09 00:15
Dein Problem ist, dass du den Code einfach nur kopiert hast. Du musst das Ereignis OnPaint aber auch mit der Prozedur verknüpfen. Lösch die Zeilen (und nur die Zeilen) einmal wieder und mach dann was Narses gesagt hat.
Dann siehst du wie das normalerweise läuft. Du landest dann nach dem Doppelklick auf OnPaint in der Unit, die dann so aussieht: 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:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;
type TForm1 = class(TForm) procedure FormPaint(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormPaint(Sender: TObject); begin end;
end. |
|
|
Martello 
      
Beiträge: 131
WIN 2000
TP, C, Delphi 1.0, Turbo Delphi 2006, Delphi 7
|
Verfasst: Mo 23.03.09 00:23
Einloggen, um Attachments anzusehen!
|
|
jaenicke
      
Beiträge: 19336
Erhaltene Danke: 1751
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 23.03.09 00:26
Und genau in das Feld rechts neben OnPaint sollst du doppelt klicken.
Am besten lösch deine Zeilen vorher wieder, ich weiß nicht, ob das sonst klappt, weil der Quelltext ja so nicht richtig ist.
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 23.03.09 00:27
Moin!
jaenicke hat folgendes geschrieben : | | Und genau in das Feld rechts neben OnPaint sollst du doppelt klicken. |
Jup, genau davon rede ich die ganze Zeit.
jaenicke hat folgendes geschrieben : | | Am besten lösch deine Zeilen vorher wieder, ich weiß nicht, ob das sonst klappt, weil der Quelltext ja so nicht richtig ist. |
Sollte ohne Löschen klappen, er wird ein Pickup mit der Methode machen.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Martello 
      
Beiträge: 131
WIN 2000
TP, C, Delphi 1.0, Turbo Delphi 2006, Delphi 7
|
Verfasst: Mo 23.03.09 00:29
jaenicke hat folgendes geschrieben : | Und genau in das Feld rechts neben OnPaint sollst du doppelt klicken.
Am besten lösch deine Zeilen vorher wieder, ich weiß nicht, ob das sonst klappt, weil der Quelltext ja so nicht richtig ist. |
Aha.
Ich habe verstanden, aber jetzt muß ich wirklich ins Bett 
|
|
jaenicke
      
Beiträge: 19336
Erhaltene Danke: 1751
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 23.03.09 00:35
Narses hat folgendes geschrieben : | Sollte ohne Löschen klappen, er wird ein Pickup mit der Methode machen.  |
Nein, weil Delphi nichts von der Methode weiß, denn sie ist ja oben nicht eingetragen. Entweder gibt es schon beim Doppelklick einen Fehler oder es wird einfach eine zweite identische Methode neu erstellt (was ich eher vermute).
In jedem Fall gehts etwas schief.
// EDIT:
Delphi 7 erstellt eine gleiche leere Methode daneben. Beim Speichern wird diese leere Methode zusammen mit der Deklaration oben wieder entfernt, es ist also als würde die eigene Methode nicht existieren. Kompilieren lässt es sich dann natürlich erst, wenn die zweite Methode manuell gelöscht wird.
Delphi 2006 erstellt ebenfalls eine neue leere Methode, ist dann aber etwas verwirrt und lässt beim Speichern beide Methoden stehen, die neue davon leer.
|
|
|