Bug da 2.18

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Bug da 2.18

Mensagem por Itamar M. Lins Jr. »

Ola!
Outro problema para verificar com a RICHEDIT:
Está faltando o método ON OTHERMESSAGES ou virou o que?
Posta um pequeno exemplo que demonstra a falta desse recurso
Esse código da HwGui parece-me que colocou de fora tudo que estava na 2.17 só pra complicar a vida do programador.
Ele disse em 2012 que iria mudar porque estava complicado mexer no código central e a quebra de compatibilidade com a GTK/Linux.
Tô naquele dilema esquece esta versão e usa a antiga até onde der ou continuo descobrindo o que mais tem de errado ou faltando.
Eu estou fazendo assim, já ia desistir da Hwgui tinha colocado uns erros, se ele ou alguém corrigisse beleza, se não HBQT. De uma forma ou de outra ficaria com 2 projetos o antigo em HWGUI e o novo HBQT.
ADD STATUS continua com erro em ON INIT .
> Method not found settextpanel (this method was part of the class HStatus)


I added the Hstatus from 2.17 to contrib ex controls as HStatusEx and a command ADD STATUSEX for those, who need :settextpanel().

But you can use also an old hwg_writestatus() function, which do the same, or a HStatus():SetText( cText, nPart ) method.

Regards, Alexander.
Este erro continua mesmo depois dessa ultima correção ?

Código: Selecionar todos

2014-12-24 12:25 UTC+0300 Alexander Kresin <alex@belacy.ru>
  * contrib/ext_controls/hbrowsex.prg
    * The execution of :bKeyDown while WM_CHAR is disabled, use :bOther instead
  * contrib/ext_controls/hctrlex.prg
    * HStatusEx id added from the 2.17
  * include/hwg_extctrl.ch
    * ADD STATUSEX added
  * source/winapi/hcontrol.prg
    * A HStatus():SetText( cText,nPart ) added from GTK version

2014-12-24 11:20 UTC+0300 Alexander Kresin <alex@belacy.ru>
  * contrib/misc/miscfunc.prg
  * source/winapi/guimain.prg
    * hwg_TxtRect() is moved to guimain.prg
  * utils/designer/editor.prg
    ! Warning fixed
Agora p/ vc usar este recurso é HstatusEx.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Bug da 2.18

Mensagem por asimoes »

Itamar,

Eu vi agora que tem um ADD STATUS (guilib.ch) e ADD STATUSEX (hwg_extctrl.ch) esse último funcionou, quanto a RichEdit veja o que está faltando:

Veja que o ON OTHER MESSAGES foi suprimido na versão 2.19.

E eu tenho controles com este método:

Código: Selecionar todos

  @ 127,019 RichEdit  oEdit TEXT cText SIZE nWIDTH-192,nHEIGHT-130 ;
                OF        oDlgReport ID ID_TEXTO ;
                COLOR     nCorFonteP ;
                BACKCOLOR nCorFundoP ;
                STYLE     WS_HSCROLL+WS_VSCROLL+ES_LEFT+ES_MULTILINE+ES_READONLY ;
                ON        GETFOCUS {|| TopoDoc()};
                FONT      oFont2 ;
                ON OTHERMESSAGES {|This,m,wp,lp| richeditProc( this, m,wp, lp ) }     

STATIC FUNCTION RichEditProc( oEdit, Msg, wParam, lParam )
LOCAL nPos, nPos1, nPos2, nVirtCode
   
   IF Msg == WM_KEYDOWN
      nVirtCode := wParam
      IF nVirtCode == VK_F3 
         Texto_Encontrado(oEdit)
      ENDIF
      nPos   :=hwg_SendMessage( oEdit:Handle, EM_GETSEL, 0, 0 )
      nPos1  :=hwg_Loword( nPos ) + 1
      nPos2  :=hwg_Hiword( nPos ) + 1
      nLinha :=hwg_SendMessage(oEdit:Handle, EM_LINEFROMCHAR, -1, 0) + 1
      nColuna:=nPos1 - hwg_SendMessage( oEdit:Handle, EM_LINEINDEX, -1, 0 ) 
      //
      hwg_WriteStatus( oDlgReport,2,'Lin: '+LTrim(Str(nLinha,5)))
      hwg_WriteStatus( oDlgReport,3,'Col: '+LTrim(Str(nColuna,3)))
      oEdit:Refresh()
   ENDIF

