Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 2317 • Страница 77 из 116<  1 ... 74  75  76  77  78  79  80 ... 116  >
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 13.02.2004
Откуда: Чехия
Максим
там в памяти очень много файлов (или я не совсем понял ответ). Я думал что через переменные проще было бы.

_________________
Лучше иметь пузо от пива, чем горб от работы.



Партнер
 

Member
Статус: Не в сети
Регистрация: 05.01.2003
Откуда: Москва
Фото: 2
George J
Можно создать в памяти мапированный файл с каким-то твоим именем и через него общаться. Лично по мне так проще. А вот как через переменные ты хотел общаться не особо понятно. Переменная - это участок памяти, зарезервированный за каким-то процессом.
Можно кстати даже через реестр общаться твоим программам :)
Добавлено спустя 14 минут, 56 секунд
George J
Кстати можно еще посылать через сообщения:
Код:
{
You can perform communication between your application using Windows messages
exchange mechanism. We can use HWND_BROADCAST value for first parameter for
SendMessage function for suppressing finding of forms' in other applications HANDLE.
For using HWND_BROADCAST we should register our messages in Windows.
In example below we will inform about our form's top position)

Das Beispiel zeigt, wie zwischen zwei Applikationen eine Meldung (Message)
verschickt werden kann. Die Meldung mit wird mit SendMessage verschickt.
Der erst Parameter ist HWND_BROADCAST, beim zweite ist unsere Message.
Das untenstehende Beispiel informiert z.B uber die Top-Position unserer Form}


 // 1. Define type of your message structure, it could be something like this:
// 1. Definiere eine eigene Message Struktur:


type
   TWMMYMessage = record
     Msg: Cardinal;   // ( first is the message ID )
    Handle: HWND;    // ( this is the wParam, Handle of sender)
    Info: Longint;   // ( this is lParam, pointer to our data)
    Result: Longint;
   end;

   // 2. Override your form''s DefaultHandler method and add
  //    method for handling your message, like this
  // 2. Die DefaultHandler Methode zu uberschreiben

  TForm1 = class(TForm)
     ...public
     { Public declarations }
     ...procedure DefaultHandler(var Message); override;
     procedure WMMYMessage(var Msg: TWMMYMessage);
     ...end;


   // 3. Declare message variable:
  // 3. Die Message-Variablen deklarieren:

var
   WM_OURMESSAGE: DWORD;

   // 4. Insert realisation of DefaultHandler and our message handler methods:
  // 4. DefaultHandler Implementation:

procedure TForm1.DefaultHandler(var Message);
 var
   ee: TWMMYMessage;
 begin
   with TMessage(Message) do
   begin
     if (Msg = WM_OURMESSAGE) then
      begin
       ee.Msg    := Msg;
       ee.Handle := wParam;
       ee.Info   := lParam;
       // Checking if this message is not from us
      if ee.Handle <> Handle then
         WMMYMessage(ee);
     end
     else
       inherited DefaultHandler(Message);
   end;
 end;

 procedure TForm1.WMMYMessage(var Msg: TWMMYMessage);
 begin
   label1.Caption := Format('Our another form handle :%d', [Msg.Handle]);
   Label2.Caption := Format('Our another form top :%d', [Msg.Info]);
 end;

 // 5. Add registration of your message that you could
//    handle the HWND_BROADCAST messages:
// 5. Die Message registrieren.

initialization
   WM_OURMESSAGE := RegisterWindowMessage('Our broadcast message');

   // 6. Add the message sending somewhere:

procedure TForm1.Button1Click(Sender: TObject);
 begin
   SendMessage(HWND_BROADCAST, WM_OURMESSAGE, Handle, Top);
 end;

_________________
Устав традиций нужно соблюдать, Хоть и не раз ответят вам отказом: Конечно, баба может и не дать, Но предложить ты ей всегда обязан!


 

Member
Статус: Не в сети
Регистрация: 11.07.2004
Откуда: Воронеж
Как сделать что бы при сохранении файла, к его имени добавлялось расширение, выбранное в SaveDialog.
А то получается если явно не укажешь расширение в имени файла то он и сохранить без него, хотя расширение выбрано.
DefaultExt к сожалению только одно расширение добавляет.

_________________
Удачи и мудрости.


 

Member
Статус: Не в сети
Регистрация: 05.01.2005
Koval
Koval писал(а):
Как сделать что бы

Смотри свойство Filter. :wink:
Код:
procedure TForm1.btnSaveClick(Sender: TObject);
var
  SD: TSaveDialog;
begin
  SD:= TSaveDialog.Create(Self);
  SD.DefaultExt:= '.txt';
  SD.InitialDir:= ExtractFilePath(Application.ExeName);
  SD.Filter:= 'Текстовый документ|*.txt|Пакетный файл MS-DOS|*.bat'; // Добавляем данные для *.txt и *.bat файлов.
  if SD.Execute then
   MessageBox(0, PChar(SD.FileName), 'Выбран файл:', MB_OK);
  SD.Free;
end;


 

Member
Статус: Не в сети
Регистрация: 11.07.2004
Откуда: Воронеж
_SGK писал(а):
Смотри свойство Filter. Wink

ну вот я его заполнил это свойство, а сохранялка не сохраняет файл с выбранным расширеним в фильтре:)))

_________________
Удачи и мудрости.


 

Member
Статус: Не в сети
Регистрация: 05.01.2005
Koval
Koval писал(а):
ну вот я его заполнил это свойство, а сохранялка не сохраняет файл с выбранным расширеним в фильтре:)))

Упс… :) "cохранялка" тока для выбора файла.
А файл сохраняешь сам :D – "руками".
Код:
procedure TForm1.btnSaveClick(Sender: TObject);
var
  SL: TstringList;
  SD: TSaveDialog;
begin
  SL:= TstringList.Create;
  SD:= TSaveDialog.Create(Self);
  SD.DefaultExt:= '.txt';
  SD.Filter:= 'Текстовый документ|*.txt|Пакетный файл MS-DOS|*.bat'; // Добавляем данные для *.txt и *.bat файлов.
  if SD.Execute then
  begin
    SL.Add('бла-бла-бла...');
    SL.Add('Справка рулит...');
    SL.SaveToFile(SD.FileName); // Типа вот - сохранение содержимого экземпляра TStringList в файл. ;)
  end;
  SD.Free;
  SL.Free;
end;

Справка рулит…;)


 

Member
Статус: Не в сети
Регистрация: 11.07.2004
Откуда: Воронеж
_SGK
я похоже пояснил не правильно

FileSaveAs1: TFileSaveAs;

Код:
procedure TfrmExtNotePad.ExtNotePadFileSave(FileName: String);
begin
  reExtNotePad.Lines.SaveToFile(FileName);
  reExtNotePad.Lines.LoadFromFile(FileName);
  Caption:=FileName;
end;


Код:
procedure TfrmExtNotePad.FileSaveAs1Accept(Sender: TObject);
begin
  ExtNotePadFileSave(FileSaveAs1.Dialog.FileName);
end;


вот....
то есть все сделано так же как и ты говоришь только статически, но расширение не добавляется...[/b]

_________________
Удачи и мудрости.


 

Member
Статус: Не в сети
Регистрация: 05.01.2005
Koval
Koval писал(а):
вот....

ааа… :) дык разрули это в обработчике BeforeExecute.
Код:
procedure TForm1.FileSaveAs1BeforeExecute(Sender: TObject);
resourcestring
  rs_Ext = '.txt';
  rs_Filter = 'Текстовый документ|*.txt|Пакетный файл MS-DOS|*.bat';
begin
  if FileSaveAs1.Dialog.DefaultExt <> rs_Ext then
    FileSaveAs1.Dialog.DefaultExt:= rs_Ext;
  if FileSaveAs1.Dialog.Filter <> rs_Filter then
    FileSaveAs1.Dialog.Filter:= rs_Filter;
end;

Или при создании формы. ;)


 

Member
Статус: Не в сети
Регистрация: 11.07.2004
Откуда: Воронеж
_SGK
огромное спасибо.
Только поясни почему так работает, а указав фильтр статически, в свойствах, не работает?
Код:
resourcestring
  rs_Ext = '.txt';
  rs_Filter = 'Текстовый документ|*.txt|Пакетный файл MS-DOS|*.bat';

первый раз такое вижу в жизни :) что это такое?(в принципе понятно, что инициализация)

_________________
Удачи и мудрости.


 

Member
Статус: Не в сети
Регистрация: 05.01.2005
Koval
Koval писал(а):
Только поясни почему так работает, а указав фильтр статически, в свойствах, не работает?

У меня работает. :) ИМХО это где-то твои "грабли".
Посмотри свой dfm-файл, на предмет сохраненных свойств.
*.dfm является файлом ресурсов и при компиляции присоединяется к приложению также, как и другие ресурсы.
Разработчик компонента может, конечно, явно указать, какие свойства не нужно сохранять.
Для этого используется директива Stored (False/True).
Также значение поля не сохраняется, если значение директивы Default соответствует текущему значению поля.

Но это явно не твой случай. :)

Koval писал(а):
первый раз такое вижу в жизни

resourcestring -> такой себе вид ресурса, известный как таблицы строк.


 

Member
Статус: Не в сети
Регистрация: 11.07.2004
Откуда: Воронеж
_SGK писал(а):
У меня работает. Smile ИМХО это где-то твои "грабли".

хм... сижу и ржу.... Удалил процедуру TfrmExtNotePad.FileSaveAs1Accept
потом по новой создал и все заработало без дополнительных ухищрений...
странное явление....

_________________
Удачи и мудрости.


 

Member
Статус: Не в сети
Регистрация: 05.01.2003
Откуда: Москва
Фото: 2
Люди, плиз помогите. Прописался у меня дебаггер от Дельфи как стандартный дебаггер на всю систему. Мягко говоря стало не удобно, если какое-то приложение упало, а я в это время в Дельфи сижу и работаю. Инстала Дельфи нет, винду точно не переустановить. Как подправить, чтобы стандартный mdm запускался?

_________________
Устав традиций нужно соблюдать, Хоть и не раз ответят вам отказом: Конечно, баба может и не дать, Но предложить ты ей всегда обязан!


 

Member
Статус: Не в сети
Регистрация: 05.01.2005
Максим
Максим писал(а):
Мягко говоря стало не удобно

:) Вот Виндовая запись в реестре, посмотри, подправь.
Код:
REGEDIT4

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug]
"Auto"="0"
"Debugger"="drwtsn32 -p %ld -e %ld -g"
"UserDebuggerHotKey"=dword:00000000


 

Member
Статус: Не в сети
Регистрация: 05.01.2003
Откуда: Москва
Фото: 2
_SGK
Ок, спс. Я правда вчерась нашел уже эту запись, правда в поле debugger ничего не писал, но исправил поле auto с 1 на 0. И хоть ничего не запускается при том, как слетает приложение.

Но в любом случае спс и :beer:

_________________
Устав традиций нужно соблюдать, Хоть и не раз ответят вам отказом: Конечно, баба может и не дать, Но предложить ты ей всегда обязан!


 

здрасте, большая просьба не ржать надо мой, ибо я тока учусь
не коректно работает следующая прога, использующая бинарный поиск в массиве:
Код:
function GetArray: mass;
var
  i: integer;
begin
  for i:=1 to maxarrsize do
    if Length(Form1.StringGrid1.Cells[i-1,0])=0
      then
        Result[i]:=0
      else
        Result[i]:=StrToInt(Form1.StringGrid1.Cells[i-1,0]);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  arr: mass;
  upborder,downborder,downdivup: integer;
  i,exs,index: integer;
begin
  arr:=GetArray;
  exs:=StrToInt(Edit1.Text);
  upborder:=1;
  downborder:=maxarrsize;
  index:=0;
  repeat
    begin
      downdivup:=((downborder-upborder) div 2)+1;
      if arr[downdivup]=exs
        then
          index:=downdivup;
      if index=0
        then
          if exs>downdivup
            then begin
              upborder:=downdivup+1;
              downborder:=downborder-1;
            end
            else begin
              downborder:=downdivup-1;
              upborder:=upborder+1;
            end;
    end;
  until ((upborder=downborder) or (index<>0));
  if index=0
    then
      MessageDlg(' ìàññèâå ÷èñëî '+IntToStr(exs)+' íå îáíàðóæåíî',
                 MtInformation,[mbOk],0)
    else
      Label2.Caption:='Íîìåð ýëåìåíòà '+IntToStr(exs)+' ðàâåí '+IntToStr(index);

end;

end.

поможите люди добрые


 

Member
Статус: Не в сети
Регистрация: 05.01.2003
Откуда: Москва
Фото: 2
HardMan
Я не совсем понял саму программу. У тебя есть массив в стринггриде, а что у тебя в Edit1? Искомое число?

И вообще, нафиг такие сложности то для бинарного поиска? Тем паче для бинарного поиска нужно, чтобы массив был отсортирован. Ты надеюсь это знал?
И почему не воспользоваться "поиском Фибоначчи" к примеру? Такого же типа, только побыстрее получиться.

_________________
Устав традиций нужно соблюдать, Хоть и не раз ответят вам отказом: Конечно, баба может и не дать, Но предложить ты ей всегда обязан!


 

Максим писал(а):
а что у тебя в Edit1? Искомое число?

да
Максим писал(а):
И вообще, нафиг такие сложности то для бинарного поиска?

а как проще?
Максим писал(а):
Ты надеюсь это знал?

да, конечно :)
Максим писал(а):
И почему не воспользоваться "поиском Фибониччи"

а в чем он заключается? ну, я просто хочу научиться всеми самыми популярными способами...

если кто может, помогите ошибку найти плиз


 

Member
Статус: Не в сети
Регистрация: 05.01.2003
Откуда: Москва
Фото: 2
HardMan
Итак, поехали.
Поиск Фибоначчи, или интерполяцонный поиск, или
Код:
Function TCryogenOptAPI.InterpolationSearch(Target: Longint;
                                            Min, Max: Longint): Longint;
Var
  Middle: Integer;
  ZnMin, ZnMax, ZnMiddle: Integer;
Begin
  While (Min <= Max) Do
  Begin
    ZnMin := GetOLFData(Min).Id;
    ZnMax := GetOLFData(Max).Id;
    // Предотвращение деления на нуль.
    If (ZnMin = ZnMax) Then
    Begin
      // Это должен быть искомый элемент (если он есть в списке) .
      If ZnMin = Target Then Result := Min
      Else Result := 0;
      Exit;
    End;

    // Вычисление точки деления.
    Middle := Round(Min + ((Target - ZnMin) * ((Max - Min) / (ZnMax - ZnMin))));

    // Удостовериться, что мы не вышли за пределы диапазона.
    If ((Middle < Min) Or (Middle > Max) ) Then
    Begin
      // Элемента в списке нет.
      Result := 0;
      Exit;
    End;
    ZnMiddle := GetOLFData(Middle).Id;
    If Target = ZnMiddle Then // Элемент найден.
    Begin
      Result := Middle;
      Exit;
    End
    Else
      If Target < ZnMiddle Then
        // Перебор левой половины.
        Max := Middle - 1
      Else
        // Перебор правой половины.
        Min := Middle + 1;
  End; // Конец while (min <= max) do. . .

  // Если мы достигли этой точки, то элемента в списке нет.
  Result := 0;
End;

Итак, на входе Target - искомое число, Min - индекс минимального элемента в массиве, Max - индекс максимального элемента массива.
Сам массив у меня вытаскивается с помощью типа - GetOLFData(Min).Id (это просто динамический массив, где каждая ячейка массива - запись).

Бинарный поиск
Код:
function BinarySearch(target : Longint; List : PLongArray;
min, max : Longint) : Longint;
var
middle: Longint;
begin
searches := 0;
// Во время поиска индекс искомого элемента будет между min и max:
// min <= искомый индекс <= max.
while (min <= max) do
begin
searches := searches + 1;
middle := Round((max+min) / 2);
if (target = list^[middle]) then // Мы нашли его.
begin
Result := middle;
exit;
end else if target < List^[middle] then
// Перебираем левую половину.
max := middle - 1
else
// Перебираем правую половину.
min := middle + 1;
end;
// Если мы оказались здесь, то искомого элемента в списке нет.
Result := 0;
end;


Теперь стало быть сортировка (сортировка слиянием, есть еще пирамидальная сортировка, только не довел до ума, иногда глючит):

Код:
Const
  Cutoff = 10;
 
Procedure TCryogenOptAPI.SelectionSort(List: PLongintArray; Min, Max: Longint);
Var
  I, J, Best_Value, Best_J: Longint;
Begin
  For I := Min To Max - 1 Do
  Begin
    // Нахождение наименьшего из оставшихся элементов.
    Best_Value := List^[I];
    Best_J := I;
    For J := I + 1 To Max Do
      If List^[J] < Best_Value Then
      Begin
        Best_Value := List^[J];
        Best_J := J;
      End;
    // Перемещение его в нужную позицию.
    List^[Best_J] := List^[I];
    List^[I] := Best_Value;
  End;
End;

Procedure TCryogenOptAPI.MergeSort(List, Scratch: PLongintArray;
                                   Min, Max: Longint);
Var
  Middle, I1, I2, I3: Longint;
Begin
  // Если список содержит не более Cutoff элементов,
  // останавливаем рекурсию и используем сортировку выбором.
  If (Max - Min < Cutoff) Then
  Begin
    SelectionSort(List, Min, Max);
    Exit;
  End;
  // Рекурсивно сортируем подсписки.
  Middle := Max Div 2 + Min Div 2;
  MergeSort(List, Scratch, Min, Middle);
  MergeSort(List, Scratch, Middle + 1, Max);

  // Объединение сортированных списков.
  I1 := Min; // Указатель на список 1.
  I2 := Middle + 1; // Указатель на список 2.
  I3 := Min; // Указатель на объединенный список.
  While ((I1 <= Middle) And (I2 <= Max)) Do
  Begin
    If List^[I1] <= List^[I2] Then
    Begin
      Scratch^[I3] := List^[I1];
      I1 := I1 + 1;
    End
    Else
    Begin
      Scratch^[I3] := List^[I2];
      I2 := I2 + 1;
    End;
    I3 := I3 + 1;
  End;
  // Очистка списка, который еще не пустой.
  While (I1 <= Middle) Do
  Begin
    Scratch^[I3] := List^[I1];
    I1 := I1 + 1;
    I3 := I3 + 1;
  End;
  While (I2 <= Max) Do
  Begin
    Scratch^[I3] := List^[I2];
    I2 := I2 + 1;
    I3 := I3 + 1;
  End;
  // Перемещение объединенного списка в исходный список.
  For I3 := Min To Max Do
    List^[I3] := Scratch^[I3];
End;

_________________
Устав традиций нужно соблюдать, Хоть и не раз ответят вам отказом: Конечно, баба может и не дать, Но предложить ты ей всегда обязан!


 

Member
Статус: Не в сети
Регистрация: 03.03.2006
Откуда: Москва
Добрый день, у меня такой вопрос, можно ли в компеляторе Delphi отключить сообщения об ошибках. Т.е. во время работы программы переодически появляется не кретичная ошибка сообщающая о том, что программа не может получить доступ к файлу. Но при этом работа самой программы не прерывается, это ошибка очень раздрожает пользователя! Есть ли возможность перед компелированием отключить функцию вывода ошибок. Заранее всем спасибо!!!


 

Member
Статус: Не в сети
Регистрация: 05.01.2003
Откуда: Москва
Фото: 2
Dr.Alc_H>W
Просто твой код работы с файлом нужно поместить в код типа:
Код:
try
....
except
end;

Но нужно ли именно так писать, может лучше как-нибудь по другому - например чуть пересмотреть код и просто не открывать файл, который нельзя открыть.
Ну что-то типа:
Код:
AssignFile(F, 'myfile.txt');
{$I-}
Rewrite(F);
{$I+}
If IOResult <> 0 Then
Begin
  //твой код, когда файл не создался
End
Else
Begin
  //твой код, когда файл создался и можно в него писать инфу
  CloseFile(F);
End;

_________________
Устав традиций нужно соблюдать, Хоть и не раз ответят вам отказом: Конечно, баба может и не дать, Но предложить ты ей всегда обязан!


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 2317 • Страница 77 из 116<  1 ... 74  75  76  77  78  79  80 ... 116  >
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan