Вверх ↑
Этот топик читают: Гость
Ответов: 704
Рейтинг: 44
#1: 2012-03-29 00:43:11 ЛС | профиль | цитата
Доброй ночи всем, предоставляю компонент для переключение TabConrol, как вы знаете что компонент TabConrol выдает в поток только индекс выделенной строки. Решил сделать компонент для начинающих пользователь да бы может и не для начинающих. Так вот компонент работатет по принципу MultiStrData, но только с целочисленными данными. Для того что бы скрыть объект у определенной страницы, для этого нужно добавить в компонент SwitchiPage действие т.е в строковой накопитель такие данные 1;0;0;0. Исходник добавлен. Если есть у кого каке мысли как сделать по другому высказывайте. Сильно не критикуйте.Как говорил Nesco он тоже не чего не понимал но научился сам, так же и я http://forum.hiasm.com/forum_serv.php?q=56&id=2992
карма: 0

5
Голосовали:nesco, Tad, ser_davkin, RinniX, Konst
Разработчик
Ответов: 26164
Рейтинг: 2127
#2: 2012-03-29 00:58:21 ЛС | профиль | цитата
Сразу напишу о явной ошибке начинающих -- ты создал в конструкторе класс


FList := NewStrList;

а деструктор где, вот с этим


FList.free

Мусор за собой надо убирать. Если твой компонент попадет в динамический мультик с уничтожением в RealTime, без того, что я тебе показал, то жди утечки памяти


------------ Дoбавленo в 00.58:
А вот это нафига


procedure THISwitchingPages.SetText;
begin
FList.SetText(Value, false);
end;
Накой черт там быстродействие, когда срабатывает это безобразие только при пуске и длина текста копеечная. Достаточно было обычного присвоения полю Text


procedure THISwitchingPages.SetText;
begin
FList.Text := Value;
end;
карма: 22

0
Ответов: 704
Рейтинг: 44
#3: 2012-03-29 00:58:27 ЛС | профиль | цитата
nesco писал(а):
а деструктор где, вот с этим

FList.free
Ок!!! сейчас посмотрю

карма: 0

0
Разработчик
Ответов: 26164
Рейтинг: 2127
#4: 2012-03-29 01:02:24 ЛС | профиль | цитата
Почему бы не сделать разделитель свойством, а не тупо его присваивать, да еще и проверять его на пустоту после присвоения


  ii := ';';
...
if (ii = '') or (FString = '') then exit;
карма: 22

0
Ответов: 704
Рейтинг: 44
#5: 2012-03-29 01:02:34 ЛС | профиль | цитата
Kazbek17 писал(а):
procedure THISwitchingPages.SetText;
begin
FList.Text := Value;
end;

если как вы говорите что только добавить FList.Text := Value; то будет ошибка RinTime Error.
карма: 0

0
Разработчик
Ответов: 26164
Рейтинг: 2127
#6: 2012-03-29 01:04:20 ЛС | профиль | цитата
Зачем перемекнная ii имеет тип string, когда используется только один символ, достаточно было сделать его типом Char
карма: 22

0
Ответов: 704
Рейтинг: 44
#7: 2012-03-29 01:04:41 ЛС | профиль | цитата
Kazbek17 писал(а):
Почему бы не сделать разделитель свойством, а не тупо его присваивать, да еще и проверять его на пустоту после присвоения
вот здесь согласен тупанул
карма: 0

0
Разработчик
Ответов: 26164
Рейтинг: 2127
#8: 2012-03-29 01:06:50 ЛС | профиль | цитата
Kazbek17 писал(а):
то будет ошибка RinTime Error

С чего бы это
карма: 22

0
Ответов: 704
Рейтинг: 44
#9: 2012-03-29 01:07:14 ЛС | профиль | цитата
Все ясно теперь буду знать сейчас все ваши пометки исправлю
------------ Дoбавленo в 01.07:
Я изменил у меня ошибка выходит
карма: 0

0
Разработчик
Ответов: 26164
Рейтинг: 2127
#10: 2012-03-29 01:09:11 ЛС | профиль | цитата
Че-то я скачать не могу
карма: 22

0
Ответов: 704
Рейтинг: 44
#11: 2012-03-29 01:12:01 ЛС | профиль | цитата
У меня походу заглючела ладно Nesco спасибо вам буду исправлять. если можно удалите тему, чтобы зря не болталась
------------ Дoбавленo в 01.11:
Не чего не изменял теперь вообще запустит не могу, ошибку пишет
------------ Дoбавленo в 01.12:
Фантастика, Hiasm не предсказуем
карма: 0

0
Разработчик
Ответов: 26164
Рейтинг: 2127
#12: 2012-03-29 01:19:23 ЛС | профиль | цитата
Kazbek17 писал(а):
Не чего не изменял теперь вообще запустит не могу, ошибку пишет


Еще бы. Найди различия



unit hiSwitchingPages;

interface

uses Kol,Share,Debug;

type
THISwitchingPages = class(TDebug)
private
FOutCount:byte;
FList:PStrList;
procedure SetCount(Value: Word);
procedure SetText(const Value:string);
private
FIndex:integer;
FString:string;
_data_str:THI_Event;
public
onPart:array of THI_Event;
constructor Create;
destructor Destroy; override;
procedure _work_doGetString(var _Data: TData; Index: Word);
property _prop_Count: Word write SetCount;
property _prop_Strings:string write SetText;

end;

implementation

uses hiStr_Enum;

constructor THISwitchingPages.Create;
begin
inherited;
FList := NewStrList;
end;

destructor THISwitchingPages.Destroy;
begin
FList.free;
inherited;
end;

procedure THISwitchingPages.SetCount;
begin
SetLength(onPart, Value);
FOutCount := Value;
end;

procedure THISwitchingPages.SetText;
begin
FList.Text := Value;
end;

procedure THISwitchingPages._work_doGetString;
var
i: integer;
ii: Char;
begin
FString := FList.Items[ReadInteger(_Data,_data_str)];
FIndex := FList.IndexOf(FString);
ii := ';';
{$ifdef _PROTECT_MAX_}
if (FString = '') then exit;
{$endif}
if (pos(ii, FString) = 0) then exit;
for i := 0 to FOutCount - 1 do
_hi_onEvent(onPart[i], str2int(fparse(FString, ii)));
end;

end.
------------ Дoбавленo в 01.16:
Kazbek17 писал(а):
Фантастика, Hiasm не предсказуем

Пока еще знаний малова-то, а не Hiasm непредсказуем
------------ Дoбавленo в 01.19:
Заметь еще на будущее, что в конструкторе делается все после inherited (те после создания базового класса), а в деструкторе -- до inherited (те перед уничтожением базового класса)
карма: 22

0
Ответов: 8930
Рейтинг: 823
#13: 2012-03-29 10:02:00 ЛС | профиль | цитата
Kazbek17, молодец! Так держать! Но замечния и критику принимать без обид
карма: 19

0
Ответов: 16884
Рейтинг: 1239
#14: 2012-03-29 11:40:07 ЛС | профиль | цитата
Kazbek17, молодец! Так держать!
Kazbek17, а пошутить можно ?
Шутка с управлением по doBringToFront:
code_27423.txt

И можно сделать по Visible, но там нужны уже Math и IntToBits, а объединив их получишь твой компонент SwitchiPage
------------ Дoбавленo в 11.40:
nesco, а вообще-то компонент будет востребован и не только "для переключение TabConrol", но и MainMenu и PopUpMenu. ИМХО.
Повторюсь: Kazbek17, молодец!
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1code_27423.txt [2KB] [401]
Разработчик
Ответов: 26164
Рейтинг: 2127
#15: 2012-03-29 12:14:18 ЛС | профиль | цитата
Tad писал(а):
а вообще-то компонент будет востребован и не только "для переключение TabConrol

Вообще-то, у меня была такая задача. Вот как пришлось ее решать



Add(StrList,833578,63,91)
{
Strings=#11:1;1;0;0;1;0|11:1;1;0;0;1;0|11:1;1;0;0;1;0|11:1;1;0;0;1;0|11:1;1;0;0;1;0|11:1;1;0;0;1;0|11:1;1;0;1;0;0|11:1;1;0;0;1;0|11:0;0;1;1;0;1|11:0;0;1;1;1;0|11:0;0;1;1;1;0|
Point(doGetString)
Point(onGetString)
link(onGetString,15101253:doSplit,[])
}
Add(MultiStrData,15101253,126,98)
{
Count=6
link(onPart1,8648228:doConvert,[(170,104)(170,41)])
link(onPart2,6078421:doConvert,[(175,111)(175,76)])
link(onPart3,2690383:doConvert,[])
link(onPart4,12524908:doConvert,[(179,125)(179,153)])
link(onPart6,946627:doConvert,[(174,139)(174,188)])
}
Add(Convertor,8648228,196,35)
{
Mode=1
}
Add(Convertor,6078421,196,70)
{
Mode=1
}
Add(Convertor,2690383,196,112)
{
Mode=1
}
Add(Convertor,946627,196,182)
{
Mode=1
}
Add(Convertor,12524908,196,147)
{
Mode=1
}


Без конверторов, Visible и Enabled контролов работать не захотели
------------ Дoбавленo в 12.14:
Но название SwitchPage не подходит этому компоненту, надо его обозвать по-другому. К примеру -- MultiSetValue
карма: 22

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)