Я начинающий, подскажите пожалуйста, как...
Если вы только начинаете осваивать Delphi или считаете, что ваш вопрос простой для более опытных участников форума, то задавайте его здесь, не надо создавать для этого отдельные темы.
Если вы размещаете вопрос здесь, то , пожалуйста, прочтите следующее:
1. когда будете задавать свой вопрос, то делайте это нажимая на "ответ"(не путать с "быстрый ответ") и кратко указывайте в "заголовке" тему своего вопроса;
2. опишите чего вы хотели добиться.
3. если у вас возникла какая-то ошибка, и вы не знаете как её исправить, то обязательно приведите текст самой ошибки;
4. если это необходимо, приведите фрагмент вашего кода(ни в коем случае не надо писать весь код), также при добавлении кода пользуйтесь тегами([code ] и [ /code]);
5. укажите версию Delphi, которую используете и все настройки проекта;
6. если у вас возникли проблемы с нестандартными компонентами, то обязательно приведите ссылку, по которой их можно скачать.
7. соблюдайте правила форума
Удачи.
Модераторы форума Delphi & Kylix: Delpher, kosfiz & OlgaKr
Если вы с чем-то несогласны или у вас есть предложения обращайтесь к модераторам в приват.
если не программно, то так: Panel->Font->Style->fsBold=true.
Не работает.Вывод-Ты злой и память твоя плохая.
Не работает.Вывод-Ты злой и память твоя плохая.
Уважаемый, Вы бы так не торопились с выводами, код рабочий на все сто!!!
Как вариант возможных проблем могу только посоветовать - [COLOR="Purple"]поставьте в конце строки точку с запятой ";"[/COLOR] :cool:
А вообще прежде чем писать такие заявления моглибы просто объяснить в чем проблема!!!
Собственно, задача следующая: нужно прочитать строку (String), взять первые три символа, сверить со списком других строк. Если найдено соответствие, предпринять какие-либо действия.
Нашел функцию StrPos, которая, если сравниваемое значение будет найдено, возвратит позицию вхождения подстроки. Соответственно, наверное, можно будет сделать так:
if(StrPos(PChar(String1), PChar(String2)) <> nil) then begin
//Что-либо предпринимаем
end;
Дело за малым получить String2...
Returns a substring of a string or a segment of a dynamic array
Unit
System
Syntax
[Delphi] function Copy(S: string; Index: Integer; Count: Integer): string;
ExcelApplication1.Cells.Item[i,2].Value:=AdoTable1.FieldByName('Наименование').AsString;
Зарание спасибо!
Люди подскажите как сделать так!
У меня есть в наличии Button1 и Label
Как сделать так при нажать на кнопку прога ждала нажатии любой клавиши!
И если нажата то она выведет на Label номер или названии нажатой кнопки.
2) Читаем хелп к Delphi и книги по программированию
3) Юзаем код:
begin
flag := 1;
end;
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if flag = 1 then Label1.Caption := Key;
end;
Я пытаюсь связать ComboBox и ini-файл...
Значит я имею ini-файл такова типа:
[List]
1=abc
2=dfg
3=hij
...
Вопрос: Как можно добавить параметр... только так чтоб прога сама определяла число... например если последний там "3" тогда прога добавит параметр под номером 4... Если последний 5 - то добавит параметр под номером 6... и так далее...
Как работать с ini-файлами я знаю... у меня не получается сделать именно такой алгоритм который все это определяет...
Подскажите пожалуйста кому не трудно...
1. Считываешь все названия ключей секции с помощью
В Strings.Count получаешь количество значений.
2. С помощью цикла и
определяешь параметр с самым большим индексом.
Если не разобрался, то приведу работающий код :)
Спасибо заранее.
Спасибо заранее.
Ну вот самое простое:
Поставь на форме TEdit и TComboBox. Вот код юнита:
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IniFiles, StdCtrls;
const
IniFile = 'c:\myini.ini';
IniSection = 'list';
type
TForm1 = class(TForm)
Edit1: TEdit;
ComboBox1: TComboBox;
procedure FormCreate(Sender: TObject);
procedure Edit1Exit(Sender: TObject);
private
Ini: TIniFile;
public
procedure ReadParams(Strings: TStrings; Section: string);
procedure WriteParams(Strings: TStrings; Section: string);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Ini := TIniFile.Create(IniFile);
ComboBox1.Clear;
ReadParams(ComboBox1.Items, IniSection);
end;
procedure TForm1.ReadParams(Strings: TStrings; Section: string);
var
I: Integer;
Keys: TStrings;
begin
Strings.Clear;
Keys := TStringList.Create;
Ini.ReadSection(Section, Keys);
for I := 0 to Keys.Count - 1 do
begin
Strings.Add(Ini.ReadString(Section, Keys, 'No Value'));
end;
end;
procedure TForm1.WriteParams(Strings: TStrings; Section: string);
var
I: Integer;
begin
if Strings.Count <> 0 then
begin
Ini.EraseSection(Section);
for I := 0 to Strings.Count - 1 do
begin
Ini.WriteString(Section, IntToStr(I), Strings);
end;
ReadParams(Strings, Section);
end;
end;
procedure TForm1.Edit1Exit(Sender: TObject);
begin
try
if TEdit(Sender).Text <> '' then
begin
ComboBox1.Items.Add(TEdit(Sender).Text);
WriteParams(ComboBox1.Items, IniSection);
end;
finally
TEdit(Sender).Text := '';
end;
end;
end.
Хотя я бы извратился и написал компонент на этот случай, руководствуясь самой идеей ООП...
просто так не найдешь. есть варианты:
1. берешь в руки eMule и вперед искать: найдешь без проблем;
2. купить у себя в городе диск с Kylix'ом: могут возникнуть с этим проблемы, например у меня нигде не купить;
3. закажи на каком-нибудь сайте (диски почтой).
На самом деле все очень просто :)
Для первого варианта
var
ini: TIniFile;
strs: TStrings;
begin
ini := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'test.ini');
strs := TStringList.Create;
try
ini.ReadSection('section', strs);
ini.WriteString('section', IntToStr(strs.Count + 1), 'value');
finally
ini.Free;
strs.Free;
end;
end;
Для второго варианта
var
i: Integer;
ini: TIniFile;
begin
ini := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'test.ini');
try
i := 1;
while true do
begin
if not ini.ValueExists('section', IntToStr(i)) then
begin
ini.WriteString('section', IntToStr(i), 'value');
Break;
end;
Inc(i);
end;
finally
ini.Free;
end;
end;
Чем они отличаются?
В первом случае нумерация продолжается с последнего значения в любом случае. Во втором же если удалить какое нибуть значение посередине, то следующее значение заменит его.
Пример
1=value
2=value
3=value
4=value
6=value
7=value
8=value
9=value
10=value
11=value
Обрати внимание что не хватает 5 параметра. Так вот, в первом варианте следующий параметр получает имя 12, а во втором случае - 5.
В смысле записать строчку в ячейку?
В таком случае:
Нумерация столбцов и строк начинается с нуля
ознакомся с этой статьей, в ней все довольно подробно написано.
1. Как мне зделать чтобы моя форма всегда была по верх других окон ?
2. Как мне зделать чтобы моя форма всегла открывалась в нижнем провом углу ?
Зарание благодарю !
2. Где-то так:
begin
Top := GetSystemmetrics(SM_CYSCREEN) - Height;
Left := GetSystemMetrics(SM_CXSCREEN) - Width;
end;
Я хотел сказать в нижнем правом углу над панелью задачь.
Я хотел сказать в нижнем правом углу над панелью задачь.
гм... действительно... Как-то не подумал, что у людей ПЗ снизу, а не как у меня - слева...
Тогда такой вариант будет получше:
var
R: TRect;
begin
SystemParametersInfo(SPI_GETWORKAREA, 0, @R, 0);
Top := R.Bottom - Height;
Left := R.Right - Width;
end;
P.S я знаю что этот вопрос задвали раз 200 и в инет на него ответа полно но всёже кто знает если не сложно можна дать ссылку.
begin
Result:=false;
CreateMutex(nil,true,'что-нибудь_заковыристое');
if GetLastError=ERROR_ALREADY_EXISTS then
Result:=true;
end;
функция возвращает true когда уже запущена одна копия приложения и false, если нет.
Помница там код был не такой грамозкий.
Все работает как надо. Это то что мне было нужно.
Спасибо! )
так ты про запуск программы спрашиваешь? или про форму? у меня код работает, т.е. если test.exe с этим кодом один раз уже запущена и я запускаю test.exe во второй раз, то функция возвращает true. кстати если все-таки про запуск приложения, то напиши как используешь функцию.
так ты про запуск программы спрашиваешь? или про форму? у меня код работает, т.е. если test.exe с этим кодом один раз уже запущена и я запускаю test.exe во второй раз, то функция возвращает true. кстати если все-таки про запуск приложения, то напиши как используешь функцию.
Разъесни как нада использовать её я чёта не понимаю !
Я делаю так :
begin
Rewrite(f,'Plugins\log\log\date.txt');
end;
Но что-то тут не то, но что ?
Я делаю так :
begin
Rewrite(f,'Plugins\log\log\date.txt');
end;
Но что-то тут не то, но что ?
Ты все делаешь правельно...
Var
F : TextFile;
begin
if not FileExists('alloc.txt') then
begin
AssignFile(F, 'alloc.txt');
Rewrite(F, 'alloc.txt');
end;
end;
Есть два приложения(1.exe) на одном приложении установленн компанент AdvAlertWindow
На другом(2.exe) одна кнопка
Так как мне зделать чтобы нажав кномпу на одном приложенни(2.exe) в
Другом приложении(1.exe) высветился AdvAlertWindow с тестом который отослали с 1.exe
Незнаю поняли вы меня или нет
Вот привиду пример как зделать тоже самое но не в компанент а Memo
Form1: TForm1;
wnd,cwnd:HWND;
implementation
{$R *.dfm}
function EnChWndCallBack(FormHandle:hWnd;l:pchar):boolean;stdcall;
var FormClass:array[0..255] of char;
begin
Result:=True;
GetClassName(FormHandle, FormClass, sizeof(FormClass));
if FormClass=string(l) then
begin
cwnd:=FormHandle;
Result:=false;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
wnd:=FindWindow(nil,test');
if wnd <> 0 then begin
EnumChildWindows(wnd,@EnChWndCallBack,LParam(pchar('TMemo')));
if cwnd <> 0 then begin
SendMessage(cwnd,WM_SETTEXT,0,LParam(pchar('ksdasd')));
end;
end;
end;
После нажатия на кнопку в другом приложении под названтем test в Memo поевляется текс 'ksdasd'
А мне нада тоже самое зделать тока чтобы текст пошол в компанент
AdvAlertWindow
НАдеюсь вы меня поняли...
................................
После нажатия на кнопку в другом приложении под названтем test в Memo поевляется текс 'ksdasd'
А мне нада тоже самое зделать тока чтобы текст пошол в компанент
AdvAlertWindow
НАдеюсь вы меня поняли...
Я конечно не знаю, что это за компонент такой AdvAlertWindow, но вообще насколько мне видится есть два пути:
1) Перебор компонентов-детей формы первого приложения на принадлежность их классу TAdvAlertWindow, и после этого послать сообщение этому компоненту.
2) Послать сообщение форме первого приложения, а в событии формы OnMessage обработать полученное сообщение (взять из него текст и тд.) и высветить нужное тебе сообщение с полученным текстом.
ИМХО, второе решение проще.
Если Memo В данный момент пишут скажем в Label пишет что Memo активно... если не пишут в Memo в Label пишут что Memo не активно...
Как реализовать ?
если в Memo1 на Ct3D:=false; То вид MEmo менятся
Как зделать тоже самое с RichEdit1, Ct3D:=false не помогает