Jump to content
kalmarr

CorelDRAW Makró

Recommended Posts

kalmarr

Sziasztok!

 

Az 2009.02-es számában (108. oldal) láttam egy képet, hogy egy Magyarország térképén lehet makrók segítségével egyszerûen adatokat megjeleníteni.

 

Kérdésem, hogyan? :hááát:

 

Üdv.

 

KALMI

Share this post


Link to post
Share on other sites
Giraffe1

A dologhoz három dolog kell, és ezekbõl az elsõ az egyedül macerás:

1) Kell egy olyan térkép, amiben minden egyes alakzatnak (térkép esetében ugyebár ez zárt "görbét" jelent) egyedi azonosítója van.

2) Kell egy táblázat - aminek elõkészítésérõl szólt többek között a cikk -, amiben minden egyes azonosítóhoz hozzá kell rendelni a kategóriaszámot.

3) Kell a program, ami a 2) alapján kiszínezi az alakzatokat.

 

Maga a színezés tulajdonképpen egy utasítás:

ThisDocument.Pages(oldal).Layers(retegNev).Shapes(azonosito).Fill.ApplyUniformFill(szin)

 

Ehhez természetesen kell egy ciklus, ami végigmegy a táblázat (vagy lista) összes során, és így minden egyes területi egységet kifest. Miután a CorelDRAW makrónyelve is már egy ideje a Visual Basic for Application (VBA), így nagyon egyszerûen az is megoldható az is, hogy a CorelDRAW-ban futó makró az adatokat közvetlenül egy Excel munkafüzetbõl vegye.

 

Itt igazából a problémát a térkép elõ- vagy elkészítése jelenti. Magyarországon jelen pillanatban - Budapest kerületeit önálló településnek tekintve - 3174 település található. Ezt a térképet a program - kikapcsolt folyamatos képernyõfrissítéssel - kb. 25-30 mp alatt festi ki.

 

Most nem találom az itthoni gépemen a programot - az archív DVD-k között pedig lusta vagyok turkálni :upsz: -, ezért azt tudom ígérni, hogy ha tényleg érdekel a dolog (é. legalább egy választ kapok erre a bejegyzésre 8)), akkor beemelem ide a teljes kód kissé egyszerûsített változatát. (Azért csak az egyszerûsítettet, mert a teljes programban kb. 20 térkép és kb. ugyanannyi jelkulcs közül lehet választani.)

 

Amit sajnos nem tudok felkínálni, az a térkép, az ugyanis nem az én munkám, azt én többé-kevésbé készen kaptam. Max. a megyei és a régiós térképet tudom felajánlani, mert azok még nem akkora értékek.

Share this post


Link to post
Share on other sites
foochg

Kedves Giraffe,

nem én indítottam ugyan a topicot, de nagyon örülnék az egyszerûsített kódnak és a régiós/megyei szintû térképek, amennyiben áll még az ajánlat.

Köszönöm, SZL

Share this post


Link to post
Share on other sites
mtmusic1

Igaz, hogy régi téma, de mivel még a megoldás nem érkezett meg, így én is szeretném kérni, hogy kedves Giraffe légy szíves oszd meg velünk a kódot.

Köszi!

Share this post


Link to post
Share on other sites
Giraffe1

Dim oLegend() As Shape
cLegendName = "red-blue" ' a jelmagyarázat csoport neve
ReDim oLegend(ActivePage.Layers("Jelmagyarázat").Shapes(cLegendName).Shapes.Count)
For Each oObj In ActivePage.Layers("Jelmagyarázat").Shapes(cLegendName).Shapes
    Set oLegend(oObj.Name) = oObj
Next

' beolvassuk Excelbõl az adatokat
Set xlsExcel = Excel.Application
Set xlsTable = xlsExcel.Workbooks.Open(cXLSFile)
Set xlsSheet = xlsTable.Worksheets(1)
nValNum = 0
Do While Trim(xlsSheet.Cells(nValNum + 2, 1)) <> Empty
    nValNum = nValNum + 1
    aVal(nValNum, 1) = Trim(xlsSheet.Cells(nValNum + 1, 1).Text) ' azonosító
    aVal(nValNum, 2) = Val(xlsSheet.Cells(nValNum + 1, 2))       ' kategória
    DoEvents
Loop
xlsTable.Close False: xlsExcel.Quit
Set xlsSheet = Nothing: Set xlsTable = Nothing: Set xlsExcel = Nothing

For nVal = 1 To nValNum
    ' van-e ilyen azonosítójú objektum?
    On Error Resume Next
    cName = ActivePage.Layers(cMapLayer).Shapes(aVal(nVal, 1)).Name
    On Error GoTo 0
    
    If cName <> aVal(nVal, 1) Or aVal(nVal, 2) < 1 Or aVal(nVal, 2) > UBound(oLegend) Then
        ' hibás azonosító vagy kategória
    Else
        ActivePage.Layers(cMapLayer).Shapes(aVal(nVal, 1)).Fill = oLegend(aVal(nVal, 2)).Fill
        ActivePage.Layers(cMapLayer).Shapes(aVal(nVal, 1)).Selected = False
    End If
    
    DoEvents
Next nVal 

 

Ennél a teljes kód kicsit összetettebb, mert lehetõség van térképet és jelkulcsot is választani, valamint nem csak kitöltést, hanem körvonalat és átlátszóságot is másol a teljes program, de a lényeg ebbõl is látszik.

 

Térképet viszont felesleges kérni, mert miután annak a jogai nem nálam vannak, nem fogom senkinek sem elküldeni.

Share this post


Link to post
Share on other sites
mtmusic1

Kedves Giraffe! Köszönöm szépen a kódot!

Share this post


Link to post
Share on other sites
mtmusic1

Kedves Giraffe! Köszi mégegyszer a kódot, de sajnos nem boldogulok vele.

Van egy megye térképem, ami tartalmaz 228 települést. Minden település egy zárt görbe és saját név van megadva mindegyikhez.

Készítettem egy excel táblázatot, amiben minden településhez rendeltem egy kategóriaszámot, ami alapján színezni szeretném a térképemet.

De sehogysem sikerül rájönnöm (még a kód alapján sem), hogy hogyan kell ezt megoldani.

Sajnos nem túl sokat értek a Visual Basic-hez, csak próbálkozgatok vele.

Tudsz-e esetleg segíteni nekem ebben?

Share this post


Link to post
Share on other sites
Giraffe1

Akkor inkább azt javaslom, hogy nézz utána valami alapszintû VB könyvnek (vagy esetleg egy online tutorialnak), mert anélkül nem igazán fogod tudni megoldani ezt a feladatot. A program nagyon egyszerû, és tényleg csak 1-2 helyen kell belenyúlni, hogy saját környezetedben használni tudd...

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...