Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Вниз

Двадцатка самых популярных вопросов.   Найти похожие ветки 

 
panov ©   (2004-03-26 15:09) [120]

http://delphimaster.net/view/1-1080300909/


 
panov ©   (2004-03-26 15:09) [120]

http://delphimaster.net/view/1-1080300909/


 
Romkin ©   (2004-03-26 15:35) [121]

Посылать на http://sources.ru/delphi/delphi_system.shtml#17


 
Romkin ©   (2004-03-26 15:35) [121]

Посылать на http://sources.ru/delphi/delphi_system.shtml#17


 
panov ©   (2004-03-26 21:45) [122]

2 вопрос.
Как спрятать (свернуть) приложение при нажатии на кнопку «закрыть» в области заголовка формы или при нажатии Alt-F4?
---------
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
 private
   { Private declarations }
 public
   { Public declarations }
   procedure OnWM_SYSCOMMAND(var Message: TMessage); message WM_SYSCOMMAND;
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.OnWM_SYSCOMMAND(var Message: TMessage);
begin
 if Message.WParam=SC_CLOSE then
 begin
   Application.Minimize;
   Message.Result := 0;
 end
 else inherited;
end;

end.


 
panov ©   (2004-03-26 21:45) [122]

2 вопрос.
Как спрятать (свернуть) приложение при нажатии на кнопку «закрыть» в области заголовка формы или при нажатии Alt-F4?
---------
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
 private
   { Private declarations }
 public
   { Public declarations }
   procedure OnWM_SYSCOMMAND(var Message: TMessage); message WM_SYSCOMMAND;
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.OnWM_SYSCOMMAND(var Message: TMessage);
begin
 if Message.WParam=SC_CLOSE then
 begin
   Application.Minimize;
   Message.Result := 0;
 end
 else inherited;
end;

end.


 
DrPass ©   (2004-03-26 23:51) [123]

А вот еще популярный вопрос по этой теме:
"Как заставить юзеров сначала читать FAQ, а потом спрашивать на форуме, а не наоборот"


 
DrPass ©   (2004-03-26 23:51) [123]

А вот еще популярный вопрос по этой теме:
"Как заставить юзеров сначала читать FAQ, а потом спрашивать на форуме, а не наоборот"


 
_none_ ©   (2004-03-27 01:21) [124]

надо посылать всех на www.soobcha.ru


 
_none_ ©   (2004-03-27 01:21) [124]

надо посылать всех на www.soobcha.ru


 
Piter ©   (2004-03-27 19:14) [125]

Предлагаю оформлять FAQ не как сейчас, а разбивать их по темам, как форумы!
Так будет логичнее...

типа Базы данных, Основные вопросы, WinApi и т.д.

Панов, как идет работа над FAQ"ом? Я хочу принять участие...


 
Piter ©   (2004-03-27 19:14) [125]

Предлагаю оформлять FAQ не как сейчас, а разбивать их по темам, как форумы!
Так будет логичнее...

типа Базы данных, Основные вопросы, WinApi и т.д.

Панов, как идет работа над FAQ"ом? Я хочу принять участие...


 
Rouse_ ©   (2004-03-27 19:27) [126]

> [125] Piter ©   (27.03.04 19:14)
Работа идет :)
По поводу участия - адрес у Саши знаешь :)


 
Rouse_ ©   (2004-03-27 19:27) [126]

> [125] Piter ©   (27.03.04 19:14)
Работа идет :)
По поводу участия - адрес у Саши знаешь :)


 
PVOzerski ©   (2004-03-27 20:12) [127]

IMHO, "хит сезона" - попытки назначить обработчиками событий неинкапсулированные процедуры и возникающие из-за этого вопросы "как назначить?".


 
PVOzerski ©   (2004-03-27 20:12) [127]

IMHO, "хит сезона" - попытки назначить обработчиками событий неинкапсулированные процедуры и возникающие из-за этого вопросы "как назначить?".


 
Игорь Шевченко ©   (2004-03-27 20:30) [128]

Как избавиться от ScrollBars на главной MDI-форме:


{  (С) Peter Below (TeamB)              }

unit MainForm;

interface
uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 Menus;

type
 TfMain = class(TForm)
   procedure FormCreate(Sender: TObject);
 ....
 end;

var
 fMain: TfMain;

implementation

{$R *.DFM}

function ClientWindowProc( wnd: HWND; msg: Cardinal; wparam, lparam: Integer ): Integer; stdcall;
var
 f: Pointer;
begin
 f := Pointer(GetWindowLong (wnd, GWL_USERDATA));
 case msg of
 WM_NCCALCSIZE:
   if (GetWindowLong (wnd, GWL_STYLE) and
      (WS_HSCROLL or WS_VSCROLL)) <> 0 then
     SetWindowLong (wnd, GWL_STYLE,
       GetWindowLong (wnd, GWL_STYLE) and
         not (WS_HSCROLL or WS_VSCROLL));
 end;
 Result := CallWindowProc(f, wnd, msg, wparam, lparam);
end;

procedure TfMain.FormCreate(Sender: TObject);
begin
 if ClientHandle <> 0 then begin
   if GetWindowLong (ClientHandle, GWL_USERDATA) <> 0 then
     Exit;  {cannot subclass client window, userdata already in use}
   SetWindowLong (ClientHandle, GWL_USERDATA,
     SetWindowLong (ClientHandle, GWL_WNDPROC,
       integer(@ClientWindowProc)));
 end;
end;

end.


 
Игорь Шевченко ©   (2004-03-27 20:30) [128]

Как избавиться от ScrollBars на главной MDI-форме:


{  (С) Peter Below (TeamB)              }

unit MainForm;

interface
uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 Menus;

type
 TfMain = class(TForm)
   procedure FormCreate(Sender: TObject);
 ....
 end;

var
 fMain: TfMain;

implementation

{$R *.DFM}

function ClientWindowProc( wnd: HWND; msg: Cardinal; wparam, lparam: Integer ): Integer; stdcall;
var
 f: Pointer;
