Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по Delphi (до версии 2009) - часть 5

Автор: mdid
Дата сообщения: 25.08.2009 20:01
хм..может в силу вашей необходимости вы делаете так...но зачем помещать в PageControl форму? по сути каждая страница это вам отдельная форма...вы как бы едите на велосипеде задом на перед...чет не пойму я такой ход
Автор: GoodRobin
Дата сообщения: 25.08.2009 21:29
Доброго времени суток!
Не могу в Edit вводить нецелые числа. Из этого Edit'a с помощью strtofloat работаю с числами, но только с целыми, а надо чтобы еще и нецелые. При вводе нецелых ругается Incompatible types: 'Integer' and 'Extended'
Подскажите пожалуйста. Заранее спасибо!
Автор: mdid
Дата сообщения: 25.08.2009 21:35
GoodRobin
возможно стоит галка NumbersOnly? уберите ее и вводите числа как строку
Автор: GoodRobin
Дата сообщения: 25.08.2009 21:53
mdid
Разобрался
Надо было убрать запрет на ввод "." и ","
Автор: mauar
Дата сообщения: 27.08.2009 03:11
Есть четыре панели, они расположены рядом друг с друг, вот таким образом:

Скриншот _1
http://pic.ipicture.ru/uploads/090827/GpBcSsW3V6.jpg

При развороте окна на весь экран эти панели съезжают,
для верхней левой панели в параметрах Anchors, свойство Left установил в True.
Для правой верхней панели свойство Right сделал в True.
Для нижних панелей я таже сделал выравнивание по левому и правому краю.

Теперь у меня панели расходятся по разным углам:
Скриншот_2
http://pic.ipicture.ru/uploads/090827/RnRXz2Hk61.jpg

Как мне сделать так чтобы панели когда окно разворачивалось на весь экран,
не только по левому и правому краю было выравнивание но и по центру, то есть чтобы расширялись и в окне было бы 4 панели плотно прикреплены друг к другу, в общем приняли бы такой же вид как при свернутом окне, на первом скриншоте?

Исходник моего творенья
Ссылка

Автор: Sampron
Дата сообщения: 27.08.2009 04:06
mauar
Примерно так: [more]
unit Unit1;

interface

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

type
TForm1 = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
Panel3: TPanel;
Panel4: TPanel;
procedure PanelSize;
procedure FormCreate(Sender: TObject);
procedure FormResize(Sender: TObject);
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.PanelSize;
begin
Panel1.SetBounds(0,0,Form1.ClientWidth div 2,Form1.ClientHeight div 2);
Panel2.SetBounds(Panel1.Width,0,Form1.ClientWidth div 2,Form1.ClientHeight div 2);
Panel3.SetBounds(0,Panel1.Height,Form1.ClientWidth div 2,Form1.ClientHeight div 2);
Panel4.SetBounds(Panel3.Width,Panel2.Height,Form1.ClientWidth div 2,Form1.ClientHeight div 2);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
PanelSize;
end;

procedure TForm1.FormResize(Sender: TObject);
begin
PanelSize;
end;

end.
[/more]
Автор: Dign
Дата сообщения: 27.08.2009 15:00
GoodRobin

Цитата:
Не могу в Edit вводить нецелые числа. Из этого Edit'a с помощью strtofloat работаю с числами, но только с целыми, а надо чтобы еще и нецелые. При вводе нецелых ругается Incompatible types: 'Integer' and 'Extended'


Я обычно делаю, что нибудь в этом роде

Код:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0','1','2','3','4','5','6','7','8','9',',','.'])
then Key := #0;
end;
Автор: Frodo_Torbins
Дата сообщения: 27.08.2009 16:33
mauar
В старших версиях дельфей есть FlowPanel и GridPanel, попробуйте их.
Автор: VandB
Дата сообщения: 27.08.2009 20:39
На днях прочитал, что Делфи Будет поддерживать WinFX, это реальность????
Автор: Frodo_Torbins
Дата сообщения: 28.08.2009 14:44
VandB
Какой еще WinFX, и где вы это прочитали?
Автор: VandB
Дата сообщения: 28.08.2009 15:55
Frodo_Torbins
Мда...... WinFX. На 1 форуме посвешенному программированию, и на оф сайте чтото было подобное. Визуал студио уже потдерживает WinFX.
Автор: Frodo_Torbins
Дата сообщения: 28.08.2009 16:42
VandB
А я уж думал майкрософт опять что то придумал. А это всего лишь старое название .NET Framework 3.0. Так вот, .NET Framework 3.x уже давно и успешно поддерживается в Delphi Prism.
Автор: VandB
Дата сообщения: 28.08.2009 20:00
Frodo_Torbins
Ну не совсем так и старое....
Автор: spasius
Дата сообщения: 28.08.2009 20:16
ну обычный .Net Framework и в чем прикол не пойму ... просто новые понты Мелкомягких ...
Автор: Granmer
Дата сообщения: 29.08.2009 12:36
Создаю несколько объектов в рантайме, один из них кнопка "удалить". По нажатию, на которую удаляются созданные обекты и сама кнопка. Как правильно удалить из события onClick саму кнопку "удалить", которая вызвала обработчик? Остальные объекты удаляются нормально, а вот с этой кнопкой - эксепшен вылетает, что логично, но не знаю как правильно. Подскажите, плиз, кому не сложно.
Автор: DreamKHV
Дата сообщения: 29.08.2009 13:29
Granmer, попробуй так.

