Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.08.19;
Скачать: [xml.tar.bz2];

Вниз

Проблема с "я"   Найти похожие ветки 

 
vasIZmax ©   (2007-07-20 03:05) [0]

Столкнулся с такой проблемкой: буква "я" не выводится в caption.
Дело в том что после работы с программой данные записываются в ini-файл. Потом при запуске данные считываются из этого файла и записываются по различным Edit"am, Panel and Button, и тут возникает указанная проблемка (предположим считывается слово "статья"): в edit - слово "статья" нормально записывается, потом на каждый символ создается панель, и в свойство caption выводится по одному символу, и панель где должна быть буква "я" - пустая.

В чем может быть проблема?


 
ASoft   (2007-07-20 04:50) [1]

...
> потом на каждый символ создается панель, и в свойство caption
> выводится по одному символу

как создаешь? кусок кода давай..


 
vasIZmax ©   (2007-07-20 05:17) [2]

Пишу пошагово (может за одно и саму станет ошибка видна).
При первом запуске проги в поле едит пишем слово "Статья".
Нажимаем кнопку и создаются панели таким образом:
procedure tform1.CreateBut;
Var
wer: TPanel;
s:string;
t:integer;
Begin
t:=0;
 s:=edit1.Text;
   repeat
   wer:=TPanel.Create(form1);
   inc(t);
   wer.Top:= random(350)+60;
   wer.Left:=random(350)+60;
   wer.Name:="but"+inttostr(t);
   wer.Caption:=s[t];
   wer.Font.Size:=16;
   wer.Parent:=form1;
   until t=length(edit1.Text);
t:=0;
end;

Затем закрываем форму.
В событии destroy пишем следующий код:
procedure TForm1.FormDestroy(Sender: TObject);
var
 Ini: Tinifile;
 s:string;
begin
s:=edit1.Text;
Ini:=TiniFile.Create(extractfilepath(paramstr(0))+"MyIni.ini");
if s<>"" then
ini.WriteString("Edit_Text", "edit1", s)
else
ini.WriteString("Edit_Text", "edit1", "Статья");
Ini.Free;
end;

Потом при следующем запуске программы(событие Create) пишу следующее:
procedure TForm1.FormCreate(Sender: TObject);
var
 Ini: Tinifile;
 tr: integer;
begin
randomize;
Ini:=TiniFile.Create(extractfilepath(paramstr(0))+"MyIni.ini");
edit1.Text:=ini.ReadString("Edit_Text", "edit1","Статья");
CreateBut;
Ini.Free;
end;


И в итоге: создаются нужное количество панелей ("Статья", шесть букв->шесть панелей),
но на панели на которой должна быть буква "я" - ничего нет.
В чем проблема? Какой-то нюанс упускаю, а вот какой подскажите, плиз.

ЗЫ. С подобным сталкивался при работе с OpenGl выводом текста, но так как был выбран другой путь реализации не стал разбираться в чем проблема:((... а стоило

ЗЫЫ. Часть кода опущена, но это на суть проблемы ни каим образом не влияет!


 
ASoft   (2007-07-20 06:21) [3]

Попробуй так:

procedure tform1.CreateBut;
Var
wer: TPanel;
s:string;
t:integer;
Begin
t:=1;
s:=edit1.Text;
 While t<=length(edit1.Text) do
  begin
   wer:=TPanel.Create(form1);
   wer.Top:= random(350)+60;
   wer.Left:=random(350)+60;
   wer.Name:="but"+inttostr(t);
   wer.Caption:=s[t];
   wer.Font.Size:=16;
   wer.Parent:=form1;
   inc(t);
  end;
end;

в твоем коде, при достижении t=6 сразу происходит выход их цикла и 6 буква не обрабатывается


 
vasIZmax ©   (2007-07-20 06:25) [4]


> ASoft   (20.07.07 06:21) [3]


А если будет не "статья", а "проявка"?:-)

здесь в чем-то другом проблема((


 
ASoft   (2007-07-20 06:40) [5]


> А если будет не "статья", а "проявка"?:-)

а ты проверь


 
vasIZmax ©   (2007-07-20 06:46) [6]


> ASoft   (20.07.07 06:40) [5]

Результат = 0...
Даже если так:
ini.WriteString("Edit_Text", "edit1", "Прояяяяявка");
ни одной не появляется буквы "я"


 
ASoft   (2007-07-20 07:18) [7]

Я - появляется, я - нет:-)


 
ASoft   (2007-07-20 07:32) [8]

поставь пробел перед s[t]: wer.Caption:=" "+s[t];
если тебя это устроит


 
vasIZmax ©   (2007-07-20 07:37) [9]


> ASoft   (20.07.07 07:32) [8]

Хм... странный ход, но главное - рабочий. И меня устроит. Спс.

ЗЫ. А вот почему без пробела не желает появляться буква, вот это интересно)))


 
Anatoly Podgoretsky ©   (2007-07-20 07:45) [10]

