Beiträge von bolle732

    Hallo Falk

    Herzlichen Dank für Deine Antworten!

    Zu 1:
    Das mit dem extraState werde ich so versuchen. Fontmagick scheint den auch zu verwenden, um festzustellen, ob die Anwendung frisch gestartet wurde oder ob man aus dem State wiederhergestellt wird. Wie man das unterscheidet war mir auch noch nicht ganz klar.

    Zu 2:
    Ich habe eine Ressource:

    resource GAME lmem

    In dieser habe ich einen Chunk:

    @chunk char GameLevelBuffer[] = "";

    Der Chunk ist am Anfang leer und wird in der Methode MSG_GEN_PROCESS_OPEN_APPLICATION auf die benötigte Grösse erweitert:

    C
    MemLock(OptrToHandle(@GameLevelBuffer));
    LMemReAlloc(@GameLevelBuffer, LVL_M_SIZE);
    MemUnlock(OptrToHandle(@GameLevelBuffer));

    Dieser Chunk wird jeweils zu Beginn einer Runder (sprich Levels) mit den Leveldaten gefüllt. Während dem Spiel gibt aber Änderungen an den Daten. Einzelne Zeichen fallen Weg, bzw. werden mit einem Leerzeichen überschrieben. Darum muss ich den Inhalt dieses Buffers über einen Neustart hinweg behalten.

    Schönen Gruss
    Andreas

    Hallo zusammen

    Ich würde gerne beim GeoLadder ein pausiertes Spiel nach dem Neustart von PC/GEOS fortsetzen können. Die Messages "MSG_GEN_PROCESS_OPEN_APPLICATION" und "MSG_GEN_PROCESS_CLOSE_APPLICATION" habe ich schon in Gebrauch.

    Zwei Datenbereiche überleben den Neustart noch nicht.

    1. Ein globales Struct mit Zustandsinformationen, aber auch einem Pointer auf den Levelbuffer

    Dieses könnte ich beim Herunterfahren in eine Instanz-Variable eines Objekts kopieren, welches im State gespeichert wird und beim Starten davon wieder laden. Macht das Sinn? Den Pointer auf den Levelbuffer muss ich sicher noch neu setzen.

    2. Den Levelbuffer:

    @chunk char GameLevelBuffer[] = "";

    Der Levelbuffer muss beim ersten Start vergrössert werden. Beim Speichern und Wiederherstellen aber seinen Inhalt behalten.

    Habt Ihr hierzu Tipps, welchen Weg am vernünftigsten / praktikabelsten ist? Hints zu Beispielen nehme ich sehr gerne an.

    Besten Dank schon einmal im Voraus!

    Ok, das mit dem Mauszeiger verstecken habe ich nun herausgefunden.

    1. Chunk mit Definition des leeren Mauszeiger definieren
    2. Message "MSG_GEN_VIEW_SET_PTR_IMAGE" der View mit Angabe des gelockten Chunks senden
    3. Um den Mauszeiger wiederherzustellen, einfach die Message mit "NullOptr" anstatt des Chunks senden

    In den Beispielen von den bestehenden Apps wird der Mauszeiger in der Message "MSG_META_CONTENT_VIEW_WIN_OPENED" gesendet. Das hat bei mir nicht funktioniert. Warum habe ich nicht weiterverfolgt, da ich das dynamisch steuern will

    @chunk PointerDef16 LadderGameCursor = {
     // Width, height, hot x, hot y
     16, 16, 0, 0,
     {  // Mask
       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
     },
     {  // Image
       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
     }
    };
    ...

      // Lock the cursor definition
     MemLock(OptrToHandle(@LadderGameCursor));
     // Set the image of the mouse cursor / pointer
     @call LadderView::MSG_GEN_VIEW_SET_PTR_IMAGE(@LadderGameCursor, PIL_WINDOW);
     // Unlock the cursor definition
     MemUnlock(OptrToHandle(@LadderGameCursor));

    ...

      // Reset the image of the mouse cursor / pointer
     @call LadderView::MSG_GEN_VIEW_SET_PTR_IMAGE(NullOptr, PIL_WINDOW);

    Sehe ich das richtig, dass das "1" vor dem "x;" vom Forum ist und nicht zu Deinem Code-Beispiel gehört?

    Grundsätzlich sehe ich eine Zeile nur mit einer Variable ohne Definition / Zuweisung auch als sinnlos. Keine Ahnung, was Watcom C da genau macht oder eben nicht. Was macht Borland C damit?

    Hallo Rainer

    Ja, ich will einen passenden Font, bei welchem ich nciht mehr selbst von Hand Zeichen um Zeichen zeichnen muss. Das Ganze dann noch in3 verschiedenen Grössen oder so. Mehrfarbig brauche ich dazu nicht. Es sollte vorallem effizient sein, damit die Steuerung möglichst präzise wird. Habe das Gefühl, dass beim Dynamisieren bezüglich Lokalisierung schon etwas Lag entstanden ist. Muss das aber anschauen, sobald die anderen Punkte abgearbeitet sind...

    Gruss
    Andreas

    Hallo Nico

    Besten Dank für Deine Antwort. Mir geht es effektiv um Bitmap-Fonts, und nicht Outline-Fonts wie Nimbus oder Truetype. Ich war der Meinung, dass PC/GEOS auch reine Bitmap-Fonts kennt. Wenn das nicht so ist, lasse ich mich gerne beleeren.

    Lieben Gruss
    Andreas

    Hallo zusammen

    Ich gehe einmal davon aus, dass die Bitmap-Fonts im PC/GEOS in einem eigenen Format vorliegen. Wie wurden die eigentlich ursprünglich erstellt, bzw. wie würde man heute vorgehen?

    Gruss
    Andreas

    Ich gehe Zeichen um Zeichen durch. Hört sich jetzt abenteurlich an, ist aber halt alter Code von anno dazumal eines Dummies...

    Das mit strlen(LMemDeref(@Test1)) sieht doch genau nach dem aus, was ich brauche. Manchmal habe ich einen Null-Terminator und manchmal nicht.

    Herzlichen Dank Rainer!

    Ok, ich dachte zuerst, dass ich die Grösse vom Inhalt bekomme und nicht die belegte Grösse im Speicher...

    Mein Code sieht im Moment in etwa so aus:

    Code
    @chunk char Test1[] = "Testefeste";
    
    MemLock(OptrToHandle(@Test1));
    
    for (i = 0; i < LMemGetChunkSize(@Test1)) {...}
    
    MemUnlock(OptrToHandle(@Test1));

    Ist es denn sicher, dass der Text vom Chunk auch einen Null-Terminator hat? Oder gibt es da bessere / andere Wege / Funktionen?

    Hallo zusammen

    Ich bin aktuell immer noch am aktualisieren des GeoLadder, damit dieser vernünftig "Lokalisierbar" wird.

    Ein Problem habe ich aktuell mit der Funktion LMemGetChunkSize(). Diese verwende ich, um z.B. mit einer Schleife über die Zeichenkette zu arbeiten. Dabei bin ich auf folgende Info in der TechDocs gestossen:

    Zitat

    This routine returns the size (in bytes) of a chunk in an LMem heap. Since
    LMem chunks are dword-aligned, the chunk's size may be slightly larger
    than the size specified when it was allocated.

    Ist dem effektiv so? Ich erhalte nicht die Anzahl Bytes oder Chars zurück, sondern eventuell einen grösseren?

    In den Quellen habe ich nur wenig Verwendung dieser Funktion gesehen:

    Auch hier wird ab und zu -1 gerechnet...

    Ja, genau das mit dem Pausieren mache ich auch ;) Dass das Columns auch so macht, war mir nicht mehr präsent.

    Auf jeden Fall danke für die Hints. In den Quellen greppe ich mich jeweils durch. Die R-Basic Doku war mir nicht auf dem Schirm, wenn ich aber so überlege, dann ganz klar eine gute weitere Top-Quelle :thumbup:

    Hallo Rainer

    Meine VisContent hat verschiedene Kind-Objekte. Dies bdeutet doch, dass der Fokus an diese weitergegeben wird und somit das VisContent selbst das EXCL verliert? Die Folge davon wäre, dass die Message nicht einmal gesendet wird, sondern andauernd wieder... Zumindest dachte ich, das sei der Effekt, den ich gesehen haben...

    Nun bin ich nochmals den Code durchgegangen und habe dabei noch einen Fehler bei mir gefunden (Bitset mit &|~...). Habe es dann mit der GenApplicationClass versucht und siehe da, da scheint es zu funktionieren...

    Man lernt nie aus ;)

    Andreas

    Hallo zusammen

    Was ist der richtige Weg im SDK, um auf den Verlust des Focus eines Fenster (GenPrimary mit VisContent) zu reagieren?

    Ich habe es mit MSG_META_LOST_FOCUS_EXCL versucht. Wenn ich diese über das GenPrimary abfange, passiert nichts. Wenn ich es über GenApplication mache, erhalte ich viel zu viele Aufrufe.

    Ziel ist es, jeweils einen Aufruf wenn das Fenster den Fokus verliert und wenn es den Fokus wieder erhält.

    Besten Dank für all Eure Hints und Inputs.

    Andreas

    Hallo Jirka

    Herzlichen Dank für die Erklärung. Ja, wenn man nach Beispielen mit Strings aka Array von Chars sucht, dann findet man fast alle ohne den Adress-Operator & voran. Interessant, dass ich hierzu bei OWC einen Eintrag gefunden habe.

    Ich dachte einfach, dass bei man bei char mit 1 Byte Länge einfach die Adresse hochzählen kann, um die entsprechende Stelle zu lesen / beschreiben. Man merkt, dass ich doch schon einige Zeit kein (GO)C mehr gemacht habe...

    Andreas