176

(1 replies, posted in Script)

daamoucheacil wrote:

I found it difficult to implement what he wanted, which is shown in the attached image(screenshpot) to the file

у Вас много ошибок в БД
файл sqlite3.dll при разработке может получить повреждения, просто удалите его ..
формы проекта имеют ошибки
Вам будет легче если Вы начнете Ваш проект заново..

vit007 wrote:

А вот объясните, как прихотят уведомления в обратку... ?

если просто, то..

создаем объект

smsquestion:=createoleobject('WinHttp.WinHttpRequest.5.1'); 

и присваиваем ему различные значения
объект передает данные серверу по УРЛ адресу и получает ответ ..

со статусом обработки запроса smsquestion.Status  это может быть 200,400,403,402, 505 и тд..

у каждого статуса свое значение, 200 -  успешно

далее в smsquestion.responsetext содержится сам текст ответа..

vit007 wrote:

sibprogsistem, Посмотрел, Ваш проект по СМС, и некак не получается отправить, все время пишет "нет соединения"...

нужно было убрать 

if not ping(url)then ShowMessage('нет соединения ') else  begin
vovka3003 wrote:

А зачем для этого "..многомерный ассоциативный массив.."?

это решение мне показалось верным ((

хотел в массиве хранить данные картинок для их преобразования. Прошел по списку, настроил картинки как нужно и потом жмешь преобразовать все..

у меня не получается создать массив..

Myarray[i]['adres']:='dhdsg';
Myarray[i]['left']:=0;
Myarray[i]['top']:=0;
Myarray[i]['width']:=400;
Myarray[i]['height']:=160;

примеры из гугла пользовал и ничего не вышло

k245, vovka3003 Спасибо!!

объясните мне как такое возможно
при преобразовании изображения через сгенерированный TBitman, процесс преобразования  чуть более минуты
если добавить в процедуру преобразования ( application.processmessages; ) , то процесс тратит  около 25 секунд
а вот при любой попытке визуализировать данный процесс, хоть через тот же TProgressBar , время обработки увеличивается до 9-ти минут..

процедура преобразования::

procedure SettingPazzle_bLoadImages_OnClick (Sender: TObject; var Cancel: boolean);
var
 OpenDialog: TOpenDialog;
 i,c: integer;
procedure convert;
var
i,j,r,g,b: integer;
c,d: TColor;
prog:TProgressBar;
buf:TBitmap;
begin
SettingPazzle.dbiColor.Picture.Bitmap.Canvas.StretchDraw(0,0,1100,640,SettingPazzle.dbiLoad.Picture.Graphic);

SettingPazzle.dbiColor.Width:=SettingPazzle.dbiColor.Picture.Width;
SettingPazzle.dbiColor.Height:=SettingPazzle.dbiColor.Picture.Height;

buf:=TBitmap.Create;
buf.Width:=SettingPazzle.dbiColor.Picture.Width;
buf.Height:=SettingPazzle.dbiColor.Picture.Height;

 prog:=TProgressBar.Create(SettingPazzle);
 prog.Parent:=SettingPazzle.pProgress;
 prog.Left:=0;
 prog.Top:=0;
 prog.Width:= SettingPazzle.pProgress.Width;
 prog.Height:= SettingPazzle.pProgress.Height;
 prog.Visible:=True;
 prog.Max:=SettingPazzle.dbiColor.Width*SettingPazzle.dbiColor.Height;
 prog.Min:=0;
 SettingPazzle.pProgress.Visible:=True;

for i :=0 to SettingPazzle.dbiColor.Width-1 do
for j :=0 to SettingPazzle.dbiColor.Height-1 do
begin
application.processmessages;
prog.Position:=prog.Position+1;
c :=SettingPazzle.dbiColor.Picture.Bitmap.Canvas.Pixels[i,j];
d:=round((0.30*GetRValue(c))+(0.59*GetGValue(c))+(0.11*GetBValue(c)));
buf.Canvas.Pixels[i,j] :=RGB(d,d,d);
end;
SettingPazzle.dbiLoadBW.Picture.Bitmap.Canvas.Draw(0,0,buf);
SettingPazzle.dbiColor.Picture.Graphic.SaveToFile('C:\Users\user\Desktop\Новая папка\'+IntToStr(nn)+'(c).jpg');
SettingPazzle.dbiLoadBW.Picture.Graphic.SaveToFile('C:\Users\user\Desktop\Новая папка\'+IntToStr(nn)+'(b).jpg');
end;

function GetRValue(rgb: TColor): Byte;
begin
Result:=rgb and $000000ff;
end;

function GetGValue(rgb: TColor): Byte;
begin
Result:=(rgb shr 8) and $000000ff;
end;

function GetBValue(rgb: TColor): Byte;
begin
Result:=(rgb shr 16) and $000000ff;
end;
begin
    OpenDialog := TOpenDialog.Create(SettingPazzle);
    OpenDialog.Options := ofHideReadOnly+ofAllowMultiSelect+ofEnableSizing;
    if OpenDialog.Execute then
    begin
        c := OpenDialog.Files.Count-1;

        for i := 0 to c do
        begin
            if FileExists(OpenDialog.Files[i]) then
            begin
                nn:=i;
                SettingPazzle.eImageName.Text:=ExtractFileName(OpenDialog.Files[i]);
                SettingPazzle.dbiLoad.Picture.LoadFromFile(OpenDialog.Files[i]);
                SettingPazzle.dbiLoad.dbFileName := OpenDialog.Files[i];
                convert;
            end;
        end;
    end;
    OpenDialog.Free;
    SettingPazzle.pProgress.Visible:=False;
end;

самый быстрый вариант без (TProgressBar)

k245 wrote:
sibprogsistem wrote:

сделал и немного огорчился
процесс слишком долгий...

Насколько долгий? Приведите пример: размер изображения ( A x B, пикселей ) - время конвертации ( мСек ).
Судя по вашему видео, тейлы маленькие (100х50)....

ProcessMessages позволит избежать фризов курсора и продолжить игру, даже если расчёт изображения не закончен. Делайте расчет  следующего элемента заранее, пока игрок двигает предыдущую фигуру. Либо как вы выразились, используйте "комбайн" - преобразуйте изображения в момент загрузки в БД,

максимальные размеры (основного) изображения 1100х640 , делится на 4, 16, 64 и 100, тайлы - 64(8х8) и 100 (10х10) проблем не создадут, через ProcessMessages вообще все плавно.. Можно создать условия и построить экран загрузки Тогда само (основное) изображение и тайлы держать в памяти, но что-то мне подсказывает, что это не хорошо, лучше использовать уже 2-ва готовых варианта изображения..

проблема только в весе преобразованной кортики у меня получается не менее 2-х МБ.

сделал и немного огорчился
процесс слишком долгий хотел воспользоваться  (application.processmessages;) но это меня только еще больше убило..

придется создавать программу (комбайн) которая будет добавлять и сразу преобразовывать изображения в БД

УРА !!!!!!! я это сделал !!!

так и знал, что все на много проще, чем в попадавшихся примерах

procedure Form1_OnShow (Sender: TObject; Action: string);
begin
  Form1.DBImage1.Picture.Bitmap.LoadFromFile('image.bmp');
end;

procedure Form1_Button1_OnClick (Sender: TObject; var Cancel: boolean);
var
i,j,r,g,b: integer;
c,d: TColor;
begin
for i :=0 to Form1.DBImage1.Picture.Width-1 do
for j :=0 to Form1.DBImage1.Picture.Height-1 do
begin
c :=Form1.DBImage1.Picture.Bitmap.Canvas.Pixels[  i,j];

d:=round((0.30*GetRValue(c))+(0.59*GetGValue(c))+(0.11*GetBValue(c)));

Form1.DBImage1.Picture.Bitmap.Canvas.Pixels[i,j] :=RGB(d,d,d);
end;
end;

function GetRValue(rgb: TColor): Byte;
begin
Result:=rgb and $000000ff;
end;

function GetGValue(rgb: TColor): Byte;
begin
Result:=(rgb shr 8) and $000000ff;
end;

function GetBValue(rgb: TColor): Byte;
begin
Result:=(rgb shr 16) and $000000ff;
end;

теперь подскажите как быть с тормозами при преобразовании

короче с начало нужно Color преобразовать в  RGB
а в MVD нет ColorToRGB();

просто закрасило часть картинки черным..

все равно не понимаю, возвращается тоже самое значение (((

в

c :=Form1.Image1.Picture.Bitmap.Canvas.Pixels[i-Form1.Image1.Left,j-Form1.Image1.Top];

постоянно получаю -1

загрузил изображение в bitmap (с)  читается

я вообще туда иду или как ?

procedure Form1_Button1_OnClick (Sender: TObject; var Cancel: boolean);
var
i,j: integer;
c,d: TColor;
begin
for i :=Form1.Image1.Left to Form1.Image1.Left+Form1.Image1.Width-1 do
for j :=Form1.Image1.Top to Form1.Image1.Top+Form1.Image1.Height-1 do
begin
c :=Form1.Image1.Picture.Bitmap.Canvas.Pixels[i-Form1.Image1.Left,j-Form1.Image1.Top];
d :=RGBToGray(c);
Form1.Image1.Picture.Bitmap.Canvas.Pixels[i-Form1.Image1.Left,j-Form1.Image1.Top] :=d;
end;
end;

function RGBToGray(RGBColor : TColor) : TColor;
var
Gray : byte;
begin
Gray :=Round((0.30*GetRValue(RGBColor))+
(0.59*GetGValue(RGBColor))+(0.11*GetBValue(RGBColor)));
Result :=RGB(Gray, Gray, Gray);
end;

function GetRValue(rgb: TColor): Byte;
begin
Result :=rgb and $000000ff;
end;

function GetGValue(rgb: TColor): Byte;
begin
Result :=(rgb shr 8) and $000000ff;
end;

function GetBValue(rgb: TColor): Byte;
begin
Result :=(rgb shr 16) and $000000ff;
end;

на сколько я понял эту тему
в каждом пикселе имеются оттенки 3-х цветов, вот их мне и нужно получить, преобразовать и вернуть обратно в этот пиксель..
но в ваши примерах я не могу понять как мне получить эти оттенки
без Get(R,G,B)Value  я конкретно забуксовал..

k245 wrote:

А в чем именно затруднения?

Доступ к пикселям картинки можно осуществить через канву, вот пример

в примерах в сети используются GetRValue, GetGValue, GetBValue, вот их я и не понимал чем заменить, так как в MVD их нет

продолжаю писать игру  (ПАЗЛЫ)
варианты в сети по преобразованию изображения есть но у меня так не получилось применить их в MVD..

цель преобразования ( создание подсказок )  и у меня это уже реализовано, но подсказки получаются  в цветном варианте, а нужен черно белый ...
видео
https://youtu.be/62V8WOg2nwQ

в роди как  закрытие отменяется таким образом

procedure Form1_OnClose (Sender: TObject; Action: TCloseAction);
begin
  Action := caFree;
end;

но у меня как всегда не работает..

помогите отменить закрытие главной формы ..

196

(12 replies, posted in Russian)

в новом проекте перехватывает
буду искать причину

197

(12 replies, posted in Russian)

vovka3003 wrote:

Великолепно...

sibprogsistem wrote:

как перехватить нажатие [ESC]? Мне нужно по этой клавише закрывать активную модальную форму.

Держи:

procedure FormKeyDown(Sender: TObject; var Key: Word; Shift, Alt, Ctrl: boolean);
begin
 if Key=27 then
 begin
     ShowMessage('Была нажата ESC в Форме');
     TForm(Sender).Close;
 end;
end;

begin
  ModalFm.KeyPreview := true;
  ModalFm.OnKeyDown := @FormKeyDown;
end.

нет, не работает
другие клавиши перехватывает но не ESC

198

(12 replies, posted in Russian)

vovka3003 wrote:

Отлично. А сделать что требуется? (Про "перехватить" слышали уже)

закрыть модальную форму...

199

(12 replies, posted in Russian)

vovka3003 wrote:
sibprogsistem wrote:

как перехватить нажатие [ESC] ?

Можно попробовать незаметно подкрасться и "перехватить".
Вопрос - где..? В главном окне программы? В модальной форме? Надо как-то правильней вопрос ставить. Подкреплять подробностями, готовым примером скрипта, который не работает, скриншотами...

В модальной форме

200

(12 replies, posted in Russian)

нашел почему не принимал тип

var Key: Char

но все равно нажатие не перехватывает