| Autor |
Nachricht |
lauraelsa
Hält's aus hier
Beiträge: 4
|
Verfasst: Di 06.09.11 11:36
wir sind relativ delphi unerfahren udn haben von unserem dozenten den auftrag ein delphiprogramm zu erstellen, leider scheitern wir an der erstellung einer zeichenfläche und finden den fehler nicht, vielleicht kann jemand weiterhelfen.
viele grüße und vielen dank
laura
Moderiert von Narses: Delphi-Tags hinzugefügt
|
| |
|
|
Werbung ausblenden? Dann registriere Dich kostenlos.
Weitere Gründe für eine Registrierung.
Werbung ausblenden? Dann registriere Dich kostenlos.
Weitere Gründe für eine Registrierung.
|
|
Narses
       

Beiträge: 8372
Erhaltene Danke: 244
W2k, WXPpro
TP3 - D7pro
|
Verfasst: Di 06.09.11 11:42
Moin und  im Forum!
Welche Fehlermeldung wird denn ausgegeben und an welcher Stelle im Code tritt der Fehler auf?
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
| |
|
|
lauraelsa 
Hält's aus hier
Beiträge: 4
|
Verfasst: Di 06.09.11 11:43
es tritt keine fehlermeldung auf und es gibt keinen fehler im code, aber es zeigt die zeichenfläche die wir mit canvas erstellen wollten leider auch nicht an
|
| |
|
|
Narses
       

Beiträge: 8372
Erhaltene Danke: 244
W2k, WXPpro
TP3 - D7pro
|
Verfasst: Di 06.09.11 11:45
Moin!
lauraelsa hat folgendes geschrieben : | | es tritt keine fehlermeldung auf und es gibt keinen fehler im code, aber es zeigt die zeichenfläche die wir mit canvas erstellen wollten leider auch nicht an |
OK.  Dann bleibt aber immer noch die Frage, an welcher Stelle im Code das Problem auftritt?
Tipp: Der erste Schritt zum Beheben von Fehlern ist sich klar zu machen, wo genau das Problem liegt.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
| |
|
|
lauraelsa 
Hält's aus hier
Beiträge: 4
|
Verfasst: Di 06.09.11 11:52
ich vermute dass da irgendwo der fehler liegt
Moderiert von Narses: Delphi-Tags hinzugefügt
|
| |
|
|
Horschdware
      
Beiträge: 724
Erhaltene Danke: 53
Win XP professional, Win 7 Professional x64, Ubuntu
Delphi 5, Delphi 2005 Personal, Delphi 2006, Delphi XE, C++ Builder 5, PHP, SAP R/3
|
Verfasst: Di 06.09.11 12:03
Was sollte der Code denn tun und was tut er bei dir tatsächlich?
An sich schaut der in Ordnung aus und sollte so funktionieren (gestricheltes Kreuz zeichnen?).
_________________ Delphi: XE - OS: Windows 7 Professional x64
|
| |
|
|
Narses
       

Beiträge: 8372
Erhaltene Danke: 244
W2k, WXPpro
TP3 - D7pro
|
Verfasst: Di 06.09.11 12:06
Moin!
Habe den Code mal in ein neues Projekt kopiert:
Funktioniert einwandfrei:
Was sollte denn passieren?
cu
Narses
Einloggen, um Attachments anzusehen!
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
| |
|
|
FinnO
      
Beiträge: 1040
Erhaltene Danke: 27
Windows 7 Prof. , UBUNTU
RAD Studio 2010 Prof.
|
Verfasst: Di 06.09.11 12:21
Moin,
ich hatte schon ein paar mal Probleme mit Canvas im OnCreate, kann aber nicht beschwören, ob mir das nicht bei einer Paintbox passiert ist. Versucht mal das Gitter in einem anderen Event zu zeichnen (nur so testweise), z.B. im OnShow oder sowas.
_________________ Ich nutze EdgeMonkey, weil ich auf schwules Pink stehe :-*
|
| |
|
|
lauraelsa 
Hält's aus hier
Beiträge: 4
|
Verfasst: Di 06.09.11 13:09
hey, vielen dank
genau dass soll passieren, komischerweise tut es das im gesamten programm leider nicht, wir haben das allerdings auf einem tabsheet auf einem pagecontrol drauf, kann es vielleicht auch daran liegen?
viele grüße
|
| |
|
|
Horschdware
      
Beiträge: 724
Erhaltene Danke: 53
Win XP professional, Win 7 Professional x64, Ubuntu
Delphi 5, Delphi 2005 Personal, Delphi 2006, Delphi XE, C++ Builder 5, PHP, SAP R/3
|
Verfasst: Di 06.09.11 13:18
Ja, genau das ist die Lösung
Das Problem bei der Sache ist, dass du direkt auf Canvas zeichnet. Verdeckt nun ein anderes Objekt (z.B. anderes Fenster) das Objekt, auf dem du gezeichnet hast (hier: TImage), dann wird ein Neuzeichnen des Objekts ausgelöst. Die Canvas-Zeichnung wird dabei überschrieben und NICHT neugezeichnet - das hast du ja nur beim Erstellen des Formulars umgesetzt.
Hier sind nun zwei Lösungen denkbar:
a) Du zeichnest erst, wenn das Tabsheet gewechselt wird, d.h. wenn die Grafik angezeigt werden soll
b) du zeichnest beim Erstellen des Formulars in eine temporäre Grafik (TPicture) und weist diese deinem TImage zu.
Lösung a) ist schneller umgesetzt, hat aber wieder den Nachteil, dass die Zeichnung "verschwindet", wenn sich ein anderes Fenster darüberschiebt. Sie würde nach einem erneuten Tabwechsel jedoch wieder erscheinen.
_________________ Delphi: XE - OS: Windows 7 Professional x64
|
| |
|
|
Narses
       

Beiträge: 8372
Erhaltene Danke: 244
W2k, WXPpro
TP3 - D7pro
|
Verfasst: Di 06.09.11 14:06
Moin!
Horschdware hat folgendes geschrieben : | | Das Problem bei der Sache ist, dass du direkt auf Canvas zeichnet. |
Ja, das ist nicht so schön, das ist mir auch direkt aufgefallen, aber da es im Test kein Problem machte, hab ich´s auch erstmal so gelassen.
Zur Erläuterung: Eine TImage-Komponente ist eigentlich zum Anzeigen eines statischen Bildes gedacht, für selbst gezeichnete Sachen sollte man besser eine TPaintBox verwenden.  Allerdings, wie so oft, hat das alles seine Vor- und Nachteile. Wenn man z.B. ein Bild zwar selbst "malt", dieses sich aber nur selten verändert, dann ist eine TPaintBox nicht so optimal, weil hier u.U. sehr oft ein Neuzeichnen fällig wird, was Performance kostet (wenn das Bild sehr komplex ist). Deshalb kann man durchaus auch ein TImage für selbst gezeichnetes verwenden, allerdings sollte man dann auch auf das in dem Kontainer enthaltene Bild zeichnen und nicht auf dem Formular (was dann eben nur temporär ist und ggfs. wieder verschwinden kann).
Hier mal der Code so umgebaut, dass auf einem in dem TImage-Kontainer angelegten Bild gezeichnet wird:
Hier muss dann im restlichen Code noch darauf geachtet werden, dass das Canvas des enthaltenen Bitmaps (also ImageBestellung.Picture.Bitmap.Canvas) verwendet wird und nicht das Canvas des Kontainers (ImageBestellung.Canvas).
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
| |
|
|
|