Seite 1 von 1

Benötige Infos über Repaint von Fenstern

Verfasst: 04.09.2014 21:23
von Chimorin
Heyho,
Ich möchte mein Programm mit Sprachoptionen ausstatten.
Da hätte ich erst einmal eine grundlegende Frage: Wenn ich als Text/Titel/... bei einem Fenster/Gadget keine Konstante, sondern einen String oder Arrayelement angebe, verhält sich das Repaint dann anders?
Z.B. wenn der String erst 1 war, das Fenster somit als Titel "1" trägt, sich der String auf "2" ändert, gibt es da eine Möglichkeit mit Repaint oder sowas dafür zu sorgen, dass diese Änderung übernommen wird?
Es sind eine Menge Gadgets und ich würde es lieber einfach lösen, anstatt haufenweise Gadgets nach Bestehen abzufragen...

Re: Benötige Infos über Repaint von Fenstern

Verfasst: 04.09.2014 21:30
von RSBasic
Was möchtest du denn genau? Möchtest du ein Repaint-Event an das Fenster senden?

Code: Alles auswählen

SendMessage_(hWnd, #WM_PAINT, 1, 0)

Code: Alles auswählen

SendMessage_(hWnd, #WM_NCPAINT, 1, 0)

Code: Alles auswählen

UpdateWindow_(hWnd)

Code: Alles auswählen

InvalidateRect_(hWnd, 0, #True)

Code: Alles auswählen

RedrawWindow_(hWnd, 0, 0, #RDW_INVALIDATE)
Hast du ein bestimmtes Problem? Hast du einen nachvollziehbaren Code zum Zeigen deines Problems? Leider weiß ich nicht, was du eigentlich willst.
Falls du ein bestimmtes Problem hast, dann bitte immer ein Beispielcode veröffentlichen, mit dem wir testen und nachvollziehen können.

Und geht es um eigene oder fremde (zwar auch deine aber als extra Executable) Fenster?

Re: Benötige Infos über Repaint von Fenstern

Verfasst: 04.09.2014 21:56
von Danilo
Mit

Code: Alles auswählen

SetWindowTitle(#Window, Title$)
wird der Fenstertitel automatisch* geändert, auch visuell.

* Eine funktionierende Nachrichtenverarbeitung vorausgesetzt.

Re: Benötige Infos über Repaint von Fenstern

Verfasst: 05.09.2014 08:32
von Chimorin
Es ging mir darum, ob das Fenster seine Strings aus dem gleichen Speicherbereich holt, den man auch im Programm als String/Konstante dafür "zugewiesen" hat.
So ist es leider nicht, die Fenster legen ihre Strings nochmals wo ganz anders ab.
Mein Problem ist ungefähr der Code unten, nur mit viel mehr Gadgets und ein paar Fenstern mehr.
Wie gesagt ändern sich die Strings, die für die ganzen Texte zuständig sind (Andere Sprache). Mir fällt nur ein, wie Danilo schon auch angemerkt hat, bei allem was gerade aktiv ist (noch eine Abfrage für die Listenauswahl rein) den Text,Titel,... zu ändern. Wird ein ganz schönes Klamauk, ich dachte, dass man das eben "einfach" lösen könnte.

Code: Alles auswählen

EnableExplicit


Define.s str = "a"
Define.i event
#window = 0


InitSprite()
InitKeyboard()


OpenWindow(#window, 10, 10, 100, 100, str)
OpenWindowedScreen(WindowID(#window), 10, 10, 80, 80)


Repeat
  Repeat
    event = WindowEvent()
    
    Select event
      Case #PB_Event_CloseWindow
        End
        
    EndSelect
    
  Until event = 0
  
  If ExamineKeyboard()
    If KeyboardReleased(#PB_Key_Space)
      str = "b"
      ;Hier Update
    EndIf
  EndIf
  
ForEver

Re: Benötige Infos über Repaint von Fenstern

Verfasst: 05.09.2014 09:08
von GronkhLP
Chimorin hat geschrieben:die Fenster legen ihre Strings nochmals wo ganz anders ab.
Dieses Problem musste ich bei meinem Vorhaben auch feststellen, war aber ein ganz anderes Thema. :)
Chimorin hat geschrieben:

Code: Alles auswählen

str = "b"
Deine Stringvariable ist kein Verweis. Du kannst auch nicht sagen, dass das OS den Titel aus deiner Stringvariable entnehmen soll. Es ist nur eine reine Parameterübergabe. Warum machst du nicht mit SetWindowTitle?
Du musst auch nicht jedes Element einzeln übersetzen. Schreibe eine Prozedur und baue eine Schleife, damit du nicht jedes Element manuell neu beschriften musst. Automatisierung ist das Lösungswort. Lege eine Map an mit Sprachtext und Gadgetnummer. Dann diese Map foreachen und fertig. ;)

Re: Benötige Infos über Repaint von Fenstern

Verfasst: 05.09.2014 09:27
von Danilo
Chimorin hat geschrieben:Mir fällt nur ein, wie Danilo schon auch angemerkt hat, bei allem was gerade aktiv ist (noch eine Abfrage für die Listenauswahl rein) den Text,Titel,... zu ändern. Wird ein ganz schönes Klamauk, ich dachte, dass man das eben "einfach" lösen könnte.
Im folgenden Thread findest Du mehrere Ansätze, die dabei helfen könnten.
Du musst aber wirklich eine Procedure machen, die dann Fenster-, Gadget- und MenuText neu setzt.

- [ERLEDIGT] Anfänger Frage in Sachen Multilanguage

Das Ganze wird noch etwas komplizierter, da die Strings aller unterstützten Sprachen
auch noch in die Gadgets passen müssen. Sonst werden sie evtl. einfach abgeschnitten,
wenn GadgetWidth() zu klein ist.

Re: Benötige Infos über Repaint von Fenstern

Verfasst: 05.09.2014 12:10
von Chimorin
Danke für die Hilfe :)

Ich habe das nicht über eine Map gelöst, sondern bestücke ein Array mit dem Inhalt einer Sprachdatei.

Naja, dann setze ich mich mal ans Werk.