Да, разные VCL надобно по хорошему на местах осваивать. Но раз везде уже стоит Delphi, можно для обучения и его использовать. Там консольки тоже запросто можно делать.Согласен, звучит довольно глупо, но тем не менее обучение пограмированию обычно начинают с турбо паскаля а не с дельфи.
![Фотография](https://vse.kz/uploads/av-23851.jpg?_r=0)
Delphi.вопрос.
#101
Отправлено 10.06.2008, 21:09:50
![](https://vse.kz/public/style_images/osnovnoi34/post_offline.png)
#104
Отправлено 13.06.2008, 23:14:45
![](https://vse.kz/public/style_images/osnovnoi34/post_offline.png)
#105
Отправлено 16.06.2008, 08:37:21
![](https://vse.kz/public/style_images/osnovnoi34/post_offline.png)
создает экзепляр Excel, используя механизмы OLEXLApp:= CreateOleObject('Excel.Application');
создает в экземпляре екселя новую рабочую книгу... переданный параметр "-4167/xlWBATWorksheet" говорит о том, что книга будет состоять из одного рабочего листа...XLApp.Workbooks.Add(-4167);
- получение экземпляра ячейки экселя для работы с ней...Sheet.Cells
в пятницу... поздно ночью искать того, кто бросит все дела и будет помагать делать программу до понедельника... думаю глупо...Кто нибудь может помоч сделать программу на Delphi используя базу данных их microsoft acces... Вобщем задание на тему ресторан... Ну жно сделать в программе подчет потраченных за неделю продуктов и следуя этим данным рассчетать закуп продуктов нак следующюю! Программа нужна самая простая без всяких наворотов и тд! Кто нибудь сможет помоч!? Что касается срока срок маленький до понедельника =)
поздно проснулись товарищ...
#106
Отправлено 25.06.2008, 22:12:25
![](https://vse.kz/public/style_images/osnovnoi34/post_offline.png)
![:)](http://vse.kz/public/style_emoticons/default/spy.gif)
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;
#111
Отправлено 26.06.2008, 16:47:51
![](https://vse.kz/public/style_images/osnovnoi34/post_offline.png)
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
#113
Отправлено 27.06.2008, 18:17:04
![](https://vse.kz/public/style_images/osnovnoi34/post_offline.png)
Содержимое первой и последней строки таблицы, меняются между собой.а можешь прокомментировать плиз, что сдесь сделал? Я не совсем понимаю, и что такое intTemp
Причём, содержимое каждой ячейки должно содержать число.
Причём, содержимое каждой меняемой ячейки умножается на 2.
intTemp временная переменная, для временного хранения содержимого перемещаемой ячейки.
Или тебе непонятно, что каждый оператор делает?
![:)](http://vse.kz/public/style_emoticons/default/smile.gif)
#115
Отправлено 25.07.2008, 08:58:39
![](https://vse.kz/public/style_images/osnovnoi34/post_offline.png)
Из чекБокса.. Интеджер. Зачем? 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;
Конечно байт это не бит, но может быть это Вам поможет, хотя незнаю как для чего и вообще зачем все это.
#116
Отправлено 31.07.2008, 18:00:48
![](https://vse.kz/public/style_images/osnovnoi34/post_offline.png)
Насчет побитового чтения файла, подсказать не смогу, если это не типизированный файл Паскаля.
Из чекБокса.. Интеджер. Зачем? 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:](http://vse.kz/public/style_emoticons/default/smile.gif)
#118
Отправлено 07.08.2008, 18:24:43
![](https://vse.kz/public/style_images/osnovnoi34/post_offline.png)
Ну если только так, тогда да, согласен. Но опять, таки есть альтернатива. Подобные вещи, в Дельфи, предпочитаю хранить в файлах типа *.iniна самом деле вещь может оказаться полезной... например когда у тебя поле с отчетами где много чекбоксов и ты хочешь что бы после закрытия-открытия окна/программы пользователю не пришлось ставить галочки по новой... а так - записал что то вроде '010001010011101' в текстовый документ и по открытии просто считываешь эти данные и раставляешь чеки на соответствующие чекбоксы...
Более структуризованно, внятно, и рационально. ИМХО.
Привожу процедуры для работы с *.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.
А вот битовую маску, которую вы приводили выше, очень удобно использовать в том случае, если для каждой записи в базе данных, необходимо хранить ряд параметров, которые на форме отображаются в виде чекБокса.
#119
Отправлено 07.08.2008, 20:12:12
![](https://vse.kz/public/style_images/osnovnoi34/post_offline.png)
первое, что приходит на ум:Ребят подскажите как можно просмотреть и изменить файл побитово
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
#120
Отправлено 07.08.2008, 21:00:50
![](https://vse.kz/public/style_images/osnovnoi34/post_offline.png)
![:rolleyes:](http://vse.kz/public/style_emoticons/default/rolleyes.gif)
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](http://vse.kz/public/style_emoticons/default/dandy.gif)
Сообщение отредактировал AvaL0N: 07.08.2008, 23:02:00
Количество пользователей, читающих эту тему: 1
пользователей: 0, неизвестных прохожих: 1, скрытых пользователей: 0