Autor Beitrag
smepal
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 68

Win XP, Linux Mandbrake,SUSE 10.1, SUSE 9 PE, DEBIAN, Win 2000 Pro, Win XP Pro
Delphi
BeitragVerfasst: Di 27.12.05 19:39 
ich weiß das thema is alt aber ich kriegs nit gebacken also:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
down := true;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
if down then
canvas.lineto (x,y);
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
down := false;
end;

so damit kann ich ja einfach auf das formular zeichnen. Allerdings verschwindet das ja beim maximieren usw

habe überall gelesen ich sollte doch auf die onpaint der Paintbox zeichnen. Aber wie soll ich das jetzt so anstellen???


Moderiert von user profile iconGausi: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Di 27.12.2005 um 18:45
Manfred
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 90



BeitragVerfasst: Fr 30.12.05 00:07 
Hi!
Die PaintBox möchte bei jedem OnPaint-Ereignis neu gezeichnet werden. Hierzu müsstest Du Dir merken, welche bewegungen die Maus bislang gemacht hat und beim Eintreten des Ereignisses neu zeichnen.
Ich empfehle anstelle der PaintBox die Komponente TImage zu nutzen. Diese sorgt automatisch für das gewünschte Refreshing.

_________________
Computer können schneller rechnen als wir, deshalb machen sie auch mehr Fehler
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Sa 31.12.05 12:48 
Stop, stop, stop! TImage ist nicht zum Zeichnen da!

Speichere das aktuell gezeichnete Bild nach jedem onMouseMove in einem TBitmap
und lasse das TBitmap in OnPaint wieder auf die Paintbox zeichen. Fertig,

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 31.12.05 12:50 
Erklärung und Lösung: www.michael-puff.de/...wsFunktioniert.shtml

Aber man sollte mal die Suche bemühen. Keine Ahnung, wie oft ich den Link innerhalb der letzten Woche schon gepostet habe. :roll:
Manfred
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 90



BeitragVerfasst: Mo 02.01.06 01:03 
Hi!
@GTA-Place:
Was heißt "TImage ist nicht zum Zeichnen da!"?
Wozu besitzt TImage die Eigenschaft Canvas mit ihren Methoden MoveTo, LineTo etc, wenn nicht zum zeichnen?

_________________
Computer können schneller rechnen als wir, deshalb machen sie auch mehr Fehler
Muetze1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 346



BeitragVerfasst: Mo 02.01.06 01:23 
Steht selbst in der Hilfe, das es nur zum Anzeigen von Elementen dient. Ein TImage ist niemals für Zeichenoperationen gedacht und verhält sich dadurch auch mehr als schlecht in der Richtung.

Und der Canvas wird vom TImage an der Stelle nur lesend veröffentlicht, damit man einheitlich, unabhängig vom angezeigten Typ (TMetafile, TIcon, etc) auf ein Canvas zugreifen kann, um sich dessen Inhalt zu bedienen. Dabei im Sinne des kopierens, nicht des aktiven veränderns.

/EDIT: Das die Canvas Eigenschaft nur lesend ist, hab ich nicht begründet, sondern warum sie existiert. Dass die Instanz nicht verändert werden kann ist der eigentliche Grund, aber das kam hier wohl nicht so rüber bzw. man kann das "nur lesend" darauf beziehen...

_________________
49 63 68 68 61 62 65 6B 65 69 6E 65 41 68 6E 75 6E 67 21


Zuletzt bearbeitet von Muetze1 am Mo 02.01.06 04:09, insgesamt 1-mal bearbeitet
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Mo 02.01.06 01:54 
Canvas wird nur read-only veröffentlich, weil man den Objektpointer nicht verändern darf. Das wird auch bei der PaintBox nicht anders sein. Natürlich kannst du TImage zum Zeichnen brauchen; nur ist sie nicht für diesen Zweck gemacht. Du kannst beispielsweise die Grösse des TImages nicht ohne weiteres ändern, das ganze ist selten flimmerfrei, zudem kann TImage viel mehr als nur Bitmaps zeichnen, weswegen auch nicht gesagt ist, dass dir .Canvas in jedem Fall zur Verfügung steht.
Du kannst ein TImage fester Grösse ohne Probleme brauchen um Linien zu zeichnen oder Texte draufzuschreiben. Du solltest dich aber in der Regel schon bemühen mit der Kombination TPaintBox/TBitmap/BitBlt zu arbeiten (siehe Beitrag von Luckie), vor allem wenn der Inhalt interaktiv ist.