Главная страница
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.015 c
14-97795
Juster~
2003-06-14 20:17
2003.06.30
Время выполнения


4-97937
DelBoy
2003-04-25 22:33
2003.06.30
Пересылка события нажатия клавиши


14-97886
Makhanev A.S.
2003-06-13 18:26
2003.06.30
Напомните название популярной индийской песни


1-97677
dimon1979
2003-06-17 15:02
2003.06.30
константы и массивы


6-97769
Nigger
2003-04-25 02:25
2003.06.30
WInSock API???