|
Вопрос # 6 375/ вопрос решён / |
|
Приветствую, уважаемые эксперты!
Программа должна перетаскивать из одного компонента в другой. Моя программа переносит значение из TLabel в TProgressBar, из TProgressBar в TLabel. Но при переносе из TMemo в TProgressBar выдает ошибку: "is not a valid integer value". Пожалуйста помогите в чем ошибка, где ее исправить. Программа имеется в приложении.
Спасибо!
К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)
Приложение: Переключить в обычный режим- unit Unit1;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls, ComCtrls;
-
- type
- TForm1 = class(TForm)
- Label1: TLabel;
- ProgressBar1: TProgressBar;
- Memo1: TMemo;
- procedure Label1DragDrop(Sender, Source: TObject; X, Y: Integer);
- procedure Label1DragOver(Sender, Source: TObject; X, Y: Integer;
- State: TDragState; var Accept: Boolean);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
-
- var
- Form1: TForm1;
-
- implementation
-
- {$R *.dfm}
-
- procedure TForm1.Label1DragDrop(Sender, Source: TObject; X, Y: Integer);
- begin
- if(source is TLabel)and(sender is TProgressBar) then (sender as
TProgressBar).Position:=strtoint((source as TLabel).caption);
- if(source is TLabel)and(sender is TMemo) then (sender as TMemo).lines.Add((source as
TLabel).caption);
- if(source is TProgressBar)and(sender is TLabel) then (sender as TLabel).caption:=inttostr((source as
TProgressBar).position);
- if(source is TProgressBar)and(sender is TMemo) then (sender as TMemo).lines.Add(inttostr((source as
TProgressBar).position));
- if(source is TMemo)and(sender is TProgressBar) then (sender as
TProgressBar).Position:=strtoint((source as TMemo).Text);
- if(source is TMemo)and(sender is TLabel) then (sender as TLabel).caption:=(source as TMemo).Text;
- end;
-
- procedure TForm1.Label1DragOver(Sender, Source: TObject; X, Y: Integer;
- State: TDragState; var Accept: Boolean);
- begin
- accept:=true;
- end;
- end.
 |
Вопрос задала: Ewgenia (статус: Посетитель)
Вопрос отправлен: 17 февраля 2013, 11:12
Состояние вопроса: решён, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 3; последнее сообщение — 3 марта 2013, 08:19; участников в обсуждении: 3.
|
Шичко Игорь (статус: 9-ый класс), 17 февраля 2013, 12:11 [#1]:
Компонент TMemo - многострочный редактор и, поэтому, свойство Text содержит весь массив строк.
Перенести можно только какую-либо строку TMemo:
...
if(source is TMemo)and(sender is TProgressBar) then (sender as TProgressBar).Position:=strtoint((source as TMemo).Lines.Strings[0]); // первая строка
...
|
|
min@y™ (статус: Доктор наук), 18 февраля 2013, 08:10 [#2]:
А ещё может быть, что из мемо передаётся текст с форматированием (знак переноса строки в конце). Попробуй функцию Trim(), вдруг поможет.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
19 февраля 2013, 16:53: Статус вопроса изменён на решённый (изменил автор вопроса — Ewgenia): Вопрос решен!
|
eclipse (статус: Посетитель), 3 марта 2013, 08:19 [#3]:
Вы, Ewgenia, должны понимать что среди этих данных, в разных компонентах, только в ProgressBar принимаются значения типа Int, в остальных строковые данные, поэтому чтобы из стороки в целое число перевести данные следует использовать StrToInt или наоборот IntToStr. Так же если в строке Memo есть пробелы и др. буквы и знаки их следует обрезать (напр. функцией Copy), чтобы нужные Вам данные можно было перевести в Int.
Из того что написал Шичко Игорь следует что нужно сделать:
1. перебор по строкам: for i:=0 to ...
2. найти нужную строку и отредактировав её присвоить нужному компоненту.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|