Код:
var
Btn: hWnd;

procedure ButtonClick(Sender: TObject);
begin;
SendMessage(Btn, WM_SYSCOMMAND, SC_CLOSE, 0);
end;

procedure CreateButton;
var
Button: TButton;
begin;
Button := TButton.Create(Self);
Button.Parent := Self;
Button.OnClick := ButtonClick;
Button.Visible := true;
Btn := Button.Handle;
end;
Автор: Frodo_Torbins
Дата сообщения: 29.08.2009 14:34
Granmer
Идея с посылкой сообщения показаная выше правильная, но я бы делал иначе. Во-первых использовал PostMessage вместо SendMessage. Во-вторых отправлял бы собственное сообщение форме (WM_USER+n). Ну и в обработчике сообщения всеже удалял бы сам обьект кнопку.
Автор: Bonivur
Дата сообщения: 29.08.2009 18:06
Мне надо выводить на TImage (на котором уже есть фон Bitmap1) маленькую картинку (Bitmap2). Картинка - красный кружок на белом фоне (25х25 пикс.). Так вот как я не стараюсь, не могу выводить так, чтобы белый фон стал прозрачным и виден был только красный кружок. Пробовал и Transparent свойство Canvas и BrushCopy и Draw. Все хорошо получается когда картинка большая (100 на 100 пикселей), а вот с такой маленькой получается красный кружок в обрамлении белой рамки. То есть, не до конца фон убирается. Подскажите вообще какой механизм вывода на один Bitmap другого Bitmap'a с прозрачным фоном?
Автор: RaB0TNiK
Дата сообщения: 29.08.2009 18:38
Может уже не актуально, но вот способ лучше

Код:
procedure ButtonClick(Sender: TObject);
begin
TButton(Sender).Destroy;
end;
Автор: Frodo_Torbins
Дата сообщения: 29.08.2009 19:17
Bonivur
Код в студию, и пример изображений тоже.
RaB0TNiK
Этот способ потенциально может выдавать AV.
Автор: Bonivur
Дата сообщения: 29.08.2009 21:10
Frodo_Torbins

Цитата:
Код в студию, и пример изображений тоже.

Картинка (B2 загружается из ресурса BUTTON) -

Код :

Код:
var
B1,B2 :TBitmap;
begin
B1 := TBitmap.Create; //не имеет значения. создется в другом месте, простая картинка
//отображается нормально, с ней проблем нет никаких
B2 := TBitmap.Create;

B2.LoadFromResources(HInstance,'BUTTON'); //подгружаем картинку 2
B2.Transparent:=true;
B2.TransparentColor:=B.Canvas.Pixels[1,1];{пробовал другие значения для пикслеей -или еще хуже или то же самое - по краям красного кружка видны черные очертания (цвет фона)}

B1.Canvas.Draw(0,0,B2);
Автор: ShIvADeSt
Дата сообщения: 30.08.2009 00:03
Bonivur
Есть предположение что возле самого кружка цвет пикселя отличен от пикселя в (1,1). Попробуй посмотреть в каком нить просмотрщике, с указанием прозрачного пиксель (1,1).У меня нечто подобное было, когда PNG сохранял как BMP.
Автор: Bonivur
Дата сообщения: 30.08.2009 09:18
ShIvADeSt

Цитата:
Есть предположение что возле самого кружка цвет пикселя отличен от пикселя в (1,1). Попробуй посмотреть в каком нить просмотрщике, с указанием прозрачного пиксель (1,1).У меня нечто подобное было, когда PNG сохранял как BMP.

