Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.30;
Скачать: CL | DM;

Вниз

mysql koi8-r !!!   Найти похожие ветки 

 
japer   (2003-06-05 17:12) [0]

Доброго времени суток уважаемые эксперты.
Проблема вот в чем мне надо на делфи сделать клиента для мускула.

Как заставить делфи заносить данный в таблицу в koi8-r!


 
Тих   (2003-06-06 01:35) [1]

Если навскидку -
1) Подменить оконную процедуру (в цикле по компонентам формы) или написать наследников для всех DATA-контролов, на WM_CHAR, WM_SETTEXT и пр. - поставить перекодировку или поискать готовые компоненты для koi...
2) Сделать интерфейс на основе TWebBrowser, с HTML-формами в koi.
3) Еще проще - перенастроить MySQL для cp1251; я предполагаю, что тебе клиент нужен для удаленного управления? если не ошибаюсь, то - win-1251 - стандарт де-факто для русскоязычного интернета, а koi8-для русскоязычной электронной почты, и потому имеет смысл делать сайт все-таки под cp1251.

Вполне возможно, что можно и гораздо проще )) как - не знаю. MSDN молчит.



 
japer   (2003-06-06 06:44) [2]

Тих спасибо за ответ.

> 1) Подменить оконную процедуру (в цикле по компонентам формы)
> или написать наследников для всех DATA-контролов, на WM_CHAR,
> WM_SETTEXT и пр. - поставить перекодировку или поискать
> готовые компоненты для koi...


Хотелось бы поподробнее на эту тему или ссылочку на инфу


> 3) Еще проще - перенастроить MySQL для cp1251; я предполагаю,
> что тебе клиент нужен для удаленного управления? если не
> ошибаюсь, то - win-1251 - стандарт де-факто для русскоязычного
> интернета, а koi8-для русскоязычной электронной почты, и
> потому имеет смысл делать сайт все-таки под cp1251.


Не подходит данные должны быть именно в koi8-r т.к треба будет работать и из под линукс также


 
Дмитрий Баранов ©   (2003-06-06 10:37) [3]

msdn.microsoft.com,
Win32 SDK:
см.
Window Procedure,
DefWindowProc,
CallWindowProc,
SetWindowLong

Например - подмена оконной процедуры с изменением обработчика сообщения WM_CHAR:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
lPrevAddr: ULONG;
implementation

function TmpWindowProc(Handle: HWND; Message: UINT; wPrm: integer; lPrm: integer): LRESULT; stdcall;
begin
case Message of
WM_CHAR:
begin
case (Char(wPrm)) of
"a": wPrm := cardinal("b");
"b": wPrm := cardinal("a");
end;
end;
end;
result := CallWindowProc(pointer(lPrevAddr), Handle, Message, wPrm, lPrm);
end;

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
lPrevAddr := GetWindowLong(Edit1.Handle, GWL_WNDPROC);
SetWindowLong(Edit1.Handle, GWL_WNDPROC , integer(@TmpWindowProc));
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
SetWindowLong(Edit1.Handle, GWL_WNDPROC , lPrevAddr);
end;

end.


Т.е. - здесь - жмешь a - печатается b и наоборот. Принцип понятен? Таблицы перекодировок найдешь на delphikingdom.com.
В данном случае можно пробежаться по всем нужным контролам и в конструкторе формы засунуть адрес старой оконной процедуры в св-во Tag контрола, в деструкторе вернуть его на место.
Кроме WM_CHAR надо не забыть про WM_SETTEXT, сообщения буфера и пр.

Второй вариант - создать пакет Data-компонентов, наследников от DBEdit и т.п., где - аналогично - переписать обработчики тех же сообщений.

Третий вариант - пошукать эти кем-то наверняка уже написанные компоненты в интернете :-))







 
Дмитрий Баранов ©   (2003-06-06 10:38) [4]

msdn.microsoft.com,
Win32 SDK:
см.
Window Procedure,
DefWindowProc,
CallWindowProc,
SetWindowLong

Например - подмена оконной процедуры с изменением обработчика сообщения WM_CHAR:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
lPrevAddr: ULONG;
implementation

function TmpWindowProc(Handle: HWND; Message: UINT; wPrm: integer; lPrm: integer): LRESULT; stdcall;
begin
case Message of
WM_CHAR:
begin
case (Char(wPrm)) of
"a": wPrm := cardinal("b");
"b": wPrm := cardinal("a");
end;
end;
end;
result := CallWindowProc(pointer(lPrevAddr), Handle, Message, wPrm, lPrm);
end;

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
lPrevAddr := GetWindowLong(Edit1.Handle, GWL_WNDPROC);
SetWindowLong(Edit1.Handle, GWL_WNDPROC , integer(@TmpWindowProc));
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
SetWindowLong(Edit1.Handle, GWL_WNDPROC , lPrevAddr);
end;

end.


Т.е. - здесь - жмешь a - печатается b и наоборот. Принцип понятен? Таблицы перекодировок найдешь на delphikingdom.com.
В данном случае можно пробежаться по всем нужным контролам и в конструкторе формы засунуть адрес старой оконной процедуры в св-во Tag контрола, в деструкторе вернуть его на место.
Кроме WM_CHAR надо не забыть про WM_SETTEXT, сообщения буфера и пр.

Второй вариант - создать пакет Data-компонентов, наследников от DBEdit и т.п., где - аналогично - переписать обработчики тех же сообщений.

Третий вариант - пошукать эти кем-то наверняка уже написанные компоненты в интернете :-))







 
Дмитрий Баранов ©   (2003-06-06 10:38) [5]

msdn.microsoft.com,
Win32 SDK:
см.
Window Procedure,
DefWindowProc,
CallWindowProc,
SetWindowLong

Например - подмена оконной процедуры с изменением обработчика сообщения WM_CHAR:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
lPrevAddr: ULONG;
implementation

function TmpWindowProc(Handle: HWND; Message: UINT; wPrm: integer; lPrm: integer): LRESULT; stdcall;
begin
case Message of
WM_CHAR:
begin
case (Char(wPrm)) of
"a": wPrm := cardinal("b");
"b": wPrm := cardinal("a");
end;
end;
end;
result := CallWindowProc(pointer(lPrevAddr), Handle, Message, wPrm, lPrm);
end;

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
lPrevAddr := GetWindowLong(Edit1.Handle, GWL_WNDPROC);
SetWindowLong(Edit1.Handle, GWL_WNDPROC , integer(@TmpWindowProc));
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
SetWindowLong(Edit1.Handle, GWL_WNDPROC , lPrevAddr);
end;

end.


Т.е. - здесь - жмешь a - печатается b и наоборот. Принцип понятен? Таблицы перекодировок найдешь на delphikingdom.com.
В данном случае можно пробежаться по всем нужным контролам и в конструкторе формы засунуть адрес старой оконной процедуры в св-во Tag контрола, в деструкторе вернуть его на место.
Кроме WM_CHAR надо не забыть про WM_SETTEXT, сообщения буфера и пр.

Второй вариант - создать пакет Data-компонентов, наследников от DBEdit и т.п., где - аналогично - переписать обработчики тех же сообщений.

Третий вариант - пошукать эти кем-то наверняка уже написанные компоненты в интернете :-))







 
Дмитрий Баранов ©   (2003-06-06 10:38) [6]

msdn.microsoft.com,
Win32 SDK:
см.
Window Procedure,
DefWindowProc,
CallWindowProc,
SetWindowLong

Например - подмена оконной процедуры с изменением обработчика сообщения WM_CHAR:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
lPrevAddr: ULONG;
implementation

function TmpWindowProc(Handle: HWND; Message: UINT; wPrm: integer; lPrm: integer): LRESULT; stdcall;
begin
case Message of
WM_CHAR:
begin
case (Char(wPrm)) of
"a": wPrm := cardinal("b");
"b": wPrm := cardinal("a");
end;
end;
end;
result := CallWindowProc(pointer(lPrevAddr), Handle, Message, wPrm, lPrm);
end;

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
lPrevAddr := GetWindowLong(Edit1.Handle, GWL_WNDPROC);
SetWindowLong(Edit1.Handle, GWL_WNDPROC , integer(@TmpWindowProc));
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
SetWindowLong(Edit1.Handle, GWL_WNDPROC , lPrevAddr);
end;

end.


Т.е. - здесь - жмешь a - печатается b и наоборот. Принцип понятен? Таблицы перекодировок найдешь на delphikingdom.com.
В данном случае можно пробежаться по всем нужным контролам и в конструкторе формы засунуть адрес старой оконной процедуры в св-во Tag контрола, в деструкторе вернуть его на место.
Кроме WM_CHAR надо не забыть про WM_SETTEXT, сообщения буфера и пр.

Второй вариант - создать пакет Data-компонентов, наследников от DBEdit и т.п., где - аналогично - переписать обработчики тех же сообщений.

Третий вариант - пошукать эти кем-то наверняка уже написанные компоненты в интернете :-))







 
Дмитрий Баранов ©   (2003-06-06 10:38) [7]

msdn.microsoft.com,
Win32 SDK:
см.
Window Procedure,
DefWindowProc,
CallWindowProc,
SetWindowLong

Например - подмена оконной процедуры с изменением обработчика сообщения WM_CHAR:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
lPrevAddr: ULONG;
implementation

function TmpWindowProc(Handle: HWND; Message: UINT; wPrm: integer; lPrm: integer): LRESULT; stdcall;
begin
case Message of
WM_CHAR:
begin
case (Char(wPrm)) of
"a": wPrm := cardinal("b");
"b": wPrm := cardinal("a");
end;
end;
end;
result := CallWindowProc(pointer(lPrevAddr), Handle, Message, wPrm, lPrm);
end;

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
lPrevAddr := GetWindowLong(Edit1.Handle, GWL_WNDPROC);
SetWindowLong(Edit1.Handle, GWL_WNDPROC , integer(@TmpWindowProc));
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
SetWindowLong(Edit1.Handle, GWL_WNDPROC , lPrevAddr);
end;

end.


Т.е. - здесь - жмешь a - печатается b и наоборот. Принцип понятен? Таблицы перекодировок найдешь на delphikingdom.com.
В данном случае можно пробежаться по всем нужным контролам и в конструкторе формы засунуть адрес старой оконной процедуры в св-во Tag контрола, в деструкторе вернуть его на место.
Кроме WM_CHAR надо не забыть про WM_SETTEXT, сообщения буфера и пр.

Второй вариант - создать пакет Data-компонентов, наследников от DBEdit и т.п., где - аналогично - переписать обработчики тех же сообщений.

Третий вариант - пошукать эти кем-то наверняка уже написанные компоненты в интернете :-))







 
Дмитрий Баранов ©   (2003-06-06 10:39) [8]

Вот взглюкнуло-то...
501 - Not implemented


 
Дмитрий Баранов ©   (2003-06-06 10:45) [9]

уточнение: это я показал принцип перекодировки "на лету", т.е на самом деле, имхо, в реализации компонента должен быть какой-то внутренний буфер, в который пишется перекодированная в koi строка, и именно эта перекодированная строка должна вноситься в базу, в контроле же должен отображаться обычный (в win1251) текст.


 
japer   (2003-06-06 13:18) [10]

Большое спасибо за совет.



Страницы: 1 вся ветка

Текущий архив: 2003.06.30;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.021 c
1-97655
EugenePichugin
2003-06-19 15:56
2003.06.30
Вопрос по разработке интерфейса. Дайте совет.


1-97603
denis24
2003-06-17 10:34
2003.06.30
функция STR()


14-97799
Asteroid
2003-06-11 15:20
2003.06.30
Где можно скачать LightWave?


3-97548
_Andrew_
2003-06-07 02:05
2003.06.30
Ускорение поиска


3-97543
Hawk2
2003-06-06 10:37
2003.06.30
Конструкция UPDATE&SELECT