> vasIZmax  (20.07.2007 07:37:09)  [9]

Потому что у нее код $FF


 
vasIZmax ©   (2007-07-20 08:17) [11]


> Anatoly Podgoretsky ©   (20.07.07 07:45) [10]

И как такие проблемы обходить?


 
Desdechado ©   (2007-07-20 10:45) [12]

Если мне не изменяет память, это проблема конкретной версии Дельфи (кстати, твоя не указана).
И пробел в строке должен решать проблему.


 
vasIZmax ©   (2007-07-20 11:01) [13]


> Desdechado ©   (20.07.07 10:45) [12]

Сорри, версия 7.
В данном случае да - пробел решает проблему.

А вот код (сразу скажу что не мой, взято у Краснова из примеров к книге по OpenGL) - так в нем не решается эта проблема пробелом (так и быть сейчас спрошу, все-равно через недельку-другую спросил бы)

unit frmMain;

interface

uses
Windows, Messages, Classes, Graphics, Forms, ExtCtrls, Menus,
Controls, Dialogs, SysUtils,
OpenGL;

type
 TfrmGL = class(TForm)
   procedure FormCreate(Sender: TObject);
   procedure FormResize(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
   procedure FormPaint(Sender: TObject);
   procedure FormKeyDown(Sender: TObject; var Key: Word;
     Shift: TShiftState);

 private
   DC : HDC;
   hrc : HGLRC;

   procedure InitializeRC;
   procedure SetDCPixelFormat;
 end;

const
 GLF_START_LIST = 1000;

var
 frmGL: TfrmGL;

implementation

{$R *.DFM}

{=======================================================================
Вывод текста}
procedure OutText (Litera : PChar);
begin
 glListBase(GLF_START_LIST);
 glCallLists(Length (Litera), GL_UNSIGNED_BYTE, Litera);
end;

{=======================================================================
Процедура инициализации источника цвета}
procedure TfrmGL.InitializeRC;
begin
 glEnable(GL_DEPTH_TEST);// разрешаем тест глубины
 glEnable(GL_LIGHTING);  // разрешаем работу с освещенностью
 glEnable(GL_LIGHT0);    // включаем источник света 0
end;

{=======================================================================
Рисование картинки}
procedure TfrmGL.FormPaint(Sender: TObject);
begin
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
// вывод текста
OutText ("Проба");
SwapBuffers(DC);
end;

{=======================================================================
Установка формата пикселей}
procedure TfrmGL.SetDCPixelFormat;
var
 nPixelFormat: Integer;
 pfd: TPixelFormatDescriptor;
begin
 FillChar(pfd, SizeOf(pfd), 0);

 With pfd do begin
   dwFlags   := PFD_DRAW_TO_WINDOW or
                PFD_SUPPORT_OPENGL or
                PFD_DOUBLEBUFFER;
   cDepthBits:= 32;
 end;

 nPixelFormat := ChoosePixelFormat(DC, @pfd);
 SetPixelFormat(DC, nPixelFormat, @pfd);
end;

{=======================================================================
Создание окна}
procedure TfrmGL.FormCreate(Sender: TObject);
begin
 DC := GetDC(Handle);
 SetDCPixelFormat;
 hrc := wglCreateContext(DC);
 wglMakeCurrent(DC, hrc);
 glClearColor (0.3, 0.4, 0.6, 1.0);
 wglUseFontOutlines (Canvas.Handle, 0, 255, GLF_START_LIST, 50, 0.15,
                     WGL_FONT_POLYGONS, nil);
 InitializeRC;
end;

{=======================================================================
Изменение размеров окна}
procedure TfrmGL.FormResize(Sender: TObject);
begin
 glMatrixMode(GL_PROJECTION);
 glLoadIdentity;
 gluPerspective(15.0, ClientWidth / ClientHeight, 1.0, 20.0);
 glViewport(0, 0, ClientWidth, ClientHeight);
 glMatrixMode(GL_MODELVIEW);
 glLoadIdentity;
 glTranslatef(-0.8, -0.7, -9.0);
 glRotatef(30.0, 1.0, 1.0, 0.0);
 glRotatef(30.0, 0.0, 1.0, 0.0);
 InvalidateRect(Handle, nil, False);
end;

procedure TfrmGL.FormDestroy(Sender: TObject);
begin
 glDeleteLists (GLF_START_LIST, 256);
 wglMakeCurrent(0, 0);
 wglDeleteContext(hrc);
 ReleaseDC(Handle, DC);
 DeleteDC(DC);
end;

procedure TfrmGL.FormKeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
begin
 If Key = VK_ESCAPE then Close
end;

end.


вот здесь пробел не помогает((

ЗЫ. вот уж это "я"(((


 
Ivolg ©   (2007-07-20 11:13) [14]

Можно так:

var
  S, S2: String;
  I: Integer;
  Wer: TPanel;
begin
    S := Edit1.Text;
    for I := 0 to Length(Edit1.Text) - 1 do
     begin
       S2 := Copy(S, 1, 1);
       Delete(S, 1, 1);
       Wer := TPanel.Create(Form1);
       Wer.Top := Random(350) + 60;
       Wer.Left := Random(350) + 60;
       Wer.Name := "but" + Inttostr(I);
       Wer.Caption := S2;
       Wer.Font.Size :=16;
       Wer.Parent := Form1;
     end;
end;


 
Игорь Шевченко ©   (2007-07-20 11:36) [15]


> Если мне не изменяет память, это проблема конкретной версии
> Дельфи (кстати, твоя не указана).


Это проблема Windows
http://www.delphikingdom.com/asp/articles_forum.asp?ArticleID=628


 
Ivolg ©   (2007-07-20 11:43) [16]

Немного доработал:

var
  S, S2: String;
  I: Integer;
  Wer: TPanel;
begin
    S := Edit1.Text;
    for I := 0 to Length(Edit1.Text) - 1 do
     begin
       S2 := Copy(S, 1, 1);
       Delete(S, 1, 1);
       Wer := TPanel.Create(Form1);
       Wer.Top := Random(350) + 60;
       Wer.Left := Random(350) + 60;
       Wer.Name := "but" + Inttostr(I);
       if (S2 = "я") or (S2="Я") then
         Wer.Caption := " "+S2
       else
       Wer.Caption := S2;
       Wer.Font.Size :=16;
       Wer.Parent := Form1;
     end;
end;


 
vasIZmax ©   (2007-07-20 11:46) [17]


> Ivolg ©   (20.07.07 11:43) [16]

Имхо,

>  if (S2 = "я") or (S2="Я") then

подчеркнутое лишнее. проверять надо только на маленькую "я", с большой все в порядке. Но о copy/delete даже не подумал, спс))


 
Stanislav ©   (2007-07-20 12:22) [18]

Главное чтобы проблем с собственным "Я" небыло :-)



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

Форум: "Начинающим";
Текущий архив: 2007.08.19;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.039 c
2-1185025167
CatAlone
2007-07-21 17:39
2007.08.19
Drag and drop и extractfilename


2-1185494148
Раф
2007-07-27 03:55
2007.08.19
Форма на панели задач...


15-1184940907
VirEx
2007-07-20 18:15
2007.08.19
посоветуйте кондиционер


11-1168181437
retr
2007-01-07 17:50
2007.08.19
Есть ли TCP клиент для KOL умеющий работать через SOCKS 4/5?


15-1184749301
Коллер
2007-07-18 13:01
2007.08.19
веб 2.0 и доткомы





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский