Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.04.2013, 13:46   #1
viks1
человек
Форумчанин
 
Аватар для viks1
 
Регистрация: 11.05.2009
Сообщений: 517
По умолчанию Мелочи

Доброго времени суток!
я решил не создавать много тем, а вместить все свои мелочные вопросики в одну.

1. Перемещение между TEdit ами по нажатию Enter
Да, я сделал что бы перемещало, но оно издает звуки...
как убрать?
Код:
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if key=13 then
Edit2.SetFocus;
end;

2. Как сделать что бы компонент Label не выводил все в одну строку, возможно сделать какой то переход? ну например у меня в форме он не вмещается, хочется что бы был перенос строки. Но у меня уже есть заданный текст, это не вывод, а просто надпись. Он такое может?

Последний раз редактировалось viks1; 13.04.2013 в 13:55.
viks1 вне форума Ответить с цитированием
Старый 13.04.2013, 14:34   #2
viks1
человек
Форумчанин
 
Аватар для viks1
 
Регистрация: 11.05.2009
Сообщений: 517
По умолчанию Блок схема

Есть программа, на нее нужна блок схема. Я ее рисую, но не знаю как быть с процедурой VAL??

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;//Для цыкла
buf:integer; // для степени
M,N,D, R:integer; //число, степень, делимое , результат
mCode, nCode, dCode:integer;//для проверки на вводимые данные

begin
buf:=1;
val(Edit1.text, M, mCode);  //Edit1  M
val(Edit2.text, N, nCode);  //Edit2  N
val(Edit3.text, D, dCode);  //Edit3  D
if (mCode<>0) or (nCode<>0)or (dCode<>0) then
label1.caption:='ERROR ENTER DATA' else
if (M>30000) or (N>30000) or (D>120) or (D=0) then
label1.caption:='range exceeded'
 else
begin
for i := 1 to N do   //возводм в степень
  buf:=buf*M;

  R:=buf div D;
  label1.Caption:='Resul: '+IntToStr(R);
  D:=0;
  buf:=1;
  M:=0;
  N:=0;
end;
end;

Последний раз редактировалось viks1; 13.04.2013 в 14:38.
viks1 вне форума Ответить с цитированием
Старый 13.04.2013, 15:11   #3
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Цитата:
2. Как сделать что бы компонент Label не выводил все в одну строку, возможно сделать какой то переход? ну например у меня в форме он не вмещается, хочется что бы был перенос строки. Но у меня уже есть заданный текст, это не вывод, а просто надпись. Он такое может?
Может. В Object inspector установить свойство WordWrap в true, AutoSize установить в false, далее мышкой зацепить этот самый label за чёрный маркер и придать нужный размер. Текст будет внутри этого "прямоугольника".
Вадим Мошев вне форума Ответить с цитированием
Старый 13.04.2013, 15:14   #4
viks1
человек
Форумчанин
 
Аватар для viks1
 
Регистрация: 11.05.2009
Сообщений: 517
По умолчанию

Цитата:
Сообщение от Вадим Мошев Посмотреть сообщение
Может. В Object inspector установить свойство WordWrap в true, AutoSize установить в false, далее мышкой зацепить этот самый label за чёрный маркер и придать нужный размер. Текст будет внутри этого "прямоугольника".
спасибо огромное!
viks1 вне форума Ответить с цитированием
Старый 13.04.2013, 16:55   #5
WhiskasTM
Подтвердите свой е-майл
 
Регистрация: 11.04.2012
Сообщений: 85
По умолчанию

Без beep-а.
Код:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key=#13 then
begin
    //SelectNext(Sender as TWinControl,True,True);
    Edit2.SetFocus;
    Key:=#0;
end;
end;

procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
if Key=#13 then
begin
    //SelectNext(Sender as TWinControl,True,True);
    Edit1.SetFocus;
    Key:=#0;
end;
end;
Label может автоматом растягивается в высоту после Label.Caption:=Label.Caption+#13#10 +'New Line';
Будет две строки. Так?
WhiskasTM вне форума Ответить с цитированием
Старый 13.04.2013, 18:57   #6
viks1
человек
Форумчанин
 
Аватар для viks1
 
Регистрация: 11.05.2009
Сообщений: 517
По умолчанию

Цитата:
Сообщение от WhiskasTM Посмотреть сообщение
Без beep-а.
Код:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key=#13 then
begin
    //SelectNext(Sender as TWinControl,True,True);
    Edit2.SetFocus;
    Key:=#0;
end;
end;

procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
if Key=#13 then
begin
    //SelectNext(Sender as TWinControl,True,True);
    Edit1.SetFocus;
    Key:=#0;
end;
end;
Label может автоматом растягивается в высоту после Label.Caption:=Label.Caption+#13#10 +'New Line';
Будет две строки. Так?
Да, спасибо!
viks1 вне форума Ответить с цитированием
Старый 14.04.2013, 13:23   #7
viks1
человек
Форумчанин
 
Аватар для viks1
 
Регистрация: 11.05.2009
Сообщений: 517
По умолчанию Динамический массив типа Integer

Столкнулся с веселой проблемой, когда массиву пофиг на мой указатель. Он сортирует автоматически.

Это я пытаюсь реализовать вот этот шифр по этому алгоритму.

Вот что я хотел сделать:
Есть массив с русскими буквами (Пока что просто большие русские буквы, потом пополню массив) , индекс в массиве будет индексом для буквы.
Создаю второй массив, уже динамический, целочисленный
Туда помещаю свое сообщение уже в индексах.
Но только проблема в том, что он как то сортирует все мои индексы по порядку и ему пофиг на указатель!
Что это такое? я может чего то не знаю?
Код:

var
  Form1: TForm1;
  index: array [1 .. 31] of char = ('А', 'Б', 'В', 'Г', 'Д', 'Ж', 'З', 'И',
    'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч',
    'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я');
    type
    mass = array of integer;
    Str = String;
    int = integer;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
indata:mass;
W:Str;
i,j,Lh:int;
p:int;
temp:str;
begin
W:=Edit1.Text;
Lh:=Length(W);
SetLength(indata, Lh);
p:=0;
for i := 1  to Lh do
  begin
    for j := 1 to 31  do
      begin
        if w[i]=index[j] then
        begin
          indata[p]:=j;
          p:=p+1;
          break
        end else
          p:=p+1;
      end;
      p:=0;
  end;
  end;
viks1 вне форума Ответить с цитированием
Старый 14.04.2013, 14:19   #8
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

если у вас проблемы с многоуровневыми циклами.
вынесите внутренний цикл в отдельную функцию
GetcharIndex определение индекса для заданного символа.
и получите два простых цикла каждый из которых легко проверяем.
Код:
function GetcharIndex(c: char): integer;
var
  j: integer;
begin
   result:=0;
    for j := 1 to 31  do begin
        if w[i]=index[j] then begin
          result:=j;
          break
        end;
    end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  indata:mass;
  W:Str;
  i,j,Lh:int;
  p:int;
  temp:str;
begin
  W:=Edit1.Text;
  Lh:=Length(W);
  SetLength(indata, Lh);
  p:=0;
  for i := 1  to Lh do begin
    myind:=GetcharIndex(index[j]);
    inddata[p]:=myind;
    p:=p+1; 
    end;
  end;
end;
P.S. обнаружил ошибку но исправлять не буду.
Д.з. на демонстрацию утверждения
Цитата:
два простых цикла каждый из которых легко проверяем.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 14.04.2013 в 14:24.
evg_m вне форума Ответить с цитированием
Старый 14.04.2013, 16:15   #9
viks1
человек
Форумчанин
 
Аватар для viks1
 
Регистрация: 11.05.2009
Сообщений: 517
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
Д.з. на демонстрацию утверждения
Код:
var
  Form1: TForm1;
  index: array [1 .. 31] of char = ('А', 'Б', 'В', 'Г', 'Д', 'Ж', 'З', 'И',
    'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч',
    'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я');
    W:String;
    i:integer;
    j: integer;
    type
    mass = array of integer;
    Str = String;
    int = integer;

implementation

{$R *.dfm}

function GetcharIndex(c: string): integer;

begin
   result:=0;
    for j := 1 to 31  do begin
        if w[i]=index[j] then begin
          result:=j;
          break
        end;
    end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  indata:mass;

  Lh:int;
  p:int;
  temp:str;
  myind:integer;
begin
  W:=Edit1.Text;
  Lh:=Length(W);
  SetLength(indata, Lh);
  p:=0;
  for i := 1  to Lh do begin
    myind:=GetcharIndex(index[j]);
    indata[p]:=myind;
    p:=p+1;
    end;
  end;
отладчиком проверил по этапам , все работает!
Правильно? это имели ввиду?
viks1 вне форума Ответить с цитированием
Старый 15.04.2013, 09:54   #10
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Цитата:
Правильно? это имели ввиду?
Увы, нет.
то что сделали вы не спорю работает, но вы напрочь исключили возможность модификации программы без правки выделенной функции. Вместо локальных данных ввели(стали использовать) глобальные.
Код:
 if w[i] =index[j] then begin
Надо было всего

впрочем это скорее еще одна моя сopy +paste
надо было
Код:
     if с=index[j] then begin
и использовать так
Код:
 myind:=GetcharIndex(W[j]);
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Идиотский звук при нажатии enter у TEdit Crystallon Общие вопросы Delphi 3 22.06.2011 07:33
Переход по нажатию ENTER в заданном порядке Dog_DinGo Microsoft Office Excel 9 28.02.2011 12:18
Переключения между Edit-ами??? FantomasRUS Общие вопросы Delphi 4 30.04.2010 13:27
По нажатию Enter Cpluser Общие вопросы .NET 4 30.04.2009 10:28
По нажатию Enter Andr Общие вопросы Delphi 8 22.12.2008 16:58