Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi

Модерирует : ShIvADeSt

ShIvADeSt (20-04-2006 01:53): http://forum.ru-board.com/topic.cgi?forum=33&topic=6679#1  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102

   

ladapilot

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как вывести в поле edit язык , использующийся в данный момент (английский/русский)?

Всего записей: 4 | Зарегистр. 25-01-2006 | Отправлено: 13:46 29-01-2006
psixxx777

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ladapilot
 
function WhichLanguage:string;
var  
  ID: LangID;
  Language: array [0..100] of char;
begin
  ID := GetSystemDefaultLangID;
  VerLanguageName(ID, Language, 100);
  Result := string(Language);
end;
 
...
...
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit1.Text := WhichLanguage;
end;
 

Всего записей: 16 | Зарегистр. 01-02-2005 | Отправлено: 14:20 29-01-2006
smus811

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте. Допустим я динамически, через массив, создал компоненты, например Label'ы, теперь мне нужно, чтоб по клику на определённый Label исполнялась процедура с определённым параметром. Подскажите, как это сделать? Вот мой код, там где вопрос, куда я вставлял название процедуры(только не бейте меня) - выдавало incompatyble types. Спасибо.
<B>var</B>
Lbl : array of TLabel;
I:integer;
<B>for </B>I := Low(Lbl) to High(Lbl)
<B>do begin</B>
Lbl[I] := TLabel.Create(self);
 Lbl[I].Parent := ScrollBox1;
...
Lbl[I].OnClick := ?
<B>end;</B>

Всего записей: 6 | Зарегистр. 29-01-2006 | Отправлено: 17:53 29-01-2006
EZH



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
smus811
Создай одну процедуру с заголовком, как у обычного события OnClick (с Sender) - её и навешивай всем компонентам. А внутри процедуры определяй что это за компонент например по имени, которое извлекай у параметра Sender. Его же можно будет привести и к типу TLabel.

Всего записей: 1738 | Зарегистр. 02-09-2004 | Отправлено: 18:09 29-01-2006 | Исправлено: EZH, 18:10 29-01-2006
Sleepwalker



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
smus811
в обработчик события не может быть вставлена обычная процедура, только указатель на метод. Вообще, тебе же сообщение об ошибке все говорит.
 
в описании класса формы добавляешь
Procedure BCLick(sender:tobject);
 
а потом в коде
 Lbl[I].OnClick :=BCLick;
 
ессно, не забудь реализовать процедуру BClick;  
 
Добавлено:
EZH
опередил
 
smus811
при создании лэйблов даешь им имена, т.е.
Lbl[I].name = XXX
а потом в обработчике можно их извлечь:
TComponent(Sender).Name

----------
...или я ничего не понимаю в этой жизни... или понимаю слишком хорошо...

Всего записей: 1957 | Зарегистр. 19-10-2002 | Отправлено: 18:16 29-01-2006
smus811

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Создал, только как в неё передать данные не пойму, допустим нужно передать какой-то Integer-массив D, что вписать в Sender. Или если что-то передавать в Sender(Как вы сказали имя) как это написать?  
 
 
procedure TForm1.Show(Sender:TObject;Y:Integer);
begin
ShowMessage(IntToStr(Y));
end;
 
.....
 
Lbl[I].OnClick:=Form1.Show(???,D[I]);

Всего записей: 6 | Зарегистр. 29-01-2006 | Отправлено: 18:32 29-01-2006
EZH



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
smus811
Как параметр процедуры в событие передать тебе ничего не удасться по определению - они стандартны, и в Sender ничего не надо вписывать, указатель на кликнутый объект туда будет вписан автоматически.
 
По поводу передачи параметров - как вариант можно воспользоваться свойством Tag, которое есть у всех компонентов - оно типа Integer - так что ты можешь заранее туда прописывать либо число, либо указатель на любой объект или массив.

Всего записей: 1738 | Зарегистр. 02-09-2004 | Отправлено: 19:10 29-01-2006
LordMAD



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sleepwalker

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

Цитата:
при создании лэйблов даешь им имена, т.е.  
Lbl[I].name = XXX  
а потом в обработчике можно их извлечь:  
TComponent(Sender).Name

Смешно.

Всего записей: 378 | Зарегистр. 01-10-2002 | Отправлено: 08:12 30-01-2006
RostY



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
nvlnik
 
так подойдет?
 
function doschar(winchar: Char): Char;
begin
  case Ord(winchar) of
    192..239: Result := Chr(Ord(winchar) - 64);
    240..255: Result := Chr(Ord(winchar) - 16);
    168: Result := chr(240);
    184: Result := chr(241);
    170: Result := chr(242);
    186: Result := chr(243);
    178: Result := 'I';//chr
    179: Result := 'i';//chr
    175: Result := chr(244);
    191: Result := chr(245);
    183: Result := chr(250);
    185: Result := chr(252);
    164: Result := chr(253);
    166: Result := chr(254);
    else Result := winchar;
  end;
end;
 
function dosstr(winstr: string): string;
var I: Integer;
begin
  Result := '';
  for I := 1 to Length(winstr) do
    Result := Result + doschar(winstr[I]);
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var f:Textfile;
begin
  Assignfile(f,'c:\test.txt');
  Rewrite(f);
  Write(f,DosStr(Memo1.Lines.Text));
  CloseFile(f);
end;

Всего записей: 387 | Зарегистр. 11-01-2006 | Отправлено: 10:24 30-01-2006
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
RostY
и ради чего такие извращения? вот есть тема по переводу в ОЕМ длЯ консоли
http://forum.ru-board.com/topic.cgi?forum=33&topic=5338#1

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 10:32 30-01-2006
RostY



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
smus811
 
type
  TForm1 = class(TForm)
...
  procedure LabelClick(Sender: TObject);
  private  { Private declarations }
  public    { Public declarations }
  end;
 
...
 
Lbl : array of TLabel;  
I:integer;  
for I := Low(Lbl) to High(Lbl) do
begin
 Lbl[I] := TLabel.Create(self);  
 Lbl[I].Parent := ScrollBox1;  
 Lbl[I].Tag:=i;
 Lbl[I].OnClick := LabelClick;
end;
 
...
 
procedure TForm1.LabelClick(Sender: TObject);
begin
  ShowMessage('Label &#185; '+IntToStr((Sender as TComponent).tag));
end;
 
 
Добавлено:
ShIvADeSt
 
Я писал свою функцию, потому что выводил текст из мемо на принтер и при этом конвертировал их так чтоб красивые рамочки получались в режиме текстовой печати.
Может, действительно извращение, зато "fully customizable"

Всего записей: 387 | Зарегистр. 11-01-2006 | Отправлено: 10:42 30-01-2006 | Исправлено: RostY, 10:49 30-01-2006
Pinocchio

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
EZH
Sleepwalker
Я не совсем понял зачем вообще имя? Или тэг...

Код:
 
TForm2 = class(TForm)
...
procedure LabelClick(Sender: TObject);
private
...
var Lbl : array of TLabel;
...
procedure TForm2.LabelClick(Sender: TObject);
var I,J: Integer;
begin
  J := -1;
  for I:=0 to High(Lbl) do if Lbl[I] = Sender then
    begin J:=I; Break; end;
  if J>=0 then ShowMessageFmt('%d: %s', [J, Lbl[J].Name]);
end;
 

А вообще зачем массив то нужен?

Код:
 
function GetLbl(Index: Integer): TLabel;
var I: Integer;
begin
  for I:=0 to Form2.ComponentsCount-1 do
    if Form2.Components[I] is TLabel then begin
      Result:=TLabel(Form2.Components[I]);
      Dec(Index);
      if Index<0 then Exit;
      end;
  Result := nil;
end;
 

Всего записей: 683 | Зарегистр. 18-11-2002 | Отправлено: 15:00 30-01-2006
RomanAlekseevich

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите плз, вопрос по СОМ.
Есть приложение (ТрафикИнспектор, если кто знает), в комплекте есть VBScript'ы, работающие через API функции. Коннект к серверу через COM :(set Srv=CreateObject ("trafinsp.trafinspadmin",ip)), где TrafInsp.TrafInspAdmin - ClassID, a ip - имя компа в сети ( сервера). Затем уже идет работа через различные Srv.API. Как такое замутить в делфи? На локальном компе надо было бы использовать CreateOleObject("TrafInsp.TrafInspAdmin") вроде( не пробовал). Для удаленного насочинял вот что:
var Srv: Variant;
procedure TForm1.Button1Click(Sender: TObject);
begin
Srv:=CreateRemoteCOMObject('192.168.х.1',StringToGUID('TrafInsp.TrafInspAdmin'));
Srv.APILogon('api');
Srv:=UnAssigned;
end;
 
Где Srv.APILogon - API функция самого ТИ. На нее делфи ругается: "Variant doesn't reference an automation object". Т.е., я так понимаю, что он объект Srv создает, но вызвать его функции не может.. И видимо из-за несоответствия типов переменных?  
Вместо ClassID в CreateRemoteCOMObject пробовал ставить GUID['{xxxxx-xxx..x}']
Посоветуете мож, че-нить?

Всего записей: 8 | Зарегистр. 16-10-2005 | Отправлено: 00:47 31-01-2006
EZH



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Pinocchio

Цитата:
Я не совсем понял зачем вообще имя? Или тэг...  

Имя предлагалось как один из вариантов идентификации кликнутой Label, что бывает просто нагляднее для кода чем идентификация по индексу.
 
А про тэг - это видимо тебя пример RostY сбил, где он вписывал туда индекс. Предлагалось использовать Tag для привязки какой-либо дополнительной информации к конкретной Label. На сколько я понял требовалось передать в процедуру обработки клика ещё какой-то иной массив.

Всего записей: 1738 | Зарегистр. 02-09-2004 | Отправлено: 01:09 31-01-2006
Delphist

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
RomanAlekseevich
Все просто.  
Установи эту байду к себе на комп.
В делфе идеш в меню Component->Import ActiveX Control
там находиш его и импортируеш.
И будет тебе счастье.

Всего записей: 114 | Зарегистр. 14-01-2003 | Отправлено: 06:24 31-01-2006
SERGE_BLIZNUK

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
RostY

Цитата:
select rowid, fieldname from tab1  

 
в связи с тем, что похоже эта тема для всех неинтересна, предлагаю перейти в директ. смотрите свой ПМ.
P.S. а может вопрос уже утратил свою актуальность?

Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 13:04 31-01-2006
ArtemiyUO

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
мне тоже интересно получение rowid, и как раз одак.

Всего записей: 539 | Зарегистр. 12-12-2005 | Отправлено: 13:41 31-01-2006
RostY



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SERGE_BLIZNUK
нет. не утратил. В принципе, в программе я сделал без ROWID, но как его вытянуть хотелось бы, все-таки, знать

Всего записей: 387 | Зарегистр. 11-01-2006 | Отправлено: 15:00 31-01-2006
RostY



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
вчера выпил 2 кружки кофе и всю ночь думал всякие глупые мысли... Короче, ROWID выбирается если написать  
select (rowid || '') as row_id ... и т.д.

Всего записей: 387 | Зарегистр. 11-01-2006 | Отправлено: 09:37 01-02-2006
Alex27

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
И меня это тоже интерисует!!!
 





не рекламируй ресурсы.

Всего записей: 2 | Зарегистр. 01-02-2006 | Отправлено: 22:27 01-02-2006 | Исправлено: ShIvADeSt, 01:53 02-02-2006
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi
ShIvADeSt (20-04-2006 01:53): http://forum.ru-board.com/topic.cgi?forum=33&topic=6679#1


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2025

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru