Нельзя преобразовать тип char к word

 
Kraj
 
(2004-02-26 15:40)
[0]

Нужно в OnKeyUp отловить отпускание русских клавиш т.е. при нажатии клавиши символ попадает в Edit, а при отпускании запускается запрос на поиск по базе. Если отлавливать в OnKeyPress то поиск отстает на один символ т.е. запускается сначала запрос, а поттом символ попадает в Edit, что приводит к поиску по базе без учета последнего символа (во блин нагородил). Ничего лучше не придумал как запускать запрос в OnKeyUp но там реагирует на нажатие всех клавиш. Удалось отловить Enter и Backspace (#13 и #8 соответственно), а на русские символы не реагирует. Преобразовать Word в Char можно через Chr(), а вот как наоборот Char в Word не знаю, может кто поможет или есть другое решение или где ошибка

if not (chr(Key) in [«а»..»я»,#13,#8]) then

Key:=0


 
Ega23
 
(2004-02-26 15:42)
[1]

Ord


 
VAleksey
 
(2004-02-26 15:47)
[2]

Насколько я понял, нужен инкрементальный локатор?

Тогда так:

procedure TForm1.Edit1Change(Sender: TObject);

begin

Table1.Locate("Field",Edit1.Text,[loCaseInsensitive, loPartialKey]);

end;

PS

Вместо Locate, можно использовать запрос.

PPS

Сабж реализуется с помощью функции Ord.


Строку string = AnsiString я написал в секции interface основной формы приложения, сразу после type.
Как только начал печатать, редактор Delphi сразу подчеркнул string красным цветом, а когда запустил на компиляцию выдал ошибку
«Identifier expected but «STRING» found». Вот)

Добавлено через 5 минут
Далее, попробовал ВЕЗДЕ заменить string на AnsiString. Оказало не всё так просто…
Ниже привожу пример моей функции, на которой споткнулся компилятор, и выдал ошибку
Incompatible types: ‘AnsiChar’ and ‘Char’ (почему то на 11 строке):

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function ReplaceAllQuote(const sText: AnsiString): AnsiString;
{возвращает результат замены всех простых двойных кавычек двойными кавычками в стиле MS Word}
var
  i, x1, x2: Integer;
begin
  Result := sText;
  i := Pos('"', Result);
  while i > 0 do begin // меняем ВСЕ '"' на '«' и '»'
    if i = 1 then Result[i] := '«' else
      if i = Length(Result) then Result[i] := IIf((Result[i-1] = ' '), '«', '»')
      else begin
        if Result[i-1] = ' ' then x1 := 1 else
          if Result[i-1] in scLetters then x1 := 3 else x1 := 2;
        if Result[i+1] = ' ' then x2 := 1 else
          if Result[i+1] in scLetters then x2 := 3 else x2 := 2;
        Result[i] := IIf((x1 < x2), '«', '»');
      end;
    i := Pos('"', Result);
  end;
end;

Добавлено через 1 час 27 минут
… нашёл, на что ругался компилятор… переделал строку 10 и 16 вот по такому типу:

Delphi
1
Result[i] := AnsiChar(IIf((Result[i-1] = ' '), '«', '»'))

В общем, долго я менял string на AnsiString, где то оказалось надо обратно на string вернуть, потому что
если обращался к функциям из Vcl, у которых в параметрах нужно было именно string передать, то там уже
нельзя было передавать переменную типа AnsiString…

Короче, наконец компилятор пропустил все строки программы, но она работает неправильно, глюк на глюке…
И видно что это всё из-за строк разных. Объясните пожалуйста — это такая петрушка надолго типа? То есть
нет какого-то одного чёткого правила перевода программы из старого Delphi в новый??

Или может я вообще зря везде на AnsiString менял, может надо было строки то Unicode оставить, а переделывать
Set of Char ? В общем одни заморочки какие-то с этими строками… И когда программа большая (несколько десятков тысяч строк), то так сложно выловить это всё… Что делать то?

Форум мехмата ЮФУ

Загрузка…

program Traektoria;
 
uses
  GraphABC;
 
var
  x1, y1, x, y: integer;
  S, Vg, t, g, V, alpha, it: real;
 
begin
  writeln('введите начальную скорость (м/с) ');
  readln(V);
  writeln('введите градусную меру угла наклона вектора скорости');
  readln(alpha);
  alpha := alpha / (180 / pi);
  writeln('введите значение ускорения свободного падения');
  readln(g);
  ClearWindow;
  Pen.Color := clBlack;
  Pen.Width := 3;
  Coordinate.OriginY := Window.Height;  //ставим начало координат по Y в нижний левый угол окна
  Coordinate.SetMathematic;  //Ставим "математическую" ось
  S := 2 * sqr(V) * sin(alpha) / g;
  Vg := V * cos(alpha);
  t := S / Vg / 2;
  x := 0;
  y := 0;
  it := 0;
  while it < t do 
  begin
    it := it + 0.0000001; 
    x1 := x;
    y1 := y;
    x := round(50*(Vg * it));
    y := round(50*(V * it * sin(alpha) - g * sqr(it) / 2));
    Line(x1, y1, x, y);
  end;
end.

See more:

i have created following object of SYSTEMTIME which has attributes like wDay, wMinute, wHour etc which are WORD…

SYSTEMTIME s_t;

I want to print s_t.wDay or s_t.wHour in DataGridView column( i.e type System::String). So i get error like «cant convert WORD to System::String»
So i tried to convert
1)WORD to char* then
2)char* to System::String but doing some mistake..plz help

my code is
dataGridView1->Rows[0]->Cells[0]->Value=????? (here i want s_t.wDay )
i tried with _ultoa for conversion WORD to char*.. but dont know how to do that..


The best way is to use a function that will format the details, such as String::Format[^].

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

CodeProject,
20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8
+1 (416) 849-8900

Понравилась статья? Поделить с друзьями:
  • Нельзя поставить фильтр в excel
  • Нельзя переименовать лист в excel
  • Нельзя открыть документ word
  • Нельзя копировать в excel
  • Нельзя использовать операторы ссылок excel