alvisio - Content Management für KMU
Home
 

Corel Script: Ventura-Scripte

21.2.2002 Diese Seite drucken  Diese Seite per E-Mail empfehlen

Korrekte abgerundete Ecken erstellen (Version 2)

Entgegen der Version 1, in der der Rahmen einfach ersetzt wird und mit Hilfe der Standard-Eckenrundung vom Ventura gerundet werden kann, bietet dieses Script als Version 2 eine viel flexiblere Bedienung.

Hier haben Sie einen Schieberegler, in dem Sie die Rundung präzise einstellen können, und zwar für beliebige Ecken in echten Millimetern. Feineinstellungen nehmen Sie mit den Pfeiltasten auf der Tastatur vor.
Sie beenden die Einstellung, in dem Sie das Fenster einfach schließen. Selbstverständlich können auch gedrehte Rahmen damit abgerundet werden.
Und noch eine Errungenschaft besitzt dieses kleine Fenster: Möchten Sie die gemachte Einstellung auf andere Rahmen übertragen, damit Sie ein einheitliches Layout erhalten, lassen Sie dieses Dialogfenster offen, markieren den nächsten Rahmen und klicken einmal auf den Schieberegler, die Kurven werden exakt übertragen. Dies können Sie für beliebige weitere Rahmen fortführen.
Achtung: Der Rahmen wird für die Rundung in eine Kurve umgewandelt, er besitzt daher nicht mehr die Eigenschaften des Rechtecks. Schauen Sie sich dazu auch Version 1 des Scripts an.


Script:

REM Mit diesem Werkzeug können Sie beliebige Bild- oder Textrahmen mit unverzerrten runden ecken versehen
REM © 2001 by Ulrich Albrecht

Global l&,t&,w&,h&,ra&,r&,cr&,rot,ix&,ixs& ,x, xd, yd,ors,urs,uls,ols, dia
Global Const SWP_NOMOVE& = 2
Global Const SWP_NOSIZE& = 1
Global Const HWND_TOPMOST& = -1
DECLARE FUNCTION FindWindow LIB "user32" (BYVAL Class$,BYVAL Name$) AS LONG ALIAS "FindWindowA"
DECLARE FUNCTION SetWindowPos LIB "user32" (ByVal hWnd&, ByVal hWndInsertAfter&, ByVal x&, ByVal y&, ByVal cx&, ByVal cy&, ByVal wFlags&) As Long Alias "SetWindowPos"

DECLARE SUB MakeDialogOnTop()
DECLARE SUB Zeichnen
DECLARE SUB Rahmenwerte
DECLARE SUB CheckRahmen

WITHOBJECT "CorelVentura.Automation.8"
ixs& = .CurrentFrameIndex ( )

CALL Rahmenwerte

ors=1:urs=1:ols=1:uls=1:xd=0:yd=0

'ix& = .CurrentFrameIndex ( )
'if ix&<>ixs& then CALL Rahmenwerte:nr=1:ixs&=ix&	'Neuer Rahmen wurde ausgewählt

BEGIN DIALOG OBJECT Eingabe 0, 0, 251, 53, "Eckenabrundung", SUB SliderSub
	HSLIDER 7, 13, 176, 11, .Slider
	TEXT  107, 27, 60, 9, .Anzeige, "Radius: 0 mm"
	TEXT  10, 28, 18, 8, .Text1, "0"
	TEXT  169, 25, 15, 8, .Text2, "100"
	CHECKBOX  22, 26, 78, 13, .rotsehen, "Rotation sehen"	 'Zeigt die Eckenrundung am rotierten Rahmen
	GROUPBOX  188, 3, 56, 43, .GroupBox1, "Runde Ecken"
	CHECKBOX  202, 15, 10, 9, .ol, ""
	CHECKBOX  202, 29, 11, 11, .ul, ""
	CHECKBOX  218, 15, 11, 11, .or, ""
	CHECKBOX  218, 29, 11, 12, .ur, ""
END DIALOG
dia=DIALOG(Eingabe)

SUB SliderSub(BYVAL ControlID%, BYVAL Event%)
	IF Event=0 THEN
		MakeDialogOnTop
		Eingabe.rotsehen.SETTHREESTATE FALSE
		if ra&=0 then Eingabe.rotsehen.ENABLE FALSE else Eingabe.rotsehen.ENABLE TRUE
		Eingabe.Text2.SETTEXT (int(w&/20000))
		Eingabe.Slider.SETMINRANGE 0
		Eingabe.Slider.SETMAXRANGE w&/2
		Eingabe.Slider.SETINCREMENT 1000
		Eingabe.Slider.SETVALUE r&
		Eingabe.Slider.SETTICK 20000
		Eingabe.ol.SETTHREESTATE FALSE
		Eingabe.ul.SETTHREESTATE FALSE
		Eingabe.or.SETTHREESTATE FALSE
		Eingabe.ur.SETTHREESTATE FALSE
		Eingabe.ol.SETVALUE ols
		Eingabe.ul.SETVALUE uls
		Eingabe.or.SETVALUE ors
		Eingabe.ur.SETVALUE urs
	ENDIF
	
	IF Event=1 OR Event=2 AND ControlID=1 THEN
		CALL CheckRahmen
		Eingabe.Anzeige.SETTEXT ("Radius:"& str(int(Eingabe.Slider.GETVALUE ()/1000)/10)&" mm")
		r&=Eingabe.Slider.GETVALUE ()
		Call Zeichnen
	ENDIF
	
	IF Event=2 AND ControlID>6 THEN
		CALL CheckRahmen
		Call Zeichnen
	end if
	
END SUB

SUB
 Zeichnen
	if rot=1 then .FormatFrameGeneral .FrameRotation= 0,.ContentRotation=0
	r1&=Eingabe.ol.GETVALUE ()*r&
	r2&=Eingabe.or.GETVALUE ()*r&
	r3&=Eingabe.ur.GETVALUE ()*r&
	r4&=Eingabe.ul.GETVALUE ()*r&

	.DrawCurveBegin 0,0, 17
	.DrawCurveAddNode r&+l&,0+t&,304
	.DrawCurveAddNode w&-r2&+l&,0+t&,289
	.DrawCurveAddNode w&-0.55*r2&+l&,0+t&,259
	.DrawCurveAddNode w&+l&,0.55*r&+t&,259
	.DrawCurveAddNode w&+l&,r&+t&,290
	.DrawCurveAddNode w&+l&,h&-r3&+t&,289
	.DrawCurveAddNode w&+l&,h&-0.55*r3&+t&,259
	.DrawCurveAddNode w&-0.55*r&+l&,h&+t&,259
	.DrawCurveAddNode w&-r&+l&,h&+t&,290
	.DrawCurveAddNode r4&+l&,h&+t&,289
	.DrawCurveAddNode 0.55*r4&+l&,h&+t&,259
	.DrawCurveAddNode 0+l&,h&-0.55*r&+t&,259
	.DrawCurveAddNode 0+l&,h&-r&+t&,290
	.DrawCurveAddNode 0+l&,r1&+t&,289
	.DrawCurveAddNode 0+l&,0.55*r1&+t&,259
	.DrawCurveAddNode 0.55*r&+l&,0+t&,259
	.DrawCurveAddNode r&+l&,0+t&,274
	.DrawCurveEnd TRUE
	if rot=1 then .FormatFrameGeneral .FrameRotation= ra&, .ContentRotation=cr&
END SUB

SUB Rahmenwerte
	ix& = .CurrentFrameIndex ( )
	if ix&<1 then end
	.FrameFirst FALSE, .FrameIndex=ix&	
	.FormatFrameGeneralGet l&,t&,w&,h&,ra&,.ContentRotation=cr&
	if ra&<>0 then
		.FormatFrameGeneral .FrameRotation=0, .ContentRotation=0
		.FormatFrameGeneralGet l&,t&,w&,h&
		rot=1	
	end if
END SUB

SUB MakeDialogOnTop()
	DIM hWnd As Long
	hWnd = FindWindow("#32770",Eingabe.GetText())
	IF hWnd<>0 Then
		SetWindowPos hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE+SWP_NOSIZE
	END IF
END SUB

SUB CheckRahmen
	if ixs&<>.CurrentFrameIndex ( ) then CALL Rahmenwerte:ix&=ixs&
	if ra&=0 then Eingabe.rotsehen.ENABLE FALSE else Eingabe.rotsehen.ENABLE TRUE
END SUB
END WITHOBJECT

Funktionsweise

Dies ist mit Abstand das aufwändigste Script, das für V-PUB erstellt worden ist. Die Logik herauszubekommen, wie Ecken in Corel-Programmen abgerundet werden, hat sehr lange gedauert. Das ganze Script hinterher auch alltagstauglich zu machen, kostete noch mal einige Tage. Da dies ganz bestimmt ein sehr beliebtes Script sein wird (das andere weltweite Ventura-Seiten sicherlich wieder als Eigenproduktion verkaufen wollen), möchte ich nochmals deutlich darauf hinweisen: Dieses Script darf nicht auf anderen Seiten (kommerziell oder nichtkommerziell) zum Download jeglicher Art verwendet werden.

  1. Im ersten Teil werden alle Vorbereitungen für das Dialogfeld getroffen, damit es immer im Vordergrund bleibt.
  2. Dann wird das Dialogfeld definiert. Damit die Millimeterangabe für alle Größen korrekt sind, wird die Schiebereglerskalierung entsprechend berechnet.
  3. Bei jeder Veränderung des Reglers wird der Rahmen als Kurve mit den entsprechenden Abrundungen gezeichnet.
  4. Handelt es sich um einen gedrehten Rahmen, wird dieser erst auf 0° gedreht, abgerundet gezeichnet und danach wieder auf den ursprünglichen Wert zurückgedreht. Dies geschieht so schnell, dass der Anwender dies kaum mitbekommt.

Tipp: Richtig Sinn macht dieses Script erst, wenn es als Button in die Standard-Symbolleiste plazieren.

2 Kommentare


Um Kommentare zu schreiben, müssen Sie sich zuerst hier anmelden.

Grenze

Re: Korrekte abgerundete Ecken erstellen (Version 2) (Punkte: 1)
von Anonüm auf 31.12.2004

Warum bekomme ich der meldung dass es ein Fähler gibt im script?
Ich kopiere das Script im Kladblok und mache es ein csc Doent.
Ich habe WITHOBJECT "CorelVentura.Automation.8" geandert im WITHOBJECT "CorelVentura.Automation.10"
Und bekäme die Fählermeldung.
Ich habe auc das Script nicht geändert und das Converterscript gedreht.

Was tue ich falsch?

Beurse@xs4all.nl

Anzeigen

 Mehr Platz 
Extra große DTP-Monitore: