Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> InputBox усекает строку, 256 символами 
V
    Опции темы
Akella
  Дата 27.3.2010, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Берём длинную ссылку (почти 500 символов) из Google maps, например.


В программе нажимаем кнопку и появляется окно InputBox
Код
sMapUrl := InputBox('Ссылка на карту', 'Вставьте ссылку из браузера на карту:', sMapUrl);


Но вставляется только 256 символов.


Почему, как победить?
Не хочется создавать своё новое окно, ведь есть же уже готовый велосипед ввиде InputBox/InputQuery

Добавлено через 2 минуты и 21 секунду
Для чего всё это? Ссылку нужно сохранить в базу (firebird), чтобы потом показать пользователю с возможностью перехода по ссылке щелчком мышки по кнопке, например
PM MAIL   Вверх
Данкинг
Дата 27.3.2010, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 9
Всего: 130



Цитата(Akella @  27.3.2010,  13:42 Найти цитируемый пост)
Почему, как победить?

Если это нужно только для ссылок, то, например, вот так. smile 

Это сообщение отредактировал(а) Данкинг - 27.3.2010, 14:19


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Демо
Дата 27.3.2010, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



Akella

Ошибка (а может и просто ограничение) в генетическом коде.

Проще скопировать в свой код 2 функции, убрав ограничение:

Код

uses Consts

function GetAveCharSize(Canvas: TCanvas): TPoint;
var
  I: Integer;
  Buffer: array[0..51] of Char;
begin
  for I := 0 to 25 do Buffer[I] := Chr(I + Ord('A'));
  for I := 0 to 25 do Buffer[I + 26] := Chr(I + Ord('a'));
  GetTextExtentPoint(Canvas.Handle, Buffer, 52, TSize(Result));
  Result.X := Result.X div 52;
end;

function InputQuery(const ACaption, APrompt: string;
  var Value: string): Boolean;
var
  Form: TForm;
  Prompt: TLabel;
  Edit: TEdit;
  DialogUnits: TPoint;
  ButtonTop, ButtonWidth, ButtonHeight: Integer;
begin
  Result := False;
  Form := TForm.Create(Application);
  with Form do
    try
      Canvas.Font := Font;
      DialogUnits := GetAveCharSize(Canvas);
      BorderStyle := bsDialog;
      Caption := ACaption;
      ClientWidth := MulDiv(180, DialogUnits.X, 4);
      Position := poScreenCenter;
      Prompt := TLabel.Create(Form);
      with Prompt do
      begin
        Parent := Form;
        Caption := APrompt;
        Left := MulDiv(8, DialogUnits.X, 4);
        Top := MulDiv(8, DialogUnits.Y, 8);
        Constraints.MaxWidth := MulDiv(164, DialogUnits.X, 4);
        WordWrap := True;
      end;
      Edit := TEdit.Create(Form);
      with Edit do
      begin
        Parent := Form;
        Left := Prompt.Left;
        Top := Prompt.Top + Prompt.Height + 5;
        Width := MulDiv(164, DialogUnits.X, 4);
//        MaxLength := 255;
        Text := Value;
        SelectAll;
      end;
      ButtonTop := Edit.Top + Edit.Height + 15;
      ButtonWidth := MulDiv(50, DialogUnits.X, 4);
      ButtonHeight := MulDiv(14, DialogUnits.Y, 8);
      with TButton.Create(Form) do
      begin
        Parent := Form;
        Caption := SMsgDlgOK;
        ModalResult := mrOk;
        Default := True;
        SetBounds(MulDiv(38, DialogUnits.X, 4), ButtonTop, ButtonWidth,
          ButtonHeight);
      end;
      with TButton.Create(Form) do
      begin
        Parent := Form;
        Caption := SMsgDlgCancel;
        ModalResult := mrCancel;
        Cancel := True;
        SetBounds(MulDiv(92, DialogUnits.X, 4), Edit.Top + Edit.Height + 15,
          ButtonWidth, ButtonHeight);
        Form.ClientHeight := Top + Height + 13;
      end;
      if ShowModal = mrOk then
      begin
        Value := Edit.Text;
        Result := True;
      end;
    finally
      Form.Free;
    end;
end;


Код

  if InputQuery('Ссылка на карту','Вставьте ссылку из браузера на карту:',sMapUrl) then ...



--------------------
    
PM MAIL ICQ Skype   Вверх
Akella
Дата 27.3.2010, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Цитата(Демо @  27.3.2010,  14:22 Найти цитируемый пост)
Ошибка (а может и просто ограничение) в генетическом коде.

не понял smile

Добавлено через 1 минуту и 44 секунды
Цитата(Данкинг @  27.3.2010,  14:18 Найти цитируемый пост)
сли это нужно только для ссылок, то, например, вот так. smile 

Не, не, это не годиться. Мои пользователи, в основном, это люди, далёкие от компьютера и интернета. Я сомневаюсь, что они ссылку-то смогут в программу сохранить  smile  не говоря уже о "конвертации" её в краткий формат.

Добавлено через 4 минуты и 48 секунд
//        MaxLength := 255;

Я не понимаю, а зачем "они" это сделали  smile 
PM MAIL   Вверх
Akella
Дата 27.3.2010, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Цитата(Демо @  27.3.2010,  14:22 Найти цитируемый пост)
Ошибка (а может и просто ограничение) в генетическом коде.

В исходниках что ль?  smile 

PM MAIL   Вверх
Демо
Дата 27.3.2010, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



Цитата(Akella @  27.3.2010,  14:54 Найти цитируемый пост)
В исходниках что ль?  


Ну да!

В геноме Delphi ошибка-)


--------------------
    
PM MAIL ICQ Skype   Вверх
Grag
Дата 27.3.2010, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 22.12.2007
Где: Красноярск

Репутация: нет
Всего: нет



Цитата(Akella @ 27.3.2010,  13:42)
Берём длинную ссылку (почти 500 символов) из Google maps, например.


В программе нажимаем кнопку и появляется окно InputBox
Код
sMapUrl := InputBox('Ссылка на карту', 'Вставьте ссылку из браузера на карту:', sMapUrl);


Но вставляется только 256 символов.


Почему, как победить?


Какой тип возвращает InputBox()? Какой тип имеет sMapUrl?


Это сообщение отредактировал(а) Grag - 27.3.2010, 17:02
PM MAIL ICQ Skype   Вверх
Akella
Дата 27.3.2010, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Цитата(Grag @  27.3.2010,  16:59 Найти цитируемый пост)
Какой тип возвращает InputBox()? Какой тип имеет sMapUrl?

sMapUrl типа String так же как и результат InputBox(), а что??
PM MAIL   Вверх
Grag
Дата 28.3.2010, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 22.12.2007
Где: Красноярск

Репутация: нет
Всего: нет



Цитата(Akella @ 27.3.2010,  17:45)
Цитата(Grag @  27.3.2010,  16:59 Найти цитируемый пост)
Какой тип возвращает InputBox()? Какой тип имеет sMapUrl?

sMapUrl типа String так же как и результат InputBox(), а что??

А сколько символов может содержать переменная типа String?
PM MAIL ICQ Skype   Вверх
Akella
Дата 28.3.2010, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



ms-help://borland.bds5/devcommon/stringtypes_xml.html
About String Types
AnsiString  4 bytes to 2GB
WideString  4 bytes to 2GB
PM MAIL   Вверх
Grag
Дата 28.3.2010, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 22.12.2007
Где: Красноярск

Репутация: нет
Всего: нет



Цитата(Akella @ 27.3.2010,  17:45)
Цитата(Grag @  27.3.2010,  16:59 Найти цитируемый пост)
Какой тип возвращает InputBox()? Какой тип имеет sMapUrl?

sMapUrl типа String так же как и результат InputBox(), а что??

А чем отличается тип STRING от AnsiString и WideString?
PM MAIL ICQ Skype   Вверх
Akella
Дата 28.3.2010, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



В неюникодных версиях delphi STRING - это AnsiString. В Delphi 2009+ STRING - это уже WideString.

WideString - это юникод.

Добавлено через 30 секунд
http://ru.wikipedia.org/wiki/%D0%AE%D0%BD%...%BA%D0%BE%D0%B4

Добавлено через 1 минуту и 20 секунд
http://ru.wikipedia.org/wiki/String
PM MAIL   Вверх
Grag
Дата 28.3.2010, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 22.12.2007
Где: Красноярск

Репутация: нет
Всего: нет



InputBox - Функция  Отображает диалог, который просит пользователя о вводе текста, со значением по умолчанию;

function InputBox ( const Caption, Prompt, Default : string ) : string;

Remarks
The InputBox is user-resizable, but has a minimum size of approximately 190 x 115 pixels. Default size is approximately 250 x 190 pixels.

The string returned will not exceed 254 characters and if input contains carriage returns or linefeeds, the result will be truncated at the first occurrence of those characters.




Это сообщение отредактировал(а) Grag - 28.3.2010, 13:15
PM MAIL ICQ Skype   Вверх
Akella
Дата 28.3.2010, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Это я понял благодаря Демо. И что?
Цитата(Демо @  27.3.2010,  14:22 Найти цитируемый пост)
//        MaxLength := 255;


PM MAIL   Вверх
Grag
Дата 28.3.2010, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 22.12.2007
Где: Красноярск

Репутация: нет
Всего: нет



Цитата(Akella @ 28.3.2010,  16:15)
Это я понял благодаря Демо. И что?
Цитата(Демо @  27.3.2010,  14:22 Найти цитируемый пост)
//        MaxLength := 255;

Ничего, мне кажется, дальнейшие комментарии излишни... smile 
PM MAIL ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1024 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.