Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
3-97517
Hose
2003-06-05 10:35
2003.06.30
Позиционирование на вновь вставленную запись.


4-97934
APanyovin
2003-04-26 14:44
2003.06.30
Запуск зарегистрированного разрешения *.doc, *.xls, ///


1-97599
Aleksandr
2003-06-17 15:10
2003.06.30
Как по цвету фона задать цвет текста?


14-97833
DDDD
2003-06-12 09:34
2003.06.30
Microsoft DDK


7-97908
aTeRm
2003-04-19 13:25
2003.06.30
Установка шрифтов





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский