Jump to content
GSForum - Segélyvonal

CorelDRAW Makró


kalmarr
 Share

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

Link to comment
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.

Link to comment
Share on other sites

  • 1 month later...
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

Link to comment
Share on other sites

  • 2 years later...
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!

Link to comment
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.

Link to comment
Share on other sites

mtmusic1

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

Link to comment
Share on other sites

  • 2 weeks later...
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?

Link to comment
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...

Link to comment
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
 Share

×
×
  • Create New...