Да, ты прав, убрал нестыковки с цветом, все вроде нормально, но вот только никак не избавиться от зазубрин по краям круглой кнопки (ровная линия никак не выходит при таком масштабе). Не знаю как с этим бороться. При таких малых пикселях выходит "лестница". Можно ли рисовать с уменьшением размера картинки? То есть вставлять bmp больший по размеру так чтобы на первом BMP (фоне) он выглядел бы меньше по размеру. То есть масштабировать не саму исходную картинку, а ее вывод на холст. Короче изменение размера налету как нибудь можно сделать или какой размер у картинки такой в результате и будет?
Автор: Frodo_Torbins
Дата сообщения: 30.08.2009 10:10
Bonivur
Конечно можно, но я бы на вашем месте просто использовал PNG или битмап с альфа-каналом.
Автор: Bonivur
Дата сообщения: 30.08.2009 10:37
Frodo_Torbins

Цитата:
Конечно можно, но я бы на вашем месте просто использовал PNG или битмап с альфа-каналом.

1) Как возможно? Какая процедура позволяет изменять размер выводимого bitmap'a? Пробовал StretchDraw, но она как-то искажает рисунок, появляются точки на нем.
2) Разве можно использовать PNG файлы в Дельфи (в частности в ресурсах)? Если не трудно подробнее не эту тему. Где найти исходники примеров такого использования? И что такое битмап с альфаканалом. Не слышал про такой. Я думал альфаканал поддерживают только GIF и PNG. Мне надо чтобы графика загружалась из ресурсов программы.
Автор: Frodo_Torbins
Дата сообщения: 30.08.2009 11:50

Цитата:
StretchDraw, но она как-то искажает рисунок, появляются точки на нем.
Именно поэтому я и предложил PNG.

Цитата:
Разве можно использовать PNG файлы в Дельфи (в частности в ресурсах)?
В ресурсы вообще можно запихнуть все что угодно. А для работы с PNG можно использовать например TPNGImage.

Цитата:
И что такое битмап с альфаканалом.
Это битмап с 32 битами на пиксель. Причем в четвертом байте должны лежать значения альфаканала. Вот моя попытка работы с такими изображениями: http://delphikingdom.com/asp/answer.asp?IDAnswer=63111 А вот функция от майкрософта: AlphaBlend.
Автор: data man
Дата сообщения: 30.08.2009 12:24
Bonivur
А если нужна более "продвинутая" работа с изображениями, то известная библиотека Graphics32. Тут и слои как в Photoshop, и несколько алгоритмов сглаживания, трансформации и куча других возможностей. Очень быстрая.
В общем это отдельная большая тема.
Автор: Bonivur
Дата сообщения: 30.08.2009 12:33
Frodo_Torbins
Пишу код как указано сдесь...

Код:
//в файле ресурсов добавляем строку
PNG RCDATA "PNG.png"
//в файле ресурсов добавляем строку

interface

uses
..., PNGImage;

var
ImagePNG: TImage;

implementation

{$R *.dfm}
{$R myres.res}


procedure LoadPNGFromRes;
var
MyPNG: TPNGObject;
ResStream: TResourceStream;
begin
MyPNG:=TPNGObject.Create;
ResStream:=TResourceStream.Create(H Instance,'PNG',RT_RCDATA);
try
MyPNG.LoadFromStream(ResStream);
ImagePNG.Picture.Assign(MyPNG);
finally
MyPNG.Free;
ResStream.Free;
end;
end;

Но при попытке рисовать на Bitmape (
Bitmap.Canvas.Draw(10,10,MyImage.Picture.Graphics) )
выдает ошибку.
Автор: Frodo_Torbins
Дата сообщения: 30.08.2009 13:50
Bonivur
А какую ошибку?
Можно еще попробовать так: Bitmap.Canvas.Draw(10,10,MyPNG), только тогда переменная MyPNG должна быть глобальной, а ImagePNG можно будет убрать.
Автор: Bonivur
Дата сообщения: 30.08.2009 14:20
Frodo_Torbins
вот код, который работает (для модуля PNGImage)

Код:
PNG RCDATA "PNG.png"
//в файле ресурсов добавляем строку

interface

uses
..., PNGImage;

implementation

{$R *.dfm}
{$R myres.res}

procedure LoadPNGFromRes;
var
MyPNG: TPNGObject;
ResStream: TResourceStream;
begin
MyPNG:=TPNGObject.Create;
ResStream:=TResourceStream.Create(HInstance,'PNG',RT_RCDATA);
try
MyPNG.LoadFromStream(ResStream);
Bitmap.Canvas.Draw(10,10,MyPNG);
finally
MyPNG.Free;
ResStream.Free;
end;
end;

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

Предыдущая тема: Clipper 5


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.