Clipping auf Canvas?

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Antworten
Gast

Clipping auf Canvas?

Beitrag von Gast »

Hallo Leute.

Bin neu hier, das ist mein erster Beitrag. Habe folgendes Problem:

Bin von Borland Pascal 7.0 auf Lazarus umgestiegen. Musste mich erst
daran gewöhnen, dass ich nun auf Canvas zeichne, aber immerhin benutzt
Lazarus ja noch die alten Pinsel und Stifte :wink: .

Nun möchte ich aber in einem rechteckigen Bereich auf ein Canvas zeichnen.
Bei Delphi geht das wohl mit SelectClipRect(); oder so. Ich habe also nun
solch ein 'Beispiel' auf Lazarus compiliert und bekam die Fehlermeldung,
dass der Compiler die HRgn nicht kennt. Auch SelectClipRect(); kennt er nicht. Hat jemand ne Idee? Ist dringend :?

MfG Antrepolit

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

also ich würde mal sagen, einen viereckigen Bereich zeichnet man am einfachsten so:

Code: Alles auswählen

Canvas.Rectangle(x1,y1,x2,y2);

Und dabei einfach die koordinaten der beiden Eckpunkte übergeben.

Antrepolit
Beiträge: 340
Registriert: Di 12. Sep 2006, 08:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Beitrag von Antrepolit »

Hallo Monta.

ich meinte nicht ein Recteck zeichnen, sondern den Bereich, in den gezeichnet
wird, begrenzen, damit man nicht das ganze Dialogfenster (Form) zu-
zeichnen kann. Früher bei Pascal unter DOS gab es mal SetViewPort.

MfG Antrepolit

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

Ach so, da habe ich dich falsch verstanden.
Um den Bereich zu begrenzen gibts doch eigentlich eine TPaintBox, über deren Canvas dann nur in der Paintbox gezeichnet werden kann, suchst du vielleicht soetwas?
Würde dein Problem, wenn auch mit zusätzlicher Komponete eigentlich lösen, wenn ich dich nicht schon wieder missverstanden hab.

Cherry

Beitrag von Cherry »

.
Zuletzt geändert von Cherry am Mo 7. Mai 2007, 12:43, insgesamt 1-mal geändert.

Antrepolit
Beiträge: 340
Registriert: Di 12. Sep 2006, 08:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Beitrag von Antrepolit »

Habe mein Problem nun gelöst. :oops:
Ein schlauer mensch sagte einst, dass nichts so lästig sei, wie niedergeschriebene Fehler.
:shock: Er hat Recht! In den kursierenden Exaples für Clipping (portiert
von Delphi) steht sowas wie:

Uses LCLTypes, LCLIntf;

[]
Var Rgn : HRgn;

Rgn := SelectClipRgn([TRECT]);
SelectClipRgn(Canvas.Handle, Rgn);
[/]

Mittlerweile weiß ich, dass die unit LCLTypes nur LCLType heißt, ohne S.

Mit Hilfe der Clipping-Methode kann man in einer Paintbox einen Bereich
zum Zeichnen eingrenzen. Beispielsweise, wenn man in ein Diagramm mit
einem brush der Dicke 6 etwas zeichnet. Der Brush wird zwangsläufig, aufgrund
seiner Dicke über die schönen Diagrammlinien gehen. Wenn man, wie ich,
das nicht will, rezeugt man nun den Clipping-Bereich innerhalb der Diagramm-Achsen.
Dann wird nur darin gezeichnet, und die dicken, runden Enden der Linie
werden quasi abgeschnitten :D .
Der Clipping-Bereich kann auch ellipsenförmig oder polygonal sein :wink: . Das ermöglicht Anwendungen wie Photoshop erst das Füllen
von Selektionen.

MfG

Antworten