Перейти к содержимому

Фотография

Delphi.вопрос.


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 199

#101
Kork

Kork

    Читатель

  • Завсегдатай
  • 248 сообщений

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

Да, разные VCL надобно по хорошему на местах осваивать. Но раз везде уже стоит Delphi, можно для обучения и его использовать. Там консольки тоже запросто можно делать.
  • 0

#102
mergan

mergan
  • Свой человек
  • 730 сообщений

Да, разные VCL надобно по хорошему на местах осваивать. Но раз везде уже стоит Delphi, можно для обучения и его использовать. Там консольки тоже запросто можно делать.

только те кто припадают в универах как правило это незнают...
  • 0

#103
*LESHIY*

*LESHIY*

    Читатель

  • Свой человек
  • 708 сообщений
что такое:
XLApp:= CreateOleObject('Excel.Application');


XLApp.Workbooks.Add(-4167);


Sheet.Cells
  • 0

#104
Stass

Stass
  • Случайный прохожий
  • 1 сообщений
Кто нибудь может помоч сделать программу на Delphi используя базу данных их microsoft acces... Вобщем задание на тему ресторан... Ну жно сделать в программе подчет потраченных за неделю продуктов и следуя этим данным рассчетать закуп продуктов нак следующюю! Программа нужна самая простая без всяких наворотов и тд! Кто нибудь сможет помоч!? Что касается срока срок маленький до понедельника =)
  • 0

#105
mergan

mergan
  • Свой человек
  • 730 сообщений

XLApp:= CreateOleObject('Excel.Application');

создает экзепляр Excel, используя механизмы OLE

XLApp.Workbooks.Add(-4167);

создает в экземпляре екселя новую рабочую книгу... переданный параметр "-4167/xlWBATWorksheet" говорит о том, что книга будет состоять из одного рабочего листа...

Sheet.Cells

- получение экземпляра ячейки экселя для работы с ней...


Кто нибудь может помоч сделать программу на Delphi используя базу данных их microsoft acces... Вобщем задание на тему ресторан... Ну жно сделать в программе подчет потраченных за неделю продуктов и следуя этим данным рассчетать закуп продуктов нак следующюю! Программа нужна самая простая без всяких наворотов и тд! Кто нибудь сможет помоч!? Что касается срока срок маленький до понедельника =)

в пятницу... поздно ночью искать того, кто бросит все дела и будет помагать делать программу до понедельника... думаю глупо...

поздно проснулись товарищ...
  • 0

#106
*LESHIY*

*LESHIY*

    Читатель

  • Свой человек
  • 708 сообщений
вот написал процедуру. Надо заменить буквы а на о. Но почему-то результат выводится без изменений, что и вводилось. :) Где ошибка?


begin
s1:= Edit1.text; {ввод строки в переменную s1}

for i:=0 to length(s1) do
begin
if s1[i]='А' then
begin
delete (s1 , i , 1);
insert('О' , s1 , i);
end;
end;
Edit2.Text:=s1; {вывод новой строки}
end;
  • 0

#107
mergan

mergan
  • Свой человек
  • 730 сообщений

begin

  s1:= Edit1.text; {ввод строки в переменную s1}

  for i:=0 to length(s1) do

	if s1[i]='А' then s1[i] := 'O';

  Edit2.Text:=s1; {вывод новой строки}

end;


Сообщение отредактировал mergan: 26.06.2008, 08:00:19

  • 0

#108
*LESHIY*

*LESHIY*

    Читатель

  • Свой человек
  • 708 сообщений
всеравно не меняет :)
  • 0

#109
mergan

mergan
  • Свой человек
  • 730 сообщений
все меняет... может ты не знаешь ... что 'a', 'A', 'а', 'А' это четыре разные символа?
  • 0

#110
*LESHIY*

*LESHIY*

    Читатель

  • Свой человек
  • 708 сообщений
Блин, есть такое, что-то тупанул я! Все меняет!
  • 0

#111
*LESHIY*

*LESHIY*

    Читатель

  • Свой человек
  • 708 сообщений

var
  x,y, intTemp : integer;
begin
  y := StringGrid1.RowCount - 1;
  for x := 0 to StringGrid1.ColCount - 1 do
  begin
	intTemp := strtoint(StringGrid1.Cells[x, 0]) * 2;
	StringGrid1.Cells[x, 0] := inttostr(strtoint(StringGrid1.Cells[x, y]) * 2);
	StringGrid1.Cells[x, y] := inttostr(intTemp);
  end;
end;


а можешь прокомментировать плиз, что сдесь сделал? Я не совсем понимаю, и что такое intTemp

Сообщение отредактировал *LESHIY*: 26.06.2008, 16:48:15

  • 0

#112
mergan

mergan
  • Свой человек
  • 730 сообщений
а что не понятного в intTemp????


var
  x,y, intTemp : integer;

  • 0

#113
Kork

Kork

    Читатель

  • Завсегдатай
  • 248 сообщений

а можешь прокомментировать плиз, что сдесь сделал? Я не совсем понимаю, и что такое intTemp

Содержимое первой и последней строки таблицы, меняются между собой.
Причём, содержимое каждой ячейки должно содержать число.
Причём, содержимое каждой меняемой ячейки умножается на 2.
intTemp временная переменная, для временного хранения содержимого перемещаемой ячейки.
Или тебе непонятно, что каждый оператор делает? :)
  • 0

#114
Irena Pack

Irena Pack
  • Завсегдатай
  • 148 сообщений
Ребят подскажите как можно просмотреть и изменить файл побитово, и как вернуть интеджер с чекбокса?
и еще, есть ли такая функция, booltoint ?
  • 0

#115
Иксилимьюз

Иксилимьюз
  • Свой человек
  • 966 сообщений
Насчет побитового чтения файла, подсказать не смогу, если это не типизированный файл Паскаля.

Из чекБокса.. Интеджер. Зачем? Checked не устраивает?

Можно написать что-то типа:

Function BoolToBit (BoolVar: Boolean): Byte;
begin
If BoolVar then 
  BoolToBit := 1
else
  BoolToBit := 0;
end;

Function BitToBool (BitVar: byte): Boolean;
begin
If BitVar = 1 then 
  BitToBool := True
else
  BitToBool := False;
end;

Конечно байт это не бит, но может быть это Вам поможет, хотя незнаю как для чего и вообще зачем все это.
  • 0

#116
n0named

n0named
  • Частый гость
  • 94 сообщений

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

Из чекБокса.. Интеджер. Зачем? Checked не устраивает?

Можно написать что-то типа:

Function BoolToBit (BoolVar: Boolean): Byte;
begin
If BoolVar then 
  BoolToBit := 1
else
  BoolToBit := 0;
end;

Function BitToBool (BitVar: byte): Boolean;
begin
If BitVar = 1 then 
  BitToBool := True
else
  BitToBool := False;
end;

Конечно байт это не бит, но может быть это Вам поможет, хотя незнаю как для чего и вообще зачем все это.


на самом деле вещь может оказаться полезной... например когда у тебя поле с отчетами где много чекбоксов и ты хочешь что бы после закрытия-открытия окна/программы пользователю не пришлось ставить галочки по новой... а так - записал что то вроде '010001010011101' в текстовый документ и по открытии просто считываешь эти данные и раставляешь чеки на соответствующие чекбоксы... :fie:
  • 0

#117
pipll

pipll
  • Завсегдатай
  • 134 сообщений

есть ли такая функция, booltoint


просто достаточно обвернуть в integer

типа

var
b:boolean;
i:integer
begin
b:=true;
i:=integer(b);
end;

  • 0

#118
Иксилимьюз

Иксилимьюз
  • Свой человек
  • 966 сообщений

на самом деле вещь может оказаться полезной... например когда у тебя поле с отчетами где много чекбоксов и ты хочешь что бы после закрытия-открытия окна/программы пользователю не пришлось ставить галочки по новой... а так - записал что то вроде '010001010011101' в текстовый документ и по открытии просто считываешь эти данные и раставляешь чеки на соответствующие чекбоксы... :rolleyes:

Ну если только так, тогда да, согласен. Но опять, таки есть альтернатива. Подобные вещи, в Дельфи, предпочитаю хранить в файлах типа *.ini

Более структуризованно, внятно, и рационально. ИМХО.

Привожу процедуры для работы с *.ini :

////////////////////////////////////////////////////////////////////////////////
//
//  ПРОЦЕДУРА: BoolDataToIni
//
//  НАЗНАЧЕНИЕ: Записывает логические значения в файл *.ini
//
//  ПАРАМЕТРЫ:
//  Section - Наименование секции в *.ini файле.
//  Column - Наименование ячейки в секции.
//  Bool_Param - Значение которое следует записать в файл.
//  Ini_FileName - Имя файла *.ini
//
Procedure BoolDataToIni(Section,Column,Ini_FileName:String;Bool_Param:BOOL);
var
  IniFile:TIniFile;
begin
  Try
	IniFile := TIniFile.Create(Ini_FileName);
	IniFile.WriteBool(Section,Column,Bool_Param);
	IniFile.Free;
  Except
	MessageDlg('Ошибка при записи логического значения в *.ini файл!',mtError,[mbOK],0);
  end;
end;

////////////////////////////////////////////////////////////////////////////////
//
//  ФУНКЦИЯ: BoolDataFromIni
//
//  НАЗНАЧЕНИЕ: Чтение Булева значения из *.ini файла.
//
//  ПАРАМЕТРЫ:
//  Section - Наименование секции в *.ini файле.
//  Column - Наименование ячейки в секции.
//  Ini_FileName - Имя файла *.ini
//
Function BoolDataFromIni(Section,Column,Ini_FileName:String):BOOL;
var
  IniFile:TIniFile;
begin
  Try
	IniFile := TIniFile.Create(Ini_FileName);
	BoolDataFromIni := IniFile.ReadBool(Section,Column,True);
	IniFile.Free;
  Except
	MessageDlg('Ошибка при чтении логического значения из *.ini файла!',mtError,[mbOK],0);
  end;
end;
В примере работа как раз с Булевыми значениями. Как раз для "ЧекБоксов". Процедуры писал сам для оптимизации кода. По телу процедур можно разобраться как работают остальные типы.

Для работы этих процедур в разделе Uses, необходимо дописать модуль IniFiles.

А вот битовую маску, которую вы приводили выше, очень удобно использовать в том случае, если для каждой записи в базе данных, необходимо хранить ряд параметров, которые на форме отображаются в виде чекБокса.
  • 0

#119
AvaL0N

AvaL0N
  • Случайный прохожий
  • 3 сообщений

Ребят подскажите как можно просмотреть и изменить файл побитово

первое, что приходит на ум:
var
  buff: byte;
  blah: boolean;
...
begin
... // чтение файла в переменную типа байт
//получить  значение 5-го бита из прочитанного байта:
  asm
	mov al, buff
	and al, 00100000b
	mov blah, al
  end;
// если 5-й бит был равен еденице, значение blah- true

Или даже вот такая функция:
function ByteToBool(b: byte; const index: byte): boolean; assembler;
asm
@lb:  ror al, 1
	  dec dl
	  jnz @lb
	  and al, 1b
end;
На вход - собственно байт, и индекс бита, на выходе - значение бита

Надеюсь, все понятно. Если есть вопросы - спрашивайте

Сообщение отредактировал AvaL0N: 07.08.2008, 23:01:35

  • 0

#120
AvaL0N

AvaL0N
  • Случайный прохожий
  • 3 сообщений
Вот, в поддержку темы о сохаранении настроек чек-боксов :rolleyes: :
procedure SaveValues( parnt: TWinControl);
var
  i: integer;
  IniFile : TIniFile;
begin
  IniFile := TIniFile.Create(confFN);
  with parnt do
  for i:= 0 to ControlCount-1 do
	if Controls[i] is TCheckBox then
	  with (Controls[i] as TCheckBox) do
		IniFile.WriteBool( parnt.Name, Name, Checked)
	else if (Controls[i] is TPanel)or(Controls[i] is TGroupBox) then
	  SaveValues( Controls[i] as TWinControl);  
  IniFile.Free;
end;

procedure LoadValues( parnt: TWinControl);
var
  i: integer;
  IniFile : TIniFile;
begin
  IniFile := TIniFile.Create(confFN);
  with parnt do
  for i:= 0 to ControlCount-1 do
	if Controls[i] is TCheckBox then
	  with (Controls[i] as TCheckBox) do
		Checked:= IniFile.ReadBool( parnt.Name, Name, Checked)
	else if (Controls[i] is TPanel)or(Controls[i] is TGroupBox) then
	  SaveValues( Controls[i] as TWinControl);
  IniFile.Free;
end;

Можно использовать так:
Form1OnCreate:
LoadValues( Form1);
...
Form1OnClose:
SaveValues( Form1);


Сохраняет все имеющиеся на форме CheckBox'ы, в том числе находящиеся на Panel'ях и GroupBox'ах. При желании можно легко модифицировать до состояния, в котором будет сохранять все свойства (не только Checked) всех контролов (не только CheckBox'ов) :p

Сообщение отредактировал AvaL0N: 07.08.2008, 23:02:00

  • 0


Количество пользователей, читающих эту тему: 1

пользователей: 0, неизвестных прохожих: 1, скрытых пользователей: 0

Размещение рекламы на сайте     Предложения о сотрудничестве     Служба поддержки пользователей

© 2011-2022 vse.kz. При любом использовании материалов Форума ссылка на vse.kz обязательна.