Форум: "Базы";
Текущий архив: 2003.06.30;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.008 c