RETURN -1
Versão 2.17

Código: Selecionar todos

#xcommand @ <x>,<y> RICHEDIT [ <oEdit> TEXT ] <vari> ;
             [ OF <oWnd> ]              ;
             [ ID <nId> ]               ;
             [ SIZE <width>, <height> ] ;
             [ COLOR <color> ]          ;
             [ BACKCOLOR <bcolor> ]     ;
             [<lallowtabs: ALLOWTABS>]  ; 
             [ ON INIT <bInit> ]        ;
             [ ON SIZE <bSize> ]        ;
             [ ON PAINT <bDraw> ]       ;
             [ ON GETFOCUS <bGfocus> ]  ;
             [ ON LOSTFOCUS <bLfocus> ] ;
             [ ON CHANGE <bChange>]     ;
             [[ON OTHER MESSAGES <bOther>][ON OTHERMESSAGES <bOther>]] ;
             [ STYLE <nStyle> ]         ;
             [ FONT <oFont> ]           ;
             [ TOOLTIP <ctoolt> ]       ;
          => ;
          [<oEdit> := ] HRichEdit():New( <oWnd>,<nId>,<vari>,<nStyle>,<x>,<y>,<width>, ;
             <height>,<oFont>,<bInit>,<bSize>,<bDraw>,<bGfocus>, ;
             <bLfocus>,<ctoolt>,<color>,<bcolor>,<bOther>, <.lallowtabs.>,<bChange> );;
          [ <oEdit>:name := <(oEdit)> ]
Versão 2.19

Código: Selecionar todos

#xcommand @ <x>,<y> RICHEDIT [ <oEdit> TEXT ] <vari> ;
            [ OF <oWnd> ]              ;
            [ ID <nId> ]               ;
            [ SIZE <width>, <height> ] ;
            [ COLOR <color> ]          ;
            [ BACKCOLOR <bcolor> ]     ;
            [ ON INIT <bInit> ]        ;
            [ ON SIZE <bSize> ]        ;
            [ ON PAINT <bDraw> ]       ;
            [ ON GETFOCUS <bGfocus> ]  ;
            [ ON LOSTFOCUS <bLfocus> ] ;
            [ STYLE <nStyle> ]         ;
            [ FONT <oFont> ]           ;
            [ TOOLTIP <ctoolt> ]       ;
          => ;
    [<oEdit> := ] HRichEdit():New( <oWnd>,<nId>,<vari>,<nStyle>,<x>,<y>,<width>, ;
                    <height>,<oFont>,<bInit>,<bSize>,<bDraw>,<bGfocus>, ;
                    <bLfocus>,<ctoolt>,<color>,<bcolor> );
    [; hwg_SetCtrlName( <oEdit>,<(oEdit)> )]
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Bug da 2.18

Mensagem por Itamar M. Lins Jr. »

Ola!
Problema resolvido.
2014-12-28 11:25 UTC+0300 Alexander Kresin <alex@belacy.ru>
* utils/dbc/dbchw.prg
* DISPLAYCOUNT set to the combobox in OpenFile()
! contrib/ext_controls/hbrowsex.prg
! Small fix
* include/guilib.ch
* source/winapi/hrichedit.prg
* ON OTHER MESSAGES clause added to richedit for 2.17 compatibility
E resolveu também outro problema com hbrowseEx (browse extendido)

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Bug da 2.18

Mensagem por asimoes »

Itamar,

O problema ainda não foi resolvido e tem outro para completar

Vou postar aqui o que acontece:

É assim que chamo RichEdit, note que tentei das 2 formas: (obs.: isso funciona perfeitamente na 2.17 anterior as mudanças)

Pressionando qq tecla deveria invocar o método OTHERMESSAGES, mas não acontece nada, coloquei até um hwg_msginfo("") para saber que pressionei alguma tecla.
Outra coisa é o hwg_WriteStatus, não está funcionando, não muda nenhum valor na barra de status, não nesta situação porque Msg não está respondendo, mas em outras.

Código: Selecionar todos

      @ 127,019 RichEdit  oEdit TEXT cText SIZE nWIDTH-192,nHEIGHT-130 ;
                OF        oDlgReport ID ID_TEXTO ;
                COLOR     nCorFonteP ;
                BACKCOLOR nCorFundoP ;
                STYLE     WS_HSCROLL+WS_VSCROLL+ES_LEFT+ES_MULTILINE+ES_READONLY ;
                ON        GETFOCUS {|| TopoDoc()};
                FONT      oFont2  
                //ON OTHERMESSAGES {|This,m,wp,lp| richeditProc( this, m,wp, lp ) }             
                
                oEdit:bOther:={|This,m,wp,lp| richeditProc( this, m,wp, lp ) }            

STATIC FUNCTION RichEditProc( oEdit, Msg, wParam, lParam )
LOCAL nPos, nPos1, nPos2, nVirtCode
   
   //nVirtCode := wParam
   
   //IF Msg == WM_KEYUP 
   //ENDIF
   
   IF Msg == WM_KEYDOWN
      hwg_msginfo("")
      nVirtCode := wParam
      IF nVirtCode == VK_F3 
         Texto_Encontrado(oEdit)
      ENDIF
      nPos   :=hwg_SendMessage( oEdit:Handle, EM_GETSEL, 0, 0 )
      nPos1  :=hwg_Loword( nPos ) + 1
      nPos2  :=hwg_Hiword( nPos ) + 1
      nLinha :=hwg_SendMessage(oEdit:Handle, EM_LINEFROMCHAR, -1, 0) + 1
      nColuna:=nPos1 - hwg_SendMessage( oEdit:Handle, EM_LINEINDEX, -1, 0 ) 
      //
      hwg_WriteStatus( oDlgReport,2,'Lin: '+LTrim(Str(nLinha,5)))
      hwg_WriteStatus( oDlgReport,3,'Col: '+LTrim(Str(nColuna,3)))
      oEdit:Refresh()
   ENDIF

RETURN -1
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Bug da 2.18

Mensagem por Itamar M. Lins Jr. »

Ola!
Coloca tudo dentro de um dialog que mostre o problema real, para facilitar.
Assim não dá p/ testar.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Bug da 2.18

Mensagem por Itamar M. Lins Jr. »

Tenta simplificar p/ nós!
Colocar só o essencial.
O serviço de email do SVN está fora do ar, já mandei o problema e voltou tudo :-(

Código: Selecionar todos

#include "hwgui.ch"
Function main
LOCAL oDlg,cText:=""

INIT DIALOG oDlg AT 100,100 SIZE 400,200

@ 10,010 RichEdit oEdit TEXT cText SIZE 200,100 OF oDlg ;
        STYLE  WS_HSCROLL+WS_VSCROLL+ES_LEFT+ES_MULTILINE+ES_READONLY ;
        ON OTHERMESSAGES {|This,m,wp,lp| richeditProc( this, m,wp, lp ) }      
        
        //oEdit:bOther:={|This,m,wp,lp| richeditProc( this, m,wp, lp ) }      

oDlg:Activate()

STATIC FUNCTION RichEditProc( oEdit, Msg, wParam, lParam )
LOCAL nPos, nPos1, nPos2, nVirtCode
 IF Msg == WM_KEYDOWN
   hwg_msginfo("")
   nVirtCode := wParam
   nPos :=hwg_SendMessage( oEdit:Handle, EM_GETSEL, 0, 0 )
   nPos1 :=hwg_Loword( nPos ) + 1
   nPos2 :=hwg_Hiword( nPos ) + 1
   nLinha :=hwg_SendMessage(oEdit:Handle, EM_LINEFROMCHAR, -1, 0) + 1
   nColuna:=nPos1 - hwg_SendMessage( oEdit:Handle, EM_LINEINDEX, -1, 0 ) 
   //
   hwg_WriteStatus( oDlg,2,'Lin: '+LTrim(Str(nLinha,5)))
   hwg_WriteStatus( oDlg,3,'Col: '+LTrim(Str(nColuna,3)))
   oEdit:Refresh()
 ENDIF

RETURN -1
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Bug da 2.18

Mensagem por asimoes »

Itamar,

Tentei simplificar ao máximo que não é fácil deixar de fora minimamente funções para fazer a rotina funcionar.

O fonte está anexado.

Qualquer falta de função por favor avise-me.
Anexos
Edit1.PRG
(6.06 KiB) Baixado 155 vezes
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Bug da 2.18

Mensagem por Itamar M. Lins Jr. »

Ola!
Testa agora.
2014-12-29 15:45 UTC+0300 Alexander Kresin <alex@belacy.ru>
* utils/debugger/build.sh
* CRLF -> LF
* source/winapi/hedit.prg
* Changes in :Refresh(), suggested by Itamar M. Lins Jr.
* source/winapi/hriched.prg
* :bOther is executed now for all messages
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Bug da 2.18

Mensagem por asimoes »

Itamar,

Estamos quase lá, falta resolver ainda o problema da função hwg_WriteStatus que não está modificando valores da barra de status.

Código: Selecionar todos

STATIC FUNCTION RichEditProc( oEdit, Msg, wParam, lParam )
LOCAL nPos, nPos1, nPos2, nVirtCode
   
  
   IF Msg == WM_KEYDOWN
      //hwg_msginfo("")
      nVirtCode := wParam
      IF nVirtCode == VK_ESCAPE
         //hwg_KEYB_EVENT( VK_ESCAPE )
      ENDIF 
      IF nVirtCode == VK_F3 
         Texto_Encontrado(oEdit)
      ENDIF
      nPos   :=hwg_SendMessage( oEdit:Handle, EM_GETSEL, 0, 0 )
      nPos1  :=hwg_Loword( nPos ) + 1
      nPos2  :=hwg_Hiword( nPos ) + 1
      nLinha :=hwg_SendMessage(oEdit:Handle, EM_LINEFROMCHAR, -1, 0) + 1
      nColuna:=nPos1 - hwg_SendMessage( oEdit:Handle, EM_LINEINDEX, -1, 0 ) 
      //
      hwg_WriteStatus( oDlgReport,2,'Lin: '+LTrim(Str(nLinha,5))) //Falta resolver 
      hwg_WriteStatus( oDlgReport,3,'Col: '+LTrim(Str(nColuna,3)))
      oEdit:Refresh()
   ENDIF

RETURN -1
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Bug da 2.18

Mensagem por Itamar M. Lins Jr. »

Ola!
> Another thing is the hwg_WriteStatus, not working, does not change any value in the status bar. Not in this situation because Msg is not responding, but in others.

It works. Probably, you set wrong parameters. The first is a handle of a parent window, the second - part number ( 1, 2, ... ), the third - the text string.

Regards, Alexander.
Caso não funcione, testarei da sua forma, aqui comigo está funcionando.


Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Bug da 2.18

Mensagem por asimoes »

Itamar,

Fazendo uma pesquisa na pasta da HwGui achei a função e os seus parâmetros :

FUNCTION hwg_WriteStatus( oWnd, nPart, cText, lRedraw )

Na chamada em richeditProc faço assim:

hwg_WriteStatus( oDlgReport,2,'Lin: '+LTrim(Str(nLinha,5)))

oDlgReport é o nome da janela dialog que está iniciada como private da função, que neste caso deveria funcionar na função hwg_WriteStatus

Só não passei o parâmetro lRedraw.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Bug da 2.18

Mensagem por Itamar M. Lins Jr. »

Veja a tela, aqui tudo OK!

Código: Selecionar todos

#include "hwgui.ch"
Function main
LOCAL oDlg,cText:="", cPhantom:=""

INIT DIALOG oDlg AT 100,100 SIZE 400,200

@ 10,010 RichEdit oEdit TEXT cText SIZE 200,100 OF oDlg ;
        STYLE  WS_HSCROLL+WS_VSCROLL+ES_LEFT+ES_MULTILINE+ES_WANTRETURN ;
        ON OTHERMESSAGES {|This,m,wp,lp| richeditProc( this, m,wp, lp,oDlg ) }      
        
        //oEdit:bOther:={|This,m,wp,lp| richeditProc( this, m,wp, lp ) }      
       Add status to oDlg parts 100,100,0

@ 10,300 get oPhantom var cPhantom size 0,0

oDlg:Activate()

STATIC FUNCTION RichEditProc( oEdit, Msg, wParam, lParam, oDlg )
LOCAL nPos, nPos1, nPos2, nVirtCode
 
 //nVirtCode := wParam
 
 //IF Msg == WM_KEYUP 
 //ENDIF
 
 IF Msg == WM_KEYDOWN
   //hwg_msginfo("")
   nVirtCode := wParam
   IF nVirtCode == VK_F3 
    //Texto_Encontrado(oEdit)
   ENDIF
   nPos :=hwg_SendMessage( oEdit:Handle, EM_GETSEL, 0, 0 )
   nPos1 :=hwg_Loword( nPos ) + 1
   nPos2 :=hwg_Hiword( nPos ) + 1
   nLinha :=hwg_SendMessage(oEdit:Handle, EM_LINEFROMCHAR, -1, 0) + 1
   nColuna:=nPos1 - hwg_SendMessage( oEdit:Handle, EM_LINEINDEX, -1, 0 ) 
   //
   hwg_WriteStatus( oDlg,2,'Lin: '+LTrim(Str(nLinha,5)))
   hwg_WriteStatus( oDlg,3,'Col: '+LTrim(Str(nColuna,3)))
   oEdit:Refresh()
 ENDIF


RETURN -1
Saudações,
Itamar M. Lins Jr.
Anexos
bugonothers.png
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Bug da 2.18

Mensagem por asimoes »

Acabei de testar passando o último parâmetro lRedraw para .T. nada aconteceu.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Bug da 2.18

Mensagem por asimoes »

Itamar,

Tem uma novidade no seu exemplo

O meu exemplo anexado eu faço assim para iniciar o Status

ADD STATUSEX oStatus TO oDlgReport PARTS 280,90,90,120,0 FONT oFont3 ON INIT {|This| Status(This,aTexto) }

Você está fazendo assim:

Add status to oDlg parts 100,100,0

Vou testar do seu jeito, mas se não me engano estava com problema no ON INIT
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Bug da 2.18

Mensagem por asimoes »

Itamar,

Código: Selecionar todos

Consegui fazer funcionar do seu jeito, agora voltou o problema antigo, a função hwg_WriteStatus não funciona no método ON INIT.

ADD STATUS TO oDlgReport PARTS 280,90,90,120,0 FONT oFont3 ON INIT {|| Status(aTexto,oDlgReport) }  

STATIC FUNCTION Status(aTexto,oDlgReport)
   hwg_WriteStatus(oDlgReport,2,'Lin: '+LTrim(Str(1,5)),.T.)
   hwg_WriteStatus(oDlgReport,3,'Col: '+LTrim(Str(1,3)),.T.)
   hwg_WriteStatus(oDlgReport,4,'Página: '+LTrim(Str(1,5))+" de "+LTrim(Str(Len(aTexto),5)),.T.)
   hwg_WriteStatus(oDlgReport,5,'Antes de imprimir, pense em sua responsabilidade com o meio ambiente.',.T.)
RETURN Nil

Itamar,

Você poderia testar isso para mim?
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Responder