Tips und Tricks für GFA-Programmierer

Accessories

Wie stelle ich einen Accessorie-Eintrag im Menü »DESK« deselektiert dar?

Hierfür bieten sich zwei Lösungen an. Bei der ersten Variante gehen wir davon aus, daß die Pull-Down-Leiste mit den GfA-BASIC eigenen Befehlen erzeugt wird. Die Platzhalter für die Accessories nehmen statt 1, 2, 3, 4, 5, 6 die negativen Werte -1, -2, -3, -4, -5, -6 an. Die zweite Lösung ist etwas einfacher. Entwerfen Sie die Menüleiste in einem Resource-Construction-Set (RCS), so haben Sie direkten Zugang zu allen Werten eines Objektbaumes. Verantwortlich für die Erscheinungsweise eines Eintrags in der Menüleiste ist jeweils das Bit Nummer 3 des zugehörigen Objektstatus »OB_STATE«.

Beim Schließen eines Accessory hinterläßt dieses bei meinem Programm eine graue Box und zerstört den Hintergrund. Wie kann ich das Öffnen des Accessory abfragen, damit ich zuvor den Hintergrund retten kann?

In der Regel sind Accessories voll GEM-Programmiert. Somit übergibt das ACC die Redraw-Aufgaben auch an GEM. GEM hält den Inhalt des Desktop, also die AKTUELLE Arbeitsumgebung, in einem Puffer. Beim Schließen eines Accessories wird der Ausschnitt aus dem Puffer in den Bildschirm kopiert. Ist die derzeitige Arbeitsumgebung nicht als Desktop angemeldet, so existiert für GEM nur eine graue Fläche (Standard Anmeldung). Statt der komplizierten Rettung es Hintergrundes Beachtung zu schenken, beheben wir besser die Ursache. Der einfachste Weg ist die Arbeitsumgebung als Desktop anmelden.

Der Prozedur init_desktop() übergeben wir die Adresse eines im RCS entworfenen Desktop. Bei korrektem Aufruf paßt die Routine zunächst die Größe des 0. Objekts (Hintergrund) der aktuellen Auflösung an. In »WORK_OUT(0)« finden wir dazu die x-Auflösung, in »WORK-OUT(1)« die y-Auflösung. Natürlich lassen sich noch weitere Objekte, wie zum Beispiel eine Infobox oder Icons fest plazieren. Ist unser Wunsch-Desktop komplett, meiden wir ihn mit »WIND_SET( ... )« an. Das Zeichnen unseres Machwerks übernimmt die Funktion »ßFORM_DIAL(..)«. Um unseren eigenen Desktop wieder abzumelden, durchspringen Sie einfach die Prozedur »ende«. Der alte Desktop ist jetzt wieder am Zug.

PROCEDURE init_desktop(adr%) ! meldet neues Desktop an
´ adr% = baumadresse des neuen Desktop
´ nulltes objekt wird auf Desktopgröße gebracht
 IF adr%
  OB_X (adr%, 0)"0 ! koordinaten
  OB_Y (adr%, 0)"0 ! links oben
  OB_W (adr%, 0)"SUCC (WORK_OUT(0)) ! koordinaten
  OB_H (adr%, 0)"SUCC (WORK_OUT(1)) ! rechts unten
  OB_X (adr%, rsc&)"rscx% ! koordianten für
  OB_Y (adr%, rsc&)"rscy% ! ein objekt anmelden
  OB_X (adr%, icon&)"iconx% ! korrdinaten für
  OB_Y (adr%, icon&)"icony% ! ein icon anmelden
  ~WIND_SET (O, 14, SWAP (adr%), adr%, 0, 0) ! desktop anmelden
  ~FORM_DIAL (3, 0, 0, 0, 0, 0, 0, WORK_OUT(O), WORKOUT(1)) !zeichnen
 ENDIF
RETURN

PROCEDURE ende
 ~WIND_SET (O, 14, 0, 0, 0, 0) ! altes Desktop wieder anmelden
 RESERVE  ! GFA-BASIC-Speicher freigeben
 CLS    ! bildschirm löschen
RETURN

Zeitbegrenzung

Bei einem Installations-Programm möchte ich dem Anwender nur eine bestimmte Zeit zur Eingabe geben. Wie kann ich dies überwachen ?

Genau für diesen Zweck bietet GfA-Basic den Befehl »AFTER ... GOSUB«. in unserem Listing nutzen wir diesen zur Zeitbegrenzung einer Eingabe. Nachdem die Zeitvariable gesetzt und die AFTER ... GOSUB-Zeile bearbeitet ist, wartet unser kleines Programm drei Sekunden lang auf die Eingabe eines Textes. Nach Ablauf dieser Frist erscheint eine Dialogbox und das Programm wird beendet.

init
AFTER 3*200 GOSUB prg_ende ! zeitbegrenzung
´
PRINT "Schreiben, solange Zeit ist !" ! info schreiben
PRINT CHR$ (27) ; "e" ! cursor einschalten
´
DO
 taste$ "INKEY$ ! taste speichern
 IF taste$ <>"" ! wenn eine taste gedrückt
  PRINT taste$; ! zeichen ausgeben
 ENDIF
LOOP
PROCEDURE init
 sec_anzahl% = 3 ! zeitbegrenzung in sec
RETURN
PROCEDURE prg_ende
 OUT 2, 7  ! "pling" ausgeben
 ALERT 0, "Bis hierhin und|nicht weiter!", 1, "Ok", wahl
 EDIT
RETURN

DEFTEXT

Auf einem Bildschirm soll ein mit »DEFTEXT« im Aussehen veränderter Text ausgegeben werden. Gleichzeitig soll sich ein Text pixelgenau positionieren lassen, der normales Aussehen trägt. Kann ich mir das ewige Umschalten mit DEFTEXT sparen ?

Ja. Da solche Fälle öfter auftreten, hat GfA-BASIC den praktischen Befehl

ATEXT x, y, "TOS"

Mit dieser Eingabe läßt sich jeder Text analog zu »TEXT x, y, "Text"« positionieren, wird jedoch durch DEFTEXT nicht beeinflußt.

Umschalttasten

Durch »1st Word« ist bei mir der Wunsch entstanden, durch das Selektieren verschiedener Buttons die Umschalttasten (, und zu bedienen. Wie kann ich den Zustand dieser Tasten verändern ?

Mit der BIOS-Funktion 11 läßt sich der Zustand der Sondertasten , , , und abfragen. Mit gleicher Funktion wird der Zustand auch gesetzt. Übergeben Sie den Wert -1, erhalten Sie die aktuellen Einstellungen, jeder andere Wert verändert diese entsprechend.

~BIOS (11, BCHG (BIOS (11, -1), bit|))

Für 'bit|' gelten folgende Werte:

0 SHIFT rechts
1 SHIFT links
2 CONTROL
3 ALTERNATE
4 CAPS LOCK


Links

Copyright-Bestimmungen: siehe Über diese Seite
Classic Computer Magazines
[ Join Now | Ring Hub | Random | << Prev | Next >> ]