begin
 f := Pointer(GetWindowLong (wnd, GWL_USERDATA));
 case msg of
 WM_NCCALCSIZE:
   if (GetWindowLong (wnd, GWL_STYLE) and
      (WS_HSCROLL or WS_VSCROLL)) <> 0 then
     SetWindowLong (wnd, GWL_STYLE,
       GetWindowLong (wnd, GWL_STYLE) and
         not (WS_HSCROLL or WS_VSCROLL));
 end;
 Result := CallWindowProc(f, wnd, msg, wparam, lparam);
end;

procedure TfMain.FormCreate(Sender: TObject);
begin
 if ClientHandle <> 0 then begin
   if GetWindowLong (ClientHandle, GWL_USERDATA) <> 0 then
     Exit;  {cannot subclass client window, userdata already in use}
   SetWindowLong (ClientHandle, GWL_USERDATA,
     SetWindowLong (ClientHandle, GWL_WNDPROC,
       integer(@ClientWindowProc)));
 end;
end;

end.


 
Piter ©   (2004-03-27 21:12) [129]

Игорь Шевченко (27.03.04 20:30) [128]
Как избавиться от ScrollBars на главной MDI-форме


а можно поинтересоваться - а в чем проблема? Я никак не пойму... какой еще скролл бар у MDI формы?


 
Piter ©   (2004-03-27 21:12) [129]

Игорь Шевченко (27.03.04 20:30) [128]
Как избавиться от ScrollBars на главной MDI-форме


а можно поинтересоваться - а в чем проблема? Я никак не пойму... какой еще скролл бар у MDI формы?


 
Игорь Шевченко ©   (2004-03-27 21:25) [130]

Piter ©   (27.03.04 21:12)

Можно поинтересоваться. У главной формы MDI-приложения есть клиентская область, в которой размещаются дочерние MDI-окна. Если какая-то из дочерних форм не помещается полностью в клиентской области главной формы, то в этой области появляются скроллбары. В форуме периодически задается вопрос, как от них избавиться.


 
Игорь Шевченко ©   (2004-03-27 21:25) [130]

Piter ©   (27.03.04 21:12)

Можно поинтересоваться. У главной формы MDI-приложения есть клиентская область, в которой размещаются дочерние MDI-окна. Если какая-то из дочерних форм не помещается полностью в клиентской области главной формы, то в этой области появляются скроллбары. В форуме периодически задается вопрос, как от них избавиться.


 
Piter ©   (2004-03-27 22:21) [131]

Игорь Шевченко (27.03.04 21:25) [130]
Если какая-то из дочерних форм не помещается полностью в клиентской области главной формы, то в этой области появляются скроллбары


хм, ну так ведь так и должно быть! Какой смысл убирать этот скролл бар? Каким образом тогда дотянуться до невидимого участка дочерней формы?


 
Piter ©   (2004-03-27 22:21) [131]

Игорь Шевченко (27.03.04 21:25) [130]
Если какая-то из дочерних форм не помещается полностью в клиентской области главной формы, то в этой области появляются скроллбары


хм, ну так ведь так и должно быть! Какой смысл убирать этот скролл бар? Каким образом тогда дотянуться до невидимого участка дочерней формы?


 
Игорь Шевченко ©   (2004-03-27 22:26) [132]


> Какой смысл убирать этот скролл бар?


Просят...


 
Игорь Шевченко ©   (2004-03-27 22:26) [132]


> Какой смысл убирать этот скролл бар?


Просят...


 
Sergey Masloff   (2004-03-27 22:31) [133]

еще вопрос про значек мастера. Ну сейчас вроде пореже а то в неделю по нескольку раз же было ;-)


 
Sergey Masloff   (2004-03-27 22:31) [133]

еще вопрос про значек мастера. Ну сейчас вроде пореже а то в неделю по нескольку раз же было ;-)


 
Rouse_ ©   (2004-03-27 22:35) [134]

> [133] Sergey Masloff   (27.03.04 22:31)
А это уже к программированию не относится :)


 
Rouse_ ©   (2004-03-27 22:35) [134]

> [133] Sergey Masloff   (27.03.04 22:31)
А это уже к программированию не относится :)


 
Sergey Masloff   (2004-03-27 22:37) [135]

Rouse_ ©   (27.03.04 22:35) [134]
> это уже к программированию не относится :)
а что делать? Я вспоминал-вспоминал но другого частого в голову не пришло...


 
Sergey Masloff   (2004-03-27 22:37) [135]

Rouse_ ©   (27.03.04 22:35) [134]
> это уже к программированию не относится :)
а что делать? Я вспоминал-вспоминал но другого частого в голову не пришло...


 
Rouse_ ©   (2004-03-27 22:44) [136]

> [135] Sergey Masloff   (27.03.04 22:37)
Иногда лучше жевать, чем говорить © :)))


 
Rouse_ ©   (2004-03-27 22:44) [136]

> [135] Sergey Masloff   (27.03.04 22:37)
Иногда лучше жевать, чем говорить © :)))


 
Sergey Masloff   (2004-03-27 22:56) [137]

Rouse_ ©   (27.03.04 22:44) [136]
>> [135] Sergey Masloff   (27.03.04 22:37)
>Иногда лучше жевать, чем говорить © :)))
Я и так за 90 вот-вот перевалю :( Жевать, нет уж спасибо... Поговорю лучше ;-)


 
Sergey Masloff   (2004-03-27 22:56) [137]

Rouse_ ©   (27.03.04 22:44) [136]
>> [135] Sergey Masloff   (27.03.04 22:37)
>Иногда лучше жевать, чем говорить © :)))
Я и так за 90 вот-вот перевалю :( Жевать, нет уж спасибо... Поговорю лучше ;-)


 
Fenik ©   (2004-03-27 23:26) [138]

Как объединить два изображения в одно.


 
Fenik ©   (2004-03-27 23:26) [138]

Как объединить два изображения в одно.


 
TButton ©   (2004-03-27 23:33) [139]

>Как избавиться от ScrollBars на главной MDI-форме

а я всегда думал, что надо AutoScroll поставить в false...


 
TButton ©   (2004-03-27 23:33) [139]

>Как избавиться от ScrollBars на главной MDI-форме

а я всегда думал, что надо AutoScroll поставить в false...


 
TButton ©   (2004-03-27 23:35) [140]

>а я всегда думал, что надо AutoScroll поставить в false...

плохо думал...


 
TButton ©   (2004-03-27 23:35) [140]

>а я всегда думал, что надо AutoScroll поставить в false...

плохо думал...


 
Юрий Зотов ©   (2004-03-28 07:33) [141]

> panov ©   (26.03.04 21:45) [122]
> if Message.WParam=SC_CLOSE then

Не совсем так.

In WM_SYSCOMMAND messages, the four low-order bits of the uCmdType parameter are used internally by Windows. To obtain the correct result when testing the value of uCmdType, an application must combine the value 0xFFF0 with the uCmdType value by using the bitwise AND operator.

Поэтому надо так:
if Message.WParam and $FFF0 = SC_CLOSE then...


 
Юрий Зотов ©   (2004-03-28 07:33) [141]

> panov ©   (26.03.04 21:45) [122]
> if Message.WParam=SC_CLOSE then

Не совсем так.

In WM_SYSCOMMAND messages, the four low-order bits of the uCmdType parameter are used internally by Windows. To obtain the correct result when testing the value of uCmdType, an application must combine the value 0xFFF0 with the uCmdType value by using the bitwise AND operator.

Поэтому надо так:
if Message.WParam and $FFF0 = SC_CLOSE then...


 
panov ©   (2004-03-29 11:52) [142]

>Юрий Зотов ©   (28.03.04 07:33) [141]
Спасибо за замечание, испроавлю в ответе.


 
panov ©   (2004-03-29 11:52) [142]

>Юрий Зотов ©   (28.03.04 07:33) [141]
Спасибо за замечание, испроавлю в ответе.


 
panov ©   (2004-03-29 15:53) [143]

Третий вопрос.

Как получить список/размер всех файлов в каталоге и его подкаталогах?

Функции или процедуры, позволяющей это сделать нет, поэтому для получения списка файлов нужно воспользоваться рекурсивно функциями FindFirst/FindNext/FindClose.

Пример:

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Classes, Controls, Forms,
 StdCtrls, Masks;

type
 TForm1 = class(TForm)
   Button1: TButton;
   ListBox1: TListBox;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

//Простой поиск всех файлов в каталоге и его покаталогах
procedure GetFilesSimple(const aPath: String;var aListFile: TStringList);
var
 SR: TSearchRec;
 tPath: String;
begin
 tPath := IncludeTrailingBackSlash(aPath);
 if FindFirst(tPath+"\*.*",faAnyFile,SR)=0 then
 begin
   try
     repeat
       if (SR.Name=".") or (SR.Name="..") then Continue;
       if (SR.Attr and faDirectory)<>0 then GetFilesSimple(tPath+SR.Name,aListFile);
       aListFile.Add(tPath+SR.Name);
     until FindNext(SR)<>0;
   finally
     Sysutils.FindClose(SR);
   end;
 end;
end;

//Поиск файлов в каталоге и его покаталогах с фильтром по маске и исключением
//из поиска всех файлов, атрибуты которых попадают в aExcludeAttr
function GetFiles(const aPath,aMask: String;var aListFile: TStringList;const aExcludeAttr: Integer=0): Integer;
var
 SR: TSearchRec;
 tPath: String;
begin
 tPath := IncludeTrailingBackSlash(aPath);
 if FindFirst(tPath+"*.*",faDirectory,SR)=0 then
 begin
   try
     repeat
       if (SR.Name=".") or (SR.Name="..") then Continue;
       if (SR.Attr and faDirectory)<>0 then GetFiles(tPath+SR.Name,aMask,aListFile,aExcludeAttr);
       if (aExcludeAttr<>0) and (SR.Attr and aExcludeAttr <> 0) then Continue;
       if MatchesMask(SR.Name,aMask) then aListFile.Add(tPath+SR.Name);
     until FindNext(SR)<>0;
   finally
     Sysutils.FindClose(SR);
   end;
 end;
end;

//Процедура вычисления размера каталога
procedure GetDirSize(const aPath: String;var SizeDir: Int64);
var
 SR: TSearchRec;
 tPath: String;
begin
 tPath := IncludeTrailingBackSlash(aPath);
 if FindFirst(tPath+"*.*",faAnyFile,SR)=0 then
 begin
   try
     repeat
       if (SR.Name=".") or (SR.Name="..") then Continue;
       if (SR.Attr and faDirectory)<>0 then
       begin
         GetDirSize(tPath+SR.Name,SizeDir);
         Continue;
       end;
       SizeDir := SizeDir +
                 (SR.FindData.nFileSizeHigh shl 32)+
                 SR.FindData.nFileSizeLow;
     until FindNext(SR)<>0;
   finally
     Sysutils.FindClose(SR);
   end;
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 SizeDir: Int64;
 ListFiles: TStringList;
begin
 ListFiles := TStringList.Create;

 GetFilesSimple("c:\winnt",ListFiles);  //Поиск всех файлов

 ListFiles.Add("---------");

 GetFiles("c:\winnt","*.exe",ListFiles,faArchive);

 ListFiles.Add("---------");

 SizeDir := 0;
 GetDirSize("c:\winnt",SizeDir);

 ListFiles.Add("Размер каталога "+IntToStr(SizeDir));

 ListBox1.Items.Assign(ListFiles);

 ListFiles.Free;
end;

end.


 
panov ©   (2004-03-29 15:53) [143]

Третий вопрос.

Как получить список/размер всех файлов в каталоге и его подкаталогах?

Функции или процедуры, позволяющей это сделать нет, поэтому для получения списка файлов нужно воспользоваться рекурсивно функциями FindFirst/FindNext/FindClose.

Пример:

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Classes, Controls, Forms,
 StdCtrls, Masks;

type
 TForm1 = class(TForm)
   Button1: TButton;
   ListBox1: TListBox;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

//Простой поиск всех файлов в каталоге и его покаталогах
procedure GetFilesSimple(const aPath: String;var aListFile: TStringList);
var
 SR: TSearchRec;
 tPath: String;
begin
 tPath := IncludeTrailingBackSlash(aPath);
 if FindFirst(tPath+"\*.*",faAnyFile,SR)=0 then
 begin
   try
     repeat
       if (SR.Name=".") or (SR.Name="..") then Continue;
       if (SR.Attr and faDirectory)<>0 then GetFilesSimple(tPath+SR.Name,aListFile);
       aListFile.Add(tPath+SR.Name);
     until FindNext(SR)<>0;
   finally
     Sysutils.FindClose(SR);
   end;
 end;
end;

//Поиск файлов в каталоге и его покаталогах с фильтром по маске и исключением
//из поиска всех файлов, атрибуты которых попадают в aExcludeAttr
function GetFiles(const aPath,aMask: String;var aListFile: TStringList;const aExcludeAttr: Integer=0): Integer;
var
 SR: TSearchRec;
 tPath: String;
begin
 tPath := IncludeTrailingBackSlash(aPath);
 if FindFirst(tPath+"*.*",faDirectory,SR)=0 then
 begin
   try
     repeat
       if (SR.Name=".") or (SR.Name="..") then Continue;
       if (SR.Attr and faDirectory)<>0 then GetFiles(tPath+SR.Name,aMask,aListFile,aExcludeAttr);
       if (aExcludeAttr<>0) and (SR.Attr and aExcludeAttr <> 0) then Continue;
       if MatchesMask(SR.Name,aMask) then aListFile.Add(tPath+SR.Name);
     until FindNext(SR)<>0;
   finally
     Sysutils.FindClose(SR);
   end;
 end;
end;

//Процедура вычисления размера каталога
procedure GetDirSize(const aPath: String;var SizeDir: Int64);
var
 SR: TSearchRec;
 tPath: String;
begin
 tPath := IncludeTrailingBackSlash(aPath);
 if FindFirst(tPath+"*.*",faAnyFile,SR)=0 then
 begin
   try
     repeat
       if (SR.Name=".") or (SR.Name="..") then Continue;
       if (SR.Attr and faDirectory)<>0 then
       begin
         GetDirSize(tPath+SR.Name,SizeDir);
         Continue;
       end;
       SizeDir := SizeDir +
                 (SR.FindData.nFileSizeHigh shl 32)+
                 SR.FindData.nFileSizeLow;
     until FindNext(SR)<>0;
   finally
     Sysutils.FindClose(SR);
   end;
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 SizeDir: Int64;
 ListFiles: TStringList;
begin
 ListFiles := TStringList.Create;

 GetFilesSimple("c:\winnt",ListFiles);  //Поиск всех файлов

 ListFiles.Add("---------");

 GetFiles("c:\winnt","*.exe",ListFiles,faArchive);

 ListFiles.Add("---------");

 SizeDir := 0;
 GetDirSize("c:\winnt",SizeDir);

 ListFiles.Add("Размер каталога "+IntToStr(SizeDir));

 ListBox1.Items.Assign(ListFiles);

 ListFiles.Free;
end;

end.


 
panov ©   (2004-03-29 16:03) [144]

4 вопрос.
Как перекодировать строку из кодировки OEM в кодировку ANSI и обратно?

function Win2Dos(const aStr: String): String;
begin
 Result := aStr;
 CharToOem(PChar(Result),PChar(Result));
end;

function Dos2Win(const aStr: String): String;
begin
 Result := aStr;
 OemToChar(PChar(Result),PChar(Result));
end;


 
panov ©   (2004-03-29 16:03) [144]

4 вопрос.
Как перекодировать строку из кодировки OEM в кодировку ANSI и обратно?

function Win2Dos(const aStr: String): String;
begin
 Result := aStr;
 CharToOem(PChar(Result),PChar(Result));
end;

function Dos2Win(const aStr: String): String;
begin
 Result := aStr;
 OemToChar(PChar(Result),PChar(Result));
end;


 
Dmitriy O. ©   (2004-03-29 16:06) [145]

А на мой вопрос по печати больших изображений уже был ответ ?
Например нужно распечатать Имаже 700*5600 как это сделать ?


 
Dmitriy O. ©   (2004-03-29 16:06) [145]

А на мой вопрос по печати больших изображений уже был ответ ?
Например нужно распечатать Имаже 700*5600 как это сделать ?


 
panov ©   (2004-03-29 16:22) [146]

>Dmitriy O. ©   (29.03.04 16:06) [145]

Я иду по списку, который был выше, и до графики еще далеко. А так как с графикой я не работал вообще, то сразу будет сложно ответить. Может быть Вы ответите на этот вопрос и опубликуете здесь?


 
panov ©   (2004-03-29 16:22) [146]

>Dmitriy O. ©   (29.03.04 16:06) [145]

Я иду по списку, который был выше, и до графики еще далеко. А так как с графикой я не работал вообще, то сразу будет сложно ответить. Может быть Вы ответите на этот вопрос и опубликуете здесь?


 
Тимохов ©   (2004-03-29 16:29) [147]


> panov ©   (29.03.04 16:03) [144]

проверку на astr <> "" забыли


 
Тимохов ©   (2004-03-29 16:29) [147]


> panov ©   (29.03.04 16:03) [144]

проверку на astr <> "" забыли


 
panov ©   (2004-03-29 16:31) [148]

5 вопрос.

Как выполнить длительную(по времени) процедуру в дополнительном потоке и одновременно обновлять TProgressBar в основном потоке.

unit ufMyLongProcedure;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ComCtrls, StdCtrls;

type

 TForm1 = class(TForm)
   Button1: TButton;
   ProgressBar1: TProgressBar;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

//Класс потока для выполнения длительных расчетов
 TMyLongProcedure = class(TThread)
   FProgressBar: TProgressBar;
   FCounter: Integer;
 protected
     procedure Execute; override;
 public
   //Параметром передаем TProgressBar, который необходимо обновлять
   constructor Create(aProgressBar: TProgressBar);
   //Процедура для работы с объектами в основном потоке
   procedure ShowProgress;
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

constructor TMyLongProcedure.Create(aProgressBar: TProgressBar);
begin
 inherited Create(True);   //Создается в приостановленном состоянии
 FreeOnTerminate := True;  //После окончания выполнения потока все
                           // ресурсы освобождаются автоматически
 FProgressBar := aProgressBar;
 FProgressBar.Min := 0;
 FProgressBar.Max := 100;
 FProgressBar.Position := 0;
 FCounter := 0;
 Resume;
end;

procedure TMyLongProcedure.ShowProgress;
begin
//Обновление TProgressBar в основном потоке
 FProgressBar.Position := FCOunter;
end;

procedure TMyLongProcedure.Execute;
var
 i: Integer;
begin
 i := 0;
 while (not Terminated) and (i<10000) do
 begin
   if (i mod 10) = 0 then  //Не обновляем на каждой итерации,
                           // так как тогда не сможем работать
                           // в основном потоке с формой
   begin
     inc(FCounter);
     Synchronize(ShowProgress);  //Обновляем TProgressBar
     if FCounter=100 then FCOunter := 0; //TProgressBar будет обновляться
                                         // циклически
   end;
   Sleep(1);                             //Для эмуляции длительной работы
   Inc(i);
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  TMyLongProcedure.Create(ProgressBar1);
end;

end.


 
panov ©   (2004-03-29 16:31) [148]

5 вопрос.

Как выполнить длительную(по времени) процедуру в дополнительном потоке и одновременно обновлять TProgressBar в основном потоке.

unit ufMyLongProcedure;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ComCtrls, StdCtrls;

type

 TForm1 = class(TForm)
   Button1: TButton;
   ProgressBar1: TProgressBar;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

//Класс потока для выполнения длительных расчетов
 TMyLongProcedure = class(TThread)
   FProgressBar: TProgressBar;
   FCounter: Integer;
 protected
     procedure Execute; override;
 public
   //Параметром передаем TProgressBar, который необходимо обновлять
   constructor Create(aProgressBar: TProgressBar);
   //Процедура для работы с объектами в основном потоке
   procedure ShowProgress;
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

constructor TMyLongProcedure.Create(aProgressBar: TProgressBar);
begin
 inherited Create(True);   //Создается в приостановленном состоянии
 FreeOnTerminate := True;  //После окончания выполнения потока все
                           // ресурсы освобождаются автоматически
 FProgressBar := aProgressBar;
 FProgressBar.Min := 0;
 FProgressBar.Max := 100;
 FProgressBar.Position := 0;
 FCounter := 0;
 Resume;
end;

procedure TMyLongProcedure.ShowProgress;
begin
//Обновление TProgressBar в основном потоке
 FProgressBar.Position := FCOunter;
end;

procedure TMyLongProcedure.Execute;
var
 i: Integer;
begin
 i := 0;
 while (not Terminated) and (i<10000) do
 begin
   if (i mod 10) = 0 then  //Не обновляем на каждой итерации,
                           // так как тогда не сможем работать
                           // в основном потоке с формой
   begin
     inc(FCounter);
     Synchronize(ShowProgress);  //Обновляем TProgressBar
     if FCounter=100 then FCOunter := 0; //TProgressBar будет обновляться
                                         // циклически
   end;
   Sleep(1);                             //Для эмуляции длительной работы
   Inc(i);
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  TMyLongProcedure.Create(ProgressBar1);
end;

end.


 
blackman ©   (2004-03-29 16:32) [149]

>panov ©   (29.03.04 16:03) [144]
Если пустая aStr, то будет ОЙ :)


 
blackman ©   (2004-03-29 16:32) [149]

>panov ©   (29.03.04 16:03) [144]
Если пустая aStr, то будет ОЙ :)


 
panov ©   (2004-03-29 16:32) [150]

>Тимохов ©   (29.03.04 16:29) [147]
Спасибо, исправлено.


 
panov ©   (2004-03-29 16:32) [150]

>Тимохов ©   (29.03.04 16:29) [147]
Спасибо, исправлено.


 
Игорь Шевченко ©   (2004-03-29 16:35) [151]

Еще часто задаваемые вопросы:
Как добавить свой пункт меню в контекстное меню Explorer.
Как создать ярлык на рабочем столе.
Как зарегистрировать свое расширение файлов (или изменить регистрацию существующего)


 
Игорь Шевченко ©   (2004-03-29 16:35) [151]

Еще часто задаваемые вопросы:
Как добавить свой пункт меню в контекстное меню Explorer.
Как создать ярлык на рабочем столе.
Как зарегистрировать свое расширение файлов (или изменить регистрацию существующего)


 
panov ©   (2004-03-29 16:36) [152]

>blackman ©   (29.03.04 16:32) [149]
>Тимохов ©   (29.03.04 16:29) [147]

function Win2Dos(const aStr: String): String;
begin
Result := aStr;
if Result = "" then Exit;
CharToOem(PChar(Result),PChar(Result));
end;

function Dos2Win(const aStr: String): String;
begin
Result := aStr;
if Result = "" then Exit;
OemToChar(PChar(Result),PChar(Result));
end;


 
panov ©   (2004-03-29 16:36) [152]

>blackman ©   (29.03.04 16:32) [149]
>Тимохов ©   (29.03.04 16:29) [147]

function Win2Dos(const aStr: String): String;
begin
Result := aStr;
if Result = "" then Exit;
CharToOem(PChar(Result),PChar(Result));
end;

function Dos2Win(const aStr: String): String;
begin
Result := aStr;
if Result = "" then Exit;
OemToChar(PChar(Result),PChar(Result));
end;


 
Игорь Шевченко ©   (2004-03-29 16:37) [153]


> function Dos2Win(const aStr: String): String;
> begin
> Result := aStr;
> if Result = "" then Exit;
> OemToChar(PChar(Result),PChar(Result));
> end;


Предлагаю

function Dos2Win(const aStr: String): String;
begin
 Result := aStr;
 if Result <> "" then
   OemToChar(PChar(Result),PChar(Result));
end;


 
Игорь Шевченко ©   (2004-03-29 16:37) [153]


> function Dos2Win(const aStr: String): String;
> begin
> Result := aStr;
> if Result = "" then Exit;
> OemToChar(PChar(Result),PChar(Result));
> end;


Предлагаю

function Dos2Win(const aStr: String): String;
begin
 Result := aStr;
 if Result <> "" then
   OemToChar(PChar(Result),PChar(Result));
end;


 
panov ©   (2004-03-29 16:39) [154]

>Игорь Шевченко ©   (29.03.04 16:37) [153]

Согласен, так и запишем-)


 
panov ©   (2004-03-29 16:39) [154]

>Игорь Шевченко ©   (29.03.04 16:37) [153]

Согласен, так и запишем-)


 
Dmitriy O. ©   (2004-03-29 16:50) [155]


> panov ©   (29.03.04 16:22) [146]
Хорошо вот рабочий код из моей Avtoshema. Печатает очень
большие изображения практическибесконечные. С помощью Qreport.Вся фишка в использовании двух Qrimage. При одном изображение есть на превьев а на печать выводится пустая страница. Итак зацените !

procedure TMyform.ApechExecute(Sender: TObject);
var
i,str:integer;
stras:string;
strap:pchar;
begin

idiag1.Stretch:=false;
if radiogroup1.ItemIndex=0 then begin
//idiag1.Stretch:=true;
//idiag1.Height:=1040;
qrimage1.AutoSize:=false;
qrimage2.AutoSize:=false;
qrimage1.Height:=idiag1.Height;
qrimage2.Height:=idiag1.Height;
qrimage1.Canvas.CopyMode:=cmSrcCopy;
qrimage1.Canvas.CopyRect(rect(0,0,350,idiag1.Height),idiag1.Canvas,rect(0,0,350,idiag1.Height));
qrimage2.Canvas.CopyMode:=cmSrcCopy;
qrimage2.Canvas.CopyRect(rect(0,0,350,idiag1.Height),idiag1.Canvas,rect(350,0,700,idiag1.Height));
qrimage2.Canvas.TextOut(320,1020,"1");
qrimage1.Stretch:=true;
qrimage2.Stretch:=true;
qrimage1.Height:=1040;
qrimage2.Height:=1040;
quickrep1.Preview;
qrimage1.Stretch:=false;
qrimage2.Stretch:=false;;
exit;
end;
str:=ceil(idiag1.Height/1040);
stras:="Всего "+inttostr(str)+" страниц";
strap:=PChar(stras);
if (application.messagebox(strap,"Печать",mb_yesno+mb_iconquestion)=idno) then exit;
if cbprint.Checked=true then begin
quickrep1.PrinterSetup;
//quickrep1.Prepare;
end;
qrimage1.Canvas.CopyMode:=cmSrcCopy;
qrimage2.Canvas.CopyMode:=cmSrcCopy;
for i:=1 to str do begin
case i of
1:begin
qrimage1.Picture.Graphic:=nil;
qrimage2.Picture.Graphic:=nil;
qrimage1.Canvas.CopyRect(rect(0,0,350,1040),idiag1.Canvas,rect(0,0,350,1040));
qrimage2.Canvas.CopyRect(rect(0,0,350,1040),idiag1.Canvas,rect(350,0,700,1040));
qrimage2.Canvas.TextOut(320,1020,"1");
quickrep1.Print;
end;
2:begin
qrimage1.Picture.Graphic:=nil;
qrimage2.Picture.Graphic:=nil;
qrimage1.Canvas.CopyRect(rect(0,0,350,1040),idiag1.Canvas,rect(0,1040,350,2080));
qrimage2.Canvas.CopyRect(rect(0,0,350,1040),idiag1.Canvas,rect(350,1040,700,2080));
qrimage2.Canvas.TextOut(320,1020,"2");
quickrep1.Print;
end;
3:begin
qrimage1.Picture.Graphic:=nil;
qrimage2.Picture.Graphic:=nil;
qrimage1.Canvas.CopyRect(rect(0,0,350,1040),idiag1.Canvas,rect(0,2080,350,3120));
qrimage2.Canvas.CopyRect(rect(0,0,350,1040),idiag1.Canvas,rect(350,2080,700,3120));
qrimage2.Canvas.TextOut(320,1020,"3");
quickrep1.Print;
end;
4:begin
qrimage1.Picture.Graphic:=nil;
qrimage2.Picture.Graphic:=nil;
qrimage1.Canvas.CopyRect(rect(0,0,350,1040),idiag1.Canvas,rect(0,3120,350,4160));
qrimage2.Canvas.CopyRect(rect(0,0,350,1040),idiag1.Canvas,rect(350,3120,700,4160));
qrimage2.Canvas.TextOut(320,1020,"4");
quickrep1.Print;
end;
5: begin
qrimage1.Picture.Graphic:=nil;
qrimage2.Picture.Graphic:=nil;
qrimage1.Canvas.CopyRect(rect(0,0,350,1040),idiag1.Canvas,rect(0,4160,350,5200));
qrimage2.Canvas.CopyRect(rect(0,0,350,1040),idiag1.Canvas,rect(350,4160,700,5200));
qrimage2.Canvas.TextOut(320,1020,"5");
quickrep1.Print;
end;
6:begin
qrimage1.Picture.Graphic:=nil;
qrimage2.Picture.Graphic:=nil;
qrimage1.Canvas.CopyRect(rect(0,0,350,1040),idiag1.Canvas,rect(0,5200,350,6240));
qrimage2.Canvas.CopyRect(rect(0,0,350,1040),idiag1.Canvas,rect(350,5200,700,6240));
qrimage2.Canvas.TextOut(320,1020,"6");
quickrep1.Print;
end;
7:begin
qrimage1.Picture.Graphic:=nil;
qrimage2.Picture.Graphic:=nil;
qrimage1.Canvas.CopyRect(rect(0,0,350,1040),idiag1.Canvas,rect(0,6240,350,7280));
qrimage2.Canvas.CopyRect(rect(0,0,350,1040),idiag1.Canvas,rect(350,6240,700,7280));
qrimage2.Canvas.TextOut(320,1020,"7");
quickrep1.Print;
end;
8:begin
qrimage1.Picture.Graphic:=nil;
qrimage2.Picture.Graphic:=nil;
qrimage1.Canvas.CopyRect(rect(0,0,350,1040),idiag1.Canvas,rect(0,7280,700,8320));
qrimage2.Canvas.CopyRect(rect(0,0,350,1040),idiag1.Canvas,rect(350,7280,350,8320));
qrimage2.Canvas.TextOut(320,1020,"8");
quickrep1.Print;
end;
9:begin
qrimage1.Picture.Graphic:=nil;
qrimage2.Picture.Graphic:=nil;
qrimage1.Canvas.CopyRect(rect(0,0,350,1040),idiag1.Canvas,rect(0,8320,350,9360));
qrimage2.Canvas.CopyRect(rect(0,0,350,1040),idiag1.Canvas,rect(350,8320,700,9360));
qrimage2.Canvas.TextOut(320,1020,"9");
quickrep1.Print;
end;
10:begin
qrimage1.Picture.Graphic:=nil;
qrimage2.Picture.Graphic:=nil;
qrimage1.Canvas.CopyRect(rect(0,0,350,1040),idiag1.Canvas,rect(0,9360,350,10400));
qrimage1.Canvas.CopyRect(rect(0,0,350,1040),idiag1.Canvas,rect(350,9360,700,10400));
qrimage2.Canvas.TextOut(320,1020,"10");
quickrep1.Print;
end;
11: begin
if i=str then begin
qrimage1.Picture.Graphic:=nil;
qrimage2.Picture.Graphic:=nil;
end;
qrimage1.Canvas.CopyRect(rect(0,0,350,1040),idiag1.Canvas,rect(0,10400,350,11440));
qrimage2.Canvas.CopyRect(rect(0,0,350,1040),idiag1.Canvas,rect(350,10400,700,11440));
qrimage2.Canvas.TextOut(320,1020,"11");
quickrep1.Print;
end;
12:begin
qrimage1.Picture.Graphic:=nil;
qrimage2.Picture.Graphic:=nil;
qrimage1.Canvas.CopyRect(rect(0,0,350,1040),idiag1.Canvas,rect(0,11440,350,12480));
qrimage2.Canvas.CopyRect(rect(0,0,350,1040),idiag1.Canvas,rect(350,11440,700,12480));
qrimage2.Canvas.TextOut(320,1020,"12");
quickrep1.Print;
end;
else begin
showmessage("Нет печати более 12 страниц");
break;
end;
end;//case
end;//for

end;


 
Dmitriy O. ©   (2004-03-29 16:50) [155]


> panov ©   (29.03.04 16:22) [146]
Хорошо вот рабочий код из моей Avtoshema. Печатает очень
большие изображения практическибесконечные. С помощью Qreport.Вся фишка в использовании двух Qrimage. При одном изображение есть на превьев а на печать выводится пустая страница. Итак зацените !

procedure TMyform.ApechExecute(Sender: TObject);
var
i,str:integer;
stras:string;
strap:pchar;
begin

idiag1.Stretch:=false;
if radiogroup1.ItemIndex=0 then begin
//idiag1.Stretch:=true;
//idiag1.Height:=1040;
qrimage1.AutoSize:=false;
qrimage2.AutoSize:=false;
qrimage1.Height:=idiag1.Height;
qrimage2.Height:=idiag1.Height;
qrimage1.Canvas.CopyMode:=cmSrcCopy;
qrimage1.Canvas.CopyRect(rect(0,0,350,idiag1.Height),idiag1.Canvas,rect(0,0,350,idiag1.Height));
qrimage2.Canvas.CopyMode:=cmSrcCopy;
qrimage2.Canvas.CopyRect(rect(0,0,350,idiag1.Height),idiag1.Canvas,rect(350,0,700,idiag1.Height));
qrimage2.Canvas.TextOut(320,1020,"1");
qrimage1.Stretch:=true;
qrimage2.Stretch:=true;
qrimage1.Height:=1040;
qrimage2.Height:=1040;
quickrep1.Preview;
qrimage1.Stretch:=false;
qrimage2.Stretch:=false;;
exit;
end;
str:=ceil(idiag1.Height/1040);
stras:="Всего "+inttostr(str)+" страниц";
strap:=PChar(stras);
if (application.messagebox(strap,"Печать",mb_yesno+mb_iconquestion)=idno) then exit;
if cbprint.Checked=true then begin
quickrep1.PrinterSetup;
//quickrep1.Prepare;
end;
qrimage1.Canvas.CopyMode:=cmSrcCopy;
qrimage2.Canvas.CopyMode:=cmSrcCopy;
for i:=1 to str do begin
case i of
1:begin
qrimage1.Picture.Graphic:=nil;
qrimage2.Picture.Graphic:=nil;
qrimage1.Canvas.CopyRect(rect(0,0,350,1040),idiag1.Canvas,rect(0,0,350,1040));
qrimage2.Canvas.CopyRect(rect(0,0,350,1040),idiag1.Canvas,rect(350,0,700,1040));
qrimage2.Canvas.TextOut(320,1020,"1");
quickrep1.Print;
end;
2:begin
qrimage1.Picture.Graphic:=nil;
qrimage2.Picture.Graphic:=nil;
qrimage1.Canvas.CopyRect(rect(0,0,350,1040),idiag1.Canvas,rect(0,1040,350,2080));
qrimage2.Canvas.CopyRect(rect(0,0,350,1040),idiag1.Canvas,rect(350,1040,700,2080));
qrimage2.Canvas.TextOut(320,1020,"2");
quickrep1.Print;
end;
3:begin
qrimage1.Picture.Graphic:=nil;
qrimage2.Picture.Graphic:=nil;
qrimage1.Canvas.CopyRect(rect(0,0,350,1040),idiag1.Canvas,rect(0,2080,350,3120));
qrimage2.Canvas.CopyRect(rect(0,0,350,1040),idiag1.Canvas,rect(350,2080,700,3120));
qrimage2.Canvas.TextOut(320,1020,"3");
quickrep1.Print;
end;
4:begin
qrimage1.Picture.Graphic:=nil;
qrimage2.Picture.Graphic:=nil;
qrimage1.Canvas.CopyRect(rect(0,0,350,1040),idiag1.Canvas,rect(0,3120,350,4160));
qrimage2.Canvas.CopyRect(rect(0,0,350,1040),idiag1.Canvas,rect(350,3120,700,4160));
qrimage2.Canvas.TextOut(320,1020,"4");
quickrep1.Print;
end;
5: begin
qrimage1.Picture.Graphic:=nil;
qrimage2.Picture.Graphic:=nil;
qrimage1.Canvas.CopyRect(rect(0,0,350,1040),idiag1.Canvas,rect(0,4160,350,5200));
qrimage2.Canvas.CopyRect(rect(0,0,350,1040),idiag1.Canvas,rect(350,4160,700,5200));
qrimage2.Canvas.TextOut(320,1020,"5");
quickrep1.Print;
end;
6:begin
qrimage1.Picture.Graphic:=nil;
qrimage2.Picture.Graphic:=nil;
qrimage1.Canvas.CopyRect(rect(0,0,350,1040),idiag1.Canvas,rect(0,5200,350,6240));
qrimage2.Canvas.CopyRect(rect(0,0,350,1040),idiag1.Canvas,rect(350,5200,700,6240));
qrimage2.Canvas.TextOut(320,1020,"6");
quickrep1.Print;
end;
7:begin
qrimage1.Picture.Graphic:=nil;
qrimage2.Picture.Graphic:=nil;
qrimage1.Canvas.CopyRect(rect(0,0,350,1040),idiag1.Canvas,rect(0,6240,350,7280));
qrimage2.Canvas.CopyRect(rect(0,0,350,1040),idiag1.Canvas,rect(350,6240,700,7280));
qrimage2.Canvas.TextOut(320,1020,"7");
quickrep1.Print;
end;
8:begin
qrimage1.Picture.Graphic:=nil;
qrimage2.Picture.Graphic:=nil;
qrimage1.Canvas.CopyRect(rect(0,0,350,1040),idiag1.Canvas,rect(0,7280,700,8320));
qrimage2.Canvas.CopyRect(rect(0,0,350,1040),idiag1.Canvas,rect(350,7280,350,8320));
qrimage2.Canvas.TextOut(320,1020,"8");
quickrep1.Print;
end;
9:begin
qrimage1.Picture.Graphic:=nil;
qrimage2.Picture.Graphic:=nil;
qrimage1.Canvas.CopyRect(rect(0,0,350,1040),idiag1.Canvas,rect(0,8320,350,9360));
qrimage2.Canvas.CopyRect(rect(0,0,350,1040),idiag1.Canvas,rect(350,8320,700,9360));
qrimage2.Canvas.TextOut(320,1020,"9");
quickrep1.Print;
end;
10:begin
qrimage1.Picture.Graphic:=nil;
qrimage2.Picture.Graphic:=nil;
qrimage1.Canvas.CopyRect(rect(0,0,350,1040),idiag1.Canvas,rect(0,9360,350,10400));
qrimage1.Canvas.CopyRect(rect(0,0,350,1040),idiag1.Canvas,rect(350,9360,700,10400));
qrimage2.Canvas.TextOut(320,1020,"10");
quickrep1.Print;
end;
11: begin
if i=str then begin
qrimage1.Picture.Graphic:=nil;
qrimage2.Picture.Graphic:=nil;
end;
qrimage1.Canvas.CopyRect(rect(0,0,350,1040),idiag1.Canvas,rect(0,10400,350,11440));
qrimage2.Canvas.CopyRect(rect(0,0,350,1040),idiag1.Canvas,rect(350,10400,700,11440));
qrimage2.Canvas.TextOut(320,1020,"11");
quickrep1.Print;
end;
12:begin
qrimage1.Picture.Graphic:=nil;
qrimage2.Picture.Graphic:=nil;
qrimage1.Canvas.CopyRect(rect(0,0,350,1040),idiag1.Canvas,rect(0,11440,350,12480));
qrimage2.Canvas.CopyRect(rect(0,0,350,1040),idiag1.Canvas,rect(350,11440,700,12480));
qrimage2.Canvas.TextOut(320,1020,"12");
quickrep1.Print;
end;
else begin
showmessage("Нет печати более 12 страниц");
break;
end;
end;//case
end;//for

end;


 
Тимохов ©   (2004-03-29 16:53) [156]

да...


 
Тимохов ©   (2004-03-29 16:53) [156]

да...


 
blackman ©   (2004-03-29 17:01) [157]

Как открыть URL браузером, установленным по умолчанию?
Используйте функцию ShellExecute.
Пример:
            uses ShellAPI;
            procedure TForm1.Button1Click(Sender: TObject);
            begin
              ShellExecute(Form1.Handle,
                           nil,
                           "http://blackman.wp-club.net",
                           nil,
                           nil,
                           SW_SHOWNORMAL);
            end;
:)


 
blackman ©   (2004-03-29 17:01) [157]

Как открыть URL браузером, установленным по умолчанию?
Используйте функцию ShellExecute.
Пример:
            uses ShellAPI;
            procedure TForm1.Button1Click(Sender: TObject);
            begin
              ShellExecute(Form1.Handle,
                           nil,
                           "http://blackman.wp-club.net",
                           nil,
                           nil,
                           SW_SHOWNORMAL);
            end;
:)


 
Игорь Шевченко ©   (2004-03-29 17:01) [158]

Dmitriy O. ©   (29.03.04 16:50)


> Итак зацените !


LMD


 
Игорь Шевченко ©   (2004-03-29 17:01) [158]

Dmitriy O. ©   (29.03.04 16:50)


> Итак зацените !


LMD


 
Dmitriy O. ©   (2004-03-29 17:04) [159]


> Игорь Шевченко ©   (29.03.04 17:01)
Что только обзываться умеете. Если знаете как по другому. То  скажите как. А этот метод хорош тем что если  его немножко модифицировать то можно печатать с разными маштабами устанавливать свою разметку страниц.


 
Dmitriy O. ©   (2004-03-29 17:04) [159]


> Игорь Шевченко ©   (29.03.04 17:01)
Что только обзываться умеете. Если знаете как по другому. То  скажите как. А этот метод хорош тем что если  его немножко модифицировать то можно печатать с разными маштабами устанавливать свою разметку страниц.


 
Тимохов ©   (2004-03-29 17:09) [160]


> Игорь Шевченко ©   (29.03.04 17:01) [158]

как точно человек все определил...


 
Тимохов ©   (2004-03-29 17:09) [160]


> Игорь Шевченко ©   (29.03.04 17:01) [158]

как точно человек все определил...



Страницы: 1 2 3 4 5 6 7 вся ветка

Форум: "Потрепаться";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Наверх





Память: 1.22 MB
Время: 0.112 c
3-1081431262
gosha2
2004-04-08 17:34
2004.05.09
Парадоксовый индекс


3-1081939231
31512
2004-04-14 14:40
2004.05.09
TClientDataSet.ApplyUpdates(0) &amp; TClientDataSet.Refresh


1-1082452929
Tornado
2004-04-20 13:22
2004.05.09
Помогите побороть TListView


1-1082457655
pvb87
2004-04-20 14:40
2004.05.09
Delphi 8


3-1082025465
Flahas
2004-04-15 14:37
2004.05.09
exel..





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский