Das array->struct ist eher ein kleiner Hack von mir, weil ich bei solchen Werkzeugen immer lieber mit structs arbeite als mit einzelnen Leseoperationen, ist viel übersichtlicher und effizienter.
Einzelne Leseoperationen werden beim "Vorgänger" des aktuellen Entpackers für Anno-Ahoi benutzt. Das mit den Structs ist aber viel besser
Joa hab damit au schon mal gearbeitet. Mit Qt für D dürfte das ähnlich einfach sein.
Es gibt ja zwei Systeme für C#:
WindowsForms (.NET 2.0)
Windows Presentation Foundation (.NET 3.0)
Ich nutze nur noch die WPF, da die XAML-Sprache wirkich sehr gut zum Erstellen von UIs ist (Besonders, weil es sich wunderbar dazu eignet, Anwendungen zu erstellen, deren Fenstergröße variabel ist*)
Ich habe mir mal QT angesehen und festgestellt, dass ... es nicht richtig für mich ist (Nicht unlogisch, aber Sachen, die eleganter gehen:
QT:
|
Source code
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<widget class="QToolButton" name="readMemoryButton" >
<property name="geometry" >
<rect>
<x>10</x>
<y>150</y>
<width>41</width>
<height>41</height>
</rect>
</property>
<property name="text" >
<string>MR</string>
</property>
</widget>
...
|
XAML:
|
Source code
|
1
2
3
4
|
<UniformGrid Rows="4" Columns="5"> **
<Button Name="readMemoryButton" Content="MR" Width="41" Height="41"/>
...
</UniformGrid>
|
* z.B. im Grid-Element: Margin="Left, Top, Right, Bottom" -> Passt sich an
oder bei der ListView die Spalten <GridViewColumnDefinition Width="5*"/> -> Wenn alle anderen auch 5*, dann 1/5
** Wenn man gerne mit Pixeln arbeitet, dann in Canvas-Element platzieren und angefügte Eigenschaften verwenden:
|
Source code
|
1
2
3
4
5
|
<Canvas>
<Button Name="readMemoryButton" Content="MR" Width="41" Height="41"
Canvas.Left="10" Canvas.Top="150"/>
...
</Canvas>
|
Ist auch nichts optimiert, nur ein kleines Werkzeug zum Entpacken. Normalerweise mach ich bei sowas nicht mal ne GUI
Ich kenne dieses Problem auch beim AMM (den ich jetzt versuche aus der Weltgeschichte zu verbannen, wie du an meiner Signatur, an meinen Posts bez. des AMM und dem Internetauftritt siehst). Die GUI laufend zu aktualisieren verlangsamt den Prozess ganz schön: 5s mit lauf. Akt., 2s ohne lauf. Akt. bei 30 Mods.
Ich benutze da zwei Varianten (eine davon beim RDAEx, die andere beim AMM) :
Wenn x % y == 0, dann aktualisieren oder
Alle x% (z.B. 20%) aktualisieren