Wie kann man die alten Blockgrafiken (z.B. ALT-178) im Programm
anzeigen ? Muß da die Codepage auf 437 geändert werden ?
Andererseits kann es ja der olle Editor.exe in Windows auch.
Denke mal nicht, daß der jedesmal einen Tastendruck als OEM erkennt
und die CP dauernd umstellt.
Blockgrafiken
-
-
-
-
Danke,
Würde mich nur noch interessieren, wie
man das auf ein Windows-Control (Editfeld
oder Static) bekommt. -
Dazu muss man mit Set("CharSet",1) den Zeichensatz auf ASCII/OEM einstellen mit Create("Font",....) einen entsprechenden Font mit OEM-/ASCII-Zeichen wählen und diesen mit SetFont dem Control zuweisen. Arial und Courier haben z.B. die entsprechenden Zeichen im Angebot.
Gruß
Roland -
Muß ich da noch was beachten ?
Da kommt nur die komische "2" :Code
Alles anzeigenDeclare Handle Edit1, Static, Oemfont Cls Set("CharSet", 1) oemfont = @Create("Font", "Arial", 0, 0, 0, 0, 0) Edit1 = @Create("MultiEdit", %HWnd, "", 10, 10, 320, 100) Static = @Create("static", %HWnd, 10, 140, 320, 200) SetFont Static, oemfont SetFont Edit1, oemfont SetText Edit1, Chr$(178) StartPaint Static DrawText 5,5, Chr$(178) EndPaint Waitkey End
-
Hallo,
offensichtlich sind die Blockgrafik-Zeichen bei Arial und Courier nur mit Unicode (Widestring) ansprechbar und liegen dann über 255. Mit speziellen OEM-Fonts (z.B. Terminal, der immer installiert ist) sollte es gehen. Weitere OEM-Fonts kann man im Internet finden.
Es geht allerdings nicht bei DRAWTEXT, da die entsprechenden Windows-APIs (DrawText und TextOut) keine Zeichensatzauswahl zu berücksichten scheinen.
In einem Editfeld kannst Du die OEM-Zeichen dann mit ALT und Nummerntasten eingeben, wobei Du für OEM-Zeichen eine 0 voranstellen musst.Gruß
Roland -
Sorry, ein Denkfehler von mir. Natürlich funktioniert der OEM-Zeichensatz auch mit DrawText. Hier muss man den Font natürlich mit UseFont einstellen. Hier ein kurzes Beispiel, dass dir sicher weiterhilft:
Code
Alles anzeigenDeclare Handle Edit1, Static, Button, Oemfont Cls Set("CharSet", 1) var string test = chr$(178) oemfont = @Create("Font", "Terminal", 10, 0, 0, 0, 0) UseFont "Terminal", 10, 0, 0, 0, 0 DrawText 500,50, test Edit1 = @Create("MultiEdit", %HWnd, "", 10, 10, 320, 100) Static = @Create("static", %HWnd, 10, 140, 320, 200) Button = @Create("button", %HWnd, test, 10, 360, 80, 40) SetFont Static, oemfont SetFont Edit1, oemfont SetFont Button, oemfont SetText Edit1, test StartPaint Static UseFont "Terminal", 10, 0, 0, 0, 0 DrawText 5,5, test EndPaint Waitkey End
Gruß
Roland -
Danke nochmals.
Das Editfeld geht schonmal.
Das Static auch. Wußte nicht, daß man
das UseFont erst nach Startpaint einfügen muß.Es geht mir im Übrigen darum, einen
Viewer und Editor zu programmieren.
Vielleicht kennst du ASCII-Arts. Das sind
die schönen ASCII-Bildchen, die auch
öfter in den .nfo Dateien anzutreffen sind.Da will ich mir ein Programm machen, das
diese Bildchen anzeigt. Mit einem Editfeld
soll dann auch so ein Bild zu editieren sein.
Ferner sollen auch per Drag&Drop solche
Zeichen auf eine Fläche zu ziehen sein,
die man später auch abspeichern kann,
wahlweise als Text oder auch evtl. als Bmp. -
Ich hätte diesbezüglich noch eine Frage :
Wie macht man am besten so eine Bitmap, wie
die TOOLBAR32 ?
Ich möchte gerne alle Blockgrafikzeichen hintereinander
in so einer ImageList haben. Die könnte ich dann in
einer Toolbar anzeigen :CodehBild = @Create("HPIC", 0, "BLOCKGRAFIK") hToolbar = @Create("TOOLBAR", %hWnd, hbild, 0, 32, 2000, 1)
Die Bitmap könnte dann entweder temporär erzeugt werden oder evtl.
vorher als Resource eingefügt sein. -
Erstelle Dir mit einem Grafikprogramm eine leere Bitmap. Größe ergibt sich aus der Höhe eines einzelnen Zeichen und Breite ist die Breite eines Zeichens mal Anzahl der Zeichen. Nun hast Du die Möglichkeit, die einzelnen Zeichen an die entsprechende Postion zu malen. Oder Du hast die Zeichen schon vorher als Einzelbitmaps erstellt und fügst die nun per Copy&Paste nacheinander an die entsprechende Postion in die leere Bitmap ein.
Gruß Volkmar
-
Danke,
Muß ich mal schauen. MS Paint ist da wahrscheinlich
nicht so gut dafür.Mal sehen, vielleicht bekomme ich das noch anders
hin. Wie ich gerade sehe, nimmt die Toolbar ja auch
eine ImageList, die man selber erstellen kann.Mit ein paar MCLs und ImageList("Add",...) und einem
Array mit den Zeichen könnte das evtl. auch klappen.
Die zu malenden Zeichen (Chr$(x)) kann man sich ja
vorher im Array festhalten. Das ganze in einer Schleife
dann mit @Create("hSizedPic",...) in die IL kopieren.Das wäre dann die einfachste Möglichkeit.
-
MS Paint geht eigentlich auch. Wenn Du das Bild ausreichend vergrößerst und Gitternetzlinien einblendest, kannst Du pixelgenau damit zeichen. Und genau darauf kommt es ja an, damit die Symbole auch immer exakt an der vorgesehenen Position liegen. Da empfielt es sich, erst mal die Pixel auszählen und Hilfsmarkierungen einsetzen, wo jeweils ein Symbol beginnen soll.
Gruß Volkmar
-
Mit der Imagelist + Toolbar war gar keine so schlechte Idee
und auch noch einfacher, wie gedacht :Code
Alles anzeigenDeclare Handle imgList, htb Declare Int ende, buttons WindowTitle "BlockGrafiken" Window 1200, 600 imgList = @Create("ImageList", 16, 16) buttons = @Create("OEMList", imgList) htb = @Create("Toolbar", %HWnd, imgList, buttons, 10, 2000, 1) ende = 0 WhileNot ende WaitInput Case %Key = 2 : ende = 1 EndWhile SubProc Create.OEMList Parameters Handle il Declare Handle bmp Declare Long zeichen[] zeichen[] = 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195,\ 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215,\ 216, 217, 218, 219, 220, 221, 222, 223, 226, 227 WhileLoop 0, (SizeOf(zeichen[]) - 1) MCls 16, 16, RGB(255, 255, 255) StartPaint -1 UseFont "Terminal", 10, 0, 0, 0, 0 TextColor RGB(0, 0, 0), RGB(255, 255, 255) DrawText 1, 1, Chr$(zeichen[&LOOP]) EndPaint bmp = @Create("hSizedPic", 0, "&MEMBMP", 16, 16, 1) ImageList("Add", il, bmp) EndWhile DeleteObject bmp Return @GetCount(il) EndProc DeleteObject imgList End
Jetzt muß ich nur noch sehen, wie ich die einzelnen Zeichen zuordne bzw. erkenne,
was für ein Zeichen welcher Button bzw. Menüpunkt ist. Interessant wäre jetzt
noch, wenn man wie bei
ImageList("GetIcon", H, N)
auch ein
ImageList("GetBMP", H, N)
hätte. Da könnte man das passende Bmp aus der Imageliste direkt herausfischen.
Bei obiger Toolbar wäre das %MenuItem - 2000, da die Menüpunkte bei 2000
beginnen.
Vielleicht dient obiger Code auch als Anregung für jemanden.
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!